{"id":13563124,"url":"https://github.com/dymensionxyz/rollapp-evm","last_synced_at":"2026-03-05T15:33:05.430Z","repository":{"id":180677112,"uuid":"664637629","full_name":"dymensionxyz/rollapp-evm","owner":"dymensionxyz","description":"EVM DRS - EVM Dymension Rollapp Standard","archived":false,"fork":false,"pushed_at":"2026-01-29T13:08:48.000Z","size":40879,"stargazers_count":43,"open_issues_count":25,"forks_count":33,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-01-30T03:11:08.427Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dymensionxyz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-10T12:20:24.000Z","updated_at":"2026-01-12T15:01:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"ef535ca7-1ed8-44a7-9271-3a7ef99b7266","html_url":"https://github.com/dymensionxyz/rollapp-evm","commit_stats":null,"previous_names":["dymensionxyz/rollapp-evm"],"tags_count":77,"template":false,"template_full_name":"dymensionxyz/rollapp","purl":"pkg:github/dymensionxyz/rollapp-evm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dymensionxyz%2Frollapp-evm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dymensionxyz%2Frollapp-evm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dymensionxyz%2Frollapp-evm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dymensionxyz%2Frollapp-evm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dymensionxyz","download_url":"https://codeload.github.com/dymensionxyz/rollapp-evm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dymensionxyz%2Frollapp-evm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30133271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T14:41:47.141Z","status":"ssl_error","status_checked_at":"2026-03-05T14:41:21.567Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T13:01:15.402Z","updated_at":"2026-03-05T15:33:05.408Z","avatar_url":"https://github.com/dymensionxyz.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Dymension EVM Rollapp\n\n## Rollapp-evm - A template EVM RollApp chain\n\nThis repository hosts `rollapp-evm`, a template implementation of a dymension rollapp with `EVM` execution layer.\n\n`rollapp-evm` is an example of a working RollApp using `dymension-RDK` and `dymint`.\n\nIt uses Cosmos-SDK's [simapp](https://github.com/cosmos/cosmos-sdk/tree/main/simapp) as a reference, but with the following changes:\n\n- minimal app setup\n- wired with EVM and ERC20 modules by [Evmos](https://github.com/evmos/evmos)\n- wired IBC for [ICS 20 Fungible Token Transfers](https://github.com/cosmos/ibc/tree/main/spec/app/ics-020-fungible-token-transfer)\n- Uses `dymint` for block sequencing and replacing `tendermint`\n- Uses modules from `dymension-RDK` to sync with `dymint` and provide RollApp custom logic\n\n## Overview\n\n**Note**: Requires [Go 1.22.1](https://go.dev/dl/). Requires [Dasel](https://formulae.brew.sh/formula/dasel) and [JQ](https://formulae.brew.sh/formula/jq).\n\n## Installing / Getting started\n\nBuild and install the ```rollapp-evm``` binary:\n\n```shell\nexport BECH32_PREFIX=ethm\nmake install BECH32_PREFIX=$BECH32_PREFIX\nexport EXECUTABLE=\"rollapp-evm\"\n```\n\n### Initial configuration\n\nexport the following variables:\n\n```shell\nexport DA_CLIENT=\"mock\" # choose DA client: mock(local db), celestia, loadnetwork, sui, aptos, walrus\n\n# For Sui DA, one more env variable is needed: Sui wallet mnemonic.\n# export SUI_MNEMONIC=\"$MNEMONIC\"\n\n# For Aptos DA, one more env variable is needed: hex-encoded Aptos wallet private key.\n# export APT_PRIVATE_KEY=\"$PRIVATE_KEY\"\n\n# For Celestia DA, one more env variable is needed:\n#export CELESTIA_NETWORK=\"mocha\" # for a testnet RollApp use \"mocha\", for mainnet - \"celestia\"\n#export CELESTIA_HOME_DIR=\"${HOME}/.da\" # Celestia light client home directory\n\nexport ROLLAPP_CHAIN_ID=\"rollappevm_1234-1\"\nexport KEY_NAME_ROLLAPP=\"rol-user\"\nexport BASE_DENOM=\"arax\"\nexport DENOM=$(echo \"$BASE_DENOM\" | sed 's/^.//')\nexport MONIKER=\"$ROLLAPP_CHAIN_ID-sequencer\"\nexport ROLLAPP_HOME_DIR=\"$HOME/.rollapp_evm\"\nexport ROLLAPP_SETTLEMENT_INIT_DIR_PATH=\"${ROLLAPP_HOME_DIR}/init\"\nexport SKIP_EVM_BASE_FEE=true # optional, disables rollapp fees\n\n$EXECUTABLE config keyring-backend test\n\n# (if running hub too)\nexport SETTLEMENT_LAYER=\"mock\" # when running a local hub or a public network use \"dymension\"\nexport HUB_KEY_WITH_FUNDS=\"hub-user\"\nexport HUB_RPC_ENDPOINT=\"localhost\"\nexport HUB_RPC_PORT=\"36657\" # default: 36657\nexport HUB_RPC_URL=\"http://${HUB_RPC_ENDPOINT}:${HUB_RPC_PORT}\"\nexport HUB_REST_URL=\"http://localhost:1318\" # required for relayer\nexport HUB_CHAIN_ID=\"dymension_100-1\"\n\ndymd config chain-id \"${HUB_CHAIN_ID}\"\ndymd config node \"${HUB_RPC_URL}\"\ndymd config keyring-backend test\n```\n\nAnd initialize the rollapp:\n\n```shell\nsh scripts/init.sh\n```\n\n### Run rollapp\n\n```shell\n$EXECUTABLE start\n```\n\nYou should have a running local rollapp!\n\n## Run a settlement node too\n\n### Run local dymension hub node\n\nFollow the instructions on [Dymension Hub docs](https://docs.dymension.xyz/develop/get-started/run-base-layers) to run local dymension hub node\n\nall scripts are adjusted to use local hub node that's hosted on the default port `localhost:36657`.\n\nconfiguration with a remote hub node is also supported. Configure env vars above appropriately (RPC_URL)\n\n### Create sequencer keys\n\ncreate sequencer key using `dymd`\n\n```shell\ndymd keys add sequencer --keyring-dir ~/.rollapp_evm/sequencer_keys --keyring-backend test\nSEQUENCER_ADDR=`dymd keys show sequencer --address --keyring-backend test --keyring-dir ~/.rollapp_evm/sequencer_keys`\n```\n\nfund the sequencer account (if you're using a remote hub node, you must fund the sequencer account or you must have an account with enough funds in your keyring)\n\n```shell\n# retrieve the minimal bond amount from hub sequencer params\n# you have to account for gas fees so it should the final value should be increased\nBOND_AMOUNT=\"$(dymd q rollapp params -o json | jq -r '.params.min_sequencer_bond_global.amount')$(dymd q rollapp params -o json | jq -r '.params.min_sequencer_bond_global.denom')\"\n\n# Extract the numeric part\nNUMERIC_PART=$(echo $BOND_AMOUNT | sed 's/adym//')\n\n# Add 100000000000000000000 for fees\nNEW_NUMERIC_PART=$(echo \"$NUMERIC_PART + 100000000000000000000\" | bc)\n\n# Append 'adym' back\nTRANSFER_AMOUNT=\"${NEW_NUMERIC_PART}adym\"\n\ndymd tx bank send $HUB_KEY_WITH_FUNDS $SEQUENCER_ADDR ${TRANSFER_AMOUNT} --keyring-backend test --broadcast-mode sync --fees 1dym -y --node ${HUB_RPC_URL}\n```\n\n### Register rollapp on settlement\n\n```shell\nexport HUB_PERMISSIONED_KEY=\"hub-user\"\n\nsh scripts/settlement/register_rollapp_to_hub.sh\n```\n\n### Register sequencer for rollapp on settlement\n\n```shell\nsh scripts/settlement/register_sequencer_to_hub.sh\n```\n\n### Configure the rollapp\n\nModify `dymint.toml` in the chain directory (`~/.rollapp_evm/config`)\n\n```shell\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/dymint.toml \"settlement_layer\" -v \"dymension\"\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/dymint.toml \"node_address\" -v \"$HUB_RPC_URL\"\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/dymint.toml \"rollapp_id\" -v \"$ROLLAPP_CHAIN_ID\"\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/dymint.toml \"max_idle_time\" -v \"2s\" # may want to change to something longer after setup (see below)\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/dymint.toml \"max_proof_time\" -v \"1s\"\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/app.toml \"minimum-gas-prices\" -v \"1arax\"\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/dymint.toml \"batch_submit_time\" -v \"30s\"\n```\n\n```shell\n$EXECUTABLE validate-genesis\n```\n\n```shell\n# this script automatically adds 2 vesting accounts, adjust the timestamps to your liking or skip this step\nsh scripts/add_vesting_accounts_to_genesis_file.sh\n```\n\n### Run rollapp locally\n\n```shell\n$EXECUTABLE start --log_level=debug\n```\n\n## Set Sequencer reward address (optional)\n\n```shell\n# Add a new key for the reward address\n$EXECUTABLE keys add reward\nREWARD=$($EXECUTABLE keys show reward -a)\n\n# This assumes mock default sequencer consensus key location. for different location, update the path.\nKEY=\"${ROLLAPP_HOME_DIR}/config/priv_validator_key.json\"\n\n# set the kerying backend to test\n$EXECUTABLE config keyring-backend test\n\n# Import the consensus key into the rollapp keyring\n$EXECUTABLE tx sequencer unsafe-import-cons-key sequencerConsensusKey $KEY\n\n# Update the sequencer reward address\n$EXECUTABLE tx sequencer create-sequencer sequencerConsensusKey --from $KEY_NAME_ROLLAPP --fees 20000000000000$BASE_DENOM --reward-addr $REWARD --keyring-backend test -y\n```\n\n## Setup IBC between rollapp and local dymension hub node\n\n### Install dymension relayer\n\n```shell\ngit clone https://github.com/dymensionxyz/go-relayer.git --branch v0.3.4-v2.5.2-relayer-canon-6\ncd go-relayer \u0026\u0026 make install\n```\n\n### Establish IBC channel\n\nVerify you have all the environment variables defined earlier set.\nwhile the rollapp and the local dymension hub node running, run:\n\n```shell\nsh scripts/ibc/setup_ibc.sh\n```\n\nAfter successful run, the new established channels will be shown\n\n### Configure empty block time to 1hr\n\nStop the rollapp:\n\n```shell\nkill $(pgrep $EXECUTABLE)\n```\n\nLinux:\n\n```shell\ndasel put -f \"${ROLLAPP_HOME_DIR}\"/config/dymint.toml \"max_idle_time\" -v \"1h\"\n```\n\nStart the rollapp:\n\n```shell\n$EXECUTABLE start\n```\n\n### run the relayer\n\n```shell\nrly start hub-rollapp\n```\n\n## Developers guide\n\nFor support, join our [Discord](http://discord.gg/dymension) community and find us in the Developer section.\n\n### Setup push hooks\n\nTo setup push hooks, run the following command:\n\n```sh\n./scripts/setup_push_hooks.sh\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdymensionxyz%2Frollapp-evm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdymensionxyz%2Frollapp-evm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdymensionxyz%2Frollapp-evm/lists"}