Skip to content

Instantly share code, notes, and snippets.

View jaekwon's full-sized avatar

Jae Kwon jaekwon

View GitHub Profile
@jaekwon
jaekwon / gist:8025b9f3a482b3219a21
Created May 22, 2015 15:33
Example of Java inheritance that overrides a baseclass's behavior
import java.util.*;
import java.lang.*;
import java.io.*;
class Human {
public Human() {}
public void walk() {
this.moveFeet();
}
public void moveFeet() {
@jaekwon
jaekwon / gist:0f6e5555ab6a592aa4c8
Last active August 29, 2015 14:21
Example of Go composition
// Compare to https://gist.github.com/jaekwon/8025b9f3a482b3219a21
package main
import "fmt"
type Human struct{}
func (h Human) walk() { h.moveFeet() }
func (h Human) moveFeet() { fmt.Println("Human.walkFeet") }
@jaekwon
jaekwon / gist:368238e7b4f4ea4925dc
Created May 24, 2015 22:27
Tendermint + GopherJS
39015 default
5353 gopherjs/js
4667 runtime
847 errors
1926 sync/atomic
22451 sync
4968 io
18733 unicode
6980 unicode/utf8

Keybase proof

I hereby claim:

  • I am jaekwon on github.
  • I am jaekwon (https://keybase.io/jaekwon) on keybase.
  • I have a public key whose fingerprint is F3E6 04B9 02C6 3CC5 EA2E 4FB6 BBCF 2AC7 7899 206D

To claim this, I am signing this object:

@jaekwon
jaekwon / gist:76bcb80081ce39b1588d
Created June 29, 2015 20:33
SortString in Golang
package main
import (
"sort"
"testing"
)
// SortString sorts a string
func SortString(w string) string {
wBytes := uint8Slice([]uint8(w))
@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

@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 / 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 / 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
* 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'