From af52782a9e85bab64f904a395d3dbb9286cd7a42 Mon Sep 17 00:00:00 2001 From: Marcel Moura Date: Fri, 16 Feb 2024 11:16:21 -0300 Subject: [PATCH 1/4] chore(docker): add .git* to .dockerignore --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index f4ceea785..d482e263b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ +.git* **/target/ From f8baad39d5614e190e58968c82402b56dbdcbc13 Mon Sep 17 00:00:00 2001 From: Marcel Moura Date: Fri, 2 Feb 2024 13:11:35 -0300 Subject: [PATCH 2/4] chore(devnet): add contracts v1.2.0 as submodule --- .github/license-check/config.json | 4 +++- .gitmodules | 4 ++++ rollups-contracts | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) create mode 160000 rollups-contracts diff --git a/.github/license-check/config.json b/.github/license-check/config.json index 2a909eb6c..92a3bf073 100644 --- a/.github/license-check/config.json +++ b/.github/license-check/config.json @@ -2,11 +2,13 @@ { "include": ["**/*.go", "**/*.rs"], "exclude": [ + "offchain/grpc-interfaces/**", "offchain/target/**", "offchain/data/src/schema.rs", "pkg/contracts/*.go", "pkg/readerclient/generated.go", - "pkg/inspectclient/generated.go" + "pkg/inspectclient/generated.go", + "rollups-contracts/**" ], "license": ".github/license-check/header.txt" } diff --git a/.gitmodules b/.gitmodules index 799f3bf6e..3940b309f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,7 @@ [submodule "grpc-interfaces"] path = offchain/grpc-interfaces/grpc-interfaces url = ../grpc-interfaces.git +[submodule "rollups-contracts"] + path = rollups-contracts + url = https://github.com/cartesi/rollups-contracts + branch = v1.2.0 diff --git a/rollups-contracts b/rollups-contracts new file mode 160000 index 000000000..77ff2c089 --- /dev/null +++ b/rollups-contracts @@ -0,0 +1 @@ +Subproject commit 77ff2c08928b871348b6e2bf3b6f5d7f3c95c9dc From 07ac34db7636a85fe3cbe361f5100f919182ce7a Mon Sep 17 00:00:00 2001 From: Marcel Moura Date: Tue, 9 Jan 2024 19:55:39 -0300 Subject: [PATCH 3/4] feat(devnet): generate devnet in go Create a devnet docker image for local development. It uses rollups-contracts own deployment scripts instead of foundry-rs and replaces the shell script previously developed for the same purpose. --- .gitignore | 2 + build/Dockerfile | 84 ++++- cmd/gen-devnet/anvil.go | 24 ++ cmd/gen-devnet/deployer.go | 127 ++++++++ cmd/gen-devnet/main.go | 164 ++++++++++ cmd/gen-devnet/rollups.go | 77 +++++ cmd/gen-devnet/types.go | 11 + pkg/addresses/addresses.go | 21 +- scripts/devnet/gen-devnet.sh | 364 ---------------------- scripts/devnet/lib/anvil.sh | 60 ---- scripts/devnet/lib/anvil_net_listening.sh | 11 - scripts/devnet/lib/contracts.sh | 168 ---------- scripts/devnet/lib/util.sh | 30 -- scripts/devnet/remappings.txt | 2 - 14 files changed, 484 insertions(+), 661 deletions(-) create mode 100644 cmd/gen-devnet/anvil.go create mode 100644 cmd/gen-devnet/deployer.go create mode 100644 cmd/gen-devnet/main.go create mode 100644 cmd/gen-devnet/rollups.go create mode 100644 cmd/gen-devnet/types.go delete mode 100755 scripts/devnet/gen-devnet.sh delete mode 100644 scripts/devnet/lib/anvil.sh delete mode 100755 scripts/devnet/lib/anvil_net_listening.sh delete mode 100644 scripts/devnet/lib/contracts.sh delete mode 100644 scripts/devnet/lib/util.sh delete mode 100644 scripts/devnet/remappings.txt diff --git a/.gitignore b/.gitignore index c828405a3..72a35910f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ build/deployments **/.idea/ machine-snapshot/** +deployment.json +anvil_state.json diff --git a/build/Dockerfile b/build/Dockerfile index 85ce55865..00edb0c2b 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -10,7 +10,7 @@ ARG BASE_IMAGE ARG RUST_VERSION ARG GO_VERSION -ARG FOUNDRY_COMMIT_VERSION +ARG FOUNDRY_NIGHTLY_VERSION ARG SERVER_MANAGER_VERSION ARG MACHINE_EMULATOR_VERSION ARG ROOTFS_VERSION @@ -38,6 +38,7 @@ FROM ${BASE_IMAGE} as emulator-base # Install machine-emulator ARG MACHINE_EMULATOR_VERSION +ARG DEBIAN_FRONTEND=noninteractive RUN < "$deployment_file" - for key in "${!deployment_info[@]}"; do - echo " \"${key}\": \"${deployment_info[${key}]}\"," >> "$deployment_file" - done - echo "}" >> "$deployment_file" - verbose "Deployment information saved to $deployment_file" -} - -################################################################################ -# Deploy rollups libraries -deploy_libraries() { - local contract="lib/@cartesi/util/contracts/CartesiMathV2.sol" - local name="CartesiMathV2" - local lib_address="" - contract_deploy \ - lib_address \ - "$contract" \ - "$name" - mathv2_lib="$contract:$name:$lib_address" - verbose "deployed $mathv2_lib" - - contract="lib/@cartesi/util/contracts/MerkleV2.sol" - name="MerkleV2" - contract_deploy \ - lib_address \ - "$contract" \ - "$name" \ - --libraries \ - "$mathv2_lib" - merklev2_lib="$contract:$name:$lib_address" - verbose "deployed $merklev2_lib" - - contract="lib/@cartesi/util/contracts/Bitmask.sol" - name="Bitmask" - contract_deploy \ - lib_address \ - "$contract" \ - "$name" - bitmask_lib="$contract:$name:$lib_address" - verbose "deployed $bitmask_lib" -} - -################################################################################ -# Deploy portals -deploy_portals() { - local name="InputBox" - local contract="src/inputs/InputBox.sol" - local portal_address="" - contract_deploy \ - portal_address \ - "$contract" \ - "$name" - deployment_info["CARTESI_CONTRACTS_INPUT_BOX_ADDRESS"]="$portal_address" - verbose "deployed $contract:$name:$portal_address" - - declare -A portals - portals["ERC1155BatchPortal"]="src/portals/ERC1155BatchPortal.sol" - portals["ERC1155SinglePortal"]="src/portals/ERC1155SinglePortal.sol" - portals["ERC20Portal"]="src/portals/ERC20Portal.sol" - portals["ERC721Portal"]="src/portals/ERC721Portal.sol" - portals["EtherPortal"]="src/portals/EtherPortal.sol" - - local inputbox_address="$portal_address" - for key in "${!portals[@]}"; do - name="${key}" - contract="${portals[${key}]}" - contract_deploy \ - portal_address \ - "$contract" \ - "$name" \ - --constructor-args \ - "$inputbox_address" - verbose "deployed $contract:$name:$portal_address" - done -} - -################################################################################ -# Deploy DAppRelay -deploy_relay() { - local contract="src/relays/DAppAddressRelay.sol" - local name="DAppAddressRelay" - local relay_address="" - contract_deploy \ - relay_address \ - "$contract" \ - "$name" \ - --constructor-args \ - "$DEVNET_FOUNDRY_ACCOUNT_0_ADDRESS" - verbose "deployed $contract:$name:$relay_address" -} - -################################################################################ -# Create DApp factories -create_factories() { - local -n auth_hist_factory_addr="$1" - shift - local -n dapp_factory_addr="$1" - shift - - local contract="src/dapp/CartesiDAppFactory.sol" - local name="CartesiDAppFactory" - local factory_address="" - contract_deploy \ - factory_address \ - "$contract" \ - "$name" \ - --libraries "$mathv2_lib" \ - --libraries "$merklev2_lib" \ - --libraries "$bitmask_lib" - dapp_factory_addr="$factory_address" - verbose "deployed $contract:$name:$factory_address" - - contract="src/consensus/authority/AuthorityFactory.sol" - name="AuthorityFactory" - contract_deploy \ - factory_address \ - "$contract" \ - "$name" \ - --constructor-args \ - "$DEVNET_FOUNDRY_ACCOUNT_0_ADDRESS" - verbose "deployed $contract:$name:$factory_address" - authority_factory_address="$factory_address" - - contract="src/history/HistoryFactory.sol" - name="HistoryFactory" - contract_deploy \ - factory_address \ - "$contract" \ - "$name" \ - --constructor-args \ - "$DEVNET_FOUNDRY_ACCOUNT_0_ADDRESS" - verbose "deployed $contract:$name:$factory_address" - history_factory_address="$factory_address" - - contract="src/consensus/authority/AuthorityHistoryPairFactory.sol" - name="AuthorityHistoryPairFactory" - contract_deploy \ - factory_address \ - "$contract" \ - "$name" \ - --constructor-args \ - "$authority_factory_address" \ - "$history_factory_address" - auth_hist_factory_addr="$factory_address" - verbose "deployed $contract:$name:$factory_address" -} - -################################################################################ -# create DApp contracts -create_dapp() { - local -n ret="$1" - shift - local auth_hist_factory_addr="$1" - shift - local dapp_factory_addr="$1" - shift - - local addresses - contract_create \ - addresses \ - block_number \ - "$auth_hist_factory_addr" \ - "newAuthorityHistoryPair(address,bytes32)(address,address)" \ - "$DEVNET_FOUNDRY_ACCOUNT_0_ADDRESS" \ - "$DEVNET_DEFAULT_SALT" - authority_address="${addresses[0]}" - history_address="${addresses[1]}" - deployment_info["CARTESI_CONTRACTS_AUTHORITY_ADDRESS"]="$authority_address" - deployment_info["CARTESI_CONTRACTS_HISTORY_ADDRESS"]="$history_address" - verbose "deployed authority_address=$authority_address" - verbose "deployed history_address=$history_address" - - contract_create \ - addresses \ - block_number \ - "$dapp_factory_addr" \ - "newApplication(address,address,bytes32,bytes32)(address)" \ - "$authority_address" \ - "$DEVNET_FOUNDRY_ACCOUNT_0_ADDRESS" \ - "$template_hash" \ - "$DEVNET_DEFAULT_SALT" - ret="${addresses[0]}" - deployment_info["CARTESI_CONTRACTS_DAPP_ADDRESS"]="$ret" - deployment_info["CARTESI_CONTRACTS_DAPP_DEPLOYMENT_BLOCK_NUMBER"]="$block_number" - verbose "deployed dapp_address=$ret" -} - -################################################################################ -# Main workflow -################################################################################ - -# Process script options -while getopts ":a:d:t:hv" option; do - case $option in - a) - devnet_anvil_state_file=$(realpath "$OPTARG") - ;; - d) - devnet_deployment_file=$(realpath "$OPTARG") - ;; - t) - template_hash_file="$OPTARG" - ;; - h) - usage - ;; - v) - VERBOSE=1 - ;; - \?) - err "$OPTARG is not a valid option" - usage - ;; - esac -done - -if [[ -z "$template_hash_file" ]]; then - err "missing template-hash-file" - usage -fi - -template_hash=$(xxd -p "$template_hash_file") -check_error $? "failed to read template hash" -template_hash=$(echo "$template_hash" | tr -d "\n") -readonly devnet_anvil_state_file devnet_deployment_file template_hash - -# From here on, any exit deserves a clean up -trap finish EXIT ERR - -log "starting devnet creation" -work_dir=$(mktemp -d) -readonly work_dir -check_error $? "failed to create temp dir" -verbose "created work dir at $work_dir" - -anvil_pid="" -anvil_up \ - anvil_pid \ - "$devnet_anvil_state_file" -check_error $? "failed to start anvil" -log "started anvil (pid=$anvil_pid)" - -forge_prepare \ - "$work_dir" \ - "$forge_remappings_file" -log "prepared forge environment" - -deploy_libraries - -deploy_portals -deploy_relay -log "deployed contracts" - -create_factories \ - auth_hist_factory_address \ - dapp_factory_address -log "created factories" - -create_dapp \ - dapp_address \ - "$auth_hist_factory_address" \ - "$dapp_factory_address" -log "created CartesiDApp" - -generate_deployment_file \ - "$devnet_deployment_file" - -print_report -log "done creating devnet" diff --git a/scripts/devnet/lib/anvil.sh b/scripts/devnet/lib/anvil.sh deleted file mode 100644 index 2d0cdd167..000000000 --- a/scripts/devnet/lib/anvil.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -# (c) Cartesi and individual authors (see AUTHORS) -# SPDX-License-Identifier: Apache-2.0 (see LICENSE) -anvil_lib_dir="$( cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -DEVNET_ANVIL_STATE_INTERVAL=5 -DEVNET_ANVIL_TIMEOUT=$(expr $DEVNET_ANVIL_STATE_INTERVAL + 10) -readonly anvil_lib_dir DEVNET_ANVIL_STATE_INTERVAL DEVNET_ANVIL_TIMEOUT - -ANVIL_IP_ADDR=${ANVIL_IP_ADDR:-"0.0.0.0"} - -_is_anvil_up() { - local -n ready=$1 - - local result - result=$("$anvil_lib_dir"/anvil_net_listening.sh) - - ready="false" - if [[ -n "$result" ]]; then - ready=$(echo "$result" | jq ".result") - fi -} - -anvil_up() { - local -n ret="$1" - shift - local anvil_state_file="$1" - - # check if there's another instance of anvil up listening on the same port - _is_anvil_up is_up - if [[ "$is_up" == "true" ]]; then - err "anvil is already up" - return 1 - fi - - anvil \ - --host "$ANVIL_IP_ADDR" \ - --dump-state "$anvil_state_file" \ - --state-interval "$DEVNET_ANVIL_STATE_INTERVAL" \ - --silent & - local pid=$! - - sleep "$DEVNET_ANVIL_TIMEOUT" - # check if anvil is up - _is_anvil_up is_up - if [[ "$is_up" != "true" ]]; then - err "anvil has not started" - return 2 - fi - - ret="$pid" -} - -anvil_down() { - local anvil_pid="$1" - - kill "$anvil_pid" - wait "$anvil_pid" - check_error "$?" "failed to kill anvil" - verbose "killed anvil (pid=$anvil_pid)" -} diff --git a/scripts/devnet/lib/anvil_net_listening.sh b/scripts/devnet/lib/anvil_net_listening.sh deleted file mode 100755 index 75364f2be..000000000 --- a/scripts/devnet/lib/anvil_net_listening.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -# (c) Cartesi and individual authors (see AUTHORS) -# SPDX-License-Identifier: Apache-2.0 (see LICENSE) -ANVIL_IP_ADDR=${ANVIL_IP_ADDR:-"0.0.0.0"} - -curl -X \ - POST \ - -s \ - -H 'Content-Type: application/json' \ - -d '{"jsonrpc":"2.0","id":"1","method":"net_listening","params":[]}' \ - "http://$ANVIL_IP_ADDR:8545" diff --git a/scripts/devnet/lib/contracts.sh b/scripts/devnet/lib/contracts.sh deleted file mode 100644 index 56328986e..000000000 --- a/scripts/devnet/lib/contracts.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env bash -# (c) Cartesi and individual authors (see AUTHORS) -# SPDX-License-Identifier: Apache-2.0 (see LICENSE) - -################################################################################ -# Download rollups contracts -_download() { - local download_dir=$1 - shift - local artifact_name=$1 - shift - local artifact_version=$1 - - local tgz_file="$artifact_name-$artifact_version.tgz" - local url="https://registry.npmjs.org/@cartesi/$artifact_name/-/$tgz_file" - wget \ - --quiet \ - $url \ - --directory-prefix $download_dir - check_error $? "failed to download $url" - - local tar_dir="$download_dir/$artifact_name-$artifact_version" - mkdir -p $tar_dir - tar zxf \ - $download_dir/$tgz_file \ - --directory $tar_dir \ - > /dev/null - echo $tar_dir -} - -rollups_download() { - local download_dir=$1 - shift - local contracts_version=$1 - - _download $download_dir "rollups" $contracts_version -} - -solidity_util_download() { - local download_dir=$1 - shift - local rollups_contracts_dir=$1 - - version=$(\ - cat ${rollups_contracts_dir}/package/package.json \ - | jq -r '.dependencies."@cartesi/util"' \ - ) - - _download $download_dir "util" $version -} - -################################################################################ -# Prepare forge environment -forge_prepare() { - local tmp_dir=$1 - shift - local remappings_file="$1" - - cd "$tmp_dir" - mkdir forge_prj - cd forge_prj - - # download contracts - local download_dir="$tmp_dir/downloads" - mkdir -p "$download_dir" - local rollups_tar_dir=$( - rollups_download \ - "$download_dir" \ - "$ROLLUPS_CONTRACTS_VERSION" - ) - check_error $? "failed to download contracts" - log "downloaded rollups-contracts to $rollups_tar_dir" - - local solidity_util_tar_dir=$( - solidity_util_download \ - "$download_dir" \ - "$rollups_tar_dir" - ) - check_error $? "failed to download solidity-util" - log "downloaded solidity-util to $solidity_util_tar_dir" - - forge init \ - --shallow \ - --no-git \ - --quiet \ - . &> /dev/null - check_error $? "failed to init forge project" - - # install openzeppelin - openzeppelin_version=v$(\ - cat ${rollups_tar_dir}/package/package.json \ - | jq -r '.dependencies."@openzeppelin/contracts"' \ - ) - forge install \ - --shallow \ - --no-git \ - --quiet \ - openzeppelin/openzeppelin-contracts@${openzeppelin_version} \ - &> /dev/null - check_error $? "failed to install openzeppelin $openzeppelin_version" - - # copy contracts - local rollups_contracts_dir="$rollups_tar_dir/package/contracts" - cp -pr $rollups_contracts_dir/* src - - local solidity_util_contracts_dir="$solidity_util_tar_dir/package/contracts" - local util_lib_dir="lib/@cartesi/util/contracts" - mkdir -p $util_lib_dir - cp -pr $solidity_util_contracts_dir/* $util_lib_dir - - # apply forge remappings - cp "$remappings_file" "remappings.txt" -} - -################################################################################ -# Deploy a contract -# Assumes all non-standard arguments are passed -# output: returned address -# input: contract and dependencies -contract_deploy() { - local -n address="$1" - shift - local contract="$1" - shift - local contract_name="$1" - shift - - address=$( - forge create \ - --json \ - --rpc-url $DEVNET_RPC_URL \ - --private-key $DEVNET_FOUNDRY_ACCOUNT_0_PRIVATE_KEY \ - "$contract:$contract_name" \ - $@ \ - | jq -r ".deployedTo" - ) - check_error $? "failed to deploy $contract_name" -} - -################################################################################ -# Call arbitrary code on a contract -# Splits returned values into an array -contract_create() { - local -n addrs="$1" - shift - local -n block="$1" - shift - - # Generate values without issuing a transaction - local values=$( - cast call \ - --rpc-url $DEVNET_RPC_URL \ - $@ - ) - check_error $? "failed to retrieve returned values" - # Split returned values - IFS=$'\n' addrs=($values) - - # Send tansaction - block=$(cast send \ - --json \ - --rpc-url $DEVNET_RPC_URL \ - --private-key $DEVNET_FOUNDRY_ACCOUNT_0_PRIVATE_KEY \ - $@ \ - | jq -r '.blockNumber' - ) - check_error $? "failed to send transaction" -} diff --git a/scripts/devnet/lib/util.sh b/scripts/devnet/lib/util.sh deleted file mode 100644 index 757ab3221..000000000 --- a/scripts/devnet/lib/util.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -# (c) Cartesi and individual authors (see AUTHORS) -# SPDX-License-Identifier: Apache-2.0 (see LICENSE) - -################################################################################ -# Utilitary functions -log() { - echo "$1" -} - -err() { - log "ERROR: $1" >&2 -} - -verbose() { - if [[ -n "$VERBOSE" ]]; then - log "$1" - fi -} - -check_error() { - exit_code=${1:-0} - shift - context=${1:-"main"} - - if [[ $exit_code -ne 0 ]]; then - err "$context: exit_code=$exit_code" - exit $exit_code - fi -} diff --git a/scripts/devnet/remappings.txt b/scripts/devnet/remappings.txt deleted file mode 100644 index 6d2a0c46f..000000000 --- a/scripts/devnet/remappings.txt +++ /dev/null @@ -1,2 +0,0 @@ -@cartesi/=lib/@cartesi -@openzeppelin/=lib/openzeppelin-contracts/ From cc6f9003d197e080b7d45e81946f3de63eb791d5 Mon Sep 17 00:00:00 2001 From: Marcel Moura Date: Thu, 18 Jan 2024 19:13:49 -0300 Subject: [PATCH 4/4] chore(devnet): adjust address book With deterministic deployment in place, the address book must be updated to the actual addresses generated by cmd/gen-devnet. This change is two-part: - it restores the original rollups-contracts addresses (see 946767bb), which are now being deployed deterministically - is sets new addresses for the Authority/History pair and the Cartesi Application itself, which, as opposed to what happens to sunodo/devnet, are being deployed using the deterministically deployed factories (item above) --- build/compose-devnet.yaml | 12 ++++++------ pkg/addresses/addresses.go | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/build/compose-devnet.yaml b/build/compose-devnet.yaml index dd1e0650a..bdbba99d2 100644 --- a/build/compose-devnet.yaml +++ b/build/compose-devnet.yaml @@ -19,11 +19,11 @@ services: CARTESI_BLOCKCHAIN_WS_ENDPOINT: "ws://devnet:8545" CARTESI_BLOCKCHAIN_IS_LEGACY: "false" CARTESI_BLOCKCHAIN_FINALITY_OFFSET: "1" - CARTESI_CONTRACTS_APPLICATION_ADDRESS: "0x180763470853cAF642Df79a908F9282c61692A45" - CARTESI_CONTRACTS_APPLICATION_DEPLOYMENT_BLOCK_NUMBER: "17" - CARTESI_CONTRACTS_HISTORY_ADDRESS: "0xbCc4067dfdeE8274E531951f0968EC895f397A44" - CARTESI_CONTRACTS_AUTHORITY_ADDRESS: "0xb090149a3cA43000681B74875500854B54355496" - CARTESI_CONTRACTS_INPUT_BOX_ADDRESS: "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" - CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER: "17" + CARTESI_CONTRACTS_APPLICATION_ADDRESS: "0x7FFdf694A877067DE99462A7243b29972D19cf72" + CARTESI_CONTRACTS_APPLICATION_DEPLOYMENT_BLOCK_NUMBER: "19" + CARTESI_CONTRACTS_HISTORY_ADDRESS: "0x325272217ae6815b494bF38cED004c5Eb8a7CdA7" + CARTESI_CONTRACTS_AUTHORITY_ADDRESS: "0x58c93F83fb3304730C95aad2E360cdb88b782010" + CARTESI_CONTRACTS_INPUT_BOX_ADDRESS: "0x59b22D57D4f067708AB0c00552767405926dc768" + CARTESI_CONTRACTS_INPUT_BOX_DEPLOYMENT_BLOCK_NUMBER: "19" CARTESI_EPOCH_DURATION: "120" CARTESI_AUTH_MNEMONIC: "test test test test test test test test test test test junk" diff --git a/pkg/addresses/addresses.go b/pkg/addresses/addresses.go index 67d194831..8a2c490ff 100644 --- a/pkg/addresses/addresses.go +++ b/pkg/addresses/addresses.go @@ -36,15 +36,15 @@ func GetTestBook() *Book { return &Book{ AuthorityHistoryPairFactory: common. HexToAddress("0x3890A047Cf9Af60731E80B2105362BbDCD70142D"), - CartesiDAppFactory: common.HexToAddress("0x610178dA211FEF7D417bC0e6FeD39F05609AD788"), - DAppAddressRelay: common.HexToAddress("0x8A791620dd6260079BF849Dc5567aDC3F2FdC318"), - ERC1155BatchPortal: common.HexToAddress("0x0165878A594ca255338adfa4d48449f69242Eb8F"), - ERC1155SinglePortal: common.HexToAddress("0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6"), - ERC20Portal: common.HexToAddress("0xa513E6E4b8f2a923D98304ec87F64353C4D5C853"), - ERC721Portal: common.HexToAddress("0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9"), - EtherPortal: common.HexToAddress("0x5FC8d32690cc91D4c39d9d3abcBD16989F875707"), - InputBox: common.HexToAddress("0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9"), - CartesiDApp: common.HexToAddress("0x180763470853cAF642Df79a908F9282c61692A45"), + CartesiDAppFactory: common.HexToAddress("0x7122cd1221C20892234186facfE8615e6743Ab02"), + DAppAddressRelay: common.HexToAddress("0xF5DE34d6BbC0446E2a45719E718efEbaaE179daE"), + ERC1155BatchPortal: common.HexToAddress("0xedB53860A6B52bbb7561Ad596416ee9965B055Aa"), + ERC1155SinglePortal: common.HexToAddress("0x7CFB0193Ca87eB6e48056885E026552c3A941FC4"), + ERC20Portal: common.HexToAddress("0x9C21AEb2093C32DDbC53eEF24B873BDCd1aDa1DB"), + ERC721Portal: common.HexToAddress("0x237F8DD094C0e47f4236f12b4Fa01d6Dae89fb87"), + EtherPortal: common.HexToAddress("0xFfdbe43d4c855BF7e0f105c400A50857f53AB044"), + InputBox: common.HexToAddress("0x59b22D57D4f067708AB0c00552767405926dc768"), + CartesiDApp: common.HexToAddress("0x7FFdf694A877067DE99462A7243b29972D19cf72"), } }