!feat(deps): Upgrade cosmos-sdk to v0.46.0
(#1168)
* Reuse cosmos-sdk client library to create keyring Extracted from https://github.com/evmos/ethermint/pull/1168 Cleanup cmd code for easier to migration to cosmos-sdk 0.46 * Update cosmos-sdk v0.46 prepare for implementing cosmos-sdk feemarket and tx prioritization changelog refactor cmd use sdkmath fix lint fix unit tests fix unit test genesis fix unit tests fix unit test env setup fix unit tests fix unit tests register PrivKey impl fix extension options fix lint fix unit tests make HandlerOption.Validate private gofumpt fix msg response decoding fix sim test bump cosmos-sdk version fix sim test sdk 46 fix unit test fix unit tests update ibc-go
This commit is contained in:
parent
36cbb52004
commit
29d3abcf09
@ -45,6 +45,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||||||
* (evm) [\#1174](https://github.com/evmos/ethermint/pull/1174) Don't allow eth txs with 0 in mempool.
|
* (evm) [\#1174](https://github.com/evmos/ethermint/pull/1174) Don't allow eth txs with 0 in mempool.
|
||||||
* (ante) [#1176](https://github.com/evmos/ethermint/pull/1176) Fix invalid tx hashes; Remove `Size_` field and validate `Hash`/`From` fields in ante handler,
|
* (ante) [#1176](https://github.com/evmos/ethermint/pull/1176) Fix invalid tx hashes; Remove `Size_` field and validate `Hash`/`From` fields in ante handler,
|
||||||
recompute eth tx hashes in JSON-RPC APIs to fix old blocks.
|
recompute eth tx hashes in JSON-RPC APIs to fix old blocks.
|
||||||
|
* (deps) [#1168](https://github.com/evmos/ethermint/pull/1168) Upgrade cosmos-sdk to v0.46.
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
|
|
||||||
@ -278,7 +280,7 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
|
|
||||||
expFee := txData.Fee()
|
expFee := txData.Fee()
|
||||||
invalidFee := new(big.Int).Add(expFee, big.NewInt(1))
|
invalidFee := new(big.Int).Add(expFee, big.NewInt(1))
|
||||||
invalidFeeAmount := sdk.Coins{sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewIntFromBigInt(invalidFee))}
|
invalidFeeAmount := sdk.Coins{sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewIntFromBigInt(invalidFee))}
|
||||||
txBuilder.SetFeeAmount(invalidFeeAmount)
|
txBuilder.SetFeeAmount(invalidFeeAmount)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
}, false, false, false,
|
}, false, false, false,
|
||||||
@ -303,7 +305,7 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
"success - DeliverTx EIP712 signed Cosmos Tx with MsgSend",
|
"success - DeliverTx EIP712 signed Cosmos Tx with MsgSend",
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
from := acc.GetAddress()
|
from := acc.GetAddress()
|
||||||
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9000-1", gas, amount)
|
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9000-1", gas, amount)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
@ -313,7 +315,7 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
"success - DeliverTx EIP712 signed Cosmos Tx with DelegateMsg",
|
"success - DeliverTx EIP712 signed Cosmos Tx with DelegateMsg",
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
from := acc.GetAddress()
|
from := acc.GetAddress()
|
||||||
coinAmount := sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20))
|
coinAmount := sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20))
|
||||||
amount := sdk.NewCoins(coinAmount)
|
amount := sdk.NewCoins(coinAmount)
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
txBuilder := suite.CreateTestEIP712TxBuilderMsgDelegate(from, privKey, "ethermint_9000-1", gas, amount)
|
txBuilder := suite.CreateTestEIP712TxBuilderMsgDelegate(from, privKey, "ethermint_9000-1", gas, amount)
|
||||||
@ -324,7 +326,7 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
"fails - DeliverTx EIP712 signed Cosmos Tx with wrong Chain ID",
|
"fails - DeliverTx EIP712 signed Cosmos Tx with wrong Chain ID",
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
from := acc.GetAddress()
|
from := acc.GetAddress()
|
||||||
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9002-1", gas, amount)
|
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9002-1", gas, amount)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
@ -334,11 +336,11 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
"fails - DeliverTx EIP712 signed Cosmos Tx with different gas fees",
|
"fails - DeliverTx EIP712 signed Cosmos Tx with different gas fees",
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
from := acc.GetAddress()
|
from := acc.GetAddress()
|
||||||
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
||||||
txBuilder.SetGasLimit(uint64(300000))
|
txBuilder.SetGasLimit(uint64(300000))
|
||||||
txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(30))))
|
txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(30))))
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
}, false, false, false,
|
}, false, false, false,
|
||||||
},
|
},
|
||||||
@ -346,7 +348,7 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
"fails - DeliverTx EIP712 signed Cosmos Tx with empty signature",
|
"fails - DeliverTx EIP712 signed Cosmos Tx with empty signature",
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
from := acc.GetAddress()
|
from := acc.GetAddress()
|
||||||
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
||||||
sigsV2 := signing.SignatureV2{}
|
sigsV2 := signing.SignatureV2{}
|
||||||
@ -358,7 +360,7 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
"fails - DeliverTx EIP712 signed Cosmos Tx with invalid sequence",
|
"fails - DeliverTx EIP712 signed Cosmos Tx with invalid sequence",
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
from := acc.GetAddress()
|
from := acc.GetAddress()
|
||||||
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
||||||
nonce, err := suite.app.AccountKeeper.GetSequence(suite.ctx, acc.GetAddress())
|
nonce, err := suite.app.AccountKeeper.GetSequence(suite.ctx, acc.GetAddress())
|
||||||
@ -378,7 +380,7 @@ func (suite AnteTestSuite) TestAnteHandler() {
|
|||||||
"fails - DeliverTx EIP712 signed Cosmos Tx with invalid signMode",
|
"fails - DeliverTx EIP712 signed Cosmos Tx with invalid signMode",
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
from := acc.GetAddress()
|
from := acc.GetAddress()
|
||||||
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
txBuilder := suite.CreateTestEIP712TxBuilderMsgSend(from, privKey, "ethermint_9001-1", gas, amount)
|
||||||
nonce, err := suite.app.AccountKeeper.GetSequence(suite.ctx, acc.GetAddress())
|
nonce, err := suite.app.AccountKeeper.GetSequence(suite.ctx, acc.GetAddress())
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||||
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
|
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth/legacy/legacytx"
|
"github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx"
|
||||||
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
|
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
|
||||||
|
|
||||||
ethcrypto "github.com/ethereum/go-ethereum/crypto"
|
ethcrypto "github.com/ethereum/go-ethereum/crypto"
|
||||||
@ -171,7 +171,7 @@ func VerifySignature(
|
|||||||
Amount: tx.GetFee(),
|
Amount: tx.GetFee(),
|
||||||
Gas: tx.GetGas(),
|
Gas: tx.GetGas(),
|
||||||
},
|
},
|
||||||
msgs, tx.GetMemo(),
|
msgs, tx.GetMemo(), tx.GetTip(),
|
||||||
)
|
)
|
||||||
|
|
||||||
signerChainID, err := ethermint.ParseChainID(signerData.ChainID)
|
signerChainID, err := ethermint.ParseChainID(signerData.ChainID)
|
||||||
@ -188,13 +188,7 @@ func VerifySignature(
|
|||||||
return sdkerrors.Wrap(sdkerrors.ErrUnknownExtensionOptions, "tx doesnt contain expected amount of extension options")
|
return sdkerrors.Wrap(sdkerrors.ErrUnknownExtensionOptions, "tx doesnt contain expected amount of extension options")
|
||||||
}
|
}
|
||||||
|
|
||||||
var optIface ethermint.ExtensionOptionsWeb3TxI
|
extOpt, ok := opts[0].GetCachedValue().(*ethermint.ExtensionOptionsWeb3Tx)
|
||||||
|
|
||||||
if err := ethermintCodec.UnpackAny(opts[0], &optIface); err != nil {
|
|
||||||
return sdkerrors.Wrap(err, "failed to proto-unpack ExtensionOptionsWeb3Tx")
|
|
||||||
}
|
|
||||||
|
|
||||||
extOpt, ok := optIface.(*ethermint.ExtensionOptionsWeb3Tx)
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return sdkerrors.Wrap(sdkerrors.ErrInvalidChainID, "unknown extension option")
|
return sdkerrors.Wrap(sdkerrors.ErrInvalidChainID, "unknown extension option")
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
|
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||||
@ -128,7 +130,7 @@ func (avd EthAccountVerificationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx
|
|||||||
"the sender is not EOA: address %s, codeHash <%s>", fromAddr, acct.CodeHash)
|
"the sender is not EOA: address %s, codeHash <%s>", fromAddr, acct.CodeHash)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := evmkeeper.CheckSenderBalance(sdk.NewIntFromBigInt(acct.Balance), txData); err != nil {
|
if err := evmkeeper.CheckSenderBalance(sdkmath.NewIntFromBigInt(acct.Balance), txData); err != nil {
|
||||||
return ctx, sdkerrors.Wrap(err, "failed to check sender balance")
|
return ctx, sdkerrors.Wrap(err, "failed to check sender balance")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -455,7 +457,7 @@ func (vbd EthValidateBasicDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simu
|
|||||||
return ctx, sdkerrors.Wrap(ethtypes.ErrTxTypeNotSupported, "dynamic fee tx not supported")
|
return ctx, sdkerrors.Wrap(ethtypes.ErrTxTypeNotSupported, "dynamic fee tx not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
txFee = txFee.Add(sdk.NewCoin(params.EvmDenom, sdk.NewIntFromBigInt(txData.Fee())))
|
txFee = txFee.Add(sdk.NewCoin(params.EvmDenom, sdkmath.NewIntFromBigInt(txData.Fee())))
|
||||||
}
|
}
|
||||||
|
|
||||||
authInfo := protoTx.AuthInfo
|
authInfo := protoTx.AuthInfo
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package ante_test
|
package ante_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
@ -234,25 +235,25 @@ func (suite AnteTestSuite) TestEthGasConsumeDecorator() {
|
|||||||
expPass bool
|
expPass bool
|
||||||
expPanic bool
|
expPanic bool
|
||||||
}{
|
}{
|
||||||
{"invalid transaction type", &invalidTx{}, 0, func() {}, false, false},
|
{"invalid transaction type", &invalidTx{}, math.MaxUint64, func() {}, false, false},
|
||||||
{
|
{
|
||||||
"sender not found",
|
"sender not found",
|
||||||
evmtypes.NewTxContract(suite.app.EvmKeeper.ChainID(), 1, big.NewInt(10), 1000, big.NewInt(1), nil, nil, nil, nil),
|
evmtypes.NewTxContract(suite.app.EvmKeeper.ChainID(), 1, big.NewInt(10), 1000, big.NewInt(1), nil, nil, nil, nil),
|
||||||
0,
|
math.MaxUint64,
|
||||||
func() {},
|
func() {},
|
||||||
false, false,
|
false, false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"gas limit too low",
|
"gas limit too low",
|
||||||
tx,
|
tx,
|
||||||
0,
|
math.MaxUint64,
|
||||||
func() {},
|
func() {},
|
||||||
false, false,
|
false, false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"not enough balance for fees",
|
"not enough balance for fees",
|
||||||
tx2,
|
tx2,
|
||||||
0,
|
math.MaxUint64,
|
||||||
func() {},
|
func() {},
|
||||||
false, false,
|
false, false,
|
||||||
},
|
},
|
||||||
|
@ -3,6 +3,7 @@ package ante_test
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||||
@ -31,9 +32,9 @@ func (suite AnteTestSuite) TestGasWantedDecorator() {
|
|||||||
testMsg := banktypes.MsgSend{
|
testMsg := banktypes.MsgSend{
|
||||||
FromAddress: "evmos1x8fhpj9nmhqk8z9kpgjt95ck2xwyue0ptzkucp",
|
FromAddress: "evmos1x8fhpj9nmhqk8z9kpgjt95ck2xwyue0ptzkucp",
|
||||||
ToAddress: "evmos1dx67l23hz9l0k9hcher8xz04uj7wf3yu26l2yn",
|
ToAddress: "evmos1dx67l23hz9l0k9hcher8xz04uj7wf3yu26l2yn",
|
||||||
Amount: sdk.Coins{sdk.Coin{Amount: sdk.NewInt(10), Denom: denom}},
|
Amount: sdk.Coins{sdk.Coin{Amount: sdkmath.NewInt(10), Denom: denom}},
|
||||||
}
|
}
|
||||||
txBuilder := suite.CreateTestCosmosTxBuilder(sdk.NewInt(10), "stake", &testMsg)
|
txBuilder := suite.CreateTestCosmosTxBuilder(sdkmath.NewInt(10), "stake", &testMsg)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -67,7 +68,7 @@ func (suite AnteTestSuite) TestGasWantedDecorator() {
|
|||||||
"EIP712 message",
|
"EIP712 message",
|
||||||
200000,
|
200000,
|
||||||
func() sdk.Tx {
|
func() sdk.Tx {
|
||||||
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
amount := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
gas := uint64(200000)
|
gas := uint64(200000)
|
||||||
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, from.Bytes())
|
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, from.Bytes())
|
||||||
suite.Require().NoError(acc.SetSequence(1))
|
suite.Require().NoError(acc.SetSequence(1))
|
||||||
|
@ -3,6 +3,7 @@ package ante_test
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||||
@ -25,7 +26,7 @@ func (s AnteTestSuite) TestMinGasPriceDecorator() {
|
|||||||
testMsg := banktypes.MsgSend{
|
testMsg := banktypes.MsgSend{
|
||||||
FromAddress: "evmos1x8fhpj9nmhqk8z9kpgjt95ck2xwyue0ptzkucp",
|
FromAddress: "evmos1x8fhpj9nmhqk8z9kpgjt95ck2xwyue0ptzkucp",
|
||||||
ToAddress: "evmos1dx67l23hz9l0k9hcher8xz04uj7wf3yu26l2yn",
|
ToAddress: "evmos1dx67l23hz9l0k9hcher8xz04uj7wf3yu26l2yn",
|
||||||
Amount: sdk.Coins{sdk.Coin{Amount: sdk.NewInt(10), Denom: denom}},
|
Amount: sdk.Coins{sdk.Coin{Amount: sdkmath.NewInt(10), Denom: denom}},
|
||||||
}
|
}
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
@ -49,7 +50,7 @@ func (s AnteTestSuite) TestMinGasPriceDecorator() {
|
|||||||
params.MinGasPrice = sdk.ZeroDec()
|
params.MinGasPrice = sdk.ZeroDec()
|
||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
||||||
|
|
||||||
txBuilder := s.CreateTestCosmosTxBuilder(sdk.NewInt(0), denom, &testMsg)
|
txBuilder := s.CreateTestCosmosTxBuilder(sdkmath.NewInt(0), denom, &testMsg)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
@ -62,7 +63,7 @@ func (s AnteTestSuite) TestMinGasPriceDecorator() {
|
|||||||
params.MinGasPrice = sdk.ZeroDec()
|
params.MinGasPrice = sdk.ZeroDec()
|
||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
||||||
|
|
||||||
txBuilder := s.CreateTestCosmosTxBuilder(sdk.NewInt(10), denom, &testMsg)
|
txBuilder := s.CreateTestCosmosTxBuilder(sdkmath.NewInt(10), denom, &testMsg)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
@ -75,7 +76,7 @@ func (s AnteTestSuite) TestMinGasPriceDecorator() {
|
|||||||
params.MinGasPrice = sdk.NewDec(10)
|
params.MinGasPrice = sdk.NewDec(10)
|
||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
||||||
|
|
||||||
txBuilder := s.CreateTestCosmosTxBuilder(sdk.NewInt(10), denom, &testMsg)
|
txBuilder := s.CreateTestCosmosTxBuilder(sdkmath.NewInt(10), denom, &testMsg)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
@ -88,7 +89,7 @@ func (s AnteTestSuite) TestMinGasPriceDecorator() {
|
|||||||
params.MinGasPrice = sdk.NewDec(10)
|
params.MinGasPrice = sdk.NewDec(10)
|
||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
||||||
|
|
||||||
txBuilder := s.CreateTestCosmosTxBuilder(sdk.NewInt(0), denom, &testMsg)
|
txBuilder := s.CreateTestCosmosTxBuilder(sdkmath.NewInt(0), denom, &testMsg)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
@ -101,7 +102,7 @@ func (s AnteTestSuite) TestMinGasPriceDecorator() {
|
|||||||
params.MinGasPrice = sdk.NewDec(10)
|
params.MinGasPrice = sdk.NewDec(10)
|
||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
||||||
|
|
||||||
txBuilder := s.CreateTestCosmosTxBuilder(sdk.NewInt(10), "stake", &testMsg)
|
txBuilder := s.CreateTestCosmosTxBuilder(sdkmath.NewInt(10), "stake", &testMsg)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
@ -160,9 +161,9 @@ func (s AnteTestSuite) TestEthMinGasPriceDecorator() {
|
|||||||
testMsg := banktypes.MsgSend{
|
testMsg := banktypes.MsgSend{
|
||||||
FromAddress: "evmos1x8fhpj9nmhqk8z9kpgjt95ck2xwyue0ptzkucp",
|
FromAddress: "evmos1x8fhpj9nmhqk8z9kpgjt95ck2xwyue0ptzkucp",
|
||||||
ToAddress: "evmos1dx67l23hz9l0k9hcher8xz04uj7wf3yu26l2yn",
|
ToAddress: "evmos1dx67l23hz9l0k9hcher8xz04uj7wf3yu26l2yn",
|
||||||
Amount: sdk.Coins{sdk.Coin{Amount: sdk.NewInt(10), Denom: denom}},
|
Amount: sdk.Coins{sdk.Coin{Amount: sdkmath.NewInt(10), Denom: denom}},
|
||||||
}
|
}
|
||||||
txBuilder := s.CreateTestCosmosTxBuilder(sdk.NewInt(0), denom, &testMsg)
|
txBuilder := s.CreateTestCosmosTxBuilder(sdkmath.NewInt(0), denom, &testMsg)
|
||||||
return txBuilder.GetTx()
|
return txBuilder.GetTx()
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
@ -291,7 +292,7 @@ func (s AnteTestSuite) TestEthMinGasPriceDecorator() {
|
|||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
||||||
|
|
||||||
feemarketParams := s.app.FeeMarketKeeper.GetParams(s.ctx)
|
feemarketParams := s.app.FeeMarketKeeper.GetParams(s.ctx)
|
||||||
feemarketParams.BaseFee = sdk.NewInt(10)
|
feemarketParams.BaseFee = sdkmath.NewInt(10)
|
||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, feemarketParams)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, feemarketParams)
|
||||||
|
|
||||||
msg := s.BuildTestEthTx(from, to, nil, make([]byte, 0), nil, big.NewInt(1000), big.NewInt(0), &emptyAccessList)
|
msg := s.BuildTestEthTx(from, to, nil, make([]byte, 0), nil, big.NewInt(1000), big.NewInt(0), &emptyAccessList)
|
||||||
@ -308,7 +309,7 @@ func (s AnteTestSuite) TestEthMinGasPriceDecorator() {
|
|||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, params)
|
||||||
|
|
||||||
feemarketParams := s.app.FeeMarketKeeper.GetParams(s.ctx)
|
feemarketParams := s.app.FeeMarketKeeper.GetParams(s.ctx)
|
||||||
feemarketParams.BaseFee = sdk.NewInt(10)
|
feemarketParams.BaseFee = sdkmath.NewInt(10)
|
||||||
s.app.FeeMarketKeeper.SetParams(s.ctx, feemarketParams)
|
s.app.FeeMarketKeeper.SetParams(s.ctx, feemarketParams)
|
||||||
|
|
||||||
msg := s.BuildTestEthTx(from, to, nil, make([]byte, 0), nil, big.NewInt(1000), big.NewInt(101), &emptyAccessList)
|
msg := s.BuildTestEthTx(from, to, nil, make([]byte, 0), nil, big.NewInt(1000), big.NewInt(101), &emptyAccessList)
|
||||||
|
@ -8,8 +8,8 @@ import (
|
|||||||
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
|
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
|
|
||||||
ibcante "github.com/cosmos/ibc-go/v4/modules/core/ante"
|
ibcante "github.com/cosmos/ibc-go/v5/modules/core/ante"
|
||||||
ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper"
|
ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper"
|
||||||
|
|
||||||
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
||||||
)
|
)
|
||||||
@ -17,15 +17,17 @@ import (
|
|||||||
// HandlerOptions extend the SDK's AnteHandler options by requiring the IBC
|
// HandlerOptions extend the SDK's AnteHandler options by requiring the IBC
|
||||||
// channel keeper, EVM Keeper and Fee Market Keeper.
|
// channel keeper, EVM Keeper and Fee Market Keeper.
|
||||||
type HandlerOptions struct {
|
type HandlerOptions struct {
|
||||||
AccountKeeper evmtypes.AccountKeeper
|
AccountKeeper evmtypes.AccountKeeper
|
||||||
BankKeeper evmtypes.BankKeeper
|
BankKeeper evmtypes.BankKeeper
|
||||||
IBCKeeper *ibckeeper.Keeper
|
IBCKeeper *ibckeeper.Keeper
|
||||||
FeeMarketKeeper evmtypes.FeeMarketKeeper
|
FeeMarketKeeper evmtypes.FeeMarketKeeper
|
||||||
EvmKeeper EVMKeeper
|
EvmKeeper EVMKeeper
|
||||||
FeegrantKeeper ante.FeegrantKeeper
|
FeegrantKeeper ante.FeegrantKeeper
|
||||||
SignModeHandler authsigning.SignModeHandler
|
SignModeHandler authsigning.SignModeHandler
|
||||||
SigGasConsumer func(meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params) error
|
SigGasConsumer func(meter sdk.GasMeter, sig signing.SignatureV2, params authtypes.Params) error
|
||||||
MaxTxGasWanted uint64
|
MaxTxGasWanted uint64
|
||||||
|
ExtensionOptionChecker ante.ExtensionOptionChecker
|
||||||
|
TxFeeChecker ante.TxFeeChecker
|
||||||
}
|
}
|
||||||
|
|
||||||
func (options HandlerOptions) validate() error {
|
func (options HandlerOptions) validate() error {
|
||||||
@ -67,21 +69,20 @@ func newCosmosAnteHandler(options HandlerOptions) sdk.AnteHandler {
|
|||||||
return sdk.ChainAnteDecorators(
|
return sdk.ChainAnteDecorators(
|
||||||
RejectMessagesDecorator{}, // reject MsgEthereumTxs
|
RejectMessagesDecorator{}, // reject MsgEthereumTxs
|
||||||
ante.NewSetUpContextDecorator(),
|
ante.NewSetUpContextDecorator(),
|
||||||
ante.NewRejectExtensionOptionsDecorator(),
|
ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker),
|
||||||
ante.NewMempoolFeeDecorator(),
|
|
||||||
NewMinGasPriceDecorator(options.FeeMarketKeeper, options.EvmKeeper),
|
NewMinGasPriceDecorator(options.FeeMarketKeeper, options.EvmKeeper),
|
||||||
ante.NewValidateBasicDecorator(),
|
ante.NewValidateBasicDecorator(),
|
||||||
ante.NewTxTimeoutHeightDecorator(),
|
ante.NewTxTimeoutHeightDecorator(),
|
||||||
ante.NewValidateMemoDecorator(options.AccountKeeper),
|
ante.NewValidateMemoDecorator(options.AccountKeeper),
|
||||||
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
|
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
|
||||||
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper),
|
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker),
|
||||||
// SetPubKeyDecorator must be called before all signature verification decorators
|
// SetPubKeyDecorator must be called before all signature verification decorators
|
||||||
ante.NewSetPubKeyDecorator(options.AccountKeeper),
|
ante.NewSetPubKeyDecorator(options.AccountKeeper),
|
||||||
ante.NewValidateSigCountDecorator(options.AccountKeeper),
|
ante.NewValidateSigCountDecorator(options.AccountKeeper),
|
||||||
ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer),
|
ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer),
|
||||||
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
|
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
|
||||||
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
|
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
|
||||||
ibcante.NewAnteDecorator(options.IBCKeeper),
|
ibcante.NewRedundancyDecorator(options.IBCKeeper),
|
||||||
NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
|
NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -92,13 +93,12 @@ func newCosmosAnteHandlerEip712(options HandlerOptions) sdk.AnteHandler {
|
|||||||
ante.NewSetUpContextDecorator(),
|
ante.NewSetUpContextDecorator(),
|
||||||
// NOTE: extensions option decorator removed
|
// NOTE: extensions option decorator removed
|
||||||
// ante.NewRejectExtensionOptionsDecorator(),
|
// ante.NewRejectExtensionOptionsDecorator(),
|
||||||
ante.NewMempoolFeeDecorator(),
|
|
||||||
NewMinGasPriceDecorator(options.FeeMarketKeeper, options.EvmKeeper),
|
NewMinGasPriceDecorator(options.FeeMarketKeeper, options.EvmKeeper),
|
||||||
ante.NewValidateBasicDecorator(),
|
ante.NewValidateBasicDecorator(),
|
||||||
ante.NewTxTimeoutHeightDecorator(),
|
ante.NewTxTimeoutHeightDecorator(),
|
||||||
ante.NewValidateMemoDecorator(options.AccountKeeper),
|
ante.NewValidateMemoDecorator(options.AccountKeeper),
|
||||||
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
|
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
|
||||||
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper),
|
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker),
|
||||||
// SetPubKeyDecorator must be called before all signature verification decorators
|
// SetPubKeyDecorator must be called before all signature verification decorators
|
||||||
ante.NewSetPubKeyDecorator(options.AccountKeeper),
|
ante.NewSetPubKeyDecorator(options.AccountKeeper),
|
||||||
ante.NewValidateSigCountDecorator(options.AccountKeeper),
|
ante.NewValidateSigCountDecorator(options.AccountKeeper),
|
||||||
@ -106,7 +106,7 @@ func newCosmosAnteHandlerEip712(options HandlerOptions) sdk.AnteHandler {
|
|||||||
// Note: signature verification uses EIP instead of the cosmos signature validator
|
// Note: signature verification uses EIP instead of the cosmos signature validator
|
||||||
NewEip712SigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
|
NewEip712SigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
|
||||||
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
|
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
|
||||||
ibcante.NewAnteDecorator(options.IBCKeeper),
|
ibcante.NewRedundancyDecorator(options.IBCKeeper),
|
||||||
NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
|
NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,11 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth/legacy/legacytx"
|
"github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx"
|
||||||
types2 "github.com/cosmos/cosmos-sdk/x/bank/types"
|
types2 "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
types3 "github.com/cosmos/cosmos-sdk/x/staking/types"
|
types3 "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
@ -17,8 +20,6 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||||
|
|
||||||
"github.com/stretchr/testify/suite"
|
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/tx"
|
"github.com/cosmos/cosmos-sdk/client/tx"
|
||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
@ -78,7 +79,7 @@ func (suite *AnteTestSuite) SetupTest() {
|
|||||||
evmGenesis := evmtypes.DefaultGenesisState()
|
evmGenesis := evmtypes.DefaultGenesisState()
|
||||||
evmGenesis.Params.AllowUnprotectedTxs = false
|
evmGenesis.Params.AllowUnprotectedTxs = false
|
||||||
if !suite.enableLondonHF {
|
if !suite.enableLondonHF {
|
||||||
maxInt := sdk.NewInt(math.MaxInt64)
|
maxInt := sdkmath.NewInt(math.MaxInt64)
|
||||||
evmGenesis.Params.ChainConfig.LondonBlock = &maxInt
|
evmGenesis.Params.ChainConfig.LondonBlock = &maxInt
|
||||||
evmGenesis.Params.ChainConfig.ArrowGlacierBlock = &maxInt
|
evmGenesis.Params.ChainConfig.ArrowGlacierBlock = &maxInt
|
||||||
evmGenesis.Params.ChainConfig.GrayGlacierBlock = &maxInt
|
evmGenesis.Params.ChainConfig.GrayGlacierBlock = &maxInt
|
||||||
@ -197,7 +198,7 @@ func (suite *AnteTestSuite) CreateTestTxBuilder(
|
|||||||
txData, err := evmtypes.UnpackTxData(msg.Data)
|
txData, err := evmtypes.UnpackTxData(msg.Data)
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
|
|
||||||
fees := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewIntFromBigInt(txData.Fee())))
|
fees := sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewIntFromBigInt(txData.Fee())))
|
||||||
builder.SetFeeAmount(fees)
|
builder.SetFeeAmount(fees)
|
||||||
builder.SetGasLimit(msg.GetGas())
|
builder.SetGasLimit(msg.GetGas())
|
||||||
|
|
||||||
@ -240,7 +241,7 @@ func (suite *AnteTestSuite) CreateTestTxBuilder(
|
|||||||
return txBuilder
|
return txBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *AnteTestSuite) CreateTestCosmosTxBuilder(gasPrice sdk.Int, denom string, msgs ...sdk.Msg) client.TxBuilder {
|
func (suite *AnteTestSuite) CreateTestCosmosTxBuilder(gasPrice sdkmath.Int, denom string, msgs ...sdk.Msg) client.TxBuilder {
|
||||||
txBuilder := suite.clientCtx.TxConfig.NewTxBuilder()
|
txBuilder := suite.clientCtx.TxConfig.NewTxBuilder()
|
||||||
|
|
||||||
txBuilder.SetGasLimit(TestGasLimit)
|
txBuilder.SetGasLimit(TestGasLimit)
|
||||||
@ -254,7 +255,7 @@ func (suite *AnteTestSuite) CreateTestCosmosTxBuilder(gasPrice sdk.Int, denom st
|
|||||||
func (suite *AnteTestSuite) CreateTestEIP712TxBuilderMsgSend(from sdk.AccAddress, priv cryptotypes.PrivKey, chainId string, gas uint64, gasAmount sdk.Coins) client.TxBuilder {
|
func (suite *AnteTestSuite) CreateTestEIP712TxBuilderMsgSend(from sdk.AccAddress, priv cryptotypes.PrivKey, chainId string, gas uint64, gasAmount sdk.Coins) client.TxBuilder {
|
||||||
// Build MsgSend
|
// Build MsgSend
|
||||||
recipient := sdk.AccAddress(common.Address{}.Bytes())
|
recipient := sdk.AccAddress(common.Address{}.Bytes())
|
||||||
msgSend := types2.NewMsgSend(from, recipient, sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(1))))
|
msgSend := types2.NewMsgSend(from, recipient, sdk.NewCoins(sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(1))))
|
||||||
return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgSend)
|
return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgSend)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,7 +263,7 @@ func (suite *AnteTestSuite) CreateTestEIP712TxBuilderMsgDelegate(from sdk.AccAdd
|
|||||||
// Build MsgSend
|
// Build MsgSend
|
||||||
valEthAddr := tests.GenerateAddress()
|
valEthAddr := tests.GenerateAddress()
|
||||||
valAddr := sdk.ValAddress(valEthAddr.Bytes())
|
valAddr := sdk.ValAddress(valEthAddr.Bytes())
|
||||||
msgSend := types3.NewMsgDelegate(from, valAddr, sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewInt(20)))
|
msgSend := types3.NewMsgDelegate(from, valAddr, sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewInt(20)))
|
||||||
return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgSend)
|
return suite.CreateTestEIP712CosmosTxBuilder(from, priv, chainId, gas, gasAmount, msgSend)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +284,7 @@ func (suite *AnteTestSuite) CreateTestEIP712CosmosTxBuilder(
|
|||||||
fee := legacytx.NewStdFee(gas, gasAmount)
|
fee := legacytx.NewStdFee(gas, gasAmount)
|
||||||
accNumber := suite.app.AccountKeeper.GetAccount(suite.ctx, from).GetAccountNumber()
|
accNumber := suite.app.AccountKeeper.GetAccount(suite.ctx, from).GetAccountNumber()
|
||||||
|
|
||||||
data := legacytx.StdSignBytes(chainId, accNumber, nonce, 0, fee, []sdk.Msg{msg}, "")
|
data := legacytx.StdSignBytes(chainId, accNumber, nonce, 0, fee, []sdk.Msg{msg}, "", nil)
|
||||||
typedData, err := eip712.WrapTxToTypedData(ethermintCodec, ethChainId, msg, data, &eip712.FeeDelegationOptions{
|
typedData, err := eip712.WrapTxToTypedData(ethermintCodec, ethChainId, msg, data, &eip712.FeeDelegationOptions{
|
||||||
FeePayer: from,
|
FeePayer: from,
|
||||||
})
|
})
|
||||||
|
196
app/app.go
196
app/app.go
@ -19,7 +19,6 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
|
"github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
|
||||||
"github.com/cosmos/cosmos-sdk/client/rpc"
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/codec/types"
|
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
"github.com/cosmos/cosmos-sdk/server/api"
|
"github.com/cosmos/cosmos-sdk/server/api"
|
||||||
@ -27,11 +26,13 @@ import (
|
|||||||
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
||||||
"github.com/cosmos/cosmos-sdk/simapp"
|
"github.com/cosmos/cosmos-sdk/simapp"
|
||||||
simappparams "github.com/cosmos/cosmos-sdk/simapp/params"
|
simappparams "github.com/cosmos/cosmos-sdk/simapp/params"
|
||||||
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/types/module"
|
"github.com/cosmos/cosmos-sdk/types/module"
|
||||||
"github.com/cosmos/cosmos-sdk/version"
|
"github.com/cosmos/cosmos-sdk/version"
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||||
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||||
|
"github.com/cosmos/cosmos-sdk/x/auth/posthandler"
|
||||||
authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation"
|
authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation"
|
||||||
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
|
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
@ -62,8 +63,11 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/genutil"
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/gov"
|
"github.com/cosmos/cosmos-sdk/x/gov"
|
||||||
|
govclient "github.com/cosmos/cosmos-sdk/x/gov/client"
|
||||||
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
||||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||||
|
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||||
|
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
||||||
"github.com/cosmos/cosmos-sdk/x/mint"
|
"github.com/cosmos/cosmos-sdk/x/mint"
|
||||||
mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper"
|
mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper"
|
||||||
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||||
@ -83,15 +87,15 @@ import (
|
|||||||
upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
|
upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
|
||||||
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
|
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
|
||||||
|
|
||||||
"github.com/cosmos/ibc-go/v4/modules/apps/transfer"
|
"github.com/cosmos/ibc-go/v5/modules/apps/transfer"
|
||||||
ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper"
|
ibctransferkeeper "github.com/cosmos/ibc-go/v5/modules/apps/transfer/keeper"
|
||||||
ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types"
|
ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types"
|
||||||
ibc "github.com/cosmos/ibc-go/v4/modules/core"
|
ibc "github.com/cosmos/ibc-go/v5/modules/core"
|
||||||
ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client"
|
ibcclient "github.com/cosmos/ibc-go/v5/modules/core/02-client"
|
||||||
ibcclientclient "github.com/cosmos/ibc-go/v4/modules/core/02-client/client"
|
ibcclientclient "github.com/cosmos/ibc-go/v5/modules/core/02-client/client"
|
||||||
porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types"
|
porttypes "github.com/cosmos/ibc-go/v5/modules/core/05-port/types"
|
||||||
ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host"
|
ibchost "github.com/cosmos/ibc-go/v5/modules/core/24-host"
|
||||||
ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper"
|
ibckeeper "github.com/cosmos/ibc-go/v5/modules/core/keeper"
|
||||||
|
|
||||||
// unnamed import of statik for swagger UI support
|
// unnamed import of statik for swagger UI support
|
||||||
_ "github.com/evmos/ethermint/client/docs/statik"
|
_ "github.com/evmos/ethermint/client/docs/statik"
|
||||||
@ -100,7 +104,6 @@ import (
|
|||||||
srvflags "github.com/evmos/ethermint/server/flags"
|
srvflags "github.com/evmos/ethermint/server/flags"
|
||||||
ethermint "github.com/evmos/ethermint/types"
|
ethermint "github.com/evmos/ethermint/types"
|
||||||
"github.com/evmos/ethermint/x/evm"
|
"github.com/evmos/ethermint/x/evm"
|
||||||
evmrest "github.com/evmos/ethermint/x/evm/client/rest"
|
|
||||||
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
|
evmkeeper "github.com/evmos/ethermint/x/evm/keeper"
|
||||||
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
evmtypes "github.com/evmos/ethermint/x/evm/types"
|
||||||
"github.com/evmos/ethermint/x/feemarket"
|
"github.com/evmos/ethermint/x/feemarket"
|
||||||
@ -138,10 +141,10 @@ var (
|
|||||||
staking.AppModuleBasic{},
|
staking.AppModuleBasic{},
|
||||||
mint.AppModuleBasic{},
|
mint.AppModuleBasic{},
|
||||||
distr.AppModuleBasic{},
|
distr.AppModuleBasic{},
|
||||||
gov.NewAppModuleBasic(
|
gov.NewAppModuleBasic([]govclient.ProposalHandler{
|
||||||
paramsclient.ProposalHandler, distrclient.ProposalHandler, upgradeclient.ProposalHandler, upgradeclient.CancelProposalHandler,
|
paramsclient.ProposalHandler, distrclient.ProposalHandler, upgradeclient.LegacyProposalHandler, upgradeclient.LegacyCancelProposalHandler,
|
||||||
ibcclientclient.UpdateClientProposalHandler, ibcclientclient.UpgradeProposalHandler,
|
ibcclientclient.UpdateClientProposalHandler, ibcclientclient.UpgradeProposalHandler,
|
||||||
),
|
}),
|
||||||
params.AppModuleBasic{},
|
params.AppModuleBasic{},
|
||||||
crisis.AppModuleBasic{},
|
crisis.AppModuleBasic{},
|
||||||
slashing.AppModuleBasic{},
|
slashing.AppModuleBasic{},
|
||||||
@ -193,9 +196,9 @@ type EthermintApp struct {
|
|||||||
invCheckPeriod uint
|
invCheckPeriod uint
|
||||||
|
|
||||||
// keys to access the substores
|
// keys to access the substores
|
||||||
keys map[string]*sdk.KVStoreKey
|
keys map[string]*storetypes.KVStoreKey
|
||||||
tkeys map[string]*sdk.TransientStoreKey
|
tkeys map[string]*storetypes.TransientStoreKey
|
||||||
memKeys map[string]*sdk.MemoryStoreKey
|
memKeys map[string]*storetypes.MemoryStoreKey
|
||||||
|
|
||||||
// keepers
|
// keepers
|
||||||
AccountKeeper authkeeper.AccountKeeper
|
AccountKeeper authkeeper.AccountKeeper
|
||||||
@ -246,7 +249,7 @@ func NewEthermintApp(
|
|||||||
appOpts servertypes.AppOptions,
|
appOpts servertypes.AppOptions,
|
||||||
baseAppOptions ...func(*baseapp.BaseApp),
|
baseAppOptions ...func(*baseapp.BaseApp),
|
||||||
) *EthermintApp {
|
) *EthermintApp {
|
||||||
appCodec := encodingConfig.Marshaler
|
appCodec := encodingConfig.Codec
|
||||||
cdc := encodingConfig.Amino
|
cdc := encodingConfig.Amino
|
||||||
interfaceRegistry := encodingConfig.InterfaceRegistry
|
interfaceRegistry := encodingConfig.InterfaceRegistry
|
||||||
|
|
||||||
@ -293,7 +296,7 @@ func NewEthermintApp(
|
|||||||
// init params keeper and subspaces
|
// init params keeper and subspaces
|
||||||
app.ParamsKeeper = initParamsKeeper(appCodec, cdc, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])
|
app.ParamsKeeper = initParamsKeeper(appCodec, cdc, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])
|
||||||
// set the BaseApp's parameter store
|
// set the BaseApp's parameter store
|
||||||
bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable()))
|
bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()))
|
||||||
|
|
||||||
// add capability keeper and ScopeToModule for ibc module
|
// add capability keeper and ScopeToModule for ibc module
|
||||||
app.CapabilityKeeper = capabilitykeeper.NewKeeper(appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey])
|
app.CapabilityKeeper = capabilitykeeper.NewKeeper(appCodec, keys[capabilitytypes.StoreKey], memKeys[capabilitytypes.MemStoreKey])
|
||||||
@ -307,7 +310,7 @@ func NewEthermintApp(
|
|||||||
|
|
||||||
// use custom Ethermint account for contracts
|
// use custom Ethermint account for contracts
|
||||||
app.AccountKeeper = authkeeper.NewAccountKeeper(
|
app.AccountKeeper = authkeeper.NewAccountKeeper(
|
||||||
appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), ethermint.ProtoAccount, maccPerms,
|
appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), ethermint.ProtoAccount, maccPerms, sdk.GetConfig().GetBech32AccountAddrPrefix(),
|
||||||
)
|
)
|
||||||
app.BankKeeper = bankkeeper.NewBaseKeeper(
|
app.BankKeeper = bankkeeper.NewBaseKeeper(
|
||||||
appCodec, keys[banktypes.StoreKey], app.AccountKeeper, app.GetSubspace(banktypes.ModuleName), app.BlockedAddrs(),
|
appCodec, keys[banktypes.StoreKey], app.AccountKeeper, app.GetSubspace(banktypes.ModuleName), app.BlockedAddrs(),
|
||||||
@ -321,7 +324,7 @@ func NewEthermintApp(
|
|||||||
)
|
)
|
||||||
app.DistrKeeper = distrkeeper.NewKeeper(
|
app.DistrKeeper = distrkeeper.NewKeeper(
|
||||||
appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
|
appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
|
||||||
&stakingKeeper, authtypes.FeeCollectorName, app.ModuleAccountAddrs(),
|
&stakingKeeper, authtypes.FeeCollectorName,
|
||||||
)
|
)
|
||||||
app.SlashingKeeper = slashingkeeper.NewKeeper(
|
app.SlashingKeeper = slashingkeeper.NewKeeper(
|
||||||
appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, app.GetSubspace(slashingtypes.ModuleName),
|
appCodec, keys[slashingtypes.StoreKey], &stakingKeeper, app.GetSubspace(slashingtypes.ModuleName),
|
||||||
@ -330,7 +333,9 @@ func NewEthermintApp(
|
|||||||
app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName,
|
app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName,
|
||||||
)
|
)
|
||||||
app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper)
|
app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper)
|
||||||
app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp)
|
|
||||||
|
// set the governance module account as the authority for conducting upgrades
|
||||||
|
app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp, authtypes.NewModuleAddress(govtypes.ModuleName).String())
|
||||||
|
|
||||||
// register the staking hooks
|
// register the staking hooks
|
||||||
// NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks
|
// NOTE: stakingKeeper above is passed by reference, so that it will contain these hooks
|
||||||
@ -338,7 +343,7 @@ func NewEthermintApp(
|
|||||||
stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()),
|
stakingtypes.NewMultiStakingHooks(app.DistrKeeper.Hooks(), app.SlashingKeeper.Hooks()),
|
||||||
)
|
)
|
||||||
|
|
||||||
app.AuthzKeeper = authzkeeper.NewKeeper(keys[authzkeeper.StoreKey], appCodec, app.BaseApp.MsgServiceRouter())
|
app.AuthzKeeper = authzkeeper.NewKeeper(keys[authzkeeper.StoreKey], appCodec, app.MsgServiceRouter(), app.AccountKeeper)
|
||||||
|
|
||||||
tracer := cast.ToString(appOpts.Get(srvflags.EVMTracer))
|
tracer := cast.ToString(appOpts.Get(srvflags.EVMTracer))
|
||||||
|
|
||||||
@ -359,16 +364,20 @@ func NewEthermintApp(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// register the proposal types
|
// register the proposal types
|
||||||
govRouter := govtypes.NewRouter()
|
govRouter := govv1beta1.NewRouter()
|
||||||
govRouter.AddRoute(govtypes.RouterKey, govtypes.ProposalHandler).
|
govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler).
|
||||||
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)).
|
AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)).
|
||||||
AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)).
|
AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)).
|
||||||
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)).
|
AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)).
|
||||||
AddRoute(ibchost.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper))
|
AddRoute(ibchost.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper))
|
||||||
|
govConfig := govtypes.DefaultConfig()
|
||||||
|
/*
|
||||||
|
Example of setting gov params:
|
||||||
|
govConfig.MaxMetadataLen = 10000
|
||||||
|
*/
|
||||||
govKeeper := govkeeper.NewKeeper(
|
govKeeper := govkeeper.NewKeeper(
|
||||||
appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
|
appCodec, keys[govtypes.StoreKey], app.GetSubspace(govtypes.ModuleName), app.AccountKeeper, app.BankKeeper,
|
||||||
&stakingKeeper, govRouter,
|
&stakingKeeper, govRouter, app.MsgServiceRouter(), govConfig,
|
||||||
)
|
)
|
||||||
|
|
||||||
app.GovKeeper = *govKeeper.SetHooks(
|
app.GovKeeper = *govKeeper.SetHooks(
|
||||||
@ -417,15 +426,15 @@ func NewEthermintApp(
|
|||||||
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
|
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
|
||||||
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
|
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
|
||||||
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
|
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
|
||||||
|
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
|
||||||
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
|
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
|
||||||
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
|
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil),
|
||||||
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
||||||
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
||||||
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
|
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
|
||||||
upgrade.NewAppModule(app.UpgradeKeeper),
|
upgrade.NewAppModule(app.UpgradeKeeper),
|
||||||
evidence.NewAppModule(app.EvidenceKeeper),
|
evidence.NewAppModule(app.EvidenceKeeper),
|
||||||
params.NewAppModule(app.ParamsKeeper),
|
params.NewAppModule(app.ParamsKeeper),
|
||||||
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
|
|
||||||
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
|
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
|
||||||
|
|
||||||
// ibc modules
|
// ibc modules
|
||||||
@ -440,7 +449,7 @@ func NewEthermintApp(
|
|||||||
// there is nothing left over in the validator fee pool, so as to keep the
|
// there is nothing left over in the validator fee pool, so as to keep the
|
||||||
// CanWithdrawInvariant invariant.
|
// CanWithdrawInvariant invariant.
|
||||||
// NOTE: upgrade module must go first to handle software upgrades.
|
// NOTE: upgrade module must go first to handle software upgrades.
|
||||||
// NOTE: staking module is required if HistoricalEntries param > 0.
|
// NOTE: staking module is required if HistoricalEntries param > 0
|
||||||
// NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC)
|
// NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC)
|
||||||
app.mm.SetOrderBeginBlockers(
|
app.mm.SetOrderBeginBlockers(
|
||||||
upgradetypes.ModuleName,
|
upgradetypes.ModuleName,
|
||||||
@ -493,6 +502,7 @@ func NewEthermintApp(
|
|||||||
|
|
||||||
// NOTE: The genutils module must occur after staking so that pools are
|
// NOTE: The genutils module must occur after staking so that pools are
|
||||||
// properly initialized with tokens from genesis accounts.
|
// properly initialized with tokens from genesis accounts.
|
||||||
|
// NOTE: The genutils module must also occur after auth so that it can access the params from auth.
|
||||||
// NOTE: Capability module must occur first so that it can initialize any capabilities
|
// NOTE: Capability module must occur first so that it can initialize any capabilities
|
||||||
// so that other modules that want to create or claim capabilities afterwards in InitChain
|
// so that other modules that want to create or claim capabilities afterwards in InitChain
|
||||||
// can do so safely.
|
// can do so safely.
|
||||||
@ -524,37 +534,29 @@ func NewEthermintApp(
|
|||||||
crisistypes.ModuleName,
|
crisistypes.ModuleName,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Uncomment if you want to set a custom migration order here.
|
||||||
|
// app.mm.SetOrderMigrations(custom order)
|
||||||
|
|
||||||
app.mm.RegisterInvariants(&app.CrisisKeeper)
|
app.mm.RegisterInvariants(&app.CrisisKeeper)
|
||||||
app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
|
app.mm.RegisterRoutes(app.Router(), app.QueryRouter(), encodingConfig.Amino)
|
||||||
app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter())
|
app.configurator = module.NewConfigurator(app.appCodec, app.MsgServiceRouter(), app.GRPCQueryRouter())
|
||||||
app.mm.RegisterServices(app.configurator)
|
app.mm.RegisterServices(app.configurator)
|
||||||
|
|
||||||
|
// RegisterUpgradeHandlers is used for registering any on-chain upgrades.
|
||||||
|
// Make sure it's called after `app.mm` and `app.configurator` are set.
|
||||||
|
// app.RegisterUpgradeHandlers()
|
||||||
|
|
||||||
// add test gRPC service for testing gRPC queries in isolation
|
// add test gRPC service for testing gRPC queries in isolation
|
||||||
// testdata.RegisterTestServiceServer(app.GRPCQueryRouter(), testdata.TestServiceImpl{})
|
// testdata.RegisterTestServiceServer(app.GRPCQueryRouter(), testdata.TestServiceImpl{})
|
||||||
|
|
||||||
// create the simulation manager and define the order of the modules for deterministic simulations
|
// create the simulation manager and define the order of the modules for deterministic simulations
|
||||||
|
//
|
||||||
// NOTE: this is not required apps that don't use the simulator for fuzz testing
|
// NOTE: this is not required apps that don't use the simulator for fuzz testing
|
||||||
// transactions
|
// transactions
|
||||||
app.sm = module.NewSimulationManager(
|
overrideModules := map[string]module.AppModuleSimulation{
|
||||||
// Use custom RandomGenesisAccounts so that auth module could create random EthAccounts in genesis state when genesis.json not specified
|
authtypes.ModuleName: auth.NewAppModule(app.appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts),
|
||||||
auth.NewAppModule(appCodec, app.AccountKeeper, RandomGenesisAccounts),
|
}
|
||||||
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
|
app.sm = module.NewSimulationManagerFromAppModules(app.mm.Modules, overrideModules)
|
||||||
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
|
|
||||||
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
|
|
||||||
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
|
|
||||||
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
|
|
||||||
distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
|
||||||
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
|
|
||||||
params.NewAppModule(app.ParamsKeeper),
|
|
||||||
evidence.NewAppModule(app.EvidenceKeeper),
|
|
||||||
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
|
|
||||||
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
|
|
||||||
ibc.NewAppModule(app.IBCKeeper),
|
|
||||||
transferModule,
|
|
||||||
evm.NewAppModule(app.EvmKeeper, app.AccountKeeper),
|
|
||||||
feemarket.NewAppModule(app.FeeMarketKeeper),
|
|
||||||
)
|
|
||||||
|
|
||||||
app.sm.RegisterStoreDecoders()
|
app.sm.RegisterStoreDecoders()
|
||||||
|
|
||||||
@ -566,26 +568,22 @@ func NewEthermintApp(
|
|||||||
// initialize BaseApp
|
// initialize BaseApp
|
||||||
app.SetInitChainer(app.InitChainer)
|
app.SetInitChainer(app.InitChainer)
|
||||||
app.SetBeginBlocker(app.BeginBlocker)
|
app.SetBeginBlocker(app.BeginBlocker)
|
||||||
|
|
||||||
// use Ethermint's custom AnteHandler
|
|
||||||
|
|
||||||
maxGasWanted := cast.ToUint64(appOpts.Get(srvflags.EVMMaxTxGasWanted))
|
|
||||||
anteHandler, err := ante.NewAnteHandler(ante.HandlerOptions{
|
|
||||||
AccountKeeper: app.AccountKeeper,
|
|
||||||
BankKeeper: app.BankKeeper,
|
|
||||||
EvmKeeper: app.EvmKeeper,
|
|
||||||
FeegrantKeeper: app.FeeGrantKeeper,
|
|
||||||
IBCKeeper: app.IBCKeeper,
|
|
||||||
FeeMarketKeeper: app.FeeMarketKeeper,
|
|
||||||
SignModeHandler: encodingConfig.TxConfig.SignModeHandler(),
|
|
||||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
|
||||||
MaxTxGasWanted: maxGasWanted,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
app.SetAnteHandler(anteHandler)
|
|
||||||
app.SetEndBlocker(app.EndBlocker)
|
app.SetEndBlocker(app.EndBlocker)
|
||||||
|
app.setAnteHandler(encodingConfig.TxConfig, cast.ToUint64(appOpts.Get(srvflags.EVMMaxTxGasWanted)))
|
||||||
|
// In v0.46, the SDK introduces _postHandlers_. PostHandlers are like
|
||||||
|
// antehandlers, but are run _after_ the `runMsgs` execution. They are also
|
||||||
|
// defined as a chain, and have the same signature as antehandlers.
|
||||||
|
//
|
||||||
|
// In baseapp, postHandlers are run in the same store branch as `runMsgs`,
|
||||||
|
// meaning that both `runMsgs` and `postHandler` state will be committed if
|
||||||
|
// both are successful, and both will be reverted if any of the two fails.
|
||||||
|
//
|
||||||
|
// The SDK exposes a default empty postHandlers chain.
|
||||||
|
//
|
||||||
|
// Please note that changing any of the anteHandler or postHandler chain is
|
||||||
|
// likely to be a state-machine breaking change, which needs a coordinated
|
||||||
|
// upgrade.
|
||||||
|
app.setPostHandler()
|
||||||
|
|
||||||
if loadLatest {
|
if loadLatest {
|
||||||
if err := app.LoadLatestVersion(); err != nil {
|
if err := app.LoadLatestVersion(); err != nil {
|
||||||
@ -599,6 +597,37 @@ func NewEthermintApp(
|
|||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// use Ethermint's custom AnteHandler
|
||||||
|
func (app *EthermintApp) setAnteHandler(txConfig client.TxConfig, maxGasWanted uint64) {
|
||||||
|
anteHandler, err := ante.NewAnteHandler(ante.HandlerOptions{
|
||||||
|
AccountKeeper: app.AccountKeeper,
|
||||||
|
BankKeeper: app.BankKeeper,
|
||||||
|
SignModeHandler: txConfig.SignModeHandler(),
|
||||||
|
FeegrantKeeper: app.FeeGrantKeeper,
|
||||||
|
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||||
|
IBCKeeper: app.IBCKeeper,
|
||||||
|
EvmKeeper: app.EvmKeeper,
|
||||||
|
FeeMarketKeeper: app.FeeMarketKeeper,
|
||||||
|
MaxTxGasWanted: maxGasWanted,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.SetAnteHandler(anteHandler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (app *EthermintApp) setPostHandler() {
|
||||||
|
postHandler, err := posthandler.NewPostHandler(
|
||||||
|
posthandler.HandlerOptions{},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.SetPostHandler(postHandler)
|
||||||
|
}
|
||||||
|
|
||||||
// Name returns the name of the App
|
// Name returns the name of the App
|
||||||
func (app *EthermintApp) Name() string { return app.BaseApp.Name() }
|
func (app *EthermintApp) Name() string { return app.BaseApp.Name() }
|
||||||
|
|
||||||
@ -672,21 +701,21 @@ func (app *EthermintApp) InterfaceRegistry() types.InterfaceRegistry {
|
|||||||
// GetKey returns the KVStoreKey for the provided store key.
|
// GetKey returns the KVStoreKey for the provided store key.
|
||||||
//
|
//
|
||||||
// NOTE: This is solely to be used for testing purposes.
|
// NOTE: This is solely to be used for testing purposes.
|
||||||
func (app *EthermintApp) GetKey(storeKey string) *sdk.KVStoreKey {
|
func (app *EthermintApp) GetKey(storeKey string) *storetypes.KVStoreKey {
|
||||||
return app.keys[storeKey]
|
return app.keys[storeKey]
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTKey returns the TransientStoreKey for the provided store key.
|
// GetTKey returns the TransientStoreKey for the provided store key.
|
||||||
//
|
//
|
||||||
// NOTE: This is solely to be used for testing purposes.
|
// NOTE: This is solely to be used for testing purposes.
|
||||||
func (app *EthermintApp) GetTKey(storeKey string) *sdk.TransientStoreKey {
|
func (app *EthermintApp) GetTKey(storeKey string) *storetypes.TransientStoreKey {
|
||||||
return app.tkeys[storeKey]
|
return app.tkeys[storeKey]
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMemKey returns the MemStoreKey for the provided mem key.
|
// GetMemKey returns the MemStoreKey for the provided mem key.
|
||||||
//
|
//
|
||||||
// NOTE: This is solely used for testing purposes.
|
// NOTE: This is solely used for testing purposes.
|
||||||
func (app *EthermintApp) GetMemKey(storeKey string) *sdk.MemoryStoreKey {
|
func (app *EthermintApp) GetMemKey(storeKey string) *storetypes.MemoryStoreKey {
|
||||||
return app.memKeys[storeKey]
|
return app.memKeys[storeKey]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -707,17 +736,12 @@ func (app *EthermintApp) SimulationManager() *module.SimulationManager {
|
|||||||
// API server.
|
// API server.
|
||||||
func (app *EthermintApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
|
func (app *EthermintApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
|
||||||
clientCtx := apiSvr.ClientCtx
|
clientCtx := apiSvr.ClientCtx
|
||||||
rpc.RegisterRoutes(clientCtx, apiSvr.Router)
|
|
||||||
|
|
||||||
evmrest.RegisterTxRoutes(clientCtx, apiSvr.Router)
|
|
||||||
|
|
||||||
// Register new tx routes from grpc-gateway.
|
// Register new tx routes from grpc-gateway.
|
||||||
authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
||||||
// Register new tendermint queries routes from grpc-gateway.
|
// Register new tendermint queries routes from grpc-gateway.
|
||||||
tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
||||||
|
|
||||||
// Register legacy and grpc-gateway routes for all modules.
|
// Register grpc-gateway routes for all modules.
|
||||||
ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router)
|
|
||||||
ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
|
||||||
|
|
||||||
// register swagger API from root so that other applications can override easily
|
// register swagger API from root so that other applications can override easily
|
||||||
@ -726,12 +750,19 @@ func (app *EthermintApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RegisterTxService implements the Application.RegisterTxService method.
|
||||||
func (app *EthermintApp) RegisterTxService(clientCtx client.Context) {
|
func (app *EthermintApp) RegisterTxService(clientCtx client.Context) {
|
||||||
authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry)
|
authtx.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.BaseApp.Simulate, app.interfaceRegistry)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RegisterTendermintService implements the Application.RegisterTendermintService method.
|
||||||
func (app *EthermintApp) RegisterTendermintService(clientCtx client.Context) {
|
func (app *EthermintApp) RegisterTendermintService(clientCtx client.Context) {
|
||||||
tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)
|
tmservice.RegisterTendermintService(
|
||||||
|
clientCtx,
|
||||||
|
app.BaseApp.GRPCQueryRouter(),
|
||||||
|
app.interfaceRegistry,
|
||||||
|
app.Query,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterSwaggerAPI registers swagger route with API Server
|
// RegisterSwaggerAPI registers swagger route with API Server
|
||||||
@ -751,14 +782,11 @@ func GetMaccPerms() map[string][]string {
|
|||||||
for k, v := range maccPerms {
|
for k, v := range maccPerms {
|
||||||
dupMaccPerms[k] = v
|
dupMaccPerms[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
return dupMaccPerms
|
return dupMaccPerms
|
||||||
}
|
}
|
||||||
|
|
||||||
// initParamsKeeper init params keeper and its subspaces
|
// initParamsKeeper init params keeper and its subspaces
|
||||||
func initParamsKeeper(
|
func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper {
|
||||||
appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey,
|
|
||||||
) paramskeeper.Keeper {
|
|
||||||
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
|
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
|
||||||
|
|
||||||
// SDK subspaces
|
// SDK subspaces
|
||||||
@ -768,7 +796,7 @@ func initParamsKeeper(
|
|||||||
paramsKeeper.Subspace(minttypes.ModuleName)
|
paramsKeeper.Subspace(minttypes.ModuleName)
|
||||||
paramsKeeper.Subspace(distrtypes.ModuleName)
|
paramsKeeper.Subspace(distrtypes.ModuleName)
|
||||||
paramsKeeper.Subspace(slashingtypes.ModuleName)
|
paramsKeeper.Subspace(slashingtypes.ModuleName)
|
||||||
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
|
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govv1.ParamKeyTable())
|
||||||
paramsKeeper.Subspace(crisistypes.ModuleName)
|
paramsKeeper.Subspace(crisistypes.ModuleName)
|
||||||
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
|
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
|
||||||
paramsKeeper.Subspace(ibchost.ModuleName)
|
paramsKeeper.Subspace(ibchost.ModuleName)
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
// NewDefaultGenesisState generates the default state for the application.
|
// NewDefaultGenesisState generates the default state for the application.
|
||||||
func NewDefaultGenesisState() simapp.GenesisState {
|
func NewDefaultGenesisState() simapp.GenesisState {
|
||||||
encCfg := encoding.MakeConfig(ModuleBasics)
|
encCfg := encoding.MakeConfig(ModuleBasics)
|
||||||
return ModuleBasics.DefaultGenesis(encCfg.Marshaler)
|
return ModuleBasics.DefaultGenesis(encCfg.Codec)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExportAppStateAndValidators exports the state of the application for a genesis
|
// ExportAppStateAndValidators exports the state of the application for a genesis
|
||||||
@ -125,7 +125,9 @@ func (app *EthermintApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAd
|
|||||||
feePool.CommunityPool = feePool.CommunityPool.Add(scraps...)
|
feePool.CommunityPool = feePool.CommunityPool.Add(scraps...)
|
||||||
app.DistrKeeper.SetFeePool(ctx, feePool)
|
app.DistrKeeper.SetFeePool(ctx, feePool)
|
||||||
|
|
||||||
app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator())
|
if err := app.DistrKeeper.Hooks().AfterValidatorCreated(ctx, val.GetOperator()); err != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -139,8 +141,12 @@ func (app *EthermintApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAd
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr)
|
if err := app.DistrKeeper.Hooks().BeforeDelegationCreated(ctx, delAddr, valAddr); err != nil {
|
||||||
app.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr)
|
return err
|
||||||
|
}
|
||||||
|
if err := app.DistrKeeper.Hooks().AfterDelegationModified(ctx, delAddr, valAddr); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset context height
|
// reset context height
|
||||||
|
@ -6,6 +6,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
|
"runtime/debug"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@ -14,8 +16,10 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/simapp"
|
"github.com/cosmos/cosmos-sdk/simapp"
|
||||||
"github.com/cosmos/cosmos-sdk/simapp/params"
|
"github.com/cosmos/cosmos-sdk/simapp/params"
|
||||||
"github.com/cosmos/cosmos-sdk/store"
|
"github.com/cosmos/cosmos-sdk/store"
|
||||||
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
|
authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
|
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
|
||||||
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||||
@ -26,8 +30,8 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/simulation"
|
"github.com/cosmos/cosmos-sdk/x/simulation"
|
||||||
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
|
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types"
|
ibctransfertypes "github.com/cosmos/ibc-go/v5/modules/apps/transfer/types"
|
||||||
ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host"
|
ibchost "github.com/cosmos/ibc-go/v5/modules/core/24-host"
|
||||||
evmenc "github.com/evmos/ethermint/encoding"
|
evmenc "github.com/evmos/ethermint/encoding"
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
@ -47,8 +51,8 @@ func init() {
|
|||||||
const SimAppChainID = "simulation_777-1"
|
const SimAppChainID = "simulation_777-1"
|
||||||
|
|
||||||
type storeKeysPrefixes struct {
|
type storeKeysPrefixes struct {
|
||||||
A sdk.StoreKey
|
A storetypes.StoreKey
|
||||||
B sdk.StoreKey
|
B storetypes.StoreKey
|
||||||
Prefixes [][]byte
|
Prefixes [][]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +78,7 @@ func TestFullAppSimulation(t *testing.T) {
|
|||||||
config.ChainID = SimAppChainID
|
config.ChainID = SimAppChainID
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
db.Close()
|
require.NoError(t, db.Close())
|
||||||
require.NoError(t, os.RemoveAll(dir))
|
require.NoError(t, os.RemoveAll(dir))
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -114,7 +118,7 @@ func TestAppImportExport(t *testing.T) {
|
|||||||
config.ChainID = SimAppChainID
|
config.ChainID = SimAppChainID
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
db.Close()
|
require.NoError(t, db.Close())
|
||||||
require.NoError(t, os.RemoveAll(dir))
|
require.NoError(t, os.RemoveAll(dir))
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -155,7 +159,7 @@ func TestAppImportExport(t *testing.T) {
|
|||||||
require.NoError(t, err, "simulation setup failed")
|
require.NoError(t, err, "simulation setup failed")
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
newDB.Close()
|
require.NoError(t, newDB.Close())
|
||||||
require.NoError(t, os.RemoveAll(newDir))
|
require.NoError(t, os.RemoveAll(newDir))
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -166,6 +170,17 @@ func TestAppImportExport(t *testing.T) {
|
|||||||
err = json.Unmarshal(exported.AppState, &genesisState)
|
err = json.Unmarshal(exported.AppState, &genesisState)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
err := fmt.Sprintf("%v", r)
|
||||||
|
if !strings.Contains(err, "validator set is empty after InitGenesis") {
|
||||||
|
panic(r)
|
||||||
|
}
|
||||||
|
logger.Info("Skipping simulation as all validators have been unbonded")
|
||||||
|
logger.Info("err", err, "stacktrace", string(debug.Stack()))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
ctxA := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight(), ChainID: SimAppChainID})
|
ctxA := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight(), ChainID: SimAppChainID})
|
||||||
ctxB := newApp.NewContext(true, tmproto.Header{Height: app.LastBlockHeight(), ChainID: SimAppChainID})
|
ctxB := newApp.NewContext(true, tmproto.Header{Height: app.LastBlockHeight(), ChainID: SimAppChainID})
|
||||||
newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState)
|
newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState)
|
||||||
@ -190,6 +205,7 @@ func TestAppImportExport(t *testing.T) {
|
|||||||
{app.keys[govtypes.StoreKey], newApp.keys[govtypes.StoreKey], [][]byte{}},
|
{app.keys[govtypes.StoreKey], newApp.keys[govtypes.StoreKey], [][]byte{}},
|
||||||
{app.keys[evidencetypes.StoreKey], newApp.keys[evidencetypes.StoreKey], [][]byte{}},
|
{app.keys[evidencetypes.StoreKey], newApp.keys[evidencetypes.StoreKey], [][]byte{}},
|
||||||
{app.keys[capabilitytypes.StoreKey], newApp.keys[capabilitytypes.StoreKey], [][]byte{}},
|
{app.keys[capabilitytypes.StoreKey], newApp.keys[capabilitytypes.StoreKey], [][]byte{}},
|
||||||
|
{app.keys[authzkeeper.StoreKey], newApp.keys[authzkeeper.StoreKey], [][]byte{authzkeeper.GrantKey, authzkeeper.GrantQueuePrefix}},
|
||||||
{app.keys[ibchost.StoreKey], newApp.keys[ibchost.StoreKey], [][]byte{}},
|
{app.keys[ibchost.StoreKey], newApp.keys[ibchost.StoreKey], [][]byte{}},
|
||||||
{app.keys[ibctransfertypes.StoreKey], newApp.keys[ibctransfertypes.StoreKey], [][]byte{}},
|
{app.keys[ibctransfertypes.StoreKey], newApp.keys[ibctransfertypes.StoreKey], [][]byte{}},
|
||||||
}
|
}
|
||||||
@ -216,7 +232,7 @@ func TestAppSimulationAfterImport(t *testing.T) {
|
|||||||
config.ChainID = SimAppChainID
|
config.ChainID = SimAppChainID
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
db.Close()
|
require.NoError(t, db.Close())
|
||||||
require.NoError(t, os.RemoveAll(dir))
|
require.NoError(t, os.RemoveAll(dir))
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -261,7 +277,7 @@ func TestAppSimulationAfterImport(t *testing.T) {
|
|||||||
require.NoError(t, err, "simulation setup failed")
|
require.NoError(t, err, "simulation setup failed")
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
newDB.Close()
|
require.NoError(t, newDB.Close())
|
||||||
require.NoError(t, os.RemoveAll(newDir))
|
require.NoError(t, os.RemoveAll(newDir))
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||||
"github.com/cosmos/cosmos-sdk/simapp"
|
"github.com/cosmos/cosmos-sdk/simapp"
|
||||||
|
"github.com/cosmos/cosmos-sdk/testutil/mock"
|
||||||
"github.com/cosmos/cosmos-sdk/types/module"
|
"github.com/cosmos/cosmos-sdk/types/module"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
@ -177,13 +178,13 @@ func StateFn(cdc codec.JSONCodec, simManager *module.SimulationManager) simtypes
|
|||||||
|
|
||||||
// NewTestGenesisState generate genesis state with single validator
|
// NewTestGenesisState generate genesis state with single validator
|
||||||
func NewTestGenesisState(codec codec.Codec) simapp.GenesisState {
|
func NewTestGenesisState(codec codec.Codec) simapp.GenesisState {
|
||||||
privVal := ed25519.GenPrivKey()
|
privVal := mock.NewPV()
|
||||||
// create validator set with single validator
|
pubKey, err := privVal.GetPubKey()
|
||||||
tmPk, err := cryptocodec.ToTmPubKeyInterface(privVal.PubKey())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
validator := tmtypes.NewValidator(tmPk, 1)
|
// create validator set with single validator
|
||||||
|
validator := tmtypes.NewValidator(pubKey, 1)
|
||||||
valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator})
|
valSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{validator})
|
||||||
|
|
||||||
// generate genesis account
|
// generate genesis account
|
||||||
|
@ -33,14 +33,14 @@ func TestRandomGenesisAccounts(t *testing.T) {
|
|||||||
accs := RandomAccounts(r, rand.Intn(maxTestingAccounts))
|
accs := RandomAccounts(r, rand.Intn(maxTestingAccounts))
|
||||||
|
|
||||||
encodingConfig := MakeEncodingConfig()
|
encodingConfig := MakeEncodingConfig()
|
||||||
appCodec := encodingConfig.Marshaler
|
appCodec := encodingConfig.Codec
|
||||||
cdc := encodingConfig.Amino
|
cdc := encodingConfig.Amino
|
||||||
|
|
||||||
paramsKeeper := initParamsKeeper(appCodec, cdc, sdk.NewKVStoreKey(paramstypes.StoreKey), sdk.NewTransientStoreKey(paramstypes.StoreKey))
|
paramsKeeper := initParamsKeeper(appCodec, cdc, sdk.NewKVStoreKey(paramstypes.StoreKey), sdk.NewTransientStoreKey(paramstypes.StoreKey))
|
||||||
subSpace, find := paramsKeeper.GetSubspace(authtypes.ModuleName)
|
subSpace, find := paramsKeeper.GetSubspace(authtypes.ModuleName)
|
||||||
require.True(t, find)
|
require.True(t, find)
|
||||||
accountKeeper := authkeeper.NewAccountKeeper(
|
accountKeeper := authkeeper.NewAccountKeeper(
|
||||||
appCodec, sdk.NewKVStoreKey(authtypes.StoreKey), subSpace, ethermint.ProtoAccount, maccPerms,
|
appCodec, sdk.NewKVStoreKey(authtypes.StoreKey), subSpace, ethermint.ProtoAccount, maccPerms, sdk.GetConfig().GetBech32AccountAddrPrefix(),
|
||||||
)
|
)
|
||||||
authModule := auth.NewAppModule(appCodec, accountKeeper, RandomGenesisAccounts)
|
authModule := auth.NewAppModule(appCodec, accountKeeper, RandomGenesisAccounts)
|
||||||
|
|
||||||
|
@ -5,10 +5,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/input"
|
"github.com/cosmos/cosmos-sdk/client/input"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto"
|
"github.com/cosmos/cosmos-sdk/crypto"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
ethcrypto "github.com/ethereum/go-ethereum/crypto"
|
ethcrypto "github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@ -26,18 +25,8 @@ func UnsafeExportEthKeyCommand() *cobra.Command {
|
|||||||
Long: `**UNSAFE** Export an Ethereum private key unencrypted to use in dev tooling`,
|
Long: `**UNSAFE** Export an Ethereum private key unencrypted to use in dev tooling`,
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
inBuf := bufio.NewReader(cmd.InOrStdin())
|
clientCtx := client.GetClientContextFromCmd(cmd).WithKeyringOptions(hd.EthSecp256k1Option())
|
||||||
|
clientCtx, err := client.ReadPersistentCommandFlags(clientCtx, cmd.Flags())
|
||||||
keyringBackend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
|
||||||
rootDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
|
||||||
|
|
||||||
kr, err := keyring.New(
|
|
||||||
sdk.KeyringServiceName(),
|
|
||||||
keyringBackend,
|
|
||||||
rootDir,
|
|
||||||
inBuf,
|
|
||||||
hd.EthSecp256k1Option(),
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -45,7 +34,8 @@ func UnsafeExportEthKeyCommand() *cobra.Command {
|
|||||||
decryptPassword := ""
|
decryptPassword := ""
|
||||||
conf := true
|
conf := true
|
||||||
|
|
||||||
switch keyringBackend {
|
inBuf := bufio.NewReader(cmd.InOrStdin())
|
||||||
|
switch clientCtx.Keyring.Backend() {
|
||||||
case keyring.BackendFile:
|
case keyring.BackendFile:
|
||||||
decryptPassword, err = input.GetPassword(
|
decryptPassword, err = input.GetPassword(
|
||||||
"**WARNING this is an unsafe way to export your unencrypted private key**\nEnter key password:",
|
"**WARNING this is an unsafe way to export your unencrypted private key**\nEnter key password:",
|
||||||
@ -60,7 +50,7 @@ func UnsafeExportEthKeyCommand() *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Exports private key from keybase using password
|
// Exports private key from keybase using password
|
||||||
armor, err := kr.ExportPrivKeyArmor(args[0], decryptPassword)
|
armor, err := clientCtx.Keyring.ExportPrivKeyArmor(args[0], decryptPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,9 @@ import (
|
|||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/input"
|
"github.com/cosmos/cosmos-sdk/client/input"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto"
|
"github.com/cosmos/cosmos-sdk/crypto"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/evmos/ethermint/crypto/ethsecp256k1"
|
"github.com/evmos/ethermint/crypto/ethsecp256k1"
|
||||||
|
|
||||||
@ -28,21 +26,13 @@ func UnsafeImportKeyCommand() *cobra.Command {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runImportCmd(cmd *cobra.Command, args []string) error {
|
func runImportCmd(cmd *cobra.Command, args []string) error {
|
||||||
inBuf := bufio.NewReader(cmd.InOrStdin())
|
clientCtx := client.GetClientContextFromCmd(cmd).WithKeyringOptions(hd.EthSecp256k1Option())
|
||||||
keyringBackend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
clientCtx, err := client.ReadPersistentCommandFlags(clientCtx, cmd.Flags())
|
||||||
rootDir, _ := cmd.Flags().GetString(flags.FlagHome)
|
|
||||||
|
|
||||||
kb, err := keyring.New(
|
|
||||||
sdk.KeyringServiceName(),
|
|
||||||
keyringBackend,
|
|
||||||
rootDir,
|
|
||||||
inBuf,
|
|
||||||
hd.EthSecp256k1Option(),
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inBuf := bufio.NewReader(cmd.InOrStdin())
|
||||||
passphrase, err := input.GetPassword("Enter passphrase to encrypt your key:", inBuf)
|
passphrase, err := input.GetPassword("Enter passphrase to encrypt your key:", inBuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -54,5 +44,5 @@ func runImportCmd(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
armor := crypto.EncryptArmorPrivKey(privKey, passphrase, "eth_secp256k1")
|
armor := crypto.EncryptArmorPrivKey(privKey, passphrase, "eth_secp256k1")
|
||||||
|
|
||||||
return kb.ImportPrivKey(args[0], armor, passphrase)
|
return clientCtx.Keyring.ImportPrivKey(args[0], armor, passphrase)
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
"github.com/cosmos/cosmos-sdk/client/keys"
|
"github.com/cosmos/cosmos-sdk/client/keys"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
|
|
||||||
@ -49,7 +48,7 @@ The pass backend requires GnuPG: https://gnupg.org/
|
|||||||
addCmd := keys.AddKeyCommand()
|
addCmd := keys.AddKeyCommand()
|
||||||
|
|
||||||
// update the default signing algorithm value to "eth_secp256k1"
|
// update the default signing algorithm value to "eth_secp256k1"
|
||||||
algoFlag := addCmd.Flag("algo")
|
algoFlag := addCmd.Flag(flags.FlagKeyAlgorithm)
|
||||||
algoFlag.DefValue = string(hd.EthSecp256k1Type)
|
algoFlag.DefValue = string(hd.EthSecp256k1Type)
|
||||||
err := algoFlag.Value.Set(string(hd.EthSecp256k1Type))
|
err := algoFlag.Value.Set(string(hd.EthSecp256k1Type))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -65,8 +64,8 @@ The pass backend requires GnuPG: https://gnupg.org/
|
|||||||
keys.ImportKeyCommand(),
|
keys.ImportKeyCommand(),
|
||||||
keys.ListKeysCmd(),
|
keys.ListKeysCmd(),
|
||||||
keys.ShowKeysCmd(),
|
keys.ShowKeysCmd(),
|
||||||
flags.LineBreak,
|
|
||||||
keys.DeleteKeyCommand(),
|
keys.DeleteKeyCommand(),
|
||||||
|
keys.RenameKeyCommand(),
|
||||||
keys.ParseKeyStringCommand(),
|
keys.ParseKeyStringCommand(),
|
||||||
keys.MigrateCommand(),
|
keys.MigrateCommand(),
|
||||||
flags.LineBreak,
|
flags.LineBreak,
|
||||||
@ -82,23 +81,11 @@ The pass backend requires GnuPG: https://gnupg.org/
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runAddCmd(cmd *cobra.Command, args []string) error {
|
func runAddCmd(cmd *cobra.Command, args []string) error {
|
||||||
buf := bufio.NewReader(cmd.InOrStdin())
|
clientCtx := client.GetClientContextFromCmd(cmd).WithKeyringOptions(hd.EthSecp256k1Option())
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx, err := client.ReadPersistentCommandFlags(clientCtx, cmd.Flags())
|
||||||
|
|
||||||
var (
|
|
||||||
kr keyring.Keyring
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
|
|
||||||
dryRun, _ := cmd.Flags().GetBool(flags.FlagDryRun)
|
|
||||||
if dryRun {
|
|
||||||
kr, err = keyring.New(sdk.KeyringServiceName(), keyring.BackendMemory, clientCtx.KeyringDir, buf, hd.EthSecp256k1Option())
|
|
||||||
clientCtx = clientCtx.WithKeyring(kr)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
buf := bufio.NewReader(clientCtx.Input)
|
||||||
return clientkeys.RunAddCmd(clientCtx, cmd, args, buf)
|
return clientkeys.RunAddCmd(clientCtx, cmd, args, buf)
|
||||||
}
|
}
|
||||||
|
@ -38,63 +38,7 @@ const (
|
|||||||
mnemonicEntropySize = 256
|
mnemonicEntropySize = 256
|
||||||
)
|
)
|
||||||
|
|
||||||
// AddKeyCommand defines a keys command to add a generated or recovered private key to keybase.
|
/* RunAddCmd
|
||||||
func AddKeyCommand() *cobra.Command {
|
|
||||||
cmd := &cobra.Command{
|
|
||||||
Use: "add <name>",
|
|
||||||
Short: "Add an encrypted private key (either newly generated or recovered), encrypt it, and save to <name> file",
|
|
||||||
Long: `Derive a new private key and encrypt to disk.
|
|
||||||
Optionally specify a BIP39 mnemonic, a BIP39 passphrase to further secure the mnemonic,
|
|
||||||
and a bip32 HD path to derive a specific account. The key will be stored under the given name
|
|
||||||
and encrypted with the given password. The only input that is required is the encryption password.
|
|
||||||
|
|
||||||
If run with -i, it will prompt the user for BIP44 path, BIP39 mnemonic, and passphrase.
|
|
||||||
The flag --recover allows one to recover a key from a seed passphrase.
|
|
||||||
If run with --dry-run, a key would be generated (or recovered) but not stored to the
|
|
||||||
local keystore.
|
|
||||||
Use the --pubkey flag to add arbitrary public keys to the keystore for constructing
|
|
||||||
multisig transactions.
|
|
||||||
|
|
||||||
You can create and store a multisig key by passing the list of key names stored in a keyring
|
|
||||||
and the minimum number of signatures required through --multisig-threshold. The keys are
|
|
||||||
sorted by address, unless the flag --nosort is set.
|
|
||||||
Example:
|
|
||||||
|
|
||||||
keys add mymultisig --multisig "keyname1,keyname2,keyname3" --multisig-threshold 2
|
|
||||||
`,
|
|
||||||
Args: cobra.ExactArgs(1),
|
|
||||||
RunE: runAddCmdPrepare,
|
|
||||||
}
|
|
||||||
f := cmd.Flags()
|
|
||||||
f.StringSlice(flagMultisig, nil, "List of key names stored in keyring to construct a public legacy multisig key")
|
|
||||||
f.Int(flagMultiSigThreshold, 1, "K out of N required signatures. For use in conjunction with --multisig")
|
|
||||||
f.Bool(flagNoSort, false, "Keys passed to --multisig are taken in the order they're supplied")
|
|
||||||
f.String(keys.FlagPublicKey, "", "Parse a public key in JSON format and saves key info to <name> file.")
|
|
||||||
f.BoolP(flagInteractive, "i", false, "Interactively prompt user for BIP39 passphrase and mnemonic")
|
|
||||||
f.Bool(flags.FlagUseLedger, false, "Store a local reference to a private key on a Ledger device")
|
|
||||||
f.Bool(flagRecover, false, "Provide seed phrase to recover existing key instead of creating")
|
|
||||||
f.Bool(flagNoBackup, false, "Don't print out seed phrase (if others are watching the terminal)")
|
|
||||||
f.Bool(flags.FlagDryRun, false, "Perform action, but don't add key to local keystore")
|
|
||||||
f.String(flagHDPath, "", "Manual HD Path derivation (overrides BIP44 config)")
|
|
||||||
f.Uint32(flagCoinType, sdk.GetConfig().GetCoinType(), "coin type number for HD derivation")
|
|
||||||
f.Uint32(flagAccount, 0, "Account number for HD derivation")
|
|
||||||
f.Uint32(flagIndex, 0, "Address index number for HD derivation")
|
|
||||||
f.String(flags.FlagKeyAlgorithm, string(etherminthd.EthSecp256k1Type), "Key signing algorithm to generate keys for")
|
|
||||||
|
|
||||||
return cmd
|
|
||||||
}
|
|
||||||
|
|
||||||
func runAddCmdPrepare(cmd *cobra.Command, args []string) error {
|
|
||||||
buf := bufio.NewReader(cmd.InOrStdin())
|
|
||||||
clientCtx, err := client.GetClientQueryContext(cmd)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return RunAddCmd(clientCtx, cmd, args, buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
input
|
input
|
||||||
- bip39 mnemonic
|
- bip39 mnemonic
|
||||||
- bip39 passphrase
|
- bip39 passphrase
|
||||||
@ -122,7 +66,7 @@ func RunAddCmd(ctx client.Context, cmd *cobra.Command, args []string, inBuf *buf
|
|||||||
|
|
||||||
if dryRun, _ := cmd.Flags().GetBool(flags.FlagDryRun); dryRun {
|
if dryRun, _ := cmd.Flags().GetBool(flags.FlagDryRun); dryRun {
|
||||||
// use in memory keybase
|
// use in memory keybase
|
||||||
kb = keyring.NewInMemory(etherminthd.EthSecp256k1Option())
|
kb = keyring.NewInMemory(ctx.Codec, etherminthd.EthSecp256k1Option())
|
||||||
} else {
|
} else {
|
||||||
_, err = kb.Key(name)
|
_, err = kb.Key(name)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -156,7 +100,11 @@ func RunAddCmd(ctx client.Context, cmd *cobra.Command, args []string, inBuf *buf
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
pks[i] = k.GetPubKey()
|
key, err := k.GetPubKey()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
pks[i] = key
|
||||||
}
|
}
|
||||||
|
|
||||||
if noSort, _ := cmd.Flags().GetBool(flagNoSort); !noSort {
|
if noSort, _ := cmd.Flags().GetBool(flagNoSort); !noSort {
|
||||||
@ -166,29 +114,28 @@ func RunAddCmd(ctx client.Context, cmd *cobra.Command, args []string, inBuf *buf
|
|||||||
}
|
}
|
||||||
|
|
||||||
pk := multisig.NewLegacyAminoPubKey(multisigThreshold, pks)
|
pk := multisig.NewLegacyAminoPubKey(multisigThreshold, pks)
|
||||||
info, err := kb.SaveMultisig(name, pk)
|
k, err := kb.SaveMultisig(name, pk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return printCreate(cmd, info, false, "", outputFormat)
|
return printCreate(cmd, k, false, "", outputFormat)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pubKey, _ := cmd.Flags().GetString(keys.FlagPublicKey)
|
pubKey, _ := cmd.Flags().GetString(keys.FlagPublicKey)
|
||||||
if pubKey != "" {
|
if pubKey != "" {
|
||||||
var pk cryptotypes.PubKey
|
var pk cryptotypes.PubKey
|
||||||
err = ctx.Codec.UnmarshalInterfaceJSON([]byte(pubKey), &pk)
|
if err = ctx.Codec.UnmarshalInterfaceJSON([]byte(pubKey), &pk); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
k, err := kb.SaveOfflineKey(name, pk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err := kb.SavePubKey(name, pk, algo.Name())
|
return printCreate(cmd, k, false, "", outputFormat)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return printCreate(cmd, info, false, "", outputFormat)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
coinType, _ := cmd.Flags().GetUint32(flagCoinType)
|
coinType, _ := cmd.Flags().GetUint32(flagCoinType)
|
||||||
@ -206,13 +153,12 @@ func RunAddCmd(ctx client.Context, cmd *cobra.Command, args []string, inBuf *buf
|
|||||||
// If we're using ledger, only thing we need is the path and the bech32 prefix.
|
// If we're using ledger, only thing we need is the path and the bech32 prefix.
|
||||||
if useLedger {
|
if useLedger {
|
||||||
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
|
bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
|
||||||
|
k, err := kb.SaveLedgerKey(name, hd.Secp256k1, bech32PrefixAccAddr, coinType, account, index)
|
||||||
info, err := kb.SaveLedgerKey(name, algo, bech32PrefixAccAddr, coinType, account, index)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return printCreate(cmd, info, false, "", outputFormat)
|
return printCreate(cmd, k, false, "", outputFormat)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get bip39 mnemonic
|
// Get bip39 mnemonic
|
||||||
@ -274,7 +220,7 @@ func RunAddCmd(ctx client.Context, cmd *cobra.Command, args []string, inBuf *buf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err := kb.NewAccount(name, mnemonic, bip39Passphrase, hdPath, algo)
|
k, err := kb.NewAccount(name, mnemonic, bip39Passphrase, hdPath, algo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -286,24 +232,25 @@ func RunAddCmd(ctx client.Context, cmd *cobra.Command, args []string, inBuf *buf
|
|||||||
mnemonic = ""
|
mnemonic = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
return printCreate(cmd, info, showMnemonic, mnemonic, outputFormat)
|
return printCreate(cmd, k, showMnemonic, mnemonic, outputFormat)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printCreate(cmd *cobra.Command, info keyring.Info, showMnemonic bool, mnemonic, outputFormat string) error {
|
func printCreate(cmd *cobra.Command, k *keyring.Record, showMnemonic bool, mnemonic, outputFormat string) error {
|
||||||
switch outputFormat {
|
switch outputFormat {
|
||||||
case OutputFormatText:
|
case OutputFormatText:
|
||||||
cmd.PrintErrln()
|
cmd.PrintErrln()
|
||||||
printKeyInfo(cmd.OutOrStdout(), info, keyring.MkAccKeyOutput, outputFormat)
|
if err := printKeyringRecord(cmd.OutOrStdout(), k, keyring.MkAccKeyOutput, outputFormat); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// print mnemonic unless requested not to.
|
// print mnemonic unless requested not to.
|
||||||
if showMnemonic {
|
if showMnemonic {
|
||||||
fmt.Fprintln(cmd.ErrOrStderr(), "\n**Important** write this mnemonic phrase in a safe place.")
|
if _, err := fmt.Fprintf(cmd.ErrOrStderr(), "\n**Important** write this mnemonic phrase in a safe place.\nIt is the only way to recover your account if you ever forget your password.\n\n%s\n\n", mnemonic); err != nil {
|
||||||
fmt.Fprintln(cmd.ErrOrStderr(), "It is the only way to recover your account if you ever forget your password.")
|
return fmt.Errorf("failed to print mnemonic: %v", err)
|
||||||
fmt.Fprintln(cmd.ErrOrStderr(), "")
|
}
|
||||||
fmt.Fprintln(cmd.ErrOrStderr(), mnemonic)
|
|
||||||
}
|
}
|
||||||
case OutputFormatJSON:
|
case OutputFormatJSON:
|
||||||
out, err := keyring.MkAccKeyOutput(info)
|
out, err := keyring.MkAccKeyOutput(k)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -325,3 +272,14 @@ func printCreate(cmd *cobra.Command, info keyring.Info, showMnemonic bool, mnemo
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func validateMultisigThreshold(k, nKeys int) error {
|
||||||
|
if k <= 0 {
|
||||||
|
return fmt.Errorf("threshold must be a positive integer")
|
||||||
|
}
|
||||||
|
if nKeys < k {
|
||||||
|
return fmt.Errorf(
|
||||||
|
"threshold k of n multisignature: %d < %d", nKeys, k)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
package keys
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/keys"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Commands registers a sub-tree of commands to interact with
|
|
||||||
// local private key storage.
|
|
||||||
func Commands(defaultNodeHome string) *cobra.Command {
|
|
||||||
cmd := &cobra.Command{
|
|
||||||
Use: "keys",
|
|
||||||
Short: "Manage your application's keys",
|
|
||||||
Long: `Keyring management commands. These keys may be in any format supported by the
|
|
||||||
Tendermint crypto library and can be used by light-clients, full nodes, or any other application
|
|
||||||
that needs to sign with a private key.
|
|
||||||
|
|
||||||
The keyring supports the following backends:
|
|
||||||
|
|
||||||
os Uses the operating system's default credentials store.
|
|
||||||
file Uses encrypted file-based keystore within the app's configuration directory.
|
|
||||||
This keyring will request a password each time it is accessed, which may occur
|
|
||||||
multiple times in a single command resulting in repeated password prompts.
|
|
||||||
kwallet Uses KDE Wallet Manager as a credentials management application.
|
|
||||||
pass Uses the pass command line utility to store and retrieve keys.
|
|
||||||
test Stores keys insecurely to disk. It does not prompt for a password to be unlocked
|
|
||||||
and it should be use only for testing purposes.
|
|
||||||
|
|
||||||
kwallet and pass backends depend on external tools. Refer to their respective documentation for more
|
|
||||||
information:
|
|
||||||
KWallet https://github.com/KDE/kwallet
|
|
||||||
pass https://www.passwordstore.org/
|
|
||||||
|
|
||||||
The pass backend requires GnuPG: https://gnupg.org/
|
|
||||||
`,
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.AddCommand(
|
|
||||||
keys.MnemonicKeyCommand(),
|
|
||||||
AddKeyCommand(),
|
|
||||||
keys.ExportKeyCommand(),
|
|
||||||
keys.ImportKeyCommand(),
|
|
||||||
keys.ListKeysCmd(),
|
|
||||||
keys.ShowKeysCmd(),
|
|
||||||
flags.LineBreak,
|
|
||||||
keys.DeleteKeyCommand(),
|
|
||||||
keys.ParseKeyStringCommand(),
|
|
||||||
keys.MigrateCommand(),
|
|
||||||
)
|
|
||||||
|
|
||||||
cmd.PersistentFlags().String(flags.FlagHome, defaultNodeHome, "The application home directory")
|
|
||||||
cmd.PersistentFlags().String(flags.FlagKeyringDir, "", "The client Keyring directory; if omitted, the default 'home' directory will be used")
|
|
||||||
cmd.PersistentFlags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|test)")
|
|
||||||
cmd.PersistentFlags().String(cli.OutputFlag, "text", "Output format (text|json)")
|
|
||||||
|
|
||||||
return cmd
|
|
||||||
}
|
|
@ -3,9 +3,8 @@ package keys
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
yaml "gopkg.in/yaml.v2"
|
"sigs.k8s.io/yaml"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/keys"
|
"github.com/cosmos/cosmos-sdk/client/keys"
|
||||||
cryptokeyring "github.com/cosmos/cosmos-sdk/crypto/keyring"
|
cryptokeyring "github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
@ -15,58 +14,45 @@ import (
|
|||||||
const (
|
const (
|
||||||
OutputFormatText = "text"
|
OutputFormatText = "text"
|
||||||
OutputFormatJSON = "json"
|
OutputFormatJSON = "json"
|
||||||
|
|
||||||
// defaultKeyDBName is the client's subdirectory where keys are stored.
|
|
||||||
defaultKeyDBName = "keys"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type bechKeyOutFn func(keyInfo cryptokeyring.Info) (cryptokeyring.KeyOutput, error)
|
type bechKeyOutFn func(k *cryptokeyring.Record) (cryptokeyring.KeyOutput, error)
|
||||||
|
|
||||||
// NewLegacyKeyBaseFromDir initializes a legacy keybase at the rootDir directory. Keybase
|
func printKeyringRecord(w io.Writer, k *cryptokeyring.Record, bechKeyOut bechKeyOutFn, output string) error {
|
||||||
// options can be applied when generating this new Keybase.
|
ko, err := bechKeyOut(k)
|
||||||
func NewLegacyKeyBaseFromDir(rootDir string, opts ...cryptokeyring.KeybaseOption) (cryptokeyring.LegacyKeybase, error) {
|
|
||||||
return getLegacyKeyBaseFromDir(rootDir, opts...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getLegacyKeyBaseFromDir(rootDir string, opts ...cryptokeyring.KeybaseOption) (cryptokeyring.LegacyKeybase, error) {
|
|
||||||
return cryptokeyring.NewLegacy(defaultKeyDBName, filepath.Join(rootDir, "keys"), opts...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func printKeyInfo(w io.Writer, keyInfo cryptokeyring.Info, bechKeyOut bechKeyOutFn, output string) {
|
|
||||||
ko, err := bechKeyOut(keyInfo)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
switch output {
|
switch output {
|
||||||
case OutputFormatText:
|
case OutputFormatText:
|
||||||
printTextInfos(w, []cryptokeyring.KeyOutput{ko})
|
if err := printTextRecords(w, []cryptokeyring.KeyOutput{ko}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
case OutputFormatJSON:
|
case OutputFormatJSON:
|
||||||
out, err := keys.KeysCdc.MarshalJSON(ko)
|
out, err := keys.KeysCdc.MarshalJSON(ko)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintln(w, string(out))
|
if _, err := fmt.Fprintln(w, string(out)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func printTextRecords(w io.Writer, kos []cryptokeyring.KeyOutput) error {
|
||||||
|
out, err := yaml.Marshal(&kos)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := fmt.Fprintln(w, string(out)); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
func printTextInfos(w io.Writer, kos []cryptokeyring.KeyOutput) {
|
|
||||||
out, err := yaml.Marshal(&kos)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
fmt.Fprintln(w, string(out))
|
|
||||||
}
|
|
||||||
|
|
||||||
func validateMultisigThreshold(k, nKeys int) error {
|
|
||||||
if k <= 0 {
|
|
||||||
return fmt.Errorf("threshold must be a positive integer")
|
|
||||||
}
|
|
||||||
if nKeys < k {
|
|
||||||
return fmt.Errorf(
|
|
||||||
"threshold k of n multisignature: %d < %d", nKeys, k)
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/genutil"
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
||||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||||
|
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
||||||
mintypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
mintypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
|
|
||||||
@ -261,7 +262,7 @@ func initTestnetFiles(
|
|||||||
memo := fmt.Sprintf("%s@%s:26656", nodeIDs[i], ip)
|
memo := fmt.Sprintf("%s@%s:26656", nodeIDs[i], ip)
|
||||||
genFiles = append(genFiles, nodeConfig.GenesisFile())
|
genFiles = append(genFiles, nodeConfig.GenesisFile())
|
||||||
|
|
||||||
kb, err := keyring.New(sdk.KeyringServiceName(), args.keyringBackend, nodeDir, inBuf, hd.EthSecp256k1Option())
|
kb, err := keyring.New(sdk.KeyringServiceName(), args.keyringBackend, nodeDir, inBuf, clientCtx.Codec, hd.EthSecp256k1Option())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -343,7 +344,7 @@ func initTestnetFiles(
|
|||||||
|
|
||||||
customAppTemplate, customAppConfig := config.AppConfig(ethermint.AttoPhoton)
|
customAppTemplate, customAppConfig := config.AppConfig(ethermint.AttoPhoton)
|
||||||
srvconfig.SetConfigTemplate(customAppTemplate)
|
srvconfig.SetConfigTemplate(customAppTemplate)
|
||||||
if err := sdkserver.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig); err != nil {
|
if err := sdkserver.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, tmconfig.DefaultConfig()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,7 +403,7 @@ func initGenFiles(
|
|||||||
stakingGenState.Params.BondDenom = coinDenom
|
stakingGenState.Params.BondDenom = coinDenom
|
||||||
appGenState[stakingtypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(&stakingGenState)
|
appGenState[stakingtypes.ModuleName] = clientCtx.Codec.MustMarshalJSON(&stakingGenState)
|
||||||
|
|
||||||
var govGenState govtypes.GenesisState
|
var govGenState govv1.GenesisState
|
||||||
clientCtx.Codec.MustUnmarshalJSON(appGenState[govtypes.ModuleName], &govGenState)
|
clientCtx.Codec.MustUnmarshalJSON(appGenState[govtypes.ModuleName], &govGenState)
|
||||||
|
|
||||||
govGenState.DepositParams.MinDeposit[0].Denom = coinDenom
|
govGenState.DepositParams.MinDeposit[0].Denom = coinDenom
|
||||||
|
@ -23,6 +23,6 @@ func TestInitCmd(t *testing.T) {
|
|||||||
fmt.Sprintf("--%s=%s", flags.FlagChainID, "ethermint_9000-1"),
|
fmt.Sprintf("--%s=%s", flags.FlagChainID, "ethermint_9000-1"),
|
||||||
})
|
})
|
||||||
|
|
||||||
err := svrcmd.Execute(rootCmd, app.DefaultNodeHome)
|
err := svrcmd.Execute(rootCmd, "", app.DefaultNodeHome)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -11,7 +10,6 @@ import (
|
|||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
@ -43,41 +41,29 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
|
|||||||
`,
|
`,
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
clientCtx := client.GetClientContextFromCmd(cmd).WithKeyringOptions(hd.EthSecp256k1Option())
|
||||||
|
clientCtx, err := client.ReadPersistentCommandFlags(clientCtx, cmd.Flags())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
serverCtx := server.GetServerContextFromCmd(cmd)
|
serverCtx := server.GetServerContextFromCmd(cmd)
|
||||||
config := serverCtx.Config
|
config := serverCtx.Config
|
||||||
|
|
||||||
config.SetRoot(clientCtx.HomeDir)
|
config.SetRoot(clientCtx.HomeDir)
|
||||||
|
|
||||||
var kr keyring.Keyring
|
kr := clientCtx.Keyring
|
||||||
addr, err := sdk.AccAddressFromBech32(args[0])
|
addr, err := sdk.AccAddressFromBech32(args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
inBuf := bufio.NewReader(cmd.InOrStdin())
|
|
||||||
keyringBackend, _ := cmd.Flags().GetString(flags.FlagKeyringBackend)
|
|
||||||
|
|
||||||
if keyringBackend != "" && clientCtx.Keyring == nil {
|
|
||||||
var err error
|
|
||||||
kr, err = keyring.New(
|
|
||||||
sdk.KeyringServiceName(),
|
|
||||||
keyringBackend,
|
|
||||||
clientCtx.HomeDir,
|
|
||||||
inBuf,
|
|
||||||
hd.EthSecp256k1Option(),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
kr = clientCtx.Keyring
|
|
||||||
}
|
|
||||||
|
|
||||||
info, err := kr.Key(args[0])
|
info, err := kr.Key(args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get address from Keyring: %w", err)
|
return fmt.Errorf("failed to get address from Keyring: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = info.GetAddress()
|
addr, err = info.GetAddress()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
coins, err := sdk.ParseCoinsNormalized(args[1])
|
coins, err := sdk.ParseCoinsNormalized(args[1])
|
||||||
|
@ -17,7 +17,7 @@ func main() {
|
|||||||
|
|
||||||
rootCmd, _ := NewRootCmd()
|
rootCmd, _ := NewRootCmd()
|
||||||
|
|
||||||
if err := svrcmd.Execute(rootCmd, app.DefaultNodeHome); err != nil {
|
if err := svrcmd.Execute(rootCmd, EnvPrefix, app.DefaultNodeHome); err != nil {
|
||||||
switch e := err.(type) {
|
switch e := err.(type) {
|
||||||
case server.ErrorCode:
|
case server.ErrorCode:
|
||||||
os.Exit(e.Code)
|
os.Exit(e.Code)
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
tmcfg "github.com/tendermint/tendermint/config"
|
||||||
tmcli "github.com/tendermint/tendermint/libs/cli"
|
tmcli "github.com/tendermint/tendermint/libs/cli"
|
||||||
tmlog "github.com/tendermint/tendermint/libs/log"
|
tmlog "github.com/tendermint/tendermint/libs/log"
|
||||||
dbm "github.com/tendermint/tm-db"
|
dbm "github.com/tendermint/tm-db"
|
||||||
@ -22,6 +23,7 @@ import (
|
|||||||
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
||||||
"github.com/cosmos/cosmos-sdk/simapp/params"
|
"github.com/cosmos/cosmos-sdk/simapp/params"
|
||||||
"github.com/cosmos/cosmos-sdk/snapshots"
|
"github.com/cosmos/cosmos-sdk/snapshots"
|
||||||
|
snapshottypes "github.com/cosmos/cosmos-sdk/snapshots/types"
|
||||||
"github.com/cosmos/cosmos-sdk/store"
|
"github.com/cosmos/cosmos-sdk/store"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
|
||||||
@ -48,7 +50,7 @@ const EnvPrefix = "ETHERMINT"
|
|||||||
func NewRootCmd() (*cobra.Command, params.EncodingConfig) {
|
func NewRootCmd() (*cobra.Command, params.EncodingConfig) {
|
||||||
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
||||||
initClientCtx := client.Context{}.
|
initClientCtx := client.Context{}.
|
||||||
WithCodec(encodingConfig.Marshaler).
|
WithCodec(encodingConfig.Codec).
|
||||||
WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
|
WithInterfaceRegistry(encodingConfig.InterfaceRegistry).
|
||||||
WithTxConfig(encodingConfig.TxConfig).
|
WithTxConfig(encodingConfig.TxConfig).
|
||||||
WithLegacyAmino(encodingConfig.Amino).
|
WithLegacyAmino(encodingConfig.Amino).
|
||||||
@ -84,12 +86,12 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) {
|
|||||||
// FIXME: replace AttoPhoton with bond denom
|
// FIXME: replace AttoPhoton with bond denom
|
||||||
customAppTemplate, customAppConfig := servercfg.AppConfig(ethermint.AttoPhoton)
|
customAppTemplate, customAppConfig := servercfg.AppConfig(ethermint.AttoPhoton)
|
||||||
|
|
||||||
return sdkserver.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig)
|
return sdkserver.InterceptConfigsPreRunHandler(cmd, customAppTemplate, customAppConfig, tmcfg.DefaultConfig())
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: double-check
|
// TODO: double-check
|
||||||
// authclient.Codec = encodingConfig.Marshaler
|
// authclient.Codec = encodingConfig.Codec
|
||||||
|
|
||||||
cfg := sdk.GetConfig()
|
cfg := sdk.GetConfig()
|
||||||
cfg.Seal()
|
cfg.Seal()
|
||||||
@ -126,7 +128,7 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add rosetta
|
// add rosetta
|
||||||
rootCmd.AddCommand(sdkserver.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler))
|
rootCmd.AddCommand(sdkserver.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Codec))
|
||||||
|
|
||||||
return rootCmd, encodingConfig
|
return rootCmd, encodingConfig
|
||||||
}
|
}
|
||||||
@ -208,7 +210,7 @@ func (a appCreator) newApp(logger tmlog.Logger, db dbm.DB, traceStore io.Writer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots")
|
snapshotDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data", "snapshots")
|
||||||
snapshotDB, err := sdk.NewLevelDB("metadata", snapshotDir)
|
snapshotDB, err := dbm.NewDB("metadata", sdkserver.GetAppDBBackend(appOpts), snapshotDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -217,6 +219,11 @@ func (a appCreator) newApp(logger tmlog.Logger, db dbm.DB, traceStore io.Writer,
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
snapshotOptions := snapshottypes.NewSnapshotOptions(
|
||||||
|
cast.ToUint64(appOpts.Get(sdkserver.FlagStateSyncSnapshotInterval)),
|
||||||
|
cast.ToUint32(appOpts.Get(sdkserver.FlagStateSyncSnapshotKeepRecent)),
|
||||||
|
)
|
||||||
|
|
||||||
ethermintApp := app.NewEthermintApp(
|
ethermintApp := app.NewEthermintApp(
|
||||||
logger, db, traceStore, true, skipUpgradeHeights,
|
logger, db, traceStore, true, skipUpgradeHeights,
|
||||||
cast.ToString(appOpts.Get(flags.FlagHome)),
|
cast.ToString(appOpts.Get(flags.FlagHome)),
|
||||||
@ -231,9 +238,7 @@ func (a appCreator) newApp(logger tmlog.Logger, db dbm.DB, traceStore io.Writer,
|
|||||||
baseapp.SetInterBlockCache(cache),
|
baseapp.SetInterBlockCache(cache),
|
||||||
baseapp.SetTrace(cast.ToBool(appOpts.Get(sdkserver.FlagTrace))),
|
baseapp.SetTrace(cast.ToBool(appOpts.Get(sdkserver.FlagTrace))),
|
||||||
baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(sdkserver.FlagIndexEvents))),
|
baseapp.SetIndexEvents(cast.ToStringSlice(appOpts.Get(sdkserver.FlagIndexEvents))),
|
||||||
baseapp.SetSnapshotStore(snapshotStore),
|
baseapp.SetSnapshot(snapshotStore, snapshotOptions),
|
||||||
baseapp.SetSnapshotInterval(cast.ToUint64(appOpts.Get(sdkserver.FlagStateSyncSnapshotInterval))),
|
|
||||||
baseapp.SetSnapshotKeepRecent(cast.ToUint32(appOpts.Get(sdkserver.FlagStateSyncSnapshotKeepRecent))),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return ethermintApp
|
return ethermintApp
|
||||||
|
@ -10,4 +10,5 @@ import (
|
|||||||
// RegisterInterfaces register the Ethermint key concrete types.
|
// RegisterInterfaces register the Ethermint key concrete types.
|
||||||
func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
||||||
registry.RegisterImplementations((*cryptotypes.PubKey)(nil), ðsecp256k1.PubKey{})
|
registry.RegisterImplementations((*cryptotypes.PubKey)(nil), ðsecp256k1.PubKey{})
|
||||||
|
registry.RegisterImplementations((*cryptotypes.PrivKey)(nil), ðsecp256k1.PrivKey{})
|
||||||
}
|
}
|
||||||
|
@ -11,15 +11,24 @@ import (
|
|||||||
hdwallet "github.com/miguelmota/go-ethereum-hdwallet"
|
hdwallet "github.com/miguelmota/go-ethereum-hdwallet"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
amino "github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
|
|
||||||
cryptocodec "github.com/evmos/ethermint/crypto/codec"
|
cryptocodec "github.com/evmos/ethermint/crypto/codec"
|
||||||
|
enccodec "github.com/evmos/ethermint/encoding/codec"
|
||||||
ethermint "github.com/evmos/ethermint/types"
|
ethermint "github.com/evmos/ethermint/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var TestCodec codec.Codec
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
amino := codec.NewLegacyAmino()
|
cdc := codec.NewLegacyAmino()
|
||||||
cryptocodec.RegisterCrypto(amino)
|
cryptocodec.RegisterCrypto(cdc)
|
||||||
|
|
||||||
|
interfaceRegistry := types.NewInterfaceRegistry()
|
||||||
|
TestCodec = amino.NewProtoCodec(interfaceRegistry)
|
||||||
|
enccodec.RegisterInterfaces(interfaceRegistry)
|
||||||
}
|
}
|
||||||
|
|
||||||
const mnemonic = "picnic rent average infant boat squirrel federal assault mercy purity very motor fossil wheel verify upset box fresh horse vivid copy predict square regret"
|
const mnemonic = "picnic rent average infant boat squirrel federal assault mercy purity very motor fossil wheel verify upset box fresh horse vivid copy predict square regret"
|
||||||
@ -28,7 +37,7 @@ func TestKeyring(t *testing.T) {
|
|||||||
dir := t.TempDir()
|
dir := t.TempDir()
|
||||||
mockIn := strings.NewReader("")
|
mockIn := strings.NewReader("")
|
||||||
|
|
||||||
kr, err := keyring.New("ethermint", keyring.BackendTest, dir, mockIn, EthSecp256k1Option())
|
kr, err := keyring.New("ethermint", keyring.BackendTest, dir, mockIn, TestCodec, EthSecp256k1Option())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// fail in retrieving key
|
// fail in retrieving key
|
||||||
@ -40,9 +49,11 @@ func TestKeyring(t *testing.T) {
|
|||||||
info, mnemonic, err := kr.NewMnemonic("foo", keyring.English, ethermint.BIP44HDPath, keyring.DefaultBIP39Passphrase, EthSecp256k1)
|
info, mnemonic, err := kr.NewMnemonic("foo", keyring.English, ethermint.BIP44HDPath, keyring.DefaultBIP39Passphrase, EthSecp256k1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotEmpty(t, mnemonic)
|
require.NotEmpty(t, mnemonic)
|
||||||
require.Equal(t, "foo", info.GetName())
|
require.Equal(t, "foo", info.Name)
|
||||||
require.Equal(t, "local", info.GetType().String())
|
require.Equal(t, "local", info.GetType().String())
|
||||||
require.Equal(t, EthSecp256k1Type, info.GetAlgo())
|
pubKey, err := info.GetPubKey()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, string(EthSecp256k1Type), pubKey.Type())
|
||||||
|
|
||||||
hdPath := ethermint.BIP44HDPath
|
hdPath := ethermint.BIP44HDPath
|
||||||
|
|
||||||
|
@ -14,12 +14,12 @@ import (
|
|||||||
func MakeConfig(mb module.BasicManager) params.EncodingConfig {
|
func MakeConfig(mb module.BasicManager) params.EncodingConfig {
|
||||||
cdc := amino.NewLegacyAmino()
|
cdc := amino.NewLegacyAmino()
|
||||||
interfaceRegistry := types.NewInterfaceRegistry()
|
interfaceRegistry := types.NewInterfaceRegistry()
|
||||||
marshaler := amino.NewProtoCodec(interfaceRegistry)
|
codec := amino.NewProtoCodec(interfaceRegistry)
|
||||||
|
|
||||||
encodingConfig := params.EncodingConfig{
|
encodingConfig := params.EncodingConfig{
|
||||||
InterfaceRegistry: interfaceRegistry,
|
InterfaceRegistry: interfaceRegistry,
|
||||||
Marshaler: marshaler,
|
Codec: codec,
|
||||||
TxConfig: tx.NewTxConfig(marshaler, tx.DefaultSignModes),
|
TxConfig: tx.NewTxConfig(codec, tx.DefaultSignModes),
|
||||||
Amino: cdc,
|
Amino: cdc,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"golang.org/x/text/cases"
|
"golang.org/x/text/cases"
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
|
|
||||||
@ -379,7 +380,7 @@ var (
|
|||||||
hashType = reflect.TypeOf(common.Hash{})
|
hashType = reflect.TypeOf(common.Hash{})
|
||||||
addressType = reflect.TypeOf(common.Address{})
|
addressType = reflect.TypeOf(common.Address{})
|
||||||
bigIntType = reflect.TypeOf(big.Int{})
|
bigIntType = reflect.TypeOf(big.Int{})
|
||||||
cosmIntType = reflect.TypeOf(sdk.Int{})
|
cosmIntType = reflect.TypeOf(sdkmath.Int{})
|
||||||
cosmosAnyType = reflect.TypeOf(&codectypes.Any{})
|
cosmosAnyType = reflect.TypeOf(&codectypes.Any{})
|
||||||
)
|
)
|
||||||
|
|
||||||
|
98
go.mod
98
go.mod
@ -3,12 +3,13 @@ module github.com/evmos/ethermint
|
|||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
cosmossdk.io/math v1.0.0-beta.2
|
||||||
github.com/armon/go-metrics v0.4.0
|
github.com/armon/go-metrics v0.4.0
|
||||||
github.com/btcsuite/btcd v0.22.1
|
github.com/btcsuite/btcd v0.22.1
|
||||||
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce
|
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce
|
||||||
github.com/cosmos/cosmos-sdk v0.45.6
|
github.com/cosmos/cosmos-sdk v0.46.0
|
||||||
github.com/cosmos/go-bip39 v1.0.0
|
github.com/cosmos/go-bip39 v1.0.0
|
||||||
github.com/cosmos/ibc-go/v4 v4.0.0-rc1
|
github.com/cosmos/ibc-go/v5 v5.0.0
|
||||||
github.com/davecgh/go-spew v1.1.1
|
github.com/davecgh/go-spew v1.1.1
|
||||||
github.com/ethereum/go-ethereum v1.10.19
|
github.com/ethereum/go-ethereum v1.10.19
|
||||||
github.com/gogo/protobuf v1.3.3
|
github.com/gogo/protobuf v1.3.3
|
||||||
@ -29,49 +30,57 @@ require (
|
|||||||
github.com/spf13/viper v1.12.0
|
github.com/spf13/viper v1.12.0
|
||||||
github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969
|
github.com/status-im/keycard-go v0.0.0-20200402102358-957c09536969
|
||||||
github.com/stretchr/testify v1.8.0
|
github.com/stretchr/testify v1.8.0
|
||||||
github.com/tendermint/tendermint v0.34.20-0.20220517115723-e6f071164839
|
github.com/tendermint/tendermint v0.34.20
|
||||||
github.com/tendermint/tm-db v0.6.7
|
github.com/tendermint/tm-db v0.6.7
|
||||||
github.com/tyler-smith/go-bip39 v1.1.0
|
github.com/tyler-smith/go-bip39 v1.1.0
|
||||||
golang.org/x/text v0.3.7
|
golang.org/x/text v0.3.7
|
||||||
google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03
|
google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03
|
||||||
google.golang.org/grpc v1.47.0
|
google.golang.org/grpc v1.48.0
|
||||||
google.golang.org/protobuf v1.28.0
|
google.golang.org/protobuf v1.28.0
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
sigs.k8s.io/yaml v1.3.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
filippo.io/edwards25519 v1.0.0-beta.2 // indirect
|
cloud.google.com/go v0.100.2 // indirect
|
||||||
github.com/99designs/keyring v1.1.6 // indirect
|
cloud.google.com/go/compute v1.6.1 // indirect
|
||||||
|
cloud.google.com/go/iam v0.3.0 // indirect
|
||||||
|
cloud.google.com/go/storage v1.14.0 // indirect
|
||||||
|
cosmossdk.io/errors v1.0.0-beta.7 // indirect
|
||||||
|
filippo.io/edwards25519 v1.0.0-rc.1 // indirect
|
||||||
|
github.com/99designs/keyring v1.2.1 // indirect
|
||||||
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
|
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
|
||||||
github.com/DataDog/zstd v1.4.5 // indirect
|
|
||||||
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect
|
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect
|
||||||
github.com/VictoriaMetrics/fastcache v1.6.0 // indirect
|
github.com/VictoriaMetrics/fastcache v1.6.0 // indirect
|
||||||
github.com/Workiva/go-datastructures v1.0.53 // indirect
|
github.com/Workiva/go-datastructures v1.0.53 // indirect
|
||||||
|
github.com/aws/aws-sdk-go v1.40.45 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
|
||||||
github.com/bgentry/speakeasy v0.1.0 // indirect
|
github.com/bgentry/speakeasy v0.1.0 // indirect
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
|
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
|
||||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.1.1 // indirect
|
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
|
||||||
github.com/cespare/xxhash v1.1.0 // indirect
|
github.com/cespare/xxhash v1.1.0 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||||
github.com/coinbase/rosetta-sdk-go v0.7.0 // indirect
|
github.com/cockroachdb/apd/v2 v2.0.2 // indirect
|
||||||
|
github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect
|
||||||
github.com/confio/ics23/go v0.7.0 // indirect
|
github.com/confio/ics23/go v0.7.0 // indirect
|
||||||
github.com/cosmos/btcutil v1.0.4 // indirect
|
github.com/cosmos/btcutil v1.0.4 // indirect
|
||||||
|
github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect
|
||||||
github.com/cosmos/gorocksdb v1.2.0 // indirect
|
github.com/cosmos/gorocksdb v1.2.0 // indirect
|
||||||
github.com/cosmos/iavl v0.17.3 // indirect
|
github.com/cosmos/iavl v0.19.0 // indirect
|
||||||
github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect
|
github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect
|
||||||
github.com/cosmos/ledger-go v0.9.2 // indirect
|
github.com/cosmos/ledger-go v0.9.2 // indirect
|
||||||
github.com/danieljoos/wincred v1.0.2 // indirect
|
github.com/danieljoos/wincred v1.1.2 // indirect
|
||||||
github.com/deckarep/golang-set v1.8.0 // indirect
|
github.com/deckarep/golang-set v1.8.0 // indirect
|
||||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
|
||||||
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
|
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
|
||||||
github.com/dgraph-io/badger/v2 v2.2007.2 // indirect
|
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
|
||||||
github.com/dgraph-io/ristretto v0.0.3 // indirect
|
github.com/dgraph-io/ristretto v0.1.0 // indirect
|
||||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
|
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
|
||||||
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect
|
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect
|
||||||
github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf // indirect
|
github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf // indirect
|
||||||
github.com/dustin/go-humanize v1.0.0 // indirect
|
github.com/dustin/go-humanize v1.0.0 // indirect
|
||||||
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect
|
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
|
||||||
github.com/edsrzf/mmap-go v1.0.0 // indirect
|
github.com/edsrzf/mmap-go v1.0.0 // indirect
|
||||||
github.com/felixge/httpsnoop v1.0.1 // indirect
|
github.com/felixge/httpsnoop v1.0.1 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.5.4 // indirect
|
github.com/fsnotify/fsnotify v1.5.4 // indirect
|
||||||
@ -79,84 +88,107 @@ require (
|
|||||||
github.com/go-kit/kit v0.12.0 // indirect
|
github.com/go-kit/kit v0.12.0 // indirect
|
||||||
github.com/go-kit/log v0.2.1 // indirect
|
github.com/go-kit/log v0.2.1 // indirect
|
||||||
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
||||||
github.com/go-ole/go-ole v1.2.1 // indirect
|
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||||
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
|
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
|
||||||
github.com/go-stack/stack v1.8.0 // indirect
|
github.com/go-stack/stack v1.8.0 // indirect
|
||||||
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
|
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
|
||||||
github.com/gogo/gateway v1.1.0 // indirect
|
github.com/gogo/gateway v1.1.0 // indirect
|
||||||
|
github.com/golang/glog v1.0.0 // indirect
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
github.com/google/btree v1.0.0 // indirect
|
github.com/google/btree v1.0.1 // indirect
|
||||||
github.com/google/go-cmp v0.5.8 // indirect
|
github.com/google/go-cmp v0.5.8 // indirect
|
||||||
github.com/google/orderedcode v0.0.1 // indirect
|
github.com/google/orderedcode v0.0.1 // indirect
|
||||||
github.com/google/uuid v1.3.0 // indirect
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
|
github.com/googleapis/gax-go/v2 v2.4.0 // indirect
|
||||||
github.com/gorilla/handlers v1.5.1 // indirect
|
github.com/gorilla/handlers v1.5.1 // indirect
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
|
||||||
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
|
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
|
||||||
github.com/gtank/merlin v0.1.1 // indirect
|
github.com/gtank/merlin v0.1.1 // indirect
|
||||||
github.com/gtank/ristretto255 v0.1.2 // indirect
|
github.com/gtank/ristretto255 v0.1.2 // indirect
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
|
github.com/hashicorp/go-getter v1.6.1 // indirect
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||||
|
github.com/hashicorp/go-safetemp v1.0.0 // indirect
|
||||||
|
github.com/hashicorp/go-version v1.4.0 // indirect
|
||||||
github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
|
github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 // indirect
|
github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect
|
||||||
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
|
github.com/holiman/bloomfilter/v2 v2.0.3 // indirect
|
||||||
github.com/holiman/uint256 v1.2.0 // indirect
|
github.com/holiman/uint256 v1.2.0 // indirect
|
||||||
github.com/huin/goupnp v1.0.3 // indirect
|
github.com/huin/goupnp v1.0.3 // indirect
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
||||||
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
|
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
|
||||||
|
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||||
github.com/jmhodges/levigo v1.0.0 // indirect
|
github.com/jmhodges/levigo v1.0.0 // indirect
|
||||||
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect
|
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect
|
||||||
github.com/klauspost/compress v1.13.6 // indirect
|
github.com/klauspost/compress v1.15.1 // indirect
|
||||||
github.com/lib/pq v1.10.6 // indirect
|
github.com/lib/pq v1.10.6 // indirect
|
||||||
github.com/libp2p/go-buffer-pool v0.0.2 // indirect
|
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
|
||||||
github.com/magiconair/properties v1.8.6 // indirect
|
github.com/magiconair/properties v1.8.6 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.12 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.9 // indirect
|
github.com/mattn/go-runewidth v0.0.9 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
|
||||||
github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect
|
github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect
|
||||||
github.com/minio/highwayhash v1.0.2 // indirect
|
github.com/minio/highwayhash v1.0.2 // indirect
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
|
github.com/mitchellh/go-testing-interface v1.0.0 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/mtibben/percent v0.2.1 // indirect
|
github.com/mtibben/percent v0.2.1 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
github.com/pelletier/go-toml v1.9.5 // indirect
|
github.com/pelletier/go-toml v1.9.5 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
|
github.com/pelletier/go-toml/v2 v2.0.2 // indirect
|
||||||
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
|
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/prometheus/client_golang v1.12.2 // indirect
|
github.com/prometheus/client_golang v1.12.2 // indirect
|
||||||
github.com/prometheus/client_model v0.2.0 // indirect
|
github.com/prometheus/client_model v0.2.0 // indirect
|
||||||
github.com/prometheus/common v0.32.1 // indirect
|
github.com/prometheus/common v0.34.0 // indirect
|
||||||
github.com/prometheus/procfs v0.7.3 // indirect
|
github.com/prometheus/procfs v0.7.3 // indirect
|
||||||
github.com/prometheus/tsdb v0.7.1 // indirect
|
github.com/prometheus/tsdb v0.7.1 // indirect
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect
|
github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect
|
||||||
github.com/rjeczalik/notify v0.9.1 // indirect
|
github.com/rjeczalik/notify v0.9.1 // indirect
|
||||||
github.com/rs/zerolog v1.23.0 // indirect
|
github.com/rs/zerolog v1.27.0 // indirect
|
||||||
github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect
|
github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect
|
||||||
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
|
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
|
||||||
github.com/spf13/afero v1.8.2 // indirect
|
github.com/spf13/afero v1.8.2 // indirect
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/stretchr/objx v0.4.0 // indirect
|
github.com/stretchr/objx v0.4.0 // indirect
|
||||||
github.com/subosito/gotenv v1.3.0 // indirect
|
github.com/subosito/gotenv v1.4.0 // indirect
|
||||||
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect
|
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect
|
||||||
github.com/tendermint/btcd v0.1.1 // indirect
|
github.com/tendermint/btcd v0.1.1 // indirect
|
||||||
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect
|
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect
|
||||||
github.com/tendermint/go-amino v0.16.0 // indirect
|
github.com/tendermint/go-amino v0.16.0 // indirect
|
||||||
github.com/tklauser/go-sysconf v0.3.5 // indirect
|
github.com/tklauser/go-sysconf v0.3.10 // indirect
|
||||||
github.com/tklauser/numcpus v0.2.2 // indirect
|
github.com/tklauser/numcpus v0.4.0 // indirect
|
||||||
github.com/zondax/hid v0.9.0 // indirect
|
github.com/ulikunitz/xz v0.5.8 // indirect
|
||||||
|
github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 // indirect
|
||||||
go.etcd.io/bbolt v1.3.6 // indirect
|
go.etcd.io/bbolt v1.3.6 // indirect
|
||||||
|
go.opencensus.io v0.23.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
||||||
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect
|
golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect
|
||||||
|
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect
|
||||||
golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect
|
golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
|
golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect
|
||||||
gopkg.in/ini.v1 v1.66.4 // indirect
|
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect
|
||||||
|
google.golang.org/api v0.81.0 // indirect
|
||||||
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
|
gopkg.in/ini.v1 v1.66.6 // indirect
|
||||||
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
|
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
nhooyr.io/websocket v1.8.6 // indirect
|
nhooyr.io/websocket v1.8.6 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76
|
github.com/99designs/keyring => github.com/cosmos/keyring v1.1.7-0.20210622111912-ef00f8ac3d76
|
||||||
|
|
||||||
|
github.com/cosmos/ibc-go/v5 => github.com/notional-labs/ibc-go/v5 v5.0.0-20220728121949-040aca93dda5
|
||||||
|
|
||||||
|
// Fix upstream GHSA-h395-qcrw-5vmq vulnerability.
|
||||||
|
// TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409
|
||||||
|
github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0
|
||||||
github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
|
github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
|
||||||
google.golang.org/grpc => google.golang.org/grpc v1.33.2
|
|
||||||
)
|
)
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
tmrpctypes "github.com/tendermint/tendermint/rpc/core/types"
|
tmrpctypes "github.com/tendermint/tendermint/rpc/core/types"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
@ -74,6 +75,7 @@ func NewPublicAPI(
|
|||||||
viper.GetString(flags.FlagKeyringBackend),
|
viper.GetString(flags.FlagKeyringBackend),
|
||||||
clientCtx.KeyringDir,
|
clientCtx.KeyringDir,
|
||||||
clientCtx.Input,
|
clientCtx.Input,
|
||||||
|
clientCtx.Codec,
|
||||||
hd.EthSecp256k1Option(),
|
hd.EthSecp256k1Option(),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -252,7 +254,11 @@ func (e *PublicAPI) Accounts() ([]common.Address, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, info := range infos {
|
for _, info := range infos {
|
||||||
addressBytes := info.GetPubKey().Address().Bytes()
|
pubKey, err := info.GetPubKey()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
addressBytes := pubKey.Address().Bytes()
|
||||||
addresses = append(addresses, common.BytesToAddress(addressBytes))
|
addresses = append(addresses, common.BytesToAddress(addressBytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +289,7 @@ func (e *PublicAPI) GetBalance(address common.Address, blockNrOrHash rpctypes.Bl
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
val, ok := sdk.NewIntFromString(res.Balance)
|
val, ok := sdkmath.NewIntFromString(res.Balance)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("invalid balance")
|
return nil, errors.New("invalid balance")
|
||||||
}
|
}
|
||||||
@ -1116,7 +1122,7 @@ func (e *PublicAPI) GetProof(address common.Address, storageKeys []string, block
|
|||||||
accProofStr = proof.String()
|
accProofStr = proof.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
balance, ok := sdk.NewIntFromString(res.Balance)
|
balance, ok := sdkmath.NewIntFromString(res.Balance)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("invalid balance")
|
return nil, errors.New("invalid balance")
|
||||||
}
|
}
|
||||||
|
@ -389,6 +389,7 @@ func (api *PublicFilterAPI) Logs(ctx context.Context, crit filters.FilterCriteri
|
|||||||
|
|
||||||
txResponse, err := evmtypes.DecodeTxResponse(dataTx.TxResult.Result.Data)
|
txResponse, err := evmtypes.DecodeTxResponse(dataTx.TxResult.Result.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
api.logger.Error("fail to decode tx response", "error", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,6 +466,7 @@ func (api *PublicFilterAPI) NewFilter(criteria filters.FilterCriteria) (rpc.ID,
|
|||||||
|
|
||||||
txResponse, err := evmtypes.DecodeTxResponse(dataTx.TxResult.Result.Data)
|
txResponse, err := evmtypes.DecodeTxResponse(dataTx.TxResult.Result.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
api.logger.Error("fail to decode tx response", "error", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,8 +3,9 @@ package miner
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
"github.com/cosmos/cosmos-sdk/client/tx"
|
"github.com/cosmos/cosmos-sdk/client/tx"
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
@ -114,7 +115,7 @@ func (api *API) SetEtherbase(etherbase common.Address) bool {
|
|||||||
txFactory = txFactory.WithGas(gas)
|
txFactory = txFactory.WithGas(gas)
|
||||||
|
|
||||||
value := new(big.Int).SetUint64(gas * minGasPriceValue.Ceil().TruncateInt().Uint64())
|
value := new(big.Int).SetUint64(gas * minGasPriceValue.Ceil().TruncateInt().Uint64())
|
||||||
fees := sdk.Coins{sdk.NewCoin(denom, sdk.NewIntFromBigInt(value))}
|
fees := sdk.Coins{sdk.NewCoin(denom, sdkmath.NewIntFromBigInt(value))}
|
||||||
builder.SetFeeAmount(fees)
|
builder.SetFeeAmount(fees)
|
||||||
builder.SetGasLimit(gas)
|
builder.SetGasLimit(gas)
|
||||||
|
|
||||||
@ -124,7 +125,7 @@ func (api *API) SetEtherbase(etherbase common.Address) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tx.Sign(txFactory, keyInfo.GetName(), builder, false); err != nil {
|
if err := tx.Sign(txFactory, keyInfo.Name, builder, false); err != nil {
|
||||||
api.logger.Debug("failed to sign tx", "error", err.Error())
|
api.logger.Debug("failed to sign tx", "error", err.Error())
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -177,7 +178,7 @@ func (api *API) SetGasPrice(gasPrice hexutil.Big) bool {
|
|||||||
unit = minGasPrices[0].Denom
|
unit = minGasPrices[0].Denom
|
||||||
}
|
}
|
||||||
|
|
||||||
c := sdk.NewDecCoin(unit, sdk.NewIntFromBigInt(gasPrice.ToInt()))
|
c := sdk.NewDecCoin(unit, sdkmath.NewIntFromBigInt(gasPrice.ToInt()))
|
||||||
|
|
||||||
appConf.SetMinGasPrices(sdk.DecCoins{c})
|
appConf.SetMinGasPrices(sdk.DecCoins{c})
|
||||||
sdkconfig.WriteConfigFile(api.ctx.Viper.ConfigFileUsed(), appConf)
|
sdkconfig.WriteConfigFile(api.ctx.Viper.ConfigFileUsed(), appConf)
|
||||||
|
@ -106,7 +106,11 @@ func (api *PrivateAccountAPI) ListAccounts() ([]common.Address, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, info := range list {
|
for _, info := range list {
|
||||||
addrs = append(addrs, common.BytesToAddress(info.GetPubKey().Address()))
|
pubKey, err := info.GetPubKey()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
addrs = append(addrs, common.BytesToAddress(pubKey.Address()))
|
||||||
}
|
}
|
||||||
|
|
||||||
return addrs, nil
|
return addrs, nil
|
||||||
@ -135,7 +139,11 @@ func (api *PrivateAccountAPI) NewAccount(password string) (common.Address, error
|
|||||||
return common.Address{}, err
|
return common.Address{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
addr := common.BytesToAddress(info.GetPubKey().Address().Bytes())
|
pubKey, err := info.GetPubKey()
|
||||||
|
if err != nil {
|
||||||
|
return common.Address{}, err
|
||||||
|
}
|
||||||
|
addr := common.BytesToAddress(pubKey.Address().Bytes())
|
||||||
api.logger.Info("Your new key was generated", "address", addr.String())
|
api.logger.Info("Your new key was generated", "address", addr.String())
|
||||||
api.logger.Info("Please backup your key file!", "path", os.Getenv("HOME")+"/.ethermint/"+name) // TODO: pass the correct binary
|
api.logger.Info("Please backup your key file!", "path", os.Getenv("HOME")+"/.ethermint/"+name) // TODO: pass the correct binary
|
||||||
api.logger.Info("Please remember your password!")
|
api.logger.Info("Please remember your password!")
|
||||||
|
@ -33,13 +33,12 @@ import (
|
|||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
pruningtypes "github.com/cosmos/cosmos-sdk/pruning/types"
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
"github.com/cosmos/cosmos-sdk/server/api"
|
"github.com/cosmos/cosmos-sdk/server/api"
|
||||||
serverconfig "github.com/cosmos/cosmos-sdk/server/config"
|
serverconfig "github.com/cosmos/cosmos-sdk/server/config"
|
||||||
servergrpc "github.com/cosmos/cosmos-sdk/server/grpc"
|
servergrpc "github.com/cosmos/cosmos-sdk/server/grpc"
|
||||||
"github.com/cosmos/cosmos-sdk/server/types"
|
"github.com/cosmos/cosmos-sdk/server/types"
|
||||||
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
|
|
||||||
ethdebug "github.com/evmos/ethermint/rpc/namespaces/ethereum/debug"
|
ethdebug "github.com/evmos/ethermint/rpc/namespaces/ethereum/debug"
|
||||||
"github.com/evmos/ethermint/server/config"
|
"github.com/evmos/ethermint/server/config"
|
||||||
@ -137,9 +136,8 @@ which accepts a path for the resulting pprof file.
|
|||||||
cmd.Flags().Bool(server.FlagInterBlockCache, true, "Enable inter-block caching")
|
cmd.Flags().Bool(server.FlagInterBlockCache, true, "Enable inter-block caching")
|
||||||
cmd.Flags().String(srvflags.CPUProfile, "", "Enable CPU profiling and write to the provided file")
|
cmd.Flags().String(srvflags.CPUProfile, "", "Enable CPU profiling and write to the provided file")
|
||||||
cmd.Flags().Bool(server.FlagTrace, false, "Provide full stack traces for errors in ABCI Log")
|
cmd.Flags().Bool(server.FlagTrace, false, "Provide full stack traces for errors in ABCI Log")
|
||||||
cmd.Flags().String(server.FlagPruning, storetypes.PruningOptionDefault, "Pruning strategy (default|nothing|everything|custom)")
|
cmd.Flags().String(server.FlagPruning, pruningtypes.PruningOptionDefault, "Pruning strategy (default|nothing|everything|custom)")
|
||||||
cmd.Flags().Uint64(server.FlagPruningKeepRecent, 0, "Number of recent heights to keep on disk (ignored if pruning is not 'custom')")
|
cmd.Flags().Uint64(server.FlagPruningKeepRecent, 0, "Number of recent heights to keep on disk (ignored if pruning is not 'custom')")
|
||||||
cmd.Flags().Uint64(server.FlagPruningKeepEvery, 0, "Offset heights to keep on disk after 'keep-every' (ignored if pruning is not 'custom')")
|
|
||||||
cmd.Flags().Uint64(server.FlagPruningInterval, 0, "Height interval at which pruned heights are removed from disk (ignored if pruning is not 'custom')")
|
cmd.Flags().Uint64(server.FlagPruningInterval, 0, "Height interval at which pruned heights are removed from disk (ignored if pruning is not 'custom')")
|
||||||
cmd.Flags().Uint(server.FlagInvCheckPeriod, 0, "Assert registered invariants every N blocks")
|
cmd.Flags().Uint(server.FlagInvCheckPeriod, 0, "Assert registered invariants every N blocks")
|
||||||
cmd.Flags().Uint64(server.FlagMinRetainBlocks, 0, "Minimum block height offset during ABCI commit to prune Tendermint blocks")
|
cmd.Flags().Uint64(server.FlagMinRetainBlocks, 0, "Minimum block height offset during ABCI commit to prune Tendermint blocks")
|
||||||
@ -185,7 +183,7 @@ func startStandAlone(ctx *server.Context, appCreator types.AppCreator) error {
|
|||||||
transport := ctx.Viper.GetString(srvflags.Transport)
|
transport := ctx.Viper.GetString(srvflags.Transport)
|
||||||
home := ctx.Viper.GetString(flags.FlagHome)
|
home := ctx.Viper.GetString(flags.FlagHome)
|
||||||
|
|
||||||
db, err := openDB(home)
|
db, err := openDB(home, server.GetAppDBBackend(ctx.Viper))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -260,7 +258,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
|
|||||||
}
|
}
|
||||||
|
|
||||||
traceWriterFile := ctx.Viper.GetString(srvflags.TraceStore)
|
traceWriterFile := ctx.Viper.GetString(srvflags.TraceStore)
|
||||||
db, err := openDB(home)
|
db, err := openDB(home, server.GetAppDBBackend(ctx.Viper))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("failed to open DB", "error", err.Error())
|
logger.Error("failed to open DB", "error", err.Error())
|
||||||
return err
|
return err
|
||||||
@ -363,7 +361,7 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
|
|||||||
grpcWebSrv *http.Server
|
grpcWebSrv *http.Server
|
||||||
)
|
)
|
||||||
if config.GRPC.Enable {
|
if config.GRPC.Enable {
|
||||||
grpcSrv, err = servergrpc.StartGRPCServer(clientCtx, app, config.GRPC.Address)
|
grpcSrv, err = servergrpc.StartGRPCServer(clientCtx, app, config.GRPC)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -477,9 +475,9 @@ func startInProcess(ctx *server.Context, clientCtx client.Context, appCreator ty
|
|||||||
return server.WaitForQuitSignals()
|
return server.WaitForQuitSignals()
|
||||||
}
|
}
|
||||||
|
|
||||||
func openDB(rootDir string) (dbm.DB, error) {
|
func openDB(rootDir string, backendType dbm.BackendType) (dbm.DB, error) {
|
||||||
dataDir := filepath.Join(rootDir, "data")
|
dataDir := filepath.Join(rootDir, "data")
|
||||||
return sdk.NewLevelDB("application", dataDir)
|
return dbm.NewDB("application", backendType, dataDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
func openTraceWriter(traceWriterFile string) (w io.Writer, err error) {
|
func openTraceWriter(traceWriterFile string) (w io.Writer, err error) {
|
||||||
|
@ -18,6 +18,7 @@ import (
|
|||||||
// . "github.com/onsi/ginkgo/v2"
|
// . "github.com/onsi/ginkgo/v2"
|
||||||
// . "github.com/onsi/gomega"
|
// . "github.com/onsi/gomega"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum"
|
"github.com/ethereum/go-ethereum"
|
||||||
@ -576,7 +577,7 @@ func (s *IntegrationTestSuite) deployContract(data []byte) (transaction common.H
|
|||||||
// Deploys erc20 contract, commits block and returns contract address
|
// Deploys erc20 contract, commits block and returns contract address
|
||||||
func (s *IntegrationTestSuite) deployERC20Contract() (transaction common.Hash, contractAddr common.Address) {
|
func (s *IntegrationTestSuite) deployERC20Contract() (transaction common.Hash, contractAddr common.Address) {
|
||||||
owner := common.BytesToAddress(s.network.Validators[0].Address)
|
owner := common.BytesToAddress(s.network.Validators[0].Address)
|
||||||
supply := sdk.NewIntWithDecimal(1000, 18).BigInt()
|
supply := sdkmath.NewIntWithDecimal(1000, 18).BigInt()
|
||||||
|
|
||||||
ctorArgs, err := evmtypes.ERC20Contract.ABI.Pack("", owner, supply)
|
ctorArgs, err := evmtypes.ERC20Contract.ABI.Pack("", owner, supply)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
@ -799,7 +800,7 @@ func (s *IntegrationTestSuite) TestBatchETHTransactions() {
|
|||||||
msgs = append(msgs, msgTx.GetMsgs()...)
|
msgs = append(msgs, msgTx.GetMsgs()...)
|
||||||
txData, err := evmtypes.UnpackTxData(msgTx.Data)
|
txData, err := evmtypes.UnpackTxData(msgTx.Data)
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
feeAmount = feeAmount.Add(sdk.NewIntFromBigInt(txData.Fee()))
|
feeAmount = feeAmount.Add(sdkmath.NewIntFromBigInt(txData.Fee()))
|
||||||
gasLimit = gasLimit + txData.GetGas()
|
gasLimit = gasLimit + txData.GetGas()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/ethclient"
|
"github.com/ethereum/go-ethereum/ethclient"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@ -34,13 +35,13 @@ import (
|
|||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
|
pruningtypes "github.com/cosmos/cosmos-sdk/pruning/types"
|
||||||
"github.com/cosmos/cosmos-sdk/server"
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
"github.com/cosmos/cosmos-sdk/server/api"
|
"github.com/cosmos/cosmos-sdk/server/api"
|
||||||
srvconfig "github.com/cosmos/cosmos-sdk/server/config"
|
srvconfig "github.com/cosmos/cosmos-sdk/server/config"
|
||||||
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
||||||
"github.com/cosmos/cosmos-sdk/simapp"
|
"github.com/cosmos/cosmos-sdk/simapp"
|
||||||
"github.com/cosmos/cosmos-sdk/simapp/params"
|
"github.com/cosmos/cosmos-sdk/simapp/params"
|
||||||
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
|
||||||
"github.com/cosmos/cosmos-sdk/testutil"
|
"github.com/cosmos/cosmos-sdk/testutil"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
@ -71,7 +72,7 @@ func NewAppConstructor(encodingCfg params.EncodingConfig) AppConstructor {
|
|||||||
val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0,
|
val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0,
|
||||||
encodingCfg,
|
encodingCfg,
|
||||||
simapp.EmptyAppOptions{},
|
simapp.EmptyAppOptions{},
|
||||||
baseapp.SetPruning(storetypes.NewPruningOptionsFromString(val.AppConfig.Pruning)),
|
baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.AppConfig.Pruning)),
|
||||||
baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices),
|
baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -89,9 +90,9 @@ type Config struct {
|
|||||||
AppConstructor AppConstructor // the ABCI application constructor
|
AppConstructor AppConstructor // the ABCI application constructor
|
||||||
GenesisState simapp.GenesisState // custom gensis state to provide
|
GenesisState simapp.GenesisState // custom gensis state to provide
|
||||||
TimeoutCommit time.Duration // the consensus commitment timeout
|
TimeoutCommit time.Duration // the consensus commitment timeout
|
||||||
AccountTokens sdk.Int // the amount of unique validator tokens (e.g. 1000node0)
|
AccountTokens sdkmath.Int // the amount of unique validator tokens (e.g. 1000node0)
|
||||||
StakingTokens sdk.Int // the amount of tokens each validator has available to stake
|
StakingTokens sdkmath.Int // the amount of tokens each validator has available to stake
|
||||||
BondedTokens sdk.Int // the amount of tokens each validator stakes
|
BondedTokens sdkmath.Int // the amount of tokens each validator stakes
|
||||||
NumValidators int // the total number of validators to create and bond
|
NumValidators int // the total number of validators to create and bond
|
||||||
ChainID string // the network chain-id
|
ChainID string // the network chain-id
|
||||||
BondDenom string // the staking bond denomination
|
BondDenom string // the staking bond denomination
|
||||||
@ -113,13 +114,13 @@ func DefaultConfig() Config {
|
|||||||
encCfg := encoding.MakeConfig(app.ModuleBasics)
|
encCfg := encoding.MakeConfig(app.ModuleBasics)
|
||||||
|
|
||||||
return Config{
|
return Config{
|
||||||
Codec: encCfg.Marshaler,
|
Codec: encCfg.Codec,
|
||||||
TxConfig: encCfg.TxConfig,
|
TxConfig: encCfg.TxConfig,
|
||||||
LegacyAmino: encCfg.Amino,
|
LegacyAmino: encCfg.Amino,
|
||||||
InterfaceRegistry: encCfg.InterfaceRegistry,
|
InterfaceRegistry: encCfg.InterfaceRegistry,
|
||||||
AccountRetriever: authtypes.AccountRetriever{},
|
AccountRetriever: authtypes.AccountRetriever{},
|
||||||
AppConstructor: NewAppConstructor(encCfg),
|
AppConstructor: NewAppConstructor(encCfg),
|
||||||
GenesisState: app.ModuleBasics.DefaultGenesis(encCfg.Marshaler),
|
GenesisState: app.ModuleBasics.DefaultGenesis(encCfg.Codec),
|
||||||
TimeoutCommit: 2 * time.Second,
|
TimeoutCommit: 2 * time.Second,
|
||||||
ChainID: fmt.Sprintf("ethermint_%d-1", tmrand.Int63n(9999999999999)+1),
|
ChainID: fmt.Sprintf("ethermint_%d-1", tmrand.Int63n(9999999999999)+1),
|
||||||
NumValidators: 4,
|
NumValidators: 4,
|
||||||
@ -128,7 +129,7 @@ func DefaultConfig() Config {
|
|||||||
AccountTokens: sdk.TokensFromConsensusPower(1000, ethermint.PowerReduction),
|
AccountTokens: sdk.TokensFromConsensusPower(1000, ethermint.PowerReduction),
|
||||||
StakingTokens: sdk.TokensFromConsensusPower(500, ethermint.PowerReduction),
|
StakingTokens: sdk.TokensFromConsensusPower(500, ethermint.PowerReduction),
|
||||||
BondedTokens: sdk.TokensFromConsensusPower(100, ethermint.PowerReduction),
|
BondedTokens: sdk.TokensFromConsensusPower(100, ethermint.PowerReduction),
|
||||||
PruningStrategy: storetypes.PruningOptionNothing,
|
PruningStrategy: pruningtypes.PruningOptionNothing,
|
||||||
CleanupDir: true,
|
CleanupDir: true,
|
||||||
SigningAlgo: string(hd.EthSecp256k1Type),
|
SigningAlgo: string(hd.EthSecp256k1Type),
|
||||||
KeyringOptions: []keyring.Option{hd.EthSecp256k1Option()},
|
KeyringOptions: []keyring.Option{hd.EthSecp256k1Option()},
|
||||||
@ -370,7 +371,7 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) {
|
|||||||
nodeIDs[i] = nodeID
|
nodeIDs[i] = nodeID
|
||||||
valPubKeys[i] = pubKey
|
valPubKeys[i] = pubKey
|
||||||
|
|
||||||
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, clientDir, buf, cfg.KeyringOptions...)
|
kb, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendTest, clientDir, buf, cfg.Codec, cfg.KeyringOptions...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -439,7 +440,7 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
memo := fmt.Sprintf("%s@%s:%s", nodeIDs[i], p2pURL.Hostname(), p2pURL.Port())
|
memo := fmt.Sprintf("%s@%s:%s", nodeIDs[i], p2pURL.Hostname(), p2pURL.Port())
|
||||||
fee := sdk.NewCoins(sdk.NewCoin(cfg.BondDenom, sdk.NewInt(0)))
|
fee := sdk.NewCoins(sdk.NewCoin(cfg.BondDenom, sdkmath.NewInt(0)))
|
||||||
txBuilder := cfg.TxConfig.NewTxBuilder()
|
txBuilder := cfg.TxConfig.NewTxBuilder()
|
||||||
err = txBuilder.SetMsgs(createValMsg)
|
err = txBuilder.SetMsgs(createValMsg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
"github.com/cosmos/cosmos-sdk/x/genutil"
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
|
||||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||||
|
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
||||||
mintypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
mintypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
|
|
||||||
@ -107,7 +108,7 @@ func startInProcess(cfg Config, val *Validator) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if val.AppConfig.GRPC.Enable {
|
if val.AppConfig.GRPC.Enable {
|
||||||
grpcSrv, err := servergrpc.StartGRPCServer(val.ClientCtx, app, val.AppConfig.GRPC.Address)
|
grpcSrv, err := servergrpc.StartGRPCServer(val.ClientCtx, app, val.AppConfig.GRPC)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -205,7 +206,7 @@ func initGenFiles(cfg Config, genAccounts []authtypes.GenesisAccount, genBalance
|
|||||||
stakingGenState.Params.BondDenom = cfg.BondDenom
|
stakingGenState.Params.BondDenom = cfg.BondDenom
|
||||||
cfg.GenesisState[stakingtypes.ModuleName] = cfg.Codec.MustMarshalJSON(&stakingGenState)
|
cfg.GenesisState[stakingtypes.ModuleName] = cfg.Codec.MustMarshalJSON(&stakingGenState)
|
||||||
|
|
||||||
var govGenState govtypes.GenesisState
|
var govGenState govv1.GenesisState
|
||||||
cfg.Codec.MustUnmarshalJSON(cfg.GenesisState[govtypes.ModuleName], &govGenState)
|
cfg.Codec.MustUnmarshalJSON(cfg.GenesisState[govtypes.ModuleName], &govGenState)
|
||||||
|
|
||||||
govGenState.DepositParams.MinDeposit[0].Denom = cfg.BondDenom
|
govGenState.DepositParams.MinDeposit[0].Denom = cfg.BondDenom
|
||||||
|
@ -2,11 +2,10 @@ package types
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
|
"github.com/cosmos/cosmos-sdk/types/tx"
|
||||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ExtensionOptionsWeb3TxI interface{}
|
|
||||||
|
|
||||||
// RegisterInterfaces registers the tendermint concrete client-related
|
// RegisterInterfaces registers the tendermint concrete client-related
|
||||||
// implementations and interfaces.
|
// implementations and interfaces.
|
||||||
func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
||||||
@ -18,9 +17,8 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
|||||||
(*authtypes.GenesisAccount)(nil),
|
(*authtypes.GenesisAccount)(nil),
|
||||||
&EthAccount{},
|
&EthAccount{},
|
||||||
)
|
)
|
||||||
registry.RegisterInterface(
|
registry.RegisterImplementations(
|
||||||
"ethermint.v1.ExtensionOptionsWeb3Tx",
|
(*tx.TxExtensionOptionI)(nil),
|
||||||
(*ExtensionOptionsWeb3TxI)(nil),
|
|
||||||
&ExtensionOptionsWeb3Tx{},
|
&ExtensionOptionsWeb3Tx{},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package types
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -25,17 +27,17 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// PowerReduction defines the default power reduction value for staking
|
// PowerReduction defines the default power reduction value for staking
|
||||||
var PowerReduction = sdk.NewIntFromBigInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(BaseDenomUnit), nil))
|
var PowerReduction = sdkmath.NewIntFromBigInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(BaseDenomUnit), nil))
|
||||||
|
|
||||||
// NewPhotonCoin is a utility function that returns an "aphoton" coin with the given sdk.Int amount.
|
// NewPhotonCoin is a utility function that returns an "aphoton" coin with the given sdkmath.Int amount.
|
||||||
// The function will panic if the provided amount is negative.
|
// The function will panic if the provided amount is negative.
|
||||||
func NewPhotonCoin(amount sdk.Int) sdk.Coin {
|
func NewPhotonCoin(amount sdkmath.Int) sdk.Coin {
|
||||||
return sdk.NewCoin(AttoPhoton, amount)
|
return sdk.NewCoin(AttoPhoton, amount)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPhotonDecCoin is a utility function that returns an "aphoton" decimal coin with the given sdk.Int amount.
|
// NewPhotonDecCoin is a utility function that returns an "aphoton" decimal coin with the given sdkmath.Int amount.
|
||||||
// The function will panic if the provided amount is negative.
|
// The function will panic if the provided amount is negative.
|
||||||
func NewPhotonDecCoin(amount sdk.Int) sdk.DecCoin {
|
func NewPhotonDecCoin(amount sdkmath.Int) sdk.DecCoin {
|
||||||
return sdk.NewDecCoin(AttoPhoton, amount)
|
return sdk.NewDecCoin(AttoPhoton, amount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,3 +89,7 @@ func (g *infiniteGasMeterWithLimit) IsOutOfGas() bool {
|
|||||||
func (g *infiniteGasMeterWithLimit) String() string {
|
func (g *infiniteGasMeterWithLimit) String() string {
|
||||||
return fmt.Sprintf("InfiniteGasMeter:\n consumed: %d", g.consumed)
|
return fmt.Sprintf("InfiniteGasMeter:\n consumed: %d", g.consumed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *infiniteGasMeterWithLimit) GasRemaining() sdk.Gas {
|
||||||
|
return math.MaxUint64
|
||||||
|
}
|
||||||
|
@ -5,7 +5,8 @@ import (
|
|||||||
math "math"
|
math "math"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -21,11 +22,11 @@ func SafeInt64(value uint64) (int64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SafeNewIntFromBigInt constructs Int from big.Int, return error if more than 256bits
|
// SafeNewIntFromBigInt constructs Int from big.Int, return error if more than 256bits
|
||||||
func SafeNewIntFromBigInt(i *big.Int) (sdk.Int, error) {
|
func SafeNewIntFromBigInt(i *big.Int) (sdkmath.Int, error) {
|
||||||
if !IsValidInt256(i) {
|
if !IsValidInt256(i) {
|
||||||
return sdk.NewInt(0), fmt.Errorf("big int out of bound: %s", i)
|
return sdkmath.NewInt(0), fmt.Errorf("big int out of bound: %s", i)
|
||||||
}
|
}
|
||||||
return sdk.NewIntFromBigInt(i), nil
|
return sdkmath.NewIntFromBigInt(i), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsValidInt256 check the bound of 256 bit number
|
// IsValidInt256 check the bound of 256 bit number
|
||||||
|
@ -25,7 +25,7 @@ func cosmosAddressFromArg(addr string) (sdk.AccAddress, error) {
|
|||||||
// Strip 0x prefix if exists
|
// Strip 0x prefix if exists
|
||||||
addr = strings.TrimPrefix(addr, "0x")
|
addr = strings.TrimPrefix(addr, "0x")
|
||||||
|
|
||||||
return sdk.AccAddressFromHex(addr)
|
return sdk.AccAddressFromHexUnsafe(addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAddressFormats(t *testing.T) {
|
func TestAddressFormats(t *testing.T) {
|
||||||
@ -59,7 +59,7 @@ func TestAddressFormats(t *testing.T) {
|
|||||||
|
|
||||||
func TestCosmosToEthereumTypes(t *testing.T) {
|
func TestCosmosToEthereumTypes(t *testing.T) {
|
||||||
hexString := "0x3B98D72760f7bbA69d62Ed6F48278451251948E7"
|
hexString := "0x3B98D72760f7bbA69d62Ed6F48278451251948E7"
|
||||||
cosmosAddr, err := sdk.AccAddressFromHex(hexString[2:])
|
cosmosAddr, err := sdk.AccAddressFromHexUnsafe(hexString[2:])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
cosmosFormatted := cosmosAddr.String()
|
cosmosFormatted := cosmosAddr.String()
|
||||||
@ -81,7 +81,7 @@ func TestCosmosToEthereumTypes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAddressToCosmosAddress(t *testing.T) {
|
func TestAddressToCosmosAddress(t *testing.T) {
|
||||||
baseAddr, err := sdk.AccAddressFromHex("6A98D72760f7bbA69d62Ed6F48278451251948E7")
|
baseAddr, err := sdk.AccAddressFromHexUnsafe("6A98D72760f7bbA69d62Ed6F48278451251948E7")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Test cosmos string back to address
|
// Test cosmos string back to address
|
||||||
|
@ -1,116 +0,0 @@
|
|||||||
package rest
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"encoding/hex"
|
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
|
||||||
"math/big"
|
|
||||||
"net/http"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
|
||||||
clientrest "github.com/cosmos/cosmos-sdk/client/rest"
|
|
||||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
|
||||||
authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest"
|
|
||||||
|
|
||||||
rpctypes "github.com/evmos/ethermint/rpc/types"
|
|
||||||
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
|
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RegisterTxRoutes - Central function to define routes that get registered by the main application
|
|
||||||
func RegisterTxRoutes(clientCtx client.Context, rtr *mux.Router) {
|
|
||||||
r := clientrest.WithHTTPDeprecationHeaders(rtr)
|
|
||||||
r.HandleFunc("/txs/{hash}", QueryTxRequestHandlerFn(clientCtx)).Methods("GET")
|
|
||||||
r.HandleFunc("/txs", authrest.QueryTxsRequestHandlerFn(clientCtx)).Methods("GET")
|
|
||||||
r.HandleFunc("/txs/decode", authrest.DecodeTxRequestHandlerFn(clientCtx)).Methods("POST")
|
|
||||||
}
|
|
||||||
|
|
||||||
// QueryTxRequestHandlerFn implements a REST handler that queries a transaction
|
|
||||||
// by hash in a committed block.
|
|
||||||
func QueryTxRequestHandlerFn(clientCtx client.Context) http.HandlerFunc {
|
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
vars := mux.Vars(r)
|
|
||||||
hashHexStr := vars["hash"]
|
|
||||||
|
|
||||||
clientCtx, ok := rest.ParseQueryHeightOrReturnBadRequest(w, clientCtx, r)
|
|
||||||
if !ok {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ethHashPrefix := "0x"
|
|
||||||
if !strings.HasPrefix(hashHexStr, ethHashPrefix) {
|
|
||||||
authrest.QueryTxRequestHandlerFn(clientCtx)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// eth Tx
|
|
||||||
ethHashPrefixLength := len(ethHashPrefix)
|
|
||||||
output, err := getEthTransactionByHash(clientCtx, hashHexStr[ethHashPrefixLength:])
|
|
||||||
if err != nil {
|
|
||||||
rest.WriteErrorResponse(w, http.StatusInternalServerError, err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
rest.PostProcessResponseBare(w, clientCtx, output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetTransactionByHash returns the transaction identified by hash.
|
|
||||||
func getEthTransactionByHash(clientCtx client.Context, hashHex string) ([]byte, error) {
|
|
||||||
hash, err := hex.DecodeString(hashHex)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
node, err := clientCtx.GetNode()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
tx, err := node.Tx(context.Background(), hash, false)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can either cache or just leave this out if not necessary
|
|
||||||
block, err := node.Block(context.Background(), &tx.Height)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
client := feemarkettypes.NewQueryClient(clientCtx)
|
|
||||||
res, err := client.BaseFee(context.Background(), &feemarkettypes.QueryBaseFeeRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var baseFee *big.Int
|
|
||||||
if res.BaseFee != nil {
|
|
||||||
baseFee = res.BaseFee.BigInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
blockHash := common.BytesToHash(block.Block.Header.Hash())
|
|
||||||
|
|
||||||
ethTxs, err := rpctypes.RawTxToEthTx(clientCtx, tx.Tx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
height := uint64(tx.Height)
|
|
||||||
|
|
||||||
for _, ethTx := range ethTxs {
|
|
||||||
if common.HexToHash(ethTx.Hash) == common.BytesToHash(hash) {
|
|
||||||
rpcTx, err := rpctypes.NewRPCTransaction(ethTx.AsTransaction(), blockHash, height, uint64(tx.Index), baseFee)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return json.Marshal(rpcTx)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, errors.New("eth tx not found")
|
|
||||||
}
|
|
@ -6,6 +6,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/gogo/protobuf/proto"
|
"github.com/gogo/protobuf/proto"
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
@ -86,7 +87,7 @@ func (suite *EvmTestSuite) DoSetupTest(t require.TestingT) {
|
|||||||
return genesis
|
return genesis
|
||||||
})
|
})
|
||||||
|
|
||||||
coins := sdk.NewCoins(sdk.NewCoin(types.DefaultEVMDenom, sdk.NewInt(100000000000000)))
|
coins := sdk.NewCoins(sdk.NewCoin(types.DefaultEVMDenom, sdkmath.NewInt(100000000000000)))
|
||||||
genesisState := app.NewTestGenesisState(suite.app.AppCodec())
|
genesisState := app.NewTestGenesisState(suite.app.AppCodec())
|
||||||
b32address := sdk.MustBech32ifyAddressBytes(sdk.GetConfig().GetBech32AccountAddrPrefix(), priv.PubKey().Address().Bytes())
|
b32address := sdk.MustBech32ifyAddressBytes(sdk.GetConfig().GetBech32AccountAddrPrefix(), priv.PubKey().Address().Bytes())
|
||||||
balances := []banktypes.Balance{
|
balances := []banktypes.Balance{
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
@ -25,7 +26,7 @@ func SetupContract(b *testing.B) (*KeeperTestSuite, common.Address) {
|
|||||||
err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, suite.address.Bytes(), amt)
|
err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, suite.address.Bytes(), amt)
|
||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
|
|
||||||
contractAddr := suite.DeployTestContract(b, suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
contractAddr := suite.DeployTestContract(b, suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
|
|
||||||
return &suite, contractAddr
|
return &suite, contractAddr
|
||||||
@ -66,7 +67,7 @@ func DoBenchmark(b *testing.B, txBuilder TxBuilder) {
|
|||||||
txData, err := types.UnpackTxData(msg.Data)
|
txData, err := types.UnpackTxData(msg.Data)
|
||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
|
|
||||||
fees := sdk.Coins{sdk.NewCoin(suite.EvmDenom(), sdk.NewIntFromBigInt(txData.Fee()))}
|
fees := sdk.Coins{sdk.NewCoin(suite.EvmDenom(), sdkmath.NewIntFromBigInt(txData.Fee()))}
|
||||||
err = authante.DeductFees(suite.app.BankKeeper, suite.ctx, suite.app.AccountKeeper.GetAccount(ctx, msg.GetFrom()), fees)
|
err = authante.DeductFees(suite.app.BankKeeper, suite.ctx, suite.app.AccountKeeper.GetAccount(ctx, msg.GetFrom()), fees)
|
||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
|
|
||||||
@ -133,7 +134,7 @@ func BenchmarkMessageCall(b *testing.B) {
|
|||||||
txData, err := types.UnpackTxData(msg.Data)
|
txData, err := types.UnpackTxData(msg.Data)
|
||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
|
|
||||||
fees := sdk.Coins{sdk.NewCoin(suite.EvmDenom(), sdk.NewIntFromBigInt(txData.Fee()))}
|
fees := sdk.Coins{sdk.NewCoin(suite.EvmDenom(), sdkmath.NewIntFromBigInt(txData.Fee()))}
|
||||||
err = authante.DeductFees(suite.app.BankKeeper, suite.ctx, suite.app.AccountKeeper.GetAccount(ctx, msg.GetFrom()), fees)
|
err = authante.DeductFees(suite.app.BankKeeper, suite.ctx, suite.app.AccountKeeper.GetAccount(ctx, msg.GetFrom()), fees)
|
||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
@ -572,7 +573,7 @@ func (k Keeper) BaseFee(c context.Context, _ *types.QueryBaseFeeRequest) (*types
|
|||||||
|
|
||||||
res := &types.QueryBaseFeeResponse{}
|
res := &types.QueryBaseFeeResponse{}
|
||||||
if baseFee != nil {
|
if baseFee != nil {
|
||||||
aux := sdk.NewIntFromBigInt(baseFee)
|
aux := sdkmath.NewIntFromBigInt(baseFee)
|
||||||
res.BaseFee = &aux
|
res.BaseFee = &aux
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
"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"
|
||||||
"github.com/ethereum/go-ethereum/core/vm"
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
@ -524,7 +526,7 @@ func (suite *KeeperTestSuite) TestEstimateGas() {
|
|||||||
}, false, 0, false},
|
}, false, 0, false},
|
||||||
// estimate gas of an erc20 contract deployment, the exact gas number is checked with geth
|
// estimate gas of an erc20 contract deployment, the exact gas number is checked with geth
|
||||||
{"contract deployment", func() {
|
{"contract deployment", func() {
|
||||||
ctorArgs, err := types.ERC20Contract.ABI.Pack("", &suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
ctorArgs, err := types.ERC20Contract.ABI.Pack("", &suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
data := append(types.ERC20Contract.Bin, ctorArgs...)
|
data := append(types.ERC20Contract.Bin, ctorArgs...)
|
||||||
args = types.TransactionArgs{
|
args = types.TransactionArgs{
|
||||||
@ -534,7 +536,7 @@ func (suite *KeeperTestSuite) TestEstimateGas() {
|
|||||||
}, true, 1186778, false},
|
}, true, 1186778, false},
|
||||||
// estimate gas of an erc20 transfer, the exact gas number is checked with geth
|
// estimate gas of an erc20 transfer, the exact gas number is checked with geth
|
||||||
{"erc20 transfer", func() {
|
{"erc20 transfer", func() {
|
||||||
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
transferData, err := types.ERC20Contract.ABI.Pack("transfer", common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), big.NewInt(1000))
|
transferData, err := types.ERC20Contract.ABI.Pack("transfer", common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), big.NewInt(1000))
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
@ -559,7 +561,7 @@ func (suite *KeeperTestSuite) TestEstimateGas() {
|
|||||||
gasCap = 20000
|
gasCap = 20000
|
||||||
}, false, 0, true},
|
}, false, 0, true},
|
||||||
{"contract deployment w/ enableFeemarket", func() {
|
{"contract deployment w/ enableFeemarket", func() {
|
||||||
ctorArgs, err := types.ERC20Contract.ABI.Pack("", &suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
ctorArgs, err := types.ERC20Contract.ABI.Pack("", &suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
data := append(types.ERC20Contract.Bin, ctorArgs...)
|
data := append(types.ERC20Contract.Bin, ctorArgs...)
|
||||||
args = types.TransactionArgs{
|
args = types.TransactionArgs{
|
||||||
@ -568,7 +570,7 @@ func (suite *KeeperTestSuite) TestEstimateGas() {
|
|||||||
}
|
}
|
||||||
}, true, 1186778, true},
|
}, true, 1186778, true},
|
||||||
{"erc20 transfer w/ enableFeemarket", func() {
|
{"erc20 transfer w/ enableFeemarket", func() {
|
||||||
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
transferData, err := types.ERC20Contract.ABI.Pack("transfer", common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), big.NewInt(1000))
|
transferData, err := types.ERC20Contract.ABI.Pack("transfer", common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), big.NewInt(1000))
|
||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
@ -687,11 +689,11 @@ func (suite *KeeperTestSuite) TestTraceTx() {
|
|||||||
vmdb.SetNonce(suite.address, vmdb.GetNonce(suite.address)+1)
|
vmdb.SetNonce(suite.address, vmdb.GetNonce(suite.address)+1)
|
||||||
suite.Require().NoError(vmdb.Commit())
|
suite.Require().NoError(vmdb.Commit())
|
||||||
|
|
||||||
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
// Generate token transfer transaction
|
// Generate token transfer transaction
|
||||||
firstTx := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdk.NewIntWithDecimal(1, 18).BigInt())
|
firstTx := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdkmath.NewIntWithDecimal(1, 18).BigInt())
|
||||||
txMsg = suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdk.NewIntWithDecimal(1, 18).BigInt())
|
txMsg = suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdkmath.NewIntWithDecimal(1, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
|
|
||||||
predecessors = append(predecessors, firstTx)
|
predecessors = append(predecessors, firstTx)
|
||||||
@ -707,10 +709,10 @@ func (suite *KeeperTestSuite) TestTraceTx() {
|
|||||||
suite.enableFeemarket = tc.enableFeemarket
|
suite.enableFeemarket = tc.enableFeemarket
|
||||||
suite.SetupTest()
|
suite.SetupTest()
|
||||||
// Deploy contract
|
// Deploy contract
|
||||||
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
// Generate token transfer transaction
|
// Generate token transfer transaction
|
||||||
txMsg = suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdk.NewIntWithDecimal(1, 18).BigInt())
|
txMsg = suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdkmath.NewIntWithDecimal(1, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
|
|
||||||
tc.malleate()
|
tc.malleate()
|
||||||
@ -821,11 +823,11 @@ func (suite *KeeperTestSuite) TestTraceBlock() {
|
|||||||
vmdb.SetNonce(suite.address, vmdb.GetNonce(suite.address)+1)
|
vmdb.SetNonce(suite.address, vmdb.GetNonce(suite.address)+1)
|
||||||
suite.Require().NoError(vmdb.Commit())
|
suite.Require().NoError(vmdb.Commit())
|
||||||
|
|
||||||
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
// create multiple transactions in the same block
|
// create multiple transactions in the same block
|
||||||
firstTx := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdk.NewIntWithDecimal(1, 18).BigInt())
|
firstTx := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdkmath.NewIntWithDecimal(1, 18).BigInt())
|
||||||
secondTx := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdk.NewIntWithDecimal(1, 18).BigInt())
|
secondTx := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdkmath.NewIntWithDecimal(1, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
// overwrite txs to include only the ones on new block
|
// overwrite txs to include only the ones on new block
|
||||||
txs = append([]*types.MsgEthereumTx{}, firstTx, secondTx)
|
txs = append([]*types.MsgEthereumTx{}, firstTx, secondTx)
|
||||||
@ -842,10 +844,10 @@ func (suite *KeeperTestSuite) TestTraceBlock() {
|
|||||||
suite.enableFeemarket = tc.enableFeemarket
|
suite.enableFeemarket = tc.enableFeemarket
|
||||||
suite.SetupTest()
|
suite.SetupTest()
|
||||||
// Deploy contract
|
// Deploy contract
|
||||||
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
contractAddr := suite.DeployTestContract(suite.T(), suite.address, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
// Generate token transfer transaction
|
// Generate token transfer transaction
|
||||||
txMsg := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdk.NewIntWithDecimal(1, 18).BigInt())
|
txMsg := suite.TransferERC20Token(suite.T(), contractAddr, suite.address, common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec"), sdkmath.NewIntWithDecimal(1, 18).BigInt())
|
||||||
suite.Commit()
|
suite.Commit()
|
||||||
|
|
||||||
txs = append(txs, txMsg)
|
txs = append(txs, txMsg)
|
||||||
@ -880,7 +882,7 @@ func (suite *KeeperTestSuite) TestNonceInQuery() {
|
|||||||
suite.Require().NoError(err)
|
suite.Require().NoError(err)
|
||||||
address := common.BytesToAddress(priv.PubKey().Address().Bytes())
|
address := common.BytesToAddress(priv.PubKey().Address().Bytes())
|
||||||
suite.Require().Equal(uint64(0), suite.app.EvmKeeper.GetNonce(suite.ctx, address))
|
suite.Require().Equal(uint64(0), suite.app.EvmKeeper.GetNonce(suite.ctx, address))
|
||||||
supply := sdk.NewIntWithDecimal(1000, 18).BigInt()
|
supply := sdkmath.NewIntWithDecimal(1000, 18).BigInt()
|
||||||
|
|
||||||
// accupy nonce 0
|
// accupy nonce 0
|
||||||
_ = suite.DeployTestContract(suite.T(), address, supply)
|
_ = suite.DeployTestContract(suite.T(), address, supply)
|
||||||
@ -909,7 +911,7 @@ func (suite *KeeperTestSuite) TestNonceInQuery() {
|
|||||||
|
|
||||||
func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
||||||
var (
|
var (
|
||||||
aux sdk.Int
|
aux sdkmath.Int
|
||||||
expRes *types.QueryBaseFeeResponse
|
expRes *types.QueryBaseFeeResponse
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -923,7 +925,7 @@ func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
|||||||
{
|
{
|
||||||
"pass - default Base Fee",
|
"pass - default Base Fee",
|
||||||
func() {
|
func() {
|
||||||
initialBaseFee := sdk.NewInt(ethparams.InitialBaseFee)
|
initialBaseFee := sdkmath.NewInt(ethparams.InitialBaseFee)
|
||||||
expRes = &types.QueryBaseFeeResponse{BaseFee: &initialBaseFee}
|
expRes = &types.QueryBaseFeeResponse{BaseFee: &initialBaseFee}
|
||||||
},
|
},
|
||||||
true, true, true,
|
true, true, true,
|
||||||
@ -934,7 +936,7 @@ func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
|||||||
baseFee := sdk.OneInt().BigInt()
|
baseFee := sdk.OneInt().BigInt()
|
||||||
suite.app.FeeMarketKeeper.SetBaseFee(suite.ctx, baseFee)
|
suite.app.FeeMarketKeeper.SetBaseFee(suite.ctx, baseFee)
|
||||||
|
|
||||||
aux = sdk.NewIntFromBigInt(baseFee)
|
aux = sdkmath.NewIntFromBigInt(baseFee)
|
||||||
expRes = &types.QueryBaseFeeResponse{BaseFee: &aux}
|
expRes = &types.QueryBaseFeeResponse{BaseFee: &aux}
|
||||||
},
|
},
|
||||||
true, true, true,
|
true, true, true,
|
||||||
|
@ -183,7 +183,7 @@ func setupChain(localMinGasPricesStr string) {
|
|||||||
baseapp.SetMinGasPrices(localMinGasPricesStr),
|
baseapp.SetMinGasPrices(localMinGasPricesStr),
|
||||||
)
|
)
|
||||||
|
|
||||||
genesisState := app.NewDefaultGenesisState()
|
genesisState := app.NewTestGenesisState(newapp.AppCodec())
|
||||||
genesisState[types.ModuleName] = newapp.AppCodec().MustMarshalJSON(types.DefaultGenesisState())
|
genesisState[types.ModuleName] = newapp.AppCodec().MustMarshalJSON(types.DefaultGenesisState())
|
||||||
|
|
||||||
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
"github.com/cosmos/cosmos-sdk/store/prefix"
|
"github.com/cosmos/cosmos-sdk/store/prefix"
|
||||||
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||||
@ -29,10 +30,10 @@ type Keeper struct {
|
|||||||
// - storing account's Code
|
// - storing account's Code
|
||||||
// - storing transaction Logs
|
// - storing transaction Logs
|
||||||
// - storing Bloom filters by block height. Needed for the Web3 API.
|
// - storing Bloom filters by block height. Needed for the Web3 API.
|
||||||
storeKey sdk.StoreKey
|
storeKey storetypes.StoreKey
|
||||||
|
|
||||||
// key to access the transient store, which is reset on every block during Commit
|
// key to access the transient store, which is reset on every block during Commit
|
||||||
transientKey sdk.StoreKey
|
transientKey storetypes.StoreKey
|
||||||
|
|
||||||
// module specific parameter space that can be configured through governance
|
// module specific parameter space that can be configured through governance
|
||||||
paramSpace paramtypes.Subspace
|
paramSpace paramtypes.Subspace
|
||||||
@ -58,7 +59,7 @@ type Keeper struct {
|
|||||||
// NewKeeper generates new evm module keeper
|
// NewKeeper generates new evm module keeper
|
||||||
func NewKeeper(
|
func NewKeeper(
|
||||||
cdc codec.BinaryCodec,
|
cdc codec.BinaryCodec,
|
||||||
storeKey, transientKey sdk.StoreKey, paramSpace paramtypes.Subspace,
|
storeKey, transientKey storetypes.StoreKey, paramSpace paramtypes.Subspace,
|
||||||
ak types.AccountKeeper, bankKeeper types.BankKeeper, sk types.StakingKeeper,
|
ak types.AccountKeeper, bankKeeper types.BankKeeper, sk types.StakingKeeper,
|
||||||
fmk types.FeeMarketKeeper,
|
fmk types.FeeMarketKeeper,
|
||||||
tracer string,
|
tracer string,
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
. "github.com/onsi/ginkgo/v2"
|
. "github.com/onsi/ginkgo/v2"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ import (
|
|||||||
"github.com/tendermint/tendermint/version"
|
"github.com/tendermint/tendermint/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
var testTokens = sdk.NewIntWithDecimal(1000, 18)
|
var testTokens = sdkmath.NewIntWithDecimal(1000, 18)
|
||||||
|
|
||||||
type KeeperTestSuite struct {
|
type KeeperTestSuite struct {
|
||||||
suite.Suite
|
suite.Suite
|
||||||
@ -120,7 +121,7 @@ func (suite *KeeperTestSuite) SetupApp(checkTx bool) {
|
|||||||
genesis[feemarkettypes.ModuleName] = app.AppCodec().MustMarshalJSON(feemarketGenesis)
|
genesis[feemarkettypes.ModuleName] = app.AppCodec().MustMarshalJSON(feemarketGenesis)
|
||||||
if !suite.enableLondonHF {
|
if !suite.enableLondonHF {
|
||||||
evmGenesis := types.DefaultGenesisState()
|
evmGenesis := types.DefaultGenesisState()
|
||||||
maxInt := sdk.NewInt(math.MaxInt64)
|
maxInt := sdkmath.NewInt(math.MaxInt64)
|
||||||
evmGenesis.Params.ChainConfig.LondonBlock = &maxInt
|
evmGenesis.Params.ChainConfig.LondonBlock = &maxInt
|
||||||
evmGenesis.Params.ChainConfig.ArrowGlacierBlock = &maxInt
|
evmGenesis.Params.ChainConfig.ArrowGlacierBlock = &maxInt
|
||||||
evmGenesis.Params.ChainConfig.GrayGlacierBlock = &maxInt
|
evmGenesis.Params.ChainConfig.GrayGlacierBlock = &maxInt
|
||||||
@ -132,7 +133,7 @@ func (suite *KeeperTestSuite) SetupApp(checkTx bool) {
|
|||||||
|
|
||||||
if suite.mintFeeCollector {
|
if suite.mintFeeCollector {
|
||||||
// mint some coin to fee collector
|
// mint some coin to fee collector
|
||||||
coins := sdk.NewCoins(sdk.NewCoin(types.DefaultEVMDenom, sdk.NewInt(int64(params.TxGas)-1)))
|
coins := sdk.NewCoins(sdk.NewCoin(types.DefaultEVMDenom, sdkmath.NewInt(int64(params.TxGas)-1)))
|
||||||
genesisState := app.NewTestGenesisState(suite.app.AppCodec())
|
genesisState := app.NewTestGenesisState(suite.app.AppCodec())
|
||||||
balances := []banktypes.Balance{
|
balances := []banktypes.Balance{
|
||||||
{
|
{
|
||||||
@ -208,7 +209,7 @@ func (suite *KeeperTestSuite) SetupApp(checkTx bool) {
|
|||||||
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
||||||
suite.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig)
|
suite.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig)
|
||||||
suite.ethSigner = ethtypes.LatestSignerForChainID(suite.app.EvmKeeper.ChainID())
|
suite.ethSigner = ethtypes.LatestSignerForChainID(suite.app.EvmKeeper.ChainID())
|
||||||
suite.appCodec = encodingConfig.Marshaler
|
suite.appCodec = encodingConfig.Codec
|
||||||
suite.denom = evmtypes.DefaultEVMDenom
|
suite.denom = evmtypes.DefaultEVMDenom
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
@ -484,7 +486,7 @@ func (k *Keeper) RefundGas(ctx sdk.Context, msg core.Message, leftoverGas uint64
|
|||||||
return sdkerrors.Wrapf(types.ErrInvalidRefund, "refunded amount value cannot be negative %d", remaining.Int64())
|
return sdkerrors.Wrapf(types.ErrInvalidRefund, "refunded amount value cannot be negative %d", remaining.Int64())
|
||||||
case 1:
|
case 1:
|
||||||
// positive amount refund
|
// positive amount refund
|
||||||
refundedCoins := sdk.Coins{sdk.NewCoin(denom, sdk.NewIntFromBigInt(remaining))}
|
refundedCoins := sdk.Coins{sdk.NewCoin(denom, sdkmath.NewIntFromBigInt(remaining))}
|
||||||
|
|
||||||
// refund to sender from the fee collector module account, which is the escrow account in charge of collecting tx fees
|
// refund to sender from the fee collector module account, which is the escrow account in charge of collecting tx fees
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/store/prefix"
|
"github.com/cosmos/cosmos-sdk/store/prefix"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
@ -79,7 +81,7 @@ func (k *Keeper) SetBalance(ctx sdk.Context, addr common.Address, amount *big.In
|
|||||||
switch delta.Sign() {
|
switch delta.Sign() {
|
||||||
case 1:
|
case 1:
|
||||||
// mint
|
// mint
|
||||||
coins := sdk.NewCoins(sdk.NewCoin(params.EvmDenom, sdk.NewIntFromBigInt(delta)))
|
coins := sdk.NewCoins(sdk.NewCoin(params.EvmDenom, sdkmath.NewIntFromBigInt(delta)))
|
||||||
if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, coins); err != nil {
|
if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, coins); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -88,7 +90,7 @@ func (k *Keeper) SetBalance(ctx sdk.Context, addr common.Address, amount *big.In
|
|||||||
}
|
}
|
||||||
case -1:
|
case -1:
|
||||||
// burn
|
// burn
|
||||||
coins := sdk.NewCoins(sdk.NewCoin(params.EvmDenom, sdk.NewIntFromBigInt(new(big.Int).Neg(delta))))
|
coins := sdk.NewCoins(sdk.NewCoin(params.EvmDenom, sdkmath.NewIntFromBigInt(new(big.Int).Neg(delta))))
|
||||||
if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, cosmosAddr, types.ModuleName, coins); err != nil {
|
if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, cosmosAddr, types.ModuleName, coins); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package keeper
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
|
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||||
@ -71,7 +72,7 @@ func (k Keeper) DeductTxCostsFromUserBalance(
|
|||||||
return sdk.Coins{}, nil
|
return sdk.Coins{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
fees := sdk.Coins{sdk.NewCoin(denom, sdk.NewIntFromBigInt(feeAmt))}
|
fees := sdk.Coins{sdk.NewCoin(denom, sdkmath.NewIntFromBigInt(feeAmt))}
|
||||||
|
|
||||||
// deduct the full gas cost from the user balance
|
// deduct the full gas cost from the user balance
|
||||||
if err := authante.DeductFees(k.bankKeeper, ctx, signerAcc, fees); err != nil {
|
if err := authante.DeductFees(k.bankKeeper, ctx, signerAcc, fees); err != nil {
|
||||||
@ -87,7 +88,7 @@ func (k Keeper) DeductTxCostsFromUserBalance(
|
|||||||
// CheckSenderBalance validates that the tx cost value is positive and that the
|
// CheckSenderBalance validates that the tx cost value is positive and that the
|
||||||
// sender has enough funds to pay for the fees and value of the transaction.
|
// sender has enough funds to pay for the fees and value of the transaction.
|
||||||
func CheckSenderBalance(
|
func CheckSenderBalance(
|
||||||
balance sdk.Int,
|
balance sdkmath.Int,
|
||||||
txData evmtypes.TxData,
|
txData evmtypes.TxData,
|
||||||
) error {
|
) error {
|
||||||
cost := txData.Cost()
|
cost := txData.Cost()
|
||||||
|
@ -3,6 +3,7 @@ package keeper_test
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||||
@ -12,21 +13,21 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (suite *KeeperTestSuite) TestCheckSenderBalance() {
|
func (suite *KeeperTestSuite) TestCheckSenderBalance() {
|
||||||
hundredInt := sdk.NewInt(100)
|
hundredInt := sdkmath.NewInt(100)
|
||||||
zeroInt := sdk.ZeroInt()
|
zeroInt := sdk.ZeroInt()
|
||||||
oneInt := sdk.OneInt()
|
oneInt := sdk.OneInt()
|
||||||
fiveInt := sdk.NewInt(5)
|
fiveInt := sdkmath.NewInt(5)
|
||||||
fiftyInt := sdk.NewInt(50)
|
fiftyInt := sdkmath.NewInt(50)
|
||||||
negInt := sdk.NewInt(-10)
|
negInt := sdkmath.NewInt(-10)
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
to string
|
to string
|
||||||
gasLimit uint64
|
gasLimit uint64
|
||||||
gasPrice *sdk.Int
|
gasPrice *sdkmath.Int
|
||||||
gasFeeCap *big.Int
|
gasFeeCap *big.Int
|
||||||
gasTipCap *big.Int
|
gasTipCap *big.Int
|
||||||
cost *sdk.Int
|
cost *sdkmath.Int
|
||||||
from string
|
from string
|
||||||
accessList *ethtypes.AccessList
|
accessList *ethtypes.AccessList
|
||||||
expectPass bool
|
expectPass bool
|
||||||
@ -237,7 +238,7 @@ func (suite *KeeperTestSuite) TestCheckSenderBalance() {
|
|||||||
|
|
||||||
acct := suite.app.EvmKeeper.GetAccountOrEmpty(suite.ctx, suite.address)
|
acct := suite.app.EvmKeeper.GetAccountOrEmpty(suite.ctx, suite.address)
|
||||||
err := evmkeeper.CheckSenderBalance(
|
err := evmkeeper.CheckSenderBalance(
|
||||||
sdk.NewIntFromBigInt(acct.Balance),
|
sdkmath.NewIntFromBigInt(acct.Balance),
|
||||||
txData,
|
txData,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -251,22 +252,22 @@ func (suite *KeeperTestSuite) TestCheckSenderBalance() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *KeeperTestSuite) TestDeductTxCostsFromUserBalance() {
|
func (suite *KeeperTestSuite) TestDeductTxCostsFromUserBalance() {
|
||||||
hundredInt := sdk.NewInt(100)
|
hundredInt := sdkmath.NewInt(100)
|
||||||
zeroInt := sdk.ZeroInt()
|
zeroInt := sdk.ZeroInt()
|
||||||
oneInt := sdk.NewInt(1)
|
oneInt := sdkmath.NewInt(1)
|
||||||
fiveInt := sdk.NewInt(5)
|
fiveInt := sdkmath.NewInt(5)
|
||||||
fiftyInt := sdk.NewInt(50)
|
fiftyInt := sdkmath.NewInt(50)
|
||||||
|
|
||||||
// should be enough to cover all test cases
|
// should be enough to cover all test cases
|
||||||
initBalance := sdk.NewInt((ethparams.InitialBaseFee + 10) * 105)
|
initBalance := sdkmath.NewInt((ethparams.InitialBaseFee + 10) * 105)
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
gasLimit uint64
|
gasLimit uint64
|
||||||
gasPrice *sdk.Int
|
gasPrice *sdkmath.Int
|
||||||
gasFeeCap *big.Int
|
gasFeeCap *big.Int
|
||||||
gasTipCap *big.Int
|
gasTipCap *big.Int
|
||||||
cost *sdk.Int
|
cost *sdkmath.Int
|
||||||
accessList *ethtypes.AccessList
|
accessList *ethtypes.AccessList
|
||||||
expectPass bool
|
expectPass bool
|
||||||
enableFeemarket bool
|
enableFeemarket bool
|
||||||
@ -419,7 +420,7 @@ func (suite *KeeperTestSuite) TestDeductTxCostsFromUserBalance() {
|
|||||||
suite.Require().Equal(
|
suite.Require().Equal(
|
||||||
fees,
|
fees,
|
||||||
sdk.NewCoins(
|
sdk.NewCoins(
|
||||||
sdk.NewCoin(evmtypes.DefaultEVMDenom, sdk.NewIntFromBigInt(txData.EffectiveFee(baseFee))),
|
sdk.NewCoin(evmtypes.DefaultEVMDenom, sdkmath.NewIntFromBigInt(txData.EffectiveFee(baseFee))),
|
||||||
),
|
),
|
||||||
"valid test %d failed, fee value is wrong ", i,
|
"valid test %d failed, fee value is wrong ", i,
|
||||||
)
|
)
|
||||||
@ -427,7 +428,7 @@ func (suite *KeeperTestSuite) TestDeductTxCostsFromUserBalance() {
|
|||||||
suite.Require().Equal(
|
suite.Require().Equal(
|
||||||
fees,
|
fees,
|
||||||
sdk.NewCoins(
|
sdk.NewCoins(
|
||||||
sdk.NewCoin(evmtypes.DefaultEVMDenom, tc.gasPrice.Mul(sdk.NewIntFromUint64(tc.gasLimit))),
|
sdk.NewCoin(evmtypes.DefaultEVMDenom, tc.gasPrice.Mul(sdkmath.NewIntFromUint64(tc.gasLimit))),
|
||||||
),
|
),
|
||||||
"valid test %d failed, fee value is wrong ", i,
|
"valid test %d failed, fee value is wrong ", i,
|
||||||
)
|
)
|
||||||
|
@ -24,7 +24,7 @@ func TestMigrateStore(t *testing.T) {
|
|||||||
tFeeMarketKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", types.StoreKey))
|
tFeeMarketKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", types.StoreKey))
|
||||||
ctx := testutil.DefaultContext(feemarketKey, tFeeMarketKey)
|
ctx := testutil.DefaultContext(feemarketKey, tFeeMarketKey)
|
||||||
paramstore := paramtypes.NewSubspace(
|
paramstore := paramtypes.NewSubspace(
|
||||||
encCfg.Marshaler, encCfg.Amino, feemarketKey, tFeeMarketKey, "evm",
|
encCfg.Codec, encCfg.Amino, feemarketKey, tFeeMarketKey, "evm",
|
||||||
).WithKeyTable(v2types.ParamKeyTable())
|
).WithKeyTable(v2types.ParamKeyTable())
|
||||||
|
|
||||||
params := v2types.DefaultParams()
|
params := v2types.DefaultParams()
|
||||||
@ -36,7 +36,7 @@ func TestMigrateStore(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
paramstore = paramtypes.NewSubspace(
|
paramstore = paramtypes.NewSubspace(
|
||||||
encCfg.Marshaler, encCfg.Amino, feemarketKey, tFeeMarketKey, "evm",
|
encCfg.Codec, encCfg.Amino, feemarketKey, tFeeMarketKey, "evm",
|
||||||
).WithKeyTable(types.ParamKeyTable())
|
).WithKeyTable(types.ParamKeyTable())
|
||||||
err := v2.MigrateStore(ctx, ¶mstore)
|
err := v2.MigrateStore(ctx, ¶mstore)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -4,6 +4,8 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
|
|
||||||
@ -77,7 +79,7 @@ func DefaultChainConfig() ChainConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBlockValue(block *sdk.Int) *big.Int {
|
func getBlockValue(block *sdkmath.Int) *big.Int {
|
||||||
if block == nil || block.IsNegative() {
|
if block == nil || block.IsNegative() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -149,7 +151,7 @@ func validateHash(hex string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateBlock(block *sdk.Int) error {
|
func validateBlock(block *sdkmath.Int) error {
|
||||||
// nil value means that the fork has not yet been applied
|
// nil value means that the fork has not yet been applied
|
||||||
if block == nil {
|
if block == nil {
|
||||||
return nil
|
return nil
|
||||||
|
2
x/evm/migrations/v2/types/evm.pb.go
generated
2
x/evm/migrations/v2/types/evm.pb.go
generated
@ -107,7 +107,7 @@ func (m *Params) GetChainConfig() ChainConfig {
|
|||||||
return ChainConfig{}
|
return ChainConfig{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values
|
// ChainConfig defines the Ethereum ChainConfig parameters using *sdkmath.Int values
|
||||||
// instead of *big.Int.
|
// instead of *big.Int.
|
||||||
type ChainConfig struct {
|
type ChainConfig struct {
|
||||||
// Homestead switch block (nil no fork, 0 = already homestead)
|
// Homestead switch block (nil no fork, 0 = already homestead)
|
||||||
|
@ -2,9 +2,10 @@ package v3_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
v3 "github.com/evmos/ethermint/x/evm/migrations/v3"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
v3 "github.com/evmos/ethermint/x/evm/migrations/v3"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/testutil"
|
"github.com/cosmos/cosmos-sdk/testutil"
|
||||||
@ -24,7 +25,7 @@ func TestMigrateStore(t *testing.T) {
|
|||||||
tEvmKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", types.StoreKey))
|
tEvmKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", types.StoreKey))
|
||||||
ctx := testutil.DefaultContext(evmKey, tEvmKey)
|
ctx := testutil.DefaultContext(evmKey, tEvmKey)
|
||||||
paramstore := paramtypes.NewSubspace(
|
paramstore := paramtypes.NewSubspace(
|
||||||
encCfg.Marshaler, encCfg.Amino, evmKey, tEvmKey, "evm",
|
encCfg.Codec, encCfg.Amino, evmKey, tEvmKey, "evm",
|
||||||
).WithKeyTable(v3types.ParamKeyTable())
|
).WithKeyTable(v3types.ParamKeyTable())
|
||||||
|
|
||||||
params := v3types.DefaultParams()
|
params := v3types.DefaultParams()
|
||||||
@ -39,7 +40,7 @@ func TestMigrateStore(t *testing.T) {
|
|||||||
require.NotNil(t, preMigrationConfig.MergeForkBlock)
|
require.NotNil(t, preMigrationConfig.MergeForkBlock)
|
||||||
|
|
||||||
paramstore = paramtypes.NewSubspace(
|
paramstore = paramtypes.NewSubspace(
|
||||||
encCfg.Marshaler, encCfg.Amino, evmKey, tEvmKey, "evm",
|
encCfg.Codec, encCfg.Amino, evmKey, tEvmKey, "evm",
|
||||||
).WithKeyTable(types.ParamKeyTable())
|
).WithKeyTable(types.ParamKeyTable())
|
||||||
err := v3.MigrateStore(ctx, ¶mstore)
|
err := v3.MigrateStore(ctx, ¶mstore)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -4,6 +4,8 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
"github.com/evmos/ethermint/x/evm/types"
|
"github.com/evmos/ethermint/x/evm/types"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
@ -76,7 +78,7 @@ func DefaultChainConfig() ChainConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBlockValue(block *sdk.Int) *big.Int {
|
func getBlockValue(block *sdkmath.Int) *big.Int {
|
||||||
if block == nil || block.IsNegative() {
|
if block == nil || block.IsNegative() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -148,7 +150,7 @@ func validateHash(hex string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateBlock(block *sdk.Int) error {
|
func validateBlock(block *sdkmath.Int) error {
|
||||||
// nil value means that the fork has not yet been applied
|
// nil value means that the fork has not yet been applied
|
||||||
if block == nil {
|
if block == nil {
|
||||||
return nil
|
return nil
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
@ -31,7 +32,7 @@ func TestRandomizedGenState(t *testing.T) {
|
|||||||
Rand: r,
|
Rand: r,
|
||||||
NumBonded: 3,
|
NumBonded: 3,
|
||||||
Accounts: simtypes.RandomAccounts(r, 3),
|
Accounts: simtypes.RandomAccounts(r, 3),
|
||||||
InitialStake: 1000,
|
InitialStake: sdkmath.NewInt(1000),
|
||||||
GenState: make(map[string]json.RawMessage),
|
GenState: make(map[string]json.RawMessage),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
@ -123,7 +125,7 @@ func SimulateEthCreateContract(ak types.AccountKeeper, k *keeper.Keeper) simtype
|
|||||||
from := common.BytesToAddress(simAccount.Address)
|
from := common.BytesToAddress(simAccount.Address)
|
||||||
nonce := k.GetNonce(ctx, from)
|
nonce := k.GetNonce(ctx, from)
|
||||||
|
|
||||||
ctorArgs, err := types.ERC20Contract.ABI.Pack("", from, sdk.NewIntWithDecimal(1000, 18).BigInt())
|
ctorArgs, err := types.ERC20Contract.ABI.Pack("", from, sdkmath.NewIntWithDecimal(1000, 18).BigInt())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEthereumTx, "can not pack owner and supply"), nil, err
|
return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEthereumTx, "can not pack owner and supply"), nil, err
|
||||||
}
|
}
|
||||||
@ -192,7 +194,7 @@ func SimulateEthTx(
|
|||||||
return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEthereumTx, "can not sign ethereum tx"), nil, err
|
return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEthereumTx, "can not sign ethereum tx"), nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, _, err = ctx.bapp.Deliver(txConfig.TxEncoder(), signedTx)
|
_, _, err = ctx.bapp.SimDeliver(txConfig.TxEncoder(), signedTx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEthereumTx, "failed to deliver tx"), nil, err
|
return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgEthereumTx, "failed to deliver tx"), nil, err
|
||||||
}
|
}
|
||||||
@ -258,7 +260,7 @@ func RandomTransferableAmount(ctx *simulateContext, address common.Address, esti
|
|||||||
amount = new(big.Int).Set(spendable)
|
amount = new(big.Int).Set(spendable)
|
||||||
return amount, nil
|
return amount, nil
|
||||||
}
|
}
|
||||||
simAmount, err := simtypes.RandPositiveInt(ctx.rand, sdk.NewIntFromBigInt(spendable))
|
simAmount, err := simtypes.RandPositiveInt(ctx.rand, sdkmath.NewIntFromBigInt(spendable))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -291,7 +293,7 @@ func GetSignedTx(ctx *simulateContext, txBuilder client.TxBuilder, msg *types.Ms
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
fees := sdk.NewCoins(sdk.NewCoin(ctx.keeper.GetParams(ctx.context).EvmDenom, sdk.NewIntFromBigInt(txData.Fee())))
|
fees := sdk.NewCoins(sdk.NewCoin(ctx.keeper.GetParams(ctx.context).EvmDenom, sdkmath.NewIntFromBigInt(txData.Fee())))
|
||||||
builder.SetFeeAmount(fees)
|
builder.SetFeeAmount(fees)
|
||||||
builder.SetGasLimit(msg.GetGas())
|
builder.SetGasLimit(msg.GetGas())
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdkmath "cosmossdk.io/math"
|
||||||
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"
|
||||||
@ -174,7 +174,7 @@ func (tx *AccessListTx) SetSignatureValues(chainID, v, r, s *big.Int) {
|
|||||||
tx.S = s.Bytes()
|
tx.S = s.Bytes()
|
||||||
}
|
}
|
||||||
if chainID != nil {
|
if chainID != nil {
|
||||||
chainIDInt := sdk.NewIntFromBigInt(chainID)
|
chainIDInt := sdkmath.NewIntFromBigInt(chainID)
|
||||||
tx.ChainID = &chainIDInt
|
tx.ChainID = &chainIDInt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||||
|
|
||||||
@ -78,7 +80,7 @@ func DefaultChainConfig() ChainConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBlockValue(block *sdk.Int) *big.Int {
|
func getBlockValue(block *sdkmath.Int) *big.Int {
|
||||||
if block == nil || block.IsNegative() {
|
if block == nil || block.IsNegative() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -153,7 +155,7 @@ func validateHash(hex string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateBlock(block *sdk.Int) error {
|
func validateBlock(block *sdkmath.Int) error {
|
||||||
// nil value means that the fork has not yet been applied
|
// nil value means that the fork has not yet been applied
|
||||||
if block == nil {
|
if block == nil {
|
||||||
return nil
|
return nil
|
||||||
|
@ -3,17 +3,16 @@ package types
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
var defaultEIP150Hash = common.Hash{}.String()
|
var defaultEIP150Hash = common.Hash{}.String()
|
||||||
|
|
||||||
func newIntPtr(i int64) *sdk.Int {
|
func newIntPtr(i int64) *sdkmath.Int {
|
||||||
v := sdk.NewInt(i)
|
v := sdkmath.NewInt(i)
|
||||||
return &v
|
return &v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,24 +6,20 @@ import (
|
|||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
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/cosmos/cosmos-sdk/types/msgservice"
|
"github.com/cosmos/cosmos-sdk/types/msgservice"
|
||||||
|
"github.com/cosmos/cosmos-sdk/types/tx"
|
||||||
proto "github.com/gogo/protobuf/proto"
|
proto "github.com/gogo/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry())
|
var ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry())
|
||||||
|
|
||||||
type (
|
|
||||||
ExtensionOptionsEthereumTxI interface{}
|
|
||||||
)
|
|
||||||
|
|
||||||
// RegisterInterfaces registers the client interfaces to protobuf Any.
|
// RegisterInterfaces registers the client interfaces to protobuf Any.
|
||||||
func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
||||||
registry.RegisterImplementations(
|
registry.RegisterImplementations(
|
||||||
(*sdk.Msg)(nil),
|
(*sdk.Msg)(nil),
|
||||||
&MsgEthereumTx{},
|
&MsgEthereumTx{},
|
||||||
)
|
)
|
||||||
registry.RegisterInterface(
|
registry.RegisterImplementations(
|
||||||
"ethermint.evm.v1.ExtensionOptionsEthereumTx",
|
(*tx.TxExtensionOptionI)(nil),
|
||||||
(*ExtensionOptionsEthereumTxI)(nil),
|
|
||||||
&ExtensionOptionsEthereumTx{},
|
&ExtensionOptionsEthereumTx{},
|
||||||
)
|
)
|
||||||
registry.RegisterInterface(
|
registry.RegisterInterface(
|
||||||
|
@ -3,7 +3,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdkmath "cosmossdk.io/math"
|
||||||
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"
|
||||||
@ -188,7 +188,7 @@ func (tx *DynamicFeeTx) SetSignatureValues(chainID, v, r, s *big.Int) {
|
|||||||
tx.S = s.Bytes()
|
tx.S = s.Bytes()
|
||||||
}
|
}
|
||||||
if chainID != nil {
|
if chainID != nil {
|
||||||
chainIDInt := sdk.NewIntFromBigInt(chainID)
|
chainIDInt := sdkmath.NewIntFromBigInt(chainID)
|
||||||
tx.ChainID = &chainIDInt
|
tx.ChainID = &chainIDInt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||||
@ -14,24 +16,24 @@ import (
|
|||||||
type TxDataTestSuite struct {
|
type TxDataTestSuite struct {
|
||||||
suite.Suite
|
suite.Suite
|
||||||
|
|
||||||
sdkInt sdk.Int
|
sdkInt sdkmath.Int
|
||||||
uint64 uint64
|
uint64 uint64
|
||||||
bigInt *big.Int
|
bigInt *big.Int
|
||||||
overflowBigInt *big.Int
|
overflowBigInt *big.Int
|
||||||
sdkZeroInt sdk.Int
|
sdkZeroInt sdkmath.Int
|
||||||
sdkMinusOneInt sdk.Int
|
sdkMinusOneInt sdkmath.Int
|
||||||
invalidAddr string
|
invalidAddr string
|
||||||
addr common.Address
|
addr common.Address
|
||||||
hexAddr string
|
hexAddr string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *TxDataTestSuite) SetupTest() {
|
func (suite *TxDataTestSuite) SetupTest() {
|
||||||
suite.sdkInt = sdk.NewInt(100)
|
suite.sdkInt = sdkmath.NewInt(100)
|
||||||
suite.uint64 = suite.sdkInt.Uint64()
|
suite.uint64 = suite.sdkInt.Uint64()
|
||||||
suite.bigInt = big.NewInt(1)
|
suite.bigInt = big.NewInt(1)
|
||||||
suite.overflowBigInt = big.NewInt(0).Exp(big.NewInt(10), big.NewInt(256), nil)
|
suite.overflowBigInt = big.NewInt(0).Exp(big.NewInt(10), big.NewInt(256), nil)
|
||||||
suite.sdkZeroInt = sdk.ZeroInt()
|
suite.sdkZeroInt = sdk.ZeroInt()
|
||||||
suite.sdkMinusOneInt = sdk.NewInt(-1)
|
suite.sdkMinusOneInt = sdkmath.NewInt(-1)
|
||||||
suite.invalidAddr = "123456"
|
suite.invalidAddr = "123456"
|
||||||
suite.addr = tests.GenerateAddress()
|
suite.addr = tests.GenerateAddress()
|
||||||
suite.hexAddr = suite.addr.Hex()
|
suite.hexAddr = suite.addr.Hex()
|
||||||
|
2
x/evm/types/evm.pb.go
generated
2
x/evm/types/evm.pb.go
generated
@ -117,7 +117,7 @@ func (m *Params) GetAllowUnprotectedTxs() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChainConfig defines the Ethereum ChainConfig parameters using *sdk.Int values
|
// ChainConfig defines the Ethereum ChainConfig parameters using *sdkmath.Int values
|
||||||
// instead of *big.Int.
|
// instead of *big.Int.
|
||||||
type ChainConfig struct {
|
type ChainConfig struct {
|
||||||
// Homestead switch block (nil no fork, 0 = already homestead)
|
// Homestead switch block (nil no fork, 0 = already homestead)
|
||||||
|
@ -27,10 +27,9 @@ type AccountKeeper interface {
|
|||||||
|
|
||||||
// BankKeeper defines the expected interface needed to retrieve account balances.
|
// BankKeeper defines the expected interface needed to retrieve account balances.
|
||||||
type BankKeeper interface {
|
type BankKeeper interface {
|
||||||
|
authtypes.BankKeeper
|
||||||
GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
|
GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin
|
||||||
SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
|
SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
|
||||||
// SendCoinsFromModuleToModule(ctx sdk.Context, senderModule, recipientModule string, amt sdk.Coins) error
|
|
||||||
SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
|
|
||||||
MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
||||||
BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||||
@ -62,7 +64,7 @@ func newMsgEthereumTx(
|
|||||||
gasLimit uint64, gasPrice, gasFeeCap, gasTipCap *big.Int, input []byte, accesses *ethtypes.AccessList,
|
gasLimit uint64, gasPrice, gasFeeCap, gasTipCap *big.Int, input []byte, accesses *ethtypes.AccessList,
|
||||||
) *MsgEthereumTx {
|
) *MsgEthereumTx {
|
||||||
var (
|
var (
|
||||||
cid, amt, gp *sdk.Int
|
cid, amt, gp *sdkmath.Int
|
||||||
toAddr string
|
toAddr string
|
||||||
txData TxData
|
txData TxData
|
||||||
)
|
)
|
||||||
@ -72,17 +74,17 @@ func newMsgEthereumTx(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if amount != nil {
|
if amount != nil {
|
||||||
amountInt := sdk.NewIntFromBigInt(amount)
|
amountInt := sdkmath.NewIntFromBigInt(amount)
|
||||||
amt = &amountInt
|
amt = &amountInt
|
||||||
}
|
}
|
||||||
|
|
||||||
if chainID != nil {
|
if chainID != nil {
|
||||||
chainIDInt := sdk.NewIntFromBigInt(chainID)
|
chainIDInt := sdkmath.NewIntFromBigInt(chainID)
|
||||||
cid = &chainIDInt
|
cid = &chainIDInt
|
||||||
}
|
}
|
||||||
|
|
||||||
if gasPrice != nil {
|
if gasPrice != nil {
|
||||||
gasPriceInt := sdk.NewIntFromBigInt(gasPrice)
|
gasPriceInt := sdkmath.NewIntFromBigInt(gasPrice)
|
||||||
gp = &gasPriceInt
|
gp = &gasPriceInt
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,8 +99,8 @@ func newMsgEthereumTx(
|
|||||||
Data: input,
|
Data: input,
|
||||||
}
|
}
|
||||||
case accesses != nil && gasFeeCap != nil && gasTipCap != nil:
|
case accesses != nil && gasFeeCap != nil && gasTipCap != nil:
|
||||||
gtc := sdk.NewIntFromBigInt(gasTipCap)
|
gtc := sdkmath.NewIntFromBigInt(gasTipCap)
|
||||||
gfc := sdk.NewIntFromBigInt(gasFeeCap)
|
gfc := sdkmath.NewIntFromBigInt(gasFeeCap)
|
||||||
|
|
||||||
txData = &DynamicFeeTx{
|
txData = &DynamicFeeTx{
|
||||||
ChainID: cid,
|
ChainID: cid,
|
||||||
@ -352,7 +354,7 @@ func (msg *MsgEthereumTx) BuildTx(b client.TxBuilder, evmDenom string) (signing.
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fees := make(sdk.Coins, 0)
|
fees := make(sdk.Coins, 0)
|
||||||
feeAmt := sdk.NewIntFromBigInt(txData.Fee())
|
feeAmt := sdkmath.NewIntFromBigInt(txData.Fee())
|
||||||
if feeAmt.Sign() > 0 {
|
if feeAmt.Sign() > 0 {
|
||||||
fees = append(fees, sdk.NewCoin(evmDenom, feeAmt))
|
fees = append(fees, sdk.NewCoin(evmDenom, feeAmt))
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
@ -104,7 +105,7 @@ func (suite *MsgsTestSuite) TestMsgEthereumTx_BuildTx() {
|
|||||||
suite.Require().Empty(tx.GetMemo())
|
suite.Require().Empty(tx.GetMemo())
|
||||||
suite.Require().Empty(tx.GetTimeoutHeight())
|
suite.Require().Empty(tx.GetTimeoutHeight())
|
||||||
suite.Require().Equal(uint64(100000), tx.GetGas())
|
suite.Require().Equal(uint64(100000), tx.GetGas())
|
||||||
suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("aphoton", sdk.NewInt(100000))), tx.GetFee())
|
suite.Require().Equal(sdk.NewCoins(sdk.NewCoin("aphoton", sdkmath.NewInt(100000))), tx.GetFee())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
"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"
|
||||||
"github.com/ethereum/go-ethereum/common/math"
|
"github.com/ethereum/go-ethereum/common/math"
|
||||||
@ -55,14 +56,14 @@ func (args *TransactionArgs) String() string {
|
|||||||
// This assumes that setTxDefaults has been called.
|
// This assumes that setTxDefaults has been called.
|
||||||
func (args *TransactionArgs) ToTransaction() *MsgEthereumTx {
|
func (args *TransactionArgs) ToTransaction() *MsgEthereumTx {
|
||||||
var (
|
var (
|
||||||
chainID, value, gasPrice, maxFeePerGas, maxPriorityFeePerGas sdk.Int
|
chainID, value, gasPrice, maxFeePerGas, maxPriorityFeePerGas sdkmath.Int
|
||||||
gas, nonce uint64
|
gas, nonce uint64
|
||||||
from, to string
|
from, to string
|
||||||
)
|
)
|
||||||
|
|
||||||
// Set sender address or use zero address if none specified.
|
// Set sender address or use zero address if none specified.
|
||||||
if args.ChainID != nil {
|
if args.ChainID != nil {
|
||||||
chainID = sdk.NewIntFromBigInt(args.ChainID.ToInt())
|
chainID = sdkmath.NewIntFromBigInt(args.ChainID.ToInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.Nonce != nil {
|
if args.Nonce != nil {
|
||||||
@ -74,19 +75,19 @@ func (args *TransactionArgs) ToTransaction() *MsgEthereumTx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if args.GasPrice != nil {
|
if args.GasPrice != nil {
|
||||||
gasPrice = sdk.NewIntFromBigInt(args.GasPrice.ToInt())
|
gasPrice = sdkmath.NewIntFromBigInt(args.GasPrice.ToInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.MaxFeePerGas != nil {
|
if args.MaxFeePerGas != nil {
|
||||||
maxFeePerGas = sdk.NewIntFromBigInt(args.MaxFeePerGas.ToInt())
|
maxFeePerGas = sdkmath.NewIntFromBigInt(args.MaxFeePerGas.ToInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.MaxPriorityFeePerGas != nil {
|
if args.MaxPriorityFeePerGas != nil {
|
||||||
maxPriorityFeePerGas = sdk.NewIntFromBigInt(args.MaxPriorityFeePerGas.ToInt())
|
maxPriorityFeePerGas = sdkmath.NewIntFromBigInt(args.MaxPriorityFeePerGas.ToInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.Value != nil {
|
if args.Value != nil {
|
||||||
value = sdk.NewIntFromBigInt(args.Value.ToInt())
|
value = sdkmath.NewIntFromBigInt(args.Value.ToInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.To != nil {
|
if args.To != nil {
|
||||||
|
@ -4,13 +4,12 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTxData_chainID(t *testing.T) {
|
func TestTxData_chainID(t *testing.T) {
|
||||||
chainID := sdk.NewInt(1)
|
chainID := sdkmath.NewInt(1)
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
msg string
|
msg string
|
||||||
|
@ -21,15 +21,12 @@ func DecodeTxResponse(in []byte) (*MsgEthereumTxResponse, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
data := txMsgData.GetData()
|
if len(txMsgData.MsgResponses) == 0 {
|
||||||
if len(data) == 0 {
|
|
||||||
return &MsgEthereumTxResponse{}, nil
|
return &MsgEthereumTxResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var res MsgEthereumTxResponse
|
var res MsgEthereumTxResponse
|
||||||
|
if err := proto.Unmarshal(txMsgData.MsgResponses[0].Value, &res); err != nil {
|
||||||
err := proto.Unmarshal(data[0].GetData(), &res)
|
|
||||||
if err != nil {
|
|
||||||
return nil, sdkerrors.Wrap(err, "failed to unmarshal tx response message data")
|
return nil, sdkerrors.Wrap(err, "failed to unmarshal tx response message data")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +38,7 @@ func EncodeTransactionLogs(res *TransactionLogs) ([]byte, error) {
|
|||||||
return proto.Marshal(res)
|
return proto.Marshal(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecodeTxResponse decodes an protobuf-encoded byte slice into TransactionLogs
|
// DecodeTransactionLogs decodes an protobuf-encoded byte slice into TransactionLogs
|
||||||
func DecodeTransactionLogs(data []byte) (TransactionLogs, error) {
|
func DecodeTransactionLogs(data []byte) (TransactionLogs, error) {
|
||||||
var logs TransactionLogs
|
var logs TransactionLogs
|
||||||
err := proto.Unmarshal(data, &logs)
|
err := proto.Unmarshal(data, &logs)
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
|
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
|
||||||
"github.com/evmos/ethermint/app"
|
"github.com/evmos/ethermint/app"
|
||||||
@ -30,11 +31,9 @@ func TestEvmDataEncoding(t *testing.T) {
|
|||||||
Ret: ret,
|
Ret: ret,
|
||||||
}
|
}
|
||||||
|
|
||||||
enc, err := proto.Marshal(data)
|
any := codectypes.UnsafePackAny(data)
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
txData := &sdk.TxMsgData{
|
txData := &sdk.TxMsgData{
|
||||||
Data: []*sdk.MsgData{{MsgType: evmtypes.TypeMsgEthereumTx, Data: enc}},
|
MsgResponses: []*codectypes.Any{any},
|
||||||
}
|
}
|
||||||
|
|
||||||
txDataBz, err := proto.Marshal(txData)
|
txDataBz, err := proto.Marshal(txData)
|
||||||
|
@ -2,6 +2,7 @@ package keeper_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/tendermint/tendermint/abci/types"
|
"github.com/tendermint/tendermint/abci/types"
|
||||||
)
|
)
|
||||||
|
@ -3,6 +3,7 @@ package keeper
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
"github.com/evmos/ethermint/x/feemarket/types"
|
"github.com/evmos/ethermint/x/feemarket/types"
|
||||||
@ -28,7 +29,7 @@ func (k Keeper) BaseFee(c context.Context, _ *types.QueryBaseFeeRequest) (*types
|
|||||||
baseFee := k.GetBaseFee(ctx)
|
baseFee := k.GetBaseFee(ctx)
|
||||||
|
|
||||||
if baseFee != nil {
|
if baseFee != nil {
|
||||||
aux := sdk.NewIntFromBigInt(baseFee)
|
aux := sdkmath.NewIntFromBigInt(baseFee)
|
||||||
res.BaseFee = &aux
|
res.BaseFee = &aux
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package keeper_test
|
package keeper_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
ethparams "github.com/ethereum/go-ethereum/params"
|
ethparams "github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/evmos/ethermint/x/feemarket/types"
|
"github.com/evmos/ethermint/x/feemarket/types"
|
||||||
@ -32,7 +33,7 @@ func (suite *KeeperTestSuite) TestQueryParams() {
|
|||||||
|
|
||||||
func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
||||||
var (
|
var (
|
||||||
aux sdk.Int
|
aux sdkmath.Int
|
||||||
expRes *types.QueryBaseFeeResponse
|
expRes *types.QueryBaseFeeResponse
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -44,7 +45,7 @@ func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
|||||||
{
|
{
|
||||||
"pass - default Base Fee",
|
"pass - default Base Fee",
|
||||||
func() {
|
func() {
|
||||||
initialBaseFee := sdk.NewInt(ethparams.InitialBaseFee)
|
initialBaseFee := sdkmath.NewInt(ethparams.InitialBaseFee)
|
||||||
expRes = &types.QueryBaseFeeResponse{BaseFee: &initialBaseFee}
|
expRes = &types.QueryBaseFeeResponse{BaseFee: &initialBaseFee}
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
@ -55,7 +56,7 @@ func (suite *KeeperTestSuite) TestQueryBaseFee() {
|
|||||||
baseFee := sdk.OneInt().BigInt()
|
baseFee := sdk.OneInt().BigInt()
|
||||||
suite.app.FeeMarketKeeper.SetBaseFee(suite.ctx, baseFee)
|
suite.app.FeeMarketKeeper.SetBaseFee(suite.ctx, baseFee)
|
||||||
|
|
||||||
aux = sdk.NewIntFromBigInt(baseFee)
|
aux = sdkmath.NewIntFromBigInt(baseFee)
|
||||||
expRes = &types.QueryBaseFeeResponse{BaseFee: &aux}
|
expRes = &types.QueryBaseFeeResponse{BaseFee: &aux}
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
. "github.com/onsi/ginkgo/v2"
|
. "github.com/onsi/ginkgo/v2"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
|
|
||||||
Context("during CheckTx", func() {
|
Context("during CheckTx", func() {
|
||||||
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(2)
|
gasPrice := sdkmath.NewInt(2)
|
||||||
res := checkTx(privKey, &gasPrice, &msg)
|
res := checkTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
||||||
Expect(
|
Expect(
|
||||||
@ -56,7 +57,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(3)
|
gasPrice := sdkmath.NewInt(3)
|
||||||
res := checkTx(privKey, &gasPrice, &msg)
|
res := checkTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
||||||
})
|
})
|
||||||
@ -64,7 +65,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
|
|
||||||
Context("during DeliverTx", func() {
|
Context("during DeliverTx", func() {
|
||||||
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(2)
|
gasPrice := sdkmath.NewInt(2)
|
||||||
res := deliverTx(privKey, &gasPrice, &msg)
|
res := deliverTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
||||||
Expect(
|
Expect(
|
||||||
@ -74,7 +75,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(3)
|
gasPrice := sdkmath.NewInt(3)
|
||||||
res := deliverTx(privKey, &gasPrice, &msg)
|
res := deliverTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
||||||
})
|
})
|
||||||
@ -88,7 +89,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
|
|
||||||
Context("during CheckTx", func() {
|
Context("during CheckTx", func() {
|
||||||
It("should reject transactions with gasPrice < min-gas-prices", func() {
|
It("should reject transactions with gasPrice < min-gas-prices", func() {
|
||||||
gasPrice := sdk.NewInt(2)
|
gasPrice := sdkmath.NewInt(2)
|
||||||
res := checkTx(privKey, &gasPrice, &msg)
|
res := checkTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
||||||
Expect(
|
Expect(
|
||||||
@ -98,7 +99,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(3)
|
gasPrice := sdkmath.NewInt(3)
|
||||||
res := checkTx(privKey, &gasPrice, &msg)
|
res := checkTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
||||||
})
|
})
|
||||||
@ -106,7 +107,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
|
|
||||||
Context("during DeliverTx", func() {
|
Context("during DeliverTx", func() {
|
||||||
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(2)
|
gasPrice := sdkmath.NewInt(2)
|
||||||
res := deliverTx(privKey, &gasPrice, &msg)
|
res := deliverTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
||||||
Expect(
|
Expect(
|
||||||
@ -116,7 +117,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
It("should accept transactions with gasPrice >= MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(3)
|
gasPrice := sdkmath.NewInt(3)
|
||||||
res := deliverTx(privKey, &gasPrice, &msg)
|
res := deliverTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
||||||
})
|
})
|
||||||
@ -129,7 +130,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
Context("during CheckTx", func() {
|
Context("during CheckTx", func() {
|
||||||
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(2)
|
gasPrice := sdkmath.NewInt(2)
|
||||||
res := checkTx(privKey, &gasPrice, &msg)
|
res := checkTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
||||||
Expect(
|
Expect(
|
||||||
@ -139,7 +140,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should reject transactions with MinGasPrices < gasPrice < min-gas-prices", func() {
|
It("should reject transactions with MinGasPrices < gasPrice < min-gas-prices", func() {
|
||||||
gasPrice := sdk.NewInt(4)
|
gasPrice := sdkmath.NewInt(4)
|
||||||
res := checkTx(privKey, &gasPrice, &msg)
|
res := checkTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
||||||
Expect(
|
Expect(
|
||||||
@ -149,7 +150,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should accept transactions with gasPrice > min-gas-prices", func() {
|
It("should accept transactions with gasPrice > min-gas-prices", func() {
|
||||||
gasPrice := sdk.NewInt(5)
|
gasPrice := sdkmath.NewInt(5)
|
||||||
res := checkTx(privKey, &gasPrice, &msg)
|
res := checkTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
||||||
})
|
})
|
||||||
@ -157,7 +158,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
|
|
||||||
Context("during DeliverTx", func() {
|
Context("during DeliverTx", func() {
|
||||||
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
It("should reject transactions with gasPrice < MinGasPrices", func() {
|
||||||
gasPrice := sdk.NewInt(2)
|
gasPrice := sdkmath.NewInt(2)
|
||||||
res := deliverTx(privKey, &gasPrice, &msg)
|
res := deliverTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
Expect(res.IsOK()).To(Equal(false), "transaction should have failed")
|
||||||
Expect(
|
Expect(
|
||||||
@ -167,13 +168,13 @@ var _ = Describe("Feemarket", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should accept transactions with MinGasPrices < gasPrice < than min-gas-prices", func() {
|
It("should accept transactions with MinGasPrices < gasPrice < than min-gas-prices", func() {
|
||||||
gasPrice := sdk.NewInt(4)
|
gasPrice := sdkmath.NewInt(4)
|
||||||
res := deliverTx(privKey, &gasPrice, &msg)
|
res := deliverTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
||||||
})
|
})
|
||||||
|
|
||||||
It("should accept transactions with gasPrice >= min-gas-prices", func() {
|
It("should accept transactions with gasPrice >= min-gas-prices", func() {
|
||||||
gasPrice := sdk.NewInt(5)
|
gasPrice := sdkmath.NewInt(5)
|
||||||
res := deliverTx(privKey, &gasPrice, &msg)
|
res := deliverTx(privKey, &gasPrice, &msg)
|
||||||
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
Expect(res.IsOK()).To(Equal(true), "transaction should have succeeded", res.GetLog())
|
||||||
})
|
})
|
||||||
@ -204,7 +205,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
// 100000`. With the fee calculation `Fee = (baseFee + tip) * gasLimit`,
|
// 100000`. With the fee calculation `Fee = (baseFee + tip) * gasLimit`,
|
||||||
// a `minGasPrices = 40_000_000_000` results in `minGlobalFee =
|
// a `minGasPrices = 40_000_000_000` results in `minGlobalFee =
|
||||||
// 4000000000000000`
|
// 4000000000000000`
|
||||||
privKey, _ = setupTestWithContext("1", sdk.NewDec(minGasPrices), sdk.NewInt(baseFee))
|
privKey, _ = setupTestWithContext("1", sdk.NewDec(minGasPrices), sdkmath.NewInt(baseFee))
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("during CheckTx", func() {
|
Context("during CheckTx", func() {
|
||||||
@ -312,7 +313,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
// 100_000`. With the fee calculation `Fee = (baseFee + tip) * gasLimit`,
|
// 100_000`. With the fee calculation `Fee = (baseFee + tip) * gasLimit`,
|
||||||
// a `minGasPrices = 5_000_000_000` results in `minGlobalFee =
|
// a `minGasPrices = 5_000_000_000` results in `minGlobalFee =
|
||||||
// 500_000_000_000_000`
|
// 500_000_000_000_000`
|
||||||
privKey, _ = setupTestWithContext("1", sdk.NewDec(minGasPrices), sdk.NewInt(baseFee))
|
privKey, _ = setupTestWithContext("1", sdk.NewDec(minGasPrices), sdkmath.NewInt(baseFee))
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("during CheckTx", func() {
|
Context("during CheckTx", func() {
|
||||||
@ -441,7 +442,7 @@ var _ = Describe("Feemarket", func() {
|
|||||||
|
|
||||||
// setupTestWithContext sets up a test chain with an example Cosmos send msg,
|
// setupTestWithContext sets up a test chain with an example Cosmos send msg,
|
||||||
// given a local (validator config) and a gloabl (feemarket param) minGasPrice
|
// given a local (validator config) and a gloabl (feemarket param) minGasPrice
|
||||||
func setupTestWithContext(valMinGasPrice string, minGasPrice sdk.Dec, baseFee sdk.Int) (*ethsecp256k1.PrivKey, banktypes.MsgSend) {
|
func setupTestWithContext(valMinGasPrice string, minGasPrice sdk.Dec, baseFee sdkmath.Int) (*ethsecp256k1.PrivKey, banktypes.MsgSend) {
|
||||||
privKey, msg := setupTest(valMinGasPrice + s.denom)
|
privKey, msg := setupTest(valMinGasPrice + s.denom)
|
||||||
params := types.DefaultParams()
|
params := types.DefaultParams()
|
||||||
params.MinGasPrice = minGasPrice
|
params.MinGasPrice = minGasPrice
|
||||||
@ -456,7 +457,7 @@ func setupTest(localMinGasPrices string) (*ethsecp256k1.PrivKey, banktypes.MsgSe
|
|||||||
setupChain(localMinGasPrices)
|
setupChain(localMinGasPrices)
|
||||||
|
|
||||||
privKey, address := generateKey()
|
privKey, address := generateKey()
|
||||||
amount, ok := sdk.NewIntFromString("10000000000000000000")
|
amount, ok := sdkmath.NewIntFromString("10000000000000000000")
|
||||||
s.Require().True(ok)
|
s.Require().True(ok)
|
||||||
initBalance := sdk.Coins{sdk.Coin{
|
initBalance := sdk.Coins{sdk.Coin{
|
||||||
Denom: s.denom,
|
Denom: s.denom,
|
||||||
@ -469,7 +470,7 @@ func setupTest(localMinGasPrices string) (*ethsecp256k1.PrivKey, banktypes.MsgSe
|
|||||||
ToAddress: address.String(),
|
ToAddress: address.String(),
|
||||||
Amount: sdk.Coins{sdk.Coin{
|
Amount: sdk.Coins{sdk.Coin{
|
||||||
Denom: s.denom,
|
Denom: s.denom,
|
||||||
Amount: sdk.NewInt(10000),
|
Amount: sdkmath.NewInt(10000),
|
||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
s.Commit()
|
s.Commit()
|
||||||
@ -575,7 +576,7 @@ func prepareEthTx(priv *ethsecp256k1.PrivKey, msgEthereumTx *evmtypes.MsgEthereu
|
|||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
|
|
||||||
evmDenom := s.app.EvmKeeper.GetParams(s.ctx).EvmDenom
|
evmDenom := s.app.EvmKeeper.GetParams(s.ctx).EvmDenom
|
||||||
fees := sdk.Coins{{Denom: evmDenom, Amount: sdk.NewIntFromBigInt(txData.Fee())}}
|
fees := sdk.Coins{{Denom: evmDenom, Amount: sdkmath.NewIntFromBigInt(txData.Fee())}}
|
||||||
builder.SetFeeAmount(fees)
|
builder.SetFeeAmount(fees)
|
||||||
builder.SetGasLimit(msgEthereumTx.GetGas())
|
builder.SetGasLimit(msgEthereumTx.GetGas())
|
||||||
|
|
||||||
@ -600,7 +601,7 @@ func deliverEthTx(priv *ethsecp256k1.PrivKey, msgEthereumTx *evmtypes.MsgEthereu
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func prepareCosmosTx(priv *ethsecp256k1.PrivKey, gasPrice *sdk.Int, msgs ...sdk.Msg) []byte {
|
func prepareCosmosTx(priv *ethsecp256k1.PrivKey, gasPrice *sdkmath.Int, msgs ...sdk.Msg) []byte {
|
||||||
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
||||||
accountAddress := sdk.AccAddress(priv.PubKey().Address().Bytes())
|
accountAddress := sdk.AccAddress(priv.PubKey().Address().Bytes())
|
||||||
|
|
||||||
@ -608,7 +609,7 @@ func prepareCosmosTx(priv *ethsecp256k1.PrivKey, gasPrice *sdk.Int, msgs ...sdk.
|
|||||||
|
|
||||||
txBuilder.SetGasLimit(1000000)
|
txBuilder.SetGasLimit(1000000)
|
||||||
if gasPrice == nil {
|
if gasPrice == nil {
|
||||||
_gasPrice := sdk.NewInt(1)
|
_gasPrice := sdkmath.NewInt(1)
|
||||||
gasPrice = &_gasPrice
|
gasPrice = &_gasPrice
|
||||||
}
|
}
|
||||||
fees := &sdk.Coins{{Denom: s.denom, Amount: gasPrice.MulRaw(1000000)}}
|
fees := &sdk.Coins{{Denom: s.denom, Amount: gasPrice.MulRaw(1000000)}}
|
||||||
@ -659,14 +660,14 @@ func prepareCosmosTx(priv *ethsecp256k1.PrivKey, gasPrice *sdk.Int, msgs ...sdk.
|
|||||||
return bz
|
return bz
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkTx(priv *ethsecp256k1.PrivKey, gasPrice *sdk.Int, msgs ...sdk.Msg) abci.ResponseCheckTx {
|
func checkTx(priv *ethsecp256k1.PrivKey, gasPrice *sdkmath.Int, msgs ...sdk.Msg) abci.ResponseCheckTx {
|
||||||
bz := prepareCosmosTx(priv, gasPrice, msgs...)
|
bz := prepareCosmosTx(priv, gasPrice, msgs...)
|
||||||
req := abci.RequestCheckTx{Tx: bz}
|
req := abci.RequestCheckTx{Tx: bz}
|
||||||
res := s.app.BaseApp.CheckTx(req)
|
res := s.app.BaseApp.CheckTx(req)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func deliverTx(priv *ethsecp256k1.PrivKey, gasPrice *sdk.Int, msgs ...sdk.Msg) abci.ResponseDeliverTx {
|
func deliverTx(priv *ethsecp256k1.PrivKey, gasPrice *sdkmath.Int, msgs ...sdk.Msg) abci.ResponseDeliverTx {
|
||||||
bz := prepareCosmosTx(priv, gasPrice, msgs...)
|
bz := prepareCosmosTx(priv, gasPrice, msgs...)
|
||||||
req := abci.RequestDeliverTx{Tx: bz}
|
req := abci.RequestDeliverTx{Tx: bz}
|
||||||
res := s.app.BaseApp.DeliverTx(req)
|
res := s.app.BaseApp.DeliverTx(req)
|
||||||
|
@ -2,6 +2,7 @@ package keeper
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
@ -14,15 +15,15 @@ type Keeper struct {
|
|||||||
// Protobuf codec
|
// Protobuf codec
|
||||||
cdc codec.BinaryCodec
|
cdc codec.BinaryCodec
|
||||||
// Store key required for the Fee Market Prefix KVStore.
|
// Store key required for the Fee Market Prefix KVStore.
|
||||||
storeKey sdk.StoreKey
|
storeKey storetypes.StoreKey
|
||||||
transientKey sdk.StoreKey
|
transientKey storetypes.StoreKey
|
||||||
// module specific parameter space that can be configured through governance
|
// module specific parameter space that can be configured through governance
|
||||||
paramSpace paramtypes.Subspace
|
paramSpace paramtypes.Subspace
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewKeeper generates new fee market module keeper
|
// NewKeeper generates new fee market module keeper
|
||||||
func NewKeeper(
|
func NewKeeper(
|
||||||
cdc codec.BinaryCodec, paramSpace paramtypes.Subspace, storeKey, transientKey sdk.StoreKey,
|
cdc codec.BinaryCodec, paramSpace paramtypes.Subspace, storeKey, transientKey storetypes.StoreKey,
|
||||||
) Keeper {
|
) Keeper {
|
||||||
// set KeyTable if it has not already been set
|
// set KeyTable if it has not already been set
|
||||||
if !paramSpace.HasKeyTable() {
|
if !paramSpace.HasKeyTable() {
|
||||||
|
@ -128,7 +128,8 @@ func (suite *KeeperTestSuite) SetupApp(checkTx bool) {
|
|||||||
validator, err := stakingtypes.NewValidator(valAddr, priv.PubKey(), stakingtypes.Description{})
|
validator, err := stakingtypes.NewValidator(valAddr, priv.PubKey(), stakingtypes.Description{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
validator = stakingkeeper.TestingUpdateValidator(suite.app.StakingKeeper, suite.ctx, validator, true)
|
validator = stakingkeeper.TestingUpdateValidator(suite.app.StakingKeeper, suite.ctx, validator, true)
|
||||||
suite.app.StakingKeeper.AfterValidatorCreated(suite.ctx, validator.GetOperator())
|
err = suite.app.StakingKeeper.AfterValidatorCreated(suite.ctx, validator.GetOperator())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = suite.app.StakingKeeper.SetValidatorByConsAddr(suite.ctx, validator)
|
err = suite.app.StakingKeeper.SetValidatorByConsAddr(suite.ctx, validator)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -137,7 +138,7 @@ func (suite *KeeperTestSuite) SetupApp(checkTx bool) {
|
|||||||
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
encodingConfig := encoding.MakeConfig(app.ModuleBasics)
|
||||||
suite.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig)
|
suite.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig)
|
||||||
suite.ethSigner = ethtypes.LatestSignerForChainID(suite.app.EvmKeeper.ChainID())
|
suite.ethSigner = ethtypes.LatestSignerForChainID(suite.app.EvmKeeper.ChainID())
|
||||||
suite.appCodec = encodingConfig.Marshaler
|
suite.appCodec = encodingConfig.Codec
|
||||||
suite.denom = evmtypes.DefaultEVMDenom
|
suite.denom = evmtypes.DefaultEVMDenom
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package keeper
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/evmos/ethermint/x/feemarket/types"
|
"github.com/evmos/ethermint/x/feemarket/types"
|
||||||
)
|
)
|
||||||
@ -40,5 +41,5 @@ func (k Keeper) GetBaseFee(ctx sdk.Context) *big.Int {
|
|||||||
|
|
||||||
// SetBaseFee set's the base fee in the paramSpace
|
// SetBaseFee set's the base fee in the paramSpace
|
||||||
func (k Keeper) SetBaseFee(ctx sdk.Context, baseFee *big.Int) {
|
func (k Keeper) SetBaseFee(ctx sdk.Context, baseFee *big.Int) {
|
||||||
k.paramSpace.Set(ctx, types.ParamStoreKeyBaseFee, sdk.NewIntFromBigInt(baseFee))
|
k.paramSpace.Set(ctx, types.ParamStoreKeyBaseFee, sdkmath.NewIntFromBigInt(baseFee))
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package v010
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||||
@ -15,7 +17,7 @@ var KeyPrefixBaseFeeV1 = []byte{2}
|
|||||||
|
|
||||||
// MigrateStore migrates the BaseFee value from the store to the params for
|
// MigrateStore migrates the BaseFee value from the store to the params for
|
||||||
// In-Place Store migration logic.
|
// In-Place Store migration logic.
|
||||||
func MigrateStore(ctx sdk.Context, paramstore *paramtypes.Subspace, storeKey sdk.StoreKey) error {
|
func MigrateStore(ctx sdk.Context, paramstore *paramtypes.Subspace, storeKey storetypes.StoreKey) error {
|
||||||
baseFee := types.DefaultParams().BaseFee
|
baseFee := types.DefaultParams().BaseFee
|
||||||
|
|
||||||
store := ctx.KVStore(storeKey)
|
store := ctx.KVStore(storeKey)
|
||||||
@ -28,7 +30,7 @@ func MigrateStore(ctx sdk.Context, paramstore *paramtypes.Subspace, storeKey sdk
|
|||||||
switch {
|
switch {
|
||||||
case store.Has(KeyPrefixBaseFeeV1):
|
case store.Has(KeyPrefixBaseFeeV1):
|
||||||
bz := store.Get(KeyPrefixBaseFeeV1)
|
bz := store.Get(KeyPrefixBaseFeeV1)
|
||||||
baseFee = sdk.NewIntFromBigInt(new(big.Int).SetBytes(bz))
|
baseFee = sdkmath.NewIntFromBigInt(new(big.Int).SetBytes(bz))
|
||||||
case paramstore.Has(ctx, types.ParamStoreKeyNoBaseFee):
|
case paramstore.Has(ctx, types.ParamStoreKeyNoBaseFee):
|
||||||
paramstore.GetIfExists(ctx, types.ParamStoreKeyBaseFee, &baseFee)
|
paramstore.GetIfExists(ctx, types.ParamStoreKeyBaseFee, &baseFee)
|
||||||
}
|
}
|
||||||
|
@ -26,9 +26,9 @@ func TestMigrateStore(t *testing.T) {
|
|||||||
tFeeMarketKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", feemarkettypes.StoreKey))
|
tFeeMarketKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", feemarkettypes.StoreKey))
|
||||||
ctx := testutil.DefaultContext(feemarketKey, tFeeMarketKey)
|
ctx := testutil.DefaultContext(feemarketKey, tFeeMarketKey)
|
||||||
paramstore := paramtypes.NewSubspace(
|
paramstore := paramtypes.NewSubspace(
|
||||||
encCfg.Marshaler, encCfg.Amino, feemarketKey, tFeeMarketKey, "feemarket",
|
encCfg.Codec, encCfg.Amino, feemarketKey, tFeeMarketKey, "feemarket",
|
||||||
)
|
)
|
||||||
fmKeeper := feemarketkeeper.NewKeeper(encCfg.Marshaler, paramstore, feemarketKey, tFeeMarketKey)
|
fmKeeper := feemarketkeeper.NewKeeper(encCfg.Codec, paramstore, feemarketKey, tFeeMarketKey)
|
||||||
fmKeeper.SetParams(ctx, types.DefaultParams())
|
fmKeeper.SetParams(ctx, types.DefaultParams())
|
||||||
require.True(t, paramstore.HasKeyTable())
|
require.True(t, paramstore.HasKeyTable())
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ func TestMigrateJSON(t *testing.T) {
|
|||||||
}`
|
}`
|
||||||
encCfg := encoding.MakeConfig(app.ModuleBasics)
|
encCfg := encoding.MakeConfig(app.ModuleBasics)
|
||||||
var genState v09types.GenesisState
|
var genState v09types.GenesisState
|
||||||
err := encCfg.Marshaler.UnmarshalJSON([]byte(rawJson), &genState)
|
err := encCfg.Codec.UnmarshalJSON([]byte(rawJson), &genState)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
migratedGenState := v010.MigrateJSON(genState)
|
migratedGenState := v010.MigrateJSON(genState)
|
||||||
|
@ -3,7 +3,8 @@ package types
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
)
|
)
|
||||||
@ -30,7 +31,7 @@ func NewParams(noBaseFee bool, baseFeeChangeDenom, elasticityMultiplier uint32,
|
|||||||
NoBaseFee: noBaseFee,
|
NoBaseFee: noBaseFee,
|
||||||
BaseFeeChangeDenominator: baseFeeChangeDenom,
|
BaseFeeChangeDenominator: baseFeeChangeDenom,
|
||||||
ElasticityMultiplier: elasticityMultiplier,
|
ElasticityMultiplier: elasticityMultiplier,
|
||||||
BaseFee: sdk.NewIntFromUint64(baseFee),
|
BaseFee: sdkmath.NewIntFromUint64(baseFee),
|
||||||
EnableHeight: enableHeight,
|
EnableHeight: enableHeight,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -41,7 +42,7 @@ func DefaultParams() Params {
|
|||||||
NoBaseFee: false,
|
NoBaseFee: false,
|
||||||
BaseFeeChangeDenominator: params.BaseFeeChangeDenominator,
|
BaseFeeChangeDenominator: params.BaseFeeChangeDenominator,
|
||||||
ElasticityMultiplier: params.ElasticityMultiplier,
|
ElasticityMultiplier: params.ElasticityMultiplier,
|
||||||
BaseFee: sdk.NewIntFromUint64(params.InitialBaseFee),
|
BaseFee: sdkmath.NewIntFromUint64(params.InitialBaseFee),
|
||||||
EnableHeight: 0,
|
EnableHeight: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,7 +109,7 @@ func validateElasticityMultiplier(i interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func validateBaseFee(i interface{}) error {
|
func validateBaseFee(i interface{}) error {
|
||||||
value, ok := i.(sdk.Int)
|
value, ok := i.(sdkmath.Int)
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("invalid parameter type: %T", i)
|
return fmt.Errorf("invalid parameter type: %T", i)
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ func TestMigrateStore(t *testing.T) {
|
|||||||
tFeeMarketKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", feemarkettypes.StoreKey))
|
tFeeMarketKey := sdk.NewTransientStoreKey(fmt.Sprintf("%s_test", feemarkettypes.StoreKey))
|
||||||
ctx := testutil.DefaultContext(feemarketKey, tFeeMarketKey)
|
ctx := testutil.DefaultContext(feemarketKey, tFeeMarketKey)
|
||||||
paramstore := paramtypes.NewSubspace(
|
paramstore := paramtypes.NewSubspace(
|
||||||
encCfg.Marshaler, encCfg.Amino, feemarketKey, tFeeMarketKey, "feemarket",
|
encCfg.Codec, encCfg.Amino, feemarketKey, tFeeMarketKey, "feemarket",
|
||||||
)
|
)
|
||||||
|
|
||||||
paramstore = paramstore.WithKeyTable(feemarkettypes.ParamKeyTable())
|
paramstore = paramstore.WithKeyTable(feemarkettypes.ParamKeyTable())
|
||||||
@ -78,7 +78,7 @@ func TestMigrateJSON(t *testing.T) {
|
|||||||
}`
|
}`
|
||||||
encCfg := encoding.MakeConfig(app.ModuleBasics)
|
encCfg := encoding.MakeConfig(app.ModuleBasics)
|
||||||
var genState v010types.GenesisState
|
var genState v010types.GenesisState
|
||||||
err := encCfg.Marshaler.UnmarshalJSON([]byte(rawJson), &genState)
|
err := encCfg.Codec.UnmarshalJSON([]byte(rawJson), &genState)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
migratedGenState := v011.MigrateJSON(genState)
|
migratedGenState := v011.MigrateJSON(genState)
|
||||||
|
@ -3,6 +3,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
sdkmath "cosmossdk.io/math"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
@ -47,7 +48,7 @@ func NewParams(
|
|||||||
NoBaseFee: noBaseFee,
|
NoBaseFee: noBaseFee,
|
||||||
BaseFeeChangeDenominator: baseFeeChangeDenom,
|
BaseFeeChangeDenominator: baseFeeChangeDenom,
|
||||||
ElasticityMultiplier: elasticityMultiplier,
|
ElasticityMultiplier: elasticityMultiplier,
|
||||||
BaseFee: sdk.NewIntFromUint64(baseFee),
|
BaseFee: sdkmath.NewIntFromUint64(baseFee),
|
||||||
EnableHeight: enableHeight,
|
EnableHeight: enableHeight,
|
||||||
MinGasPrice: minGasPrice,
|
MinGasPrice: minGasPrice,
|
||||||
MinGasMultiplier: minGasPriceMultiplier,
|
MinGasMultiplier: minGasPriceMultiplier,
|
||||||
@ -60,7 +61,7 @@ func DefaultParams() Params {
|
|||||||
NoBaseFee: false,
|
NoBaseFee: false,
|
||||||
BaseFeeChangeDenominator: params.BaseFeeChangeDenominator,
|
BaseFeeChangeDenominator: params.BaseFeeChangeDenominator,
|
||||||
ElasticityMultiplier: params.ElasticityMultiplier,
|
ElasticityMultiplier: params.ElasticityMultiplier,
|
||||||
BaseFee: sdk.NewIntFromUint64(params.InitialBaseFee),
|
BaseFee: sdkmath.NewIntFromUint64(params.InitialBaseFee),
|
||||||
EnableHeight: 0,
|
EnableHeight: 0,
|
||||||
MinGasPrice: DefaultMinGasPrice,
|
MinGasPrice: DefaultMinGasPrice,
|
||||||
MinGasMultiplier: DefaultMinGasMultiplier,
|
MinGasMultiplier: DefaultMinGasMultiplier,
|
||||||
@ -135,7 +136,7 @@ func validateElasticityMultiplier(i interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func validateBaseFee(i interface{}) error {
|
func validateBaseFee(i interface{}) error {
|
||||||
value, ok := i.(sdk.Int)
|
value, ok := i.(sdkmath.Int)
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("invalid parameter type: %T", i)
|
return fmt.Errorf("invalid parameter type: %T", i)
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,11 @@ package types
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdkmath "cosmossdk.io/math"
|
||||||
|
|
||||||
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ParamsTestSuite struct {
|
type ParamsTestSuite struct {
|
||||||
@ -45,7 +46,7 @@ func (suite *ParamsTestSuite) TestParamsValidate() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"invalid: min gas price negative",
|
"invalid: min gas price negative",
|
||||||
NewParams(true, 7, 3, 2000000000, int64(544435345345435345), sdk.NewDecFromInt(sdk.NewInt(-1)), DefaultMinGasMultiplier),
|
NewParams(true, 7, 3, 2000000000, int64(544435345345435345), sdk.NewDecFromInt(sdkmath.NewInt(-1)), DefaultMinGasMultiplier),
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -86,8 +87,8 @@ func (suite *ParamsTestSuite) TestParamsValidatePriv() {
|
|||||||
suite.Require().NoError(validateElasticityMultiplier(uint32(2)))
|
suite.Require().NoError(validateElasticityMultiplier(uint32(2)))
|
||||||
suite.Require().Error(validateBaseFee(""))
|
suite.Require().Error(validateBaseFee(""))
|
||||||
suite.Require().Error(validateBaseFee(int64(2000000000)))
|
suite.Require().Error(validateBaseFee(int64(2000000000)))
|
||||||
suite.Require().Error(validateBaseFee(sdk.NewInt(-2000000000)))
|
suite.Require().Error(validateBaseFee(sdkmath.NewInt(-2000000000)))
|
||||||
suite.Require().NoError(validateBaseFee(sdk.NewInt(2000000000)))
|
suite.Require().NoError(validateBaseFee(sdkmath.NewInt(2000000000)))
|
||||||
suite.Require().Error(validateEnableHeight(""))
|
suite.Require().Error(validateEnableHeight(""))
|
||||||
suite.Require().Error(validateEnableHeight(int64(-544435345345435345)))
|
suite.Require().Error(validateEnableHeight(int64(-544435345345435345)))
|
||||||
suite.Require().NoError(validateEnableHeight(int64(544435345345435345)))
|
suite.Require().NoError(validateEnableHeight(int64(544435345345435345)))
|
||||||
@ -104,13 +105,13 @@ func (suite *ParamsTestSuite) TestParamsValidateMinGasPrice() {
|
|||||||
expError bool
|
expError bool
|
||||||
}{
|
}{
|
||||||
{"default", DefaultParams().MinGasPrice, false},
|
{"default", DefaultParams().MinGasPrice, false},
|
||||||
{"valid", sdk.NewDecFromInt(sdk.NewInt(1)), false},
|
{"valid", sdk.NewDecFromInt(sdkmath.NewInt(1)), false},
|
||||||
{"invalid - wrong type - bool", false, true},
|
{"invalid - wrong type - bool", false, true},
|
||||||
{"invalid - wrong type - string", "", true},
|
{"invalid - wrong type - string", "", true},
|
||||||
{"invalid - wrong type - int64", int64(123), true},
|
{"invalid - wrong type - int64", int64(123), true},
|
||||||
{"invalid - wrong type - sdk.Int", sdk.NewInt(1), true},
|
{"invalid - wrong type - sdkmath.Int", sdkmath.NewInt(1), true},
|
||||||
{"invalid - is nil", nil, true},
|
{"invalid - is nil", nil, true},
|
||||||
{"invalid - is negative", sdk.NewDecFromInt(sdk.NewInt(-1)), true},
|
{"invalid - is negative", sdk.NewDecFromInt(sdkmath.NewInt(-1)), true},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
|
Loading…
Reference in New Issue
Block a user