Skip to content

Commit

Permalink
add base
Browse files Browse the repository at this point in the history
  • Loading branch information
ThanhNhann committed Dec 6, 2024
1 parent ed0bc25 commit a2bcd6c
Show file tree
Hide file tree
Showing 2 changed files with 208 additions and 1 deletion.
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,9 @@ e2e-test-rollapp-state-update-fail-evm: clean-e2e
e2e-test-genesis-bridge-unbond-evm: clean-e2e
cd tests && go test -timeout=45m -race -v -run TestGenesisTransferBridgeUnBond_EVM

e2e-test-genesis-bridge-kick-proposer-evm: clean-e2e
cd tests && go test -timeout=45m -race -v -run TestGenesisTransferBridgeKickProposer_EVM

# Executes IBC tests via rollup-e2e-testing
e2e-test-ibc-success-wasm: clean-e2e
cd tests && go test -timeout=45m -race -v -run TestIBCTransferSuccess_Wasm .
Expand Down
206 changes: 205 additions & 1 deletion tests/genesis_bridge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"strconv"
"testing"
"cosmossdk.io/math"

transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -1896,4 +1897,207 @@ func TestGenesisTransferBridgeUnBond_Wasm(t *testing.T) {

// // Minus 0.1% of transfer amount for bridge fee
// testutil.AssertBalance(t, ctx, dymension, dymensionUserAddr, rollappIBCDenom, transferAmount.Sub(bridgingFee))
}
}

func TestGenesisTransferBridgeKickProposer_EVM(t *testing.T) {
if testing.Short() {
t.Skip()
}

ctx := context.Background()

// setup config for rollapp 1
settlement_layer_rollapp1 := "dymension"
settlement_node_address := fmt.Sprintf("http://dymension_100-1-val-0-%s:26657", t.Name())
rollapp1_id := "rollappevm_1234-1"
gas_price_rollapp1 := "0adym"
maxIdleTime1 := "3s"
maxProofTime := "500ms"
configFileOverrides := overridesDymintToml(settlement_layer_rollapp1, settlement_node_address, rollapp1_id, gas_price_rollapp1, maxIdleTime1, maxProofTime, "20s", true)

modifyHubGenesisKV := append(
dymensionGenesisKV,
cosmos.GenesisKV{
Key: "app_state.sequencer.params.kick_threshold",
Value: map[string]interface{}{
"denom": "adym",
"amount": "99999999999999999999",
},
},
cosmos.GenesisKV{
Key: "app_state.rollapp.params.liveness_slash_blocks",
Value: "1",
},
cosmos.GenesisKV{
Key: "app_state.rollapp.params.liveness_slash_interval",
Value: "1",
},
)

modifyRAGenesisKV := append(
rollappEVMGenesisKV,
cosmos.GenesisKV{
Key: "app_state.rollappparams.params.da",
Value: "grpc",
},
)

// Create chain factory with dymension
numHubVals := 1
numHubFullNodes := 1
numRollAppVals := 1
numRollAppFn := 1

cf := test.NewBuiltinChainFactory(zaptest.NewLogger(t), []*test.ChainSpec{
{
Name: "rollapp1",
ChainConfig: ibc.ChainConfig{
Type: "rollapp-dym",
Name: "rollapp-temp",
ChainID: "rollappevm_1234-1",
Images: []ibc.DockerImage{rollappEVMImage},
Bin: "rollappd",
Bech32Prefix: "ethm",
Denom: "urax",
CoinType: "60",
GasPrices: "0.0urax",
GasAdjustment: 1.1,
TrustingPeriod: "112h",
EncodingConfig: encodingConfig(),
NoHostMount: false,
ModifyGenesis: modifyRollappEVMGenesis(modifyRAGenesisKV),
ConfigFileOverrides: configFileOverrides,
},
NumValidators: &numRollAppVals,
NumFullNodes: &numRollAppFn,
},
{
Name: "dymension-hub",
ChainConfig: ibc.ChainConfig{
Type: "hub-dym",
Name: "dymension",
ChainID: "dymension_100-1",
Images: []ibc.DockerImage{dymensionImage},
Bin: "dymd",
Bech32Prefix: "dym",
Denom: "adym",
CoinType: "60",
GasPrices: "0.0adym",
EncodingConfig: encodingConfig(),
GasAdjustment: 1.1,
TrustingPeriod: "112h",
NoHostMount: false,
ModifyGenesis: modifyDymensionGenesis(modifyHubGenesisKV),
ConfigFileOverrides: nil,
},
NumValidators: &numHubVals,
NumFullNodes: &numHubFullNodes,
},
})

// Get chains from the chain factory
chains, err := cf.Chains(t.Name())
require.NoError(t, err)

rollapp1 := chains[0].(*dym_rollapp.DymRollApp)
dymension := chains[1].(*dym_hub.DymHub)

// Relayer Factory
client, network := test.DockerSetup(t)
StartDA(ctx, t, client, network)
// relayer for rollapp 1
r := test.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t),
relayer.CustomDockerImage(RelayerMainRepo, relayerVersion, "100:1000"), relayer.ImagePull(pullRelayerImage),
).Build(t, client, "relayer", network)

ic := test.NewSetup().
AddRollUp(dymension, rollapp1).
AddRelayer(r, "relayer").
AddLink(test.InterchainLink{
Chain1: dymension,
Chain2: rollapp1,
Relayer: r,
Path: ibcPath,
})

rep := testreporter.NewNopReporter()
eRep := rep.RelayerExecReporter(t)

err = ic.Build(ctx, eRep, test.InterchainBuildOptions{
TestName: t.Name(),
Client: client,
NetworkID: network,
SkipPathCreation: true,
}, nil, "", nil, false, 1179360, true)
require.NoError(t, err)

// Check IBC Transfer before switch
CreateChannel(ctx, t, r, eRep, dymension.CosmosChain, rollapp1.CosmosChain, ibcPath)

// Create some user accounts on both chains
users := test.GetAndFundTestUsers(t, ctx, t.Name(), walletAmount, dymension, rollapp1)

// Get our Bech32 encoded user addresses
dymensionUser, _ := users[0], users[1]
dymensionUserAddr := dymensionUser.FormattedAddress()

err = testutil.WaitForBlocks(ctx, 10, dymension, rollapp1)
require.NoError(t, err)

cmd := append([]string{rollapp1.FullNodes[0].Chain.Config().Bin}, "dymint", "show-sequencer", "--home", rollapp1.FullNodes[0].HomeDir())
pub1, _, err := rollapp1.FullNodes[0].Exec(ctx, cmd, nil)
require.NoError(t, err)

err = dymension.FullNodes[0].CreateKeyWithKeyDir(ctx, "sequencer", rollapp1.FullNodes[0].HomeDir())
require.NoError(t, err)

sequencer, err := dymension.AccountKeyBech32WithKeyDir(ctx, "sequencer", rollapp1.FullNodes[0].HomeDir())
require.NoError(t, err)

fund := ibc.WalletData{
Address: sequencer,
Denom: dymension.Config().Denom,
Amount: math.NewInt(10_000_000_000_000).MulRaw(100_000_000),
}
err = dymension.SendFunds(ctx, "faucet", fund)
require.NoError(t, err)

resp0, err := dymension.QueryShowSequencerByRollapp(ctx, rollapp1.Config().ChainID)
require.NoError(t, err)
require.Equal(t, len(resp0.Sequencers), 1, "should have 1 sequences")

// Wait a few blocks for relayer to start and for user accounts to be created
err = testutil.WaitForBlocks(ctx, 5, dymension)
require.NoError(t, err)

command := []string{"sequencer", "create-sequencer", string(pub1), rollapp1.Config().ChainID, "100000000000000000000adym", rollapp1.GetSequencerKeyDir() + "/metadata_sequencer1.json",
"--broadcast-mode", "async", "--keyring-dir", rollapp1.FullNodes[0].HomeDir() + "/sequencer_keys"}

_, err = dymension.FullNodes[0].ExecTx(ctx, "sequencer", command...)
require.NoError(t, err)

resp, err := dymension.QueryShowSequencerByRollapp(ctx, rollapp1.Config().ChainID)
require.NoError(t, err)
require.Equal(t, len(resp.Sequencers), 2, "should have 2 sequences")

nextProposer, err := dymension.GetNode().GetNextProposerByRollapp(ctx, rollapp1.Config().ChainID, dymensionUserAddr)
require.NoError(t, err)
require.Equal(t, "sentinel", nextProposer.NextProposerAddr)

currentProposer, err := dymension.GetNode().GetProposerByRollapp(ctx, rollapp1.Config().ChainID, dymensionUserAddr)
require.NoError(t, err)
require.Equal(t, resp0.Sequencers[0].Address, currentProposer.ProposerAddr)

// stop proposer => slashing then
err = rollapp1.Validators[0].StopContainer(ctx)
require.NoError(t, err)

testutil.WaitForBlocks(ctx, 2, dymension)

err = rollapp1.Validators[0].StartContainer(ctx)
require.NoError(t, err)

// kick current proposer
err = dymension.FullNodes[0].KickProposer(ctx, "sequencer", rollapp1.FullNodes[0].HomeDir())
require.Error(t, err)
}

0 comments on commit a2bcd6c

Please sign in to comment.