fix(evm,rpc): coinbase should not be the current one in traceTransaction execution (#1392)
* add proposer address * make proto-all * update nix * fix test * keep default proposerAddress * add change doc * refine GetProposerAddress with test * include ProposerAddress for trace api * fix eth call req * wrap proposerAddress for eth call * allow proto translates to sdk.ConsAddress * Update rpc/backend/call_tx.go Co-authored-by: Freddy Caceres <facs95@gmail.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
This commit is contained in:
parent
f04b289e75
commit
295a8862db
@ -74,6 +74,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
* (rpc) [#1354](https://github.com/evmos/ethermint/pull/1354) Fix grpc query failure(`BaseFee` and `EthCall`) on legacy block states.
|
* (rpc) [#1354](https://github.com/evmos/ethermint/pull/1354) Fix grpc query failure(`BaseFee` and `EthCall`) on legacy block states.
|
||||||
* (cli) [#1362](https://github.com/evmos/ethermint/pull/1362) Fix `index-eth-tx` error when the indexer db is empty.
|
* (cli) [#1362](https://github.com/evmos/ethermint/pull/1362) Fix `index-eth-tx` error when the indexer db is empty.
|
||||||
* (state) [#1320](https://github.com/evmos/ethermint/pull/1320) Fix codehash check mismatch when the code has been deleted in the evm state.
|
* (state) [#1320](https://github.com/evmos/ethermint/pull/1320) Fix codehash check mismatch when the code has been deleted in the evm state.
|
||||||
|
* (rpc) [#1392](https://github.com/evmos/ethermint/pull/1392) Allow fill the proposer address in json-rpc through tendermint api, and pass explicitly to grpc query handler.
|
||||||
|
|
||||||
## [v0.19.2] - 2022-08-29
|
## [v0.19.2] - 2022-08-29
|
||||||
|
|
||||||
|
@ -562,6 +562,7 @@ EthCallRequest defines EthCall request
|
|||||||
| ----- | ---- | ----- | ----------- |
|
| ----- | ---- | ----- | ----------- |
|
||||||
| `args` | [bytes](#bytes) | | same json format as the json rpc api. |
|
| `args` | [bytes](#bytes) | | same json format as the json rpc api. |
|
||||||
| `gas_cap` | [uint64](#uint64) | | the default gas cap to be used |
|
| `gas_cap` | [uint64](#uint64) | | the default gas cap to be used |
|
||||||
|
| `proposer_address` | [bytes](#bytes) | | the proposer of the requested block |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -791,6 +792,7 @@ QueryTraceBlockRequest defines TraceTx request
|
|||||||
| `block_number` | [int64](#int64) | | block number |
|
| `block_number` | [int64](#int64) | | block number |
|
||||||
| `block_hash` | [string](#string) | | block hex hash |
|
| `block_hash` | [string](#string) | | block hex hash |
|
||||||
| `block_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | block time |
|
| `block_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | block time |
|
||||||
|
| `proposer_address` | [bytes](#bytes) | | the proposer of the requested block |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -826,6 +828,7 @@ QueryTraceTxRequest defines TraceTx request
|
|||||||
| `block_number` | [int64](#int64) | | block number of requested transaction |
|
| `block_number` | [int64](#int64) | | block number of requested transaction |
|
||||||
| `block_hash` | [string](#string) | | block hex hash of requested transaction |
|
| `block_hash` | [string](#string) | | block hex hash of requested transaction |
|
||||||
| `block_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | block time of requested transaction |
|
| `block_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | block time of requested transaction |
|
||||||
|
| `proposer_address` | [bytes](#bytes) | | the proposer of the requested block |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -221,6 +221,8 @@ message EthCallRequest {
|
|||||||
bytes args = 1;
|
bytes args = 1;
|
||||||
// the default gas cap to be used
|
// the default gas cap to be used
|
||||||
uint64 gas_cap = 2;
|
uint64 gas_cap = 2;
|
||||||
|
// the proposer of the requested block
|
||||||
|
bytes proposer_address = 3 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ConsAddress"];
|
||||||
}
|
}
|
||||||
|
|
||||||
// EstimateGasResponse defines EstimateGas response
|
// EstimateGasResponse defines EstimateGas response
|
||||||
@ -247,6 +249,8 @@ message QueryTraceTxRequest {
|
|||||||
string block_hash = 6;
|
string block_hash = 6;
|
||||||
// block time of requested transaction
|
// block time of requested transaction
|
||||||
google.protobuf.Timestamp block_time = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
google.protobuf.Timestamp block_time = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
||||||
|
// the proposer of the requested block
|
||||||
|
bytes proposer_address = 8 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ConsAddress"];
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryTraceTxResponse defines TraceTx response
|
// QueryTraceTxResponse defines TraceTx response
|
||||||
@ -267,6 +271,8 @@ message QueryTraceBlockRequest {
|
|||||||
string block_hash = 6;
|
string block_hash = 6;
|
||||||
// block time
|
// block time
|
||||||
google.protobuf.Timestamp block_time = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
google.protobuf.Timestamp block_time = 7 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
||||||
|
// the proposer of the requested block
|
||||||
|
bytes proposer_address = 8 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ConsAddress"];
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryTraceBlockResponse defines TraceBlock response
|
// QueryTraceBlockResponse defines TraceBlock response
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
@ -298,17 +299,18 @@ func (b *Backend) EstimateGas(args evmtypes.TransactionArgs, blockNrOptional *rp
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req := evmtypes.EthCallRequest{
|
header, err := b.TendermintBlockByNumber(blockNr)
|
||||||
Args: bz,
|
|
||||||
GasCap: b.RPCGasCap(),
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = b.TendermintBlockByNumber(blockNr)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// the error message imitates geth behavior
|
// the error message imitates geth behavior
|
||||||
return 0, errors.New("header not found")
|
return 0, errors.New("header not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
req := evmtypes.EthCallRequest{
|
||||||
|
Args: bz,
|
||||||
|
GasCap: b.RPCGasCap(),
|
||||||
|
ProposerAddress: sdk.ConsAddress(header.Block.ProposerAddress),
|
||||||
|
}
|
||||||
|
|
||||||
// From ContextWithHeight: if the provided height is 0,
|
// From ContextWithHeight: if the provided height is 0,
|
||||||
// it will return an empty context and the gRPC query will use
|
// it will return an empty context and the gRPC query will use
|
||||||
// the latest block height for querying.
|
// the latest block height for querying.
|
||||||
@ -328,10 +330,15 @@ func (b *Backend) DoCall(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
header, err := b.TendermintBlockByNumber(blockNr)
|
||||||
|
if err != nil {
|
||||||
|
// the error message imitates geth behavior
|
||||||
|
return nil, errors.New("header not found")
|
||||||
|
}
|
||||||
req := evmtypes.EthCallRequest{
|
req := evmtypes.EthCallRequest{
|
||||||
Args: bz,
|
Args: bz,
|
||||||
GasCap: b.RPCGasCap(),
|
GasCap: b.RPCGasCap(),
|
||||||
|
ProposerAddress: sdk.ConsAddress(header.Block.ProposerAddress),
|
||||||
}
|
}
|
||||||
|
|
||||||
// From ContextWithHeight: if the provided height is 0,
|
// From ContextWithHeight: if the provided height is 0,
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
rpctypes "github.com/evmos/ethermint/rpc/types"
|
rpctypes "github.com/evmos/ethermint/rpc/types"
|
||||||
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
||||||
@ -82,6 +83,7 @@ func (b *Backend) TraceTransaction(hash common.Hash, config *evmtypes.TraceConfi
|
|||||||
BlockNumber: blk.Block.Height,
|
BlockNumber: blk.Block.Height,
|
||||||
BlockTime: blk.Block.Time,
|
BlockTime: blk.Block.Time,
|
||||||
BlockHash: common.Bytes2Hex(blk.BlockID.Hash),
|
BlockHash: common.Bytes2Hex(blk.BlockID.Hash),
|
||||||
|
ProposerAddress: sdk.ConsAddress(blk.Block.ProposerAddress),
|
||||||
}
|
}
|
||||||
|
|
||||||
if config != nil {
|
if config != nil {
|
||||||
@ -159,6 +161,7 @@ func (b *Backend) TraceBlock(height rpctypes.BlockNumber,
|
|||||||
BlockNumber: block.Block.Height,
|
BlockNumber: block.Block.Height,
|
||||||
BlockTime: block.Block.Time,
|
BlockTime: block.Block.Time,
|
||||||
BlockHash: common.Bytes2Hex(block.BlockID.Hash),
|
BlockHash: common.Bytes2Hex(block.BlockID.Hash),
|
||||||
|
ProposerAddress: sdk.ConsAddress(block.Block.ProposerAddress),
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := b.queryClient.TraceBlock(ctxWithHeight, traceBlockRequest)
|
res, err := b.queryClient.TraceBlock(ctxWithHeight, traceBlockRequest)
|
||||||
|
@ -224,7 +224,7 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms
|
|||||||
return nil, status.Error(codes.InvalidArgument, err.Error())
|
return nil, status.Error(codes.InvalidArgument, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, err := k.EVMConfig(ctx)
|
cfg, err := k.EVMConfig(ctx, GetProposerAddress(ctx, req.ProposerAddress))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
@ -294,8 +294,7 @@ func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*type
|
|||||||
hi = req.GasCap
|
hi = req.GasCap
|
||||||
}
|
}
|
||||||
cap = hi
|
cap = hi
|
||||||
|
cfg, err := k.EVMConfig(ctx, GetProposerAddress(ctx, req.ProposerAddress))
|
||||||
cfg, err := k.EVMConfig(ctx)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Error(codes.Internal, "failed to load evm config")
|
return nil, status.Error(codes.Internal, "failed to load evm config")
|
||||||
}
|
}
|
||||||
@ -375,8 +374,7 @@ func (k Keeper) TraceTx(c context.Context, req *types.QueryTraceTxRequest) (*typ
|
|||||||
ctx = ctx.WithBlockHeight(contextHeight)
|
ctx = ctx.WithBlockHeight(contextHeight)
|
||||||
ctx = ctx.WithBlockTime(req.BlockTime)
|
ctx = ctx.WithBlockTime(req.BlockTime)
|
||||||
ctx = ctx.WithHeaderHash(common.Hex2Bytes(req.BlockHash))
|
ctx = ctx.WithHeaderHash(common.Hex2Bytes(req.BlockHash))
|
||||||
|
cfg, err := k.EVMConfig(ctx, GetProposerAddress(ctx, req.ProposerAddress))
|
||||||
cfg, err := k.EVMConfig(ctx)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to load evm config: %s", err.Error())
|
return nil, status.Errorf(codes.Internal, "failed to load evm config: %s", err.Error())
|
||||||
}
|
}
|
||||||
@ -443,8 +441,7 @@ func (k Keeper) TraceBlock(c context.Context, req *types.QueryTraceBlockRequest)
|
|||||||
ctx = ctx.WithBlockHeight(contextHeight)
|
ctx = ctx.WithBlockHeight(contextHeight)
|
||||||
ctx = ctx.WithBlockTime(req.BlockTime)
|
ctx = ctx.WithBlockTime(req.BlockTime)
|
||||||
ctx = ctx.WithHeaderHash(common.Hex2Bytes(req.BlockHash))
|
ctx = ctx.WithHeaderHash(common.Hex2Bytes(req.BlockHash))
|
||||||
|
cfg, err := k.EVMConfig(ctx, GetProposerAddress(ctx, req.ProposerAddress))
|
||||||
cfg, err := k.EVMConfig(ctx)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Error(codes.Internal, "failed to load evm config")
|
return nil, status.Error(codes.Internal, "failed to load evm config")
|
||||||
}
|
}
|
||||||
|
@ -737,6 +737,7 @@ func (suite *KeeperTestSuite) TestEstimateGas() {
|
|||||||
req := types.EthCallRequest{
|
req := types.EthCallRequest{
|
||||||
Args: args,
|
Args: args,
|
||||||
GasCap: gasCap,
|
GasCap: gasCap,
|
||||||
|
ProposerAddress: suite.ctx.BlockHeader().ProposerAddress,
|
||||||
}
|
}
|
||||||
|
|
||||||
rsp, err := suite.queryClient.EstimateGas(sdk.WrapSDKContext(suite.ctx), &req)
|
rsp, err := suite.queryClient.EstimateGas(sdk.WrapSDKContext(suite.ctx), &req)
|
||||||
@ -1145,16 +1146,18 @@ func (suite *KeeperTestSuite) TestNonceInQuery() {
|
|||||||
Data: (*hexutil.Bytes)(&data),
|
Data: (*hexutil.Bytes)(&data),
|
||||||
})
|
})
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
|
proposerAddress := suite.ctx.BlockHeader().ProposerAddress
|
||||||
_, err = suite.queryClient.EstimateGas(sdk.WrapSDKContext(suite.ctx), &types.EthCallRequest{
|
_, err = suite.queryClient.EstimateGas(sdk.WrapSDKContext(suite.ctx), &types.EthCallRequest{
|
||||||
Args: args,
|
Args: args,
|
||||||
GasCap: uint64(config.DefaultGasCap),
|
GasCap: uint64(config.DefaultGasCap),
|
||||||
|
ProposerAddress: proposerAddress,
|
||||||
})
|
})
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
|
|
||||||
_, err = suite.queryClient.EthCall(sdk.WrapSDKContext(suite.ctx), &types.EthCallRequest{
|
_, err = suite.queryClient.EthCall(sdk.WrapSDKContext(suite.ctx), &types.EthCallRequest{
|
||||||
Args: args,
|
Args: args,
|
||||||
GasCap: uint64(config.DefaultGasCap),
|
GasCap: uint64(config.DefaultGasCap),
|
||||||
|
ProposerAddress: proposerAddress,
|
||||||
})
|
})
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
}
|
}
|
||||||
|
@ -257,10 +257,10 @@ func (suite *KeeperTestSuite) DeployTestContract(t require.TestingT, owner commo
|
|||||||
Data: (*hexutil.Bytes)(&data),
|
Data: (*hexutil.Bytes)(&data),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err := suite.queryClient.EstimateGas(ctx, &types.EthCallRequest{
|
res, err := suite.queryClient.EstimateGas(ctx, &types.EthCallRequest{
|
||||||
Args: args,
|
Args: args,
|
||||||
GasCap: uint64(config.DefaultGasCap),
|
GasCap: uint64(config.DefaultGasCap),
|
||||||
|
ProposerAddress: suite.ctx.BlockHeader().ProposerAddress,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@ -310,6 +310,7 @@ func (suite *KeeperTestSuite) TransferERC20Token(t require.TestingT, contractAdd
|
|||||||
res, err := suite.queryClient.EstimateGas(ctx, &types.EthCallRequest{
|
res, err := suite.queryClient.EstimateGas(ctx, &types.EthCallRequest{
|
||||||
Args: args,
|
Args: args,
|
||||||
GasCap: 25_000_000,
|
GasCap: 25_000_000,
|
||||||
|
ProposerAddress: suite.ctx.BlockHeader().ProposerAddress,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@ -367,6 +368,7 @@ func (suite *KeeperTestSuite) DeployTestMessageCall(t require.TestingT) common.A
|
|||||||
res, err := suite.queryClient.EstimateGas(ctx, &types.EthCallRequest{
|
res, err := suite.queryClient.EstimateGas(ctx, &types.EthCallRequest{
|
||||||
Args: args,
|
Args: args,
|
||||||
GasCap: uint64(config.DefaultGasCap),
|
GasCap: uint64(config.DefaultGasCap),
|
||||||
|
ProposerAddress: suite.ctx.BlockHeader().ProposerAddress,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@ -39,12 +39,12 @@ func GasToRefund(availableRefund, gasConsumed, refundQuotient uint64) uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EVMConfig creates the EVMConfig based on current state
|
// EVMConfig creates the EVMConfig based on current state
|
||||||
func (k *Keeper) EVMConfig(ctx sdk.Context) (*types.EVMConfig, error) {
|
func (k *Keeper) EVMConfig(ctx sdk.Context, proposerAddress sdk.ConsAddress) (*types.EVMConfig, error) {
|
||||||
params := k.GetParams(ctx)
|
params := k.GetParams(ctx)
|
||||||
ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
|
ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
|
||||||
|
|
||||||
// get the coinbase address from the block proposer
|
// get the coinbase address from the block proposer
|
||||||
coinbase, err := k.GetCoinbaseAddress(ctx)
|
coinbase, err := k.GetCoinbaseAddress(ctx, proposerAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, sdkerrors.Wrap(err, "failed to obtain coinbase address")
|
return nil, sdkerrors.Wrap(err, "failed to obtain coinbase address")
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ func (k *Keeper) ApplyTransaction(ctx sdk.Context, tx *ethtypes.Transaction) (*t
|
|||||||
bloomReceipt ethtypes.Bloom
|
bloomReceipt ethtypes.Bloom
|
||||||
)
|
)
|
||||||
|
|
||||||
cfg, err := k.EVMConfig(ctx)
|
cfg, err := k.EVMConfig(ctx, sdk.ConsAddress(ctx.BlockHeader().ProposerAddress))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, sdkerrors.Wrap(err, "failed to load evm config")
|
return nil, sdkerrors.Wrap(err, "failed to load evm config")
|
||||||
}
|
}
|
||||||
@ -464,7 +464,7 @@ func (k *Keeper) ApplyMessageWithConfig(ctx sdk.Context,
|
|||||||
|
|
||||||
// ApplyMessage calls ApplyMessageWithConfig with default EVMConfig
|
// ApplyMessage calls ApplyMessageWithConfig with default EVMConfig
|
||||||
func (k *Keeper) ApplyMessage(ctx sdk.Context, msg core.Message, tracer vm.EVMLogger, commit bool) (*types.MsgEthereumTxResponse, error) {
|
func (k *Keeper) ApplyMessage(ctx sdk.Context, msg core.Message, tracer vm.EVMLogger, commit bool) (*types.MsgEthereumTxResponse, error) {
|
||||||
cfg, err := k.EVMConfig(ctx)
|
cfg, err := k.EVMConfig(ctx, sdk.ConsAddress(ctx.BlockHeader().ProposerAddress))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, sdkerrors.Wrap(err, "failed to load evm config")
|
return nil, sdkerrors.Wrap(err, "failed to load evm config")
|
||||||
}
|
}
|
||||||
@ -519,15 +519,22 @@ func (k *Keeper) ResetGasMeterAndConsumeGas(ctx sdk.Context, gasUsed uint64) {
|
|||||||
ctx.GasMeter().ConsumeGas(gasUsed, "apply evm transaction")
|
ctx.GasMeter().ConsumeGas(gasUsed, "apply evm transaction")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetProposerAddress returns current block proposer's address when provided proposer address is empty.
|
||||||
|
func GetProposerAddress(ctx sdk.Context, proposerAddress sdk.ConsAddress) sdk.ConsAddress {
|
||||||
|
if len(proposerAddress) == 0 {
|
||||||
|
proposerAddress = ctx.BlockHeader().ProposerAddress
|
||||||
|
}
|
||||||
|
return proposerAddress
|
||||||
|
}
|
||||||
|
|
||||||
// GetCoinbaseAddress returns the block proposer's validator operator address.
|
// GetCoinbaseAddress returns the block proposer's validator operator address.
|
||||||
func (k Keeper) GetCoinbaseAddress(ctx sdk.Context) (common.Address, error) {
|
func (k Keeper) GetCoinbaseAddress(ctx sdk.Context, proposerAddress sdk.ConsAddress) (common.Address, error) {
|
||||||
consAddr := sdk.ConsAddress(ctx.BlockHeader().ProposerAddress)
|
validator, found := k.stakingKeeper.GetValidatorByConsAddr(ctx, GetProposerAddress(ctx, proposerAddress))
|
||||||
validator, found := k.stakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
|
|
||||||
if !found {
|
if !found {
|
||||||
return common.Address{}, sdkerrors.Wrapf(
|
return common.Address{}, sdkerrors.Wrapf(
|
||||||
stakingtypes.ErrNoValidatorFound,
|
stakingtypes.ErrNoValidatorFound,
|
||||||
"failed to retrieve validator from block proposer address %s",
|
"failed to retrieve validator from block proposer address %s",
|
||||||
consAddr.String(),
|
proposerAddress.String(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,8 +159,8 @@ func (suite *KeeperTestSuite) TestGetCoinbaseAddress() {
|
|||||||
suite.SetupTest() // reset
|
suite.SetupTest() // reset
|
||||||
|
|
||||||
tc.malleate()
|
tc.malleate()
|
||||||
|
proposerAddress := suite.ctx.BlockHeader().ProposerAddress
|
||||||
coinbase, err := suite.app.EvmKeeper.GetCoinbaseAddress(suite.ctx)
|
coinbase, err := suite.app.EvmKeeper.GetCoinbaseAddress(suite.ctx, sdk.ConsAddress(proposerAddress))
|
||||||
if tc.expPass {
|
if tc.expPass {
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
suite.Require().Equal(valOpAddr, coinbase)
|
suite.Require().Equal(valOpAddr, coinbase)
|
||||||
@ -516,7 +516,8 @@ func (suite *KeeperTestSuite) TestResetGasMeterAndConsumeGas() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *KeeperTestSuite) TestEVMConfig() {
|
func (suite *KeeperTestSuite) TestEVMConfig() {
|
||||||
cfg, err := suite.app.EvmKeeper.EVMConfig(suite.ctx)
|
proposerAddress := suite.ctx.BlockHeader().ProposerAddress
|
||||||
|
cfg, err := suite.app.EvmKeeper.EVMConfig(suite.ctx, proposerAddress)
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
suite.Require().Equal(types.DefaultParams(), cfg.Params)
|
suite.Require().Equal(types.DefaultParams(), cfg.Params)
|
||||||
// london hardfork is enabled by default
|
// london hardfork is enabled by default
|
||||||
@ -535,7 +536,8 @@ func (suite *KeeperTestSuite) TestApplyMessage() {
|
|||||||
expectedGasUsed := params.TxGas
|
expectedGasUsed := params.TxGas
|
||||||
var msg core.Message
|
var msg core.Message
|
||||||
|
|
||||||
config, err := suite.app.EvmKeeper.EVMConfig(suite.ctx)
|
proposerAddress := suite.ctx.BlockHeader().ProposerAddress
|
||||||
|
config, err := suite.app.EvmKeeper.EVMConfig(suite.ctx, proposerAddress)
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
|
|
||||||
keeperParams := suite.app.EvmKeeper.GetParams(suite.ctx)
|
keeperParams := suite.app.EvmKeeper.GetParams(suite.ctx)
|
||||||
@ -635,7 +637,8 @@ func (suite *KeeperTestSuite) TestApplyMessageWithConfig() {
|
|||||||
suite.SetupTest()
|
suite.SetupTest()
|
||||||
expectedGasUsed = params.TxGas
|
expectedGasUsed = params.TxGas
|
||||||
|
|
||||||
config, err = suite.app.EvmKeeper.EVMConfig(suite.ctx)
|
proposerAddress := suite.ctx.BlockHeader().ProposerAddress
|
||||||
|
config, err = suite.app.EvmKeeper.EVMConfig(suite.ctx, proposerAddress)
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
|
|
||||||
keeperParams = suite.app.EvmKeeper.GetParams(suite.ctx)
|
keeperParams = suite.app.EvmKeeper.GetParams(suite.ctx)
|
||||||
@ -688,3 +691,35 @@ func (suite *KeeperTestSuite) createContractMsgTx(nonce uint64, signer ethtypes.
|
|||||||
|
|
||||||
return ethMsg, ethMsg.Sign(signer, suite.signer)
|
return ethMsg, ethMsg.Sign(signer, suite.signer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (suite *KeeperTestSuite) TestGetProposerAddress() {
|
||||||
|
var a sdk.ConsAddress
|
||||||
|
address := sdk.ConsAddress(suite.address.Bytes())
|
||||||
|
proposerAddress := sdk.ConsAddress(suite.ctx.BlockHeader().ProposerAddress)
|
||||||
|
testCases := []struct {
|
||||||
|
msg string
|
||||||
|
adr sdk.ConsAddress
|
||||||
|
expAdr sdk.ConsAddress
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"proposer address provided",
|
||||||
|
address,
|
||||||
|
address,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nil proposer address provided",
|
||||||
|
nil,
|
||||||
|
proposerAddress,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"typed nil proposer address provided",
|
||||||
|
a,
|
||||||
|
proposerAddress,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range testCases {
|
||||||
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
||||||
|
suite.Require().Equal(tc.expAdr, keeper.GetProposerAddress(suite.ctx, tc.adr))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
339
x/evm/types/query.pb.go
generated
339
x/evm/types/query.pb.go
generated
@ -792,6 +792,8 @@ type EthCallRequest struct {
|
|||||||
Args []byte `protobuf:"bytes,1,opt,name=args,proto3" json:"args,omitempty"`
|
Args []byte `protobuf:"bytes,1,opt,name=args,proto3" json:"args,omitempty"`
|
||||||
// the default gas cap to be used
|
// the default gas cap to be used
|
||||||
GasCap uint64 `protobuf:"varint,2,opt,name=gas_cap,json=gasCap,proto3" json:"gas_cap,omitempty"`
|
GasCap uint64 `protobuf:"varint,2,opt,name=gas_cap,json=gasCap,proto3" json:"gas_cap,omitempty"`
|
||||||
|
// the proposer of the requested block
|
||||||
|
ProposerAddress github_com_cosmos_cosmos_sdk_types.ConsAddress `protobuf:"bytes,3,opt,name=proposer_address,json=proposerAddress,proto3,casttype=github.com/cosmos/cosmos-sdk/types.ConsAddress" json:"proposer_address,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *EthCallRequest) Reset() { *m = EthCallRequest{} }
|
func (m *EthCallRequest) Reset() { *m = EthCallRequest{} }
|
||||||
@ -841,6 +843,13 @@ func (m *EthCallRequest) GetGasCap() uint64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *EthCallRequest) GetProposerAddress() github_com_cosmos_cosmos_sdk_types.ConsAddress {
|
||||||
|
if m != nil {
|
||||||
|
return m.ProposerAddress
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// EstimateGasResponse defines EstimateGas response
|
// EstimateGasResponse defines EstimateGas response
|
||||||
type EstimateGasResponse struct {
|
type EstimateGasResponse struct {
|
||||||
// the estimated gas
|
// the estimated gas
|
||||||
@ -902,6 +911,8 @@ type QueryTraceTxRequest struct {
|
|||||||
BlockHash string `protobuf:"bytes,6,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
|
BlockHash string `protobuf:"bytes,6,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
|
||||||
// block time of requested transaction
|
// block time of requested transaction
|
||||||
BlockTime time.Time `protobuf:"bytes,7,opt,name=block_time,json=blockTime,proto3,stdtime" json:"block_time"`
|
BlockTime time.Time `protobuf:"bytes,7,opt,name=block_time,json=blockTime,proto3,stdtime" json:"block_time"`
|
||||||
|
// the proposer of the requested block
|
||||||
|
ProposerAddress github_com_cosmos_cosmos_sdk_types.ConsAddress `protobuf:"bytes,8,opt,name=proposer_address,json=proposerAddress,proto3,casttype=github.com/cosmos/cosmos-sdk/types.ConsAddress" json:"proposer_address,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *QueryTraceTxRequest) Reset() { *m = QueryTraceTxRequest{} }
|
func (m *QueryTraceTxRequest) Reset() { *m = QueryTraceTxRequest{} }
|
||||||
@ -979,6 +990,13 @@ func (m *QueryTraceTxRequest) GetBlockTime() time.Time {
|
|||||||
return time.Time{}
|
return time.Time{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *QueryTraceTxRequest) GetProposerAddress() github_com_cosmos_cosmos_sdk_types.ConsAddress {
|
||||||
|
if m != nil {
|
||||||
|
return m.ProposerAddress
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// QueryTraceTxResponse defines TraceTx response
|
// QueryTraceTxResponse defines TraceTx response
|
||||||
type QueryTraceTxResponse struct {
|
type QueryTraceTxResponse struct {
|
||||||
// response serialized in bytes
|
// response serialized in bytes
|
||||||
@ -1037,6 +1055,8 @@ type QueryTraceBlockRequest struct {
|
|||||||
BlockHash string `protobuf:"bytes,6,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
|
BlockHash string `protobuf:"bytes,6,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"`
|
||||||
// block time
|
// block time
|
||||||
BlockTime time.Time `protobuf:"bytes,7,opt,name=block_time,json=blockTime,proto3,stdtime" json:"block_time"`
|
BlockTime time.Time `protobuf:"bytes,7,opt,name=block_time,json=blockTime,proto3,stdtime" json:"block_time"`
|
||||||
|
// the proposer of the requested block
|
||||||
|
ProposerAddress github_com_cosmos_cosmos_sdk_types.ConsAddress `protobuf:"bytes,8,opt,name=proposer_address,json=proposerAddress,proto3,casttype=github.com/cosmos/cosmos-sdk/types.ConsAddress" json:"proposer_address,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *QueryTraceBlockRequest) Reset() { *m = QueryTraceBlockRequest{} }
|
func (m *QueryTraceBlockRequest) Reset() { *m = QueryTraceBlockRequest{} }
|
||||||
@ -1107,6 +1127,13 @@ func (m *QueryTraceBlockRequest) GetBlockTime() time.Time {
|
|||||||
return time.Time{}
|
return time.Time{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *QueryTraceBlockRequest) GetProposerAddress() github_com_cosmos_cosmos_sdk_types.ConsAddress {
|
||||||
|
if m != nil {
|
||||||
|
return m.ProposerAddress
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// QueryTraceBlockResponse defines TraceBlock response
|
// QueryTraceBlockResponse defines TraceBlock response
|
||||||
type QueryTraceBlockResponse struct {
|
type QueryTraceBlockResponse struct {
|
||||||
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
|
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
|
||||||
@ -1258,93 +1285,96 @@ func init() {
|
|||||||
func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) }
|
func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) }
|
||||||
|
|
||||||
var fileDescriptor_e15a877459347994 = []byte{
|
var fileDescriptor_e15a877459347994 = []byte{
|
||||||
// 1371 bytes of a gzipped FileDescriptorProto
|
// 1415 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0x4d, 0x6f, 0x1b, 0x55,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x56, 0xcd, 0x6f, 0x13, 0x47,
|
||||||
0x17, 0xce, 0xc4, 0x4e, 0xec, 0x1e, 0xa7, 0x7d, 0xf3, 0xde, 0xa6, 0xd4, 0x1d, 0x12, 0x3b, 0x9d,
|
0x1b, 0xcf, 0xc6, 0x4e, 0x6c, 0xc6, 0x01, 0xfc, 0x0e, 0xe1, 0xc5, 0xec, 0x9b, 0xd8, 0x61, 0x21,
|
||||||
0x36, 0x9f, 0x4d, 0x67, 0x88, 0x41, 0x95, 0xa8, 0x84, 0x68, 0x63, 0xa5, 0x05, 0xda, 0xa2, 0x62,
|
0x9f, 0x84, 0xdd, 0x37, 0x6e, 0x85, 0x54, 0x2e, 0x05, 0x5b, 0x81, 0xb6, 0x40, 0x45, 0xb7, 0x51,
|
||||||
0x22, 0x16, 0x48, 0xc8, 0xba, 0x1e, 0xdf, 0x8e, 0xad, 0xd8, 0x33, 0xae, 0xef, 0xb5, 0x71, 0x5a,
|
0x0f, 0x95, 0x90, 0x35, 0x5e, 0x0f, 0x6b, 0x2b, 0xf6, 0x8e, 0xd9, 0x19, 0xbb, 0x0e, 0x94, 0x1e,
|
||||||
0xca, 0x02, 0x89, 0xaa, 0xa8, 0x9b, 0x4a, 0xb0, 0x46, 0xfd, 0x07, 0xfc, 0x8d, 0x2e, 0x2b, 0xb1,
|
0x2a, 0x15, 0x51, 0x71, 0x41, 0xea, 0xb5, 0xaa, 0xf8, 0x0f, 0xfa, 0x57, 0x54, 0xe2, 0x88, 0xd4,
|
||||||
0x41, 0x2c, 0x0a, 0x6a, 0x10, 0x62, 0xc7, 0x5f, 0x40, 0xf7, 0x63, 0xec, 0x19, 0x8f, 0xc7, 0x4e,
|
0x4b, 0xd5, 0x03, 0xad, 0xa0, 0x87, 0xde, 0x7a, 0xe8, 0xad, 0xa7, 0x6a, 0x3e, 0xd6, 0x5e, 0x7b,
|
||||||
0x51, 0x17, 0xac, 0xe6, 0x7e, 0x9c, 0x7b, 0x9e, 0xe7, 0x9e, 0x7b, 0xe6, 0x3c, 0x07, 0x16, 0x09,
|
0xbd, 0x76, 0xa8, 0xb8, 0xf5, 0xb4, 0x3b, 0x33, 0xcf, 0x3c, 0xcf, 0xef, 0xf9, 0x98, 0xe7, 0xf9,
|
||||||
0xab, 0x91, 0x76, 0xb3, 0xee, 0x32, 0x8b, 0x74, 0x9b, 0x56, 0x77, 0xdb, 0xba, 0xdb, 0x21, 0xed,
|
0x81, 0x25, 0xcc, 0xea, 0xd8, 0x6f, 0x35, 0x3c, 0x66, 0xe1, 0x6e, 0xcb, 0xea, 0xee, 0x58, 0x77,
|
||||||
0x03, 0xb3, 0xd5, 0xf6, 0x98, 0x87, 0xe6, 0xfb, 0xbb, 0x26, 0xe9, 0x36, 0xcd, 0xee, 0xb6, 0xbe,
|
0x3b, 0xd8, 0x3f, 0x30, 0xdb, 0x3e, 0x61, 0x04, 0x66, 0xfb, 0xa7, 0x26, 0xee, 0xb6, 0xcc, 0xee,
|
||||||
0xe0, 0x78, 0x8e, 0x27, 0x36, 0x2d, 0x3e, 0x92, 0x76, 0xfa, 0xa6, 0xed, 0xd1, 0xa6, 0x47, 0xad,
|
0x8e, 0xbe, 0xe8, 0x12, 0x97, 0x88, 0x43, 0x8b, 0xff, 0x49, 0x39, 0x7d, 0xcb, 0x21, 0xb4, 0x45,
|
||||||
0x0a, 0xa6, 0x44, 0x3a, 0xb0, 0xba, 0xdb, 0x15, 0xc2, 0xf0, 0xb6, 0xd5, 0xc2, 0x4e, 0xdd, 0xc5,
|
0xa8, 0x55, 0x45, 0x14, 0x4b, 0x05, 0x56, 0x77, 0xa7, 0x8a, 0x19, 0xda, 0xb1, 0xda, 0xc8, 0x6d,
|
||||||
0xac, 0xee, 0xb9, 0xca, 0x76, 0xd1, 0xf1, 0x3c, 0xa7, 0x41, 0x2c, 0xdc, 0xaa, 0x5b, 0xd8, 0x75,
|
0x78, 0x88, 0x35, 0x88, 0xa7, 0x64, 0x97, 0x5c, 0x42, 0xdc, 0x26, 0xb6, 0x50, 0xbb, 0x61, 0x21,
|
||||||
0x3d, 0x26, 0x36, 0xa9, 0xda, 0xd5, 0x23, 0x7c, 0x38, 0xb0, 0xdc, 0x3b, 0x13, 0xd9, 0x63, 0x3d,
|
0xcf, 0x23, 0x4c, 0x1c, 0x52, 0x75, 0xaa, 0x47, 0xf0, 0x70, 0xc3, 0xf2, 0xec, 0x74, 0xe4, 0x8c,
|
||||||
0xb5, 0x95, 0x57, 0x4e, 0xc5, 0xac, 0xd2, 0xb9, 0x63, 0xb1, 0x7a, 0x93, 0x50, 0x86, 0x9b, 0x2d,
|
0xf5, 0xd4, 0x51, 0x41, 0x29, 0x15, 0xab, 0x6a, 0xe7, 0x8e, 0xc5, 0x1a, 0x2d, 0x4c, 0x19, 0x6a,
|
||||||
0x69, 0x60, 0xbc, 0x0b, 0x27, 0x3f, 0xe1, 0xbc, 0xae, 0xda, 0xb6, 0xd7, 0x71, 0x59, 0x89, 0xdc,
|
0xb5, 0xa5, 0x80, 0xf1, 0x0e, 0x38, 0xf1, 0x11, 0xc7, 0x75, 0xc5, 0x71, 0x48, 0xc7, 0x63, 0x36,
|
||||||
0xed, 0x10, 0xca, 0x50, 0x16, 0x52, 0xb8, 0x5a, 0x6d, 0x13, 0x4a, 0xb3, 0xda, 0xb2, 0xb6, 0x7e,
|
0xbe, 0xdb, 0xc1, 0x94, 0xc1, 0x1c, 0x48, 0xa1, 0x5a, 0xcd, 0xc7, 0x94, 0xe6, 0xb4, 0x15, 0x6d,
|
||||||
0xac, 0xe4, 0x4f, 0x2f, 0xa7, 0x1f, 0x3d, 0xcd, 0x4f, 0xfd, 0xf5, 0x34, 0x3f, 0x65, 0xd8, 0xb0,
|
0xe3, 0x88, 0x1d, 0x2c, 0x2f, 0xa5, 0x1f, 0x3d, 0x2d, 0xcc, 0xfc, 0xfe, 0xb4, 0x30, 0x63, 0x38,
|
||||||
0x10, 0x3e, 0x4a, 0x5b, 0x9e, 0x4b, 0x09, 0x3f, 0x5b, 0xc1, 0x0d, 0xec, 0xda, 0xc4, 0x3f, 0xab,
|
0x60, 0x71, 0xf8, 0x2a, 0x6d, 0x13, 0x8f, 0x62, 0x7e, 0xb7, 0x8a, 0x9a, 0xc8, 0x73, 0x70, 0x70,
|
||||||
0xa6, 0xe8, 0x4d, 0x38, 0x66, 0x7b, 0x55, 0x52, 0xae, 0x61, 0x5a, 0xcb, 0x4e, 0x8b, 0xbd, 0x34,
|
0x57, 0x2d, 0xe1, 0xff, 0xc0, 0x11, 0x87, 0xd4, 0x70, 0xa5, 0x8e, 0x68, 0x3d, 0x37, 0x2b, 0xce,
|
||||||
0x5f, 0xf8, 0x00, 0xd3, 0x1a, 0x5a, 0x80, 0x19, 0xd7, 0xe3, 0x87, 0x12, 0xcb, 0xda, 0x7a, 0xb2,
|
0xd2, 0x7c, 0xe3, 0x3d, 0x44, 0xeb, 0x70, 0x11, 0xcc, 0x79, 0x84, 0x5f, 0x4a, 0xac, 0x68, 0x1b,
|
||||||
0x24, 0x27, 0xc6, 0xfb, 0x70, 0x46, 0x80, 0x14, 0x45, 0x20, 0xff, 0x05, 0xcb, 0x87, 0x1a, 0xe8,
|
0x49, 0x5b, 0x2e, 0x8c, 0x77, 0xc1, 0x69, 0x61, 0xa4, 0x2c, 0x02, 0xf9, 0x0f, 0x50, 0x3e, 0xd4,
|
||||||
0xa3, 0x3c, 0x28, 0xb2, 0x2b, 0x70, 0x42, 0xbe, 0x51, 0x39, 0xec, 0xe9, 0xb8, 0x5c, 0xbd, 0x2a,
|
0x80, 0x3e, 0x4e, 0x83, 0x02, 0xbb, 0x0a, 0x8e, 0xc9, 0x1c, 0x55, 0x86, 0x35, 0x1d, 0x95, 0xbb,
|
||||||
0x17, 0x91, 0x0e, 0x69, 0xca, 0x41, 0x39, 0xbf, 0x69, 0xc1, 0xaf, 0x3f, 0xe7, 0x2e, 0xb0, 0xf4,
|
0x57, 0xe4, 0x26, 0xd4, 0x41, 0x9a, 0x72, 0xa3, 0x1c, 0xdf, 0xac, 0xc0, 0xd7, 0x5f, 0x73, 0x15,
|
||||||
0x5a, 0x76, 0x3b, 0xcd, 0x0a, 0x69, 0xab, 0x1b, 0x1c, 0x57, 0xab, 0x1f, 0x8b, 0x45, 0xe3, 0x06,
|
0x48, 0x6a, 0xad, 0x78, 0x9d, 0x56, 0x15, 0xfb, 0xca, 0x83, 0xa3, 0x6a, 0xf7, 0x43, 0xb1, 0x69,
|
||||||
0x2c, 0x0a, 0x1e, 0x9f, 0xe1, 0x46, 0xbd, 0x8a, 0x99, 0xd7, 0x1e, 0xba, 0xcc, 0x59, 0x98, 0xb3,
|
0x5c, 0x07, 0x4b, 0x02, 0xc7, 0x27, 0xa8, 0xd9, 0xa8, 0x21, 0x46, 0xfc, 0x11, 0x67, 0xce, 0x80,
|
||||||
0x3d, 0x77, 0x98, 0x47, 0x86, 0xaf, 0x5d, 0x8d, 0xdc, 0xea, 0xb1, 0x06, 0x4b, 0x31, 0xde, 0xd4,
|
0x05, 0x87, 0x78, 0xa3, 0x38, 0x32, 0x7c, 0xef, 0x4a, 0xc4, 0xab, 0xc7, 0x1a, 0x58, 0x8e, 0xd1,
|
||||||
0xc5, 0xd6, 0xe0, 0x7f, 0x3e, 0xab, 0xb0, 0x47, 0x9f, 0xec, 0x6b, 0xbc, 0x9a, 0x9f, 0x44, 0x3b,
|
0xa6, 0x1c, 0x5b, 0x07, 0xc7, 0x03, 0x54, 0xc3, 0x1a, 0x03, 0xb0, 0x6f, 0xd0, 0xb5, 0xa0, 0x88,
|
||||||
0xf2, 0x9d, 0x5f, 0xe5, 0x79, 0xde, 0x52, 0x49, 0xd4, 0x3f, 0x3a, 0x29, 0x89, 0x8c, 0x1b, 0x0a,
|
0x4a, 0x32, 0xcf, 0xaf, 0x93, 0x9e, 0xff, 0xab, 0x22, 0xea, 0x5f, 0x9d, 0x56, 0x44, 0xc6, 0x75,
|
||||||
0xec, 0x53, 0xe6, 0xb5, 0xb1, 0x33, 0x19, 0x0c, 0xcd, 0x43, 0x62, 0x9f, 0x1c, 0xa8, 0x7c, 0xe3,
|
0x65, 0xec, 0x63, 0x46, 0x7c, 0xe4, 0x4e, 0x37, 0x06, 0xb3, 0x20, 0xb1, 0x8f, 0x0f, 0x54, 0xbd,
|
||||||
0xc3, 0x00, 0xfc, 0x96, 0x82, 0xef, 0x3b, 0x53, 0xf0, 0x0b, 0x30, 0xd3, 0xc5, 0x8d, 0x8e, 0x0f,
|
0xf1, 0xdf, 0x90, 0xf9, 0x6d, 0x65, 0xbe, 0xaf, 0x4c, 0x99, 0x5f, 0x04, 0x73, 0x5d, 0xd4, 0xec,
|
||||||
0x2e, 0x27, 0xc6, 0x25, 0x98, 0x57, 0xa9, 0x54, 0x7d, 0xa5, 0x4b, 0xae, 0xc1, 0xff, 0x03, 0xe7,
|
0x04, 0xc6, 0xe5, 0xc2, 0xb8, 0x08, 0xb2, 0xaa, 0x94, 0x6a, 0xaf, 0xe5, 0xe4, 0x3a, 0xf8, 0x4f,
|
||||||
0x14, 0x04, 0x82, 0x24, 0xcf, 0x7d, 0x71, 0x6a, 0xae, 0x24, 0xc6, 0xc6, 0x3d, 0x40, 0xc2, 0x70,
|
0xe8, 0x9e, 0x32, 0x01, 0x41, 0x92, 0xd7, 0xbe, 0xb8, 0xb5, 0x60, 0x8b, 0x7f, 0xe3, 0x1e, 0x80,
|
||||||
0xaf, 0x77, 0xd3, 0x73, 0xa8, 0x0f, 0x81, 0x20, 0x29, 0xfe, 0x18, 0xe9, 0x5f, 0x8c, 0xd1, 0x35,
|
0x42, 0x70, 0xaf, 0x77, 0x83, 0xb8, 0x34, 0x30, 0x01, 0x41, 0x52, 0xbc, 0x18, 0xa9, 0x5f, 0xfc,
|
||||||
0x80, 0x41, 0x05, 0x11, 0x77, 0xcb, 0x14, 0x56, 0x4d, 0x99, 0xb4, 0x26, 0x2f, 0x37, 0xa6, 0xac,
|
0xc3, 0xab, 0x00, 0x0c, 0x3a, 0x88, 0xf0, 0x2d, 0x53, 0x5c, 0x33, 0x65, 0xd1, 0x9a, 0xbc, 0xdd,
|
||||||
0x57, 0xaa, 0xdc, 0x98, 0xb7, 0x07, 0xa1, 0x2a, 0x05, 0x4e, 0x06, 0x48, 0x7e, 0xa7, 0xa9, 0xc0,
|
0x98, 0xb2, 0x5f, 0xa9, 0x76, 0x63, 0xde, 0x1a, 0x84, 0xca, 0x0e, 0xdd, 0x0c, 0x81, 0xfc, 0x5a,
|
||||||
0xfa, 0xe0, 0x8a, 0xe7, 0x06, 0x24, 0x1b, 0x9e, 0xc3, 0x6f, 0x97, 0x58, 0xcf, 0x14, 0x4e, 0x99,
|
0x53, 0x81, 0x0d, 0x8c, 0x2b, 0x9c, 0x9b, 0x20, 0xd9, 0x24, 0x2e, 0xf7, 0x2e, 0xb1, 0x91, 0x29,
|
||||||
0xc3, 0xa5, 0xcf, 0xbc, 0xe9, 0x39, 0x25, 0x61, 0x82, 0xae, 0x8f, 0x20, 0xb5, 0x36, 0x91, 0x94,
|
0x9e, 0x34, 0x47, 0x5b, 0x9f, 0x79, 0x83, 0xb8, 0xb6, 0x10, 0x81, 0xd7, 0xc6, 0x80, 0x5a, 0x9f,
|
||||||
0xc4, 0x09, 0xb2, 0x32, 0x16, 0x54, 0x1c, 0x6e, 0xe3, 0x36, 0x6e, 0xfa, 0x71, 0x30, 0x6e, 0x29,
|
0x0a, 0x4a, 0xda, 0x09, 0xa3, 0x32, 0x16, 0x55, 0x1c, 0x6e, 0x21, 0x1f, 0xb5, 0x82, 0x38, 0x18,
|
||||||
0x82, 0xfe, 0xaa, 0x22, 0x78, 0x09, 0x66, 0x5b, 0x62, 0x45, 0x04, 0x28, 0x53, 0xc8, 0x46, 0x29,
|
0x37, 0x15, 0xc0, 0x60, 0x57, 0x01, 0xbc, 0x08, 0xe6, 0xdb, 0x62, 0x47, 0x04, 0x28, 0x53, 0xcc,
|
||||||
0xca, 0x13, 0x3b, 0xc9, 0x67, 0x2f, 0xf2, 0x53, 0x25, 0x65, 0x6d, 0xbc, 0x07, 0x27, 0x76, 0x59,
|
0x45, 0x21, 0xca, 0x1b, 0xa5, 0xe4, 0xb3, 0x17, 0x85, 0x19, 0x5b, 0x49, 0x1b, 0xdf, 0x6a, 0xe0,
|
||||||
0xad, 0x88, 0x1b, 0x8d, 0x40, 0xa0, 0x71, 0xdb, 0xa1, 0xfe, 0x93, 0xf0, 0x31, 0x3a, 0x0d, 0x29,
|
0xd8, 0x2e, 0xab, 0x97, 0x51, 0xb3, 0x19, 0x8a, 0x34, 0xf2, 0x5d, 0x1a, 0xe4, 0x84, 0xff, 0xc3,
|
||||||
0x07, 0xd3, 0xb2, 0x8d, 0x5b, 0xea, 0xef, 0x98, 0x75, 0x30, 0x2d, 0xe2, 0x96, 0xb1, 0x06, 0x27,
|
0x53, 0x20, 0xe5, 0x22, 0x5a, 0x71, 0x50, 0x5b, 0x3d, 0x8f, 0x79, 0x17, 0xd1, 0x32, 0x6a, 0xc3,
|
||||||
0x77, 0x29, 0xab, 0x37, 0x31, 0x23, 0xd7, 0xf1, 0x80, 0xcd, 0x3c, 0x24, 0x1c, 0x2c, 0x5d, 0x24,
|
0xdb, 0x20, 0xdb, 0xf6, 0x49, 0x9b, 0x50, 0xec, 0xf7, 0x9f, 0x18, 0x7f, 0x1e, 0x0b, 0xa5, 0xe2,
|
||||||
0x4b, 0x7c, 0x68, 0xfc, 0x39, 0xed, 0x07, 0xb6, 0x8d, 0x6d, 0xb2, 0xd7, 0xf3, 0xd1, 0xb6, 0x21,
|
0x5f, 0x2f, 0x0a, 0xa6, 0xdb, 0x60, 0xf5, 0x4e, 0xd5, 0x74, 0x48, 0xcb, 0x52, 0x53, 0x40, 0x7e,
|
||||||
0xd1, 0xa4, 0x8e, 0x22, 0x9d, 0x8f, 0x92, 0xbe, 0x45, 0x9d, 0x5d, 0xbe, 0x46, 0x3a, 0xcd, 0xbd,
|
0x2e, 0xd0, 0xda, 0xbe, 0xc5, 0x0e, 0xda, 0x98, 0x9a, 0xe5, 0xc1, 0xdb, 0xb6, 0x8f, 0x07, 0xba,
|
||||||
0x5e, 0x89, 0xdb, 0xa2, 0x2b, 0x30, 0xc7, 0xb8, 0x93, 0xb2, 0xed, 0xb9, 0x77, 0xea, 0x8e, 0xf8,
|
0xd4, 0x86, 0xb1, 0x0e, 0x4e, 0xec, 0x52, 0xd6, 0x68, 0x21, 0x86, 0xaf, 0xa1, 0x81, 0xb7, 0x59,
|
||||||
0x1b, 0x33, 0x85, 0xa5, 0xe8, 0x59, 0x01, 0x55, 0x14, 0x46, 0xa5, 0x0c, 0x1b, 0x4c, 0x50, 0x11,
|
0x90, 0x70, 0x91, 0x44, 0x98, 0xb4, 0xf9, 0xaf, 0xf1, 0x43, 0x22, 0x48, 0x9c, 0x8f, 0x1c, 0xbc,
|
||||||
0xe6, 0x5a, 0x6d, 0x52, 0x25, 0x36, 0xa1, 0xd4, 0x6b, 0xd3, 0x6c, 0x52, 0xbc, 0xea, 0x44, 0xf4,
|
0xd7, 0x0b, 0x9c, 0xd9, 0x01, 0x89, 0x16, 0x75, 0x55, 0x50, 0x0a, 0xd1, 0xa0, 0xdc, 0xa4, 0xee,
|
||||||
0xd0, 0x21, 0x5e, 0xaa, 0x2a, 0x0d, 0xcf, 0xde, 0xf7, 0x8b, 0xc2, 0xcc, 0xb2, 0xb6, 0x9e, 0x28,
|
0x2e, 0xdf, 0xc3, 0x9d, 0xd6, 0x5e, 0xcf, 0xe6, 0xb2, 0xf0, 0x32, 0x58, 0x60, 0x5c, 0x49, 0xc5,
|
||||||
0x65, 0xc4, 0x9a, 0x2c, 0x09, 0x68, 0x09, 0x40, 0x9a, 0x88, 0xcc, 0x9d, 0x15, 0x99, 0x7b, 0x4c,
|
0x21, 0xde, 0x9d, 0x86, 0x2b, 0xdc, 0xc9, 0x14, 0x97, 0xa3, 0x77, 0x85, 0xa9, 0xb2, 0x10, 0xb2,
|
||||||
0xac, 0x88, 0x62, 0x5f, 0xf4, 0xb7, 0xb9, 0x1e, 0x65, 0x53, 0xe2, 0x1a, 0xba, 0x29, 0xc5, 0xca,
|
0x33, 0x6c, 0xb0, 0x80, 0x65, 0xb0, 0xd0, 0xf6, 0x71, 0x0d, 0x3b, 0x98, 0x52, 0xe2, 0xd3, 0x5c,
|
||||||
0xf4, 0xc5, 0xca, 0xdc, 0xf3, 0xc5, 0x6a, 0x27, 0xcd, 0x5f, 0xee, 0xc9, 0x6f, 0x79, 0x4d, 0x39,
|
0x52, 0x54, 0xcd, 0x54, 0xeb, 0x43, 0x97, 0x78, 0x2b, 0xac, 0x36, 0x89, 0xb3, 0x1f, 0x34, 0x9d,
|
||||||
0xe1, 0x3b, 0x1f, 0x25, 0xd3, 0xd3, 0xf3, 0x89, 0x52, 0x9a, 0xf5, 0xca, 0x75, 0xb7, 0x4a, 0x7a,
|
0xb9, 0x15, 0x6d, 0x23, 0x61, 0x67, 0xc4, 0x9e, 0x6c, 0x39, 0x70, 0x19, 0x00, 0x29, 0x22, 0x5e,
|
||||||
0xc6, 0xa6, 0xfa, 0x99, 0xfb, 0x71, 0x1e, 0xfc, 0x69, 0x55, 0xcc, 0xb0, 0xff, 0xac, 0x7c, 0x6c,
|
0xc6, 0xbc, 0x78, 0x19, 0x47, 0xc4, 0x8e, 0x18, 0x26, 0xe5, 0xe0, 0x98, 0xcf, 0xbb, 0x5c, 0x4a,
|
||||||
0xfc, 0x30, 0x0d, 0x6f, 0x0c, 0x8c, 0x77, 0xb8, 0xcf, 0xc0, 0xbb, 0xb0, 0x9e, 0x9f, 0xef, 0x93,
|
0xb8, 0xa1, 0x9b, 0x72, 0x18, 0x9a, 0xc1, 0x30, 0x34, 0xf7, 0x82, 0x61, 0x58, 0x4a, 0xf3, 0xca,
|
||||||
0xdf, 0x85, 0xf5, 0xe8, 0x6b, 0x78, 0x97, 0xff, 0x46, 0x48, 0x8d, 0x8b, 0x70, 0x3a, 0x12, 0x95,
|
0x78, 0xf2, 0x4b, 0x41, 0x53, 0x4a, 0xf8, 0xc9, 0xd8, 0x04, 0xa7, 0xdf, 0x58, 0x82, 0x3f, 0x48,
|
||||||
0x31, 0x51, 0x3c, 0xd5, 0x2f, 0xfc, 0x94, 0x5c, 0x23, 0x7e, 0x81, 0x31, 0xbe, 0xe8, 0x17, 0x75,
|
0xa6, 0x67, 0xb3, 0x09, 0x3b, 0xcd, 0x7a, 0x95, 0x86, 0x57, 0xc3, 0x3d, 0x63, 0x4b, 0xf5, 0xa2,
|
||||||
0xb5, 0xac, 0x5c, 0xec, 0x42, 0x9a, 0x57, 0x81, 0xf2, 0x1d, 0xa2, 0x0a, 0xeb, 0xce, 0xe6, 0xaf,
|
0x7e, 0x1a, 0x07, 0x8d, 0xa2, 0x86, 0x18, 0x0a, 0x8a, 0x92, 0xff, 0x1b, 0x7f, 0xce, 0x82, 0xff,
|
||||||
0x2f, 0xf2, 0xab, 0x4e, 0x9d, 0xd5, 0x3a, 0x15, 0xd3, 0xf6, 0x9a, 0x96, 0xea, 0x97, 0xe4, 0xe7,
|
0x0e, 0x84, 0x4b, 0x1c, 0x72, 0x28, 0xed, 0xac, 0x17, 0x3c, 0xd7, 0xe9, 0x69, 0x67, 0x3d, 0xfa,
|
||||||
0x22, 0xad, 0xee, 0x5b, 0xec, 0xa0, 0x45, 0xa8, 0xf9, 0xa1, 0xcb, 0xb8, 0x02, 0x08, 0x77, 0x85,
|
0x06, 0xd2, 0xfe, 0xaf, 0xc8, 0x98, 0x71, 0x01, 0x9c, 0x8a, 0x04, 0x7d, 0x42, 0x92, 0x4e, 0xf6,
|
||||||
0xbf, 0xe7, 0x60, 0x46, 0xf8, 0x47, 0xdf, 0x6a, 0x90, 0x52, 0xc2, 0x87, 0x56, 0xa2, 0xd1, 0x1e,
|
0xc7, 0x22, 0xc5, 0x57, 0x71, 0xd0, 0x7e, 0x8d, 0xdb, 0xfd, 0x91, 0xa7, 0xb6, 0x95, 0x8a, 0x5d,
|
||||||
0xd1, 0xd9, 0xe8, 0xab, 0x93, 0xcc, 0x24, 0x57, 0xe3, 0xc2, 0x37, 0x3f, 0xff, 0xf1, 0xfd, 0xf4,
|
0x90, 0xe6, 0x3d, 0xb2, 0x72, 0x07, 0xab, 0xb1, 0x53, 0xda, 0xfa, 0xf9, 0x45, 0x61, 0xed, 0x10,
|
||||||
0x0a, 0x3a, 0x67, 0x45, 0xba, 0x2b, 0x25, 0x7e, 0xd6, 0x7d, 0x55, 0xe9, 0x1f, 0xa0, 0x1f, 0x35,
|
0xa0, 0xdf, 0xf7, 0x18, 0x9f, 0x8f, 0x42, 0x5d, 0xf1, 0x8f, 0x05, 0x30, 0x27, 0xf4, 0xc3, 0xaf,
|
||||||
0x38, 0x1e, 0xea, 0x2f, 0xd0, 0x85, 0x18, 0x98, 0x51, 0x7d, 0x8c, 0xbe, 0x75, 0x34, 0x63, 0xc5,
|
0x34, 0x90, 0x52, 0xb4, 0x00, 0xae, 0x46, 0x93, 0x39, 0x86, 0xf7, 0xe9, 0x6b, 0xd3, 0xc4, 0x24,
|
||||||
0xac, 0x20, 0x98, 0x6d, 0xa1, 0xcd, 0x28, 0x33, 0xbf, 0x95, 0x89, 0x10, 0xfc, 0x49, 0x83, 0xf9,
|
0x56, 0xe3, 0xfc, 0x97, 0x3f, 0xfe, 0xf6, 0xcd, 0xec, 0x2a, 0x3c, 0x6b, 0x45, 0xb8, 0xa7, 0xa2,
|
||||||
0xe1, 0x56, 0x01, 0x99, 0x31, 0xb0, 0x31, 0x1d, 0x8a, 0x6e, 0x1d, 0xd9, 0x5e, 0x31, 0xbd, 0x2c,
|
0x06, 0xd6, 0x7d, 0x95, 0x80, 0x07, 0xf0, 0x3b, 0x0d, 0x1c, 0x1d, 0x62, 0x5f, 0xf0, 0x7c, 0x8c,
|
||||||
0x98, 0xbe, 0x83, 0x0a, 0x51, 0xa6, 0x5d, 0xff, 0xcc, 0x80, 0x6c, 0xb0, 0xfb, 0x79, 0x80, 0x1e,
|
0x99, 0x71, 0x2c, 0x4f, 0xdf, 0x3e, 0x9c, 0xb0, 0x42, 0x56, 0x14, 0xc8, 0xb6, 0xe1, 0x56, 0x14,
|
||||||
0x6a, 0x90, 0x52, 0x4d, 0x41, 0xec, 0xd3, 0x86, 0xfb, 0x8d, 0xd8, 0xa7, 0x1d, 0xea, 0x2d, 0x8c,
|
0x59, 0x40, 0xf4, 0x22, 0x00, 0xbf, 0xd7, 0x40, 0x76, 0x94, 0x48, 0x41, 0x33, 0xc6, 0x6c, 0x0c,
|
||||||
0x2d, 0x41, 0x6b, 0x15, 0x9d, 0x8f, 0xd2, 0x52, 0x4d, 0x06, 0x0d, 0x84, 0xee, 0xb1, 0x06, 0x29,
|
0x7f, 0xd3, 0xad, 0x43, 0xcb, 0x2b, 0xa4, 0x97, 0x04, 0xd2, 0xb7, 0x61, 0x31, 0x8a, 0xb4, 0x1b,
|
||||||
0xd5, 0x1e, 0xc4, 0x12, 0x09, 0xf7, 0x22, 0xb1, 0x44, 0x86, 0xba, 0x0c, 0x63, 0x5b, 0x10, 0xb9,
|
0xdc, 0x19, 0x80, 0x0d, 0x73, 0xc3, 0x07, 0xf0, 0xa1, 0x06, 0x52, 0x8a, 0x32, 0xc5, 0xa6, 0x76,
|
||||||
0x80, 0x36, 0xa2, 0x44, 0xa8, 0x34, 0x1d, 0xf0, 0xb0, 0xee, 0xef, 0x93, 0x83, 0x07, 0xe8, 0x1e,
|
0x98, 0x8d, 0xc5, 0xa6, 0x76, 0x84, 0x79, 0x19, 0xdb, 0x02, 0xd6, 0x1a, 0x3c, 0x17, 0x85, 0xa5,
|
||||||
0x24, 0x79, 0x17, 0x81, 0x8c, 0xd8, 0x94, 0xe9, 0xb7, 0x26, 0xfa, 0xb9, 0xb1, 0x36, 0x8a, 0xc3,
|
0x28, 0x18, 0x0d, 0x85, 0xee, 0xb1, 0x06, 0x52, 0x8a, 0x3c, 0xc5, 0x02, 0x19, 0x66, 0x6a, 0xb1,
|
||||||
0x86, 0xe0, 0x70, 0x0e, 0x9d, 0x1d, 0x95, 0x4d, 0xd5, 0x50, 0x24, 0xbe, 0x84, 0x59, 0x29, 0xa4,
|
0x40, 0x46, 0x38, 0x98, 0xb1, 0x23, 0x80, 0x9c, 0x87, 0x9b, 0x51, 0x20, 0x54, 0x8a, 0x0e, 0x70,
|
||||||
0xe8, 0x7c, 0x8c, 0xe7, 0x90, 0x5e, 0xeb, 0x2b, 0x13, 0xac, 0x14, 0x83, 0x65, 0xc1, 0x40, 0x47,
|
0x58, 0xf7, 0xf7, 0xf1, 0xc1, 0x03, 0x78, 0x0f, 0x24, 0x39, 0xc7, 0x82, 0x46, 0x6c, 0xc9, 0xf4,
|
||||||
0xd9, 0x28, 0x03, 0xa9, 0xd4, 0xa8, 0x07, 0x29, 0xa5, 0xd4, 0x68, 0x39, 0xea, 0x33, 0x2c, 0xe2,
|
0x89, 0x9b, 0x7e, 0x76, 0xa2, 0x8c, 0xc2, 0xb0, 0x29, 0x30, 0x9c, 0x85, 0x67, 0xc6, 0x55, 0x53,
|
||||||
0xfa, 0xda, 0xa4, 0x8a, 0xed, 0xe3, 0x1a, 0x02, 0x77, 0x11, 0xe9, 0x51, 0x5c, 0xc2, 0x6a, 0x65,
|
0x6d, 0x28, 0x12, 0x9f, 0x81, 0x79, 0x49, 0x33, 0xe0, 0xb9, 0x18, 0xcd, 0x43, 0x6c, 0x46, 0x5f,
|
||||||
0x9b, 0xc3, 0x7d, 0x0d, 0x99, 0x80, 0xc8, 0x1f, 0x01, 0x7d, 0xc4, 0x9d, 0x47, 0x74, 0x09, 0xc6,
|
0x9d, 0x22, 0xa5, 0x10, 0xac, 0x08, 0x04, 0x3a, 0xcc, 0x45, 0x11, 0x48, 0x1e, 0x03, 0x7b, 0x20,
|
||||||
0xaa, 0xc0, 0x5e, 0x46, 0xb9, 0x11, 0xd8, 0xca, 0xbc, 0xec, 0x60, 0x8a, 0xbe, 0x82, 0x94, 0x52,
|
0xa5, 0x68, 0x0c, 0x5c, 0x89, 0xea, 0x1c, 0x66, 0x38, 0xfa, 0xfa, 0xb4, 0x81, 0x10, 0xd8, 0x35,
|
||||||
0xb3, 0xd8, 0xdc, 0x0b, 0x77, 0x15, 0xb1, 0xb9, 0x37, 0x24, 0x8a, 0xe3, 0x6e, 0x2f, 0xa5, 0x8c,
|
0x84, 0xdd, 0x25, 0xa8, 0x47, 0xed, 0x62, 0x56, 0xaf, 0x38, 0xdc, 0xdc, 0x17, 0x20, 0x13, 0xa2,
|
||||||
0xf5, 0xd0, 0x23, 0x0d, 0x60, 0xa0, 0x04, 0x68, 0x7d, 0x9c, 0xeb, 0xa0, 0x84, 0xea, 0x1b, 0x47,
|
0x28, 0x87, 0xb0, 0x3e, 0xc6, 0xe7, 0x31, 0x1c, 0xc7, 0x58, 0x13, 0xb6, 0x57, 0x60, 0x7e, 0x8c,
|
||||||
0xb0, 0x54, 0x3c, 0x56, 0x04, 0x8f, 0x3c, 0x5a, 0x8a, 0xe3, 0x21, 0xc4, 0x89, 0x07, 0x42, 0xa9,
|
0x6d, 0x25, 0x5e, 0x71, 0x11, 0x85, 0x9f, 0x83, 0x94, 0x1a, 0x96, 0xb1, 0xb5, 0x37, 0xcc, 0x89,
|
||||||
0xc9, 0x98, 0x6a, 0x10, 0x14, 0xa1, 0x31, 0xd5, 0x20, 0x24, 0x4a, 0xe3, 0x02, 0xe1, 0x8b, 0xd5,
|
0x62, 0x6b, 0x6f, 0x64, 0xe6, 0x4e, 0xf2, 0x5e, 0x4e, 0x4a, 0xd6, 0x83, 0x8f, 0x34, 0x00, 0x06,
|
||||||
0xce, 0x95, 0x67, 0x2f, 0x73, 0xda, 0xf3, 0x97, 0x39, 0xed, 0xf7, 0x97, 0x39, 0xed, 0xc9, 0x61,
|
0x93, 0x00, 0x6e, 0x4c, 0x52, 0x1d, 0x9e, 0xd0, 0xfa, 0xe6, 0x21, 0x24, 0x15, 0x8e, 0x55, 0x81,
|
||||||
0x6e, 0xea, 0xf9, 0x61, 0x6e, 0xea, 0x97, 0xc3, 0xdc, 0xd4, 0xe7, 0x41, 0xf1, 0x22, 0x5d, 0xae,
|
0xa3, 0x00, 0x97, 0xe3, 0x70, 0x88, 0xd9, 0xc7, 0x03, 0xa1, 0xa6, 0xc9, 0x84, 0x6e, 0x10, 0x1e,
|
||||||
0x5d, 0x03, 0x2f, 0x3d, 0xe1, 0x47, 0x08, 0x58, 0x65, 0x56, 0x28, 0xf0, 0xdb, 0xff, 0x04, 0x00,
|
0x42, 0x13, 0xba, 0xc1, 0xd0, 0x50, 0x9a, 0x14, 0x88, 0x60, 0x58, 0x95, 0x2e, 0x3f, 0x7b, 0x99,
|
||||||
0x00, 0xff, 0xff, 0x7d, 0x85, 0x8e, 0xb2, 0x58, 0x10, 0x00, 0x00,
|
0xd7, 0x9e, 0xbf, 0xcc, 0x6b, 0xbf, 0xbe, 0xcc, 0x6b, 0x4f, 0x5e, 0xe5, 0x67, 0x9e, 0xbf, 0xca,
|
||||||
|
0xcf, 0xfc, 0xf4, 0x2a, 0x3f, 0xf3, 0x69, 0x78, 0x78, 0xe1, 0x2e, 0x9f, 0x5d, 0x03, 0x2d, 0x3d,
|
||||||
|
0xa1, 0x47, 0x0c, 0xb0, 0xea, 0xbc, 0x18, 0xf0, 0x6f, 0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xcd,
|
||||||
|
0x1e, 0xee, 0xb9, 0x76, 0x11, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
@ -2419,6 +2449,13 @@ func (m *EthCallRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
|||||||
_ = i
|
_ = i
|
||||||
var l int
|
var l int
|
||||||
_ = l
|
_ = l
|
||||||
|
if len(m.ProposerAddress) > 0 {
|
||||||
|
i -= len(m.ProposerAddress)
|
||||||
|
copy(dAtA[i:], m.ProposerAddress)
|
||||||
|
i = encodeVarintQuery(dAtA, i, uint64(len(m.ProposerAddress)))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x1a
|
||||||
|
}
|
||||||
if m.GasCap != 0 {
|
if m.GasCap != 0 {
|
||||||
i = encodeVarintQuery(dAtA, i, uint64(m.GasCap))
|
i = encodeVarintQuery(dAtA, i, uint64(m.GasCap))
|
||||||
i--
|
i--
|
||||||
@ -2482,6 +2519,13 @@ func (m *QueryTraceTxRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
|||||||
_ = i
|
_ = i
|
||||||
var l int
|
var l int
|
||||||
_ = l
|
_ = l
|
||||||
|
if len(m.ProposerAddress) > 0 {
|
||||||
|
i -= len(m.ProposerAddress)
|
||||||
|
copy(dAtA[i:], m.ProposerAddress)
|
||||||
|
i = encodeVarintQuery(dAtA, i, uint64(len(m.ProposerAddress)))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x42
|
||||||
|
}
|
||||||
n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):])
|
n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):])
|
||||||
if err4 != nil {
|
if err4 != nil {
|
||||||
return 0, err4
|
return 0, err4
|
||||||
@ -2593,6 +2637,13 @@ func (m *QueryTraceBlockRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)
|
|||||||
_ = i
|
_ = i
|
||||||
var l int
|
var l int
|
||||||
_ = l
|
_ = l
|
||||||
|
if len(m.ProposerAddress) > 0 {
|
||||||
|
i -= len(m.ProposerAddress)
|
||||||
|
copy(dAtA[i:], m.ProposerAddress)
|
||||||
|
i = encodeVarintQuery(dAtA, i, uint64(len(m.ProposerAddress)))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x42
|
||||||
|
}
|
||||||
n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):])
|
n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.BlockTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime):])
|
||||||
if err7 != nil {
|
if err7 != nil {
|
||||||
return 0, err7
|
return 0, err7
|
||||||
@ -2989,6 +3040,10 @@ func (m *EthCallRequest) Size() (n int) {
|
|||||||
if m.GasCap != 0 {
|
if m.GasCap != 0 {
|
||||||
n += 1 + sovQuery(uint64(m.GasCap))
|
n += 1 + sovQuery(uint64(m.GasCap))
|
||||||
}
|
}
|
||||||
|
l = len(m.ProposerAddress)
|
||||||
|
if l > 0 {
|
||||||
|
n += 1 + l + sovQuery(uint64(l))
|
||||||
|
}
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3033,6 +3088,10 @@ func (m *QueryTraceTxRequest) Size() (n int) {
|
|||||||
}
|
}
|
||||||
l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime)
|
l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime)
|
||||||
n += 1 + l + sovQuery(uint64(l))
|
n += 1 + l + sovQuery(uint64(l))
|
||||||
|
l = len(m.ProposerAddress)
|
||||||
|
if l > 0 {
|
||||||
|
n += 1 + l + sovQuery(uint64(l))
|
||||||
|
}
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3074,6 +3133,10 @@ func (m *QueryTraceBlockRequest) Size() (n int) {
|
|||||||
}
|
}
|
||||||
l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime)
|
l = github_com_gogo_protobuf_types.SizeOfStdTime(m.BlockTime)
|
||||||
n += 1 + l + sovQuery(uint64(l))
|
n += 1 + l + sovQuery(uint64(l))
|
||||||
|
l = len(m.ProposerAddress)
|
||||||
|
if l > 0 {
|
||||||
|
n += 1 + l + sovQuery(uint64(l))
|
||||||
|
}
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4716,6 +4779,40 @@ func (m *EthCallRequest) Unmarshal(dAtA []byte) error {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case 3:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field ProposerAddress", wireType)
|
||||||
|
}
|
||||||
|
var byteLen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowQuery
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
byteLen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if byteLen < 0 {
|
||||||
|
return ErrInvalidLengthQuery
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + byteLen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthQuery
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.ProposerAddress = append(m.ProposerAddress[:0], dAtA[iNdEx:postIndex]...)
|
||||||
|
if m.ProposerAddress == nil {
|
||||||
|
m.ProposerAddress = []byte{}
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
default:
|
default:
|
||||||
iNdEx = preIndex
|
iNdEx = preIndex
|
||||||
skippy, err := skipQuery(dAtA[iNdEx:])
|
skippy, err := skipQuery(dAtA[iNdEx:])
|
||||||
@ -5025,6 +5122,40 @@ func (m *QueryTraceTxRequest) Unmarshal(dAtA []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
iNdEx = postIndex
|
iNdEx = postIndex
|
||||||
|
case 8:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field ProposerAddress", wireType)
|
||||||
|
}
|
||||||
|
var byteLen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowQuery
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
byteLen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if byteLen < 0 {
|
||||||
|
return ErrInvalidLengthQuery
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + byteLen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthQuery
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.ProposerAddress = append(m.ProposerAddress[:0], dAtA[iNdEx:postIndex]...)
|
||||||
|
if m.ProposerAddress == nil {
|
||||||
|
m.ProposerAddress = []byte{}
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
default:
|
default:
|
||||||
iNdEx = preIndex
|
iNdEx = preIndex
|
||||||
skippy, err := skipQuery(dAtA[iNdEx:])
|
skippy, err := skipQuery(dAtA[iNdEx:])
|
||||||
@ -5313,6 +5444,40 @@ func (m *QueryTraceBlockRequest) Unmarshal(dAtA []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
iNdEx = postIndex
|
iNdEx = postIndex
|
||||||
|
case 8:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field ProposerAddress", wireType)
|
||||||
|
}
|
||||||
|
var byteLen int
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflowQuery
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
byteLen |= int(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if byteLen < 0 {
|
||||||
|
return ErrInvalidLengthQuery
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + byteLen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLengthQuery
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.ProposerAddress = append(m.ProposerAddress[:0], dAtA[iNdEx:postIndex]...)
|
||||||
|
if m.ProposerAddress == nil {
|
||||||
|
m.ProposerAddress = []byte{}
|
||||||
|
}
|
||||||
|
iNdEx = postIndex
|
||||||
default:
|
default:
|
||||||
iNdEx = preIndex
|
iNdEx = preIndex
|
||||||
skippy, err := skipQuery(dAtA[iNdEx:])
|
skippy, err := skipQuery(dAtA[iNdEx:])
|
||||||
|
Loading…
Reference in New Issue
Block a user