diff --git a/Gopkg.lock b/Gopkg.lock
index e65882cd76c3a48613ec63e066c7468b9dab7a0a..c3b36efb1f38397ec3ce4ad435d39e8c70902e52 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -332,8 +332,7 @@
     "db",
     "flowrate",
     "log",
-    "merkle",
-    "test"
+    "merkle"
   ]
   revision = "692f1d86a6e2c0efa698fd1e4541b68c74ffaf38"
   version = "v0.8.4"
@@ -485,6 +484,6 @@
 [solve-meta]
   analyzer-name = "dep"
   analyzer-version = 1
-  inputs-digest = "766fecea2ba1613d7d686ddae1228a47ee1d5e62e93e6ab6fe9dc5812207c071"
+  inputs-digest = "65c36d346ec9b2591985beee41737b31df479ef48759f4ff4ac165c0108f5296"
   solver-name = "gps-cdcl"
   solver-version = 1
diff --git a/Makefile b/Makefile
index 9ebc4982f16910ecfa71e009fdaacc66ba49c814..11614f0d08e67081d8596ab3a49fefecbe38efe3 100644
--- a/Makefile
+++ b/Makefile
@@ -70,8 +70,8 @@ protobuf_deps:
 keys/pbkeys/keys.pb.go: keys/pbkeys/keys.proto
 	@protoc -I ./keys/pbkeys keys/pbkeys/keys.proto --go_out=plugins=grpc:keys/pbkeys
 
-rpc/grpc/burrow.pb.go: rpc/burrow
-	@protoc -I ./rpc/grpc rpc/grpc/burrow.proto --go_out=plugins=grpc:rpc/grpc
+rpc/burrow/burrow.pb.go: rpc/burrow
+	@protoc -I ./rpc/burrow rpc/burrow/burrow.proto --go_out=plugins=grpc:rpc/burrow
 ### Dependency management for github.com/hyperledger/burrow
 
 # erase vendor wipes the full vendor directory
@@ -160,7 +160,7 @@ docker_build: check commit_hash
 
 # test burrow
 .PHONY: test
-test: check
+test: fix
 	@go test ${PACKAGES_NOVENDOR}
 
 .PHONY: test_keys
@@ -169,6 +169,7 @@ test_keys: build_db
 
 .PHONY: test_integration
 test_integration: test_keys
+	@go test -tags integration ./rpc/burrow/integration
 	@go test -tags integration ./rpc/v0/integration
 	@go test -tags integration ./rpc/tm/integration
 
diff --git a/account/account.go b/account/account.go
index 98053e91c768668cf5bcd671b759e0f15469e523..a708bb673157bc53a46e3d73459bf2c5d8689e8c 100644
--- a/account/account.go
+++ b/account/account.go
@@ -15,15 +15,13 @@
 package account
 
 import (
-	"bytes"
 	"encoding/json"
 	"fmt"
 
-	"encoding/gob"
-
 	"github.com/hyperledger/burrow/binary"
 	"github.com/hyperledger/burrow/crypto"
 	ptypes "github.com/hyperledger/burrow/permission/types"
+	"github.com/tendermint/go-amino"
 )
 
 var GlobalPermissionsAddress = crypto.Address(binary.Zero160)
@@ -302,14 +300,10 @@ func (caw concreteAccountWrapper) Copy() MutableAccount {
 // concreteAccount Wrapper
 //----------------------------------------------
 // Encoding/decoding
+var cdc = amino.NewCodec()
 
 func (acc *ConcreteAccount) Encode() ([]byte, error) {
-	buf := new(bytes.Buffer)
-	err := gob.NewEncoder(buf).Encode(acc)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
+	return cdc.MarshalBinary(acc)
 }
 
 func Decode(accBytes []byte) (Account, error) {
@@ -322,8 +316,7 @@ func Decode(accBytes []byte) (Account, error) {
 
 func DecodeConcrete(accBytes []byte) (*ConcreteAccount, error) {
 	ca := new(ConcreteAccount)
-	buf := bytes.NewBuffer(accBytes)
-	err := gob.NewDecoder(buf).Decode(ca)
+	err := cdc.UnmarshalBinary(accBytes, ca)
 	if err != nil {
 		return nil, fmt.Errorf("could not convert decoded account to *ConcreteAccount: %v", err)
 	}
diff --git a/consensus/tendermint/abci/app.go b/consensus/tendermint/abci/app.go
index 77ca81f230458460e0843934258308e06ecb0ad7..6cca22aef6580d1feeeb653adb3516be3a3827b9 100644
--- a/consensus/tendermint/abci/app.go
+++ b/consensus/tendermint/abci/app.go
@@ -37,15 +37,13 @@ type App struct {
 
 var _ abciTypes.Application = &App{}
 
-func NewApp(blockchain *bcm.Blockchain,
-	checker execution.BatchExecutor,
-	committer execution.BatchCommitter,
-	logger *logging.Logger) *App {
+func NewApp(blockchain *bcm.Blockchain, checker execution.BatchExecutor, committer execution.BatchCommitter,
+	txDecoder txs.Decoder, logger *logging.Logger) *App {
 	return &App{
 		blockchain: blockchain,
 		checker:    checker,
 		committer:  committer,
-		txDecoder:  txs.NewJSONCodec(),
+		txDecoder:  txDecoder,
 		logger:     logger.WithScope("abci.NewApp").With(structure.ComponentKey, "ABCI_App"),
 	}
 }
diff --git a/consensus/tendermint/tendermint.go b/consensus/tendermint/tendermint.go
index 00e2ce065f984815d65c9cfb0864b5d3ed42f2de..175cbab85273ca972dbc4434d0e8ef6b51f63f75 100644
--- a/consensus/tendermint/tendermint.go
+++ b/consensus/tendermint/tendermint.go
@@ -13,6 +13,7 @@ import (
 	"github.com/hyperledger/burrow/genesis"
 	"github.com/hyperledger/burrow/logging"
 	"github.com/hyperledger/burrow/logging/structure"
+	"github.com/hyperledger/burrow/txs"
 	tm_crypto "github.com/tendermint/go-crypto"
 	"github.com/tendermint/tendermint/config"
 	"github.com/tendermint/tendermint/node"
@@ -46,14 +47,9 @@ func (n *Node) Close() {
 	}
 }
 
-func NewNode(
-	conf *config.Config,
-	privValidator tm_types.PrivValidator,
-	genesisDoc *tm_types.GenesisDoc,
-	blockchain *bcm.Blockchain,
-	checker execution.BatchExecutor,
-	committer execution.BatchCommitter,
-	logger *logging.Logger) (*Node, error) {
+func NewNode(conf *config.Config, privValidator tm_types.PrivValidator, genesisDoc *tm_types.GenesisDoc,
+	blockchain *bcm.Blockchain, checker execution.BatchExecutor, committer execution.BatchCommitter,
+	txDecoder txs.Decoder, logger *logging.Logger) (*Node, error) {
 
 	var err error
 	// disable Tendermint's RPC
@@ -65,7 +61,7 @@ func NewNode(
 	}
 
 	nde := &Node{}
-	app := abci.NewApp(blockchain, checker, committer, logger)
+	app := abci.NewApp(blockchain, checker, committer, txDecoder, logger)
 	conf.NodeKeyFile()
 	nde.Node, err = node.NewNode(conf, privValidator,
 		proxy.NewLocalClientCreator(app),
diff --git a/execution/names/names.go b/execution/names/names.go
index 1eea378b17d12a53c3cde4a1bb19b7b4661e2ee1..96cd2f1dae4cdd85e07d4ccedcf36495901d0c7c 100644
--- a/execution/names/names.go
+++ b/execution/names/names.go
@@ -15,10 +15,8 @@
 package names
 
 import (
-	"bytes"
-	"encoding/gob"
-
 	"github.com/hyperledger/burrow/crypto"
+	"github.com/tendermint/go-amino"
 )
 
 var (
@@ -49,19 +47,15 @@ type Entry struct {
 	Expires uint64
 }
 
+var cdc = amino.NewCodec()
+
 func (e *Entry) Encode() ([]byte, error) {
-	buf := new(bytes.Buffer)
-	err := gob.NewEncoder(buf).Encode(e)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
+	return cdc.MarshalBinary(e)
 }
 
 func DecodeEntry(entryBytes []byte) (*Entry, error) {
 	entry := new(Entry)
-	buf := bytes.NewBuffer(entryBytes)
-	err := gob.NewDecoder(buf).Decode(entry)
+	err := cdc.UnmarshalBinary(entryBytes, entry)
 	if err != nil {
 		return nil, err
 	}
diff --git a/execution/transactor.go b/execution/transactor.go
index de732e5d0b959e179be13e2df2df14db65144f8f..6401bd28d8f2ad72435f94bfb6c39cc96ed08267 100644
--- a/execution/transactor.go
+++ b/execution/transactor.go
@@ -73,21 +73,21 @@ func NewTransactor(tip *blockchain.Tip, eventEmitter event.Emitter,
 
 // Run a contract's code on an isolated and unpersisted state
 // Cannot be used to create new contracts
-func (trans *Transactor) Call(reader state.Reader, fromAddress, toAddress crypto.Address,
+func (trans *Transactor) Call(reader state.Reader, fromAddress, address crypto.Address,
 	data []byte) (call *Call, err error) {
 
-	if evm.IsRegisteredNativeContract(toAddress.Word256()) {
+	if evm.IsRegisteredNativeContract(address.Word256()) {
 		return nil, fmt.Errorf("attempt to call native contract at address "+
 			"%X, but native contracts can not be called directly. Use a deployed "+
-			"contract that calls the native function instead", toAddress)
+			"contract that calls the native function instead", address)
 	}
 	// This was being run against CheckTx cache, need to understand the reasoning
-	callee, err := state.GetMutableAccount(reader, toAddress)
+	callee, err := state.GetMutableAccount(reader, address)
 	if err != nil {
 		return nil, err
 	}
 	if callee == nil {
-		return nil, fmt.Errorf("account %s does not exist", toAddress)
+		return nil, fmt.Errorf("account %s does not exist", address)
 	}
 	caller := acm.ConcreteAccount{Address: fromAddress}.MutableAccount()
 	txCache := state.NewCache(reader)
@@ -203,20 +203,15 @@ func (trans *Transactor) Transact(sequentialSigningAccount *SequentialSigningAcc
 	}
 	defer unlock()
 
-	callTx, err := trans.formulateCallTx(inputAccount, address, data, gasLimit, fee)
+	txEnv, err := trans.formulateCallTx(inputAccount, address, data, gasLimit, fee)
 	if err != nil {
 		return nil, err
 	}
-	// Got ourselves a tx.
-	err = callTx.Sign(inputAccount)
-	if err != nil {
-		return nil, err
-	}
-	return trans.BroadcastTx(callTx)
+	return trans.BroadcastTx(txEnv)
 }
 
-func (trans *Transactor) TransactAndHold(sequentialSigningAccount *SequentialSigningAccount, address *crypto.Address, data []byte, gasLimit,
-	fee uint64) (*evm_events.EventDataCall, error) {
+func (trans *Transactor) TransactAndHold(ctx context.Context, sequentialSigningAccount *SequentialSigningAccount,
+	address *crypto.Address, data []byte, gasLimit, fee uint64) (*evm_events.EventDataCall, error) {
 
 	inputAccount, unlock, err := sequentialSigningAccount.Lock()
 	if err != nil {
@@ -261,6 +256,8 @@ func (trans *Transactor) TransactAndHold(sequentialSigningAccount *SequentialSig
 	defer timer.Stop()
 
 	select {
+	case <-ctx.Done():
+		return nil, ctx.Err()
 	case <-timer.C:
 		return nil, fmt.Errorf("transaction timed out TxHash: %X", expectedReceipt.TxHash)
 	case eventDataCall := <-ch:
@@ -313,8 +310,8 @@ func (trans *Transactor) Send(sequentialSigningAccount *SequentialSigningAccount
 	return trans.BroadcastTx(sendTxEnv)
 }
 
-func (trans *Transactor) SendAndHold(sequentialSigningAccount *SequentialSigningAccount, toAddress crypto.Address,
-	amount uint64) (*txs.Receipt, error) {
+func (trans *Transactor) SendAndHold(ctx context.Context, sequentialSigningAccount *SequentialSigningAccount,
+	toAddress crypto.Address, amount uint64) (*txs.Receipt, error) {
 
 	inputAccount, unlock, err := sequentialSigningAccount.Lock()
 	if err != nil {
@@ -354,6 +351,8 @@ func (trans *Transactor) SendAndHold(sequentialSigningAccount *SequentialSigning
 	defer timer.Stop()
 
 	select {
+	case <-ctx.Done():
+		return nil, ctx.Err()
 	case <-timer.C:
 		return nil, fmt.Errorf("transaction timed out TxHash: %X", expectedReceipt.TxHash)
 	case sendTx := <-wc:
diff --git a/rpc/burrow/burrow.pb.go b/rpc/burrow/burrow.pb.go
new file mode 100644
index 0000000000000000000000000000000000000000..37ec3405d0336144b4a771168c965602c264aecc
--- /dev/null
+++ b/rpc/burrow/burrow.pb.go
@@ -0,0 +1,4842 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: burrow.proto
+
+package burrow
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+import (
+	context "golang.org/x/net/context"
+	grpc "google.golang.org/grpc"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// #BEGIN(common)
+// Common Messages
+type Empty struct {
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Empty) Reset()         { *m = Empty{} }
+func (m *Empty) String() string { return proto.CompactTextString(m) }
+func (*Empty) ProtoMessage()    {}
+func (*Empty) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{0}
+}
+func (m *Empty) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Empty.Unmarshal(m, b)
+}
+func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Empty.Marshal(b, m, deterministic)
+}
+func (dst *Empty) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Empty.Merge(dst, src)
+}
+func (m *Empty) XXX_Size() int {
+	return xxx_messageInfo_Empty.Size(m)
+}
+func (m *Empty) XXX_DiscardUnknown() {
+	xxx_messageInfo_Empty.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Empty proto.InternalMessageInfo
+
+type InputAccount struct {
+	PrivateKey           []byte   `protobuf:"bytes,1,opt,name=privateKey,proto3" json:"privateKey,omitempty"`
+	Address              []byte   `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *InputAccount) Reset()         { *m = InputAccount{} }
+func (m *InputAccount) String() string { return proto.CompactTextString(m) }
+func (*InputAccount) ProtoMessage()    {}
+func (*InputAccount) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{1}
+}
+func (m *InputAccount) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_InputAccount.Unmarshal(m, b)
+}
+func (m *InputAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_InputAccount.Marshal(b, m, deterministic)
+}
+func (dst *InputAccount) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_InputAccount.Merge(dst, src)
+}
+func (m *InputAccount) XXX_Size() int {
+	return xxx_messageInfo_InputAccount.Size(m)
+}
+func (m *InputAccount) XXX_DiscardUnknown() {
+	xxx_messageInfo_InputAccount.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_InputAccount proto.InternalMessageInfo
+
+func (m *InputAccount) GetPrivateKey() []byte {
+	if m != nil {
+		return m.PrivateKey
+	}
+	return nil
+}
+
+func (m *InputAccount) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+type FilterData struct {
+	Field                string   `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"`
+	Op                   string   `protobuf:"bytes,2,opt,name=op,proto3" json:"op,omitempty"`
+	Value                string   `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *FilterData) Reset()         { *m = FilterData{} }
+func (m *FilterData) String() string { return proto.CompactTextString(m) }
+func (*FilterData) ProtoMessage()    {}
+func (*FilterData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{2}
+}
+func (m *FilterData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FilterData.Unmarshal(m, b)
+}
+func (m *FilterData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FilterData.Marshal(b, m, deterministic)
+}
+func (dst *FilterData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FilterData.Merge(dst, src)
+}
+func (m *FilterData) XXX_Size() int {
+	return xxx_messageInfo_FilterData.Size(m)
+}
+func (m *FilterData) XXX_DiscardUnknown() {
+	xxx_messageInfo_FilterData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FilterData proto.InternalMessageInfo
+
+func (m *FilterData) GetField() string {
+	if m != nil {
+		return m.Field
+	}
+	return ""
+}
+
+func (m *FilterData) GetOp() string {
+	if m != nil {
+		return m.Op
+	}
+	return ""
+}
+
+func (m *FilterData) GetValue() string {
+	if m != nil {
+		return m.Value
+	}
+	return ""
+}
+
+type FilterListParam struct {
+	Filters              []*FilterData `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *FilterListParam) Reset()         { *m = FilterListParam{} }
+func (m *FilterListParam) String() string { return proto.CompactTextString(m) }
+func (*FilterListParam) ProtoMessage()    {}
+func (*FilterListParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{3}
+}
+func (m *FilterListParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_FilterListParam.Unmarshal(m, b)
+}
+func (m *FilterListParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_FilterListParam.Marshal(b, m, deterministic)
+}
+func (dst *FilterListParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_FilterListParam.Merge(dst, src)
+}
+func (m *FilterListParam) XXX_Size() int {
+	return xxx_messageInfo_FilterListParam.Size(m)
+}
+func (m *FilterListParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_FilterListParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FilterListParam proto.InternalMessageInfo
+
+func (m *FilterListParam) GetFilters() []*FilterData {
+	if m != nil {
+		return m.Filters
+	}
+	return nil
+}
+
+// This is here because it is required by both transactions and namereg
+// This situation can be remedied multiple ways
+type TxReceipt struct {
+	TxHash               []byte   `protobuf:"bytes,1,opt,name=TxHash,proto3" json:"TxHash,omitempty"`
+	CreatesContract      bool     `protobuf:"varint,2,opt,name=CreatesContract,proto3" json:"CreatesContract,omitempty"`
+	ContractAddress      []byte   `protobuf:"bytes,3,opt,name=ContractAddress,proto3" json:"ContractAddress,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TxReceipt) Reset()         { *m = TxReceipt{} }
+func (m *TxReceipt) String() string { return proto.CompactTextString(m) }
+func (*TxReceipt) ProtoMessage()    {}
+func (*TxReceipt) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{4}
+}
+func (m *TxReceipt) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TxReceipt.Unmarshal(m, b)
+}
+func (m *TxReceipt) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TxReceipt.Marshal(b, m, deterministic)
+}
+func (dst *TxReceipt) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TxReceipt.Merge(dst, src)
+}
+func (m *TxReceipt) XXX_Size() int {
+	return xxx_messageInfo_TxReceipt.Size(m)
+}
+func (m *TxReceipt) XXX_DiscardUnknown() {
+	xxx_messageInfo_TxReceipt.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TxReceipt proto.InternalMessageInfo
+
+func (m *TxReceipt) GetTxHash() []byte {
+	if m != nil {
+		return m.TxHash
+	}
+	return nil
+}
+
+func (m *TxReceipt) GetCreatesContract() bool {
+	if m != nil {
+		return m.CreatesContract
+	}
+	return false
+}
+
+func (m *TxReceipt) GetContractAddress() []byte {
+	if m != nil {
+		return m.ContractAddress
+	}
+	return nil
+}
+
+// This is here because it is used in both the Account Service (GenPrivAccount)
+// And in the transaction service (SignTx)
+type PrivateAccount struct {
+	PrivateKey           []byte   `protobuf:"bytes,1,opt,name=PrivateKey,proto3" json:"PrivateKey,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PrivateAccount) Reset()         { *m = PrivateAccount{} }
+func (m *PrivateAccount) String() string { return proto.CompactTextString(m) }
+func (*PrivateAccount) ProtoMessage()    {}
+func (*PrivateAccount) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{5}
+}
+func (m *PrivateAccount) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PrivateAccount.Unmarshal(m, b)
+}
+func (m *PrivateAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PrivateAccount.Marshal(b, m, deterministic)
+}
+func (dst *PrivateAccount) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PrivateAccount.Merge(dst, src)
+}
+func (m *PrivateAccount) XXX_Size() int {
+	return xxx_messageInfo_PrivateAccount.Size(m)
+}
+func (m *PrivateAccount) XXX_DiscardUnknown() {
+	xxx_messageInfo_PrivateAccount.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PrivateAccount proto.InternalMessageInfo
+
+func (m *PrivateAccount) GetPrivateKey() []byte {
+	if m != nil {
+		return m.PrivateKey
+	}
+	return nil
+}
+
+// This is hear because it is used by both the Events service (Poll) and the
+// Transaction service (TransactAndHold)
+type EventDataCall struct {
+	CallData             *CallData `protobuf:"bytes,1,opt,name=CallData,proto3" json:"CallData,omitempty"`
+	Origin               []byte    `protobuf:"bytes,2,opt,name=Origin,proto3" json:"Origin,omitempty"`
+	TxHash               []byte    `protobuf:"bytes,3,opt,name=TxHash,proto3" json:"TxHash,omitempty"`
+	StackDepth           int64     `protobuf:"varint,4,opt,name=StackDepth,proto3" json:"StackDepth,omitempty"`
+	Return               []byte    `protobuf:"bytes,5,opt,name=Return,proto3" json:"Return,omitempty"`
+	Exception            string    `protobuf:"bytes,6,opt,name=Exception,proto3" json:"Exception,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *EventDataCall) Reset()         { *m = EventDataCall{} }
+func (m *EventDataCall) String() string { return proto.CompactTextString(m) }
+func (*EventDataCall) ProtoMessage()    {}
+func (*EventDataCall) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{6}
+}
+func (m *EventDataCall) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventDataCall.Unmarshal(m, b)
+}
+func (m *EventDataCall) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventDataCall.Marshal(b, m, deterministic)
+}
+func (dst *EventDataCall) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventDataCall.Merge(dst, src)
+}
+func (m *EventDataCall) XXX_Size() int {
+	return xxx_messageInfo_EventDataCall.Size(m)
+}
+func (m *EventDataCall) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventDataCall.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventDataCall proto.InternalMessageInfo
+
+func (m *EventDataCall) GetCallData() *CallData {
+	if m != nil {
+		return m.CallData
+	}
+	return nil
+}
+
+func (m *EventDataCall) GetOrigin() []byte {
+	if m != nil {
+		return m.Origin
+	}
+	return nil
+}
+
+func (m *EventDataCall) GetTxHash() []byte {
+	if m != nil {
+		return m.TxHash
+	}
+	return nil
+}
+
+func (m *EventDataCall) GetStackDepth() int64 {
+	if m != nil {
+		return m.StackDepth
+	}
+	return 0
+}
+
+func (m *EventDataCall) GetReturn() []byte {
+	if m != nil {
+		return m.Return
+	}
+	return nil
+}
+
+func (m *EventDataCall) GetException() string {
+	if m != nil {
+		return m.Exception
+	}
+	return ""
+}
+
+type CallData struct {
+	Caller               []byte   `protobuf:"bytes,1,opt,name=Caller,proto3" json:"Caller,omitempty"`
+	Callee               []byte   `protobuf:"bytes,2,opt,name=Callee,proto3" json:"Callee,omitempty"`
+	Data                 []byte   `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data,omitempty"`
+	Value                uint64   `protobuf:"varint,4,opt,name=Value,proto3" json:"Value,omitempty"`
+	Gas                  uint64   `protobuf:"varint,5,opt,name=Gas,proto3" json:"Gas,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallData) Reset()         { *m = CallData{} }
+func (m *CallData) String() string { return proto.CompactTextString(m) }
+func (*CallData) ProtoMessage()    {}
+func (*CallData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{7}
+}
+func (m *CallData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallData.Unmarshal(m, b)
+}
+func (m *CallData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallData.Marshal(b, m, deterministic)
+}
+func (dst *CallData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallData.Merge(dst, src)
+}
+func (m *CallData) XXX_Size() int {
+	return xxx_messageInfo_CallData.Size(m)
+}
+func (m *CallData) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallData proto.InternalMessageInfo
+
+func (m *CallData) GetCaller() []byte {
+	if m != nil {
+		return m.Caller
+	}
+	return nil
+}
+
+func (m *CallData) GetCallee() []byte {
+	if m != nil {
+		return m.Callee
+	}
+	return nil
+}
+
+func (m *CallData) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (m *CallData) GetValue() uint64 {
+	if m != nil {
+		return m.Value
+	}
+	return 0
+}
+
+func (m *CallData) GetGas() uint64 {
+	if m != nil {
+		return m.Gas
+	}
+	return 0
+}
+
+// Params
+type AddressParam struct {
+	Address              []byte   `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *AddressParam) Reset()         { *m = AddressParam{} }
+func (m *AddressParam) String() string { return proto.CompactTextString(m) }
+func (*AddressParam) ProtoMessage()    {}
+func (*AddressParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{8}
+}
+func (m *AddressParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AddressParam.Unmarshal(m, b)
+}
+func (m *AddressParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AddressParam.Marshal(b, m, deterministic)
+}
+func (dst *AddressParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AddressParam.Merge(dst, src)
+}
+func (m *AddressParam) XXX_Size() int {
+	return xxx_messageInfo_AddressParam.Size(m)
+}
+func (m *AddressParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_AddressParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AddressParam proto.InternalMessageInfo
+
+func (m *AddressParam) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+type PrivateKeyParam struct {
+	PrivateKey           []byte   `protobuf:"bytes,1,opt,name=privateKey,proto3" json:"privateKey,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PrivateKeyParam) Reset()         { *m = PrivateKeyParam{} }
+func (m *PrivateKeyParam) String() string { return proto.CompactTextString(m) }
+func (*PrivateKeyParam) ProtoMessage()    {}
+func (*PrivateKeyParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{9}
+}
+func (m *PrivateKeyParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PrivateKeyParam.Unmarshal(m, b)
+}
+func (m *PrivateKeyParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PrivateKeyParam.Marshal(b, m, deterministic)
+}
+func (dst *PrivateKeyParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PrivateKeyParam.Merge(dst, src)
+}
+func (m *PrivateKeyParam) XXX_Size() int {
+	return xxx_messageInfo_PrivateKeyParam.Size(m)
+}
+func (m *PrivateKeyParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_PrivateKeyParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PrivateKeyParam proto.InternalMessageInfo
+
+func (m *PrivateKeyParam) GetPrivateKey() []byte {
+	if m != nil {
+		return m.PrivateKey
+	}
+	return nil
+}
+
+type StorageAtParam struct {
+	Address              []byte   `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+	Key                  []byte   `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StorageAtParam) Reset()         { *m = StorageAtParam{} }
+func (m *StorageAtParam) String() string { return proto.CompactTextString(m) }
+func (*StorageAtParam) ProtoMessage()    {}
+func (*StorageAtParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{10}
+}
+func (m *StorageAtParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StorageAtParam.Unmarshal(m, b)
+}
+func (m *StorageAtParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StorageAtParam.Marshal(b, m, deterministic)
+}
+func (dst *StorageAtParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StorageAtParam.Merge(dst, src)
+}
+func (m *StorageAtParam) XXX_Size() int {
+	return xxx_messageInfo_StorageAtParam.Size(m)
+}
+func (m *StorageAtParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_StorageAtParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StorageAtParam proto.InternalMessageInfo
+
+func (m *StorageAtParam) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *StorageAtParam) GetKey() []byte {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+type BasePermissions struct {
+	Perms                uint64   `protobuf:"varint,1,opt,name=Perms,proto3" json:"Perms,omitempty"`
+	SetBit               uint64   `protobuf:"varint,2,opt,name=SetBit,proto3" json:"SetBit,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BasePermissions) Reset()         { *m = BasePermissions{} }
+func (m *BasePermissions) String() string { return proto.CompactTextString(m) }
+func (*BasePermissions) ProtoMessage()    {}
+func (*BasePermissions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{11}
+}
+func (m *BasePermissions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BasePermissions.Unmarshal(m, b)
+}
+func (m *BasePermissions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BasePermissions.Marshal(b, m, deterministic)
+}
+func (dst *BasePermissions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BasePermissions.Merge(dst, src)
+}
+func (m *BasePermissions) XXX_Size() int {
+	return xxx_messageInfo_BasePermissions.Size(m)
+}
+func (m *BasePermissions) XXX_DiscardUnknown() {
+	xxx_messageInfo_BasePermissions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BasePermissions proto.InternalMessageInfo
+
+func (m *BasePermissions) GetPerms() uint64 {
+	if m != nil {
+		return m.Perms
+	}
+	return 0
+}
+
+func (m *BasePermissions) GetSetBit() uint64 {
+	if m != nil {
+		return m.SetBit
+	}
+	return 0
+}
+
+type AccountPermissions struct {
+	Base                 *BasePermissions `protobuf:"bytes,1,opt,name=Base,proto3" json:"Base,omitempty"`
+	Roles                []string         `protobuf:"bytes,2,rep,name=Roles,proto3" json:"Roles,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *AccountPermissions) Reset()         { *m = AccountPermissions{} }
+func (m *AccountPermissions) String() string { return proto.CompactTextString(m) }
+func (*AccountPermissions) ProtoMessage()    {}
+func (*AccountPermissions) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{12}
+}
+func (m *AccountPermissions) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountPermissions.Unmarshal(m, b)
+}
+func (m *AccountPermissions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountPermissions.Marshal(b, m, deterministic)
+}
+func (dst *AccountPermissions) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountPermissions.Merge(dst, src)
+}
+func (m *AccountPermissions) XXX_Size() int {
+	return xxx_messageInfo_AccountPermissions.Size(m)
+}
+func (m *AccountPermissions) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountPermissions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountPermissions proto.InternalMessageInfo
+
+func (m *AccountPermissions) GetBase() *BasePermissions {
+	if m != nil {
+		return m.Base
+	}
+	return nil
+}
+
+func (m *AccountPermissions) GetRoles() []string {
+	if m != nil {
+		return m.Roles
+	}
+	return nil
+}
+
+type Account struct {
+	Address              []byte              `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address,omitempty"`
+	PublicKey            []byte              `protobuf:"bytes,2,opt,name=PublicKey,proto3" json:"PublicKey,omitempty"`
+	Sequence             uint64              `protobuf:"varint,3,opt,name=Sequence,proto3" json:"Sequence,omitempty"`
+	Balance              uint64              `protobuf:"varint,4,opt,name=Balance,proto3" json:"Balance,omitempty"`
+	Code                 []byte              `protobuf:"bytes,5,opt,name=Code,proto3" json:"Code,omitempty"`
+	StorageRoot          []byte              `protobuf:"bytes,6,opt,name=StorageRoot,proto3" json:"StorageRoot,omitempty"`
+	Permissions          *AccountPermissions `protobuf:"bytes,7,opt,name=Permissions,proto3" json:"Permissions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *Account) Reset()         { *m = Account{} }
+func (m *Account) String() string { return proto.CompactTextString(m) }
+func (*Account) ProtoMessage()    {}
+func (*Account) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{13}
+}
+func (m *Account) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Account.Unmarshal(m, b)
+}
+func (m *Account) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Account.Marshal(b, m, deterministic)
+}
+func (dst *Account) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Account.Merge(dst, src)
+}
+func (m *Account) XXX_Size() int {
+	return xxx_messageInfo_Account.Size(m)
+}
+func (m *Account) XXX_DiscardUnknown() {
+	xxx_messageInfo_Account.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Account proto.InternalMessageInfo
+
+func (m *Account) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *Account) GetPublicKey() []byte {
+	if m != nil {
+		return m.PublicKey
+	}
+	return nil
+}
+
+func (m *Account) GetSequence() uint64 {
+	if m != nil {
+		return m.Sequence
+	}
+	return 0
+}
+
+func (m *Account) GetBalance() uint64 {
+	if m != nil {
+		return m.Balance
+	}
+	return 0
+}
+
+func (m *Account) GetCode() []byte {
+	if m != nil {
+		return m.Code
+	}
+	return nil
+}
+
+func (m *Account) GetStorageRoot() []byte {
+	if m != nil {
+		return m.StorageRoot
+	}
+	return nil
+}
+
+func (m *Account) GetPermissions() *AccountPermissions {
+	if m != nil {
+		return m.Permissions
+	}
+	return nil
+}
+
+type AccountList struct {
+	BlockHeight          uint64     `protobuf:"varint,1,opt,name=BlockHeight,proto3" json:"BlockHeight,omitempty"`
+	Accounts             []*Account `protobuf:"bytes,2,rep,name=Accounts,proto3" json:"Accounts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
+	XXX_unrecognized     []byte     `json:"-"`
+	XXX_sizecache        int32      `json:"-"`
+}
+
+func (m *AccountList) Reset()         { *m = AccountList{} }
+func (m *AccountList) String() string { return proto.CompactTextString(m) }
+func (*AccountList) ProtoMessage()    {}
+func (*AccountList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{14}
+}
+func (m *AccountList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_AccountList.Unmarshal(m, b)
+}
+func (m *AccountList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_AccountList.Marshal(b, m, deterministic)
+}
+func (dst *AccountList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_AccountList.Merge(dst, src)
+}
+func (m *AccountList) XXX_Size() int {
+	return xxx_messageInfo_AccountList.Size(m)
+}
+func (m *AccountList) XXX_DiscardUnknown() {
+	xxx_messageInfo_AccountList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_AccountList proto.InternalMessageInfo
+
+func (m *AccountList) GetBlockHeight() uint64 {
+	if m != nil {
+		return m.BlockHeight
+	}
+	return 0
+}
+
+func (m *AccountList) GetAccounts() []*Account {
+	if m != nil {
+		return m.Accounts
+	}
+	return nil
+}
+
+type Validator struct {
+	Address              []byte   `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address,omitempty"`
+	PublicKey            []byte   `protobuf:"bytes,2,opt,name=PublicKey,proto3" json:"PublicKey,omitempty"`
+	Power                uint64   `protobuf:"varint,3,opt,name=Power,proto3" json:"Power,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Validator) Reset()         { *m = Validator{} }
+func (m *Validator) String() string { return proto.CompactTextString(m) }
+func (*Validator) ProtoMessage()    {}
+func (*Validator) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{15}
+}
+func (m *Validator) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Validator.Unmarshal(m, b)
+}
+func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Validator.Marshal(b, m, deterministic)
+}
+func (dst *Validator) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Validator.Merge(dst, src)
+}
+func (m *Validator) XXX_Size() int {
+	return xxx_messageInfo_Validator.Size(m)
+}
+func (m *Validator) XXX_DiscardUnknown() {
+	xxx_messageInfo_Validator.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Validator proto.InternalMessageInfo
+
+func (m *Validator) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *Validator) GetPublicKey() []byte {
+	if m != nil {
+		return m.PublicKey
+	}
+	return nil
+}
+
+func (m *Validator) GetPower() uint64 {
+	if m != nil {
+		return m.Power
+	}
+	return 0
+}
+
+type ValidatorList struct {
+	BlockHeight          uint64       `protobuf:"varint,1,opt,name=BlockHeight,proto3" json:"BlockHeight,omitempty"`
+	BondedValidators     []*Validator `protobuf:"bytes,2,rep,name=BondedValidators,proto3" json:"BondedValidators,omitempty"`
+	UnbondingValidators  []*Validator `protobuf:"bytes,3,rep,name=UnbondingValidators,proto3" json:"UnbondingValidators,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *ValidatorList) Reset()         { *m = ValidatorList{} }
+func (m *ValidatorList) String() string { return proto.CompactTextString(m) }
+func (*ValidatorList) ProtoMessage()    {}
+func (*ValidatorList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{16}
+}
+func (m *ValidatorList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ValidatorList.Unmarshal(m, b)
+}
+func (m *ValidatorList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ValidatorList.Marshal(b, m, deterministic)
+}
+func (dst *ValidatorList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ValidatorList.Merge(dst, src)
+}
+func (m *ValidatorList) XXX_Size() int {
+	return xxx_messageInfo_ValidatorList.Size(m)
+}
+func (m *ValidatorList) XXX_DiscardUnknown() {
+	xxx_messageInfo_ValidatorList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ValidatorList proto.InternalMessageInfo
+
+func (m *ValidatorList) GetBlockHeight() uint64 {
+	if m != nil {
+		return m.BlockHeight
+	}
+	return 0
+}
+
+func (m *ValidatorList) GetBondedValidators() []*Validator {
+	if m != nil {
+		return m.BondedValidators
+	}
+	return nil
+}
+
+func (m *ValidatorList) GetUnbondingValidators() []*Validator {
+	if m != nil {
+		return m.UnbondingValidators
+	}
+	return nil
+}
+
+type StorageItem struct {
+	Key                  []byte   `protobuf:"bytes,1,opt,name=Key,proto3" json:"Key,omitempty"`
+	Value                []byte   `protobuf:"bytes,2,opt,name=Value,proto3" json:"Value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *StorageItem) Reset()         { *m = StorageItem{} }
+func (m *StorageItem) String() string { return proto.CompactTextString(m) }
+func (*StorageItem) ProtoMessage()    {}
+func (*StorageItem) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{17}
+}
+func (m *StorageItem) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StorageItem.Unmarshal(m, b)
+}
+func (m *StorageItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StorageItem.Marshal(b, m, deterministic)
+}
+func (dst *StorageItem) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StorageItem.Merge(dst, src)
+}
+func (m *StorageItem) XXX_Size() int {
+	return xxx_messageInfo_StorageItem.Size(m)
+}
+func (m *StorageItem) XXX_DiscardUnknown() {
+	xxx_messageInfo_StorageItem.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StorageItem proto.InternalMessageInfo
+
+func (m *StorageItem) GetKey() []byte {
+	if m != nil {
+		return m.Key
+	}
+	return nil
+}
+
+func (m *StorageItem) GetValue() []byte {
+	if m != nil {
+		return m.Value
+	}
+	return nil
+}
+
+type StorageDump struct {
+	StorageRoot          []byte         `protobuf:"bytes,1,opt,name=StorageRoot,proto3" json:"StorageRoot,omitempty"`
+	StorageItems         []*StorageItem `protobuf:"bytes,2,rep,name=StorageItems,proto3" json:"StorageItems,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *StorageDump) Reset()         { *m = StorageDump{} }
+func (m *StorageDump) String() string { return proto.CompactTextString(m) }
+func (*StorageDump) ProtoMessage()    {}
+func (*StorageDump) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{18}
+}
+func (m *StorageDump) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_StorageDump.Unmarshal(m, b)
+}
+func (m *StorageDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_StorageDump.Marshal(b, m, deterministic)
+}
+func (dst *StorageDump) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_StorageDump.Merge(dst, src)
+}
+func (m *StorageDump) XXX_Size() int {
+	return xxx_messageInfo_StorageDump.Size(m)
+}
+func (m *StorageDump) XXX_DiscardUnknown() {
+	xxx_messageInfo_StorageDump.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_StorageDump proto.InternalMessageInfo
+
+func (m *StorageDump) GetStorageRoot() []byte {
+	if m != nil {
+		return m.StorageRoot
+	}
+	return nil
+}
+
+func (m *StorageDump) GetStorageItems() []*StorageItem {
+	if m != nil {
+		return m.StorageItems
+	}
+	return nil
+}
+
+// Params
+type HeightParam struct {
+	Height               uint64   `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HeightParam) Reset()         { *m = HeightParam{} }
+func (m *HeightParam) String() string { return proto.CompactTextString(m) }
+func (*HeightParam) ProtoMessage()    {}
+func (*HeightParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{19}
+}
+func (m *HeightParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_HeightParam.Unmarshal(m, b)
+}
+func (m *HeightParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_HeightParam.Marshal(b, m, deterministic)
+}
+func (dst *HeightParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_HeightParam.Merge(dst, src)
+}
+func (m *HeightParam) XXX_Size() int {
+	return xxx_messageInfo_HeightParam.Size(m)
+}
+func (m *HeightParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_HeightParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HeightParam proto.InternalMessageInfo
+
+func (m *HeightParam) GetHeight() uint64 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+type BlocksParam struct {
+	MinHeight            uint64   `protobuf:"varint,1,opt,name=minHeight,proto3" json:"minHeight,omitempty"`
+	MaxHeight            uint64   `protobuf:"varint,2,opt,name=maxHeight,proto3" json:"maxHeight,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BlocksParam) Reset()         { *m = BlocksParam{} }
+func (m *BlocksParam) String() string { return proto.CompactTextString(m) }
+func (*BlocksParam) ProtoMessage()    {}
+func (*BlocksParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{20}
+}
+func (m *BlocksParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BlocksParam.Unmarshal(m, b)
+}
+func (m *BlocksParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BlocksParam.Marshal(b, m, deterministic)
+}
+func (dst *BlocksParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BlocksParam.Merge(dst, src)
+}
+func (m *BlocksParam) XXX_Size() int {
+	return xxx_messageInfo_BlocksParam.Size(m)
+}
+func (m *BlocksParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_BlocksParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BlocksParam proto.InternalMessageInfo
+
+func (m *BlocksParam) GetMinHeight() uint64 {
+	if m != nil {
+		return m.MinHeight
+	}
+	return 0
+}
+
+func (m *BlocksParam) GetMaxHeight() uint64 {
+	if m != nil {
+		return m.MaxHeight
+	}
+	return 0
+}
+
+// Results
+type Header struct {
+	ChainID              string   `protobuf:"bytes,1,opt,name=ChainID,proto3" json:"ChainID,omitempty"`
+	Height               int64    `protobuf:"varint,2,opt,name=Height,proto3" json:"Height,omitempty"`
+	Time                 int64    `protobuf:"varint,3,opt,name=Time,proto3" json:"Time,omitempty"`
+	NumTxs               int64    `protobuf:"varint,4,opt,name=NumTxs,proto3" json:"NumTxs,omitempty"`
+	LastBlockID          []byte   `protobuf:"bytes,5,opt,name=LastBlockID,proto3" json:"LastBlockID,omitempty"`
+	LastCommitHash       []byte   `protobuf:"bytes,6,opt,name=LastCommitHash,proto3" json:"LastCommitHash,omitempty"`
+	DataHash             []byte   `protobuf:"bytes,7,opt,name=DataHash,proto3" json:"DataHash,omitempty"`
+	ValidatorsHash       []byte   `protobuf:"bytes,8,opt,name=ValidatorsHash,proto3" json:"ValidatorsHash,omitempty"`
+	AppHash              []byte   `protobuf:"bytes,9,opt,name=AppHash,proto3" json:"AppHash,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Header) Reset()         { *m = Header{} }
+func (m *Header) String() string { return proto.CompactTextString(m) }
+func (*Header) ProtoMessage()    {}
+func (*Header) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{21}
+}
+func (m *Header) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Header.Unmarshal(m, b)
+}
+func (m *Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Header.Marshal(b, m, deterministic)
+}
+func (dst *Header) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Header.Merge(dst, src)
+}
+func (m *Header) XXX_Size() int {
+	return xxx_messageInfo_Header.Size(m)
+}
+func (m *Header) XXX_DiscardUnknown() {
+	xxx_messageInfo_Header.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Header proto.InternalMessageInfo
+
+func (m *Header) GetChainID() string {
+	if m != nil {
+		return m.ChainID
+	}
+	return ""
+}
+
+func (m *Header) GetHeight() int64 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+func (m *Header) GetTime() int64 {
+	if m != nil {
+		return m.Time
+	}
+	return 0
+}
+
+func (m *Header) GetNumTxs() int64 {
+	if m != nil {
+		return m.NumTxs
+	}
+	return 0
+}
+
+func (m *Header) GetLastBlockID() []byte {
+	if m != nil {
+		return m.LastBlockID
+	}
+	return nil
+}
+
+func (m *Header) GetLastCommitHash() []byte {
+	if m != nil {
+		return m.LastCommitHash
+	}
+	return nil
+}
+
+func (m *Header) GetDataHash() []byte {
+	if m != nil {
+		return m.DataHash
+	}
+	return nil
+}
+
+func (m *Header) GetValidatorsHash() []byte {
+	if m != nil {
+		return m.ValidatorsHash
+	}
+	return nil
+}
+
+func (m *Header) GetAppHash() []byte {
+	if m != nil {
+		return m.AppHash
+	}
+	return nil
+}
+
+type Data struct {
+	Txs                  [][]byte `protobuf:"bytes,1,rep,name=Txs,proto3" json:"Txs,omitempty"`
+	Hash                 []byte   `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Data) Reset()         { *m = Data{} }
+func (m *Data) String() string { return proto.CompactTextString(m) }
+func (*Data) ProtoMessage()    {}
+func (*Data) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{22}
+}
+func (m *Data) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Data.Unmarshal(m, b)
+}
+func (m *Data) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Data.Marshal(b, m, deterministic)
+}
+func (dst *Data) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Data.Merge(dst, src)
+}
+func (m *Data) XXX_Size() int {
+	return xxx_messageInfo_Data.Size(m)
+}
+func (m *Data) XXX_DiscardUnknown() {
+	xxx_messageInfo_Data.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Data proto.InternalMessageInfo
+
+func (m *Data) GetTxs() [][]byte {
+	if m != nil {
+		return m.Txs
+	}
+	return nil
+}
+
+func (m *Data) GetHash() []byte {
+	if m != nil {
+		return m.Hash
+	}
+	return nil
+}
+
+type Block struct {
+	BlockID              []byte   `protobuf:"bytes,1,opt,name=BlockID,proto3" json:"BlockID,omitempty"`
+	Header               *Header  `protobuf:"bytes,2,opt,name=Header,proto3" json:"Header,omitempty"`
+	Data                 *Data    `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Block) Reset()         { *m = Block{} }
+func (m *Block) String() string { return proto.CompactTextString(m) }
+func (*Block) ProtoMessage()    {}
+func (*Block) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{23}
+}
+func (m *Block) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Block.Unmarshal(m, b)
+}
+func (m *Block) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Block.Marshal(b, m, deterministic)
+}
+func (dst *Block) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Block.Merge(dst, src)
+}
+func (m *Block) XXX_Size() int {
+	return xxx_messageInfo_Block.Size(m)
+}
+func (m *Block) XXX_DiscardUnknown() {
+	xxx_messageInfo_Block.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Block proto.InternalMessageInfo
+
+func (m *Block) GetBlockID() []byte {
+	if m != nil {
+		return m.BlockID
+	}
+	return nil
+}
+
+func (m *Block) GetHeader() *Header {
+	if m != nil {
+		return m.Header
+	}
+	return nil
+}
+
+func (m *Block) GetData() *Data {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+type BlockMeta struct {
+	BlockID              []byte   `protobuf:"bytes,1,opt,name=BlockID,proto3" json:"BlockID,omitempty"`
+	Header               *Header  `protobuf:"bytes,2,opt,name=Header,proto3" json:"Header,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BlockMeta) Reset()         { *m = BlockMeta{} }
+func (m *BlockMeta) String() string { return proto.CompactTextString(m) }
+func (*BlockMeta) ProtoMessage()    {}
+func (*BlockMeta) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{24}
+}
+func (m *BlockMeta) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BlockMeta.Unmarshal(m, b)
+}
+func (m *BlockMeta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BlockMeta.Marshal(b, m, deterministic)
+}
+func (dst *BlockMeta) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BlockMeta.Merge(dst, src)
+}
+func (m *BlockMeta) XXX_Size() int {
+	return xxx_messageInfo_BlockMeta.Size(m)
+}
+func (m *BlockMeta) XXX_DiscardUnknown() {
+	xxx_messageInfo_BlockMeta.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BlockMeta proto.InternalMessageInfo
+
+func (m *BlockMeta) GetBlockID() []byte {
+	if m != nil {
+		return m.BlockID
+	}
+	return nil
+}
+
+func (m *BlockMeta) GetHeader() *Header {
+	if m != nil {
+		return m.Header
+	}
+	return nil
+}
+
+type BlockList struct {
+	LastHeight           uint64       `protobuf:"varint,1,opt,name=LastHeight,proto3" json:"LastHeight,omitempty"`
+	BlockMetas           []*BlockMeta `protobuf:"bytes,2,rep,name=BlockMetas,proto3" json:"BlockMetas,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
+}
+
+func (m *BlockList) Reset()         { *m = BlockList{} }
+func (m *BlockList) String() string { return proto.CompactTextString(m) }
+func (*BlockList) ProtoMessage()    {}
+func (*BlockList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{25}
+}
+func (m *BlockList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BlockList.Unmarshal(m, b)
+}
+func (m *BlockList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BlockList.Marshal(b, m, deterministic)
+}
+func (dst *BlockList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BlockList.Merge(dst, src)
+}
+func (m *BlockList) XXX_Size() int {
+	return xxx_messageInfo_BlockList.Size(m)
+}
+func (m *BlockList) XXX_DiscardUnknown() {
+	xxx_messageInfo_BlockList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BlockList proto.InternalMessageInfo
+
+func (m *BlockList) GetLastHeight() uint64 {
+	if m != nil {
+		return m.LastHeight
+	}
+	return 0
+}
+
+func (m *BlockList) GetBlockMetas() []*BlockMeta {
+	if m != nil {
+		return m.BlockMetas
+	}
+	return nil
+}
+
+type ChainId struct {
+	ChainName            string   `protobuf:"bytes,1,opt,name=ChainName,proto3" json:"ChainName,omitempty"`
+	ChainId              string   `protobuf:"bytes,2,opt,name=ChainId,proto3" json:"ChainId,omitempty"`
+	GenesisHash          []byte   `protobuf:"bytes,3,opt,name=GenesisHash,proto3" json:"GenesisHash,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ChainId) Reset()         { *m = ChainId{} }
+func (m *ChainId) String() string { return proto.CompactTextString(m) }
+func (*ChainId) ProtoMessage()    {}
+func (*ChainId) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{26}
+}
+func (m *ChainId) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ChainId.Unmarshal(m, b)
+}
+func (m *ChainId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ChainId.Marshal(b, m, deterministic)
+}
+func (dst *ChainId) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ChainId.Merge(dst, src)
+}
+func (m *ChainId) XXX_Size() int {
+	return xxx_messageInfo_ChainId.Size(m)
+}
+func (m *ChainId) XXX_DiscardUnknown() {
+	xxx_messageInfo_ChainId.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ChainId proto.InternalMessageInfo
+
+func (m *ChainId) GetChainName() string {
+	if m != nil {
+		return m.ChainName
+	}
+	return ""
+}
+
+func (m *ChainId) GetChainId() string {
+	if m != nil {
+		return m.ChainId
+	}
+	return ""
+}
+
+func (m *ChainId) GetGenesisHash() []byte {
+	if m != nil {
+		return m.GenesisHash
+	}
+	return nil
+}
+
+type GenesisDoc struct {
+	GenesisTime          uint64                         `protobuf:"varint,1,opt,name=GenesisTime,proto3" json:"GenesisTime,omitempty"`
+	ChainName            string                         `protobuf:"bytes,2,opt,name=ChainName,proto3" json:"ChainName,omitempty"`
+	Salt                 []byte                         `protobuf:"bytes,3,opt,name=Salt,proto3" json:"Salt,omitempty"`
+	GlobalPermissions    uint64                         `protobuf:"varint,4,opt,name=GlobalPermissions,proto3" json:"GlobalPermissions,omitempty"`
+	Accounts             []*GenesisDoc_GenesisAccount   `protobuf:"bytes,5,rep,name=Accounts,proto3" json:"Accounts,omitempty"`
+	Validators           []*GenesisDoc_GenesisValidator `protobuf:"bytes,6,rep,name=Validators,proto3" json:"Validators,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                       `json:"-"`
+	XXX_unrecognized     []byte                         `json:"-"`
+	XXX_sizecache        int32                          `json:"-"`
+}
+
+func (m *GenesisDoc) Reset()         { *m = GenesisDoc{} }
+func (m *GenesisDoc) String() string { return proto.CompactTextString(m) }
+func (*GenesisDoc) ProtoMessage()    {}
+func (*GenesisDoc) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{27}
+}
+func (m *GenesisDoc) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenesisDoc.Unmarshal(m, b)
+}
+func (m *GenesisDoc) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenesisDoc.Marshal(b, m, deterministic)
+}
+func (dst *GenesisDoc) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenesisDoc.Merge(dst, src)
+}
+func (m *GenesisDoc) XXX_Size() int {
+	return xxx_messageInfo_GenesisDoc.Size(m)
+}
+func (m *GenesisDoc) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenesisDoc.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenesisDoc proto.InternalMessageInfo
+
+func (m *GenesisDoc) GetGenesisTime() uint64 {
+	if m != nil {
+		return m.GenesisTime
+	}
+	return 0
+}
+
+func (m *GenesisDoc) GetChainName() string {
+	if m != nil {
+		return m.ChainName
+	}
+	return ""
+}
+
+func (m *GenesisDoc) GetSalt() []byte {
+	if m != nil {
+		return m.Salt
+	}
+	return nil
+}
+
+func (m *GenesisDoc) GetGlobalPermissions() uint64 {
+	if m != nil {
+		return m.GlobalPermissions
+	}
+	return 0
+}
+
+func (m *GenesisDoc) GetAccounts() []*GenesisDoc_GenesisAccount {
+	if m != nil {
+		return m.Accounts
+	}
+	return nil
+}
+
+func (m *GenesisDoc) GetValidators() []*GenesisDoc_GenesisValidator {
+	if m != nil {
+		return m.Validators
+	}
+	return nil
+}
+
+type GenesisDoc_GenesisAccount struct {
+	Address              []byte              `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address,omitempty"`
+	PublicKey            []byte              `protobuf:"bytes,2,opt,name=PublicKey,proto3" json:"PublicKey,omitempty"`
+	Amount               uint64              `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount,omitempty"`
+	Name                 string              `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"`
+	Permissions          *AccountPermissions `protobuf:"bytes,5,opt,name=Permissions,proto3" json:"Permissions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *GenesisDoc_GenesisAccount) Reset()         { *m = GenesisDoc_GenesisAccount{} }
+func (m *GenesisDoc_GenesisAccount) String() string { return proto.CompactTextString(m) }
+func (*GenesisDoc_GenesisAccount) ProtoMessage()    {}
+func (*GenesisDoc_GenesisAccount) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{27, 0}
+}
+func (m *GenesisDoc_GenesisAccount) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenesisDoc_GenesisAccount.Unmarshal(m, b)
+}
+func (m *GenesisDoc_GenesisAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenesisDoc_GenesisAccount.Marshal(b, m, deterministic)
+}
+func (dst *GenesisDoc_GenesisAccount) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenesisDoc_GenesisAccount.Merge(dst, src)
+}
+func (m *GenesisDoc_GenesisAccount) XXX_Size() int {
+	return xxx_messageInfo_GenesisDoc_GenesisAccount.Size(m)
+}
+func (m *GenesisDoc_GenesisAccount) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenesisDoc_GenesisAccount.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenesisDoc_GenesisAccount proto.InternalMessageInfo
+
+func (m *GenesisDoc_GenesisAccount) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *GenesisDoc_GenesisAccount) GetPublicKey() []byte {
+	if m != nil {
+		return m.PublicKey
+	}
+	return nil
+}
+
+func (m *GenesisDoc_GenesisAccount) GetAmount() uint64 {
+	if m != nil {
+		return m.Amount
+	}
+	return 0
+}
+
+func (m *GenesisDoc_GenesisAccount) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *GenesisDoc_GenesisAccount) GetPermissions() *AccountPermissions {
+	if m != nil {
+		return m.Permissions
+	}
+	return nil
+}
+
+type GenesisDoc_GenesisValidator struct {
+	Address              []byte   `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address,omitempty"`
+	PublicKey            []byte   `protobuf:"bytes,2,opt,name=PublicKey,proto3" json:"PublicKey,omitempty"`
+	Amount               uint64   `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount,omitempty"`
+	Name                 string   `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"`
+	UnbondTo             [][]byte `protobuf:"bytes,5,rep,name=UnbondTo,proto3" json:"UnbondTo,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GenesisDoc_GenesisValidator) Reset()         { *m = GenesisDoc_GenesisValidator{} }
+func (m *GenesisDoc_GenesisValidator) String() string { return proto.CompactTextString(m) }
+func (*GenesisDoc_GenesisValidator) ProtoMessage()    {}
+func (*GenesisDoc_GenesisValidator) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{27, 1}
+}
+func (m *GenesisDoc_GenesisValidator) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GenesisDoc_GenesisValidator.Unmarshal(m, b)
+}
+func (m *GenesisDoc_GenesisValidator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GenesisDoc_GenesisValidator.Marshal(b, m, deterministic)
+}
+func (dst *GenesisDoc_GenesisValidator) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GenesisDoc_GenesisValidator.Merge(dst, src)
+}
+func (m *GenesisDoc_GenesisValidator) XXX_Size() int {
+	return xxx_messageInfo_GenesisDoc_GenesisValidator.Size(m)
+}
+func (m *GenesisDoc_GenesisValidator) XXX_DiscardUnknown() {
+	xxx_messageInfo_GenesisDoc_GenesisValidator.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GenesisDoc_GenesisValidator proto.InternalMessageInfo
+
+func (m *GenesisDoc_GenesisValidator) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *GenesisDoc_GenesisValidator) GetPublicKey() []byte {
+	if m != nil {
+		return m.PublicKey
+	}
+	return nil
+}
+
+func (m *GenesisDoc_GenesisValidator) GetAmount() uint64 {
+	if m != nil {
+		return m.Amount
+	}
+	return 0
+}
+
+func (m *GenesisDoc_GenesisValidator) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *GenesisDoc_GenesisValidator) GetUnbondTo() [][]byte {
+	if m != nil {
+		return m.UnbondTo
+	}
+	return nil
+}
+
+type UnconfirmedTxList struct {
+	NumTxs               uint64   `protobuf:"varint,1,opt,name=NumTxs,proto3" json:"NumTxs,omitempty"`
+	Txs                  [][]byte `protobuf:"bytes,2,rep,name=Txs,proto3" json:"Txs,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UnconfirmedTxList) Reset()         { *m = UnconfirmedTxList{} }
+func (m *UnconfirmedTxList) String() string { return proto.CompactTextString(m) }
+func (*UnconfirmedTxList) ProtoMessage()    {}
+func (*UnconfirmedTxList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{28}
+}
+func (m *UnconfirmedTxList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UnconfirmedTxList.Unmarshal(m, b)
+}
+func (m *UnconfirmedTxList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UnconfirmedTxList.Marshal(b, m, deterministic)
+}
+func (dst *UnconfirmedTxList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UnconfirmedTxList.Merge(dst, src)
+}
+func (m *UnconfirmedTxList) XXX_Size() int {
+	return xxx_messageInfo_UnconfirmedTxList.Size(m)
+}
+func (m *UnconfirmedTxList) XXX_DiscardUnknown() {
+	xxx_messageInfo_UnconfirmedTxList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UnconfirmedTxList proto.InternalMessageInfo
+
+func (m *UnconfirmedTxList) GetNumTxs() uint64 {
+	if m != nil {
+		return m.NumTxs
+	}
+	return 0
+}
+
+func (m *UnconfirmedTxList) GetTxs() [][]byte {
+	if m != nil {
+		return m.Txs
+	}
+	return nil
+}
+
+type Status struct {
+	NodeInfo             *NodeInfo `protobuf:"bytes,1,opt,name=NodeInfo,proto3" json:"NodeInfo,omitempty"`
+	GenesisHash          []byte    `protobuf:"bytes,2,opt,name=GenesisHash,proto3" json:"GenesisHash,omitempty"`
+	PublicKey            []byte    `protobuf:"bytes,3,opt,name=PublicKey,proto3" json:"PublicKey,omitempty"`
+	LatestBlockHash      []byte    `protobuf:"bytes,4,opt,name=LatestBlockHash,proto3" json:"LatestBlockHash,omitempty"`
+	LatestBlockHeight    uint64    `protobuf:"varint,5,opt,name=LatestBlockHeight,proto3" json:"LatestBlockHeight,omitempty"`
+	LatestBlockTime      int64     `protobuf:"varint,6,opt,name=LatestBlockTime,proto3" json:"LatestBlockTime,omitempty"`
+	NodeVersion          string    `protobuf:"bytes,7,opt,name=NodeVersion,proto3" json:"NodeVersion,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *Status) Reset()         { *m = Status{} }
+func (m *Status) String() string { return proto.CompactTextString(m) }
+func (*Status) ProtoMessage()    {}
+func (*Status) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{29}
+}
+func (m *Status) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Status.Unmarshal(m, b)
+}
+func (m *Status) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Status.Marshal(b, m, deterministic)
+}
+func (dst *Status) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Status.Merge(dst, src)
+}
+func (m *Status) XXX_Size() int {
+	return xxx_messageInfo_Status.Size(m)
+}
+func (m *Status) XXX_DiscardUnknown() {
+	xxx_messageInfo_Status.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Status proto.InternalMessageInfo
+
+func (m *Status) GetNodeInfo() *NodeInfo {
+	if m != nil {
+		return m.NodeInfo
+	}
+	return nil
+}
+
+func (m *Status) GetGenesisHash() []byte {
+	if m != nil {
+		return m.GenesisHash
+	}
+	return nil
+}
+
+func (m *Status) GetPublicKey() []byte {
+	if m != nil {
+		return m.PublicKey
+	}
+	return nil
+}
+
+func (m *Status) GetLatestBlockHash() []byte {
+	if m != nil {
+		return m.LatestBlockHash
+	}
+	return nil
+}
+
+func (m *Status) GetLatestBlockHeight() uint64 {
+	if m != nil {
+		return m.LatestBlockHeight
+	}
+	return 0
+}
+
+func (m *Status) GetLatestBlockTime() int64 {
+	if m != nil {
+		return m.LatestBlockTime
+	}
+	return 0
+}
+
+func (m *Status) GetNodeVersion() string {
+	if m != nil {
+		return m.NodeVersion
+	}
+	return ""
+}
+
+// These are used for get consensus state. There is a lot of information that could be included
+// We should decided what the minimum we want inccluded is.
+type RoundState struct {
+	Height               int64    `protobuf:"varint,1,opt,name=Height,proto3" json:"Height,omitempty"`
+	Round                int64    `protobuf:"varint,2,opt,name=Round,proto3" json:"Round,omitempty"`
+	Step                 int64    `protobuf:"varint,3,opt,name=Step,proto3" json:"Step,omitempty"`
+	StartTime            uint64   `protobuf:"varint,4,opt,name=StartTime,proto3" json:"StartTime,omitempty"`
+	CommitTime           uint64   `protobuf:"varint,5,opt,name=CommitTime,proto3" json:"CommitTime,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RoundState) Reset()         { *m = RoundState{} }
+func (m *RoundState) String() string { return proto.CompactTextString(m) }
+func (*RoundState) ProtoMessage()    {}
+func (*RoundState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{30}
+}
+func (m *RoundState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RoundState.Unmarshal(m, b)
+}
+func (m *RoundState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RoundState.Marshal(b, m, deterministic)
+}
+func (dst *RoundState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RoundState.Merge(dst, src)
+}
+func (m *RoundState) XXX_Size() int {
+	return xxx_messageInfo_RoundState.Size(m)
+}
+func (m *RoundState) XXX_DiscardUnknown() {
+	xxx_messageInfo_RoundState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RoundState proto.InternalMessageInfo
+
+func (m *RoundState) GetHeight() int64 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+func (m *RoundState) GetRound() int64 {
+	if m != nil {
+		return m.Round
+	}
+	return 0
+}
+
+func (m *RoundState) GetStep() int64 {
+	if m != nil {
+		return m.Step
+	}
+	return 0
+}
+
+func (m *RoundState) GetStartTime() uint64 {
+	if m != nil {
+		return m.StartTime
+	}
+	return 0
+}
+
+func (m *RoundState) GetCommitTime() uint64 {
+	if m != nil {
+		return m.CommitTime
+	}
+	return 0
+}
+
+type PeerRoundState struct {
+	Height               int64    `protobuf:"varint,1,opt,name=Height,proto3" json:"Height,omitempty"`
+	Round                int64    `protobuf:"varint,2,opt,name=Round,proto3" json:"Round,omitempty"`
+	Step                 int64    `protobuf:"varint,3,opt,name=Step,proto3" json:"Step,omitempty"`
+	StartTime            uint64   `protobuf:"varint,4,opt,name=StartTime,proto3" json:"StartTime,omitempty"`
+	Proposal             bool     `protobuf:"varint,5,opt,name=Proposal,proto3" json:"Proposal,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PeerRoundState) Reset()         { *m = PeerRoundState{} }
+func (m *PeerRoundState) String() string { return proto.CompactTextString(m) }
+func (*PeerRoundState) ProtoMessage()    {}
+func (*PeerRoundState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{31}
+}
+func (m *PeerRoundState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PeerRoundState.Unmarshal(m, b)
+}
+func (m *PeerRoundState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PeerRoundState.Marshal(b, m, deterministic)
+}
+func (dst *PeerRoundState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PeerRoundState.Merge(dst, src)
+}
+func (m *PeerRoundState) XXX_Size() int {
+	return xxx_messageInfo_PeerRoundState.Size(m)
+}
+func (m *PeerRoundState) XXX_DiscardUnknown() {
+	xxx_messageInfo_PeerRoundState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PeerRoundState proto.InternalMessageInfo
+
+func (m *PeerRoundState) GetHeight() int64 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+func (m *PeerRoundState) GetRound() int64 {
+	if m != nil {
+		return m.Round
+	}
+	return 0
+}
+
+func (m *PeerRoundState) GetStep() int64 {
+	if m != nil {
+		return m.Step
+	}
+	return 0
+}
+
+func (m *PeerRoundState) GetStartTime() uint64 {
+	if m != nil {
+		return m.StartTime
+	}
+	return 0
+}
+
+func (m *PeerRoundState) GetProposal() bool {
+	if m != nil {
+		return m.Proposal
+	}
+	return false
+}
+
+type ConsensusState struct {
+	RoundState           *RoundState       `protobuf:"bytes,1,opt,name=RoundState,proto3" json:"RoundState,omitempty"`
+	PeerRoundStates      []*PeerRoundState `protobuf:"bytes,2,rep,name=PeerRoundStates,proto3" json:"PeerRoundStates,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *ConsensusState) Reset()         { *m = ConsensusState{} }
+func (m *ConsensusState) String() string { return proto.CompactTextString(m) }
+func (*ConsensusState) ProtoMessage()    {}
+func (*ConsensusState) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{32}
+}
+func (m *ConsensusState) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConsensusState.Unmarshal(m, b)
+}
+func (m *ConsensusState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConsensusState.Marshal(b, m, deterministic)
+}
+func (dst *ConsensusState) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConsensusState.Merge(dst, src)
+}
+func (m *ConsensusState) XXX_Size() int {
+	return xxx_messageInfo_ConsensusState.Size(m)
+}
+func (m *ConsensusState) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConsensusState.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConsensusState proto.InternalMessageInfo
+
+func (m *ConsensusState) GetRoundState() *RoundState {
+	if m != nil {
+		return m.RoundState
+	}
+	return nil
+}
+
+func (m *ConsensusState) GetPeerRoundStates() []*PeerRoundState {
+	if m != nil {
+		return m.PeerRoundStates
+	}
+	return nil
+}
+
+// Params
+type EventIdParam struct {
+	EventId              string   `protobuf:"bytes,1,opt,name=eventId,proto3" json:"eventId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventIdParam) Reset()         { *m = EventIdParam{} }
+func (m *EventIdParam) String() string { return proto.CompactTextString(m) }
+func (*EventIdParam) ProtoMessage()    {}
+func (*EventIdParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{33}
+}
+func (m *EventIdParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventIdParam.Unmarshal(m, b)
+}
+func (m *EventIdParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventIdParam.Marshal(b, m, deterministic)
+}
+func (dst *EventIdParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventIdParam.Merge(dst, src)
+}
+func (m *EventIdParam) XXX_Size() int {
+	return xxx_messageInfo_EventIdParam.Size(m)
+}
+func (m *EventIdParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventIdParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventIdParam proto.InternalMessageInfo
+
+func (m *EventIdParam) GetEventId() string {
+	if m != nil {
+		return m.EventId
+	}
+	return ""
+}
+
+type SubIdParam struct {
+	SubId                string   `protobuf:"bytes,1,opt,name=subId,proto3" json:"subId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SubIdParam) Reset()         { *m = SubIdParam{} }
+func (m *SubIdParam) String() string { return proto.CompactTextString(m) }
+func (*SubIdParam) ProtoMessage()    {}
+func (*SubIdParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{34}
+}
+func (m *SubIdParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SubIdParam.Unmarshal(m, b)
+}
+func (m *SubIdParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SubIdParam.Marshal(b, m, deterministic)
+}
+func (dst *SubIdParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SubIdParam.Merge(dst, src)
+}
+func (m *SubIdParam) XXX_Size() int {
+	return xxx_messageInfo_SubIdParam.Size(m)
+}
+func (m *SubIdParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_SubIdParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SubIdParam proto.InternalMessageInfo
+
+func (m *SubIdParam) GetSubId() string {
+	if m != nil {
+		return m.SubId
+	}
+	return ""
+}
+
+// Results
+type EventUnSub struct {
+	Result               bool     `protobuf:"varint,1,opt,name=result,proto3" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventUnSub) Reset()         { *m = EventUnSub{} }
+func (m *EventUnSub) String() string { return proto.CompactTextString(m) }
+func (*EventUnSub) ProtoMessage()    {}
+func (*EventUnSub) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{35}
+}
+func (m *EventUnSub) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventUnSub.Unmarshal(m, b)
+}
+func (m *EventUnSub) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventUnSub.Marshal(b, m, deterministic)
+}
+func (dst *EventUnSub) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventUnSub.Merge(dst, src)
+}
+func (m *EventUnSub) XXX_Size() int {
+	return xxx_messageInfo_EventUnSub.Size(m)
+}
+func (m *EventUnSub) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventUnSub.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventUnSub proto.InternalMessageInfo
+
+func (m *EventUnSub) GetResult() bool {
+	if m != nil {
+		return m.Result
+	}
+	return false
+}
+
+type EventDataLog struct {
+	Address              []byte   `protobuf:"bytes,1,opt,name=Address,proto3" json:"Address,omitempty"`
+	Data                 []byte   `protobuf:"bytes,2,opt,name=Data,proto3" json:"Data,omitempty"`
+	Height               uint64   `protobuf:"varint,3,opt,name=Height,proto3" json:"Height,omitempty"`
+	Topics               []string `protobuf:"bytes,4,rep,name=Topics,proto3" json:"Topics,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventDataLog) Reset()         { *m = EventDataLog{} }
+func (m *EventDataLog) String() string { return proto.CompactTextString(m) }
+func (*EventDataLog) ProtoMessage()    {}
+func (*EventDataLog) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{36}
+}
+func (m *EventDataLog) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventDataLog.Unmarshal(m, b)
+}
+func (m *EventDataLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventDataLog.Marshal(b, m, deterministic)
+}
+func (dst *EventDataLog) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventDataLog.Merge(dst, src)
+}
+func (m *EventDataLog) XXX_Size() int {
+	return xxx_messageInfo_EventDataLog.Size(m)
+}
+func (m *EventDataLog) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventDataLog.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventDataLog proto.InternalMessageInfo
+
+func (m *EventDataLog) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *EventDataLog) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (m *EventDataLog) GetHeight() uint64 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+func (m *EventDataLog) GetTopics() []string {
+	if m != nil {
+		return m.Topics
+	}
+	return nil
+}
+
+type EventDataTx struct {
+	Tx                   []byte   `protobuf:"bytes,1,opt,name=Tx,proto3" json:"Tx,omitempty"`
+	Return               []byte   `protobuf:"bytes,2,opt,name=Return,proto3" json:"Return,omitempty"`
+	Exception            string   `protobuf:"bytes,3,opt,name=Exception,proto3" json:"Exception,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EventDataTx) Reset()         { *m = EventDataTx{} }
+func (m *EventDataTx) String() string { return proto.CompactTextString(m) }
+func (*EventDataTx) ProtoMessage()    {}
+func (*EventDataTx) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{37}
+}
+func (m *EventDataTx) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EventDataTx.Unmarshal(m, b)
+}
+func (m *EventDataTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EventDataTx.Marshal(b, m, deterministic)
+}
+func (dst *EventDataTx) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EventDataTx.Merge(dst, src)
+}
+func (m *EventDataTx) XXX_Size() int {
+	return xxx_messageInfo_EventDataTx.Size(m)
+}
+func (m *EventDataTx) XXX_DiscardUnknown() {
+	xxx_messageInfo_EventDataTx.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventDataTx proto.InternalMessageInfo
+
+func (m *EventDataTx) GetTx() []byte {
+	if m != nil {
+		return m.Tx
+	}
+	return nil
+}
+
+func (m *EventDataTx) GetReturn() []byte {
+	if m != nil {
+		return m.Return
+	}
+	return nil
+}
+
+func (m *EventDataTx) GetException() string {
+	if m != nil {
+		return m.Exception
+	}
+	return ""
+}
+
+type Event struct {
+	Event                string         `protobuf:"bytes,1,opt,name=Event,proto3" json:"Event,omitempty"`
+	EventDataTx          *EventDataTx   `protobuf:"bytes,2,opt,name=EventDataTx,proto3" json:"EventDataTx,omitempty"`
+	EventDataCall        *EventDataCall `protobuf:"bytes,3,opt,name=EventDataCall,proto3" json:"EventDataCall,omitempty"`
+	EventDataLog         *EventDataLog  `protobuf:"bytes,4,opt,name=EventDataLog,proto3" json:"EventDataLog,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *Event) Reset()         { *m = Event{} }
+func (m *Event) String() string { return proto.CompactTextString(m) }
+func (*Event) ProtoMessage()    {}
+func (*Event) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{38}
+}
+func (m *Event) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Event.Unmarshal(m, b)
+}
+func (m *Event) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Event.Marshal(b, m, deterministic)
+}
+func (dst *Event) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Event.Merge(dst, src)
+}
+func (m *Event) XXX_Size() int {
+	return xxx_messageInfo_Event.Size(m)
+}
+func (m *Event) XXX_DiscardUnknown() {
+	xxx_messageInfo_Event.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Event proto.InternalMessageInfo
+
+func (m *Event) GetEvent() string {
+	if m != nil {
+		return m.Event
+	}
+	return ""
+}
+
+func (m *Event) GetEventDataTx() *EventDataTx {
+	if m != nil {
+		return m.EventDataTx
+	}
+	return nil
+}
+
+func (m *Event) GetEventDataCall() *EventDataCall {
+	if m != nil {
+		return m.EventDataCall
+	}
+	return nil
+}
+
+func (m *Event) GetEventDataLog() *EventDataLog {
+	if m != nil {
+		return m.EventDataLog
+	}
+	return nil
+}
+
+type PollResponse struct {
+	Events               []*Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PollResponse) Reset()         { *m = PollResponse{} }
+func (m *PollResponse) String() string { return proto.CompactTextString(m) }
+func (*PollResponse) ProtoMessage()    {}
+func (*PollResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{39}
+}
+func (m *PollResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PollResponse.Unmarshal(m, b)
+}
+func (m *PollResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PollResponse.Marshal(b, m, deterministic)
+}
+func (dst *PollResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PollResponse.Merge(dst, src)
+}
+func (m *PollResponse) XXX_Size() int {
+	return xxx_messageInfo_PollResponse.Size(m)
+}
+func (m *PollResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_PollResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PollResponse proto.InternalMessageInfo
+
+func (m *PollResponse) GetEvents() []*Event {
+	if m != nil {
+		return m.Events
+	}
+	return nil
+}
+
+// Params
+type NameRegEntryParam struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NameRegEntryParam) Reset()         { *m = NameRegEntryParam{} }
+func (m *NameRegEntryParam) String() string { return proto.CompactTextString(m) }
+func (*NameRegEntryParam) ProtoMessage()    {}
+func (*NameRegEntryParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{40}
+}
+func (m *NameRegEntryParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NameRegEntryParam.Unmarshal(m, b)
+}
+func (m *NameRegEntryParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NameRegEntryParam.Marshal(b, m, deterministic)
+}
+func (dst *NameRegEntryParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NameRegEntryParam.Merge(dst, src)
+}
+func (m *NameRegEntryParam) XXX_Size() int {
+	return xxx_messageInfo_NameRegEntryParam.Size(m)
+}
+func (m *NameRegEntryParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_NameRegEntryParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NameRegEntryParam proto.InternalMessageInfo
+
+func (m *NameRegEntryParam) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+type TransactNameRegParam struct {
+	InputAccount         *InputAccount `protobuf:"bytes,1,opt,name=inputAccount,proto3" json:"inputAccount,omitempty"`
+	Name                 string        `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	Data                 string        `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	Fee                  uint64        `protobuf:"varint,4,opt,name=fee,proto3" json:"fee,omitempty"`
+	Amount               uint64        `protobuf:"varint,5,opt,name=amount,proto3" json:"amount,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *TransactNameRegParam) Reset()         { *m = TransactNameRegParam{} }
+func (m *TransactNameRegParam) String() string { return proto.CompactTextString(m) }
+func (*TransactNameRegParam) ProtoMessage()    {}
+func (*TransactNameRegParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{41}
+}
+func (m *TransactNameRegParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TransactNameRegParam.Unmarshal(m, b)
+}
+func (m *TransactNameRegParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TransactNameRegParam.Marshal(b, m, deterministic)
+}
+func (dst *TransactNameRegParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TransactNameRegParam.Merge(dst, src)
+}
+func (m *TransactNameRegParam) XXX_Size() int {
+	return xxx_messageInfo_TransactNameRegParam.Size(m)
+}
+func (m *TransactNameRegParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_TransactNameRegParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TransactNameRegParam proto.InternalMessageInfo
+
+func (m *TransactNameRegParam) GetInputAccount() *InputAccount {
+	if m != nil {
+		return m.InputAccount
+	}
+	return nil
+}
+
+func (m *TransactNameRegParam) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *TransactNameRegParam) GetData() string {
+	if m != nil {
+		return m.Data
+	}
+	return ""
+}
+
+func (m *TransactNameRegParam) GetFee() uint64 {
+	if m != nil {
+		return m.Fee
+	}
+	return 0
+}
+
+func (m *TransactNameRegParam) GetAmount() uint64 {
+	if m != nil {
+		return m.Amount
+	}
+	return 0
+}
+
+// Results
+type NameRegEntry struct {
+	// registered name for the entry
+	Name                 string   `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
+	Owner                []byte   `protobuf:"bytes,2,opt,name=Owner,proto3" json:"Owner,omitempty"`
+	Data                 string   `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data,omitempty"`
+	Expires              uint64   `protobuf:"varint,4,opt,name=Expires,proto3" json:"Expires,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NameRegEntry) Reset()         { *m = NameRegEntry{} }
+func (m *NameRegEntry) String() string { return proto.CompactTextString(m) }
+func (*NameRegEntry) ProtoMessage()    {}
+func (*NameRegEntry) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{42}
+}
+func (m *NameRegEntry) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NameRegEntry.Unmarshal(m, b)
+}
+func (m *NameRegEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NameRegEntry.Marshal(b, m, deterministic)
+}
+func (dst *NameRegEntry) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NameRegEntry.Merge(dst, src)
+}
+func (m *NameRegEntry) XXX_Size() int {
+	return xxx_messageInfo_NameRegEntry.Size(m)
+}
+func (m *NameRegEntry) XXX_DiscardUnknown() {
+	xxx_messageInfo_NameRegEntry.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NameRegEntry proto.InternalMessageInfo
+
+func (m *NameRegEntry) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *NameRegEntry) GetOwner() []byte {
+	if m != nil {
+		return m.Owner
+	}
+	return nil
+}
+
+func (m *NameRegEntry) GetData() string {
+	if m != nil {
+		return m.Data
+	}
+	return ""
+}
+
+func (m *NameRegEntry) GetExpires() uint64 {
+	if m != nil {
+		return m.Expires
+	}
+	return 0
+}
+
+type NameRegEntryList struct {
+	BlockHeight          uint64          `protobuf:"varint,1,opt,name=BlockHeight,proto3" json:"BlockHeight,omitempty"`
+	Names                []*NameRegEntry `protobuf:"bytes,2,rep,name=Names,proto3" json:"Names,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *NameRegEntryList) Reset()         { *m = NameRegEntryList{} }
+func (m *NameRegEntryList) String() string { return proto.CompactTextString(m) }
+func (*NameRegEntryList) ProtoMessage()    {}
+func (*NameRegEntryList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{43}
+}
+func (m *NameRegEntryList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NameRegEntryList.Unmarshal(m, b)
+}
+func (m *NameRegEntryList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NameRegEntryList.Marshal(b, m, deterministic)
+}
+func (dst *NameRegEntryList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NameRegEntryList.Merge(dst, src)
+}
+func (m *NameRegEntryList) XXX_Size() int {
+	return xxx_messageInfo_NameRegEntryList.Size(m)
+}
+func (m *NameRegEntryList) XXX_DiscardUnknown() {
+	xxx_messageInfo_NameRegEntryList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NameRegEntryList proto.InternalMessageInfo
+
+func (m *NameRegEntryList) GetBlockHeight() uint64 {
+	if m != nil {
+		return m.BlockHeight
+	}
+	return 0
+}
+
+func (m *NameRegEntryList) GetNames() []*NameRegEntry {
+	if m != nil {
+		return m.Names
+	}
+	return nil
+}
+
+// Params
+type PeerParam struct {
+	Address              []byte   `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PeerParam) Reset()         { *m = PeerParam{} }
+func (m *PeerParam) String() string { return proto.CompactTextString(m) }
+func (*PeerParam) ProtoMessage()    {}
+func (*PeerParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{44}
+}
+func (m *PeerParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PeerParam.Unmarshal(m, b)
+}
+func (m *PeerParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PeerParam.Marshal(b, m, deterministic)
+}
+func (dst *PeerParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PeerParam.Merge(dst, src)
+}
+func (m *PeerParam) XXX_Size() int {
+	return xxx_messageInfo_PeerParam.Size(m)
+}
+func (m *PeerParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_PeerParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PeerParam proto.InternalMessageInfo
+
+func (m *PeerParam) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+// Results
+type ClientVersion struct {
+	Version              string   `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ClientVersion) Reset()         { *m = ClientVersion{} }
+func (m *ClientVersion) String() string { return proto.CompactTextString(m) }
+func (*ClientVersion) ProtoMessage()    {}
+func (*ClientVersion) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{45}
+}
+func (m *ClientVersion) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ClientVersion.Unmarshal(m, b)
+}
+func (m *ClientVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ClientVersion.Marshal(b, m, deterministic)
+}
+func (dst *ClientVersion) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ClientVersion.Merge(dst, src)
+}
+func (m *ClientVersion) XXX_Size() int {
+	return xxx_messageInfo_ClientVersion.Size(m)
+}
+func (m *ClientVersion) XXX_DiscardUnknown() {
+	xxx_messageInfo_ClientVersion.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ClientVersion proto.InternalMessageInfo
+
+func (m *ClientVersion) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+type NodeID struct {
+	Name                 string   `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
+	PublicKey            []byte   `protobuf:"bytes,2,opt,name=PublicKey,proto3" json:"PublicKey,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NodeID) Reset()         { *m = NodeID{} }
+func (m *NodeID) String() string { return proto.CompactTextString(m) }
+func (*NodeID) ProtoMessage()    {}
+func (*NodeID) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{46}
+}
+func (m *NodeID) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NodeID.Unmarshal(m, b)
+}
+func (m *NodeID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NodeID.Marshal(b, m, deterministic)
+}
+func (dst *NodeID) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NodeID.Merge(dst, src)
+}
+func (m *NodeID) XXX_Size() int {
+	return xxx_messageInfo_NodeID.Size(m)
+}
+func (m *NodeID) XXX_DiscardUnknown() {
+	xxx_messageInfo_NodeID.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NodeID proto.InternalMessageInfo
+
+func (m *NodeID) GetName() string {
+	if m != nil {
+		return m.Name
+	}
+	return ""
+}
+
+func (m *NodeID) GetPublicKey() []byte {
+	if m != nil {
+		return m.PublicKey
+	}
+	return nil
+}
+
+type NodeInfo struct {
+	ID                   *NodeID  `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
+	ListenAddr           string   `protobuf:"bytes,2,opt,name=ListenAddr,proto3" json:"ListenAddr,omitempty"`
+	Network              string   `protobuf:"bytes,3,opt,name=Network,proto3" json:"Network,omitempty"`
+	Version              string   `protobuf:"bytes,4,opt,name=Version,proto3" json:"Version,omitempty"`
+	Channels             []byte   `protobuf:"bytes,5,opt,name=Channels,proto3" json:"Channels,omitempty"`
+	Moniker              string   `protobuf:"bytes,6,opt,name=Moniker,proto3" json:"Moniker,omitempty"`
+	Other                []string `protobuf:"bytes,7,rep,name=Other,proto3" json:"Other,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NodeInfo) Reset()         { *m = NodeInfo{} }
+func (m *NodeInfo) String() string { return proto.CompactTextString(m) }
+func (*NodeInfo) ProtoMessage()    {}
+func (*NodeInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{47}
+}
+func (m *NodeInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NodeInfo.Unmarshal(m, b)
+}
+func (m *NodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NodeInfo.Marshal(b, m, deterministic)
+}
+func (dst *NodeInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NodeInfo.Merge(dst, src)
+}
+func (m *NodeInfo) XXX_Size() int {
+	return xxx_messageInfo_NodeInfo.Size(m)
+}
+func (m *NodeInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_NodeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NodeInfo proto.InternalMessageInfo
+
+func (m *NodeInfo) GetID() *NodeID {
+	if m != nil {
+		return m.ID
+	}
+	return nil
+}
+
+func (m *NodeInfo) GetListenAddr() string {
+	if m != nil {
+		return m.ListenAddr
+	}
+	return ""
+}
+
+func (m *NodeInfo) GetNetwork() string {
+	if m != nil {
+		return m.Network
+	}
+	return ""
+}
+
+func (m *NodeInfo) GetVersion() string {
+	if m != nil {
+		return m.Version
+	}
+	return ""
+}
+
+func (m *NodeInfo) GetChannels() []byte {
+	if m != nil {
+		return m.Channels
+	}
+	return nil
+}
+
+func (m *NodeInfo) GetMoniker() string {
+	if m != nil {
+		return m.Moniker
+	}
+	return ""
+}
+
+func (m *NodeInfo) GetOther() []string {
+	if m != nil {
+		return m.Other
+	}
+	return nil
+}
+
+type NetworkInfo struct {
+	Listening            bool     `protobuf:"varint,1,opt,name=Listening,proto3" json:"Listening,omitempty"`
+	Listeners            []string `protobuf:"bytes,2,rep,name=Listeners,proto3" json:"Listeners,omitempty"`
+	Peers                []*Peer  `protobuf:"bytes,3,rep,name=Peers,proto3" json:"Peers,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *NetworkInfo) Reset()         { *m = NetworkInfo{} }
+func (m *NetworkInfo) String() string { return proto.CompactTextString(m) }
+func (*NetworkInfo) ProtoMessage()    {}
+func (*NetworkInfo) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{48}
+}
+func (m *NetworkInfo) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NetworkInfo.Unmarshal(m, b)
+}
+func (m *NetworkInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NetworkInfo.Marshal(b, m, deterministic)
+}
+func (dst *NetworkInfo) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NetworkInfo.Merge(dst, src)
+}
+func (m *NetworkInfo) XXX_Size() int {
+	return xxx_messageInfo_NetworkInfo.Size(m)
+}
+func (m *NetworkInfo) XXX_DiscardUnknown() {
+	xxx_messageInfo_NetworkInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NetworkInfo proto.InternalMessageInfo
+
+func (m *NetworkInfo) GetListening() bool {
+	if m != nil {
+		return m.Listening
+	}
+	return false
+}
+
+func (m *NetworkInfo) GetListeners() []string {
+	if m != nil {
+		return m.Listeners
+	}
+	return nil
+}
+
+func (m *NetworkInfo) GetPeers() []*Peer {
+	if m != nil {
+		return m.Peers
+	}
+	return nil
+}
+
+type Peer struct {
+	NodeInfo             *NodeInfo `protobuf:"bytes,1,opt,name=NodeInfo,proto3" json:"NodeInfo,omitempty"`
+	IsOutbound           bool      `protobuf:"varint,2,opt,name=IsOutbound,proto3" json:"IsOutbound,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
+}
+
+func (m *Peer) Reset()         { *m = Peer{} }
+func (m *Peer) String() string { return proto.CompactTextString(m) }
+func (*Peer) ProtoMessage()    {}
+func (*Peer) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{49}
+}
+func (m *Peer) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Peer.Unmarshal(m, b)
+}
+func (m *Peer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Peer.Marshal(b, m, deterministic)
+}
+func (dst *Peer) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Peer.Merge(dst, src)
+}
+func (m *Peer) XXX_Size() int {
+	return xxx_messageInfo_Peer.Size(m)
+}
+func (m *Peer) XXX_DiscardUnknown() {
+	xxx_messageInfo_Peer.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Peer proto.InternalMessageInfo
+
+func (m *Peer) GetNodeInfo() *NodeInfo {
+	if m != nil {
+		return m.NodeInfo
+	}
+	return nil
+}
+
+func (m *Peer) GetIsOutbound() bool {
+	if m != nil {
+		return m.IsOutbound
+	}
+	return false
+}
+
+type PeerList struct {
+	Peers                []*Peer  `protobuf:"bytes,1,rep,name=Peers,proto3" json:"Peers,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PeerList) Reset()         { *m = PeerList{} }
+func (m *PeerList) String() string { return proto.CompactTextString(m) }
+func (*PeerList) ProtoMessage()    {}
+func (*PeerList) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{50}
+}
+func (m *PeerList) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PeerList.Unmarshal(m, b)
+}
+func (m *PeerList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PeerList.Marshal(b, m, deterministic)
+}
+func (dst *PeerList) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PeerList.Merge(dst, src)
+}
+func (m *PeerList) XXX_Size() int {
+	return xxx_messageInfo_PeerList.Size(m)
+}
+func (m *PeerList) XXX_DiscardUnknown() {
+	xxx_messageInfo_PeerList.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PeerList proto.InternalMessageInfo
+
+func (m *PeerList) GetPeers() []*Peer {
+	if m != nil {
+		return m.Peers
+	}
+	return nil
+}
+
+// Params
+type CallParam struct {
+	From                 []byte   `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"`
+	Address              []byte   `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+	Data                 []byte   `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallParam) Reset()         { *m = CallParam{} }
+func (m *CallParam) String() string { return proto.CompactTextString(m) }
+func (*CallParam) ProtoMessage()    {}
+func (*CallParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{51}
+}
+func (m *CallParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallParam.Unmarshal(m, b)
+}
+func (m *CallParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallParam.Marshal(b, m, deterministic)
+}
+func (dst *CallParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallParam.Merge(dst, src)
+}
+func (m *CallParam) XXX_Size() int {
+	return xxx_messageInfo_CallParam.Size(m)
+}
+func (m *CallParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallParam proto.InternalMessageInfo
+
+func (m *CallParam) GetFrom() []byte {
+	if m != nil {
+		return m.From
+	}
+	return nil
+}
+
+func (m *CallParam) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *CallParam) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+type CallCodeParam struct {
+	From                 []byte   `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"`
+	Code                 []byte   `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"`
+	Data                 []byte   `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallCodeParam) Reset()         { *m = CallCodeParam{} }
+func (m *CallCodeParam) String() string { return proto.CompactTextString(m) }
+func (*CallCodeParam) ProtoMessage()    {}
+func (*CallCodeParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{52}
+}
+func (m *CallCodeParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallCodeParam.Unmarshal(m, b)
+}
+func (m *CallCodeParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallCodeParam.Marshal(b, m, deterministic)
+}
+func (dst *CallCodeParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallCodeParam.Merge(dst, src)
+}
+func (m *CallCodeParam) XXX_Size() int {
+	return xxx_messageInfo_CallCodeParam.Size(m)
+}
+func (m *CallCodeParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallCodeParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallCodeParam proto.InternalMessageInfo
+
+func (m *CallCodeParam) GetFrom() []byte {
+	if m != nil {
+		return m.From
+	}
+	return nil
+}
+
+func (m *CallCodeParam) GetCode() []byte {
+	if m != nil {
+		return m.Code
+	}
+	return nil
+}
+
+func (m *CallCodeParam) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+type TransactParam struct {
+	InputAccount         *InputAccount `protobuf:"bytes,1,opt,name=inputAccount,proto3" json:"inputAccount,omitempty"`
+	Address              []byte        `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+	Data                 []byte        `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+	GasLimit             uint64        `protobuf:"varint,4,opt,name=gasLimit,proto3" json:"gasLimit,omitempty"`
+	Fee                  uint64        `protobuf:"varint,5,opt,name=fee,proto3" json:"fee,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *TransactParam) Reset()         { *m = TransactParam{} }
+func (m *TransactParam) String() string { return proto.CompactTextString(m) }
+func (*TransactParam) ProtoMessage()    {}
+func (*TransactParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{53}
+}
+func (m *TransactParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TransactParam.Unmarshal(m, b)
+}
+func (m *TransactParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TransactParam.Marshal(b, m, deterministic)
+}
+func (dst *TransactParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TransactParam.Merge(dst, src)
+}
+func (m *TransactParam) XXX_Size() int {
+	return xxx_messageInfo_TransactParam.Size(m)
+}
+func (m *TransactParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_TransactParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TransactParam proto.InternalMessageInfo
+
+func (m *TransactParam) GetInputAccount() *InputAccount {
+	if m != nil {
+		return m.InputAccount
+	}
+	return nil
+}
+
+func (m *TransactParam) GetAddress() []byte {
+	if m != nil {
+		return m.Address
+	}
+	return nil
+}
+
+func (m *TransactParam) GetData() []byte {
+	if m != nil {
+		return m.Data
+	}
+	return nil
+}
+
+func (m *TransactParam) GetGasLimit() uint64 {
+	if m != nil {
+		return m.GasLimit
+	}
+	return 0
+}
+
+func (m *TransactParam) GetFee() uint64 {
+	if m != nil {
+		return m.Fee
+	}
+	return 0
+}
+
+type SendParam struct {
+	InputAccount         *InputAccount `protobuf:"bytes,1,opt,name=inputAccount,proto3" json:"inputAccount,omitempty"`
+	ToAddress            []byte        `protobuf:"bytes,2,opt,name=toAddress,proto3" json:"toAddress,omitempty"`
+	Amount               uint64        `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
+	XXX_unrecognized     []byte        `json:"-"`
+	XXX_sizecache        int32         `json:"-"`
+}
+
+func (m *SendParam) Reset()         { *m = SendParam{} }
+func (m *SendParam) String() string { return proto.CompactTextString(m) }
+func (*SendParam) ProtoMessage()    {}
+func (*SendParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{54}
+}
+func (m *SendParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SendParam.Unmarshal(m, b)
+}
+func (m *SendParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SendParam.Marshal(b, m, deterministic)
+}
+func (dst *SendParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SendParam.Merge(dst, src)
+}
+func (m *SendParam) XXX_Size() int {
+	return xxx_messageInfo_SendParam.Size(m)
+}
+func (m *SendParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_SendParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SendParam proto.InternalMessageInfo
+
+func (m *SendParam) GetInputAccount() *InputAccount {
+	if m != nil {
+		return m.InputAccount
+	}
+	return nil
+}
+
+func (m *SendParam) GetToAddress() []byte {
+	if m != nil {
+		return m.ToAddress
+	}
+	return nil
+}
+
+func (m *SendParam) GetAmount() uint64 {
+	if m != nil {
+		return m.Amount
+	}
+	return 0
+}
+
+type TxParam struct {
+	Tx                   []byte   `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TxParam) Reset()         { *m = TxParam{} }
+func (m *TxParam) String() string { return proto.CompactTextString(m) }
+func (*TxParam) ProtoMessage()    {}
+func (*TxParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{55}
+}
+func (m *TxParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TxParam.Unmarshal(m, b)
+}
+func (m *TxParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TxParam.Marshal(b, m, deterministic)
+}
+func (dst *TxParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TxParam.Merge(dst, src)
+}
+func (m *TxParam) XXX_Size() int {
+	return xxx_messageInfo_TxParam.Size(m)
+}
+func (m *TxParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_TxParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TxParam proto.InternalMessageInfo
+
+func (m *TxParam) GetTx() []byte {
+	if m != nil {
+		return m.Tx
+	}
+	return nil
+}
+
+type SignTxParam struct {
+	Tx                   []byte            `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
+	PrivateAccounts      []*PrivateAccount `protobuf:"bytes,2,rep,name=privateAccounts,proto3" json:"privateAccounts,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *SignTxParam) Reset()         { *m = SignTxParam{} }
+func (m *SignTxParam) String() string { return proto.CompactTextString(m) }
+func (*SignTxParam) ProtoMessage()    {}
+func (*SignTxParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{56}
+}
+func (m *SignTxParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SignTxParam.Unmarshal(m, b)
+}
+func (m *SignTxParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SignTxParam.Marshal(b, m, deterministic)
+}
+func (dst *SignTxParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SignTxParam.Merge(dst, src)
+}
+func (m *SignTxParam) XXX_Size() int {
+	return xxx_messageInfo_SignTxParam.Size(m)
+}
+func (m *SignTxParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_SignTxParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SignTxParam proto.InternalMessageInfo
+
+func (m *SignTxParam) GetTx() []byte {
+	if m != nil {
+		return m.Tx
+	}
+	return nil
+}
+
+func (m *SignTxParam) GetPrivateAccounts() []*PrivateAccount {
+	if m != nil {
+		return m.PrivateAccounts
+	}
+	return nil
+}
+
+// Results
+type SignedTx struct {
+	Tx                   []byte   `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SignedTx) Reset()         { *m = SignedTx{} }
+func (m *SignedTx) String() string { return proto.CompactTextString(m) }
+func (*SignedTx) ProtoMessage()    {}
+func (*SignedTx) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{57}
+}
+func (m *SignedTx) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SignedTx.Unmarshal(m, b)
+}
+func (m *SignedTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SignedTx.Marshal(b, m, deterministic)
+}
+func (dst *SignedTx) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SignedTx.Merge(dst, src)
+}
+func (m *SignedTx) XXX_Size() int {
+	return xxx_messageInfo_SignedTx.Size(m)
+}
+func (m *SignedTx) XXX_DiscardUnknown() {
+	xxx_messageInfo_SignedTx.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SignedTx proto.InternalMessageInfo
+
+func (m *SignedTx) GetTx() []byte {
+	if m != nil {
+		return m.Tx
+	}
+	return nil
+}
+
+type CallResult struct {
+	Return               []byte   `protobuf:"bytes,1,opt,name=Return,proto3" json:"Return,omitempty"`
+	GasUsed              uint64   `protobuf:"varint,2,opt,name=GasUsed,proto3" json:"GasUsed,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *CallResult) Reset()         { *m = CallResult{} }
+func (m *CallResult) String() string { return proto.CompactTextString(m) }
+func (*CallResult) ProtoMessage()    {}
+func (*CallResult) Descriptor() ([]byte, []int) {
+	return fileDescriptor_burrow_5b05719ae28d1091, []int{58}
+}
+func (m *CallResult) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CallResult.Unmarshal(m, b)
+}
+func (m *CallResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CallResult.Marshal(b, m, deterministic)
+}
+func (dst *CallResult) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CallResult.Merge(dst, src)
+}
+func (m *CallResult) XXX_Size() int {
+	return xxx_messageInfo_CallResult.Size(m)
+}
+func (m *CallResult) XXX_DiscardUnknown() {
+	xxx_messageInfo_CallResult.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CallResult proto.InternalMessageInfo
+
+func (m *CallResult) GetReturn() []byte {
+	if m != nil {
+		return m.Return
+	}
+	return nil
+}
+
+func (m *CallResult) GetGasUsed() uint64 {
+	if m != nil {
+		return m.GasUsed
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*Empty)(nil), "Empty")
+	proto.RegisterType((*InputAccount)(nil), "InputAccount")
+	proto.RegisterType((*FilterData)(nil), "FilterData")
+	proto.RegisterType((*FilterListParam)(nil), "FilterListParam")
+	proto.RegisterType((*TxReceipt)(nil), "TxReceipt")
+	proto.RegisterType((*PrivateAccount)(nil), "PrivateAccount")
+	proto.RegisterType((*EventDataCall)(nil), "EventDataCall")
+	proto.RegisterType((*CallData)(nil), "CallData")
+	proto.RegisterType((*AddressParam)(nil), "AddressParam")
+	proto.RegisterType((*PrivateKeyParam)(nil), "PrivateKeyParam")
+	proto.RegisterType((*StorageAtParam)(nil), "StorageAtParam")
+	proto.RegisterType((*BasePermissions)(nil), "BasePermissions")
+	proto.RegisterType((*AccountPermissions)(nil), "AccountPermissions")
+	proto.RegisterType((*Account)(nil), "Account")
+	proto.RegisterType((*AccountList)(nil), "AccountList")
+	proto.RegisterType((*Validator)(nil), "Validator")
+	proto.RegisterType((*ValidatorList)(nil), "ValidatorList")
+	proto.RegisterType((*StorageItem)(nil), "StorageItem")
+	proto.RegisterType((*StorageDump)(nil), "StorageDump")
+	proto.RegisterType((*HeightParam)(nil), "HeightParam")
+	proto.RegisterType((*BlocksParam)(nil), "BlocksParam")
+	proto.RegisterType((*Header)(nil), "Header")
+	proto.RegisterType((*Data)(nil), "Data")
+	proto.RegisterType((*Block)(nil), "Block")
+	proto.RegisterType((*BlockMeta)(nil), "BlockMeta")
+	proto.RegisterType((*BlockList)(nil), "BlockList")
+	proto.RegisterType((*ChainId)(nil), "ChainId")
+	proto.RegisterType((*GenesisDoc)(nil), "GenesisDoc")
+	proto.RegisterType((*GenesisDoc_GenesisAccount)(nil), "GenesisDoc.GenesisAccount")
+	proto.RegisterType((*GenesisDoc_GenesisValidator)(nil), "GenesisDoc.GenesisValidator")
+	proto.RegisterType((*UnconfirmedTxList)(nil), "UnconfirmedTxList")
+	proto.RegisterType((*Status)(nil), "Status")
+	proto.RegisterType((*RoundState)(nil), "RoundState")
+	proto.RegisterType((*PeerRoundState)(nil), "PeerRoundState")
+	proto.RegisterType((*ConsensusState)(nil), "ConsensusState")
+	proto.RegisterType((*EventIdParam)(nil), "EventIdParam")
+	proto.RegisterType((*SubIdParam)(nil), "SubIdParam")
+	proto.RegisterType((*EventUnSub)(nil), "EventUnSub")
+	proto.RegisterType((*EventDataLog)(nil), "EventDataLog")
+	proto.RegisterType((*EventDataTx)(nil), "EventDataTx")
+	proto.RegisterType((*Event)(nil), "Event")
+	proto.RegisterType((*PollResponse)(nil), "PollResponse")
+	proto.RegisterType((*NameRegEntryParam)(nil), "NameRegEntryParam")
+	proto.RegisterType((*TransactNameRegParam)(nil), "TransactNameRegParam")
+	proto.RegisterType((*NameRegEntry)(nil), "NameRegEntry")
+	proto.RegisterType((*NameRegEntryList)(nil), "NameRegEntryList")
+	proto.RegisterType((*PeerParam)(nil), "PeerParam")
+	proto.RegisterType((*ClientVersion)(nil), "ClientVersion")
+	proto.RegisterType((*NodeID)(nil), "NodeID")
+	proto.RegisterType((*NodeInfo)(nil), "NodeInfo")
+	proto.RegisterType((*NetworkInfo)(nil), "NetworkInfo")
+	proto.RegisterType((*Peer)(nil), "Peer")
+	proto.RegisterType((*PeerList)(nil), "PeerList")
+	proto.RegisterType((*CallParam)(nil), "CallParam")
+	proto.RegisterType((*CallCodeParam)(nil), "CallCodeParam")
+	proto.RegisterType((*TransactParam)(nil), "TransactParam")
+	proto.RegisterType((*SendParam)(nil), "SendParam")
+	proto.RegisterType((*TxParam)(nil), "TxParam")
+	proto.RegisterType((*SignTxParam)(nil), "SignTxParam")
+	proto.RegisterType((*SignedTx)(nil), "SignedTx")
+	proto.RegisterType((*CallResult)(nil), "CallResult")
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// AccountsClient is the client API for Accounts service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AccountsClient interface {
+	GenPrivAccount(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*PrivateAccount, error)
+	GenPrivAccountFromKey(ctx context.Context, in *PrivateKeyParam, opts ...grpc.CallOption) (*PrivateAccount, error)
+	GetAccount(ctx context.Context, in *AddressParam, opts ...grpc.CallOption) (*Account, error)
+	GetAccounts(ctx context.Context, in *FilterListParam, opts ...grpc.CallOption) (*AccountList, error)
+	GetValidators(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ValidatorList, error)
+	GetStorage(ctx context.Context, in *AddressParam, opts ...grpc.CallOption) (*StorageDump, error)
+	GetStorageAt(ctx context.Context, in *StorageAtParam, opts ...grpc.CallOption) (*StorageItem, error)
+}
+
+type accountsClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewAccountsClient(cc *grpc.ClientConn) AccountsClient {
+	return &accountsClient{cc}
+}
+
+func (c *accountsClient) GenPrivAccount(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*PrivateAccount, error) {
+	out := new(PrivateAccount)
+	err := c.cc.Invoke(ctx, "/Accounts/GenPrivAccount", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountsClient) GenPrivAccountFromKey(ctx context.Context, in *PrivateKeyParam, opts ...grpc.CallOption) (*PrivateAccount, error) {
+	out := new(PrivateAccount)
+	err := c.cc.Invoke(ctx, "/Accounts/GenPrivAccountFromKey", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountsClient) GetAccount(ctx context.Context, in *AddressParam, opts ...grpc.CallOption) (*Account, error) {
+	out := new(Account)
+	err := c.cc.Invoke(ctx, "/Accounts/GetAccount", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountsClient) GetAccounts(ctx context.Context, in *FilterListParam, opts ...grpc.CallOption) (*AccountList, error) {
+	out := new(AccountList)
+	err := c.cc.Invoke(ctx, "/Accounts/GetAccounts", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountsClient) GetValidators(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ValidatorList, error) {
+	out := new(ValidatorList)
+	err := c.cc.Invoke(ctx, "/Accounts/GetValidators", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountsClient) GetStorage(ctx context.Context, in *AddressParam, opts ...grpc.CallOption) (*StorageDump, error) {
+	out := new(StorageDump)
+	err := c.cc.Invoke(ctx, "/Accounts/GetStorage", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *accountsClient) GetStorageAt(ctx context.Context, in *StorageAtParam, opts ...grpc.CallOption) (*StorageItem, error) {
+	out := new(StorageItem)
+	err := c.cc.Invoke(ctx, "/Accounts/GetStorageAt", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AccountsServer is the server API for Accounts service.
+type AccountsServer interface {
+	GenPrivAccount(context.Context, *Empty) (*PrivateAccount, error)
+	GenPrivAccountFromKey(context.Context, *PrivateKeyParam) (*PrivateAccount, error)
+	GetAccount(context.Context, *AddressParam) (*Account, error)
+	GetAccounts(context.Context, *FilterListParam) (*AccountList, error)
+	GetValidators(context.Context, *Empty) (*ValidatorList, error)
+	GetStorage(context.Context, *AddressParam) (*StorageDump, error)
+	GetStorageAt(context.Context, *StorageAtParam) (*StorageItem, error)
+}
+
+func RegisterAccountsServer(s *grpc.Server, srv AccountsServer) {
+	s.RegisterService(&_Accounts_serviceDesc, srv)
+}
+
+func _Accounts_GenPrivAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountsServer).GenPrivAccount(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Accounts/GenPrivAccount",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountsServer).GenPrivAccount(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Accounts_GenPrivAccountFromKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PrivateKeyParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountsServer).GenPrivAccountFromKey(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Accounts/GenPrivAccountFromKey",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountsServer).GenPrivAccountFromKey(ctx, req.(*PrivateKeyParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Accounts_GetAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AddressParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountsServer).GetAccount(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Accounts/GetAccount",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountsServer).GetAccount(ctx, req.(*AddressParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Accounts_GetAccounts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FilterListParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountsServer).GetAccounts(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Accounts/GetAccounts",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountsServer).GetAccounts(ctx, req.(*FilterListParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Accounts_GetValidators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountsServer).GetValidators(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Accounts/GetValidators",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountsServer).GetValidators(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Accounts_GetStorage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AddressParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountsServer).GetStorage(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Accounts/GetStorage",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountsServer).GetStorage(ctx, req.(*AddressParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Accounts_GetStorageAt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(StorageAtParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AccountsServer).GetStorageAt(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Accounts/GetStorageAt",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AccountsServer).GetStorageAt(ctx, req.(*StorageAtParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Accounts_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "Accounts",
+	HandlerType: (*AccountsServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GenPrivAccount",
+			Handler:    _Accounts_GenPrivAccount_Handler,
+		},
+		{
+			MethodName: "GenPrivAccountFromKey",
+			Handler:    _Accounts_GenPrivAccountFromKey_Handler,
+		},
+		{
+			MethodName: "GetAccount",
+			Handler:    _Accounts_GetAccount_Handler,
+		},
+		{
+			MethodName: "GetAccounts",
+			Handler:    _Accounts_GetAccounts_Handler,
+		},
+		{
+			MethodName: "GetValidators",
+			Handler:    _Accounts_GetValidators_Handler,
+		},
+		{
+			MethodName: "GetStorage",
+			Handler:    _Accounts_GetStorage_Handler,
+		},
+		{
+			MethodName: "GetStorageAt",
+			Handler:    _Accounts_GetStorageAt_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "burrow.proto",
+}
+
+// BlockchainClient is the client API for Blockchain service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type BlockchainClient interface {
+	GetBlock(ctx context.Context, in *HeightParam, opts ...grpc.CallOption) (*Block, error)
+	GetBlocks(ctx context.Context, in *BlocksParam, opts ...grpc.CallOption) (*BlockList, error)
+	GetBlockchainInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Status, error)
+	GetChainId(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ChainId, error)
+	GetGenesis(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GenesisDoc, error)
+	GetLatestBlock(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Block, error)
+	GetUnconfirmedTxs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*UnconfirmedTxList, error)
+	GetConsensusState(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ConsensusState, error)
+}
+
+type blockchainClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewBlockchainClient(cc *grpc.ClientConn) BlockchainClient {
+	return &blockchainClient{cc}
+}
+
+func (c *blockchainClient) GetBlock(ctx context.Context, in *HeightParam, opts ...grpc.CallOption) (*Block, error) {
+	out := new(Block)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetBlock", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *blockchainClient) GetBlocks(ctx context.Context, in *BlocksParam, opts ...grpc.CallOption) (*BlockList, error) {
+	out := new(BlockList)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetBlocks", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *blockchainClient) GetBlockchainInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Status, error) {
+	out := new(Status)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetBlockchainInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *blockchainClient) GetChainId(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ChainId, error) {
+	out := new(ChainId)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetChainId", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *blockchainClient) GetGenesis(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GenesisDoc, error) {
+	out := new(GenesisDoc)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetGenesis", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *blockchainClient) GetLatestBlock(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Block, error) {
+	out := new(Block)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetLatestBlock", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *blockchainClient) GetUnconfirmedTxs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*UnconfirmedTxList, error) {
+	out := new(UnconfirmedTxList)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetUnconfirmedTxs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *blockchainClient) GetConsensusState(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ConsensusState, error) {
+	out := new(ConsensusState)
+	err := c.cc.Invoke(ctx, "/Blockchain/GetConsensusState", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BlockchainServer is the server API for Blockchain service.
+type BlockchainServer interface {
+	GetBlock(context.Context, *HeightParam) (*Block, error)
+	GetBlocks(context.Context, *BlocksParam) (*BlockList, error)
+	GetBlockchainInfo(context.Context, *Empty) (*Status, error)
+	GetChainId(context.Context, *Empty) (*ChainId, error)
+	GetGenesis(context.Context, *Empty) (*GenesisDoc, error)
+	GetLatestBlock(context.Context, *Empty) (*Block, error)
+	GetUnconfirmedTxs(context.Context, *Empty) (*UnconfirmedTxList, error)
+	GetConsensusState(context.Context, *Empty) (*ConsensusState, error)
+}
+
+func RegisterBlockchainServer(s *grpc.Server, srv BlockchainServer) {
+	s.RegisterService(&_Blockchain_serviceDesc, srv)
+}
+
+func _Blockchain_GetBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(HeightParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetBlock(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetBlock",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetBlock(ctx, req.(*HeightParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Blockchain_GetBlocks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(BlocksParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetBlocks(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetBlocks",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetBlocks(ctx, req.(*BlocksParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Blockchain_GetBlockchainInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetBlockchainInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetBlockchainInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetBlockchainInfo(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Blockchain_GetChainId_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetChainId(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetChainId",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetChainId(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Blockchain_GetGenesis_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetGenesis(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetGenesis",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetGenesis(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Blockchain_GetLatestBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetLatestBlock(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetLatestBlock",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetLatestBlock(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Blockchain_GetUnconfirmedTxs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetUnconfirmedTxs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetUnconfirmedTxs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetUnconfirmedTxs(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Blockchain_GetConsensusState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlockchainServer).GetConsensusState(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Blockchain/GetConsensusState",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlockchainServer).GetConsensusState(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Blockchain_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "Blockchain",
+	HandlerType: (*BlockchainServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetBlock",
+			Handler:    _Blockchain_GetBlock_Handler,
+		},
+		{
+			MethodName: "GetBlocks",
+			Handler:    _Blockchain_GetBlocks_Handler,
+		},
+		{
+			MethodName: "GetBlockchainInfo",
+			Handler:    _Blockchain_GetBlockchainInfo_Handler,
+		},
+		{
+			MethodName: "GetChainId",
+			Handler:    _Blockchain_GetChainId_Handler,
+		},
+		{
+			MethodName: "GetGenesis",
+			Handler:    _Blockchain_GetGenesis_Handler,
+		},
+		{
+			MethodName: "GetLatestBlock",
+			Handler:    _Blockchain_GetLatestBlock_Handler,
+		},
+		{
+			MethodName: "GetUnconfirmedTxs",
+			Handler:    _Blockchain_GetUnconfirmedTxs_Handler,
+		},
+		{
+			MethodName: "GetConsensusState",
+			Handler:    _Blockchain_GetConsensusState_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "burrow.proto",
+}
+
+// EventsClient is the client API for Events service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type EventsClient interface {
+	EventPoll(ctx context.Context, in *SubIdParam, opts ...grpc.CallOption) (*PollResponse, error)
+	EventSubscribe(ctx context.Context, in *EventIdParam, opts ...grpc.CallOption) (*SubIdParam, error)
+	EventUnsubscribe(ctx context.Context, in *SubIdParam, opts ...grpc.CallOption) (*EventUnSub, error)
+}
+
+type eventsClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewEventsClient(cc *grpc.ClientConn) EventsClient {
+	return &eventsClient{cc}
+}
+
+func (c *eventsClient) EventPoll(ctx context.Context, in *SubIdParam, opts ...grpc.CallOption) (*PollResponse, error) {
+	out := new(PollResponse)
+	err := c.cc.Invoke(ctx, "/Events/EventPoll", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *eventsClient) EventSubscribe(ctx context.Context, in *EventIdParam, opts ...grpc.CallOption) (*SubIdParam, error) {
+	out := new(SubIdParam)
+	err := c.cc.Invoke(ctx, "/Events/EventSubscribe", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *eventsClient) EventUnsubscribe(ctx context.Context, in *SubIdParam, opts ...grpc.CallOption) (*EventUnSub, error) {
+	out := new(EventUnSub)
+	err := c.cc.Invoke(ctx, "/Events/EventUnsubscribe", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// EventsServer is the server API for Events service.
+type EventsServer interface {
+	EventPoll(context.Context, *SubIdParam) (*PollResponse, error)
+	EventSubscribe(context.Context, *EventIdParam) (*SubIdParam, error)
+	EventUnsubscribe(context.Context, *SubIdParam) (*EventUnSub, error)
+}
+
+func RegisterEventsServer(s *grpc.Server, srv EventsServer) {
+	s.RegisterService(&_Events_serviceDesc, srv)
+}
+
+func _Events_EventPoll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SubIdParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(EventsServer).EventPoll(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Events/EventPoll",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(EventsServer).EventPoll(ctx, req.(*SubIdParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Events_EventSubscribe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(EventIdParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(EventsServer).EventSubscribe(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Events/EventSubscribe",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(EventsServer).EventSubscribe(ctx, req.(*EventIdParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Events_EventUnsubscribe_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SubIdParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(EventsServer).EventUnsubscribe(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Events/EventUnsubscribe",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(EventsServer).EventUnsubscribe(ctx, req.(*SubIdParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Events_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "Events",
+	HandlerType: (*EventsServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "EventPoll",
+			Handler:    _Events_EventPoll_Handler,
+		},
+		{
+			MethodName: "EventSubscribe",
+			Handler:    _Events_EventSubscribe_Handler,
+		},
+		{
+			MethodName: "EventUnsubscribe",
+			Handler:    _Events_EventUnsubscribe_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "burrow.proto",
+}
+
+// NameRegClient is the client API for NameReg service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type NameRegClient interface {
+	GetEntry(ctx context.Context, in *NameRegEntryParam, opts ...grpc.CallOption) (*NameRegEntry, error)
+	GetEntries(ctx context.Context, in *FilterListParam, opts ...grpc.CallOption) (*NameRegEntryList, error)
+	TransactNameReg(ctx context.Context, in *TransactNameRegParam, opts ...grpc.CallOption) (*TxReceipt, error)
+	TransactNameRegAndHold(ctx context.Context, in *TransactNameRegParam, opts ...grpc.CallOption) (*NameRegEntry, error)
+}
+
+type nameRegClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewNameRegClient(cc *grpc.ClientConn) NameRegClient {
+	return &nameRegClient{cc}
+}
+
+func (c *nameRegClient) GetEntry(ctx context.Context, in *NameRegEntryParam, opts ...grpc.CallOption) (*NameRegEntry, error) {
+	out := new(NameRegEntry)
+	err := c.cc.Invoke(ctx, "/NameReg/GetEntry", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *nameRegClient) GetEntries(ctx context.Context, in *FilterListParam, opts ...grpc.CallOption) (*NameRegEntryList, error) {
+	out := new(NameRegEntryList)
+	err := c.cc.Invoke(ctx, "/NameReg/GetEntries", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *nameRegClient) TransactNameReg(ctx context.Context, in *TransactNameRegParam, opts ...grpc.CallOption) (*TxReceipt, error) {
+	out := new(TxReceipt)
+	err := c.cc.Invoke(ctx, "/NameReg/TransactNameReg", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *nameRegClient) TransactNameRegAndHold(ctx context.Context, in *TransactNameRegParam, opts ...grpc.CallOption) (*NameRegEntry, error) {
+	out := new(NameRegEntry)
+	err := c.cc.Invoke(ctx, "/NameReg/TransactNameRegAndHold", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// NameRegServer is the server API for NameReg service.
+type NameRegServer interface {
+	GetEntry(context.Context, *NameRegEntryParam) (*NameRegEntry, error)
+	GetEntries(context.Context, *FilterListParam) (*NameRegEntryList, error)
+	TransactNameReg(context.Context, *TransactNameRegParam) (*TxReceipt, error)
+	TransactNameRegAndHold(context.Context, *TransactNameRegParam) (*NameRegEntry, error)
+}
+
+func RegisterNameRegServer(s *grpc.Server, srv NameRegServer) {
+	s.RegisterService(&_NameReg_serviceDesc, srv)
+}
+
+func _NameReg_GetEntry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(NameRegEntryParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NameRegServer).GetEntry(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/NameReg/GetEntry",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NameRegServer).GetEntry(ctx, req.(*NameRegEntryParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NameReg_GetEntries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(FilterListParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NameRegServer).GetEntries(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/NameReg/GetEntries",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NameRegServer).GetEntries(ctx, req.(*FilterListParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NameReg_TransactNameReg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(TransactNameRegParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NameRegServer).TransactNameReg(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/NameReg/TransactNameReg",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NameRegServer).TransactNameReg(ctx, req.(*TransactNameRegParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NameReg_TransactNameRegAndHold_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(TransactNameRegParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NameRegServer).TransactNameRegAndHold(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/NameReg/TransactNameRegAndHold",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NameRegServer).TransactNameRegAndHold(ctx, req.(*TransactNameRegParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _NameReg_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "NameReg",
+	HandlerType: (*NameRegServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetEntry",
+			Handler:    _NameReg_GetEntry_Handler,
+		},
+		{
+			MethodName: "GetEntries",
+			Handler:    _NameReg_GetEntries_Handler,
+		},
+		{
+			MethodName: "TransactNameReg",
+			Handler:    _NameReg_TransactNameReg_Handler,
+		},
+		{
+			MethodName: "TransactNameRegAndHold",
+			Handler:    _NameReg_TransactNameRegAndHold_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "burrow.proto",
+}
+
+// NetworkClient is the client API for Network service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type NetworkClient interface {
+	GetClientVersion(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ClientVersion, error)
+	GetNetworkInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*NetworkInfo, error)
+	GetNodeInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*NodeInfo, error)
+	GetPeer(ctx context.Context, in *PeerParam, opts ...grpc.CallOption) (*Peer, error)
+	GetPeers(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*PeerList, error)
+}
+
+type networkClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewNetworkClient(cc *grpc.ClientConn) NetworkClient {
+	return &networkClient{cc}
+}
+
+func (c *networkClient) GetClientVersion(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ClientVersion, error) {
+	out := new(ClientVersion)
+	err := c.cc.Invoke(ctx, "/Network/GetClientVersion", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *networkClient) GetNetworkInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*NetworkInfo, error) {
+	out := new(NetworkInfo)
+	err := c.cc.Invoke(ctx, "/Network/GetNetworkInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *networkClient) GetNodeInfo(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*NodeInfo, error) {
+	out := new(NodeInfo)
+	err := c.cc.Invoke(ctx, "/Network/GetNodeInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *networkClient) GetPeer(ctx context.Context, in *PeerParam, opts ...grpc.CallOption) (*Peer, error) {
+	out := new(Peer)
+	err := c.cc.Invoke(ctx, "/Network/GetPeer", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *networkClient) GetPeers(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*PeerList, error) {
+	out := new(PeerList)
+	err := c.cc.Invoke(ctx, "/Network/GetPeers", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// NetworkServer is the server API for Network service.
+type NetworkServer interface {
+	GetClientVersion(context.Context, *Empty) (*ClientVersion, error)
+	GetNetworkInfo(context.Context, *Empty) (*NetworkInfo, error)
+	GetNodeInfo(context.Context, *Empty) (*NodeInfo, error)
+	GetPeer(context.Context, *PeerParam) (*Peer, error)
+	GetPeers(context.Context, *Empty) (*PeerList, error)
+}
+
+func RegisterNetworkServer(s *grpc.Server, srv NetworkServer) {
+	s.RegisterService(&_Network_serviceDesc, srv)
+}
+
+func _Network_GetClientVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkServer).GetClientVersion(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Network/GetClientVersion",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkServer).GetClientVersion(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Network_GetNetworkInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkServer).GetNetworkInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Network/GetNetworkInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkServer).GetNetworkInfo(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Network_GetNodeInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkServer).GetNodeInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Network/GetNodeInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkServer).GetNodeInfo(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Network_GetPeer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PeerParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkServer).GetPeer(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Network/GetPeer",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkServer).GetPeer(ctx, req.(*PeerParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Network_GetPeers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NetworkServer).GetPeers(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Network/GetPeers",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NetworkServer).GetPeers(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Network_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "Network",
+	HandlerType: (*NetworkServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetClientVersion",
+			Handler:    _Network_GetClientVersion_Handler,
+		},
+		{
+			MethodName: "GetNetworkInfo",
+			Handler:    _Network_GetNetworkInfo_Handler,
+		},
+		{
+			MethodName: "GetNodeInfo",
+			Handler:    _Network_GetNodeInfo_Handler,
+		},
+		{
+			MethodName: "GetPeer",
+			Handler:    _Network_GetPeer_Handler,
+		},
+		{
+			MethodName: "GetPeers",
+			Handler:    _Network_GetPeers_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "burrow.proto",
+}
+
+// TransactionClient is the client API for Transaction service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type TransactionClient interface {
+	BroadcastTx(ctx context.Context, in *TxParam, opts ...grpc.CallOption) (*TxReceipt, error)
+	Call(ctx context.Context, in *CallParam, opts ...grpc.CallOption) (*CallResult, error)
+	CallCode(ctx context.Context, in *CallCodeParam, opts ...grpc.CallOption) (*CallResult, error)
+	Transact(ctx context.Context, in *TransactParam, opts ...grpc.CallOption) (*TxReceipt, error)
+	TransactAndHold(ctx context.Context, in *TransactParam, opts ...grpc.CallOption) (*EventDataCall, error)
+	Send(ctx context.Context, in *SendParam, opts ...grpc.CallOption) (*TxReceipt, error)
+	SendAndHold(ctx context.Context, in *SendParam, opts ...grpc.CallOption) (*TxReceipt, error)
+	SignTx(ctx context.Context, in *SignTxParam, opts ...grpc.CallOption) (*SignedTx, error)
+}
+
+type transactionClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewTransactionClient(cc *grpc.ClientConn) TransactionClient {
+	return &transactionClient{cc}
+}
+
+func (c *transactionClient) BroadcastTx(ctx context.Context, in *TxParam, opts ...grpc.CallOption) (*TxReceipt, error) {
+	out := new(TxReceipt)
+	err := c.cc.Invoke(ctx, "/Transaction/BroadcastTx", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *transactionClient) Call(ctx context.Context, in *CallParam, opts ...grpc.CallOption) (*CallResult, error) {
+	out := new(CallResult)
+	err := c.cc.Invoke(ctx, "/Transaction/Call", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *transactionClient) CallCode(ctx context.Context, in *CallCodeParam, opts ...grpc.CallOption) (*CallResult, error) {
+	out := new(CallResult)
+	err := c.cc.Invoke(ctx, "/Transaction/CallCode", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *transactionClient) Transact(ctx context.Context, in *TransactParam, opts ...grpc.CallOption) (*TxReceipt, error) {
+	out := new(TxReceipt)
+	err := c.cc.Invoke(ctx, "/Transaction/Transact", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *transactionClient) TransactAndHold(ctx context.Context, in *TransactParam, opts ...grpc.CallOption) (*EventDataCall, error) {
+	out := new(EventDataCall)
+	err := c.cc.Invoke(ctx, "/Transaction/TransactAndHold", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *transactionClient) Send(ctx context.Context, in *SendParam, opts ...grpc.CallOption) (*TxReceipt, error) {
+	out := new(TxReceipt)
+	err := c.cc.Invoke(ctx, "/Transaction/Send", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *transactionClient) SendAndHold(ctx context.Context, in *SendParam, opts ...grpc.CallOption) (*TxReceipt, error) {
+	out := new(TxReceipt)
+	err := c.cc.Invoke(ctx, "/Transaction/SendAndHold", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *transactionClient) SignTx(ctx context.Context, in *SignTxParam, opts ...grpc.CallOption) (*SignedTx, error) {
+	out := new(SignedTx)
+	err := c.cc.Invoke(ctx, "/Transaction/SignTx", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// TransactionServer is the server API for Transaction service.
+type TransactionServer interface {
+	BroadcastTx(context.Context, *TxParam) (*TxReceipt, error)
+	Call(context.Context, *CallParam) (*CallResult, error)
+	CallCode(context.Context, *CallCodeParam) (*CallResult, error)
+	Transact(context.Context, *TransactParam) (*TxReceipt, error)
+	TransactAndHold(context.Context, *TransactParam) (*EventDataCall, error)
+	Send(context.Context, *SendParam) (*TxReceipt, error)
+	SendAndHold(context.Context, *SendParam) (*TxReceipt, error)
+	SignTx(context.Context, *SignTxParam) (*SignedTx, error)
+}
+
+func RegisterTransactionServer(s *grpc.Server, srv TransactionServer) {
+	s.RegisterService(&_Transaction_serviceDesc, srv)
+}
+
+func _Transaction_BroadcastTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(TxParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).BroadcastTx(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/BroadcastTx",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).BroadcastTx(ctx, req.(*TxParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Transaction_Call_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CallParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).Call(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/Call",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).Call(ctx, req.(*CallParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Transaction_CallCode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CallCodeParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).CallCode(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/CallCode",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).CallCode(ctx, req.(*CallCodeParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Transaction_Transact_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(TransactParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).Transact(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/Transact",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).Transact(ctx, req.(*TransactParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Transaction_TransactAndHold_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(TransactParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).TransactAndHold(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/TransactAndHold",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).TransactAndHold(ctx, req.(*TransactParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Transaction_Send_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SendParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).Send(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/Send",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).Send(ctx, req.(*SendParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Transaction_SendAndHold_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SendParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).SendAndHold(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/SendAndHold",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).SendAndHold(ctx, req.(*SendParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Transaction_SignTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SignTxParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(TransactionServer).SignTx(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/Transaction/SignTx",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(TransactionServer).SignTx(ctx, req.(*SignTxParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Transaction_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "Transaction",
+	HandlerType: (*TransactionServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "BroadcastTx",
+			Handler:    _Transaction_BroadcastTx_Handler,
+		},
+		{
+			MethodName: "Call",
+			Handler:    _Transaction_Call_Handler,
+		},
+		{
+			MethodName: "CallCode",
+			Handler:    _Transaction_CallCode_Handler,
+		},
+		{
+			MethodName: "Transact",
+			Handler:    _Transaction_Transact_Handler,
+		},
+		{
+			MethodName: "TransactAndHold",
+			Handler:    _Transaction_TransactAndHold_Handler,
+		},
+		{
+			MethodName: "Send",
+			Handler:    _Transaction_Send_Handler,
+		},
+		{
+			MethodName: "SendAndHold",
+			Handler:    _Transaction_SendAndHold_Handler,
+		},
+		{
+			MethodName: "SignTx",
+			Handler:    _Transaction_SignTx_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "burrow.proto",
+}
+
+func init() { proto.RegisterFile("burrow.proto", fileDescriptor_burrow_5b05719ae28d1091) }
+
+var fileDescriptor_burrow_5b05719ae28d1091 = []byte{
+	// 2596 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x19, 0x5d, 0x6f, 0x1b, 0xc7,
+	0x11, 0xfc, 0x26, 0x87, 0x14, 0x25, 0x6f, 0x1c, 0x97, 0x61, 0x5d, 0xc5, 0xd9, 0x58, 0xb1, 0x93,
+	0x3a, 0xdb, 0x58, 0x4d, 0x82, 0x36, 0x48, 0x53, 0xc8, 0x92, 0x23, 0x0b, 0x71, 0x1c, 0x61, 0x49,
+	0xa7, 0xcd, 0x43, 0x1f, 0x4e, 0xe4, 0x4a, 0x3a, 0x98, 0xbc, 0x63, 0xef, 0x96, 0x36, 0xf3, 0x1f,
+	0xda, 0x3e, 0xb4, 0x8f, 0x05, 0xfa, 0xda, 0x87, 0xbe, 0xf7, 0x29, 0x40, 0x51, 0xf4, 0xa1, 0x40,
+	0xff, 0x45, 0x81, 0xfe, 0x90, 0x62, 0x66, 0x77, 0xef, 0xf6, 0x8e, 0x52, 0xec, 0xba, 0x40, 0x9e,
+	0x78, 0x33, 0x3b, 0x3b, 0x3b, 0x33, 0x3b, 0x9f, 0x4b, 0xe8, 0x9d, 0x2c, 0x93, 0x24, 0x7e, 0x26,
+	0x16, 0x49, 0xac, 0x63, 0xde, 0x82, 0xc6, 0xfd, 0xf9, 0x42, 0x7f, 0xcd, 0x1f, 0x40, 0xef, 0x28,
+	0x5a, 0x2c, 0xf5, 0xde, 0x64, 0x12, 0x2f, 0x23, 0xcd, 0xb6, 0x01, 0x16, 0x49, 0xf8, 0x34, 0xd0,
+	0xea, 0x33, 0xf5, 0xf5, 0xa0, 0x72, 0xa3, 0x72, 0xbb, 0x27, 0x3d, 0x0c, 0x1b, 0x40, 0x2b, 0x98,
+	0x4e, 0x13, 0x95, 0xa6, 0x83, 0x2a, 0x2d, 0x3a, 0x90, 0x3f, 0x00, 0xf8, 0x34, 0x9c, 0x69, 0x95,
+	0x1c, 0x04, 0x3a, 0x60, 0x57, 0xa1, 0x71, 0x1a, 0xaa, 0xd9, 0x94, 0x58, 0x74, 0xa4, 0x01, 0x58,
+	0x1f, 0xaa, 0xf1, 0x82, 0x36, 0x76, 0x64, 0x35, 0x5e, 0x20, 0xd5, 0xd3, 0x60, 0xb6, 0x54, 0x83,
+	0x9a, 0xa1, 0x22, 0x80, 0xff, 0x04, 0x36, 0x0d, 0xa7, 0x87, 0x61, 0xaa, 0x8f, 0x83, 0x24, 0x98,
+	0xb3, 0x1d, 0x68, 0x9d, 0x12, 0x2a, 0x1d, 0x54, 0x6e, 0xd4, 0x6e, 0x77, 0x77, 0xbb, 0x22, 0x3f,
+	0x4c, 0xba, 0x35, 0xfe, 0x0c, 0x3a, 0xe3, 0x95, 0x54, 0x13, 0x15, 0x2e, 0x34, 0xbb, 0x06, 0xcd,
+	0xf1, 0xea, 0x41, 0x90, 0x9e, 0x5b, 0x35, 0x2c, 0xc4, 0x6e, 0xc3, 0xe6, 0x7e, 0xa2, 0x02, 0xad,
+	0xd2, 0xfd, 0x38, 0xd2, 0x49, 0x30, 0xd1, 0x24, 0x51, 0x5b, 0x96, 0xd1, 0x44, 0x69, 0xbf, 0xf7,
+	0xac, 0xd2, 0x35, 0x62, 0x55, 0x46, 0xf3, 0xf7, 0xa0, 0x7f, 0x6c, 0x8c, 0xe4, 0x19, 0xf2, 0x78,
+	0xcd, 0x90, 0x39, 0x86, 0x7f, 0x53, 0x81, 0x8d, 0xfb, 0x4f, 0x55, 0xa4, 0x51, 0x83, 0xfd, 0x60,
+	0x36, 0x63, 0x3b, 0xd0, 0xc6, 0x5f, 0x84, 0x89, 0xbe, 0xbb, 0xdb, 0x11, 0x0e, 0x21, 0xb3, 0x25,
+	0x54, 0xeb, 0x8b, 0x24, 0x3c, 0x0b, 0x23, 0x7b, 0x01, 0x16, 0xf2, 0xd4, 0xad, 0x15, 0xd4, 0xdd,
+	0x06, 0x18, 0xe9, 0x60, 0xf2, 0xe4, 0x40, 0x2d, 0xf4, 0xf9, 0xa0, 0x7e, 0xa3, 0x72, 0xbb, 0x26,
+	0x3d, 0x0c, 0xee, 0x93, 0x4a, 0x2f, 0x93, 0x68, 0xd0, 0x30, 0xfb, 0x0c, 0xc4, 0xae, 0x43, 0xe7,
+	0xfe, 0x6a, 0xa2, 0x16, 0x3a, 0x8c, 0xa3, 0x41, 0x93, 0xee, 0x27, 0x47, 0xf0, 0xa7, 0x50, 0x90,
+	0x08, 0xbf, 0x55, 0xe2, 0x0c, 0x6d, 0xa0, 0x0c, 0xaf, 0x9c, 0xa4, 0x06, 0x62, 0x0c, 0xea, 0xa4,
+	0xa4, 0x91, 0xb3, 0xee, 0xfc, 0xe5, 0x4b, 0xf2, 0x04, 0x14, 0xb0, 0x2e, 0x0d, 0xc0, 0xb6, 0xa0,
+	0x76, 0x18, 0xa4, 0x24, 0x58, 0x5d, 0xe2, 0x27, 0xbf, 0x0d, 0x3d, 0x6b, 0x73, 0xe3, 0x18, 0x9e,
+	0x3f, 0x56, 0x8a, 0xfe, 0x78, 0x17, 0x36, 0x73, 0x73, 0x1b, 0xe2, 0xe7, 0x38, 0x37, 0xff, 0x18,
+	0xfa, 0x23, 0x1d, 0x27, 0xc1, 0x99, 0xda, 0xd3, 0xcf, 0x61, 0x8f, 0xa2, 0x3d, 0x51, 0x5f, 0x5b,
+	0xcd, 0xf0, 0x93, 0xff, 0x1c, 0x36, 0xef, 0x05, 0xa9, 0x3a, 0x56, 0xc9, 0x3c, 0x4c, 0xd3, 0x30,
+	0x8e, 0x52, 0xd4, 0x0a, 0x41, 0xb3, 0xb9, 0x2e, 0x0d, 0x80, 0x76, 0x19, 0x29, 0x7d, 0x2f, 0x34,
+	0x7e, 0x57, 0x97, 0x16, 0xe2, 0xc7, 0xc0, 0xac, 0xf7, 0xf8, 0x3c, 0x6e, 0x42, 0x1d, 0xd9, 0x5a,
+	0x97, 0xd8, 0x12, 0xa5, 0x33, 0x24, 0xad, 0xe2, 0x49, 0x32, 0x9e, 0x29, 0x8c, 0xca, 0x1a, 0x46,
+	0x12, 0x01, 0xfc, 0x3f, 0x15, 0x68, 0x39, 0x87, 0x1c, 0x40, 0x6b, 0xaf, 0xa8, 0x8a, 0x05, 0xf1,
+	0xa6, 0x8f, 0x97, 0x27, 0xb3, 0x70, 0xf2, 0x59, 0xa6, 0x50, 0x8e, 0x60, 0x43, 0x68, 0x8f, 0xd4,
+	0xaf, 0x97, 0x2a, 0x9a, 0x98, 0x30, 0xad, 0xcb, 0x0c, 0x46, 0x9e, 0xf7, 0x82, 0x59, 0x80, 0x4b,
+	0xe6, 0xde, 0x1c, 0x88, 0x77, 0xbc, 0x1f, 0x4f, 0x95, 0xf5, 0x29, 0xfa, 0x66, 0x37, 0xa0, 0x6b,
+	0xcd, 0x2b, 0xe3, 0x58, 0x93, 0x4f, 0xf5, 0xa4, 0x8f, 0x62, 0x1f, 0x40, 0xd7, 0x53, 0x6d, 0xd0,
+	0x22, 0x95, 0x5f, 0x11, 0xeb, 0x56, 0x91, 0x3e, 0x1d, 0x7f, 0x0c, 0x5d, 0x4b, 0x82, 0x19, 0x03,
+	0xcf, 0xb9, 0x37, 0x8b, 0x27, 0x4f, 0x1e, 0xa8, 0xf0, 0xec, 0x5c, 0x5b, 0xdb, 0xfb, 0x28, 0x76,
+	0x13, 0xda, 0x76, 0x83, 0x31, 0x58, 0x77, 0xb7, 0xed, 0x0e, 0x91, 0xd9, 0x0a, 0xff, 0x0a, 0x3a,
+	0x5f, 0x06, 0xb3, 0x70, 0x1a, 0xe8, 0x38, 0x79, 0x69, 0xf3, 0xa1, 0x0b, 0xc4, 0xcf, 0x54, 0x62,
+	0x6d, 0x67, 0x00, 0xfe, 0xe7, 0x0a, 0x6c, 0x64, 0xbc, 0x5f, 0x50, 0xe8, 0x0f, 0x61, 0xeb, 0x5e,
+	0x1c, 0x4d, 0xd5, 0x34, 0xdb, 0xe8, 0x84, 0x07, 0x91, 0xa1, 0xe4, 0x1a, 0x0d, 0xfb, 0x18, 0x5e,
+	0x79, 0x1c, 0x9d, 0xc4, 0xd1, 0x34, 0x8c, 0xce, 0xbc, 0xad, 0xb5, 0xb5, 0xad, 0x17, 0x91, 0xf1,
+	0x0f, 0xb2, 0x4b, 0x3b, 0xd2, 0x6a, 0x8e, 0x6e, 0x9f, 0xc7, 0x4e, 0xcd, 0x2a, 0x68, 0x22, 0xd7,
+	0xa8, 0x6e, 0x00, 0x1e, 0x64, 0xdb, 0x0e, 0x96, 0xf3, 0x45, 0xf9, 0xea, 0x2b, 0xeb, 0x57, 0xff,
+	0x1e, 0xf4, 0xbc, 0x73, 0x9c, 0x66, 0x3d, 0xe1, 0x21, 0x65, 0x81, 0x82, 0xef, 0x40, 0xd7, 0x58,
+	0xc6, 0x84, 0xea, 0x35, 0x68, 0x9e, 0xfb, 0xb6, 0xb3, 0x10, 0x3f, 0xb2, 0x86, 0xb5, 0x09, 0xe3,
+	0x3a, 0x74, 0xe6, 0x61, 0x54, 0xb0, 0x72, 0x8e, 0xa0, 0xd5, 0x60, 0x65, 0x57, 0xab, 0x76, 0xd5,
+	0x21, 0xf8, 0xef, 0xaa, 0xd0, 0x7c, 0xa0, 0x82, 0xa9, 0x22, 0x77, 0xd8, 0x3f, 0x0f, 0xc2, 0xe8,
+	0xe8, 0xc0, 0x56, 0x38, 0x07, 0xa2, 0x1c, 0xde, 0xfe, 0x9a, 0xb4, 0x10, 0x46, 0xc4, 0x38, 0x9c,
+	0x9b, 0x18, 0xaa, 0x49, 0xfa, 0x46, 0xda, 0x47, 0xcb, 0xf9, 0x78, 0x95, 0xda, 0xbc, 0x6c, 0x21,
+	0x34, 0xd7, 0xc3, 0x20, 0xd5, 0x24, 0xf7, 0xd1, 0x81, 0x0d, 0x22, 0x1f, 0xc5, 0xde, 0x82, 0x3e,
+	0x82, 0xfb, 0xf1, 0x7c, 0x1e, 0x6a, 0xca, 0xfa, 0x26, 0x9c, 0x4a, 0x58, 0x8c, 0x5e, 0xcc, 0xaf,
+	0x44, 0xd1, 0x22, 0x8a, 0x0c, 0x46, 0x1e, 0xf9, 0x45, 0x13, 0x45, 0xdb, 0xf0, 0x28, 0x62, 0xc9,
+	0xf5, 0x17, 0x0b, 0x22, 0xe8, 0x58, 0xd7, 0x37, 0x20, 0xbf, 0x63, 0x32, 0x39, 0x7a, 0x05, 0x2a,
+	0x81, 0xa5, 0xb9, 0x27, 0xf1, 0x13, 0xb5, 0x3d, 0xc7, 0x0d, 0xc6, 0x29, 0xe8, 0x9b, 0xff, 0x0a,
+	0x1a, 0x24, 0x3e, 0xa5, 0x0d, 0xab, 0x9a, 0x8d, 0x25, 0xa7, 0xd6, 0xeb, 0xce, 0xc0, 0xb4, 0xb1,
+	0xbb, 0xdb, 0x12, 0x06, 0x94, 0xce, 0xee, 0xaf, 0x79, 0xb5, 0xa3, 0xbb, 0xdb, 0x10, 0x54, 0x1c,
+	0x09, 0xc5, 0x3f, 0x85, 0x0e, 0xb1, 0xf9, 0x5c, 0xe9, 0xe0, 0xff, 0x38, 0x82, 0xff, 0xc2, 0xf2,
+	0xa1, 0xb0, 0xdc, 0x06, 0x40, 0x8b, 0x16, 0xfc, 0xc5, 0xc3, 0xb0, 0x77, 0x00, 0xb2, 0x43, 0xf3,
+	0x70, 0xcc, 0x50, 0xd2, 0x5b, 0xe5, 0x13, 0xe7, 0x33, 0x53, 0xf4, 0x33, 0xfa, 0x7c, 0x14, 0xcc,
+	0x95, 0x75, 0xa0, 0x1c, 0x91, 0x3b, 0xd7, 0xd4, 0xf6, 0x4a, 0xd9, 0xbe, 0x1b, 0xd0, 0x3d, 0x54,
+	0x91, 0x4a, 0xc3, 0xd4, 0xab, 0xf4, 0x3e, 0x8a, 0xff, 0xb3, 0x0e, 0x60, 0xe1, 0x83, 0x78, 0xe2,
+	0x6d, 0x20, 0xe7, 0xb3, 0x69, 0xc5, 0x43, 0x15, 0x45, 0xa9, 0x96, 0x45, 0x61, 0x50, 0x1f, 0x05,
+	0x33, 0xed, 0x6a, 0x35, 0x7e, 0xb3, 0x3b, 0x70, 0xe5, 0x70, 0x16, 0x9f, 0x04, 0x33, 0x3f, 0x57,
+	0x9b, 0xfc, 0xbf, 0xbe, 0xc0, 0x3e, 0xf4, 0x72, 0x6d, 0x83, 0xec, 0x33, 0x14, 0xb9, 0x80, 0xee,
+	0x73, 0x2d, 0xfb, 0xb2, 0x8f, 0x01, 0xbc, 0x6c, 0xd5, 0xa4, 0x9d, 0xd7, 0x2f, 0xd8, 0x99, 0xe7,
+	0x2f, 0x8f, 0x7e, 0xf8, 0x97, 0x0a, 0xf4, 0x8b, 0xac, 0x5f, 0x3a, 0x83, 0x5f, 0x83, 0xe6, 0xde,
+	0x1c, 0x39, 0xd8, 0x14, 0x6e, 0x21, 0x34, 0x0d, 0xd9, 0xac, 0x4e, 0x36, 0xa3, 0xef, 0x72, 0x01,
+	0x6b, 0xbc, 0x58, 0x01, 0x1b, 0xfe, 0xbe, 0x02, 0x5b, 0x65, 0x75, 0xbe, 0x13, 0x79, 0x87, 0xd0,
+	0x36, 0x49, 0x7f, 0x1c, 0xd3, 0xe5, 0xf4, 0x64, 0x06, 0xf3, 0x9f, 0xc1, 0x95, 0xc7, 0xd1, 0x24,
+	0x8e, 0x4e, 0xc3, 0x64, 0xae, 0xa6, 0xe3, 0x15, 0xc5, 0x43, 0x9e, 0xb1, 0x6c, 0x96, 0xb5, 0x19,
+	0xcb, 0x66, 0x80, 0x6a, 0x96, 0x01, 0xf8, 0x1f, 0xaa, 0xd0, 0x1c, 0xe9, 0x40, 0x2f, 0x53, 0xec,
+	0x6c, 0x1f, 0xc5, 0x53, 0x75, 0x14, 0x9d, 0xc6, 0x59, 0x67, 0xeb, 0x10, 0x32, 0x5b, 0x2a, 0x3b,
+	0x77, 0x75, 0xcd, 0xb9, 0x8b, 0x8a, 0xd7, 0xca, 0x8a, 0xdf, 0x86, 0xcd, 0x87, 0xd8, 0xbf, 0x9b,
+	0x24, 0x49, 0x3c, 0xea, 0xa6, 0x5d, 0x2f, 0xa1, 0xd1, 0x83, 0x7d, 0x94, 0x09, 0x6e, 0xd3, 0x65,
+	0xae, 0x2f, 0x94, 0xf8, 0x52, 0x1c, 0x35, 0x29, 0x5d, 0x97, 0xd1, 0xa8, 0x01, 0x6a, 0xf3, 0xa5,
+	0x4a, 0xf0, 0x5e, 0x29, 0xe1, 0x76, 0xa4, 0x8f, 0xe2, 0xbf, 0xa9, 0x00, 0xc8, 0x78, 0x19, 0x4d,
+	0xd1, 0x34, 0xca, 0x2b, 0x16, 0x95, 0x42, 0xb1, 0xa0, 0x76, 0x6e, 0x19, 0x4d, 0x6d, 0x0d, 0x31,
+	0x00, 0x05, 0xa3, 0x56, 0x0b, 0x57, 0x42, 0xf0, 0x1b, 0x4d, 0x32, 0xd2, 0x41, 0xa2, 0x49, 0x2c,
+	0x13, 0x84, 0x39, 0x02, 0xd3, 0x97, 0x29, 0x06, 0xb4, 0x6c, 0x34, 0xf4, 0x30, 0x28, 0x4e, 0xff,
+	0x58, 0xa9, 0xe4, 0x3b, 0x14, 0x69, 0x08, 0xed, 0xe3, 0x24, 0x5e, 0xc4, 0x69, 0x30, 0x23, 0x81,
+	0xda, 0x32, 0x83, 0xf9, 0x0a, 0xfa, 0xfb, 0x71, 0x94, 0xaa, 0x28, 0x5d, 0xa6, 0x46, 0x9a, 0x1f,
+	0xfa, 0xe6, 0xb2, 0xce, 0xd3, 0x15, 0x39, 0x4a, 0xfa, 0xd6, 0xfc, 0x29, 0x6c, 0x16, 0x95, 0x71,
+	0x19, 0x79, 0x53, 0x14, 0xf1, 0xb2, 0x4c, 0x87, 0x73, 0x05, 0x4d, 0x63, 0x47, 0xd3, 0xac, 0xf1,
+	0x57, 0x06, 0x76, 0xf5, 0xdd, 0x82, 0x9c, 0x03, 0x8c, 0x96, 0x27, 0x8e, 0xee, 0x2a, 0x34, 0x52,
+	0x84, 0xdc, 0x9c, 0x4b, 0x00, 0xbf, 0x09, 0x40, 0xdc, 0x1e, 0x47, 0xa3, 0xe5, 0x09, 0x5a, 0x34,
+	0x51, 0xe9, 0x72, 0x66, 0x2c, 0xda, 0x96, 0x16, 0xe2, 0x33, 0x7b, 0x26, 0x56, 0xaf, 0x87, 0xf1,
+	0xd9, 0xb7, 0x04, 0xbc, 0x9b, 0x98, 0xaa, 0xde, 0xc4, 0x94, 0xdf, 0x93, 0x0d, 0x73, 0x7b, 0x4f,
+	0x38, 0x07, 0xc6, 0x8b, 0x70, 0x82, 0x29, 0x19, 0x47, 0x01, 0x0b, 0xf1, 0x11, 0x74, 0xb3, 0xd3,
+	0xc6, 0x2b, 0x1c, 0xc5, 0xc7, 0x2b, 0x7b, 0x4e, 0x75, 0xbc, 0xf2, 0xc6, 0xc0, 0xea, 0xe5, 0x63,
+	0x60, 0xad, 0x3c, 0x06, 0xfe, 0xb5, 0x02, 0x0d, 0xe2, 0x8a, 0x86, 0xa0, 0x0f, 0x67, 0x08, 0x83,
+	0x15, 0x85, 0x43, 0x6d, 0xc5, 0xed, 0x09, 0x0f, 0x27, 0x0b, 0x52, 0xbd, 0x5f, 0x1a, 0x8a, 0x6d,
+	0x9d, 0xef, 0x8b, 0x02, 0x56, 0x96, 0x26, 0xe7, 0xbb, 0x45, 0x43, 0x92, 0xcf, 0x75, 0x77, 0x37,
+	0x84, 0x8f, 0x94, 0x05, 0x12, 0x2e, 0xa0, 0x77, 0x1c, 0xcf, 0x66, 0x52, 0xa5, 0x0b, 0x74, 0x38,
+	0xb6, 0x0d, 0x4d, 0xba, 0x60, 0xf7, 0xbe, 0xd0, 0x34, 0x9b, 0xa5, 0xc5, 0xf2, 0x5b, 0x70, 0x05,
+	0x13, 0xa6, 0x54, 0x67, 0xf7, 0x23, 0x9d, 0xd8, 0x79, 0x92, 0x41, 0x3d, 0xca, 0x0b, 0x38, 0x7d,
+	0xf3, 0x3f, 0x56, 0xe0, 0xea, 0x38, 0x09, 0xa2, 0x34, 0x98, 0x68, 0xbb, 0xc3, 0x10, 0xdf, 0x85,
+	0x5e, 0xe8, 0xbd, 0xb4, 0x58, 0x5f, 0xde, 0x10, 0xfe, 0xf3, 0x8b, 0x2c, 0x90, 0x64, 0xfc, 0xab,
+	0x39, 0x7f, 0xc4, 0x4d, 0x5d, 0x03, 0xd4, 0x91, 0xf4, 0x8d, 0xc9, 0xf7, 0x54, 0xb9, 0x50, 0xc3,
+	0x4f, 0xbc, 0xcd, 0xc0, 0xd4, 0x00, 0x13, 0xf3, 0x16, 0xe2, 0xa7, 0xd0, 0xf3, 0xd5, 0xc8, 0x6a,
+	0x42, 0xc5, 0xab, 0x09, 0x57, 0xa1, 0xf1, 0xc5, 0xb3, 0xc8, 0xf6, 0x47, 0x3d, 0x69, 0x80, 0xc2,
+	0xd0, 0xde, 0xb1, 0x2e, 0x38, 0x80, 0xd6, 0xfd, 0xd5, 0x22, 0x4c, 0x94, 0x2b, 0xff, 0x0e, 0xe4,
+	0x5f, 0xc1, 0x96, 0x7f, 0xce, 0x0b, 0x4e, 0x38, 0x6f, 0x42, 0x03, 0x77, 0xb9, 0xa8, 0xdd, 0x10,
+	0x3e, 0x0f, 0x69, 0xd6, 0xf8, 0x0e, 0x74, 0x30, 0x78, 0x9f, 0x37, 0xfe, 0xbf, 0x0d, 0x1b, 0xfb,
+	0xb3, 0x50, 0x45, 0xda, 0x66, 0x5e, 0x24, 0x7d, 0x6a, 0xf3, 0xb2, 0x8d, 0x68, 0x0b, 0xf2, 0x8f,
+	0xa0, 0x49, 0x35, 0xe8, 0xe0, 0x42, 0x73, 0x7c, 0x6b, 0xb1, 0xe5, 0xff, 0xa8, 0xe4, 0xb5, 0x8d,
+	0x7d, 0x0f, 0xaa, 0xb6, 0xdf, 0xc4, 0xb6, 0xd2, 0xf0, 0x94, 0xd5, 0xa3, 0x03, 0xea, 0x22, 0xc3,
+	0x54, 0xab, 0x08, 0x03, 0xda, 0x5e, 0xa7, 0x87, 0x41, 0xd9, 0x1e, 0x29, 0xfd, 0x2c, 0x4e, 0x9e,
+	0x58, 0xfb, 0x3a, 0x10, 0x57, 0x5c, 0x35, 0x31, 0x75, 0xdb, 0x81, 0x98, 0x47, 0xf7, 0xcf, 0x83,
+	0x28, 0x52, 0xb3, 0xd4, 0x0e, 0x08, 0x19, 0x8c, 0xbb, 0x3e, 0x8f, 0xa3, 0xf0, 0x89, 0x4a, 0xec,
+	0xcb, 0x8d, 0x03, 0xe9, 0x72, 0xf5, 0xb9, 0x4a, 0x06, 0x2d, 0xf3, 0x4e, 0x40, 0x00, 0x3f, 0x85,
+	0xae, 0x3d, 0x90, 0xf4, 0xb8, 0x0e, 0x1d, 0x23, 0x5c, 0x18, 0x9d, 0xd9, 0x9c, 0x95, 0x23, 0xf2,
+	0x55, 0x95, 0xb8, 0xe7, 0x86, 0x1c, 0xc1, 0xbe, 0x0f, 0x0d, 0xbc, 0x1e, 0x37, 0x5f, 0x36, 0x4c,
+	0xe6, 0x35, 0x38, 0xfe, 0x39, 0xd4, 0xf1, 0xe3, 0x45, 0x1b, 0x82, 0x6d, 0x80, 0xa3, 0xf4, 0x8b,
+	0xa5, 0x3e, 0xc9, 0xea, 0x4e, 0x5b, 0x7a, 0x18, 0x7e, 0x0b, 0xda, 0xc8, 0x8e, 0xbc, 0x2b, 0x3b,
+	0xb7, 0x72, 0xe1, 0xb9, 0x1d, 0x4c, 0x14, 0x59, 0xd4, 0x9e, 0x26, 0xf1, 0xdc, 0x3a, 0x0c, 0x7d,
+	0x5f, 0xfe, 0xac, 0x59, 0x88, 0xb7, 0x9e, 0x89, 0x37, 0xfe, 0x19, 0x6c, 0x20, 0xbb, 0xfd, 0x78,
+	0xaa, 0x2e, 0x67, 0xc9, 0xa0, 0x3e, 0x89, 0xa7, 0x6e, 0x2c, 0xa6, 0xef, 0x0b, 0x99, 0xfd, 0xa9,
+	0x02, 0x1b, 0x2e, 0x61, 0xbc, 0x74, 0xa6, 0xf8, 0x9f, 0xe4, 0x47, 0xd7, 0x39, 0x0b, 0xd2, 0x87,
+	0xe1, 0x3c, 0xd4, 0x36, 0x70, 0x33, 0xd8, 0xe5, 0x92, 0x46, 0x96, 0x4b, 0xb8, 0x86, 0xce, 0x48,
+	0x45, 0xd3, 0x97, 0x96, 0xed, 0x3a, 0x74, 0x74, 0xbc, 0x57, 0x90, 0x2e, 0x47, 0x78, 0x99, 0xaa,
+	0x56, 0xc8, 0x54, 0xaf, 0x41, 0x6b, 0xbc, 0x32, 0x67, 0xf6, 0xa1, 0xaa, 0xb3, 0x52, 0xa5, 0x57,
+	0xfc, 0x97, 0xd0, 0x1d, 0x85, 0x67, 0xd1, 0x25, 0xcb, 0xd8, 0x05, 0x2c, 0x0a, 0x6f, 0xb1, 0x5e,
+	0x17, 0x50, 0xc0, 0xcb, 0x32, 0x1d, 0x1f, 0x42, 0x1b, 0x39, 0x63, 0xb7, 0xbb, 0x76, 0xea, 0x27,
+	0x00, 0x54, 0x7b, 0xa8, 0x76, 0x7b, 0xe5, 0xb2, 0x52, 0x28, 0x97, 0x03, 0x68, 0x1d, 0x06, 0xe9,
+	0xe3, 0x54, 0x4d, 0xed, 0xf3, 0x81, 0x03, 0x77, 0xff, 0x55, 0xcd, 0x07, 0x21, 0xf6, 0x36, 0x4d,
+	0x27, 0x28, 0x8e, 0xb3, 0x52, 0x53, 0xd0, 0x83, 0xfc, 0xb0, 0x2c, 0x24, 0xfb, 0x08, 0x5e, 0x2d,
+	0x92, 0x7e, 0x9a, 0xc4, 0x73, 0x6c, 0x77, 0xb7, 0x44, 0xe9, 0x7d, 0x73, 0x7d, 0xef, 0x0e, 0xce,
+	0x82, 0xd9, 0x45, 0x6c, 0x08, 0xff, 0xe9, 0x74, 0x98, 0x3d, 0x79, 0xb1, 0x77, 0xb1, 0xf1, 0xd6,
+	0x99, 0x70, 0x5b, 0xa2, 0xf4, 0xfc, 0x3e, 0xec, 0x09, 0xff, 0x7d, 0xed, 0x16, 0x6c, 0x1c, 0x2a,
+	0xed, 0xbd, 0x30, 0x39, 0xd9, 0xfb, 0xa2, 0xf8, 0xa6, 0xf5, 0x36, 0x1d, 0x6f, 0x1f, 0x6d, 0xca,
+	0xc7, 0x67, 0x4f, 0x3b, 0xf4, 0x40, 0xf4, 0x2e, 0xf4, 0x72, 0xd2, 0x3d, 0xcd, 0x36, 0x45, 0xf1,
+	0x25, 0x76, 0x58, 0x78, 0x09, 0xda, 0xfd, 0x5b, 0xd5, 0xce, 0xdd, 0x13, 0x9c, 0x54, 0xd9, 0x0d,
+	0x68, 0x1f, 0x2a, 0xd3, 0x87, 0xb3, 0x9e, 0xf0, 0x5e, 0x85, 0x86, 0x4d, 0x33, 0x8b, 0xb3, 0x1d,
+	0xe8, 0x38, 0x8a, 0x94, 0xf5, 0x84, 0xf7, 0x22, 0x34, 0xb4, 0xe3, 0x3a, 0x49, 0x7c, 0x13, 0xae,
+	0x38, 0x32, 0xe2, 0x4c, 0x69, 0xc8, 0xa9, 0xd7, 0x12, 0x76, 0x9e, 0xd9, 0x26, 0xbd, 0xdc, 0x4c,
+	0xee, 0x96, 0xdb, 0xc2, 0x61, 0xde, 0xa0, 0x75, 0x3b, 0xb8, 0x64, 0xeb, 0x5d, 0x51, 0x98, 0xcb,
+	0xfb, 0x87, 0x4a, 0x7b, 0xf3, 0x43, 0x46, 0xe6, 0x24, 0xfe, 0x11, 0x89, 0x52, 0x98, 0xc0, 0x72,
+	0x5e, 0x4c, 0xac, 0x8f, 0x66, 0x77, 0x68, 0x43, 0xa9, 0x7f, 0xce, 0xdd, 0xaa, 0xb8, 0xb0, 0xfb,
+	0xdb, 0x0a, 0x34, 0xa9, 0xc5, 0x49, 0xd9, 0x2d, 0xe8, 0xd0, 0x17, 0x36, 0x44, 0xac, 0x2b, 0xf2,
+	0xee, 0x76, 0xb8, 0x21, 0x0a, 0x4d, 0xd2, 0x1d, 0xe8, 0x13, 0xe1, 0x68, 0x79, 0x92, 0x4e, 0x92,
+	0xf0, 0x04, 0xef, 0xd4, 0xef, 0x9a, 0x87, 0xfe, 0x66, 0x76, 0x07, 0xb6, 0x6c, 0x13, 0x9c, 0x66,
+	0xf4, 0x05, 0xee, 0x5d, 0x91, 0x37, 0xc9, 0xbb, 0xff, 0xae, 0x40, 0xcb, 0x96, 0x7b, 0xf6, 0x2e,
+	0x5d, 0xa7, 0xed, 0x50, 0xc4, 0x5a, 0xdf, 0x35, 0x2c, 0x36, 0x06, 0xec, 0x2e, 0x99, 0x1b, 0xbf,
+	0x43, 0x75, 0x91, 0xf7, 0x5e, 0x11, 0x6b, 0xbd, 0xc8, 0xfb, 0xb0, 0x59, 0x6a, 0xd2, 0xd8, 0xab,
+	0xe2, 0xa2, 0xb6, 0x6d, 0x08, 0x22, 0xff, 0x47, 0xe9, 0x13, 0xb8, 0x56, 0xa2, 0xd9, 0x8b, 0xa6,
+	0x0f, 0xe2, 0xd9, 0xf4, 0xb2, 0xcd, 0x45, 0x41, 0x77, 0xbf, 0xa9, 0x64, 0x75, 0x9e, 0xbd, 0x83,
+	0x13, 0xbf, 0x2e, 0xb6, 0x28, 0x79, 0x1c, 0x15, 0xf1, 0x6f, 0x91, 0xb3, 0xf8, 0x15, 0xda, 0x51,
+	0xf6, 0x84, 0x8f, 0xa5, 0x01, 0x5a, 0x67, 0xe5, 0xd3, 0x11, 0xe5, 0xb5, 0x95, 0x5d, 0x87, 0xd6,
+	0xa1, 0xd2, 0x54, 0x83, 0x41, 0x64, 0x6d, 0xd4, 0xd0, 0x54, 0x4b, 0xf6, 0x03, 0xb2, 0x3b, 0x95,
+	0x4c, 0x6f, 0xb3, 0x2b, 0xb1, 0xbb, 0x7f, 0xaf, 0x42, 0xd7, 0xa9, 0x89, 0x62, 0xbd, 0x09, 0xdd,
+	0x7b, 0x49, 0x1c, 0x4c, 0x27, 0x41, 0xaa, 0xc7, 0x2b, 0xd6, 0x16, 0x36, 0x23, 0x17, 0x6c, 0xf6,
+	0x3a, 0xd4, 0xa9, 0x47, 0x07, 0x91, 0x55, 0xe0, 0x61, 0x57, 0x78, 0x99, 0xf4, 0x96, 0xf9, 0x27,
+	0x89, 0xfe, 0x21, 0xe8, 0x8b, 0x42, 0x5d, 0x2d, 0x12, 0xbe, 0x05, 0x6d, 0x77, 0x3a, 0xeb, 0x8b,
+	0x42, 0xc9, 0x2c, 0x9c, 0x78, 0x37, 0xbf, 0x5b, 0x77, 0x3d, 0x65, 0xf2, 0xd2, 0x3c, 0xc1, 0xb6,
+	0xa1, 0x8e, 0x25, 0x8e, 0x81, 0xc8, 0x2a, 0x5d, 0x81, 0xe5, 0x0e, 0x74, 0x71, 0xc1, 0xb1, 0xbb,
+	0x8c, 0xec, 0x0d, 0x68, 0x9a, 0xc2, 0xc4, 0x7a, 0xc2, 0xab, 0x50, 0xc3, 0x8e, 0x70, 0x55, 0xe5,
+	0xa4, 0x49, 0xff, 0xbf, 0xfe, 0xf8, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x36, 0xb5, 0x06, 0x7c,
+	0x8f, 0x1d, 0x00, 0x00,
+}
diff --git a/rpc/burrow/burrow.proto b/rpc/burrow/burrow.proto
index 969fac4e70394b796535fa6a54ae78d7ee41be9c..24f7333d289c606b7f584860d599d4d44a1c12eb 100644
--- a/rpc/burrow/burrow.proto
+++ b/rpc/burrow/burrow.proto
@@ -33,9 +33,7 @@ message TxReceipt {
 // This is here because it is used in both the Account Service (GenPrivAccount)
 // And in the transaction service (SignTx)
 message PrivateAccount {
-	bytes Address    = 1;
-	bytes PublicKey  = 2;
-	bytes PrivateKey = 3;
+	bytes PrivateKey = 1;
 }
 
 // This is hear because it is used by both the Events service (Poll) and the
diff --git a/rpc/burrow/transaction_server.go b/rpc/burrow/transaction_server.go
index 73deeabc2e5b48788b2ae548e76836438c4e5ace..e8cd83475f3add3f420566482d64873fbcbe9dbf 100644
--- a/rpc/burrow/transaction_server.go
+++ b/rpc/burrow/transaction_server.go
@@ -1,6 +1,8 @@
 package burrow
 
 import (
+	acm "github.com/hyperledger/burrow/account"
+	"github.com/hyperledger/burrow/account/state"
 	"github.com/hyperledger/burrow/crypto"
 	"github.com/hyperledger/burrow/execution/evm/events"
 	"github.com/hyperledger/burrow/rpc"
@@ -10,10 +12,16 @@ import (
 
 type transactionServer struct {
 	service *rpc.Service
+	txCodec txs.Codec
+	reader  state.Reader
 }
 
-func NewTransactionServer(service *rpc.Service) TransactionServer {
-	return &transactionServer{service}
+func NewTransactionServer(service *rpc.Service, reader state.Reader, txCodec txs.Codec) TransactionServer {
+	return &transactionServer{
+		service: service,
+		reader:  reader,
+		txCodec: txCodec,
+	}
 }
 
 func (ts *transactionServer) BroadcastTx(ctx context.Context, param *TxParam) (*TxReceipt, error) {
@@ -24,12 +32,32 @@ func (ts *transactionServer) BroadcastTx(ctx context.Context, param *TxParam) (*
 	return txReceipt(receipt), nil
 }
 
-func (ts *transactionServer) Call(context.Context, *CallParam) (*CallResult, error) {
-	panic("implement me")
+func (ts *transactionServer) Call(ctx context.Context, param *CallParam) (*CallResult, error) {
+	fromAddress, err := crypto.AddressFromBytes(param.From)
+	if err != nil {
+		return nil, err
+	}
+	address, err := crypto.AddressFromBytes(param.Address)
+	if err != nil {
+		return nil, err
+	}
+	call, err := ts.service.Transactor().Call(ts.reader, fromAddress, address, param.Data)
+	return &CallResult{
+		Return:  call.Return,
+		GasUsed: call.GasUsed,
+	}, nil
 }
 
-func (ts *transactionServer) CallCode(context.Context, *CallCodeParam) (*CallResult, error) {
-	panic("implement me")
+func (ts *transactionServer) CallCode(ctx context.Context, param *CallCodeParam) (*CallResult, error) {
+	fromAddress, err := crypto.AddressFromBytes(param.From)
+	if err != nil {
+		return nil, err
+	}
+	call, err := ts.service.Transactor().CallCode(ts.reader, fromAddress, param.Code, param.Data)
+	return &CallResult{
+		Return:  call.Return,
+		GasUsed: call.GasUsed,
+	}, nil
 }
 
 func (ts *transactionServer) Transact(ctx context.Context, param *TransactParam) (*TxReceipt, error) {
@@ -57,23 +85,65 @@ func (ts *transactionServer) TransactAndHold(ctx context.Context, param *Transac
 	if err != nil {
 		return nil, err
 	}
-	edt, err := ts.service.Transactor().TransactAndHold(inputAccount, address, param.Data, param.GasLimit, param.Fee)
+	edt, err := ts.service.Transactor().TransactAndHold(ctx, inputAccount, address, param.Data, param.GasLimit, param.Fee)
 	if err != nil {
 		return nil, err
 	}
 	return eventDataCall(edt), nil
 }
 
-func (ts *transactionServer) Send(context.Context, *SendParam) (*TxReceipt, error) {
-	panic("implement me")
+func (ts *transactionServer) Send(ctx context.Context, param *SendParam) (*TxReceipt, error) {
+	inputAccount, err := ts.service.SigningAccount(param.InputAccount.Address, param.InputAccount.PrivateKey)
+	if err != nil {
+		return nil, err
+	}
+	toAddress, err := crypto.AddressFromBytes(param.ToAddress)
+	if err != nil {
+		return nil, err
+	}
+	receipt, err := ts.service.Transactor().Send(inputAccount, toAddress, param.Amount)
+	if err != nil {
+		return nil, err
+	}
+	return txReceipt(receipt), nil
 }
 
-func (ts *transactionServer) SendAndHold(context.Context, *SendParam) (*TxReceipt, error) {
-	panic("implement me")
+func (ts *transactionServer) SendAndHold(ctx context.Context, param *SendParam) (*TxReceipt, error) {
+	inputAccount, err := ts.service.SigningAccount(param.InputAccount.Address, param.InputAccount.PrivateKey)
+	if err != nil {
+		return nil, err
+	}
+	toAddress, err := crypto.AddressFromBytes(param.ToAddress)
+	if err != nil {
+		return nil, err
+	}
+	receipt, err := ts.service.Transactor().SendAndHold(ctx, inputAccount, toAddress, param.Amount)
+	if err != nil {
+		return nil, err
+	}
+	return txReceipt(receipt), nil
 }
 
-func (ts *transactionServer) SignTx(context.Context, *SignTxParam) (*SignedTx, error) {
-	panic("implement me")
+func (ts *transactionServer) SignTx(ctx context.Context, param *SignTxParam) (*SignedTx, error) {
+	txEnv, err := ts.txCodec.DecodeTx(param.Tx)
+	if err != nil {
+		return nil, err
+	}
+	signers, err := signersFromPrivateAccounts(param.PrivateAccounts)
+	if err != nil {
+		return nil, err
+	}
+	txEnvSigned, err := ts.service.Transactor().SignTx(txEnv, signers)
+	if err != nil {
+		return nil, err
+	}
+	bs, err := ts.txCodec.EncodeTx(txEnvSigned)
+	if err != nil {
+		return nil, err
+	}
+	return &SignedTx{
+		Tx: bs,
+	}, nil
 }
 
 func eventDataCall(edt *events.EventDataCall) *EventDataCall {
@@ -102,3 +172,28 @@ func txReceipt(receipt *txs.Receipt) *TxReceipt {
 		TxHash:          receipt.TxHash,
 	}
 }
+
+func signersFromPrivateAccounts(privateAccounts []*PrivateAccount) ([]acm.AddressableSigner, error) {
+	signers := make([]acm.AddressableSigner, len(privateAccounts))
+	var err error
+	for i, pa := range privateAccounts {
+		signers[i], err = privateAccount(pa)
+		if err != nil {
+			return nil, err
+		}
+	}
+	return signers, nil
+}
+
+func privateAccount(privateAccount *PrivateAccount) (acm.PrivateAccount, error) {
+	privateKey, err := crypto.PrivateKeyFromRawBytes(privateAccount.PrivateKey, crypto.CurveTypeEd25519)
+	if err != nil {
+		return nil, err
+	}
+	publicKey := privateKey.GetPublicKey()
+	return acm.ConcretePrivateAccount{
+		Address:    publicKey.Address(),
+		PrivateKey: privateKey,
+		PublicKey:  publicKey,
+	}.PrivateAccount(), nil
+}
diff --git a/rpc/result.go b/rpc/result.go
index 4dc921fc20bbf8a63c6d7970e743599285cc912f..05ab9a853b6f11b1bb1566e035daac72ae56fa4d 100644
--- a/rpc/result.go
+++ b/rpc/result.go
@@ -19,6 +19,7 @@ import (
 	"fmt"
 
 	acm "github.com/hyperledger/burrow/account"
+	"github.com/hyperledger/burrow/binary"
 	"github.com/hyperledger/burrow/crypto"
 	"github.com/hyperledger/burrow/execution"
 	exeEvents "github.com/hyperledger/burrow/execution/events"
@@ -43,8 +44,8 @@ func init() {
 }
 
 type ResultGetStorage struct {
-	Key   []byte
-	Value []byte
+	Key   binary.HexBytes
+	Value binary.HexBytes
 }
 
 type ResultCall struct {
@@ -65,13 +66,13 @@ type ResultListAccounts struct {
 }
 
 type ResultDumpStorage struct {
-	StorageRoot  []byte
+	StorageRoot  binary.HexBytes
 	StorageItems []StorageItem
 }
 
 type StorageItem struct {
-	Key   []byte
-	Value []byte
+	Key   binary.HexBytes
+	Value binary.HexBytes
 }
 
 type ResultListBlocks struct {
@@ -111,9 +112,9 @@ func (b *Block) UnmarshalJSON(data []byte) (err error) {
 
 type ResultStatus struct {
 	NodeInfo          p2p.NodeInfo
-	GenesisHash       []byte
+	GenesisHash       binary.HexBytes
 	PubKey            crypto.PublicKey
-	LatestBlockHash   []byte
+	LatestBlockHash   binary.HexBytes
 	LatestBlockHeight uint64
 	LatestBlockTime   int64
 	NodeVersion       string
@@ -122,7 +123,7 @@ type ResultStatus struct {
 type ResultChainId struct {
 	ChainName   string
 	ChainId     string
-	GenesisHash []byte
+	GenesisHash binary.HexBytes
 }
 
 type ResultSubscribe struct {
diff --git a/rpc/result_test.go b/rpc/result_test.go
index 5de3f3eb949ee2808b9fc9c2a7747b58cd2145ea..62ea5b510fd0c4404108091e5ae8b16460194b9d 100644
--- a/rpc/result_test.go
+++ b/rpc/result_test.go
@@ -57,7 +57,7 @@ func TestListUnconfirmedTxs(t *testing.T) {
 	}
 	bs, err := json.Marshal(res)
 	require.NoError(t, err)
-	assert.Equal(t, "{\"NumTxs\":3,\"Txs\":[{\"Signatories\":null,\"Tx\":{\"ChainID\":\"testChain\",\"Type\":\"CallTx\",\"Payload\":{\"Input\":null,\"Address\":\"0100000000000000000000000000000000000000\",\"GasLimit\":0,\"Fee\":0,\"Data\":null}}}]}",
+	assert.Equal(t, "{\"NumTxs\":3,\"Txs\":[{\"Signatories\":null,\"Tx\":{\"ChainID\":\"testChain\",\"Type\":\"CallTx\",\"Payload\":{\"Input\":null,\"Address\":\"0100000000000000000000000000000000000000\",\"GasLimit\":0,\"Fee\":0}}}]}",
 		string(bs))
 }
 
diff --git a/rpc/v0/methods.go b/rpc/v0/methods.go
index e2c2aca1bd73fe450dcd9ff48c90a7256166a182..536a554f3614170b14cf91a18ad8a1763070cc15 100644
--- a/rpc/v0/methods.go
+++ b/rpc/v0/methods.go
@@ -15,6 +15,8 @@
 package v0
 
 import (
+	"context"
+
 	acm "github.com/hyperledger/burrow/account"
 	"github.com/hyperledger/burrow/crypto"
 	"github.com/hyperledger/burrow/execution/names"
@@ -255,7 +257,8 @@ func GetMethods(codec rpc.Codec, service *rpc.Service, logger *logging.Logger) m
 			if err != nil {
 				return nil, rpc.INVALID_PARAMS, err
 			}
-			eventDataCall, err := service.Transactor().TransactAndHold(inputAccount, address, param.Data, param.GasLimit, param.Fee)
+			eventDataCall, err := service.Transactor().TransactAndHold(context.Background(), inputAccount, address,
+				param.Data, param.GasLimit, param.Fee)
 			if err != nil {
 				return nil, rpc.INTERNAL_ERROR, err
 			}
@@ -297,7 +300,7 @@ func GetMethods(codec rpc.Codec, service *rpc.Service, logger *logging.Logger) m
 			if err != nil {
 				return nil, rpc.INVALID_PARAMS, err
 			}
-			rec, err := service.Transactor().SendAndHold(inputAccount, toAddress, param.Amount)
+			rec, err := service.Transactor().SendAndHold(context.Background(), inputAccount, toAddress, param.Amount)
 			if err != nil {
 				return nil, rpc.INTERNAL_ERROR, err
 			}
diff --git a/txs/amino_codec_test.go b/txs/amino_codec_test.go
index 2cc87ad689bf62b19fa86f035911bcf4a31d04b5..86a90a5d028f36c57d39a6fc67adb860cda63f55 100644
--- a/txs/amino_codec_test.go
+++ b/txs/amino_codec_test.go
@@ -3,7 +3,9 @@ package txs
 import (
 	"testing"
 
-	"github.com/hyperledger/burrow/account"
+	"fmt"
+
+	acm "github.com/hyperledger/burrow/account"
 	"github.com/hyperledger/burrow/crypto"
 	"github.com/hyperledger/burrow/txs/payload"
 	"github.com/stretchr/testify/assert"
@@ -39,7 +41,7 @@ func TestAminoEncodeTxDecodeTx(t *testing.T) {
 
 func TestAminoEncodeTxDecodeTx_CallTx(t *testing.T) {
 	codec := NewAminoCodec()
-	inputAccount := account.GeneratePrivateAccountFromSecret("fooo")
+	inputAccount := acm.GeneratePrivateAccountFromSecret("fooo")
 	amount := uint64(2)
 	sequence := uint64(3)
 	tx := &payload.CallTx{
@@ -63,3 +65,21 @@ func TestAminoEncodeTxDecodeTx_CallTx(t *testing.T) {
 	assert.NoError(t, err, "DecodeTx error")
 	assert.Equal(t, txEnv, txEnvOut)
 }
+
+func TestAminoTxEnvelope(t *testing.T) {
+	codec := NewAminoCodec()
+	privAccFrom := acm.GeneratePrivateAccountFromSecret("foo")
+	privAccTo := acm.GeneratePrivateAccountFromSecret("bar")
+	toAddress := privAccTo.Address()
+	txEnv := Enclose("testChain", payload.NewCallTxWithSequence(privAccFrom.PublicKey(), &toAddress,
+		[]byte{3, 4, 5, 5}, 343, 2323, 12, 3))
+	err := txEnv.Sign(privAccFrom)
+	require.NoError(t, err)
+
+	bs, err := codec.EncodeTx(txEnv)
+	require.NoError(t, err)
+	txEnvOut, err := codec.DecodeTx(bs)
+	require.NoError(t, err)
+	fmt.Println(txEnvOut)
+	assert.Equal(t, txEnv, txEnvOut)
+}
diff --git a/txs/envelope.go b/txs/envelope.go
index 222867eacd2c481cae94d66a203bcb5eeee489db..107c7a6770a853de5a34e992ab39dd983653a071 100644
--- a/txs/envelope.go
+++ b/txs/envelope.go
@@ -9,6 +9,11 @@ import (
 	"github.com/hyperledger/burrow/txs/payload"
 )
 
+type Codec interface {
+	Encoder
+	Decoder
+}
+
 type Encoder interface {
 	EncodeTx(envelope *Envelope) ([]byte, error)
 }
diff --git a/txs/json_codec.go b/txs/json_codec.go
index ccfbfe8ceb2d0e6e1b96fa8e4963e13f8c0cb9bd..af33f1193e4452e171f6ec693d7e60e4df4e4346 100644
--- a/txs/json_codec.go
+++ b/txs/json_codec.go
@@ -15,10 +15,10 @@ func (gwc *jsonCodec) EncodeTx(env *Envelope) ([]byte, error) {
 }
 
 func (gwc *jsonCodec) DecodeTx(txBytes []byte) (*Envelope, error) {
-	env := new(Envelope)
-	err := json.Unmarshal(txBytes, env)
+	txEnv := new(Envelope)
+	err := json.Unmarshal(txBytes, txEnv)
 	if err != nil {
 		return nil, err
 	}
-	return env, nil
+	return txEnv, nil
 }
diff --git a/txs/json_codec_test.go b/txs/json_codec_test.go
index 76c907e01a043aa188190d5ad13e49bb514cae05..f0056290c55d5efa285733fcb5831ad1138b936b 100644
--- a/txs/json_codec_test.go
+++ b/txs/json_codec_test.go
@@ -63,3 +63,30 @@ func TestJSONEncodeTxDecodeTx_CallTx(t *testing.T) {
 	assert.NoError(t, err, "DecodeTx error")
 	assert.Equal(t, txEnv, txEnvOut)
 }
+
+func TestJSONEncodeTxDecodeTx_CallTxNoData(t *testing.T) {
+	codec := NewJSONCodec()
+	inputAccount := account.GeneratePrivateAccountFromSecret("fooo")
+	amount := uint64(2)
+	sequence := uint64(3)
+	tx := &payload.CallTx{
+		Input: &payload.TxInput{
+			Address:  inputAccount.Address(),
+			Amount:   amount,
+			Sequence: sequence,
+		},
+		GasLimit: 233,
+		Fee:      2,
+		Address:  nil,
+		Data:     nil,
+	}
+	txEnv := Enclose(chainID, tx)
+	require.NoError(t, txEnv.Sign(inputAccount))
+	txBytes, err := codec.EncodeTx(txEnv)
+	if err != nil {
+		t.Fatal(err)
+	}
+	txEnvOut, err := codec.DecodeTx(txBytes)
+	assert.NoError(t, err, "DecodeTx error")
+	assert.Equal(t, txEnv, txEnvOut)
+}
diff --git a/txs/payload/call_tx.go b/txs/payload/call_tx.go
index b3c1270bf10da692fb23e3b9238980d67e3ff3c4..40037d69f475051d0ae048dbd8c607f25ec62611 100644
--- a/txs/payload/call_tx.go
+++ b/txs/payload/call_tx.go
@@ -13,7 +13,8 @@ type CallTx struct {
 	Address  *crypto.Address
 	GasLimit uint64
 	Fee      uint64
-	Data     []byte
+	// Signing normalisation needs omitempty
+	Data []byte `json:",omitempty"`
 }
 
 func NewCallTx(st state.AccountGetter, from crypto.PublicKey, to *crypto.Address, data []byte,
diff --git a/txs/payload/governance_tx.go b/txs/payload/governance_tx.go
index bf145470beb75eb2d29279be677de8dd91d05fa0..24c0cb48ad0a060d960345561057d4c39a55ac92 100644
--- a/txs/payload/governance_tx.go
+++ b/txs/payload/governance_tx.go
@@ -36,6 +36,10 @@ func NewGovTxWithSequence(from crypto.Address, sequence uint64, accounts []spec.
 	}
 }
 
+func (tx *GovernanceTx) Type() Type {
+	return TypeGovernance
+}
+
 func (tx *GovernanceTx) GetInputs() []*TxInput {
 	return []*TxInput{tx.Input}
 }
diff --git a/vendor/github.com/tendermint/tmlibs/test/assert.go b/vendor/github.com/tendermint/tmlibs/test/assert.go
deleted file mode 100644
index a6ffed0cec39bb8079a9d698645a876640fea7a6..0000000000000000000000000000000000000000
--- a/vendor/github.com/tendermint/tmlibs/test/assert.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package test
-
-import (
-	"testing"
-)
-
-func AssertPanics(t *testing.T, msg string, f func()) {
-	defer func() {
-		if err := recover(); err == nil {
-			t.Errorf("Should have panic'd, but didn't: %v", msg)
-		}
-	}()
-	f()
-}
diff --git a/vendor/github.com/tendermint/tmlibs/test/mutate.go b/vendor/github.com/tendermint/tmlibs/test/mutate.go
deleted file mode 100644
index 76534e8b1874bf4c5e0a7c84a2472c46f6f9df33..0000000000000000000000000000000000000000
--- a/vendor/github.com/tendermint/tmlibs/test/mutate.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package test
-
-import (
-	cmn "github.com/tendermint/tmlibs/common"
-)
-
-// Contract: !bytes.Equal(input, output) && len(input) >= len(output)
-func MutateByteSlice(bytez []byte) []byte {
-	// If bytez is empty, panic
-	if len(bytez) == 0 {
-		panic("Cannot mutate an empty bytez")
-	}
-
-	// Copy bytez
-	mBytez := make([]byte, len(bytez))
-	copy(mBytez, bytez)
-	bytez = mBytez
-
-	// Try a random mutation
-	switch cmn.RandInt() % 2 {
-	case 0: // Mutate a single byte
-		bytez[cmn.RandInt()%len(bytez)] += byte(cmn.RandInt()%255 + 1)
-	case 1: // Remove an arbitrary byte
-		pos := cmn.RandInt() % len(bytez)
-		bytez = append(bytez[:pos], bytez[pos+1:]...)
-	}
-	return bytez
-}