Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(erc20): Deprecate x/params usage in x/erc20 #1100

Merged
merged 56 commits into from
Dec 16, 2022
Merged
Show file tree
Hide file tree
Changes from 49 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
ba28e22
(impv): added UpdateParams proto message
Vvaradinov Nov 22, 2022
696a6ab
(refactor): refactored the params keeper
Vvaradinov Nov 22, 2022
d5b4b8a
(imvp): updated proto messages, module initialization and module hand…
Vvaradinov Nov 23, 2022
0b8a4aa
(tests): Updated tests to include the new authority field in the crea…
Vvaradinov Nov 23, 2022
d8443a4
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Nov 23, 2022
13336a3
(impv): added store migration logic
Vvaradinov Nov 23, 2022
abad74c
(impv): modified tests and removed duplicate proto generated files fr…
Vvaradinov Nov 23, 2022
51aebdb
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Nov 24, 2022
704d960
(refactor): added missing msg to codec.
Vvaradinov Nov 24, 2022
21a4b5d
(fix): moved legacy subspace interface to types folder
Vvaradinov Nov 28, 2022
a513359
(fix): wrap context
Vvaradinov Nov 28, 2022
94b1f1b
(fix): ran formatter and linter
Vvaradinov Nov 28, 2022
06189f1
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Nov 28, 2022
a360482
(fix): linted proto files
Vvaradinov Nov 28, 2022
4ed6210
(fix): typo fix
Vvaradinov Nov 28, 2022
56af3c8
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Nov 28, 2022
515777a
(fix): remove dependency on gogotypes
Vvaradinov Nov 28, 2022
a7ce006
(fix): Deleted old migrations and updated tests
Vvaradinov Nov 30, 2022
850776a
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Nov 30, 2022
a3c3edd
(test): Trying to delete x/params module to check if the e2e test wil…
Vvaradinov Nov 30, 2022
169fdcd
Merge branch 'Vvaradinov/erc20-params-refactor' of https://github.com…
Vvaradinov Nov 30, 2022
4e99657
revert changes
Vvaradinov Nov 30, 2022
5b105ee
(fix): removed old calls to x/params module keeper
Vvaradinov Nov 30, 2022
aeacb95
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Nov 30, 2022
6799957
(fix): Applied changes from recoomendations
Vvaradinov Dec 1, 2022
185c550
Added CHANGELOG entry
Vvaradinov Dec 1, 2022
586341c
Merge branch 'main' into Vvaradinov/erc20-params-refactor
GAtom22 Dec 1, 2022
14f3347
Apply suggestions from code review
Vvaradinov Dec 9, 2022
dad3031
(fix): fixed order of keeper params in app.go
Vvaradinov Dec 9, 2022
3b82e69
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 9, 2022
3da7432
(fix): import keeper
Vvaradinov Dec 9, 2022
563c7a8
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 12, 2022
76de34a
(fix): remove HTTP endpoint exposure
Vvaradinov Dec 12, 2022
d141b5d
fix: applied changes from code review
Vvaradinov Dec 15, 2022
2bd6e5c
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
a576c51
fix: added authority check before setting keeper
Vvaradinov Dec 15, 2022
afe1e61
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
257e52c
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
ef69626
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
8765235
fix: fixed failing tests by providing the correct keeper
Vvaradinov Dec 15, 2022
4412025
fix: replaced with mock bank keeper
Vvaradinov Dec 15, 2022
9248c1a
tests: Added unit test for UpdateParams message
Vvaradinov Dec 15, 2022
c234f7d
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
f8632f1
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
0bc35ac
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
dba5ef7
fix: fixed app.go
Vvaradinov Dec 15, 2022
a8dfcf8
Merge branch 'Vvaradinov/erc20-params-refactor' of https://github.com…
Vvaradinov Dec 15, 2022
cd87444
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 15, 2022
0afc90c
fix: fix merge
Vvaradinov Dec 15, 2022
7828efe
fix: changed amino name for UpdateParams msg
Vvaradinov Dec 16, 2022
8a9e47b
tests: added additional tests for coverage requirements
Vvaradinov Dec 16, 2022
287e93d
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 16, 2022
b0559d8
fix: revert validatio ntest
Vvaradinov Dec 16, 2022
174778c
Merge branch 'Vvaradinov/erc20-params-refactor' of https://github.com…
Vvaradinov Dec 16, 2022
0aedd2a
Merge branch 'main' into Vvaradinov/erc20-params-refactor
Vvaradinov Dec 16, 2022
6b426a8
fix: fixed merge
Vvaradinov Dec 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ Ref: https://keepachangelog.com/en/1.0.0/

### State Machine Breaking

- (erc20) [#1100](https://github.com/evmos/evmos/pull/1100) Deprecate usage of x/params in x/erc20
- (incentives) [#1130](https://github.com/evmos/evmos/pull/1130) Deprecate usage of x/params in x/incentives
- (claims) [#1125](https://github.com/evmos/evmos/pull/1125) Deprecate usage of x/params in x/claims
- (revenue) [#1129](https://github.com/evmos/evmos/pull/1129) Deprecate usage of x/params in x/revenue
Expand Down
4 changes: 2 additions & 2 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,7 @@ func NewEvmos(
)

app.Erc20Keeper = erc20keeper.NewKeeper(
keys[erc20types.StoreKey], appCodec, app.GetSubspace(erc20types.ModuleName),
keys[erc20types.StoreKey], appCodec, authtypes.NewModuleAddress(govtypes.ModuleName),
app.AccountKeeper, app.BankKeeper, app.EvmKeeper, app.StakingKeeper, app.ClaimsKeeper,
)

Expand Down Expand Up @@ -621,7 +621,7 @@ func NewEvmos(
feemarket.NewAppModule(app.FeeMarketKeeper),
// Evmos app modules
inflation.NewAppModule(app.InflationKeeper, app.AccountKeeper, app.StakingKeeper),
erc20.NewAppModule(app.Erc20Keeper, app.AccountKeeper),
erc20.NewAppModule(app.Erc20Keeper, app.AccountKeeper, app.GetSubspace(erc20types.ModuleName)),
incentives.NewAppModule(app.IncentivesKeeper, app.AccountKeeper, app.GetSubspace(incentivestypes.ModuleName)),
epochs.NewAppModule(appCodec, app.EpochsKeeper),
claims.NewAppModule(appCodec, *app.ClaimsKeeper, app.GetSubspace(claimstypes.ModuleName)),
Expand Down
24 changes: 24 additions & 0 deletions proto/evmos/erc20/v1/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ syntax = "proto3";
package evmos.erc20.v1;

import "cosmos/base/v1beta1/coin.proto";
import "cosmos/msg/v1/msg.proto";
import "cosmos_proto/cosmos.proto";
import "evmos/erc20/v1/genesis.proto";
import "gogoproto/gogo.proto";
import "google/api/annotations.proto";

Expand All @@ -19,6 +22,9 @@ service Msg {
rpc ConvertERC20(MsgConvertERC20) returns (MsgConvertERC20Response) {
option (google.api.http).get = "/evmos/erc20/v1/tx/convert_erc20";
};
// UpdateParams defined a governance operation for updating the x/erc20 module parameters.
// The authority is hard-coded to the Cosmos SDK x/gov module account
rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);
}

// MsgConvertCoin defines a Msg to convert a native Cosmos coin to a ERC20 token
Expand Down Expand Up @@ -50,3 +56,21 @@ message MsgConvertERC20 {

// MsgConvertERC20Response returns no fields
message MsgConvertERC20Response {}

// MsgUpdateParams is the Msg/UpdateParams request type for Erc20 parameters.
// Since: cosmos-sdk 0.47
message MsgUpdateParams {
option (cosmos.msg.v1.signer) = "authority";

// authority is the address of the governance account.
string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

// params defines the x/evm parameters to update.
// NOTE: All parameters must be supplied.
Params params = 2 [(gogoproto.nullable) = false];
}

// MsgUpdateParamsResponse defines the response structure for executing a
// MsgUpdateParams message.
// Since: cosmos-sdk 0.47
message MsgUpdateParamsResponse {}
7 changes: 6 additions & 1 deletion x/erc20/genesis.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package erc20

import (
"fmt"

sdk "github.com/cosmos/cosmos-sdk/types"
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"

Expand All @@ -15,7 +17,10 @@ func InitGenesis(
accountKeeper authkeeper.AccountKeeper,
data types.GenesisState,
) {
k.SetParams(ctx, data.Params)
err := k.SetParams(ctx, data.Params)
if err != nil {
panic(fmt.Errorf("error setting params %s", err))
}

// ensure erc20 module account is set on genesis
if acc := accountKeeper.GetModuleAccount(ctx, types.ModuleName); acc == nil {
Expand Down
3 changes: 3 additions & 0 deletions x/erc20/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ func NewHandler(server types.MsgServer) sdk.Handler {
case *types.MsgConvertERC20:
res, err := server.ConvertERC20(sdk.WrapSDKContext(ctx), msg)
return sdk.WrapServiceResult(ctx, res, err)
case *types.MsgUpdateParams:
res, err := server.UpdateParams(sdk.WrapSDKContext(ctx), msg)
return sdk.WrapServiceResult(ctx, res, err)
default:
err := errorsmod.Wrapf(errortypes.ErrUnknownRequest, "unrecognized %s message type: %T", types.ModuleName, msg)
return nil, err
Expand Down
22 changes: 13 additions & 9 deletions x/erc20/keeper/evm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package keeper_test
import (
"fmt"

authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"

"github.com/ethereum/go-ethereum/common"
"github.com/evmos/ethermint/tests"
evmtypes "github.com/evmos/ethermint/x/evm/types"
Expand Down Expand Up @@ -88,9 +91,10 @@ func (suite *KeeperTestSuite) TestBalanceOf() {
for _, tc := range testCases {
suite.SetupTest() // reset
mockEVMKeeper = &MockEVMKeeper{}
sp, found := suite.app.ParamsKeeper.GetSubspace(types.ModuleName)
suite.Require().True(found)
suite.app.Erc20Keeper = keeper.NewKeeper(suite.app.GetKey("erc20"), suite.app.AppCodec(), sp, suite.app.AccountKeeper, suite.app.BankKeeper,
suite.app.Erc20Keeper = keeper.NewKeeper(
suite.app.GetKey("erc20"), suite.app.AppCodec(),
authtypes.NewModuleAddress(govtypes.ModuleName),
suite.app.AccountKeeper, suite.app.BankKeeper,
mockEVMKeeper, suite.app.StakingKeeper, suite.app.ClaimsKeeper)

tc.malleate()
Expand Down Expand Up @@ -276,9 +280,9 @@ func (suite *KeeperTestSuite) TestForceFail() {
suite.Run(fmt.Sprintf("Case %s", tc.name), func() {
suite.SetupTest() // reset
mockEVMKeeper = &MockEVMKeeper{}
sp, found := suite.app.ParamsKeeper.GetSubspace(types.ModuleName)
suite.Require().True(found)
suite.app.Erc20Keeper = keeper.NewKeeper(suite.app.GetKey("erc20"), suite.app.AppCodec(), sp, suite.app.AccountKeeper,
suite.app.Erc20Keeper = keeper.NewKeeper(
suite.app.GetKey("erc20"), suite.app.AppCodec(),
authtypes.NewModuleAddress(govtypes.ModuleName), suite.app.AccountKeeper,
suite.app.BankKeeper, mockEVMKeeper, suite.app.StakingKeeper, suite.app.ClaimsKeeper)

tc.malleate()
Expand Down Expand Up @@ -365,9 +369,9 @@ func (suite *KeeperTestSuite) TestQueryERC20ForceFail() {
for _, tc := range testCases {
suite.SetupTest() // reset
mockEVMKeeper = &MockEVMKeeper{}
sp, found := suite.app.ParamsKeeper.GetSubspace(types.ModuleName)
suite.Require().True(found)
suite.app.Erc20Keeper = keeper.NewKeeper(suite.app.GetKey("erc20"), suite.app.AppCodec(), sp, suite.app.AccountKeeper,
suite.app.Erc20Keeper = keeper.NewKeeper(
suite.app.GetKey("erc20"), suite.app.AppCodec(),
authtypes.NewModuleAddress(govtypes.ModuleName), suite.app.AccountKeeper,
suite.app.BankKeeper, mockEVMKeeper, suite.app.StakingKeeper, suite.app.ClaimsKeeper)

tc.malleate()
Expand Down
51 changes: 15 additions & 36 deletions x/erc20/keeper/ibc_callbacks_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
)

var _ = Describe("Convert receiving IBC to Erc20", Ordered, func() {

var (
sender, receiver string
receiverAcc sdk.AccAddress
Expand Down Expand Up @@ -351,8 +350,7 @@ var _ = Describe("Convert receiving IBC to Erc20", Ordered, func() {
_, err := s.app.Erc20Keeper.CallEVM(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, common.BytesToAddress(senderAcc.Bytes()), pair.GetERC20Contract(), true, "mint", common.BytesToAddress(senderAcc.Bytes()), big.NewInt(amount))
s.Require().NoError(err)
// Check Balance
balanceToken :=
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken := s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

// Convert half of the available tokens
Expand All @@ -370,8 +368,7 @@ var _ = Describe("Convert receiving IBC to Erc20", Ordered, func() {
s.Require().NoError(err)

// Check Balance
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(int64(0), balanceToken.Int64())

// IBC coin balance should be amount
Expand All @@ -390,17 +387,15 @@ var _ = Describe("Convert receiving IBC to Erc20", Ordered, func() {

s.SendAndReceiveMessage(s.pathOsmosisEvmos, s.IBCOsmosisChain, erc20Denomtrace.IBCDenom(), amount, receiver, sender, 1, erc20Denomtrace.GetFullDenomPath())
// Check Balance
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())
})
It("should convert full available balance of erc20 coin to original erc20 token", func() {
// Mint tokens and send to receiver
_, err := s.app.Erc20Keeper.CallEVM(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, common.BytesToAddress(senderAcc.Bytes()), pair.GetERC20Contract(), true, "mint", common.BytesToAddress(senderAcc.Bytes()), big.NewInt(amount))
s.Require().NoError(err)
// Check Balance
balanceToken :=
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken := s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

// Convert half of the available tokens
Expand All @@ -418,8 +413,7 @@ var _ = Describe("Convert receiving IBC to Erc20", Ordered, func() {
s.Require().NoError(err)

// Check Balance
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(int64(0), balanceToken.Int64())

// erc20 coin balance should be amount
Expand All @@ -438,14 +432,12 @@ var _ = Describe("Convert receiving IBC to Erc20", Ordered, func() {

s.SendAndReceiveMessage(s.pathOsmosisEvmos, s.IBCOsmosisChain, erc20Denomtrace.IBCDenom(), amount/2, receiver, sender, 1, erc20Denomtrace.GetFullDenomPath())
// Check Balance
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

// IBC coin balance should be zero
erc20CoinsBalance = s.app.BankKeeper.GetBalance(s.EvmosChain.GetContext(), senderAcc, pair.Denom)
s.Require().Equal(int64(0), erc20CoinsBalance.Amount.Int64())

})
It("send native ERC-20 to osmosis, when sending back IBC coins should convert full balance back to erc20 token", func() {
// Mint tokens and send to receiver
Expand Down Expand Up @@ -547,8 +539,7 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
_, err := s.app.Erc20Keeper.CallEVM(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, common.BytesToAddress(senderAcc.Bytes()), pair.GetERC20Contract(), true, "mint", common.BytesToAddress(senderAcc.Bytes()), big.NewInt(amount))
s.Require().NoError(err)
// Check Balance
balanceToken :=
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken := s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

path := s.pathOsmosisEvmos
Expand Down Expand Up @@ -587,10 +578,8 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
s.Require().Error(err)

// Check Balance didnt change
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

})
})
Describe("registered erc20", func() {
Expand Down Expand Up @@ -623,8 +612,7 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
_, err := s.app.Erc20Keeper.CallEVM(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, common.BytesToAddress(senderAcc.Bytes()), pair.GetERC20Contract(), true, "mint", common.BytesToAddress(senderAcc.Bytes()), big.NewInt(amount*2))
s.Require().NoError(err)
// Check Balance
balanceToken :=
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken := s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount*2, balanceToken.Int64())

// Convert half of the available tokens
Expand All @@ -642,8 +630,7 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
s.Require().NoError(err)

// Check Balance
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

// IBC coin balance should be amount
Expand All @@ -660,8 +647,7 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
erc20IBCBalance := s.IBCOsmosisChain.GetSimApp().BankKeeper.GetBalance(s.IBCOsmosisChain.GetContext(), receiverAcc, erc20Denomtrace.IBCDenom())
s.Require().Equal(amount, erc20IBCBalance.Amount.Int64())
// Check Balance
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())
})
It("should convert and transfer if no ibc balance", func() {
Expand All @@ -670,32 +656,28 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
s.Require().NoError(err)

// Check Balance
balanceToken :=
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken := s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

// Attempt to send erc20 into ibc, should automatically convert
s.SendBackCoins(s.pathOsmosisEvmos, s.EvmosChain, pair.Denom, amount, sender, receiver, 1, pair.Denom)

s.EvmosChain.Coordinator.CommitBlock()
// Check balance of erc20 depleted
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(int64(0), balanceToken.Int64())

// Check balance received on the Osmosis chain
ibcOsmosBalance := s.IBCOsmosisChain.GetSimApp().BankKeeper.GetBalance(s.IBCOsmosisChain.GetContext(), receiverAcc, erc20Denomtrace.IBCDenom())
s.Require().Equal(amount, ibcOsmosBalance.Amount.Int64())

})
It("should fail if balance is not enough", func() {
// Mint tokens and send to receiver
_, err := s.app.Erc20Keeper.CallEVM(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, common.BytesToAddress(senderAcc.Bytes()), pair.GetERC20Contract(), true, "mint", common.BytesToAddress(senderAcc.Bytes()), big.NewInt(amount))
s.Require().NoError(err)

// Check Balance
balanceToken :=
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken := s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())

// Attempt to send that will fail because balance is not enough
Expand Down Expand Up @@ -728,8 +710,7 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
// Check Balance didnt change
ibcOsmosBalance := s.IBCOsmosisChain.GetSimApp().BankKeeper.GetBalance(s.IBCOsmosisChain.GetContext(), receiverAcc, erc20Denomtrace.IBCDenom())
s.Require().Equal(int64(0), ibcOsmosBalance.Amount.Int64())
balanceToken =
s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
balanceToken = s.app.Erc20Keeper.BalanceOf(s.EvmosChain.GetContext(), contracts.ERC20MinterBurnerDecimalsContract.ABI, pair.GetERC20Contract(), common.BytesToAddress(senderAcc.Bytes()))
s.Require().Equal(amount, balanceToken.Int64())
})
})
Expand Down Expand Up @@ -798,7 +779,6 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
})

It("should timeout and reconvert coins", func() {

balance := s.app.BankKeeper.GetBalance(s.EvmosChain.GetContext(), senderAcc, teststypes.UosmoIbcdenom)
s.Require().Equal(amount, balance.Amount.Int64())

Expand Down Expand Up @@ -875,7 +855,6 @@ var _ = Describe("Convert outgoing ERC20 to IBC", Ordered, func() {
s.Require().Equal(amount, balanceERC20TokenAfter.Int64())
})
It("should error and reconvert coins", func() {

receiverAcc = s.IBCCosmosChain.GetSimApp().AccountKeeper.GetModuleAddress("distribution")
receiver = receiverAcc.String()
s.IBCOsmosisChain.GetSimApp().BankKeeper.BlockedAddr(receiverAcc)
Expand Down
14 changes: 14 additions & 0 deletions x/erc20/keeper/ibc_callbacks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package keeper_test
import (
"errors"
"fmt"
"github.com/evmos/evmos/v10/x/erc20/keeper"
"math/big"

govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"

"github.com/ethereum/go-ethereum/common"

"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
Expand Down Expand Up @@ -335,6 +338,17 @@ func (suite *KeeperTestSuite) TestOnRecvPacket() {
// Set Next Sequence Send
suite.app.IBCKeeper.ChannelKeeper.SetNextSequenceSend(suite.ctx, transfertypes.PortID, evmosChannel, 1)

suite.app.Erc20Keeper = keeper.NewKeeper(
suite.app.GetKey(types.StoreKey),
suite.app.AppCodec(),
authtypes.NewModuleAddress(govtypes.ModuleName),
suite.app.AccountKeeper,
suite.app.BankKeeper,
suite.app.EvmKeeper,
suite.app.StakingKeeper,
suite.app.ClaimsKeeper,
)

// Fund receiver account with EVMOS, ERC20 coins and IBC vouchers
// We do this since we are interested in the conversion portion w/ OnRecvPacket
err = testutil.FundAccount(suite.ctx, suite.app.BankKeeper, tc.receiver, coins)
Expand Down