|  |  |  | @ -14,7 +14,6 @@ import ( | 
		
	
		
			
				|  |  |  |  | 	vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" | 
		
	
		
			
				|  |  |  |  | 	evmtypes "github.com/evmos/ethermint/x/evm/types" | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	"github.com/0glabs/0g-chain/chaincfg" | 
		
	
		
			
				|  |  |  |  | 	"github.com/0glabs/0g-chain/x/evmutil/keeper" | 
		
	
		
			
				|  |  |  |  | 	"github.com/0glabs/0g-chain/x/evmutil/testutil" | 
		
	
		
			
				|  |  |  |  | 	"github.com/0glabs/0g-chain/x/evmutil/types" | 
		
	
	
		
			
				
					
					|  |  |  | @ -35,7 +34,7 @@ func (suite *evmBankKeeperTestSuite) SetupTest() { | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | func (suite *evmBankKeeperTestSuite) TestGetBalance_ReturnsSpendable() { | 
		
	
		
			
				|  |  |  |  | 	startingCoins := sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10)) | 
		
	
		
			
				|  |  |  |  | 	startingCoins := sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10)) | 
		
	
		
			
				|  |  |  |  | 	startingNeuron := sdkmath.NewInt(100) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	now := tmtime.Now() | 
		
	
	
		
			
				
					
					|  |  |  | @ -49,16 +48,16 @@ func (suite *evmBankKeeperTestSuite) TestGetBalance_ReturnsSpendable() { | 
		
	
		
			
				|  |  |  |  | 	err = suite.Keeper.SetBalance(suite.Ctx, suite.Addrs[0], startingNeuron) | 
		
	
		
			
				|  |  |  |  | 	suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	coin := suite.EvmBankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], chaincfg.BaseDenom) | 
		
	
		
			
				|  |  |  |  | 	coin := suite.EvmBankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "neuron") | 
		
	
		
			
				|  |  |  |  | 	suite.Require().Equal(startingNeuron, coin.Amount) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	ctx := suite.Ctx.WithBlockTime(now.Add(12 * time.Hour)) | 
		
	
		
			
				|  |  |  |  | 	coin = suite.EvmBankKeeper.GetBalance(ctx, suite.Addrs[0], chaincfg.BaseDenom) | 
		
	
		
			
				|  |  |  |  | 	suite.Require().Equal(sdkmath.NewIntFromUint64(5_000_000_000_000_000_100), coin.Amount) | 
		
	
		
			
				|  |  |  |  | 	coin = suite.EvmBankKeeper.GetBalance(ctx, suite.Addrs[0], "neuron") | 
		
	
		
			
				|  |  |  |  | 	suite.Require().Equal(sdkmath.NewIntFromUint64(5_000_000_000_100), coin.Amount) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | func (suite *evmBankKeeperTestSuite) TestGetBalance_NotEvmDenom() { | 
		
	
		
			
				|  |  |  |  | 	suite.Require().Panics(func() { | 
		
	
		
			
				|  |  |  |  | 		suite.EvmBankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 		suite.EvmBankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "ua0gi") | 
		
	
		
			
				|  |  |  |  | 	}) | 
		
	
		
			
				|  |  |  |  | 	suite.Require().Panics(func() { | 
		
	
		
			
				|  |  |  |  | 		suite.EvmBankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "busd") | 
		
	
	
		
			
				
					
					|  |  |  | @ -71,41 +70,41 @@ func (suite *evmBankKeeperTestSuite) TestGetBalance() { | 
		
	
		
			
				|  |  |  |  | 		expAmount      sdkmath.Int | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"a0gi with neuron", | 
		
	
		
			
				|  |  |  |  | 			"ua0gi with neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 100), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 10), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 100), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 10), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("10000000000000000100")), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("10000000000100")), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"just neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 100), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 100), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("busd", 100), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"just a0gi", | 
		
	
		
			
				|  |  |  |  | 			"just ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 10), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 10), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("busd", 100), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("10000000000000000000")), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("10000000000000")), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"no a0gi or neuron", | 
		
	
		
			
				|  |  |  |  | 			"no ua0gi or neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"with avaka that is more than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			"with avaka that is more than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("20000000000000000220"))), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 11), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("20000000000220"))), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 11), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("31000000000000000220")), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("31000000000220")), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					
					|  |  |  | @ -114,15 +113,15 @@ func (suite *evmBankKeeperTestSuite) TestGetBalance() { | 
		
	
		
			
				|  |  |  |  | 			suite.SetupTest() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			suite.FundAccountWithZgChain(suite.Addrs[0], tt.startingAmount) | 
		
	
		
			
				|  |  |  |  | 			coin := suite.EvmBankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], chaincfg.BaseDenom) | 
		
	
		
			
				|  |  |  |  | 			coin := suite.EvmBankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "neuron") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expAmount, coin.Amount) | 
		
	
		
			
				|  |  |  |  | 		}) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | func (suite *evmBankKeeperTestSuite) TestSendCoinsFromModuleToAccount() { | 
		
	
		
			
				|  |  |  |  | 	startingModuleCoins := sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin(chaincfg.BaseDenom, 200), | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin(chaincfg.DisplayDenom, 100), | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin("neuron", 200), | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin("ua0gi", 100), | 
		
	
		
			
				|  |  |  |  | 	) | 
		
	
		
			
				|  |  |  |  | 	tests := []struct { | 
		
	
		
			
				|  |  |  |  | 		name           string | 
		
	
	
		
			
				
					
					|  |  |  | @ -132,102 +131,102 @@ func (suite *evmBankKeeperTestSuite) TestSendCoinsFromModuleToAccount() { | 
		
	
		
			
				|  |  |  |  | 		hasErr         bool | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send more than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("12000000000000000010")))), | 
		
	
		
			
				|  |  |  |  | 			"send more than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("12000000000010")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 10), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 12), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 10), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 12), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send less than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 122)), | 
		
	
		
			
				|  |  |  |  | 			"send less than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 122)), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 122), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 0), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 122), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 0), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send an exact amount of a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("98000000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			"send an exact amount of ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("98000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 0), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 98), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 0), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 98), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send no neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 0), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 0), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 0), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 0), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if sending other coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough total neuron to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("100000000000000001000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("100000000001000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough a0gi to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("200000000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough ua0gi to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("200000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts receiver's neuron to a0gi if there's enough neuron after the transfer", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("99000000000200000000")))), | 
		
	
		
			
				|  |  |  |  | 			"converts receiver's neuron to ua0gi if there's enough neuron after the transfer", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("99000000000200")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 999_999_999_900_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 1), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 999_999_999_900), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 1), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 100000000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 101), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 100), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 101), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts all of receiver's neuron to a0gi even if somehow receiver has more than 1a0gi of neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("12000000000000000100")))), | 
		
	
		
			
				|  |  |  |  | 			"converts all of receiver's neuron to ua0gi even if somehow receiver has more than 1a0gi of neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("12000000000100")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 5_999_999_999_999_999_990), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 1), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 5_999_999_999_990), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 1), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 90), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 19), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 90), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 19), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"swap 1 a0gi for neuron if module account doesn't have enough neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("99000000000000001000")))), | 
		
	
		
			
				|  |  |  |  | 			"swap 1 ua0gi for neuron if module account doesn't have enough neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("99000000001000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 200), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 1), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 200), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 1), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 1200), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.DisplayDenom, 100), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 1200), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("ua0gi", 100), | 
		
	
		
			
				|  |  |  |  | 			), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
	
		
			
				
					
					|  |  |  | @ -240,8 +239,8 @@ func (suite *evmBankKeeperTestSuite) TestSendCoinsFromModuleToAccount() { | 
		
	
		
			
				|  |  |  |  | 			suite.FundAccountWithZgChain(suite.Addrs[0], tt.startingAccBal) | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(evmtypes.ModuleName, startingModuleCoins) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// fund our module with some a0gi to account for converting extra neuron back to a0gi
 | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10))) | 
		
	
		
			
				|  |  |  |  | 			// fund our module with some ua0gi to account for converting extra neuron back to ua0gi
 | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			err := suite.EvmBankKeeper.SendCoinsFromModuleToAccount(suite.Ctx, evmtypes.ModuleName, suite.Addrs[0], tt.sendCoins) | 
		
	
		
			
				|  |  |  |  | 			if tt.hasErr { | 
		
	
	
		
			
				
					
					|  |  |  | @ -251,23 +250,23 @@ func (suite *evmBankKeeperTestSuite) TestSendCoinsFromModuleToAccount() { | 
		
	
		
			
				|  |  |  |  | 				suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check a0gi
 | 
		
	
		
			
				|  |  |  |  | 			a0giSender := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expAccBal.AmountOf(chaincfg.DisplayDenom).Int64(), a0giSender.Amount.Int64()) | 
		
	
		
			
				|  |  |  |  | 			// check ua0gi
 | 
		
	
		
			
				|  |  |  |  | 			a0giSender := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expAccBal.AmountOf("ua0gi").Int64(), a0giSender.Amount.Int64()) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check neuron
 | 
		
	
		
			
				|  |  |  |  | 			actualNeuron := suite.Keeper.GetBalance(suite.Ctx, suite.Addrs[0]) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expAccBal.AmountOf(chaincfg.BaseDenom).Int64(), actualNeuron.Int64()) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expAccBal.AmountOf("neuron").Int64(), actualNeuron.Int64()) | 
		
	
		
			
				|  |  |  |  | 		}) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | func (suite *evmBankKeeperTestSuite) TestSendCoinsFromAccountToModule() { | 
		
	
		
			
				|  |  |  |  | 	startingAccCoins := sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin(chaincfg.BaseDenom, 200), | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin(chaincfg.DisplayDenom, 100), | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin("neuron", 200), | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin("ua0gi", 100), | 
		
	
		
			
				|  |  |  |  | 	) | 
		
	
		
			
				|  |  |  |  | 	startingModuleCoins := sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin(chaincfg.BaseDenom, 100_000_000_000), | 
		
	
		
			
				|  |  |  |  | 		sdk.NewInt64Coin("neuron", 100_000_000_000), | 
		
	
		
			
				|  |  |  |  | 	) | 
		
	
		
			
				|  |  |  |  | 	tests := []struct { | 
		
	
		
			
				|  |  |  |  | 		name           string | 
		
	
	
		
			
				
					
					|  |  |  | @ -277,36 +276,36 @@ func (suite *evmBankKeeperTestSuite) TestSendCoinsFromAccountToModule() { | 
		
	
		
			
				|  |  |  |  | 		hasErr         bool | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send more than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("12000000000000000010")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 190), sdk.NewInt64Coin(chaincfg.DisplayDenom, 88)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100_000_000_010), sdk.NewInt64Coin(chaincfg.DisplayDenom, 12)), | 
		
	
		
			
				|  |  |  |  | 			"send more than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("12000000000010")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 190), sdk.NewInt64Coin("ua0gi", 88)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100_000_000_010), sdk.NewInt64Coin("ua0gi", 12)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send less than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 122)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 78), sdk.NewInt64Coin(chaincfg.DisplayDenom, 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100_000_000_122), sdk.NewInt64Coin(chaincfg.DisplayDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			"send less than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 122)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 78), sdk.NewInt64Coin("ua0gi", 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100_000_000_122), sdk.NewInt64Coin("ua0gi", 0)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send an exact amount of a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("98000000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 200), sdk.NewInt64Coin(chaincfg.DisplayDenom, 2)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100_000_000_000), sdk.NewInt64Coin(chaincfg.DisplayDenom, 98)), | 
		
	
		
			
				|  |  |  |  | 			"send an exact amount of ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("98000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 200), sdk.NewInt64Coin("ua0gi", 2)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100_000_000_000), sdk.NewInt64Coin("ua0gi", 98)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"send no neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 200), sdk.NewInt64Coin(chaincfg.DisplayDenom, 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100_000_000_000), sdk.NewInt64Coin(chaincfg.DisplayDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 200), sdk.NewInt64Coin("ua0gi", 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100_000_000_000), sdk.NewInt64Coin("ua0gi", 0)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if sending other coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
	
		
			
				
					
					|  |  |  | @ -314,8 +313,8 @@ func (suite *evmBankKeeperTestSuite) TestSendCoinsFromAccountToModule() { | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if have dup coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{ | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 12_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 2_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 12_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 2_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
	
		
			
				
					
					|  |  |  | @ -323,30 +322,30 @@ func (suite *evmBankKeeperTestSuite) TestSendCoinsFromAccountToModule() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough total neuron to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("100000000001000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("100000000001000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough a0gi to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("200000000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough ua0gi to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("200000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts 1 a0gi to neuron if not enough neuron to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("99001000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 999_000_000_000_000_200), sdk.NewInt64Coin(chaincfg.DisplayDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 1_000_100_000_000_000), sdk.NewInt64Coin(chaincfg.DisplayDenom, 99)), | 
		
	
		
			
				|  |  |  |  | 			"converts 1 ua0gi to neuron if not enough neuron to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("99001000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 999_000_000_200), sdk.NewInt64Coin("ua0gi", 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 101_000_000_000), sdk.NewInt64Coin("ua0gi", 99)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts receiver's neuron to a0gi if there's enough neuron after the transfer", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 5_900_000_000_000_000_200)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100_000_000_000_000_000), sdk.NewInt64Coin(chaincfg.DisplayDenom, 94)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 900_000_100_000_000_200), sdk.NewInt64Coin(chaincfg.DisplayDenom, 5)), | 
		
	
		
			
				|  |  |  |  | 			"converts receiver's neuron to ua0gi if there's enough neuron after the transfer", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 5_900_000_000_200)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100_000_000_000), sdk.NewInt64Coin("ua0gi", 94)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 200), sdk.NewInt64Coin("ua0gi", 6)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | @ -366,17 +365,17 @@ func (suite *evmBankKeeperTestSuite) TestSendCoinsFromAccountToModule() { | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check sender balance
 | 
		
	
		
			
				|  |  |  |  | 			a0giSender := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expSenderCoins.AmountOf(chaincfg.DisplayDenom).Int64(), a0giSender.Amount.Int64()) | 
		
	
		
			
				|  |  |  |  | 			a0giSender := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expSenderCoins.AmountOf("ua0gi").Int64(), a0giSender.Amount.Int64()) | 
		
	
		
			
				|  |  |  |  | 			actualNeuron := suite.Keeper.GetBalance(suite.Ctx, suite.Addrs[0]) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expSenderCoins.AmountOf(chaincfg.BaseDenom).Int64(), actualNeuron.Int64()) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expSenderCoins.AmountOf("neuron").Int64(), actualNeuron.Int64()) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check module balance
 | 
		
	
		
			
				|  |  |  |  | 			moduleAddr := suite.AccountKeeper.GetModuleAddress(evmtypes.ModuleName) | 
		
	
		
			
				|  |  |  |  | 			a0giSender = suite.BankKeeper.GetBalance(suite.Ctx, moduleAddr, chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expModuleCoins.AmountOf(chaincfg.DisplayDenom).Int64(), a0giSender.Amount.Int64()) | 
		
	
		
			
				|  |  |  |  | 			a0giSender = suite.BankKeeper.GetBalance(suite.Ctx, moduleAddr, "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expModuleCoins.AmountOf("ua0gi").Int64(), a0giSender.Amount.Int64()) | 
		
	
		
			
				|  |  |  |  | 			actualNeuron = suite.Keeper.GetBalance(suite.Ctx, moduleAddr) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expModuleCoins.AmountOf(chaincfg.BaseDenom).Int64(), actualNeuron.Int64()) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expModuleCoins.AmountOf("neuron").Int64(), actualNeuron.Int64()) | 
		
	
		
			
				|  |  |  |  | 		}) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					
					|  |  |  | @ -391,24 +390,24 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 		neuronStart sdkmath.Int | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"burn more than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("12021000000002000000")))), | 
		
	
		
			
				|  |  |  |  | 			"burn more than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("12021000000002")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(88), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100_000_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("121000000002000000")), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewIntFromBigInt(makeBigIntByString("121000000002")), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"burn less than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 122)), | 
		
	
		
			
				|  |  |  |  | 			"burn less than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 122)), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(878), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(1000), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"burn an exact amount of a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("98000000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			"burn an exact amount of ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("98000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(2), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(10), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
	
		
			
				
					
					|  |  |  | @ -416,7 +415,7 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"burn no neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 0)), | 
		
	
		
			
				|  |  |  |  | 			startingA0gi, | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
	
		
			
				
					
					|  |  |  | @ -424,7 +423,7 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if burning other coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			startingA0gi, | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
	
		
			
				
					
					|  |  |  | @ -433,8 +432,8 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if have dup coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{ | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 12_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 2_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 12_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 2_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			}, | 
		
	
		
			
				|  |  |  |  | 			startingA0gi, | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
	
		
			
				
					
					|  |  |  | @ -443,7 +442,7 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if burn amount is negative", | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.Coin{Denom: chaincfg.BaseDenom, Amount: sdkmath.NewInt(-100)}}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.Coin{Denom: "neuron", Amount: sdkmath.NewInt(-100)}}, | 
		
	
		
			
				|  |  |  |  | 			startingA0gi, | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(50), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
	
		
			
				
					
					|  |  |  | @ -451,27 +450,27 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough neuron to cover burn", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("100999000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("100999000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(0), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(99_000_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(99_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(99_000_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(99_000_000_000), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough a0gi to cover burn", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("200000000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			"errors if not enough ua0gi to cover burn", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("200000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts 1 a0gi to neuron if not enough neuron to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("12021000000002000000")))), | 
		
	
		
			
				|  |  |  |  | 			"converts 1 ua0gi to neuron if not enough neuron to cover", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("12021000000002")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(87), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(980_000_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(980_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(1_000_000_002_000_000), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(1_000_000_002), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					
					|  |  |  | @ -479,8 +478,8 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 		suite.Run(tt.name, func() { | 
		
	
		
			
				|  |  |  |  | 			suite.SetupTest() | 
		
	
		
			
				|  |  |  |  | 			startingCoins := sdk.NewCoins( | 
		
	
		
			
				|  |  |  |  | 				sdk.NewCoin(chaincfg.DisplayDenom, startingA0gi), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewCoin(chaincfg.BaseDenom, tt.neuronStart), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewCoin("ua0gi", startingA0gi), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewCoin("neuron", tt.neuronStart), | 
		
	
		
			
				|  |  |  |  | 			) | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(evmtypes.ModuleName, startingCoins) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					
					|  |  |  | @ -492,8 +491,8 @@ func (suite *evmBankKeeperTestSuite) TestBurnCoins() { | 
		
	
		
			
				|  |  |  |  | 				suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check a0gi
 | 
		
	
		
			
				|  |  |  |  | 			a0giActual := suite.BankKeeper.GetBalance(suite.Ctx, suite.EvmModuleAddr, chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			// check ua0gi
 | 
		
	
		
			
				|  |  |  |  | 			a0giActual := suite.BankKeeper.GetBalance(suite.Ctx, suite.EvmModuleAddr, "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expA0gi, a0giActual.Amount) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check neuron
 | 
		
	
	
		
			
				
					
					|  |  |  | @ -506,30 +505,30 @@ func (suite *evmBankKeeperTestSuite) TestMintCoins() { | 
		
	
		
			
				|  |  |  |  | 	tests := []struct { | 
		
	
		
			
				|  |  |  |  | 		name        string | 
		
	
		
			
				|  |  |  |  | 		mintCoins   sdk.Coins | 
		
	
		
			
				|  |  |  |  | 		a0gi        sdkmath.Int | 
		
	
		
			
				|  |  |  |  | 		ua0gi       sdkmath.Int | 
		
	
		
			
				|  |  |  |  | 		neuron      sdkmath.Int | 
		
	
		
			
				|  |  |  |  | 		hasErr      bool | 
		
	
		
			
				|  |  |  |  | 		neuronStart sdkmath.Int | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"mint more than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("12021000000002000000")))), | 
		
	
		
			
				|  |  |  |  | 			"mint more than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("12021000000002")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(12), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(21_000_000_002_000_000), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(21_000_000_002), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"mint less than 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 901_000_000_001)), | 
		
	
		
			
				|  |  |  |  | 			"mint less than 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 901_000_000_001)), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(901_000_000_001), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"mint an exact amount of a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("123000000000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			"mint an exact amount of ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("123000000000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(123_000), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
	
		
			
				
					
					|  |  |  | @ -537,7 +536,7 @@ func (suite *evmBankKeeperTestSuite) TestMintCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"mint no neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 0)), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
	
		
			
				
					
					|  |  |  | @ -545,7 +544,7 @@ func (suite *evmBankKeeperTestSuite) TestMintCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if minting other coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 500), sdk.NewInt64Coin("busd", 1000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
	
		
			
				
					
					|  |  |  | @ -554,8 +553,8 @@ func (suite *evmBankKeeperTestSuite) TestMintCoins() { | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if have dup coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{ | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 12_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin(chaincfg.BaseDenom, 2_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 12_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 				sdk.NewInt64Coin("neuron", 2_000_000_000_000), | 
		
	
		
			
				|  |  |  |  | 			}, | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
	
		
			
				
					
					|  |  |  | @ -564,7 +563,7 @@ func (suite *evmBankKeeperTestSuite) TestMintCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"errors if mint amount is negative", | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.Coin{Denom: chaincfg.BaseDenom, Amount: sdkmath.NewInt(-100)}}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.Coin{Denom: "neuron", Amount: sdkmath.NewInt(-100)}}, | 
		
	
		
			
				|  |  |  |  | 			sdk.ZeroInt(), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(50), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
	
		
			
				
					
					|  |  |  | @ -572,27 +571,27 @@ func (suite *evmBankKeeperTestSuite) TestMintCoins() { | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"adds to existing neuron balance", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("12000000021000000002")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("12021000000002")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(12), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(21_000_000_102), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(100), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"convert neuron balance to a0gi if it exceeds 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("10000000999000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(11), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(1_001_200_000_001), | 
		
	
		
			
				|  |  |  |  | 			"convert neuron balance to ua0gi if it exceeds 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("10999000000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(12), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewInt(1_200_000_001), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewIntFromBigInt(makeBigIntByString("1000000002200000001")), | 
		
	
		
			
				|  |  |  |  | 			sdkmath.NewIntFromBigInt(makeBigIntByString("1002200000001")), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	for _, tt := range tests { | 
		
	
		
			
				|  |  |  |  | 		suite.Run(tt.name, func() { | 
		
	
		
			
				|  |  |  |  | 			suite.SetupTest() | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10))) | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(evmtypes.ModuleName, sdk.NewCoins(sdk.NewCoin(chaincfg.BaseDenom, tt.neuronStart))) | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10))) | 
		
	
		
			
				|  |  |  |  | 			suite.FundModuleAccountWithZgChain(evmtypes.ModuleName, sdk.NewCoins(sdk.NewCoin("neuron", tt.neuronStart))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			err := suite.EvmBankKeeper.MintCoins(suite.Ctx, evmtypes.ModuleName, tt.mintCoins) | 
		
	
		
			
				|  |  |  |  | 			if tt.hasErr { | 
		
	
	
		
			
				
					
					|  |  |  | @ -602,9 +601,9 @@ func (suite *evmBankKeeperTestSuite) TestMintCoins() { | 
		
	
		
			
				|  |  |  |  | 				suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check a0gi
 | 
		
	
		
			
				|  |  |  |  | 			a0giActual := suite.BankKeeper.GetBalance(suite.Ctx, suite.EvmModuleAddr, chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.a0gi, a0giActual.Amount) | 
		
	
		
			
				|  |  |  |  | 			// check ua0gi
 | 
		
	
		
			
				|  |  |  |  | 			a0giActual := suite.BankKeeper.GetBalance(suite.Ctx, suite.EvmModuleAddr, "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.ua0gi, a0giActual.Amount) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			// check neuron
 | 
		
	
		
			
				|  |  |  |  | 			neuronActual := suite.Keeper.GetBalance(suite.Ctx, suite.EvmModuleAddr) | 
		
	
	
		
			
				
					
					|  |  |  | @ -621,22 +620,22 @@ func (suite *evmBankKeeperTestSuite) TestValidateEvmCoins() { | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"valid coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 500)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 500)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"dup coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.NewInt64Coin(chaincfg.BaseDenom, 500), sdk.NewInt64Coin(chaincfg.BaseDenom, 500)}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.NewInt64Coin("neuron", 500), sdk.NewInt64Coin("neuron", 500)}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"not evm coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 500)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 500)), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"negative coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.Coin{Denom: chaincfg.BaseDenom, Amount: sdkmath.NewInt(-500)}}, | 
		
	
		
			
				|  |  |  |  | 			sdk.Coins{sdk.Coin{Denom: "neuron", Amount: sdkmath.NewInt(-500)}}, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | @ -661,21 +660,21 @@ func (suite *evmBankKeeperTestSuite) TestConvertOneA0giToNeuronIfNeeded() { | 
		
	
		
			
				|  |  |  |  | 		success       bool | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"not enough a0gi for conversion", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100)), | 
		
	
		
			
				|  |  |  |  | 			"not enough ua0gi for conversion", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts 1 a0gi to neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10), sdk.NewInt64Coin(chaincfg.BaseDenom, 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 9), sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("1000000000000000100")))), | 
		
	
		
			
				|  |  |  |  | 			"converts 1 ua0gi to neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10), sdk.NewInt64Coin("neuron", 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 9), sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("1000000000100")))), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"conversion not needed", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10), sdk.NewInt64Coin(chaincfg.BaseDenom, 200)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10), sdk.NewInt64Coin(chaincfg.BaseDenom, 200)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10), sdk.NewInt64Coin("neuron", 200)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10), sdk.NewInt64Coin("neuron", 200)), | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | @ -684,11 +683,11 @@ func (suite *evmBankKeeperTestSuite) TestConvertOneA0giToNeuronIfNeeded() { | 
		
	
		
			
				|  |  |  |  | 			suite.SetupTest() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			suite.FundAccountWithZgChain(suite.Addrs[0], tt.startingCoins) | 
		
	
		
			
				|  |  |  |  | 			err := suite.EvmBankKeeper.ConvertOneA0giToNeuronIfNeeded(suite.Ctx, suite.Addrs[0], neuronNeeded) | 
		
	
		
			
				|  |  |  |  | 			moduleZgChain := suite.BankKeeper.GetBalance(suite.Ctx, suite.AccountKeeper.GetModuleAddress(types.ModuleName), chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			err := suite.EvmBankKeeper.ConvertOneUa0giToNeuronIfNeeded(suite.Ctx, suite.Addrs[0], neuronNeeded) | 
		
	
		
			
				|  |  |  |  | 			moduleZgChain := suite.BankKeeper.GetBalance(suite.Ctx, suite.AccountKeeper.GetModuleAddress(types.ModuleName), "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			if tt.success { | 
		
	
		
			
				|  |  |  |  | 				suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 				if tt.startingCoins.AmountOf(chaincfg.BaseDenom).LT(neuronNeeded) { | 
		
	
		
			
				|  |  |  |  | 				if tt.startingCoins.AmountOf("neuron").LT(neuronNeeded) { | 
		
	
		
			
				|  |  |  |  | 					suite.Require().Equal(sdk.OneInt(), moduleZgChain.Amount) | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | 			} else { | 
		
	
	
		
			
				
					
					|  |  |  | @ -697,9 +696,9 @@ func (suite *evmBankKeeperTestSuite) TestConvertOneA0giToNeuronIfNeeded() { | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			neuron := suite.Keeper.GetBalance(suite.Ctx, suite.Addrs[0]) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf(chaincfg.BaseDenom), neuron) | 
		
	
		
			
				|  |  |  |  | 			a0gi := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf(chaincfg.DisplayDenom), a0gi.Amount) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf("neuron"), neuron) | 
		
	
		
			
				|  |  |  |  | 			ua0gi := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf("ua0gi"), ua0gi.Amount) | 
		
	
		
			
				|  |  |  |  | 		}) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					
					|  |  |  | @ -710,34 +709,34 @@ func (suite *evmBankKeeperTestSuite) TestConvertNeuronToA0gi() { | 
		
	
		
			
				|  |  |  |  | 		expectedCoins sdk.Coins | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"not enough a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 100), sdk.NewInt64Coin(chaincfg.DisplayDenom, 0)), | 
		
	
		
			
				|  |  |  |  | 			"not enough ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 100), sdk.NewInt64Coin("ua0gi", 0)), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts neuron for 1 a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10), sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("1000000000003000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 11), sdk.NewInt64Coin(chaincfg.BaseDenom, 3_000_000)), | 
		
	
		
			
				|  |  |  |  | 			"converts neuron for 1 ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10), sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("1000000000003")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 11), sdk.NewInt64Coin("neuron", 3)), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"converts more than 1 a0gi of neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10), sdk.NewCoin(chaincfg.BaseDenom, sdk.NewIntFromBigInt(makeBigIntByString("8000000000123000000")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 18), sdk.NewInt64Coin(chaincfg.BaseDenom, 123_000_000)), | 
		
	
		
			
				|  |  |  |  | 			"converts more than 1 ua0gi of neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10), sdk.NewCoin("neuron", sdk.NewIntFromBigInt(makeBigIntByString("8000000000123")))), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 18), sdk.NewInt64Coin("neuron", 123)), | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	for _, tt := range tests { | 
		
	
		
			
				|  |  |  |  | 		suite.Run(tt.name, func() { | 
		
	
		
			
				|  |  |  |  | 			suite.SetupTest() | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 			err := suite.App.FundModuleAccount(suite.Ctx, types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 10))) | 
		
	
		
			
				|  |  |  |  | 			err := suite.App.FundModuleAccount(suite.Ctx, types.ModuleName, sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 10))) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 			suite.FundAccountWithZgChain(suite.Addrs[0], tt.startingCoins) | 
		
	
		
			
				|  |  |  |  | 			err = suite.EvmBankKeeper.ConvertNeuronToA0gi(suite.Ctx, suite.Addrs[0]) | 
		
	
		
			
				|  |  |  |  | 			err = suite.EvmBankKeeper.ConvertNeuronToUa0gi(suite.Ctx, suite.Addrs[0]) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 			neuron := suite.Keeper.GetBalance(suite.Ctx, suite.Addrs[0]) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf(chaincfg.BaseDenom), neuron) | 
		
	
		
			
				|  |  |  |  | 			a0gi := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], chaincfg.DisplayDenom) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf(chaincfg.DisplayDenom), a0gi.Amount) | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf("neuron"), neuron) | 
		
	
		
			
				|  |  |  |  | 			ua0gi := suite.BankKeeper.GetBalance(suite.Ctx, suite.Addrs[0], "ua0gi") | 
		
	
		
			
				|  |  |  |  | 			suite.Require().Equal(tt.expectedCoins.AmountOf("ua0gi"), ua0gi.Amount) | 
		
	
		
			
				|  |  |  |  | 		}) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					
					|  |  |  | @ -750,7 +749,7 @@ func (suite *evmBankKeeperTestSuite) TestSplitNeuronCoins() { | 
		
	
		
			
				|  |  |  |  | 	}{ | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"invalid coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 500)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 500)), | 
		
	
		
			
				|  |  |  |  | 			nil, | 
		
	
		
			
				|  |  |  |  | 			true, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
	
		
			
				
					
					|  |  |  | @ -761,33 +760,33 @@ func (suite *evmBankKeeperTestSuite) TestSplitNeuronCoins() { | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"a0gi & neuron coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 8_000_000_000_000_000_123)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 8), sdk.NewInt64Coin(chaincfg.BaseDenom, 123)), | 
		
	
		
			
				|  |  |  |  | 			"ua0gi & neuron coins", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 8_000_000_000_123)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 8), sdk.NewInt64Coin("neuron", 123)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"only neuron", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 10_123)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 10_123)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 10_123)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 10_123)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			"only a0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.BaseDenom, 5_000_000_000_000_000_000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin(chaincfg.DisplayDenom, 5)), | 
		
	
		
			
				|  |  |  |  | 			"only ua0gi", | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("neuron", 5_000_000_000_000)), | 
		
	
		
			
				|  |  |  |  | 			sdk.NewCoins(sdk.NewInt64Coin("ua0gi", 5)), | 
		
	
		
			
				|  |  |  |  | 			false, | 
		
	
		
			
				|  |  |  |  | 		}, | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	for _, tt := range tests { | 
		
	
		
			
				|  |  |  |  | 		suite.Run(tt.name, func() { | 
		
	
		
			
				|  |  |  |  | 			a0gi, neuron, err := keeper.SplitNeuronCoins(tt.coins) | 
		
	
		
			
				|  |  |  |  | 			ua0gi, neuron, err := keeper.SplitNeuronCoins(tt.coins) | 
		
	
		
			
				|  |  |  |  | 			if tt.shouldErr { | 
		
	
		
			
				|  |  |  |  | 				suite.Require().Error(err) | 
		
	
		
			
				|  |  |  |  | 			} else { | 
		
	
		
			
				|  |  |  |  | 				suite.Require().NoError(err) | 
		
	
		
			
				|  |  |  |  | 				suite.Require().Equal(tt.expectedCoins.AmountOf(chaincfg.DisplayDenom), a0gi.Amount) | 
		
	
		
			
				|  |  |  |  | 				suite.Require().Equal(tt.expectedCoins.AmountOf(chaincfg.BaseDenom), neuron) | 
		
	
		
			
				|  |  |  |  | 				suite.Require().Equal(tt.expectedCoins.AmountOf("ua0gi"), ua0gi.Amount) | 
		
	
		
			
				|  |  |  |  | 				suite.Require().Equal(tt.expectedCoins.AmountOf("neuron"), neuron) | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 		}) | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
	
		
			
				
					
					|  |  |  | 
 |