Skip to content

Instantly share code, notes, and snippets.

View jaekwon's full-sized avatar

Jae Kwon jaekwon

View GitHub Profile
@jaekwon
jaekwon / amino_proto3_proposal_1.md
Last active December 20, 2019 02:54
Jae's Amino interface/proto3-compat proposal (version 1)

Proposed solution:

  • a Go interface is encoded as a top-level Proto3 message. In the example below, the Animal go interface is represented by a Animal proto3 message.
type Animal interface
type Dog struct
type Cat struct
type House struct {
function handleConnCloseTry()
  {state, version, counterpartyIdentifier, rootOfTrust} = Get(identifier)
  assert(state == OPEN)
  assert(identifierCounterparty == counterpartyIdentifier)
  assert(verify(roofOfTrust, proofInit, (counterpartyIdentifier, TRYCLOSE)))
  state = CLOSED
  Set(identifier, (state, version, counterpartyIdentifier, rootOfTrust))

Summary

  • Agree on a plan to set up a testnet using the Cosmos SDK v0.34.0 release, along with mainnet conditions, plus transfer enablement and increased block size, as a testing ground.

  • After this proposal is passed and after successful testing, and after the software Git hash for v0.34.0 has been finalized, conduct a second proposal which includes the specific Git hash, using expedited rules to determine acceptance.

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