Commit 34a91a59 authored by vipwzw's avatar vipwzw

update chain33

parent ebd5ec20
......@@ -943,7 +943,7 @@ func (bs *BlockStore) saveBlockSequence(storeBatch dbm.Batch, hash []byte, heigh
storeBatch.Set(calcSequenceToHashKey(newSequence), BlockSequenceByte)
//parachain hash->seq 只记录add block时的hash和seq对应关系
if Type == AddBlock && isParaChain {
if Type == AddBlock {
Sequencebytes := types.Encode(&types.Int64{Data: newSequence})
storeBatch.Set(calcHashToSequenceKey(hash), Sequencebytes)
}
......@@ -991,7 +991,7 @@ func (bs *BlockStore) GetSequenceByHash(hash []byte) (int64, error) {
if err != dbm.ErrNotFoundInDb {
storeLog.Error("GetSequenceByHash", "error", err)
}
return -1, types.ErrHeightNotExist
return -1, types.ErrHashNotExist
}
err = types.Decode(seqbytes, &seq)
......
......@@ -634,6 +634,7 @@ func testGetSeqByHash(t *testing.T, blockchain *blockchain.BlockChain) {
reqBlock.IsDetail = true
hashes := make([][]byte, 1)
Sequences, err := blockchain.GetBlockSequences(&reqBlock)
if err == nil && Sequences != nil {
for index, sequence := range Sequences.Items {
hashes[index] = sequence.Hash
......@@ -641,8 +642,8 @@ func testGetSeqByHash(t *testing.T, blockchain *blockchain.BlockChain) {
}
seq, _ := blockchain.ProcGetSeqByHash(hashes[0])
if seq != -1 {
t.Error("testGetSeqByHash only para chain GetSeqByHash ")
if seq == -1 {
t.Error(" GetSeqByHash err")
}
chainlog.Info("testGetSeqByHash end --------------------")
......
......@@ -455,11 +455,13 @@ func (chain *BlockChain) addParaChainBlockDetail(msg queue.Message) {
//parachian 通过blockhash获取对应的seq,只记录了addblock时的seq
func (chain *BlockChain) getSeqByHash(msg queue.Message) {
var sequence types.Int64
blockhash := (msg.Data).(*types.ReqHash)
sequence.Data, _ = chain.ProcGetSeqByHash(blockhash.Hash)
msg.Reply(chain.client.NewMessage("rpc", types.EventGetSeqByHash, &sequence))
seq, err := chain.ProcGetSeqByHash(blockhash.Hash)
if err != nil {
chainlog.Error("getSeqByHash", "err", err.Error())
msg.Reply(chain.client.NewMessage("rpc", types.EventReply, err))
}
msg.Reply(chain.client.NewMessage("rpc", types.EventGetSeqByHash, &types.Int64{Data: seq}))
}
//获取指定前缀key的数量
......
......@@ -25,7 +25,7 @@ func TestReindex(t *testing.T) {
chain := mock33.GetBlockChain()
db := chain.GetDB()
kvs := getAllKeys(db)
assert.Equal(t, len(kvs), 19)
assert.Equal(t, len(kvs), 20)
defer mock33.Close()
txs := util.GenCoinsTxs(mock33.GetGenesisKey(), 10)
for i := 0; i < len(txs); i++ {
......
......@@ -101,6 +101,9 @@ func (m *mockBlockChain) SetQueueClient(q queue.Queue) {
} else {
msg.ReplyErr("Do not support", types.ErrInvalidParam)
}
case types.EventGetSeqByHash:
msg.Reply(client.NewMessage(blockchainKey, types.EventReplyQuery, &types.Int64{Data: 1}))
case types.EventIsSync:
msg.Reply(client.NewMessage(blockchainKey, types.EventReplyIsSync, &types.IsCaughtUp{}))
case types.EventIsNtpClockSync:
......
......@@ -499,6 +499,29 @@ func (_m *QueueProtocolAPI) GetSeqCallBackLastNum(param *types.ReqString) (*type
return r0, r1
}
// GetSequenceByHash provides a mock function with given fields: param
func (_m *QueueProtocolAPI) GetSequenceByHash(param *types.ReqHash) (*types.Int64, error) {
ret := _m.Called(param)
var r0 *types.Int64
if rf, ok := ret.Get(0).(func(*types.ReqHash) *types.Int64); ok {
r0 = rf(param)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*types.Int64)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(*types.ReqHash) error); ok {
r1 = rf(param)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// GetTransactionByAddr provides a mock function with given fields: param
func (_m *QueueProtocolAPI) GetTransactionByAddr(param *types.ReqAddr) (*types.ReplyTxInfos, error) {
ret := _m.Called(param)
......
......@@ -898,6 +898,25 @@ func (q *QueueProtocol) GetLastBlockSequence() (*types.Int64, error) {
return nil, types.ErrTypeAsset
}
// GetSequenceByHash 通过hash获取对应的执行序列号
func (q *QueueProtocol) GetSequenceByHash(param *types.ReqHash) (*types.Int64, error) {
if param == nil {
err := types.ErrInvalidParam
log.Error("GetSequenceByHash", "Error", err)
return nil, err
}
msg, err := q.query(blockchainKey, types.EventGetSeqByHash, param)
if err != nil {
log.Error("GetSequenceByHash", "Error", err.Error())
return nil, err
}
if reply, ok := msg.GetData().(*types.Int64); ok {
return reply, nil
}
return nil, types.ErrTypeAsset
}
// WalletCreateTx create transaction
func (q *QueueProtocol) WalletCreateTx(param *types.ReqCreateTransaction) (*types.Transaction, error) {
msg, err := q.query(walletKey, types.EventWalletCreateTx, param)
......
......@@ -806,6 +806,7 @@ func TestGRPC(t *testing.T) {
testGetBlockOverviewGRPC(t, &grpcMock)
testGetAddrOverviewGRPC(t, &grpcMock)
testGetBlockHashGRPC(t, &grpcMock)
testGetSequenceByHashGRPC(t, &grpcMock)
testGenSeedGRPC(t, &grpcMock)
testGetSeedGRPC(t, &grpcMock)
testSaveSeedGRPC(t, &grpcMock)
......@@ -1131,3 +1132,11 @@ func testSendTxGRPC(t *testing.T, rpc *mockGRPCSystem) {
t.Error("Call SendTransaction Failed.", err)
}
}
func testGetSequenceByHashGRPC(t *testing.T, rpc *mockGRPCSystem) {
var res types.Int64
err := rpc.newRpcCtx("GetSequenceByHash", &types.ReqHash{}, &res)
if err != nil {
t.Error("Call GetSequenceByHash Failed.", err)
}
}
......@@ -111,6 +111,8 @@ type QueueProtocolAPI interface {
GetBlockSequences(param *types.ReqBlocks) (*types.BlockSequences, error)
//types.EventGetBlockByHashes:
GetBlockByHashes(param *types.ReqHashes) (*types.BlockDetails, error)
//types.EventGetSequenceByHash:
GetSequenceByHash(param *types.ReqHash) (*types.Int64, error)
// --------------- blockchain interfaces end
......
......@@ -315,6 +315,12 @@ func (c *GrpcCtx) Run() (err error) {
*c.Res.(*types.NodeNetInfo) = *reply
}
errRet = err
case "GetSequenceByHash":
reply, err := rpc.GetSequenceByHash(context.Background(), c.Params.(*types.ReqHash))
if err == nil {
*c.Res.(*types.Int64) = *reply
}
errRet = err
default:
errRet = errors.New(fmt.Sprintf("Unsupport method %v", c.Method))
}
......
......@@ -345,6 +345,11 @@ func (g *Grpc) GetBlockByHashes(ctx context.Context, in *pb.ReqHashes) (*pb.Bloc
return g.cli.GetBlockByHashes(in)
}
// GetSequenceByHash get block sequece by hash
func (g *Grpc) GetSequenceByHash(ctx context.Context, in *pb.ReqHash) (*pb.Int64, error) {
return g.cli.GetSequenceByHash(in)
}
// SignRawTx signature rawtransaction
func (g *Grpc) SignRawTx(ctx context.Context, in *pb.ReqSignRawTx) (*pb.ReplySignRawTx, error) {
return g.cli.SignRawTx(in)
......
......@@ -5,10 +5,10 @@
package rpc_test
import (
"fmt"
"testing"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/rpc/jsonclient"
rpctypes "github.com/33cn/chain33/rpc/types"
"github.com/33cn/chain33/types"
......@@ -19,16 +19,18 @@ import (
_ "github.com/33cn/chain33/system"
)
func getRPCClient(t *testing.T, mocker *testnode.Chain33Mock) *jsonclient.JSONClient {
jrpcClient := mocker.GetJSONC()
assert.NotNil(t, jrpcClient)
return jrpcClient
}
func TestErrLog(t *testing.T) {
// 启动RPCmocker
mocker := testnode.New("--free--", nil)
defer mocker.Close()
mocker.Listen()
rpcCfg := mocker.GetCfg().RPC
jrpcClient, err := jsonclient.NewJSONClient(fmt.Sprintf("http://%s/", rpcCfg.JrpcBindAddr))
assert.NoError(t, err)
assert.NotNil(t, jrpcClient)
jrpcClient := getRPCClient(t, mocker)
gen := mocker.GetGenesisKey()
//发送交易到区块链
addr1, key1 := util.Genaddress()
......@@ -55,3 +57,43 @@ func TestErrLog(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, string(testResult.Receipt.Logs[0].Log), `"ErrNoBalance"`)
}
func getTx(t *testing.T, hex string) *types.Transaction {
data, err := common.FromHex(hex)
assert.Nil(t, err)
var tx types.Transaction
err = types.Decode(data, &tx)
assert.Nil(t, err)
return &tx
}
func TestSendToExec(t *testing.T) {
mocker := testnode.New("--free--", nil)
defer mocker.Close()
mocker.Listen()
jrpcClient := getRPCClient(t, mocker)
//1. 调用createrawtransaction 创建交易
req := &rpctypes.CreateTx{
To: address.ExecAddress("user.f3d"),
Amount: 10,
Fee: 1,
Note: "12312",
IsWithdraw: false,
IsToken: false,
TokenSymbol: "",
ExecName: "user.f3d",
}
var res string
err := jrpcClient.Call("Chain33.CreateRawTransaction", req, &res)
assert.Nil(t, err)
gen := mocker.GetGenesisKey()
tx := getTx(t, res)
tx.Sign(types.SECP256K1, gen)
reply, err := mocker.GetAPI().SendTx(tx)
assert.Nil(t, err)
_, err = mocker.WaitTx(reply.GetMsg())
assert.Nil(t, err)
block := mocker.GetLastBlock()
balance := mocker.GetExecAccount(block.StateHash, "user.f3d", mocker.GetGenesisAddress()).Balance
assert.Equal(t, int64(10), balance)
}
......@@ -64,18 +64,19 @@ type Mempool struct {
// Consensus 配置
type Consensus struct {
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
GenesisBlockTime int64 `protobuf:"varint,2,opt,name=genesisBlockTime" json:"genesisBlockTime,omitempty"`
Minerstart bool `protobuf:"varint,3,opt,name=minerstart" json:"minerstart,omitempty"`
Genesis string `protobuf:"bytes,4,opt,name=genesis" json:"genesis,omitempty"`
HotkeyAddr string `protobuf:"bytes,5,opt,name=hotkeyAddr" json:"hotkeyAddr,omitempty"`
ForceMining bool `protobuf:"varint,6,opt,name=forceMining" json:"forceMining,omitempty"`
WriteBlockSeconds int64 `protobuf:"varint,20,opt,name=writeBlockSeconds" json:"writeBlockSeconds,omitempty"`
ParaRemoteGrpcClient string `protobuf:"bytes,22,opt,name=paraRemoteGrpcClient" json:"paraRemoteGrpcClient,omitempty"`
StartHeight int64 `protobuf:"varint,23,opt,name=startHeight" json:"startHeight,omitempty"`
EmptyBlockInterval int64 `protobuf:"varint,24,opt,name=emptyBlockInterval" json:"emptyBlockInterval,omitempty"`
AuthAccount string `protobuf:"bytes,25,opt,name=authAccount" json:"authAccount,omitempty"`
WaitBlocks4CommitMsg int32 `protobuf:"varint,26,opt,name=waitBlocks4CommitMsg" json:"waitBlocks4CommitMsg,omitempty"`
Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
GenesisBlockTime int64 `protobuf:"varint,2,opt,name=genesisBlockTime" json:"genesisBlockTime,omitempty"`
Minerstart bool `protobuf:"varint,3,opt,name=minerstart" json:"minerstart,omitempty"`
Genesis string `protobuf:"bytes,4,opt,name=genesis" json:"genesis,omitempty"`
HotkeyAddr string `protobuf:"bytes,5,opt,name=hotkeyAddr" json:"hotkeyAddr,omitempty"`
ForceMining bool `protobuf:"varint,6,opt,name=forceMining" json:"forceMining,omitempty"`
WriteBlockSeconds int64 `protobuf:"varint,20,opt,name=writeBlockSeconds" json:"writeBlockSeconds,omitempty"`
ParaRemoteGrpcClient string `protobuf:"bytes,22,opt,name=paraRemoteGrpcClient" json:"paraRemoteGrpcClient,omitempty"`
StartHeight int64 `protobuf:"varint,23,opt,name=startHeight" json:"startHeight,omitempty"`
EmptyBlockInterval int64 `protobuf:"varint,24,opt,name=emptyBlockInterval" json:"emptyBlockInterval,omitempty"`
AuthAccount string `protobuf:"bytes,25,opt,name=authAccount" json:"authAccount,omitempty"`
WaitBlocks4CommitMsg int32 `protobuf:"varint,26,opt,name=waitBlocks4CommitMsg" json:"waitBlocks4CommitMsg,omitempty"`
SearchHashMatchedBlockDepth int32 `protobuf:"varint,27,opt,name=searchHashMatchedBlockDepth" json:"searchHashMatchedBlockDepth,omitempty"`
}
// Wallet 配置
......
......@@ -762,6 +762,36 @@ func (_m *Chain33Client) GetSeed(ctx context.Context, in *types.GetSeedByPw, opt
return r0, r1
}
// GetSequenceByHash provides a mock function with given fields: ctx, in, opts
func (_m *Chain33Client) GetSequenceByHash(ctx context.Context, in *types.ReqHash, opts ...grpc.CallOption) (*types.Int64, error) {
_va := make([]interface{}, len(opts))
for _i := range opts {
_va[_i] = opts[_i]
}
var _ca []interface{}
_ca = append(_ca, ctx, in)
_ca = append(_ca, _va...)
ret := _m.Called(_ca...)
var r0 *types.Int64
if rf, ok := ret.Get(0).(func(context.Context, *types.ReqHash, ...grpc.CallOption) *types.Int64); ok {
r0 = rf(ctx, in, opts...)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*types.Int64)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(context.Context, *types.ReqHash, ...grpc.CallOption) error); ok {
r1 = rf(ctx, in, opts...)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// GetTransactionByAddr provides a mock function with given fields: ctx, in, opts
func (_m *Chain33Client) GetTransactionByAddr(ctx context.Context, in *types.ReqAddr, opts ...grpc.CallOption) (*types.ReplyTxInfos, error) {
_va := make([]interface{}, len(opts))
......
......@@ -125,6 +125,9 @@ service chain33 {
//获取指定区间的block加载序列号信息
rpc GetBlockSequences(ReqBlocks) returns (BlockSequences) {}
//get add block's sequence by hash
rpc GetSequenceByHash(ReqHash) returns (Int64) {}
//通过block hash 获取对应的blocks信息
rpc GetBlockByHashes(ReqHashes) returns (BlockDetails) {}
//关闭chain33
......
......@@ -26,71 +26,72 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 1020 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6f, 0xdb, 0x36,
0x10, 0xd7, 0xc3, 0xd6, 0x34, 0xac, 0xed, 0x38, 0x8c, 0x13, 0xb4, 0xc2, 0x8a, 0x02, 0x02, 0x86,
0x3d, 0x0c, 0xb5, 0x57, 0x7b, 0xcb, 0xbe, 0x07, 0xc4, 0xc9, 0xec, 0x18, 0x70, 0x3d, 0x37, 0x72,
0x37, 0x60, 0x6f, 0xb4, 0x7c, 0x73, 0x84, 0xc8, 0xa4, 0x22, 0x52, 0xb1, 0xfc, 0x3f, 0xec, 0x8f,
0x1e, 0x48, 0x89, 0xfa, 0x76, 0x9a, 0xbd, 0x89, 0x77, 0xf7, 0xbb, 0x0f, 0xf1, 0x77, 0x77, 0x44,
0x87, 0x81, 0xef, 0x74, 0xfd, 0x80, 0x09, 0x86, 0x3f, 0x17, 0x3b, 0x1f, 0xb8, 0xd9, 0x70, 0xd8,
0x66, 0xc3, 0x68, 0x2c, 0x34, 0x8f, 0x45, 0x40, 0x28, 0x27, 0x8e, 0x70, 0x53, 0x51, 0x7b, 0xe9,
0x31, 0xe7, 0xce, 0xb9, 0x25, 0xae, 0x96, 0x34, 0xb6, 0xc4, 0xf3, 0x40, 0x24, 0xa7, 0x43, 0xbf,
0xef, 0x27, 0x9f, 0x4d, 0xe2, 0x38, 0x2c, 0xa4, 0x5a, 0xd3, 0x82, 0x08, 0x9c, 0x50, 0xb0, 0x20,
0x3e, 0xf7, 0xff, 0x3d, 0x43, 0x07, 0xca, 0xcf, 0x60, 0x80, 0xdf, 0xa2, 0xc3, 0x31, 0x88, 0xa1,
0x74, 0xcd, 0x71, 0xbb, 0xab, 0x72, 0xe9, 0xde, 0xc0, 0x7d, 0x2c, 0x31, 0x1b, 0xa9, 0xc4, 0xf7,
0x76, 0x96, 0x81, 0x7b, 0xa8, 0x39, 0x06, 0x31, 0x25, 0x5c, 0x5c, 0x03, 0x59, 0x41, 0x80, 0x9b,
0x19, 0x64, 0xe6, 0x7a, 0xa6, 0x3e, 0xc6, 0x5a, 0xcb, 0xc0, 0x3f, 0xa1, 0xce, 0x65, 0x00, 0x44,
0xc0, 0x0d, 0xd9, 0x2e, 0xb2, 0x9a, 0xf0, 0x51, 0x62, 0x18, 0x2b, 0x17, 0x91, 0xa9, 0x05, 0x1f,
0x29, 0x77, 0xd7, 0x74, 0x11, 0x59, 0x06, 0xbe, 0x42, 0xed, 0x0c, 0x1b, 0x8d, 0x03, 0x16, 0xfa,
0xf8, 0x75, 0x11, 0x97, 0x79, 0x54, 0xea, 0x3a, 0x2f, 0xdf, 0x21, 0x6c, 0x03, 0x5d, 0xed, 0x89,
0x6f, 0xbb, 0x6b, 0x0a, 0xab, 0x45, 0x54, 0xa9, 0xf4, 0x37, 0xd4, 0xfe, 0x10, 0x42, 0xb0, 0xcb,
0x83, 0x5a, 0x59, 0xb1, 0xd7, 0x84, 0xdf, 0x9a, 0x2f, 0x93, 0x73, 0xce, 0xe6, 0x0a, 0x04, 0x71,
0x3d, 0x15, 0xf6, 0x48, 0x86, 0xcd, 0xc3, 0x71, 0xd5, 0xbc, 0x12, 0xf6, 0x57, 0xd4, 0x19, 0x83,
0xc8, 0x59, 0x0c, 0x77, 0x17, 0xab, 0x55, 0x90, 0x0f, 0x2d, 0xcf, 0xe6, 0x49, 0x1e, 0xb7, 0x88,
0x26, 0xf4, 0x1f, 0xc6, 0x2d, 0x03, 0x8f, 0xd1, 0x59, 0x19, 0x2e, 0x33, 0x85, 0xc2, 0xdd, 0xc6,
0x12, 0xf3, 0xd5, 0xbe, 0xec, 0xa5, 0xa3, 0x77, 0x08, 0x8d, 0x41, 0xbc, 0x87, 0xcd, 0x9c, 0x31,
0xaf, 0x7c, 0xcb, 0xb8, 0x18, 0x7c, 0xea, 0x72, 0xa1, 0x2a, 0x7e, 0x31, 0x06, 0x71, 0x11, 0x53,
0x8f, 0x97, 0x31, 0xa7, 0xc9, 0xf1, 0x2f, 0xc5, 0x59, 0x6d, 0xa5, 0x18, 0x82, 0x66, 0xb0, 0x4d,
0x04, 0xb8, 0x93, 0x43, 0xa5, 0x52, 0xb3, 0x53, 0x07, 0xb6, 0x0c, 0x7c, 0x83, 0x4e, 0x63, 0x51,
0xae, 0x06, 0x99, 0x0d, 0x7e, 0x93, 0xb9, 0xa9, 0x35, 0x30, 0xcf, 0x0a, 0x1e, 0x17, 0x51, 0x56,
0xf9, 0x08, 0x35, 0x27, 0x1b, 0x9f, 0x05, 0x62, 0x1e, 0xb8, 0x0f, 0x77, 0xb0, 0x4b, 0x29, 0x97,
0xfa, 0x2a, 0xa8, 0xf7, 0xe6, 0x36, 0x44, 0x4d, 0x45, 0x00, 0x26, 0xef, 0x0b, 0x38, 0xaf, 0xfa,
0x29, 0xa8, 0xcd, 0x76, 0xfe, 0xa7, 0xca, 0x2b, 0xb2, 0x0c, 0xdc, 0x47, 0xcf, 0x6d, 0x99, 0xdd,
0x08, 0x00, 0x9f, 0x55, 0xe1, 0x62, 0x04, 0x50, 0x61, 0xd0, 0xcf, 0xe8, 0xc0, 0x96, 0x2d, 0xba,
0xf4, 0xf0, 0xcb, 0x1a, 0xc8, 0x94, 0x2c, 0xc1, 0x7b, 0x24, 0xe9, 0xc6, 0x7b, 0x08, 0xd6, 0x30,
0x24, 0x1e, 0xa1, 0x0e, 0xe0, 0x2f, 0xca, 0x1e, 0xf2, 0xda, 0x22, 0x0f, 0x62, 0x56, 0x59, 0x06,
0x3e, 0x47, 0x87, 0x36, 0x88, 0x39, 0xe1, 0x7c, 0xbb, 0xc2, 0xaf, 0x6a, 0x52, 0x88, 0x55, 0x95,
0xc4, 0xbf, 0x44, 0x9f, 0x4d, 0x99, 0x73, 0x57, 0x26, 0x4e, 0xd9, 0xec, 0x2d, 0x7a, 0xf6, 0x91,
0x2a, 0xc3, 0x93, 0x42, 0x11, 0xb1, 0xb0, 0x66, 0x62, 0x49, 0x56, 0xce, 0x01, 0x02, 0xd9, 0x23,
0x65, 0xe7, 0x7a, 0x0c, 0x48, 0x7d, 0x4a, 0xe3, 0x56, 0x32, 0xe2, 0xfe, 0x17, 0xfb, 0xbf, 0x47,
0x47, 0x63, 0x10, 0x49, 0x8d, 0x82, 0x88, 0xb0, 0xd2, 0x01, 0xc5, 0x74, 0x63, 0x1b, 0xc5, 0xff,
0xb6, 0x9e, 0xc0, 0x7f, 0x3c, 0x40, 0xf0, 0xe0, 0xc2, 0xb6, 0x32, 0x68, 0xf4, 0x75, 0x15, 0xac,
0x2c, 0x03, 0xff, 0xa0, 0x82, 0x4a, 0x06, 0xd5, 0x41, 0x0b, 0x83, 0x22, 0x6f, 0xa4, 0xfa, 0xbb,
0xa1, 0xa3, 0xca, 0x08, 0xf9, 0x5c, 0x27, 0x54, 0xd4, 0x92, 0xf1, 0x1d, 0x3a, 0x18, 0x03, 0xb5,
0x01, 0x56, 0xe9, 0x24, 0x4b, 0xce, 0x53, 0x42, 0xd7, 0x45, 0x88, 0x94, 0x6a, 0x88, 0x28, 0x41,
0xd4, 0x79, 0xb8, 0x9b, 0x6f, 0x6b, 0x21, 0x3d, 0xf4, 0xdc, 0x26, 0x0f, 0xa0, 0x30, 0x3a, 0x77,
0x2d, 0x50, 0xa0, 0xf2, 0x05, 0xf7, 0xd5, 0xa4, 0xd2, 0x84, 0x3d, 0xce, 0xad, 0xb0, 0x84, 0xa5,
0xfa, 0x8e, 0x73, 0x33, 0xa7, 0x8f, 0x90, 0x1a, 0xee, 0x97, 0x72, 0x0b, 0xa6, 0x33, 0x47, 0x9d,
0x7e, 0x4f, 0x76, 0x65, 0x5d, 0x1c, 0xa9, 0x8b, 0x6f, 0xef, 0x89, 0x98, 0x73, 0xd4, 0x8a, 0xe3,
0x30, 0xca, 0x81, 0xf2, 0x90, 0x3f, 0x11, 0xf7, 0x23, 0x3a, 0xae, 0x2c, 0xb8, 0xb4, 0x34, 0xbd,
0x32, 0x27, 0xb4, 0x6e, 0xdd, 0x7d, 0xa3, 0xe8, 0x7b, 0x0d, 0xd1, 0x22, 0x8a, 0x67, 0x7f, 0x85,
0x4c, 0x8d, 0x74, 0x47, 0x47, 0xc9, 0x82, 0x7c, 0x71, 0x15, 0x6e, 0x7c, 0x3d, 0xee, 0x72, 0x8b,
0xc2, 0x16, 0x81, 0x4b, 0xd7, 0x45, 0xc2, 0xc7, 0x32, 0xcb, 0xc0, 0x5d, 0x74, 0xf0, 0x27, 0x04,
0x5c, 0x66, 0xb6, 0xa7, 0x41, 0x12, 0xb5, 0xec, 0x3b, 0xcb, 0xc0, 0x5f, 0xa1, 0x67, 0x13, 0x6e,
0xef, 0xa8, 0xf3, 0xa9, 0x06, 0xef, 0xa1, 0xd6, 0x84, 0xcf, 0x84, 0x7f, 0x29, 0xc9, 0xf9, 0x14,
0x40, 0x17, 0x1d, 0xcc, 0x40, 0xd4, 0xb5, 0xb7, 0xce, 0x64, 0xc6, 0x56, 0x90, 0x98, 0xa8, 0x5f,
0x24, 0xbb, 0x66, 0x44, 0x04, 0xf1, 0x46, 0xc4, 0xf5, 0xc2, 0x00, 0xf6, 0x45, 0x98, 0x50, 0x31,
0xe8, 0xab, 0x5f, 0xd4, 0x49, 0x66, 0x82, 0xea, 0x18, 0x1b, 0xee, 0x43, 0x90, 0x6c, 0xdb, 0x0f,
0x3b, 0xff, 0x56, 0xbd, 0x21, 0x8e, 0x75, 0x93, 0x69, 0x48, 0xdd, 0x23, 0xeb, 0x34, 0xdf, 0xdd,
0xa9, 0xa1, 0x1a, 0xe5, 0xe9, 0x68, 0x78, 0x64, 0x8f, 0x9f, 0xe4, 0xe1, 0xd9, 0x1e, 0xfb, 0x1a,
0xa1, 0x4b, 0x8f, 0x71, 0xf8, 0x10, 0x42, 0x08, 0x9f, 0xfa, 0x85, 0xbf, 0xa8, 0x4c, 0x2f, 0x3c,
0x4f, 0x52, 0x52, 0xf7, 0x52, 0x79, 0x94, 0xe8, 0x3c, 0x8b, 0x66, 0x8a, 0xae, 0x87, 0xf2, 0x1d,
0xa5, 0x9e, 0x69, 0xf8, 0x24, 0xc7, 0x1f, 0x2d, 0x4c, 0xa1, 0x31, 0x85, 0xb4, 0xd8, 0x32, 0xf0,
0x04, 0x99, 0x31, 0x9f, 0x67, 0x2c, 0xf1, 0x57, 0xf7, 0x62, 0xca, 0x94, 0x8f, 0xb8, 0x3a, 0x47,
0x0d, 0xd5, 0x6c, 0x37, 0x84, 0xae, 0x66, 0xe1, 0x06, 0x67, 0xb4, 0xbd, 0x97, 0x22, 0xc5, 0xfd,
0x9a, 0xb9, 0x36, 0x7c, 0xf3, 0xf7, 0xeb, 0xb5, 0x2b, 0x6e, 0xc3, 0x65, 0xd7, 0x61, 0x9b, 0xde,
0x60, 0xe0, 0xd0, 0x5e, 0xf2, 0x3a, 0xee, 0x29, 0xe3, 0xe5, 0x33, 0xf5, 0x6c, 0x1e, 0xfc, 0x17,
0x00, 0x00, 0xff, 0xff, 0x95, 0xf0, 0xb7, 0x53, 0xb5, 0x0b, 0x00, 0x00,
// 1031 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x6f, 0xe2, 0x46,
0x10, 0xf7, 0x43, 0x1b, 0x8e, 0x3d, 0x20, 0x64, 0x43, 0xa2, 0x3b, 0xab, 0xa7, 0x93, 0x2c, 0x55,
0x7d, 0xa8, 0x0e, 0x7a, 0xd0, 0xa6, 0x1f, 0xd7, 0x56, 0x0a, 0x49, 0x21, 0x48, 0x1c, 0xe5, 0x62,
0xd2, 0x4a, 0x7d, 0x5b, 0xcc, 0x94, 0x58, 0x31, 0x6b, 0xc7, 0xbb, 0x0e, 0xe6, 0xcf, 0xeb, 0x7f,
0x56, 0xed, 0xda, 0xeb, 0x6f, 0x92, 0xdc, 0x9b, 0x77, 0x66, 0x7e, 0xf3, 0xe1, 0xfd, 0xcd, 0xcc,
0xa2, 0xba, 0xef, 0x59, 0x5d, 0xcf, 0x77, 0xb9, 0x8b, 0xbf, 0xe4, 0x3b, 0x0f, 0x98, 0xde, 0xb0,
0xdc, 0xcd, 0xc6, 0xa5, 0x91, 0x50, 0x3f, 0xe2, 0x3e, 0xa1, 0x8c, 0x58, 0xdc, 0x4e, 0x44, 0xed,
0xa5, 0xe3, 0x5a, 0x77, 0xd6, 0x2d, 0xb1, 0x95, 0xa4, 0xb1, 0x25, 0x8e, 0x03, 0x3c, 0x3e, 0xd5,
0xbd, 0xbe, 0x17, 0x7f, 0x36, 0x89, 0x65, 0xb9, 0x01, 0x55, 0x9a, 0x16, 0x84, 0x60, 0x05, 0xdc,
0xf5, 0xa3, 0x73, 0xff, 0xbf, 0x53, 0x54, 0x93, 0x7e, 0x06, 0x03, 0xfc, 0x0e, 0xd5, 0xc7, 0xc0,
0x87, 0xc2, 0x35, 0xc3, 0xed, 0xae, 0xcc, 0xa5, 0x7b, 0x0d, 0xf7, 0x91, 0x44, 0x6f, 0x24, 0x12,
0xcf, 0xd9, 0x19, 0x1a, 0xee, 0xa1, 0xe6, 0x18, 0xf8, 0x94, 0x30, 0x7e, 0x05, 0x64, 0x05, 0x3e,
0x6e, 0xa6, 0x90, 0x99, 0xed, 0xe8, 0xea, 0x18, 0x69, 0x0d, 0x0d, 0xff, 0x82, 0x3a, 0x17, 0x3e,
0x10, 0x0e, 0xd7, 0x64, 0xbb, 0x48, 0x6b, 0xc2, 0x87, 0xb1, 0x61, 0xa4, 0x5c, 0x84, 0xba, 0x12,
0xdc, 0x50, 0x66, 0xaf, 0xe9, 0x22, 0x34, 0x34, 0x7c, 0x89, 0xda, 0x29, 0x36, 0x1c, 0xfb, 0x6e,
0xe0, 0xe1, 0x37, 0x79, 0x5c, 0xea, 0x51, 0xaa, 0xab, 0xbc, 0xfc, 0x80, 0xb0, 0x09, 0x74, 0xb5,
0x27, 0xbe, 0x69, 0xaf, 0x29, 0xac, 0x16, 0x61, 0xa9, 0xd2, 0xdf, 0x51, 0xfb, 0x53, 0x00, 0xfe,
0x2e, 0x0b, 0x6a, 0xa5, 0xc5, 0x5e, 0x11, 0x76, 0xab, 0xbf, 0x8a, 0xcf, 0x19, 0x9b, 0x4b, 0xe0,
0xc4, 0x76, 0x64, 0xd8, 0x43, 0x11, 0x36, 0x0b, 0xc7, 0x65, 0xf3, 0x52, 0xd8, 0xdf, 0x50, 0x67,
0x0c, 0x3c, 0x63, 0x31, 0xdc, 0x9d, 0xaf, 0x56, 0x7e, 0x36, 0xb4, 0x38, 0xeb, 0xc7, 0x59, 0xdc,
0x22, 0x9c, 0xd0, 0x7f, 0x5d, 0x66, 0x68, 0x78, 0x8c, 0x4e, 0x8b, 0x70, 0x91, 0x29, 0xe4, 0xee,
0x36, 0x92, 0xe8, 0xaf, 0xf7, 0x65, 0x2f, 0x1c, 0xbd, 0x47, 0x68, 0x0c, 0xfc, 0x23, 0x6c, 0xe6,
0xae, 0xeb, 0x14, 0x6f, 0x19, 0xe7, 0x83, 0x4f, 0x6d, 0xc6, 0x65, 0xc5, 0x2f, 0xc7, 0xc0, 0xcf,
0x23, 0xea, 0xb1, 0x22, 0xe6, 0x24, 0x3e, 0xfe, 0x2d, 0x39, 0xab, 0xac, 0x24, 0x43, 0xd0, 0x0c,
0xb6, 0xb1, 0x00, 0x77, 0x32, 0xa8, 0x44, 0xaa, 0x77, 0xaa, 0xc0, 0x86, 0x86, 0xaf, 0xd1, 0x49,
0x24, 0xca, 0xd4, 0x20, 0xb2, 0xc1, 0x6f, 0x53, 0x37, 0x95, 0x06, 0xfa, 0x69, 0xce, 0xe3, 0x22,
0x4c, 0x2b, 0x1f, 0xa1, 0xe6, 0x64, 0xe3, 0xb9, 0x3e, 0x9f, 0xfb, 0xf6, 0xc3, 0x1d, 0xec, 0x12,
0xca, 0x25, 0xbe, 0x72, 0xea, 0xbd, 0xb9, 0x0d, 0x51, 0x53, 0x12, 0xc0, 0x15, 0xf7, 0x05, 0x8c,
0x95, 0xfd, 0xe4, 0xd4, 0x7a, 0x3b, 0xfb, 0x53, 0xc5, 0x15, 0x19, 0x1a, 0xee, 0xa3, 0x17, 0xa6,
0xc8, 0x6e, 0x04, 0x80, 0x4f, 0xcb, 0x70, 0x3e, 0x02, 0x28, 0x31, 0xe8, 0x03, 0xaa, 0x99, 0xa2,
0x45, 0x97, 0x0e, 0x7e, 0x55, 0x01, 0x99, 0x92, 0x25, 0x38, 0x8f, 0x24, 0xdd, 0xf8, 0x08, 0xfe,
0x1a, 0x86, 0xc4, 0x21, 0xd4, 0x02, 0xfc, 0x55, 0xd1, 0x43, 0x56, 0x9b, 0xe7, 0x41, 0xc4, 0x2a,
0x43, 0xc3, 0x67, 0xa8, 0x6e, 0x02, 0x9f, 0x13, 0xc6, 0xb6, 0x2b, 0xfc, 0xba, 0x22, 0x85, 0x48,
0x55, 0x4a, 0xfc, 0x6b, 0xf4, 0xc5, 0xd4, 0xb5, 0xee, 0x8a, 0xc4, 0x29, 0x9a, 0xbd, 0x43, 0x07,
0x37, 0x54, 0x1a, 0x1e, 0xe7, 0x8a, 0x88, 0x84, 0x15, 0x13, 0x4b, 0xb0, 0x72, 0x0e, 0xe0, 0x8b,
0x1e, 0x29, 0x3a, 0x57, 0x63, 0x40, 0xe8, 0x13, 0x1a, 0xb7, 0xe2, 0x11, 0xf7, 0x59, 0xec, 0xff,
0x11, 0x1d, 0x8e, 0x81, 0xc7, 0x35, 0x72, 0xc2, 0x83, 0x52, 0x07, 0xe4, 0xd3, 0x8d, 0x6c, 0x24,
0xff, 0xdb, 0x6a, 0x02, 0xff, 0xf9, 0x00, 0xfe, 0x83, 0x0d, 0xdb, 0xd2, 0xa0, 0x51, 0xd7, 0x95,
0xb3, 0x32, 0x34, 0xfc, 0x93, 0x0c, 0x2a, 0x18, 0x54, 0x05, 0xcd, 0x0d, 0x8a, 0xac, 0x91, 0xec,
0xef, 0x86, 0x8a, 0x2a, 0x22, 0x64, 0x73, 0x9d, 0x50, 0x5e, 0x49, 0xc6, 0xf7, 0xa8, 0x36, 0x06,
0x6a, 0x02, 0xac, 0x92, 0x49, 0x16, 0x9f, 0xa7, 0x84, 0xae, 0xf3, 0x10, 0x21, 0x55, 0x10, 0x5e,
0x80, 0xc8, 0xf3, 0x70, 0x37, 0xdf, 0x56, 0x42, 0x7a, 0xe8, 0x85, 0x49, 0x1e, 0x40, 0x62, 0x54,
0xee, 0x4a, 0x20, 0x41, 0xc5, 0x0b, 0xee, 0xcb, 0x49, 0xa5, 0x08, 0x7b, 0x94, 0x59, 0x61, 0x31,
0x4b, 0xd5, 0x1d, 0x67, 0x66, 0x4e, 0x1f, 0x21, 0x39, 0xdc, 0x2f, 0xc4, 0x16, 0x4c, 0x66, 0x8e,
0x3c, 0xfd, 0x11, 0xef, 0xca, 0xaa, 0x38, 0x42, 0x17, 0xdd, 0xde, 0x33, 0x31, 0x67, 0xa8, 0x15,
0xc5, 0x71, 0x29, 0x03, 0xca, 0x02, 0xf6, 0x4c, 0xdc, 0xcf, 0xe8, 0xa8, 0xb4, 0xe0, 0x92, 0xd2,
0xd4, 0xca, 0x9c, 0xd0, 0xaa, 0x75, 0xf7, 0x9d, 0xa4, 0xef, 0x15, 0x84, 0x8b, 0x30, 0x9a, 0xfd,
0x25, 0x32, 0x35, 0x92, 0x1d, 0x1d, 0xc6, 0x0b, 0xf2, 0xe5, 0x65, 0xb0, 0xf1, 0xd4, 0xb8, 0xcb,
0x2c, 0x0a, 0x93, 0xfb, 0x36, 0x5d, 0xe7, 0x09, 0x1f, 0xc9, 0x0c, 0x0d, 0x77, 0x51, 0xed, 0x2f,
0xf0, 0x99, 0xc8, 0x6c, 0x4f, 0x83, 0xc4, 0x6a, 0xd1, 0x77, 0x86, 0x86, 0xbf, 0x41, 0x07, 0x13,
0x66, 0xee, 0xa8, 0xf5, 0x54, 0x83, 0xf7, 0x50, 0x6b, 0xc2, 0x66, 0xdc, 0xbb, 0x10, 0xe4, 0x7c,
0x0e, 0xa0, 0x8b, 0x6a, 0x33, 0xe0, 0x55, 0xed, 0xad, 0x32, 0x99, 0xb9, 0x2b, 0x88, 0x4d, 0xe4,
0x2f, 0x12, 0x5d, 0x33, 0x22, 0x9c, 0x38, 0x23, 0x62, 0x3b, 0x81, 0x0f, 0xfb, 0x22, 0x4c, 0x28,
0x1f, 0xf4, 0xe5, 0x2f, 0xea, 0xc4, 0x33, 0x41, 0x76, 0x8c, 0x09, 0xf7, 0x01, 0x08, 0xb6, 0xed,
0x87, 0x9d, 0x7d, 0x2f, 0xdf, 0x10, 0x47, 0xaa, 0xc9, 0x14, 0xa4, 0xea, 0x91, 0x75, 0x92, 0xed,
0xee, 0xc4, 0xd0, 0xd0, 0xf0, 0x40, 0xe2, 0x95, 0xe4, 0x89, 0xeb, 0x54, 0x41, 0x3f, 0xa4, 0xf3,
0xe4, 0x91, 0xe5, 0x7f, 0x9c, 0x8d, 0x99, 0x2e, 0xbf, 0x6f, 0x11, 0xba, 0x70, 0x5c, 0x06, 0x9f,
0x02, 0x08, 0xe0, 0xa9, 0xff, 0xfe, 0xab, 0x4c, 0xef, 0xdc, 0x71, 0x04, 0x8f, 0x55, 0x03, 0x16,
0xe7, 0x8f, 0x2a, 0x2e, 0x6f, 0x26, 0x39, 0x5e, 0x17, 0x8f, 0x2f, 0xf9, 0xb6, 0xc3, 0xc7, 0x19,
0xd2, 0x29, 0x61, 0x02, 0x8d, 0x78, 0xa7, 0xc4, 0x86, 0x86, 0x27, 0x48, 0x8f, 0x9a, 0x60, 0xe6,
0xc6, 0xfe, 0xaa, 0x9e, 0x59, 0xa9, 0xf2, 0x11, 0x57, 0x67, 0xa8, 0x21, 0x3b, 0xf4, 0x9a, 0xd0,
0xd5, 0x2c, 0xd8, 0xe0, 0x94, 0xeb, 0xf7, 0x42, 0x24, 0xff, 0x70, 0xc5, 0x30, 0x1c, 0xbe, 0xfd,
0xe7, 0xcd, 0xda, 0xe6, 0xb7, 0xc1, 0xb2, 0x6b, 0xb9, 0x9b, 0xde, 0x60, 0x60, 0xd1, 0x5e, 0xfc,
0xa4, 0xee, 0x49, 0xe3, 0xe5, 0x81, 0x7c, 0x6b, 0x0f, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x2a,
0x38, 0xe4, 0x13, 0xea, 0x0b, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
......@@ -190,6 +191,8 @@ type Chain33Client interface {
GetLastBlockSequence(ctx context.Context, in *ReqNil, opts ...grpc.CallOption) (*Int64, error)
//获取指定区间的block加载序列号信息
GetBlockSequences(ctx context.Context, in *ReqBlocks, opts ...grpc.CallOption) (*BlockSequences, error)
//get add block's sequence by hash
GetSequenceByHash(ctx context.Context, in *ReqHash, opts ...grpc.CallOption) (*Int64, error)
//通过block hash 获取对应的blocks信息
GetBlockByHashes(ctx context.Context, in *ReqHashes, opts ...grpc.CallOption) (*BlockDetails, error)
//关闭chain33
......@@ -607,6 +610,15 @@ func (c *chain33Client) GetBlockSequences(ctx context.Context, in *ReqBlocks, op
return out, nil
}
func (c *chain33Client) GetSequenceByHash(ctx context.Context, in *ReqHash, opts ...grpc.CallOption) (*Int64, error) {
out := new(Int64)
err := c.cc.Invoke(ctx, "/types.chain33/GetSequenceByHash", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *chain33Client) GetBlockByHashes(ctx context.Context, in *ReqHashes, opts ...grpc.CallOption) (*BlockDetails, error) {
out := new(BlockDetails)
err := c.cc.Invoke(ctx, "/types.chain33/GetBlockByHashes", in, out, opts...)
......@@ -748,6 +760,8 @@ type Chain33Server interface {
GetLastBlockSequence(context.Context, *ReqNil) (*Int64, error)
//获取指定区间的block加载序列号信息
GetBlockSequences(context.Context, *ReqBlocks) (*BlockSequences, error)
//get add block's sequence by hash
GetSequenceByHash(context.Context, *ReqHash) (*Int64, error)
//通过block hash 获取对应的blocks信息
GetBlockByHashes(context.Context, *ReqHashes) (*BlockDetails, error)
//关闭chain33
......@@ -1557,6 +1571,24 @@ func _Chain33_GetBlockSequences_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler)
}
func _Chain33_GetSequenceByHash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ReqHash)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(Chain33Server).GetSequenceByHash(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/types.chain33/GetSequenceByHash",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(Chain33Server).GetSequenceByHash(ctx, req.(*ReqHash))
}
return interceptor(ctx, in, info, handler)
}
func _Chain33_GetBlockByHashes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ReqHashes)
if err := dec(in); err != nil {
......@@ -1846,6 +1878,10 @@ var _Chain33_serviceDesc = grpc.ServiceDesc{
Handler: _Chain33_GetBlockSequences_Handler,
},
{
MethodName: "GetSequenceByHash",
Handler: _Chain33_GetSequenceByHash_Handler,
},
{
MethodName: "GetBlockByHashes",
Handler: _Chain33_GetBlockByHashes_Handler,
},
......
......@@ -329,6 +329,14 @@ func (mock *Chain33Mock) GetAccount(stateHash []byte, addr string) *types.Accoun
return acc.LoadAccount(addr)
}
//GetExecAccount :get execer account info
func (mock *Chain33Mock) GetExecAccount(stateHash []byte, execer, addr string) *types.Account {
statedb := executor.NewStateDB(mock.client, stateHash, nil, nil)
acc := account.NewCoinsAccount()
acc.SetDB(statedb)
return acc.LoadExecAccount(addr, address.ExecAddress(execer))
}
//GetBlock :
func (mock *Chain33Mock) GetBlock(height int64) *types.Block {
blocks, err := mock.api.GetBlocks(&types.ReqBlocks{Start: height, End: height})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment