Skip to content

Instantly share code, notes, and snippets.

View jaekwon's full-sized avatar

Jae Kwon jaekwon

View GitHub Profile
STACK:
%v goroutine 22 [running]:
command-line-arguments.timeoutWaitGroup(0xc4200f6b40, 0x7, 0xc4201d1180, 0xc420058bc0, 0x7, 0x7)
/gocode/src/github.com/tendermint/tendermint/consensus/reactor_test.go:416 +0x4b8
command-line-arguments.waitForBlockWithUpdatedValsAndValidateIt(0xc4200f6b40, 0x7, 0xc420af8d80, 0xc420adc780, 0x7, 0x7, 0xc420058bc0, 0x7, 0x7)
/gocode/src/github.com/tendermint/tendermint/consensus/reactor_test.go:347 +0xe8
command-line-arguments.TestReactorValidatorSetChanges(0xc4200f6b40)
/gocode/src/github.com/tendermint/tendermint/consensus/reactor_test.go:231 +0x710
testing.tRunner(0xc4200f6b40, 0x18aa860)
diff --git a/codec.go b/codec.go
index f3f2eaf..35a6c3a 100644
--- a/codec.go
+++ b/codec.go
@@ -219,7 +219,7 @@ func (cdc *Codec) getTypeInfoFromPrefix_rlock(iinfo *TypeInfo, pb PrefixBytes) (
return
}
if len(infos) > 1 {
- err = fmt.Errorf("Conflicting concrete types registered for %X: e.g. %v and %v.", pb)
+ err = fmt.Errorf("Conflicting concrete types registered for %X: e.g. %v and %v.", pb, infos[0].Type, infos[1].Type)
```
sdk.ChainDecorators(
...
customTxParseDecorator,
auth.Decorator(perms.SetFn("AUTH")),
coins.Decorator(perms.Get("AUTH"), perms.SetFn("COINS")), // set ctx.Set(coinstore.coinsPerm, coinstore.NewCoinStore(ms.GetKVStore("main")))
fees.Decorator(perms.Get("COINS")) // ctx.Get(coinstore.coinsPerm).(CoinStore),
sketchy.Decorator, // doesn't have authKey
...
.WithHandler(
@jaekwon
jaekwon / golangcapabilities.md
Last active December 16, 2017 21:04
Toward a capabilities-based security model for Golang
balance = 1.0 # amount of reserve tokens
supply = 1000.0 # amount of smart tokens
crr = 0.001 # arbitrary reserve ratio
def printInfo():
price = computePrice()
print "balance", balance, "supply", supply, "price", price
def computePrice():
return balance / (supply * crr)
* state/execution.go
- // ApplyBlock executes the block, then commits and updates the mempool atomically
becomes...
// ApplyBlock executes the block, updates state w/ ABCI responses, then commits and updates the mempool atomically, then saves state
- execBlockOnProxyApp should return relevant ABCI responses
- Between s.ExecBlock and s.CommitStateUpdateMempool, add a function to save ABI responses, 's.SaveABCIResponses'. Make the ABCI responses a simple field of state.State. Make it a pointer, and have State.Copy() just copy the pointer -- ABCI responses are not mutable.
- Move call to 's.SetBlockAndValidators' to between s.SaveABCIResponses and s.CommitStateUpdateMempool. Also move calls to 'updateValidators' and 'IncrementAccum' into s.SetBlockAndValidators. Change s.SetBlockAndValidators to include ABCI responses as arguments.
- After s.CommitStateUpdateMempool, save the state.
* In state/state.go
- Change 'updated at end of ExecBlock' to 'updated at end of SetBlockAndValidators'
@jaekwon
jaekwon / types.go
Created January 16, 2017 11:31
Basecoin basic types
// A Basecoin user account
type Account struct {
PubKey crypto.PubKey
Sequence int
Balance Coins
}
type Coin struct {
Denom string // e.g. "BTC", "ATOM"
Amount int64
@jaekwon
jaekwon / plugin.go
Last active January 16, 2017 05:29
Basecoin Plugin Interface
type Plugin interface {
// Name of this plugin, should be short.
Name() string
// Run a transaction from ABCI DeliverTx
RunTx(store KVStore, ctx CallContext, txBytes []byte) (res abci.Result)
// Other ABCI message handlers
SetOption(store KVStore, key string, value string) (log string)
InitChain(store KVStore, vals []*abci.Validator)
@jaekwon
jaekwon / gist:000022471ecb6a4978424efac583c977
Created October 16, 2016 22:38
Issue #304 filtered CSWAL for offending node
{"time":"2016-10-16T20:57:31.752Z","msg":[1,{"height":47595,"round":0,"step":"RoundStepNewHeight"}]}
{"time":"2016-10-16T20:57:32.780Z","msg":[3,{"duration":999834609,"height":47595,"round":0,"step":1}]}
{"time":"2016-10-16T20:57:32.780Z","msg":[1,{"height":47595,"round":0,"step":"RoundStepPropose"}]}
{"time":"2016-10-16T20:57:33.174Z","msg":[2,{"msg":[20,{"ValidatorIndex":1,"Vote":{"height":47595,"round":0,"type":1,"block_hash":"D3645CB2EF4FB03DCC7FB77C5CEE969765EF78BF","block_parts_header":{"total":13,"hash":"C28C08047DABB2E345B09BC77F0384453E3BED7C"},"signature":"E3875E3286F0581BA303C357FCEA9AF20255669A0B83C6318D11D220F6FDC9743F41BF1007B6C9C008C9F44DB1B7F8BE404F672C57DEC5BD26E5175A6F27230C"}}],"peer_key":"AC86D51269961BAAC1FCB58709E2499CD14CC4845DEF847D58A4BF73C578BA9B"}]}
{"time":"2016-10-16T20:57:33.183Z","msg":[2,{"msg":[20,{"ValidatorIndex":2,"Vote":{"height":47595,"round":0,"type":1,"block_hash":"D3645CB2EF4FB03DCC7FB77C5CEE969765EF78BF","block_parts_header":{"total":13,"hash":"C28C08047DABB2E345B09BC
@jaekwon
jaekwon / 2of3.md
Created July 7, 2016 21:29
2-of-3 Escrow Example with Electrum (Updated May 2014)

2-of-3 Escrow Example with Electrum

This is gmaxwell's 2-of-2 escrow example, adapted to Electrum and to a lesser extent, GFM.

The Scenario

Archey wants to pay Bertha 0.001 BTC for a Twitter Platinum invite, but prevent Bertha from cheating him. Archey selects Iceland to act as