evm: geth 1.10.9 fee market changes to Keeper and AnteHandler (#620)

* evm: geth 1.10.9 fee market changes

* update

* changelog
This commit is contained in:
Federico Kunze Küllmer
2021-10-04 14:58:06 +00:00
committed by GitHub
parent 561d5db985
commit fb9adf979c
25 changed files with 1748 additions and 433 deletions
+26 -10
View File
@@ -224,6 +224,7 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms
msg := args.ToMessage(req.GasCap)
params := k.GetParams(ctx)
feemktParams := k.feeMarketKeeper.GetParams(ctx)
ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
coinbase, err := k.GetCoinbaseAddress(ctx)
@@ -231,8 +232,16 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms
return nil, status.Error(codes.Internal, err.Error())
}
tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
var baseFee *big.Int
// ignore base fee if not enabled by fee market params
if !feemktParams.NoBaseFee {
baseFee = k.feeMarketKeeper.GetBaseFee(ctx)
}
tracer := types.NewTracer(k.tracer, msg, ethCfg, ctx.BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
// pass true means execute in query mode, which don't do actual gas refund.
res, err := k.ApplyMessage(evm, msg, ethCfg, true)
@@ -299,8 +308,10 @@ func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*type
return nil, status.Error(codes.Internal, err.Error())
}
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
// Create a helper to check if a gas allowance results in an executable transaction
executable := func(gas uint64) (bool, *types.MsgEthereumTxResponse, error) {
executable := func(gas uint64) (vmerror bool, rsp *types.MsgEthereumTxResponse, err error) {
args.Gas = (*hexutil.Uint64)(&gas)
// Reset to the initial context
@@ -309,9 +320,11 @@ func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*type
msg := args.ToMessage(req.GasCap)
tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
// pass true means execute in query mode, which don't do actual gas refund.
rsp, err := k.ApplyMessage(evm, msg, ethCfg, true)
rsp, err = k.ApplyMessage(evm, msg, ethCfg, true)
k.ctxStack.RevertAll()
@@ -370,8 +383,9 @@ func (k Keeper) TraceTx(c context.Context, req *types.QueryTraceTxRequest) (*typ
ethCfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight()))
tx := req.Msg.AsTransaction()
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
result, err := k.traceTx(ctx, coinbase, signer, req.TxIndex, params, ethCfg, tx, req.TraceConfig)
result, err := k.traceTx(ctx, coinbase, signer, req.TxIndex, params, ethCfg, tx, baseFee, req.TraceConfig)
if err != nil {
return nil, err
}
@@ -394,6 +408,7 @@ func (k *Keeper) traceTx(
params types.Params,
ethCfg *ethparams.ChainConfig,
tx *ethtypes.Transaction,
baseFee *big.Int,
traceConfig *types.TraceConfig,
) (*interface{}, error) {
// Assemble the structured logger or the JavaScript tracer
@@ -407,6 +422,8 @@ func (k *Keeper) traceTx(
return nil, status.Error(codes.Internal, err.Error())
}
txHash := tx.Hash()
switch {
case traceConfig != nil && traceConfig.Tracer != "":
timeout := defaultTraceTimeout
@@ -422,8 +439,7 @@ func (k *Keeper) traceTx(
txContext := core.NewEVMTxContext(msg)
// Construct the JavaScript tracer to execute with
tracer, err = tracers.New(traceConfig.Tracer, txContext)
if err != nil {
if tracer, err = tracers.New(traceConfig.Tracer, txContext); err != nil {
return nil, status.Error(codes.Internal, err.Error())
}
@@ -450,9 +466,9 @@ func (k *Keeper) traceTx(
tracer = types.NewTracer(types.TracerStruct, msg, ethCfg, ctx.BlockHeight(), true)
}
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
k.SetTxHashTransient(tx.Hash())
k.SetTxHashTransient(txHash)
k.SetTxIndexTransient(txIndex)
res, err := k.ApplyMessage(evm, msg, ethCfg, true)
+14 -10
View File
@@ -39,6 +39,8 @@ type Keeper struct {
bankKeeper types.BankKeeper
// access historical headers for EVM state transition execution
stakingKeeper types.StakingKeeper
// fetch EIP1559 base fee and parameters
feeMarketKeeper types.FeeMarketKeeper
// Manage the initial context and cache context stack for accessing the store,
// emit events and log info.
@@ -67,6 +69,7 @@ func NewKeeper(
cdc codec.BinaryCodec,
storeKey, transientKey sdk.StoreKey, paramSpace paramtypes.Subspace,
ak types.AccountKeeper, bankKeeper types.BankKeeper, sk types.StakingKeeper,
fmk types.FeeMarketKeeper,
tracer string, debug bool,
) *Keeper {
// ensure evm module account is set
@@ -81,16 +84,17 @@ func NewKeeper(
// NOTE: we pass in the parameter space to the CommitStateDB in order to use custom denominations for the EVM operations
return &Keeper{
cdc: cdc,
paramSpace: paramSpace,
accountKeeper: ak,
bankKeeper: bankKeeper,
stakingKeeper: sk,
storeKey: storeKey,
transientKey: transientKey,
tracer: tracer,
debug: debug,
stateErr: nil,
cdc: cdc,
paramSpace: paramSpace,
accountKeeper: ak,
bankKeeper: bankKeeper,
stakingKeeper: sk,
feeMarketKeeper: fmk,
storeKey: storeKey,
transientKey: transientKey,
tracer: tracer,
debug: debug,
stateErr: nil,
}
}
+20 -3
View File
@@ -30,6 +30,7 @@ func (k *Keeper) NewEVM(
config *params.ChainConfig,
params types.Params,
coinbase common.Address,
baseFee *big.Int,
tracer vm.Tracer,
) *vm.EVM {
blockCtx := vm.BlockContext{
@@ -41,6 +42,7 @@ func (k *Keeper) NewEVM(
BlockNumber: big.NewInt(k.Ctx().BlockHeight()),
Time: big.NewInt(k.Ctx().BlockHeader().Time.Unix()),
Difficulty: big.NewInt(0), // unused. Only required in PoW context
// BaseFee: baseFee,
}
txCtx := core.NewEVMTxContext(msg)
@@ -52,11 +54,14 @@ func (k *Keeper) NewEVM(
// VMConfig creates an EVM configuration from the debug setting and the extra EIPs enabled on the
// module parameters. The config generated uses the default JumpTable from the EVM.
func (k Keeper) VMConfig(msg core.Message, params types.Params, tracer vm.Tracer) vm.Config {
// fmParams := k.feeMarketKeeper.GetParams(k.Ctx())
return vm.Config{
Debug: k.debug,
Tracer: tracer,
NoRecursion: false, // TODO: consider disabling recursion though params
ExtraEips: params.EIPs(),
// NoBaseFee: fmParams.NoBaseFee,
ExtraEips: params.EIPs(),
}
}
@@ -154,6 +159,8 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
// get the latest signer according to the chain rules from the config
signer := ethtypes.MakeSigner(ethCfg, big.NewInt(ctx.BlockHeight()))
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
msg, err := tx.AsMessage(signer)
if err != nil {
return nil, stacktrace.Propagate(err, "failed to return ethereum transaction as core message")
@@ -167,7 +174,7 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
// create an ethereum EVM instance and run the message
tracer := types.NewTracer(k.tracer, msg, ethCfg, ctx.BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, tracer)
txHash := tx.Hash()
@@ -263,6 +270,7 @@ func (k *Keeper) ApplyMessage(evm *vm.EVM, msg core.Message, cfg *params.ChainCo
sender := vm.AccountRef(msg.From())
contractCreation := msg.To() == nil
// isLondon := cfg.IsLondon(evm.Context.BlockNumber)
intrinsicGas, err := k.GetEthIntrinsicGas(msg, cfg, contractCreation)
if err != nil {
@@ -290,6 +298,13 @@ func (k *Keeper) ApplyMessage(evm *vm.EVM, msg core.Message, cfg *params.ChainCo
refundQuotient := uint64(2)
// refundQuotient := params.RefundQuotient
// // After EIP-3529: refunds are capped to gasUsed / 5
// if isLondon {
// refundQuotient = params.RefundQuotientEIP3529
// }
if query {
// gRPC query handlers don't go through the AnteHandler to deduct the gas fee from the sender or have access historical state.
// We don't refund gas to the sender.
@@ -340,7 +355,9 @@ func (k *Keeper) ApplyNativeMessage(msg core.Message) (*types.MsgEthereumTxRespo
return nil, stacktrace.Propagate(err, "failed to obtain coinbase address")
}
evm := k.NewEVM(msg, ethCfg, params, coinbase, nil)
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
evm := k.NewEVM(msg, ethCfg, params, coinbase, baseFee, nil)
ret, err := k.ApplyMessage(evm, msg, ethCfg, true)
if err != nil {
@@ -91,7 +91,7 @@ func newNativeMessage(
return nil, err
}
m, err := msg.AsMessage(msgSigner)
m, err := msg.AsMessage(msgSigner) // TODO: add DynamicFeeTx
if err != nil {
return nil, err
}
+17 -4
View File
@@ -1,6 +1,8 @@
package keeper
import (
"math/big"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
@@ -8,6 +10,7 @@ import (
evmtypes "github.com/tharsis/ethermint/x/evm/types"
cmath "github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/core"
ethtypes "github.com/ethereum/go-ethereum/core/types"
)
@@ -18,8 +21,7 @@ func (k Keeper) DeductTxCostsFromUserBalance(
msgEthTx evmtypes.MsgEthereumTx,
txData evmtypes.TxData,
denom string,
homestead bool,
istanbul bool,
homestead, istanbul, london bool,
) (sdk.Coins, error) {
isContractCreation := txData.GetTo() == nil
@@ -53,8 +55,19 @@ func (k Keeper) DeductTxCostsFromUserBalance(
)
}
// calculate the fees paid to validators based on gas limit and price
feeAmt := txData.Fee() // fee = gas limit * gas price
// calculate the fees paid to validators based on the effective tip and price
effectiveTip := txData.GetGasPrice()
feeMktParams := k.feeMarketKeeper.GetParams(ctx)
if london && !feeMktParams.NoBaseFee {
// TODO: add to if statement above txData.TxType() == ethtypes.DynamicFeeTxType
baseFee := k.feeMarketKeeper.GetBaseFee(ctx)
effectiveTip = cmath.BigMin(txData.GetGasTipCap(), new(big.Int).Sub(txData.GetGasFeeCap(), baseFee))
}
gasUsed := new(big.Int).SetUint64(txData.GetGas())
feeAmt := new(big.Int).Mul(gasUsed, effectiveTip)
fees := sdk.Coins{sdk.NewCoin(denom, sdk.NewIntFromBigInt(feeAmt))}
+1
View File
@@ -242,6 +242,7 @@ func (suite *KeeperTestSuite) TestDeductTxCostsFromUserBalance() {
evmtypes.DefaultEVMDenom,
false,
false,
false, // london
)
if tc.expectPass {
+93 -93
View File
@@ -39,8 +39,9 @@ type Params struct {
ChainConfig ChainConfig `protobuf:"bytes,5,opt,name=chain_config,json=chainConfig,proto3" json:"chain_config" yaml:"chain_config"`
}
func (m *Params) Reset() { *m = Params{} }
func (*Params) ProtoMessage() {}
func (m *Params) Reset() { *m = Params{} }
func (m *Params) String() string { return proto.CompactTextString(m) }
func (*Params) ProtoMessage() {}
func (*Params) Descriptor() ([]byte, []int) {
return fileDescriptor_d21ecc92c8c8583e, []int{0}
}
@@ -653,97 +654,96 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/evm.proto", fileDescriptor_d21ecc92c8c8583e) }
var fileDescriptor_d21ecc92c8c8583e = []byte{
// 1427 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcb, 0x6e, 0x1b, 0xb7,
0x1a, 0xb6, 0x2d, 0xd9, 0x1e, 0x51, 0x57, 0xd3, 0x8e, 0x8f, 0x92, 0xe0, 0x78, 0x7c, 0x66, 0x71,
0xe0, 0x02, 0x89, 0x15, 0x3b, 0x30, 0x6a, 0x24, 0xe8, 0xc2, 0x63, 0x3b, 0xa9, 0xd3, 0xb4, 0x35,
0x68, 0x17, 0x05, 0x0a, 0x14, 0x03, 0x6a, 0x86, 0x19, 0x4d, 0x3d, 0x33, 0x14, 0x48, 0x8e, 0x2a,
0x15, 0x7d, 0x80, 0x02, 0xdd, 0x74, 0xd9, 0x45, 0x17, 0x7d, 0x89, 0xbe, 0x43, 0xd0, 0x55, 0x96,
0x45, 0x0b, 0x0c, 0x0a, 0x65, 0xa7, 0xa5, 0x9e, 0xa0, 0x18, 0x92, 0xba, 0x3a, 0x68, 0x6b, 0xaf,
0xc4, 0xef, 0xbf, 0x7c, 0x1f, 0xf9, 0xf3, 0x1f, 0x92, 0x02, 0xf7, 0x88, 0x68, 0x11, 0x16, 0x05,
0xb1, 0x68, 0x90, 0x4e, 0xd4, 0xe8, 0xec, 0x65, 0x3f, 0xbb, 0x6d, 0x46, 0x05, 0x85, 0xb5, 0xb1,
0x6f, 0x37, 0x33, 0x76, 0xf6, 0xee, 0x6d, 0xf8, 0xd4, 0xa7, 0xd2, 0xd9, 0xc8, 0x46, 0x2a, 0xce,
0xfa, 0x63, 0x09, 0xac, 0x9c, 0x63, 0x86, 0x23, 0x0e, 0xf7, 0x40, 0x81, 0x74, 0x22, 0xc7, 0x23,
0x31, 0x8d, 0xea, 0x8b, 0xdb, 0x8b, 0x3b, 0x05, 0x7b, 0x63, 0x98, 0x9a, 0xb5, 0x1e, 0x8e, 0xc2,
0x27, 0xd6, 0xd8, 0x65, 0x21, 0x83, 0x74, 0xa2, 0x93, 0x6c, 0x08, 0x3f, 0x00, 0x65, 0x12, 0xe3,
0x66, 0x48, 0x1c, 0x97, 0x11, 0x2c, 0x48, 0x7d, 0x69, 0x7b, 0x71, 0xc7, 0xb0, 0xeb, 0xc3, 0xd4,
0xdc, 0xd0, 0x69, 0xd3, 0x6e, 0x0b, 0x95, 0x14, 0x3e, 0x96, 0x10, 0xbe, 0x0f, 0x8a, 0x23, 0x3f,
0x0e, 0xc3, 0x7a, 0x4e, 0x26, 0x6f, 0x0e, 0x53, 0x13, 0xce, 0x26, 0xe3, 0x30, 0xb4, 0x10, 0xd0,
0xa9, 0x38, 0x0c, 0xe1, 0x11, 0x00, 0xa4, 0x2b, 0x18, 0x76, 0x48, 0xd0, 0xe6, 0xf5, 0xfc, 0x76,
0x6e, 0x27, 0x67, 0x5b, 0xfd, 0xd4, 0x2c, 0x9c, 0x66, 0xd6, 0xd3, 0xb3, 0x73, 0x3e, 0x4c, 0xcd,
0x35, 0x4d, 0x32, 0x0e, 0xb4, 0x50, 0x41, 0x82, 0xd3, 0xa0, 0xcd, 0xe1, 0x97, 0xa0, 0xe4, 0xb6,
0x70, 0x10, 0x3b, 0x2e, 0x8d, 0x5f, 0x05, 0x7e, 0x7d, 0x79, 0x7b, 0x71, 0xa7, 0xb8, 0xff, 0xdf,
0xdd, 0xf9, 0xba, 0xed, 0x1e, 0x67, 0x51, 0xc7, 0x32, 0xc8, 0xbe, 0xff, 0x3a, 0x35, 0x17, 0x86,
0xa9, 0xb9, 0xae, 0xa8, 0xa7, 0x09, 0x2c, 0x54, 0x74, 0x27, 0x91, 0x4f, 0xf2, 0x3f, 0xfe, 0x6c,
0x2e, 0x58, 0x3f, 0x95, 0x41, 0x71, 0x2a, 0x1f, 0x46, 0xa0, 0xda, 0xa2, 0x11, 0xe1, 0x82, 0x60,
0xcf, 0x69, 0x86, 0xd4, 0xbd, 0xd2, 0x85, 0x3e, 0xf9, 0x3d, 0x35, 0xff, 0xef, 0x07, 0xa2, 0x95,
0x34, 0x77, 0x5d, 0x1a, 0x35, 0x5c, 0xca, 0x23, 0xca, 0xf5, 0xcf, 0x43, 0xee, 0x5d, 0x35, 0x44,
0xaf, 0x4d, 0xf8, 0xee, 0x59, 0x2c, 0x86, 0xa9, 0xb9, 0xa9, 0xe4, 0xe7, 0xa8, 0x2c, 0x54, 0x19,
0x5b, 0xec, 0xcc, 0x00, 0x7b, 0xa0, 0xe2, 0x61, 0xea, 0xbc, 0xa2, 0xec, 0x4a, 0xab, 0x2d, 0x49,
0xb5, 0x8b, 0x7f, 0xaf, 0xd6, 0x4f, 0xcd, 0xd2, 0xc9, 0xd1, 0xa7, 0xcf, 0x28, 0xbb, 0x92, 0x9c,
0xc3, 0xd4, 0xbc, 0xa3, 0xd4, 0x67, 0x99, 0x2d, 0x54, 0xf2, 0x30, 0x1d, 0x87, 0xc1, 0xcf, 0x41,
0x6d, 0x1c, 0xc0, 0x93, 0x76, 0x9b, 0x32, 0xa1, 0xf7, 0xf7, 0x61, 0x3f, 0x35, 0x2b, 0x9a, 0xf2,
0x42, 0x79, 0x86, 0xa9, 0xf9, 0x9f, 0x39, 0x52, 0x9d, 0x63, 0xa1, 0x8a, 0xa6, 0xd5, 0xa1, 0x90,
0x83, 0x12, 0x09, 0xda, 0x7b, 0x07, 0x8f, 0xf4, 0x8a, 0xf2, 0x72, 0x45, 0xe7, 0x37, 0x5a, 0x51,
0xf1, 0xf4, 0xec, 0x7c, 0xef, 0xe0, 0xd1, 0x68, 0x41, 0x7a, 0x37, 0xa7, 0x69, 0x2d, 0x54, 0x54,
0x50, 0xad, 0xe6, 0x0c, 0x68, 0xe8, 0xb4, 0x30, 0x6f, 0xc9, 0x5e, 0x29, 0xd8, 0x3b, 0xfd, 0xd4,
0x04, 0x8a, 0xe9, 0x43, 0xcc, 0x5b, 0x93, 0x7d, 0x69, 0xf6, 0xbe, 0xc1, 0xb1, 0x08, 0x92, 0x68,
0xc4, 0x05, 0x54, 0x72, 0x16, 0x35, 0x9e, 0xff, 0x81, 0x9e, 0xff, 0xca, 0xad, 0xe7, 0x7f, 0xf0,
0xae, 0xf9, 0x1f, 0xcc, 0xce, 0x5f, 0xc5, 0x8c, 0x45, 0x0f, 0xb5, 0xe8, 0xea, 0xad, 0x45, 0x0f,
0xdf, 0x25, 0x7a, 0x38, 0x2b, 0xaa, 0x62, 0xb2, 0x66, 0x9f, 0xab, 0x44, 0xdd, 0xb8, 0x7d, 0xb3,
0x5f, 0x2b, 0x6a, 0x65, 0x6c, 0x51, 0x72, 0xdf, 0x82, 0x0d, 0x97, 0xc6, 0x5c, 0x64, 0xb6, 0x98,
0xb6, 0x43, 0xa2, 0x35, 0x0b, 0x52, 0xf3, 0xec, 0x46, 0x9a, 0xf7, 0xf5, 0xf7, 0xfd, 0x0e, 0x3e,
0x0b, 0xad, 0xcf, 0x9a, 0x95, 0x7a, 0x1b, 0xd4, 0xda, 0x44, 0x10, 0xc6, 0x9b, 0x09, 0xf3, 0xb5,
0x32, 0x90, 0xca, 0xa7, 0x37, 0x52, 0xd6, 0xdf, 0xc1, 0x3c, 0x97, 0x85, 0xaa, 0x13, 0x93, 0x52,
0xfc, 0x0a, 0x54, 0x82, 0x6c, 0x1a, 0xcd, 0x24, 0xd4, 0x7a, 0x45, 0xa9, 0x77, 0x7c, 0x23, 0x3d,
0xfd, 0x31, 0xcf, 0x32, 0x59, 0xa8, 0x3c, 0x32, 0x28, 0xad, 0x04, 0xc0, 0x28, 0x09, 0x98, 0xe3,
0x87, 0xd8, 0x0d, 0x08, 0xd3, 0x7a, 0x25, 0xa9, 0xf7, 0xfc, 0x46, 0x7a, 0x77, 0x95, 0xde, 0x75,
0x36, 0x0b, 0xd5, 0x32, 0xe3, 0x73, 0x65, 0x53, 0xb2, 0x1e, 0x28, 0x35, 0x09, 0x0b, 0x83, 0x58,
0x0b, 0x96, 0xa5, 0xe0, 0xd1, 0x8d, 0x04, 0x75, 0x9f, 0x4e, 0xf3, 0x58, 0xa8, 0xa8, 0xe0, 0xb8,
0x90, 0x2e, 0x16, 0x38, 0xec, 0x71, 0xa1, 0x75, 0x6a, 0xb7, 0x2f, 0xe4, 0x2c, 0x93, 0x85, 0xca,
0x23, 0xc3, 0x78, 0x45, 0x21, 0x8d, 0x3d, 0x3a, 0x5a, 0xd1, 0xda, 0xed, 0x57, 0x34, 0xcd, 0x63,
0xa1, 0xa2, 0x82, 0x52, 0xe5, 0x45, 0xde, 0xa8, 0xd4, 0xaa, 0x2f, 0xf2, 0x46, 0xb5, 0x56, 0x43,
0xe5, 0x1e, 0x0d, 0xa9, 0xd3, 0x79, 0xac, 0x02, 0x51, 0x91, 0x7c, 0x8d, 0xf9, 0xe8, 0x1b, 0x6a,
0x80, 0xe5, 0x0b, 0x91, 0x5d, 0xc4, 0x35, 0x90, 0xbb, 0x22, 0x3d, 0x75, 0x17, 0xa1, 0x6c, 0x08,
0x37, 0xc0, 0x72, 0x07, 0x87, 0x89, 0xba, 0xd1, 0x0b, 0x48, 0x01, 0xeb, 0x1c, 0x54, 0x2f, 0x19,
0x8e, 0x39, 0x76, 0x45, 0x40, 0xe3, 0x97, 0xd4, 0xe7, 0x10, 0x82, 0xbc, 0x3c, 0x13, 0x55, 0xae,
0x1c, 0xc3, 0xf7, 0x40, 0x3e, 0xa4, 0x3e, 0xaf, 0x2f, 0x6d, 0xe7, 0x76, 0x8a, 0xfb, 0x77, 0xae,
0xdf, 0xa9, 0x2f, 0xa9, 0x8f, 0x64, 0x88, 0xf5, 0xeb, 0x12, 0xc8, 0xbd, 0xa4, 0x3e, 0xac, 0x83,
0x55, 0xec, 0x79, 0x8c, 0x70, 0xae, 0x99, 0x46, 0x10, 0x6e, 0x82, 0x15, 0x41, 0xdb, 0x81, 0xab,
0xe8, 0x0a, 0x48, 0xa3, 0x4c, 0xd8, 0xc3, 0x02, 0xcb, 0x5b, 0xa5, 0x84, 0xe4, 0x18, 0xee, 0x83,
0x92, 0x5c, 0x99, 0x13, 0x27, 0x51, 0x93, 0x30, 0x79, 0x39, 0xe4, 0xed, 0xea, 0x20, 0x35, 0x8b,
0xd2, 0xfe, 0x89, 0x34, 0xa3, 0x69, 0x00, 0x1f, 0x80, 0x55, 0xd1, 0x9d, 0x3e, 0xd7, 0xd7, 0x07,
0xa9, 0x59, 0x15, 0x93, 0x65, 0x66, 0xc7, 0x36, 0x5a, 0x11, 0x5d, 0x79, 0x7c, 0x37, 0x80, 0x21,
0xba, 0x4e, 0x10, 0x7b, 0xa4, 0x2b, 0x8f, 0xee, 0xbc, 0xbd, 0x31, 0x48, 0xcd, 0xda, 0x54, 0xf8,
0x59, 0xe6, 0x43, 0xab, 0xa2, 0x2b, 0x07, 0xf0, 0x01, 0x00, 0x6a, 0x4a, 0x52, 0x41, 0x1d, 0xbc,
0xe5, 0x41, 0x6a, 0x16, 0xa4, 0x55, 0x72, 0x4f, 0x86, 0xd0, 0x02, 0xcb, 0x8a, 0xdb, 0x90, 0xdc,
0xa5, 0x41, 0x6a, 0x1a, 0x21, 0xf5, 0x15, 0xa7, 0x72, 0x65, 0xa5, 0x62, 0x24, 0xa2, 0x1d, 0xe2,
0xc9, 0xb3, 0xcd, 0x40, 0x23, 0x68, 0x7d, 0xbf, 0x04, 0x8c, 0xcb, 0x2e, 0x22, 0x3c, 0x09, 0x05,
0x7c, 0x06, 0x6a, 0x2e, 0x8d, 0x05, 0xc3, 0xae, 0x70, 0x66, 0x4a, 0x6b, 0xdf, 0x9f, 0x9c, 0x33,
0xf3, 0x11, 0x16, 0xaa, 0x8e, 0x4c, 0x47, 0xba, 0xfe, 0x1b, 0x60, 0xb9, 0x19, 0x52, 0x1a, 0xc9,
0x4e, 0x28, 0x21, 0x05, 0x20, 0x92, 0x55, 0x93, 0xbb, 0x9c, 0x93, 0x2f, 0xa7, 0xff, 0x5d, 0xdf,
0xe5, 0xb9, 0x56, 0xb1, 0x37, 0xf5, 0xeb, 0xa9, 0xa2, 0xb4, 0x75, 0xbe, 0x95, 0xd5, 0x56, 0xb6,
0x52, 0x0d, 0xe4, 0x18, 0x11, 0x72, 0xd3, 0x4a, 0x28, 0x1b, 0xc2, 0x7b, 0xc0, 0x60, 0xa4, 0x43,
0x98, 0x20, 0x9e, 0xdc, 0x1c, 0x03, 0x8d, 0x31, 0xbc, 0x0b, 0x0c, 0x1f, 0x73, 0x27, 0xe1, 0xc4,
0x53, 0x3b, 0x81, 0x56, 0x7d, 0xcc, 0x3f, 0xe3, 0xc4, 0x7b, 0x92, 0xff, 0x2e, 0x7b, 0x7c, 0x61,
0x50, 0x3c, 0x72, 0x5d, 0xc2, 0xf9, 0x65, 0xd2, 0x0e, 0xc9, 0xdf, 0x74, 0xd8, 0x3e, 0x28, 0x71,
0x41, 0x19, 0xf6, 0x89, 0x73, 0x45, 0x7a, 0xba, 0xcf, 0x54, 0xd7, 0x68, 0xfb, 0x47, 0xa4, 0xc7,
0xd1, 0x34, 0xd0, 0x12, 0xbf, 0xe4, 0x40, 0xf1, 0x92, 0x61, 0x97, 0xe8, 0xf7, 0x5d, 0xd6, 0xab,
0x19, 0x64, 0x5a, 0x42, 0xa3, 0x4c, 0x5b, 0x04, 0x11, 0xa1, 0x89, 0xd0, 0xdf, 0xd3, 0x08, 0x66,
0x19, 0x8c, 0x90, 0x2e, 0x71, 0x65, 0x19, 0xf3, 0x48, 0x23, 0x78, 0x08, 0x2a, 0x5e, 0xc0, 0xe5,
0xf3, 0x37, 0x22, 0x11, 0x65, 0x3d, 0x59, 0x16, 0xc3, 0x5e, 0x1b, 0xa4, 0x66, 0x59, 0x7b, 0x3e,
0x96, 0x0e, 0x34, 0x0b, 0xe1, 0x01, 0x18, 0x19, 0x1c, 0x2e, 0xb0, 0x7b, 0xa5, 0x0a, 0x67, 0xd7,
0x06, 0xa9, 0x59, 0xd2, 0x8e, 0x8b, 0xcc, 0x8e, 0x66, 0x10, 0x7c, 0x0a, 0xaa, 0x93, 0x34, 0xb9,
0x4e, 0x59, 0x55, 0xc3, 0x86, 0x83, 0xd4, 0xac, 0x8c, 0x43, 0xa5, 0x07, 0xcd, 0x61, 0x78, 0x0a,
0xd6, 0x47, 0xc9, 0x8c, 0x88, 0x84, 0xc5, 0x8e, 0xfc, 0x34, 0x57, 0x25, 0xc1, 0x9d, 0x41, 0x6a,
0xae, 0x69, 0x37, 0x92, 0xde, 0x13, 0x2c, 0x30, 0xba, 0x6e, 0xca, 0x5a, 0xcd, 0x23, 0xcd, 0xc4,
0x97, 0xdd, 0x6f, 0x20, 0x05, 0x32, 0x6b, 0x18, 0x44, 0x81, 0x90, 0xdd, 0xbe, 0x8c, 0x14, 0x80,
0x4f, 0x41, 0x81, 0x76, 0x08, 0x63, 0x81, 0x47, 0xb8, 0xbc, 0x69, 0xff, 0xe9, 0xf1, 0x8e, 0x26,
0xf1, 0xb6, 0xfd, 0xba, 0xbf, 0xb5, 0xf8, 0xa6, 0xbf, 0xb5, 0xf8, 0x67, 0x7f, 0x6b, 0xf1, 0x87,
0xb7, 0x5b, 0x0b, 0x6f, 0xde, 0x6e, 0x2d, 0xfc, 0xf6, 0x76, 0x6b, 0xe1, 0x8b, 0x9d, 0xa9, 0x63,
0x58, 0xb4, 0x30, 0xe3, 0x01, 0x6f, 0x4c, 0xfe, 0x66, 0x75, 0xe5, 0x1f, 0x2d, 0x79, 0x18, 0x37,
0x57, 0xe4, 0x1f, 0xa8, 0xc7, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xd8, 0x40, 0x2b, 0x86,
0x0d, 0x00, 0x00,
// 1421 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4d, 0x6f, 0xdb, 0xb6,
0x1b, 0x4f, 0x62, 0x27, 0x91, 0xe9, 0xd7, 0x30, 0x69, 0xfe, 0x6e, 0x8b, 0x7f, 0x94, 0xe9, 0x30,
0x64, 0x40, 0x1b, 0x37, 0x29, 0x82, 0x05, 0x2d, 0x76, 0x88, 0x92, 0xb4, 0x4b, 0xd7, 0x6d, 0x01,
0x93, 0x61, 0xc0, 0x80, 0x41, 0xa0, 0x25, 0x56, 0xd6, 0x22, 0x89, 0x06, 0x49, 0x79, 0xf6, 0xb0,
0x0f, 0x30, 0x60, 0x97, 0x7d, 0x80, 0x1d, 0xf6, 0x25, 0xf6, 0x1d, 0x8a, 0x9d, 0x7a, 0x19, 0x30,
0xec, 0x20, 0x0c, 0xee, 0xcd, 0x47, 0x7f, 0x82, 0x41, 0x24, 0xfd, 0x9a, 0x62, 0x5b, 0x72, 0x32,
0x7f, 0xcf, 0xcb, 0xef, 0x47, 0x3e, 0x7c, 0x48, 0xca, 0xe0, 0x1e, 0x11, 0x2d, 0xc2, 0xa2, 0x20,
0x16, 0x0d, 0xd2, 0x89, 0x1a, 0x9d, 0xbd, 0xec, 0x67, 0xb7, 0xcd, 0xa8, 0xa0, 0xb0, 0x36, 0xf6,
0xed, 0x66, 0xc6, 0xce, 0xde, 0xbd, 0x0d, 0x9f, 0xfa, 0x54, 0x3a, 0x1b, 0xd9, 0x48, 0xc5, 0x59,
0xbf, 0x2f, 0x81, 0x95, 0x73, 0xcc, 0x70, 0xc4, 0xe1, 0x1e, 0x28, 0x90, 0x4e, 0xe4, 0x78, 0x24,
0xa6, 0x51, 0x7d, 0x71, 0x7b, 0x71, 0xa7, 0x60, 0x6f, 0x0c, 0x53, 0xb3, 0xd6, 0xc3, 0x51, 0xf8,
0xc4, 0x1a, 0xbb, 0x2c, 0x64, 0x90, 0x4e, 0x74, 0x92, 0x0d, 0xe1, 0x47, 0xa0, 0x4c, 0x62, 0xdc,
0x0c, 0x89, 0xe3, 0x32, 0x82, 0x05, 0xa9, 0x2f, 0x6d, 0x2f, 0xee, 0x18, 0x76, 0x7d, 0x98, 0x9a,
0x1b, 0x3a, 0x6d, 0xda, 0x6d, 0xa1, 0x92, 0xc2, 0xc7, 0x12, 0xc2, 0x0f, 0x41, 0x71, 0xe4, 0xc7,
0x61, 0x58, 0xcf, 0xc9, 0xe4, 0xcd, 0x61, 0x6a, 0xc2, 0xd9, 0x64, 0x1c, 0x86, 0x16, 0x02, 0x3a,
0x15, 0x87, 0x21, 0x3c, 0x02, 0x80, 0x74, 0x05, 0xc3, 0x0e, 0x09, 0xda, 0xbc, 0x9e, 0xdf, 0xce,
0xed, 0xe4, 0x6c, 0xab, 0x9f, 0x9a, 0x85, 0xd3, 0xcc, 0x7a, 0x7a, 0x76, 0xce, 0x87, 0xa9, 0xb9,
0xa6, 0x49, 0xc6, 0x81, 0x16, 0x2a, 0x48, 0x70, 0x1a, 0xb4, 0x39, 0xfc, 0x1a, 0x94, 0xdc, 0x16,
0x0e, 0x62, 0xc7, 0xa5, 0xf1, 0xab, 0xc0, 0xaf, 0x2f, 0x6f, 0x2f, 0xee, 0x14, 0xf7, 0xff, 0xbf,
0x3b, 0x5f, 0xb7, 0xdd, 0xe3, 0x2c, 0xea, 0x58, 0x06, 0xd9, 0xf7, 0x5f, 0xa7, 0xe6, 0xc2, 0x30,
0x35, 0xd7, 0x15, 0xf5, 0x34, 0x81, 0x85, 0x8a, 0xee, 0x24, 0xd2, 0xfa, 0xb9, 0x0c, 0x8a, 0x53,
0x99, 0x30, 0x02, 0xd5, 0x16, 0x8d, 0x08, 0x17, 0x04, 0x7b, 0x4e, 0x33, 0xa4, 0xee, 0x95, 0x2e,
0xf1, 0xc9, 0x9f, 0xa9, 0xf9, 0xbe, 0x1f, 0x88, 0x56, 0xd2, 0xdc, 0x75, 0x69, 0xd4, 0x70, 0x29,
0x8f, 0x28, 0xd7, 0x3f, 0x0f, 0xb9, 0x77, 0xd5, 0x10, 0xbd, 0x36, 0xe1, 0xbb, 0x67, 0xb1, 0x18,
0xa6, 0xe6, 0xa6, 0x12, 0x9e, 0xa3, 0xb2, 0x50, 0x65, 0x6c, 0xb1, 0x33, 0x03, 0xec, 0x81, 0x8a,
0x87, 0xa9, 0xf3, 0x8a, 0xb2, 0x2b, 0xad, 0xb6, 0x24, 0xd5, 0x2e, 0xfe, 0xbb, 0x5a, 0x3f, 0x35,
0x4b, 0x27, 0x47, 0x9f, 0x3f, 0xa3, 0xec, 0x4a, 0x72, 0x0e, 0x53, 0xf3, 0x8e, 0x52, 0x9f, 0x65,
0xb6, 0x50, 0xc9, 0xc3, 0x74, 0x1c, 0x06, 0xbf, 0x04, 0xb5, 0x71, 0x00, 0x4f, 0xda, 0x6d, 0xca,
0x84, 0xde, 0xd9, 0x87, 0xfd, 0xd4, 0xac, 0x68, 0xca, 0x0b, 0xe5, 0x19, 0xa6, 0xe6, 0xff, 0xe6,
0x48, 0x75, 0x8e, 0x85, 0x2a, 0x9a, 0x56, 0x87, 0x42, 0x0e, 0x4a, 0x24, 0x68, 0xef, 0x1d, 0x3c,
0xd2, 0x2b, 0xca, 0xcb, 0x15, 0x9d, 0xdf, 0x68, 0x45, 0xc5, 0xd3, 0xb3, 0xf3, 0xbd, 0x83, 0x47,
0xa3, 0x05, 0xe9, 0x7d, 0x9c, 0xa6, 0xb5, 0x50, 0x51, 0x41, 0xb5, 0x9a, 0x33, 0xa0, 0xa1, 0xd3,
0xc2, 0xbc, 0x25, 0xbb, 0xa4, 0x60, 0xef, 0xf4, 0x53, 0x13, 0x28, 0xa6, 0x8f, 0x31, 0x6f, 0x4d,
0xf6, 0xa5, 0xd9, 0xfb, 0x0e, 0xc7, 0x22, 0x48, 0xa2, 0x11, 0x17, 0x50, 0xc9, 0x59, 0xd4, 0x78,
0xfe, 0x07, 0x7a, 0xfe, 0x2b, 0xb7, 0x9e, 0xff, 0xc1, 0xbb, 0xe6, 0x7f, 0x30, 0x3b, 0x7f, 0x15,
0x33, 0x16, 0x3d, 0xd4, 0xa2, 0xab, 0xb7, 0x16, 0x3d, 0x7c, 0x97, 0xe8, 0xe1, 0xac, 0xa8, 0x8a,
0xc9, 0x9a, 0x7d, 0xae, 0x12, 0x75, 0xe3, 0xf6, 0xcd, 0x7e, 0xad, 0xa8, 0x95, 0xb1, 0x45, 0xc9,
0x7d, 0x0f, 0x36, 0x5c, 0x1a, 0x73, 0x91, 0xd9, 0x62, 0xda, 0x0e, 0x89, 0xd6, 0x2c, 0x48, 0xcd,
0xb3, 0x1b, 0x69, 0xde, 0xd7, 0x27, 0xfb, 0x1d, 0x7c, 0x16, 0x5a, 0x9f, 0x35, 0x2b, 0xf5, 0x36,
0xa8, 0xb5, 0x89, 0x20, 0x8c, 0x37, 0x13, 0xe6, 0x6b, 0x65, 0x20, 0x95, 0x4f, 0x6f, 0xa4, 0xac,
0xcf, 0xc1, 0x3c, 0x97, 0x85, 0xaa, 0x13, 0x93, 0x52, 0xfc, 0x06, 0x54, 0x82, 0x6c, 0x1a, 0xcd,
0x24, 0xd4, 0x7a, 0x45, 0xa9, 0x77, 0x7c, 0x23, 0x3d, 0x7d, 0x98, 0x67, 0x99, 0x2c, 0x54, 0x1e,
0x19, 0x94, 0x56, 0x02, 0x60, 0x94, 0x04, 0xcc, 0xf1, 0x43, 0xec, 0x06, 0x84, 0x69, 0xbd, 0x92,
0xd4, 0x7b, 0x7e, 0x23, 0xbd, 0xbb, 0x4a, 0xef, 0x3a, 0x9b, 0x85, 0x6a, 0x99, 0xf1, 0xb9, 0xb2,
0x29, 0x59, 0x0f, 0x94, 0x9a, 0x84, 0x85, 0x41, 0xac, 0x05, 0xcb, 0x52, 0xf0, 0xe8, 0x46, 0x82,
0xba, 0x4f, 0xa7, 0x79, 0x2c, 0x54, 0x54, 0x70, 0x5c, 0x48, 0x17, 0x0b, 0x1c, 0xf6, 0xb8, 0xd0,
0x3a, 0xb5, 0xdb, 0x17, 0x72, 0x96, 0xc9, 0x42, 0xe5, 0x91, 0x61, 0xbc, 0xa2, 0x90, 0xc6, 0x1e,
0x1d, 0xad, 0x68, 0xed, 0xf6, 0x2b, 0x9a, 0xe6, 0xb1, 0x50, 0x51, 0x41, 0xa9, 0xf2, 0x22, 0x6f,
0x54, 0x6a, 0xd5, 0x17, 0x79, 0xa3, 0x5a, 0xab, 0xa1, 0x72, 0x8f, 0x86, 0xd4, 0xe9, 0x3c, 0x56,
0x81, 0xa8, 0x48, 0xbe, 0xc5, 0x7c, 0x74, 0x86, 0x1a, 0x60, 0xf9, 0x42, 0x64, 0x4f, 0x70, 0x0d,
0xe4, 0xae, 0x48, 0x4f, 0xbd, 0x45, 0x28, 0x1b, 0xc2, 0x0d, 0xb0, 0xdc, 0xc1, 0x61, 0xa2, 0xde,
0xf2, 0x02, 0x52, 0xc0, 0x3a, 0x07, 0xd5, 0x4b, 0x86, 0x63, 0x8e, 0x5d, 0x11, 0xd0, 0xf8, 0x25,
0xf5, 0x39, 0x84, 0x20, 0x2f, 0xef, 0x44, 0x95, 0x2b, 0xc7, 0xf0, 0x03, 0x90, 0x0f, 0xa9, 0xcf,
0xeb, 0x4b, 0xdb, 0xb9, 0x9d, 0xe2, 0xfe, 0x9d, 0xeb, 0xaf, 0xe9, 0x4b, 0xea, 0x23, 0x19, 0x62,
0xfd, 0xb6, 0x04, 0x72, 0x2f, 0xa9, 0x0f, 0xeb, 0x60, 0x15, 0x7b, 0x1e, 0x23, 0x9c, 0x6b, 0xa6,
0x11, 0x84, 0x9b, 0x60, 0x45, 0xd0, 0x76, 0xe0, 0x2a, 0xba, 0x02, 0xd2, 0x28, 0x13, 0xf6, 0xb0,
0xc0, 0xf2, 0x55, 0x29, 0x21, 0x39, 0x86, 0xfb, 0xa0, 0x24, 0x57, 0xe6, 0xc4, 0x49, 0xd4, 0x24,
0x4c, 0x3e, 0x0e, 0x79, 0xbb, 0x3a, 0x48, 0xcd, 0xa2, 0xb4, 0x7f, 0x26, 0xcd, 0x68, 0x1a, 0xc0,
0x07, 0x60, 0x55, 0x74, 0xa7, 0xef, 0xf5, 0xf5, 0x41, 0x6a, 0x56, 0xc5, 0x64, 0x99, 0xd9, 0xb5,
0x8d, 0x56, 0x44, 0x57, 0x5e, 0xdf, 0x0d, 0x60, 0x88, 0xae, 0x13, 0xc4, 0x1e, 0xe9, 0xca, 0xab,
0x3b, 0x6f, 0x6f, 0x0c, 0x52, 0xb3, 0x36, 0x15, 0x7e, 0x96, 0xf9, 0xd0, 0xaa, 0xe8, 0xca, 0x01,
0x7c, 0x00, 0x80, 0x9a, 0x92, 0x54, 0x50, 0x17, 0x6f, 0x79, 0x90, 0x9a, 0x05, 0x69, 0x95, 0xdc,
0x93, 0x21, 0xb4, 0xc0, 0xb2, 0xe2, 0x36, 0x24, 0x77, 0x69, 0x90, 0x9a, 0x46, 0x48, 0x7d, 0xc5,
0xa9, 0x5c, 0x59, 0xa9, 0x18, 0x89, 0x68, 0x87, 0x78, 0xf2, 0x6e, 0x33, 0xd0, 0x08, 0x5a, 0x3f,
0x2e, 0x01, 0xe3, 0xb2, 0x8b, 0x08, 0x4f, 0x42, 0x01, 0x9f, 0x81, 0x9a, 0x4b, 0x63, 0xc1, 0xb0,
0x2b, 0x9c, 0x99, 0xd2, 0xda, 0xf7, 0x27, 0xf7, 0xcc, 0x7c, 0x84, 0x85, 0xaa, 0x23, 0xd3, 0x91,
0xae, 0xff, 0x06, 0x58, 0x6e, 0x86, 0x94, 0x46, 0xb2, 0x13, 0x4a, 0x48, 0x01, 0x88, 0x64, 0xd5,
0xe4, 0x2e, 0xe7, 0xe4, 0x37, 0xd3, 0x7b, 0xd7, 0x77, 0x79, 0xae, 0x55, 0xec, 0x4d, 0xfd, 0xdd,
0x54, 0x51, 0xda, 0x3a, 0xdf, 0xca, 0x6a, 0x2b, 0x5b, 0xa9, 0x06, 0x72, 0x8c, 0x08, 0xb9, 0x69,
0x25, 0x94, 0x0d, 0xe1, 0x3d, 0x60, 0x30, 0xd2, 0x21, 0x4c, 0x10, 0x4f, 0x6e, 0x8e, 0x81, 0xc6,
0x18, 0xde, 0x05, 0x86, 0x8f, 0xb9, 0x93, 0x70, 0xe2, 0xa9, 0x9d, 0x40, 0xab, 0x3e, 0xe6, 0x5f,
0x70, 0xe2, 0x3d, 0xc9, 0xff, 0xf0, 0x8b, 0xb9, 0x60, 0x61, 0x50, 0x3c, 0x72, 0x5d, 0xc2, 0xf9,
0x65, 0xd2, 0x0e, 0xc9, 0x3f, 0x74, 0xd8, 0x3e, 0x28, 0x71, 0x41, 0x19, 0xf6, 0x89, 0x73, 0x45,
0x7a, 0xba, 0xcf, 0x54, 0xd7, 0x68, 0xfb, 0x27, 0xa4, 0xc7, 0xd1, 0x34, 0xd0, 0x12, 0xbf, 0xe6,
0x40, 0xf1, 0x92, 0x61, 0x97, 0xe8, 0xef, 0xbb, 0xac, 0x57, 0x33, 0xc8, 0xb4, 0x84, 0x46, 0x99,
0xb6, 0x08, 0x22, 0x42, 0x13, 0xa1, 0xcf, 0xd3, 0x08, 0x66, 0x19, 0x8c, 0x90, 0x2e, 0x71, 0x65,
0x19, 0xf3, 0x48, 0x23, 0x78, 0x08, 0x2a, 0x5e, 0xc0, 0xe5, 0x87, 0x6f, 0x44, 0x22, 0xca, 0x7a,
0xb2, 0x2c, 0x86, 0xbd, 0x36, 0x48, 0xcd, 0xb2, 0xf6, 0x7c, 0x2a, 0x1d, 0x68, 0x16, 0xc2, 0x03,
0x30, 0x32, 0x38, 0x5c, 0x60, 0xf7, 0x4a, 0x15, 0xce, 0xae, 0x0d, 0x52, 0xb3, 0xa4, 0x1d, 0x17,
0x99, 0x1d, 0xcd, 0x20, 0xf8, 0x14, 0x54, 0x27, 0x69, 0x72, 0x9d, 0xb2, 0xaa, 0x86, 0x0d, 0x07,
0xa9, 0x59, 0x19, 0x87, 0x4a, 0x0f, 0x9a, 0xc3, 0xf0, 0x14, 0xac, 0x8f, 0x92, 0x19, 0x11, 0x09,
0x8b, 0x1d, 0x79, 0x34, 0x57, 0x25, 0xc1, 0x9d, 0x41, 0x6a, 0xae, 0x69, 0x37, 0x92, 0xde, 0x13,
0x2c, 0x30, 0xba, 0x6e, 0xca, 0x5a, 0xcd, 0x23, 0xcd, 0xc4, 0x97, 0xdd, 0x6f, 0x20, 0x05, 0x32,
0x6b, 0x18, 0x44, 0x81, 0x90, 0xdd, 0xbe, 0x8c, 0x14, 0x80, 0x4f, 0x41, 0x81, 0x76, 0x08, 0x63,
0x81, 0x47, 0xb8, 0x7c, 0x69, 0xff, 0xed, 0xb3, 0x1d, 0x4d, 0xe2, 0x6d, 0xfb, 0x75, 0x7f, 0x6b,
0xf1, 0x4d, 0x7f, 0x6b, 0xf1, 0xaf, 0xfe, 0xd6, 0xe2, 0x4f, 0x6f, 0xb7, 0x16, 0xde, 0xbc, 0xdd,
0x5a, 0xf8, 0xe3, 0xed, 0xd6, 0xc2, 0x57, 0x3b, 0x53, 0xd7, 0xb0, 0x68, 0x61, 0xc6, 0x03, 0xde,
0x98, 0xfc, 0xc1, 0xea, 0xca, 0xbf, 0x58, 0xf2, 0x32, 0x6e, 0xae, 0xc8, 0xbf, 0x4e, 0x8f, 0xff,
0x0e, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x84, 0x30, 0xb7, 0x80, 0x0d, 0x00, 0x00,
}
func (m *Params) Marshal() (dAtA []byte, err error) {
+23 -23
View File
@@ -28,7 +28,7 @@ type GenesisState struct {
// accounts is an array containing the ethereum genesis accounts.
Accounts []GenesisAccount `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts"`
// params defines all the paramaters of the module.
Params Params `protobuf:"bytes,3,opt,name=params,proto3" json:"params"`
Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"`
}
func (m *GenesisState) Reset() { *m = GenesisState{} }
@@ -152,26 +152,26 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/genesis.proto", fileDescriptor_9bcdec50cc9d156d) }
var fileDescriptor_9bcdec50cc9d156d = []byte{
// 299 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x50, 0xbd, 0x4e, 0xeb, 0x30,
0x14, 0x8e, 0x6f, 0xab, 0xf6, 0xe2, 0x22, 0x40, 0x16, 0x12, 0x56, 0x07, 0xb7, 0xea, 0x94, 0xc9,
0x56, 0x8b, 0xc4, 0x8e, 0x17, 0x56, 0x94, 0x6e, 0x6c, 0x6e, 0x62, 0x25, 0x19, 0x12, 0x47, 0xb6,
0x1b, 0xc1, 0xca, 0xc8, 0xc4, 0x73, 0xf0, 0x24, 0x1d, 0x3b, 0x32, 0x01, 0x4a, 0x5e, 0x04, 0xc5,
0x49, 0x8b, 0x20, 0xdb, 0xb1, 0xbf, 0xbf, 0x73, 0x3e, 0x48, 0xa4, 0x4d, 0xa4, 0xce, 0xd2, 0xdc,
0x32, 0x59, 0x66, 0xac, 0x5c, 0xb2, 0x58, 0xe6, 0xd2, 0xa4, 0x86, 0x16, 0x5a, 0x59, 0x85, 0x2e,
0x8e, 0x38, 0x95, 0x65, 0x46, 0xcb, 0xe5, 0xf4, 0x32, 0x56, 0xb1, 0x72, 0x20, 0x6b, 0xa6, 0x96,
0x37, 0x9d, 0xf6, 0x7c, 0x1a, 0xba, 0xc3, 0x16, 0x2f, 0x00, 0x9e, 0xde, 0xb5, 0xae, 0x6b, 0x2b,
0xac, 0x44, 0x1c, 0xfe, 0x17, 0x61, 0xa8, 0xb6, 0xb9, 0x35, 0x18, 0xcc, 0x07, 0xfe, 0x64, 0x35,
0xa7, 0x7f, 0x73, 0x68, 0xa7, 0xb8, 0x6d, 0x89, 0x7c, 0xb8, 0xfb, 0x98, 0x79, 0xc1, 0x51, 0x87,
0x6e, 0xe0, 0xa8, 0x10, 0x5a, 0x64, 0x06, 0x0f, 0xe6, 0xc0, 0x9f, 0xac, 0x70, 0xdf, 0xe1, 0xde,
0xe1, 0x9d, 0xb2, 0x63, 0x2f, 0x9e, 0x01, 0x3c, 0xfb, 0x6d, 0x8d, 0x30, 0x1c, 0x8b, 0x28, 0xd2,
0xd2, 0x34, 0xdb, 0x00, 0xff, 0x24, 0x38, 0x3c, 0x11, 0x82, 0xc3, 0x50, 0x45, 0x12, 0xff, 0x73,
0xdf, 0x6e, 0x46, 0x1c, 0x8e, 0x8d, 0x55, 0x5a, 0xc4, 0x12, 0x0f, 0xdc, 0xee, 0x57, 0xfd, 0x64,
0x77, 0x26, 0x3f, 0x6f, 0x82, 0xdf, 0x3e, 0x67, 0xe3, 0x75, 0xcb, 0x0f, 0x0e, 0x42, 0xce, 0x77,
0x15, 0x01, 0xfb, 0x8a, 0x80, 0xaf, 0x8a, 0x80, 0xd7, 0x9a, 0x78, 0xfb, 0x9a, 0x78, 0xef, 0x35,
0xf1, 0x1e, 0xfc, 0x38, 0xb5, 0xc9, 0x76, 0x43, 0x43, 0x95, 0x31, 0x9b, 0x08, 0x6d, 0x52, 0xc3,
0x7e, 0xaa, 0x7d, 0x74, 0xe5, 0xda, 0xa7, 0x42, 0x9a, 0xcd, 0xc8, 0x95, 0x7b, 0xfd, 0x1d, 0x00,
0x00, 0xff, 0xff, 0x87, 0x96, 0x85, 0x5d, 0xc2, 0x01, 0x00, 0x00,
// 300 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xb1, 0x4e, 0xc3, 0x30,
0x18, 0x84, 0x63, 0x5a, 0xb5, 0xd4, 0x45, 0x80, 0x2c, 0x24, 0xa2, 0x0e, 0x6e, 0xd4, 0x29, 0x93,
0xad, 0x16, 0x89, 0x1d, 0x2f, 0xac, 0x28, 0xdd, 0xd8, 0xdc, 0xc4, 0x4a, 0x32, 0x24, 0x8e, 0x6c,
0x37, 0x82, 0x95, 0x91, 0x89, 0xe7, 0xe0, 0x49, 0x3a, 0x76, 0x64, 0x02, 0x94, 0xbc, 0x08, 0x8a,
0x93, 0x16, 0x41, 0xb6, 0xdf, 0xba, 0xef, 0xee, 0x7e, 0xff, 0x10, 0x0b, 0x93, 0x08, 0x95, 0xa5,
0xb9, 0xa1, 0xa2, 0xcc, 0x68, 0xb9, 0xa4, 0xb1, 0xc8, 0x85, 0x4e, 0x35, 0x29, 0x94, 0x34, 0x12,
0x5d, 0x1e, 0x75, 0x22, 0xca, 0x8c, 0x94, 0xcb, 0xd9, 0x55, 0x2c, 0x63, 0x69, 0x45, 0xda, 0x4c,
0x2d, 0x37, 0x9b, 0xf5, 0x72, 0x1a, 0xdc, 0x6a, 0x8b, 0x57, 0x00, 0xcf, 0xee, 0xdb, 0xd4, 0xb5,
0xe1, 0x46, 0x20, 0x06, 0x4f, 0x79, 0x18, 0xca, 0x6d, 0x6e, 0xb4, 0x0b, 0xbc, 0x81, 0x3f, 0x5d,
0x79, 0xe4, 0x7f, 0x0f, 0xe9, 0x1c, 0x77, 0x2d, 0xc8, 0x86, 0xbb, 0xcf, 0xb9, 0x13, 0x1c, 0x7d,
0xe8, 0x16, 0x8e, 0x0a, 0xae, 0x78, 0xa6, 0xdd, 0x13, 0x0f, 0xf8, 0xd3, 0x95, 0xdb, 0x4f, 0x78,
0xb0, 0x7a, 0xe7, 0xec, 0xe8, 0xc5, 0x0b, 0x80, 0xe7, 0x7f, 0xa3, 0x91, 0x0b, 0xc7, 0x3c, 0x8a,
0x94, 0xd0, 0xcd, 0x36, 0xc0, 0x9f, 0x04, 0x87, 0x27, 0x42, 0x70, 0x18, 0xca, 0x48, 0xd8, 0x8a,
0x49, 0x60, 0x67, 0xc4, 0xe0, 0x58, 0x1b, 0xa9, 0x78, 0x2c, 0xdc, 0x81, 0xdd, 0xfd, 0xba, 0xdf,
0x6c, 0xbf, 0xc9, 0x2e, 0x9a, 0xe2, 0xf7, 0xaf, 0xf9, 0x78, 0xdd, 0xf2, 0xc1, 0xc1, 0xc8, 0xd8,
0xae, 0xc2, 0x60, 0x5f, 0x61, 0xf0, 0x5d, 0x61, 0xf0, 0x56, 0x63, 0x67, 0x5f, 0x63, 0xe7, 0xa3,
0xc6, 0xce, 0xa3, 0x1f, 0xa7, 0x26, 0xd9, 0x6e, 0x48, 0x28, 0x33, 0x6a, 0x12, 0xae, 0x74, 0xaa,
0xe9, 0xef, 0x69, 0x9f, 0xec, 0x71, 0xcd, 0x73, 0x21, 0xf4, 0x66, 0x64, 0x8f, 0x7b, 0xf3, 0x13,
0x00, 0x00, 0xff, 0xff, 0x34, 0xd7, 0x33, 0xa0, 0xc2, 0x01, 0x00, 0x00,
}
func (m *GenesisState) Marshal() (dAtA []byte, err error) {
@@ -203,7 +203,7 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i = encodeVarintGenesis(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x1a
dAtA[i] = 0x12
if len(m.Accounts) > 0 {
for iNdEx := len(m.Accounts) - 1; iNdEx >= 0; iNdEx-- {
{
@@ -392,7 +392,7 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 3:
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType)
}
+11
View File
@@ -1,9 +1,14 @@
package types
import (
"math/big"
sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
feemarkettypes "github.com/tharsis/ethermint/x/feemarket/types"
"github.com/ethereum/go-ethereum/common"
ethtypes "github.com/ethereum/go-ethereum/core/types"
)
@@ -37,6 +42,12 @@ type StakingKeeper interface {
GetValidatorByConsAddr(ctx sdk.Context, consAddr sdk.ConsAddress) (validator stakingtypes.Validator, found bool)
}
// FeeMarketKeeper
type FeeMarketKeeper interface {
GetBaseFee(ctx sdk.Context) *big.Int
GetParams(ctx sdk.Context) feemarkettypes.Params
}
// Event Hooks
// These can be utilized to customize evm transaction processing.
-9
View File
@@ -3,8 +3,6 @@ package types
import (
"fmt"
yaml "gopkg.in/yaml.v2"
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/ethereum/go-ethereum/core/vm"
@@ -24,7 +22,6 @@ var (
ParamStoreKeyEnableCall = []byte("EnableCall")
ParamStoreKeyExtraEIPs = []byte("EnableExtraEIPs")
ParamStoreKeyChainConfig = []byte("ChainConfig")
ParamStoreKeyNoBaseFee = []byte("NoBaseFee")
// AvailableExtraEIPs define the list of all EIPs that can be enabled by the EVM interpreter. These EIPs are applied in
// order and can override the instruction sets from the latest hard fork enabled by the ChainConfig. For more info
@@ -60,12 +57,6 @@ func DefaultParams() Params {
}
}
// String implements the fmt.Stringer interface
func (p Params) String() string {
out, _ := yaml.Marshal(p)
return string(out)
}
// ParamSetPairs returns the parameter set pairs.
func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
return paramtypes.ParamSetPairs{
+76 -250
View File
@@ -781,51 +781,6 @@ func (m *QueryParamsResponse) GetParams() Params {
return Params{}
}
// QueryStaticCallRequest defines static call response
type QueryStaticCallResponse struct {
Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
}
func (m *QueryStaticCallResponse) Reset() { *m = QueryStaticCallResponse{} }
func (m *QueryStaticCallResponse) String() string { return proto.CompactTextString(m) }
func (*QueryStaticCallResponse) ProtoMessage() {}
func (*QueryStaticCallResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{16}
}
func (m *QueryStaticCallResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *QueryStaticCallResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_QueryStaticCallResponse.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalToSizedBuffer(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (m *QueryStaticCallResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryStaticCallResponse.Merge(m, src)
}
func (m *QueryStaticCallResponse) XXX_Size() int {
return m.Size()
}
func (m *QueryStaticCallResponse) XXX_DiscardUnknown() {
xxx_messageInfo_QueryStaticCallResponse.DiscardUnknown(m)
}
var xxx_messageInfo_QueryStaticCallResponse proto.InternalMessageInfo
func (m *QueryStaticCallResponse) GetData() []byte {
if m != nil {
return m.Data
}
return nil
}
// EthCallRequest defines EthCall request
type EthCallRequest struct {
// same json format as the json rpc api.
@@ -838,7 +793,7 @@ func (m *EthCallRequest) Reset() { *m = EthCallRequest{} }
func (m *EthCallRequest) String() string { return proto.CompactTextString(m) }
func (*EthCallRequest) ProtoMessage() {}
func (*EthCallRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{17}
return fileDescriptor_e15a877459347994, []int{16}
}
func (m *EthCallRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -891,7 +846,7 @@ func (m *EstimateGasResponse) Reset() { *m = EstimateGasResponse{} }
func (m *EstimateGasResponse) String() string { return proto.CompactTextString(m) }
func (*EstimateGasResponse) ProtoMessage() {}
func (*EstimateGasResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{18}
return fileDescriptor_e15a877459347994, []int{17}
}
func (m *EstimateGasResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -941,7 +896,7 @@ func (m *QueryTraceTxRequest) Reset() { *m = QueryTraceTxRequest{} }
func (m *QueryTraceTxRequest) String() string { return proto.CompactTextString(m) }
func (*QueryTraceTxRequest) ProtoMessage() {}
func (*QueryTraceTxRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{19}
return fileDescriptor_e15a877459347994, []int{18}
}
func (m *QueryTraceTxRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1001,7 +956,7 @@ func (m *QueryTraceTxResponse) Reset() { *m = QueryTraceTxResponse{} }
func (m *QueryTraceTxResponse) String() string { return proto.CompactTextString(m) }
func (*QueryTraceTxResponse) ProtoMessage() {}
func (*QueryTraceTxResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_e15a877459347994, []int{20}
return fileDescriptor_e15a877459347994, []int{19}
}
func (m *QueryTraceTxResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1054,7 +1009,6 @@ func init() {
proto.RegisterType((*QueryTxLogsResponse)(nil), "ethermint.evm.v1.QueryTxLogsResponse")
proto.RegisterType((*QueryParamsRequest)(nil), "ethermint.evm.v1.QueryParamsRequest")
proto.RegisterType((*QueryParamsResponse)(nil), "ethermint.evm.v1.QueryParamsResponse")
proto.RegisterType((*QueryStaticCallResponse)(nil), "ethermint.evm.v1.QueryStaticCallResponse")
proto.RegisterType((*EthCallRequest)(nil), "ethermint.evm.v1.EthCallRequest")
proto.RegisterType((*EstimateGasResponse)(nil), "ethermint.evm.v1.EstimateGasResponse")
proto.RegisterType((*QueryTraceTxRequest)(nil), "ethermint.evm.v1.QueryTraceTxRequest")
@@ -1064,79 +1018,78 @@ func init() {
func init() { proto.RegisterFile("ethermint/evm/v1/query.proto", fileDescriptor_e15a877459347994) }
var fileDescriptor_e15a877459347994 = []byte{
// 1138 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4d, 0x6f, 0x1b, 0x55,
0x17, 0xf6, 0x24, 0x4e, 0x9c, 0x1e, 0x27, 0x7d, 0xf3, 0xde, 0x06, 0x35, 0x19, 0x52, 0x27, 0x9d,
0x34, 0xdf, 0x61, 0x06, 0x1b, 0x54, 0x89, 0x4a, 0x08, 0x92, 0x28, 0x14, 0xd4, 0x16, 0x15, 0x13,
0xb1, 0x60, 0x63, 0x5d, 0x8f, 0x2f, 0xe3, 0x51, 0xed, 0xb9, 0xee, 0xdc, 0x6b, 0xe3, 0xb4, 0x84,
0x05, 0x12, 0x15, 0xa8, 0x1b, 0x24, 0xf6, 0xa8, 0x1b, 0xd6, 0xfc, 0x8d, 0x2e, 0x2b, 0xb1, 0x61,
0x85, 0x50, 0x82, 0x10, 0x3f, 0x03, 0xdd, 0x8f, 0xb1, 0x3d, 0x1e, 0x4f, 0x9d, 0x22, 0x76, 0xf7,
0xe3, 0x9c, 0xf3, 0x3c, 0xe7, 0x9e, 0x33, 0xcf, 0xd1, 0xc0, 0x32, 0xe1, 0x75, 0x12, 0x36, 0xfd,
0x80, 0x3b, 0xa4, 0xd3, 0x74, 0x3a, 0x45, 0xe7, 0x61, 0x9b, 0x84, 0x27, 0x76, 0x2b, 0xa4, 0x9c,
0xa2, 0xf9, 0xde, 0xad, 0x4d, 0x3a, 0x4d, 0xbb, 0x53, 0x34, 0x17, 0x3c, 0xea, 0x51, 0x79, 0xe9,
0x88, 0x95, 0xb2, 0x33, 0x77, 0x5c, 0xca, 0x9a, 0x94, 0x39, 0x55, 0xcc, 0x88, 0x0a, 0xe0, 0x74,
0x8a, 0x55, 0xc2, 0x71, 0xd1, 0x69, 0x61, 0xcf, 0x0f, 0x30, 0xf7, 0x69, 0xa0, 0x6d, 0x97, 0x3d,
0x4a, 0xbd, 0x06, 0x71, 0x70, 0xcb, 0x77, 0x70, 0x10, 0x50, 0x2e, 0x2f, 0x99, 0xbe, 0x35, 0x13,
0x7c, 0x04, 0xb0, 0xba, 0x5b, 0x4a, 0xdc, 0xf1, 0xae, 0xba, 0xb2, 0xde, 0x81, 0x2b, 0x9f, 0x08,
0xd8, 0x7d, 0xd7, 0xa5, 0xed, 0x80, 0x97, 0xc9, 0xc3, 0x36, 0x61, 0x1c, 0x2d, 0x42, 0x0e, 0xd7,
0x6a, 0x21, 0x61, 0x6c, 0xd1, 0x58, 0x35, 0xb6, 0x2e, 0x95, 0xa3, 0xed, 0xad, 0x99, 0xef, 0x9e,
0xad, 0x64, 0xfe, 0x7e, 0xb6, 0x92, 0xb1, 0x5c, 0x58, 0x88, 0xbb, 0xb2, 0x16, 0x0d, 0x18, 0x11,
0xbe, 0x55, 0xdc, 0xc0, 0x81, 0x4b, 0x22, 0x5f, 0xbd, 0x45, 0xaf, 0xc3, 0x25, 0x97, 0xd6, 0x48,
0xa5, 0x8e, 0x59, 0x7d, 0x71, 0x42, 0xde, 0xcd, 0x88, 0x83, 0x0f, 0x31, 0xab, 0xa3, 0x05, 0x98,
0x0a, 0xa8, 0x70, 0x9a, 0x5c, 0x35, 0xb6, 0xb2, 0x65, 0xb5, 0xb1, 0xde, 0x83, 0x25, 0x09, 0x72,
0x28, 0xdf, 0xe9, 0x5f, 0xb0, 0x7c, 0x62, 0x80, 0x39, 0x2a, 0x82, 0x26, 0xbb, 0x0e, 0x97, 0x55,
0x09, 0x2a, 0xf1, 0x48, 0x73, 0xea, 0x74, 0x5f, 0x1d, 0x22, 0x13, 0x66, 0x98, 0x00, 0x15, 0xfc,
0x26, 0x24, 0xbf, 0xde, 0x5e, 0x84, 0xc0, 0x2a, 0x6a, 0x25, 0x68, 0x37, 0xab, 0x24, 0xd4, 0x19,
0xcc, 0xe9, 0xd3, 0x8f, 0xe5, 0xa1, 0x75, 0x07, 0x96, 0x25, 0x8f, 0xcf, 0x70, 0xc3, 0xaf, 0x61,
0x4e, 0xc3, 0xa1, 0x64, 0xae, 0xc3, 0xac, 0x4b, 0x83, 0x61, 0x1e, 0x79, 0x71, 0xb6, 0x9f, 0xc8,
0xea, 0xa9, 0x01, 0xd7, 0x52, 0xa2, 0xe9, 0xc4, 0x36, 0xe1, 0x7f, 0x11, 0xab, 0x78, 0xc4, 0x88,
0xec, 0x7f, 0x98, 0x5a, 0xd4, 0x44, 0x07, 0xaa, 0xce, 0xaf, 0x52, 0x9e, 0x37, 0x75, 0x13, 0xf5,
0x5c, 0xc7, 0x35, 0x91, 0x75, 0x47, 0x83, 0x7d, 0xca, 0x69, 0x88, 0xbd, 0xf1, 0x60, 0x68, 0x1e,
0x26, 0x1f, 0x90, 0x13, 0xdd, 0x6f, 0x62, 0x39, 0x00, 0xbf, 0xa7, 0xe1, 0x7b, 0xc1, 0x34, 0xfc,
0x02, 0x4c, 0x75, 0x70, 0xa3, 0x1d, 0x81, 0xab, 0x8d, 0x75, 0x13, 0xe6, 0x75, 0x2b, 0xd5, 0x5e,
0x29, 0xc9, 0x4d, 0xf8, 0xff, 0x80, 0x9f, 0x86, 0x40, 0x90, 0x15, 0xbd, 0x2f, 0xbd, 0x66, 0xcb,
0x72, 0x6d, 0x3d, 0x02, 0x24, 0x0d, 0x8f, 0xbb, 0x77, 0xa9, 0xc7, 0x22, 0x08, 0x04, 0x59, 0xf9,
0xc5, 0xa8, 0xf8, 0x72, 0x8d, 0x3e, 0x00, 0xe8, 0x0b, 0x84, 0xcc, 0x2d, 0x5f, 0xda, 0xb0, 0x55,
0xd3, 0xda, 0x42, 0x4d, 0x6c, 0x25, 0x47, 0x5a, 0x4d, 0xec, 0xfb, 0xfd, 0xa7, 0x2a, 0x0f, 0x78,
0x0e, 0x90, 0xfc, 0xde, 0xd0, 0x0f, 0x1b, 0x81, 0x6b, 0x9e, 0xdb, 0x90, 0x6d, 0x50, 0x4f, 0x64,
0x37, 0xb9, 0x95, 0x2f, 0xbd, 0x66, 0x0f, 0x2b, 0x9b, 0x7d, 0x97, 0x7a, 0x65, 0x69, 0x82, 0x6e,
0x8f, 0x20, 0xb5, 0x39, 0x96, 0x94, 0xc2, 0x19, 0x64, 0x65, 0x2d, 0xe8, 0x77, 0xb8, 0x8f, 0x43,
0xdc, 0x8c, 0xde, 0xc1, 0xba, 0xa7, 0x09, 0x46, 0xa7, 0x9a, 0xe0, 0x4d, 0x98, 0x6e, 0xc9, 0x13,
0xf9, 0x40, 0xf9, 0xd2, 0x62, 0x92, 0xa2, 0xf2, 0x38, 0xc8, 0x3e, 0xff, 0x7d, 0x25, 0x53, 0xd6,
0xd6, 0xd6, 0x1b, 0x70, 0x55, 0xd7, 0x1e, 0x73, 0xdf, 0x3d, 0xc4, 0x8d, 0xc6, 0x60, 0x6d, 0x6a,
0x98, 0xe3, 0xa8, 0x36, 0x62, 0x6d, 0xbd, 0x0b, 0x97, 0x8f, 0x78, 0x5d, 0x99, 0xf5, 0xea, 0x82,
0x43, 0x8f, 0x45, 0x56, 0x62, 0x8d, 0xae, 0x42, 0xce, 0xc3, 0xac, 0xe2, 0xe2, 0x96, 0xfe, 0x98,
0xa6, 0x3d, 0xcc, 0x0e, 0x71, 0xcb, 0xda, 0x84, 0x2b, 0x47, 0x8c, 0xfb, 0x4d, 0xcc, 0xc9, 0x6d,
0xdc, 0x27, 0x3f, 0x0f, 0x93, 0x1e, 0x56, 0x21, 0xb2, 0x65, 0xb1, 0xb4, 0x7e, 0xee, 0xd5, 0x21,
0xc4, 0x2e, 0x39, 0xee, 0x46, 0x68, 0x45, 0x98, 0x6c, 0x32, 0x4f, 0xe7, 0xb8, 0x92, 0xcc, 0xf1,
0x1e, 0xf3, 0x8e, 0xc4, 0x19, 0x69, 0x37, 0x8f, 0xbb, 0x65, 0x61, 0x8b, 0x96, 0x60, 0x86, 0x77,
0x2b, 0x7e, 0x50, 0x23, 0x5d, 0xcd, 0x26, 0xc7, 0xbb, 0x1f, 0x89, 0x2d, 0x7a, 0x1f, 0x66, 0xb9,
0x88, 0x5f, 0x71, 0x69, 0xf0, 0x85, 0xef, 0xc9, 0xef, 0x3a, 0x5f, 0xba, 0x96, 0x0c, 0x2b, 0x59,
0x1c, 0x4a, 0xa3, 0x72, 0x9e, 0xf7, 0x37, 0xd6, 0x8e, 0xfe, 0x74, 0x7a, 0x34, 0xd3, 0xdf, 0xae,
0xf4, 0x17, 0xc0, 0x94, 0x34, 0x46, 0xdf, 0x1a, 0x90, 0xd3, 0x52, 0x85, 0xd6, 0x93, 0x68, 0x23,
0x66, 0x91, 0xb9, 0x31, 0xce, 0x4c, 0x01, 0x5b, 0xbb, 0xdf, 0xfc, 0xfa, 0xe7, 0x8f, 0x13, 0xeb,
0x68, 0xcd, 0x49, 0x8c, 0x3b, 0x2d, 0x57, 0xce, 0x63, 0xfd, 0x6d, 0x9e, 0xa2, 0x9f, 0x0c, 0x98,
0x8b, 0x4d, 0x04, 0xb4, 0x9b, 0x02, 0x33, 0x6a, 0xf2, 0x98, 0x7b, 0x17, 0x33, 0xd6, 0xcc, 0x4a,
0x92, 0xd9, 0x1e, 0xda, 0x49, 0x32, 0x8b, 0x86, 0x4f, 0x82, 0xe0, 0x2f, 0x06, 0xcc, 0x0f, 0x8b,
0x3b, 0xb2, 0x53, 0x60, 0x53, 0x66, 0x8a, 0xe9, 0x5c, 0xd8, 0x5e, 0x33, 0xbd, 0x25, 0x99, 0xbe,
0x8d, 0x4a, 0x49, 0xa6, 0x9d, 0xc8, 0xa7, 0x4f, 0x76, 0x70, 0x5e, 0x9d, 0xa2, 0x27, 0x06, 0xe4,
0xb4, 0x8c, 0xa7, 0x96, 0x36, 0x3e, 0x21, 0x52, 0x4b, 0x3b, 0x34, 0x0d, 0xac, 0x3d, 0x49, 0x6b,
0x03, 0xdd, 0x48, 0xd2, 0xd2, 0x63, 0x81, 0x0d, 0x3c, 0xdd, 0x53, 0x03, 0x72, 0x5a, 0xd0, 0x53,
0x89, 0xc4, 0xa7, 0x47, 0x2a, 0x91, 0xa1, 0xb9, 0x60, 0x15, 0x25, 0x91, 0x5d, 0xb4, 0x9d, 0x24,
0xc2, 0x94, 0x69, 0x9f, 0x87, 0xf3, 0xf8, 0x01, 0x39, 0x39, 0x45, 0x8f, 0x20, 0x2b, 0x74, 0x1f,
0x59, 0xa9, 0x2d, 0xd3, 0x1b, 0x26, 0xe6, 0xda, 0x4b, 0x6d, 0x34, 0x87, 0x6d, 0xc9, 0x61, 0x0d,
0x5d, 0x1f, 0xd5, 0x4d, 0xb5, 0xd8, 0x4b, 0x7c, 0x09, 0xd3, 0x4a, 0xfa, 0xd0, 0x8d, 0x94, 0xc8,
0x31, 0x85, 0x35, 0xd7, 0xc7, 0x58, 0x69, 0x06, 0xab, 0x92, 0x81, 0x89, 0x16, 0x93, 0x0c, 0x94,
0xb6, 0xa2, 0x2e, 0xe4, 0xb4, 0x58, 0xa2, 0xd5, 0x64, 0xcc, 0xb8, 0x8e, 0x9a, 0x9b, 0xe3, 0xc4,
0x2c, 0xc2, 0xb5, 0x24, 0xee, 0x32, 0x32, 0x93, 0xb8, 0x84, 0xd7, 0x2b, 0xae, 0x80, 0xfb, 0x1a,
0xf2, 0x03, 0x3a, 0x7b, 0x01, 0xf4, 0x11, 0x39, 0x8f, 0x10, 0x6a, 0x6b, 0x43, 0x62, 0xaf, 0xa2,
0xc2, 0x08, 0x6c, 0x6d, 0x5e, 0xf1, 0x30, 0x43, 0x5f, 0x41, 0x4e, 0x2b, 0x62, 0x6a, 0xef, 0xc5,
0x85, 0x3d, 0xb5, 0xf7, 0x86, 0x84, 0xf5, 0x65, 0xd9, 0x2b, 0x29, 0xe7, 0xdd, 0x83, 0x83, 0xe7,
0x67, 0x05, 0xe3, 0xc5, 0x59, 0xc1, 0xf8, 0xe3, 0xac, 0x60, 0xfc, 0x70, 0x5e, 0xc8, 0xbc, 0x38,
0x2f, 0x64, 0x7e, 0x3b, 0x2f, 0x64, 0x3e, 0xdf, 0xf2, 0x7c, 0x5e, 0x6f, 0x57, 0x6d, 0x97, 0x36,
0x1d, 0x5e, 0xc7, 0x21, 0xf3, 0xd9, 0x40, 0x9c, 0xae, 0x8c, 0xc4, 0x4f, 0x5a, 0x84, 0x55, 0xa7,
0xe5, 0x9f, 0xc1, 0x5b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x5c, 0x4c, 0x85, 0xe2, 0x0c,
0x00, 0x00,
// 1123 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x96, 0x4d, 0x6f, 0x1b, 0x45,
0x18, 0xc7, 0xbd, 0x89, 0x13, 0xa7, 0x8f, 0x93, 0x12, 0xa6, 0x41, 0x24, 0x4b, 0xea, 0xa4, 0x9b,
0xe6, 0x3d, 0xda, 0xc5, 0x06, 0x55, 0xa2, 0x12, 0x82, 0x24, 0x0a, 0x05, 0xb5, 0x45, 0xc5, 0x44,
0x1c, 0xb8, 0x58, 0xe3, 0xf5, 0xb0, 0xb6, 0x6a, 0xef, 0xb8, 0x3b, 0x63, 0xe3, 0xb4, 0x84, 0x03,
0x12, 0x15, 0xa8, 0x17, 0x24, 0xee, 0xa8, 0x17, 0xce, 0x7c, 0x8d, 0x1e, 0x2b, 0x71, 0xe1, 0x84,
0x50, 0x82, 0x10, 0x1f, 0x03, 0xcd, 0xcb, 0xda, 0xbb, 0x5e, 0x6f, 0x9d, 0xa2, 0xde, 0xe6, 0xe5,
0x99, 0xe7, 0xff, 0x9b, 0x99, 0x67, 0xff, 0xb3, 0xb0, 0x4c, 0x78, 0x9d, 0x04, 0xad, 0x86, 0xcf,
0x1d, 0xd2, 0x6d, 0x39, 0xdd, 0xa2, 0xf3, 0xa0, 0x43, 0x82, 0x13, 0xbb, 0x1d, 0x50, 0x4e, 0xd1,
0x7c, 0x7f, 0xd6, 0x26, 0xdd, 0x96, 0xdd, 0x2d, 0x9a, 0x0b, 0x1e, 0xf5, 0xa8, 0x9c, 0x74, 0x44,
0x4b, 0xc5, 0x99, 0x3b, 0x2e, 0x65, 0x2d, 0xca, 0x9c, 0x2a, 0x66, 0x44, 0x25, 0x70, 0xba, 0xc5,
0x2a, 0xe1, 0xb8, 0xe8, 0xb4, 0xb1, 0xd7, 0xf0, 0x31, 0x6f, 0x50, 0x5f, 0xc7, 0x2e, 0x7b, 0x94,
0x7a, 0x4d, 0xe2, 0xe0, 0x76, 0xc3, 0xc1, 0xbe, 0x4f, 0xb9, 0x9c, 0x64, 0x7a, 0xd6, 0x4c, 0xf0,
0x08, 0x61, 0x35, 0xb7, 0x94, 0x98, 0xe3, 0x3d, 0x35, 0x65, 0xbd, 0x07, 0x57, 0x3e, 0x13, 0xb2,
0xfb, 0xae, 0x4b, 0x3b, 0x3e, 0x2f, 0x93, 0x07, 0x1d, 0xc2, 0x38, 0x5a, 0x84, 0x1c, 0xae, 0xd5,
0x02, 0xc2, 0xd8, 0xa2, 0xb1, 0x6a, 0x6c, 0x5d, 0x2a, 0x87, 0xdd, 0x9b, 0x33, 0x3f, 0x3c, 0x5d,
0xc9, 0xfc, 0xfb, 0x74, 0x25, 0x63, 0xb9, 0xb0, 0x10, 0x5f, 0xca, 0xda, 0xd4, 0x67, 0x44, 0xac,
0xad, 0xe2, 0x26, 0xf6, 0x5d, 0x12, 0xae, 0xd5, 0x5d, 0xf4, 0x16, 0x5c, 0x72, 0x69, 0x8d, 0x54,
0xea, 0x98, 0xd5, 0x17, 0x27, 0xe4, 0xdc, 0x8c, 0x18, 0xf8, 0x18, 0xb3, 0x3a, 0x5a, 0x80, 0x29,
0x9f, 0x8a, 0x45, 0x93, 0xab, 0xc6, 0x56, 0xb6, 0xac, 0x3a, 0xd6, 0x07, 0xb0, 0x24, 0x45, 0x0e,
0xe5, 0x39, 0xfd, 0x0f, 0xca, 0xc7, 0x06, 0x98, 0xa3, 0x32, 0x68, 0xd8, 0x75, 0xb8, 0xac, 0xae,
0xa0, 0x12, 0xcf, 0x34, 0xa7, 0x46, 0xf7, 0xd5, 0x20, 0x32, 0x61, 0x86, 0x09, 0x51, 0xc1, 0x37,
0x21, 0xf9, 0xfa, 0x7d, 0x91, 0x02, 0xab, 0xac, 0x15, 0xbf, 0xd3, 0xaa, 0x92, 0x40, 0xef, 0x60,
0x4e, 0x8f, 0x7e, 0x2a, 0x07, 0xad, 0xdb, 0xb0, 0x2c, 0x39, 0xbe, 0xc0, 0xcd, 0x46, 0x0d, 0x73,
0x1a, 0x0c, 0x6d, 0xe6, 0x1a, 0xcc, 0xba, 0xd4, 0x1f, 0xe6, 0xc8, 0x8b, 0xb1, 0xfd, 0xc4, 0xae,
0x9e, 0x18, 0x70, 0x35, 0x25, 0x9b, 0xde, 0xd8, 0x26, 0xbc, 0x16, 0x52, 0xc5, 0x33, 0x86, 0xb0,
0xaf, 0x70, 0x6b, 0x61, 0x11, 0x1d, 0xa8, 0x7b, 0x7e, 0x99, 0xeb, 0x79, 0x5b, 0x17, 0x51, 0x7f,
0xe9, 0xb8, 0x22, 0xb2, 0x6e, 0x6b, 0xb1, 0xcf, 0x39, 0x0d, 0xb0, 0x37, 0x5e, 0x0c, 0xcd, 0xc3,
0xe4, 0x7d, 0x72, 0xa2, 0xeb, 0x4d, 0x34, 0x23, 0xf2, 0x7b, 0x5a, 0xbe, 0x9f, 0x4c, 0xcb, 0x2f,
0xc0, 0x54, 0x17, 0x37, 0x3b, 0xa1, 0xb8, 0xea, 0x58, 0x37, 0x60, 0x5e, 0x97, 0x52, 0xed, 0xa5,
0x36, 0xb9, 0x09, 0xaf, 0x47, 0xd6, 0x69, 0x09, 0x04, 0x59, 0x51, 0xfb, 0x72, 0xd5, 0x6c, 0x59,
0xb6, 0xad, 0x87, 0x80, 0x64, 0xe0, 0x71, 0xef, 0x0e, 0xf5, 0x58, 0x28, 0x81, 0x20, 0x2b, 0xbf,
0x18, 0x95, 0x5f, 0xb6, 0xd1, 0x47, 0x00, 0x03, 0x83, 0x90, 0x7b, 0xcb, 0x97, 0x36, 0x6c, 0x55,
0xb4, 0xb6, 0x70, 0x13, 0x5b, 0xd9, 0x91, 0x76, 0x13, 0xfb, 0xde, 0xe0, 0xa8, 0xca, 0x91, 0x95,
0x11, 0xc8, 0x1f, 0x0d, 0x7d, 0xb0, 0xa1, 0xb8, 0xe6, 0xdc, 0x86, 0x6c, 0x93, 0x7a, 0x62, 0x77,
0x93, 0x5b, 0xf9, 0xd2, 0x1b, 0xf6, 0xb0, 0xb3, 0xd9, 0x77, 0xa8, 0x57, 0x96, 0x21, 0xe8, 0xd6,
0x08, 0xa8, 0xcd, 0xb1, 0x50, 0x4a, 0x27, 0x4a, 0x65, 0x2d, 0xe8, 0x73, 0xb8, 0x87, 0x03, 0xdc,
0x0a, 0xcf, 0xc1, 0xba, 0xab, 0x01, 0xc3, 0x51, 0x0d, 0x78, 0x03, 0xa6, 0xdb, 0x72, 0x44, 0x1e,
0x50, 0xbe, 0xb4, 0x98, 0x44, 0x54, 0x2b, 0x0e, 0xb2, 0xcf, 0xfe, 0x5c, 0xc9, 0x94, 0x75, 0xb4,
0xf5, 0x3e, 0x5c, 0x3e, 0xe2, 0xf5, 0x43, 0xdc, 0x6c, 0x46, 0x0e, 0x1a, 0x07, 0x1e, 0x0b, 0xaf,
0x44, 0xb4, 0xd1, 0x9b, 0x90, 0xf3, 0x30, 0xab, 0xb8, 0xb8, 0xad, 0xbf, 0x8e, 0x69, 0x0f, 0xb3,
0x43, 0xdc, 0xb6, 0x36, 0xe1, 0xca, 0x11, 0xe3, 0x8d, 0x16, 0xe6, 0xe4, 0x16, 0x1e, 0xd0, 0xcc,
0xc3, 0xa4, 0x87, 0x55, 0x8a, 0x6c, 0x59, 0x34, 0xad, 0x5f, 0xfb, 0x07, 0x1b, 0x60, 0x97, 0x1c,
0xf7, 0x42, 0xb5, 0x22, 0x4c, 0xb6, 0x98, 0xa7, 0xa1, 0x57, 0x92, 0xd0, 0x77, 0x99, 0x77, 0x24,
0xc6, 0x48, 0xa7, 0x75, 0xdc, 0x2b, 0x8b, 0x58, 0xb4, 0x04, 0x33, 0xbc, 0x57, 0x69, 0xf8, 0x35,
0xd2, 0xd3, 0x34, 0x39, 0xde, 0xfb, 0x44, 0x74, 0xd1, 0x87, 0x30, 0xcb, 0x45, 0xfe, 0x8a, 0x4b,
0xfd, 0xaf, 0x1a, 0x9e, 0xfc, 0x50, 0xf3, 0xa5, 0xab, 0xc9, 0xb4, 0x92, 0xe2, 0x50, 0x06, 0x95,
0xf3, 0x7c, 0xd0, 0xb1, 0x76, 0xf4, 0xb7, 0xd0, 0xc7, 0x1c, 0x14, 0x6a, 0x0d, 0x73, 0x1c, 0x9e,
0x8a, 0x68, 0x97, 0xfe, 0x01, 0x98, 0x92, 0xc1, 0xe8, 0x7b, 0x03, 0x72, 0xda, 0x7b, 0xd0, 0x7a,
0x52, 0x6d, 0xc4, 0xe3, 0x62, 0x6e, 0x8c, 0x0b, 0x53, 0xc2, 0xd6, 0xee, 0x77, 0xbf, 0xff, 0xfd,
0xf3, 0xc4, 0x3a, 0x5a, 0x73, 0x12, 0xef, 0x97, 0xf6, 0x1f, 0xe7, 0x91, 0xfe, 0xd8, 0x4e, 0xd1,
0x2f, 0x06, 0xcc, 0xc5, 0x2c, 0x1e, 0xed, 0xa6, 0xc8, 0x8c, 0x7a, 0x4a, 0xcc, 0xbd, 0x8b, 0x05,
0x6b, 0xb2, 0x92, 0x24, 0xdb, 0x43, 0x3b, 0x49, 0xb2, 0xf0, 0x35, 0x49, 0x00, 0xfe, 0x66, 0xc0,
0xfc, 0xb0, 0x5b, 0x23, 0x3b, 0x45, 0x36, 0xe5, 0x91, 0x30, 0x9d, 0x0b, 0xc7, 0x6b, 0xd2, 0x9b,
0x92, 0xf4, 0x5d, 0x54, 0x4a, 0x92, 0x76, 0xc3, 0x35, 0x03, 0xd8, 0xe8, 0x03, 0x74, 0x8a, 0x1e,
0x1b, 0x90, 0xd3, 0xbe, 0x9c, 0x7a, 0xb5, 0x71, 0xcb, 0x4f, 0xbd, 0xda, 0x21, 0x7b, 0xb7, 0xf6,
0x24, 0xd6, 0x06, 0xba, 0x9e, 0xc4, 0xd2, 0x3e, 0xcf, 0x22, 0x47, 0xf7, 0xc4, 0x80, 0x9c, 0x76,
0xe8, 0x54, 0x90, 0xf8, 0x73, 0x90, 0x0a, 0x32, 0x64, 0xf4, 0x56, 0x51, 0x82, 0xec, 0xa2, 0xed,
0x24, 0x08, 0x53, 0xa1, 0x03, 0x0e, 0xe7, 0xd1, 0x7d, 0x72, 0x72, 0x8a, 0x1e, 0x42, 0x56, 0x18,
0x39, 0xb2, 0x52, 0x4b, 0xa6, 0xff, 0x3a, 0x98, 0x6b, 0x2f, 0x8c, 0xd1, 0x0c, 0xdb, 0x92, 0x61,
0x0d, 0x5d, 0x1b, 0x55, 0x4d, 0xb5, 0xd8, 0x49, 0x7c, 0x0d, 0xd3, 0xca, 0xcb, 0xd0, 0xf5, 0x94,
0xcc, 0x31, 0xcb, 0x34, 0xd7, 0xc7, 0x44, 0x69, 0x82, 0x55, 0x49, 0x60, 0xa2, 0xc5, 0x24, 0x81,
0x32, 0x4b, 0xd4, 0x83, 0x9c, 0x36, 0x4b, 0xb4, 0x9a, 0xcc, 0x19, 0xf7, 0x51, 0x73, 0x73, 0x9c,
0x99, 0x85, 0xba, 0x96, 0xd4, 0x5d, 0x46, 0x66, 0x52, 0x97, 0xf0, 0x7a, 0xc5, 0x15, 0x72, 0xdf,
0x42, 0x3e, 0xe2, 0xb3, 0x17, 0x50, 0x1f, 0xb1, 0xe7, 0x11, 0x46, 0x6d, 0x6d, 0x48, 0xed, 0x55,
0x54, 0x18, 0xa1, 0xad, 0xc3, 0x2b, 0x1e, 0x66, 0xe8, 0x1b, 0xc8, 0x69, 0x47, 0x4c, 0xad, 0xbd,
0xb8, 0xb1, 0xa7, 0xd6, 0xde, 0x90, 0xb1, 0xbe, 0x68, 0xf7, 0xca, 0xca, 0x79, 0xef, 0xe0, 0xe0,
0xd9, 0x59, 0xc1, 0x78, 0x7e, 0x56, 0x30, 0xfe, 0x3a, 0x2b, 0x18, 0x3f, 0x9d, 0x17, 0x32, 0xcf,
0xcf, 0x0b, 0x99, 0x3f, 0xce, 0x0b, 0x99, 0x2f, 0xb7, 0xbc, 0x06, 0xaf, 0x77, 0xaa, 0xb6, 0x4b,
0x5b, 0x0e, 0xaf, 0xe3, 0x80, 0x35, 0x58, 0x24, 0x4f, 0x4f, 0x66, 0xe2, 0x27, 0x6d, 0xc2, 0xaa,
0xd3, 0xf2, 0x57, 0xff, 0x9d, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x55, 0x07, 0x68, 0x0c, 0xb3,
0x0c, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -2113,36 +2066,6 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
func (m *QueryStaticCallResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *QueryStaticCallResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
func (m *QueryStaticCallResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
if len(m.Data) > 0 {
i -= len(m.Data)
copy(dAtA[i:], m.Data)
i = encodeVarintQuery(dAtA, i, uint64(len(m.Data)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
func (m *EthCallRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -2534,19 +2457,6 @@ func (m *QueryParamsResponse) Size() (n int) {
return n
}
func (m *QueryStaticCallResponse) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Data)
if l > 0 {
n += 1 + l + sovQuery(uint64(l))
}
return n
}
func (m *EthCallRequest) Size() (n int) {
if m == nil {
return 0
@@ -4130,90 +4040,6 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *QueryStaticCallResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: QueryStaticCallResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: QueryStaticCallResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Data", 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.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...)
if m.Data == nil {
m.Data = []byte{}
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
if err != nil {
return err
}
if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthQuery
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *EthCallRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
+172
View File
@@ -0,0 +1,172 @@
package types
import (
"errors"
"fmt"
math "math"
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
ethtypes "github.com/ethereum/go-ethereum/core/types"
)
// TransactionArgs represents the arguments to construct a new transaction
// or a message call using JSON-RPC.
// Duplicate struct definition since geth struct is in internal package
// Ref: https://github.com/ethereum/go-ethereum/blob/release/1.10.4/internal/ethapi/transaction_args.go#L36
type TransactionArgs struct {
From *common.Address `json:"from"`
To *common.Address `json:"to"`
Gas *hexutil.Uint64 `json:"gas"`
GasPrice *hexutil.Big `json:"gasPrice"`
MaxFeePerGas *hexutil.Big `json:"maxFeePerGas"`
MaxPriorityFeePerGas *hexutil.Big `json:"maxPriorityFeePerGas"`
Value *hexutil.Big `json:"value"`
Nonce *hexutil.Uint64 `json:"nonce"`
// We accept "data" and "input" for backwards-compatibility reasons.
// "input" is the newer name and should be preferred by clients.
// Issue detail: https://github.com/ethereum/go-ethereum/issues/15628
Data *hexutil.Bytes `json:"data"`
Input *hexutil.Bytes `json:"input"`
// Introduced by AccessListTxType transaction.
AccessList *ethtypes.AccessList `json:"accessList,omitempty"`
ChainID *hexutil.Big `json:"chainId,omitempty"`
}
// String return the struct in a string format
func (args *TransactionArgs) String() string {
// Todo: There is currently a bug with hexutil.Big when the value its nil, printing would trigger an exception
return fmt.Sprintf("TransactionArgs{From:%v, To:%v, Gas:%v,"+
" Nonce:%v, Data:%v, Input:%v, AccessList:%v}",
args.From,
args.To,
args.Gas,
args.Nonce,
args.Data,
args.Input,
args.AccessList)
}
// ToTransaction converts the arguments to an ethereum transaction.
// This assumes that setTxDefaults has been called.
func (args *TransactionArgs) ToTransaction() *MsgEthereumTx {
var (
input []byte
chainID, value, gasPrice *big.Int
// maxFeePerGas, maxPriorityFeePerGas *big.Int
addr common.Address
gas, nonce uint64
)
// Set sender address or use zero address if none specified.
if args.From != nil {
addr = *args.From
}
if args.Input != nil {
input = *args.Input
} else if args.Data != nil {
input = *args.Data
}
if args.ChainID != nil {
chainID = args.ChainID.ToInt()
}
if args.Nonce != nil {
nonce = uint64(*args.Nonce)
}
if args.Gas != nil {
gas = uint64(*args.Gas)
}
if args.GasPrice != nil {
gasPrice = args.GasPrice.ToInt()
}
// if args.MaxFeePerGas != nil {
// maxFeePerGas = args.MaxFeePerGas.ToInt()
// }
// if args.MaxPriorityFeePerGas != nil {
// maxPriorityFeePerGas = args.MaxPriorityFeePerGas.ToInt()
// }
if args.GasPrice != nil {
gasPrice = args.GasPrice.ToInt()
}
if args.Value != nil {
value = args.Value.ToInt()
}
tx := NewTx(chainID, nonce, args.To, value, gas, gasPrice, input, args.AccessList)
tx.From = addr.Hex()
return tx
}
// ToMessage converts the arguments to the Message type used by the core evm.
// This assumes that setTxDefaults has been called.
func (args *TransactionArgs) ToMessage(globalGasCap uint64) (ethtypes.Message, error) {
var (
input []byte
value, gasPrice *big.Int
// gasFeeCap, gasTipCap *big.Int
addr common.Address
gas, nonce uint64
)
// Reject invalid combinations of pre- and post-1559 fee styles
if args.GasPrice != nil && (args.MaxFeePerGas != nil || args.MaxPriorityFeePerGas != nil) {
return ethtypes.Message{}, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified")
}
// Set sender address or use zero address if none specified.
if args.From != nil {
addr = *args.From
}
// Set default gas & gas price if none were set
gas = globalGasCap
if gas == 0 {
gas = uint64(math.MaxUint64 / 2)
}
if args.Gas != nil {
gas = uint64(*args.Gas)
}
if globalGasCap != 0 && globalGasCap < gas {
gas = globalGasCap
}
if args.GasPrice != nil {
gasPrice = args.GasPrice.ToInt()
}
if args.Value != nil {
value = args.Value.ToInt()
}
// if args.MaxFeePerGas != nil {
// gasFeeCap = args.MaxFeePerGas.ToInt()
// }
// if args.MaxPriorityFeePerGas != nil {
// gasTipCap = args.MaxPriorityFeePerGas.ToInt()
// }
if args.Data != nil {
input = *args.Data
}
var accessList ethtypes.AccessList
if args.AccessList != nil {
accessList = *args.AccessList
}
msg := ethtypes.NewMessage(addr, args.To, nonce, value, gas, gasPrice, input, accessList, false)
return msg, nil
}