mirror of
https://github.com/0glabs/0g-chain.git
synced 2025-03-03 16:25:28 +00:00
Update e2e_convert_cosmos_coins_test.go
This commit is contained in:
parent
1f9de5eaa9
commit
2a8bc0f4fe
@ -55,23 +55,40 @@ func setupConvertToCoinTest(
|
|||||||
sdk.NewInt64Coin(denom, initialCosmosCoinConversionDenomFunds), // conversion-enabled cosmos coin
|
sdk.NewInt64Coin(denom, initialCosmosCoinConversionDenomFunds), // conversion-enabled cosmos coin
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Create and fund the test account
|
||||||
user = suite.ZgChain.NewFundedAccount(accountName, initialFunds)
|
user = suite.ZgChain.NewFundedAccount(accountName, initialFunds)
|
||||||
|
suite.Require().NotNil(user, "failed to create funded test account")
|
||||||
|
|
||||||
return denom, initialFunds, user
|
return denom, initialFunds, user
|
||||||
}
|
}
|
||||||
|
|
||||||
// amount must be less than initial funds (initialCosmosCoinConversionDenomFunds)
|
// setupAccountWithCosmosCoinERC20Balance creates a test account with both cosmos coins and ERC20 tokens.
|
||||||
|
// It first sets up an account with cosmos coins and then converts a specified amount to ERC20 tokens.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// - accountName: Name of the test account to be created
|
||||||
|
// - amount: Amount of coins to convert to ERC20 (must be less than initialCosmosCoinConversionDenomFunds)
|
||||||
|
//
|
||||||
|
// Returns:
|
||||||
|
// - user: The created and funded test account
|
||||||
|
// - contractAddress: The deployed ERC20 contract address
|
||||||
|
// - denom: The cosmos denom used for testing
|
||||||
|
// - sdkBalance: The remaining SDK coin balance after conversion
|
||||||
func (suite *IntegrationTestSuite) setupAccountWithCosmosCoinERC20Balance(
|
func (suite *IntegrationTestSuite) setupAccountWithCosmosCoinERC20Balance(
|
||||||
accountName string, amount int64,
|
accountName string, amount int64,
|
||||||
) (user *testutil.SigningAccount, contractAddress *evmutiltypes.InternalEVMAddress, denom string, sdkBalance sdk.Coins) {
|
) (user *testutil.SigningAccount, contractAddress *evmutiltypes.InternalEVMAddress, denom string, sdkBalance sdk.Coins) {
|
||||||
if amount > initialCosmosCoinConversionDenomFunds {
|
if amount > initialCosmosCoinConversionDenomFunds {
|
||||||
panic(fmt.Sprintf("test erc20 amount must be less than %d", initialCosmosCoinConversionDenomFunds))
|
suite.FailNowf("Invalid test setup",
|
||||||
|
"test erc20 amount (%d) must be less than %d",
|
||||||
|
amount,
|
||||||
|
initialCosmosCoinConversionDenomFunds,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
denom, sdkBalance, user = setupConvertToCoinTest(suite, accountName)
|
denom, sdkBalance, user = setupConvertToCoinTest(suite, accountName)
|
||||||
convertAmount := sdk.NewInt64Coin(denom, amount)
|
convertAmount := sdk.NewInt64Coin(denom, amount)
|
||||||
|
|
||||||
// setup user to have erc20 balance
|
// Convert cosmos coins to ERC20
|
||||||
msg := evmutiltypes.NewMsgConvertCosmosCoinToERC20(
|
msg := evmutiltypes.NewMsgConvertCosmosCoinToERC20(
|
||||||
user.SdkAddress.String(),
|
user.SdkAddress.String(),
|
||||||
user.EvmAddress.Hex(),
|
user.EvmAddress.Hex(),
|
||||||
@ -84,20 +101,22 @@ func (suite *IntegrationTestSuite) setupAccountWithCosmosCoinERC20Balance(
|
|||||||
Data: "converting sdk coin to erc20",
|
Data: "converting sdk coin to erc20",
|
||||||
}
|
}
|
||||||
res := user.SignAndBroadcastZgChainTx(tx)
|
res := user.SignAndBroadcastZgChainTx(tx)
|
||||||
suite.NoError(res.Err)
|
suite.Require().NoError(res.Err, "failed to convert cosmos coins to ERC20")
|
||||||
|
|
||||||
// adjust sdk balance
|
// Adjust SDK balance after conversion
|
||||||
sdkBalance = sdkBalance.Sub(convertAmount)
|
sdkBalance = sdkBalance.Sub(convertAmount)
|
||||||
|
|
||||||
// query for the deployed contract
|
// Query for the deployed contract
|
||||||
deployedContracts, err := suite.ZgChain.Grpc.Query.Evmutil.DeployedCosmosCoinContracts(
|
deployedContracts, err := suite.ZgChain.Grpc.Query.Evmutil.DeployedCosmosCoinContracts(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
&evmutiltypes.QueryDeployedCosmosCoinContractsRequest{CosmosDenoms: []string{denom}},
|
&evmutiltypes.QueryDeployedCosmosCoinContractsRequest{CosmosDenoms: []string{denom}},
|
||||||
)
|
)
|
||||||
suite.NoError(err)
|
suite.Require().NoError(err, "failed to query deployed contracts")
|
||||||
suite.Len(deployedContracts.DeployedCosmosCoinContracts, 1)
|
suite.Require().Len(deployedContracts.DeployedCosmosCoinContracts, 1,
|
||||||
|
"expected exactly one deployed contract for denom %s", denom)
|
||||||
|
|
||||||
contractAddress = deployedContracts.DeployedCosmosCoinContracts[0].Address
|
contractAddress = deployedContracts.DeployedCosmosCoinContracts[0].Address
|
||||||
|
suite.Require().NotNil(contractAddress, "contract address cannot be nil")
|
||||||
|
|
||||||
return user, contractAddress, denom, sdkBalance
|
return user, contractAddress, denom, sdkBalance
|
||||||
}
|
}
|
||||||
@ -426,13 +445,13 @@ func (suite *IntegrationTestSuite) TestConvertCosmosCoins_ERC20Magic() {
|
|||||||
bob.SdkAddress.String(),
|
bob.SdkAddress.String(),
|
||||||
sdk.NewInt64Coin(denom, amount.Int64()),
|
sdk.NewInt64Coin(denom, amount.Int64()),
|
||||||
)
|
)
|
||||||
convertTx := util.ZgChainMsgRequest{
|
finalConvertTx := util.ZgChainMsgRequest{
|
||||||
Msgs: []sdk.Msg{&convertMsg},
|
Msgs: []sdk.Msg{&convertMsg},
|
||||||
GasLimit: 2e5,
|
GasLimit: 2e5,
|
||||||
FeeAmount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(200)),
|
FeeAmount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(200)),
|
||||||
Data: "bob converts his new erc20 to an sdk.Coin",
|
Data: "bob converts his new erc20 to an sdk.Coin",
|
||||||
}
|
}
|
||||||
convertRes := bob.SignAndBroadcastZgChainTx(convertTx)
|
convertRes := bob.SignAndBroadcastZgChainTx(finalConvertTx)
|
||||||
suite.NoError(convertRes.Err)
|
suite.NoError(convertRes.Err)
|
||||||
|
|
||||||
// bob should have no more erc20 balance
|
// bob should have no more erc20 balance
|
||||||
@ -452,6 +471,18 @@ func (suite *IntegrationTestSuite) TestConvertCosmosCoins_ERC20Magic() {
|
|||||||
alice.SdkAddress.String(),
|
alice.SdkAddress.String(),
|
||||||
sdk.NewInt64Coin(denom, amount.Int64()),
|
sdk.NewInt64Coin(denom, amount.Int64()),
|
||||||
)
|
)
|
||||||
convertRes = alice.SignAndBroadcastZgChainTx(convertTx)
|
finalConvertTx = util.ZgChainMsgRequest{
|
||||||
|
Msgs: []sdk.Msg{&convertMsg},
|
||||||
|
GasLimit: 2e5,
|
||||||
|
FeeAmount: sdk.NewCoins(chaincfg.MakeCoinForGasDenom(200)),
|
||||||
|
Data: "alice converts remaining erc20 back to sdk.Coin",
|
||||||
|
}
|
||||||
|
convertRes = alice.SignAndBroadcastZgChainTx(finalConvertTx)
|
||||||
suite.NoError(convertRes.Err)
|
suite.NoError(convertRes.Err)
|
||||||
|
|
||||||
|
// verify final balances
|
||||||
|
erc20Balance = suite.ZgChain.GetErc20Balance(contractAddress.Address, alice.EvmAddress)
|
||||||
|
suite.BigIntsEqual(big.NewInt(0), erc20Balance, "expected alice to have no remaining erc20 balance")
|
||||||
|
balance = suite.ZgChain.QuerySdkForBalances(alice.SdkAddress).AmountOf(denom)
|
||||||
|
suite.Equal(sdk.NewIntFromBigInt(amount), balance)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user