Testnet deploy (#369)

* Got keys for testnet

* Testnet deploy

* Add rust configs

* prettier

* Nits, update governance config

* new agent image

* Rename secret reference

* Have kathy also checkpoint

* Only checkpoint when count > 1

* Move relayer to unique key for (source, remote) pair

* prettier

* Clean up get-aws-key-addresses

* get GCP keys half working

* let's clean this up

* First steps at refactor

* Migrate delete-keys over

* support key rotation

* Create and get key all working

* update relayer external secret

* Prettier

* Update ethers-rs

* Debugging testnet deployment (#370)

* Dont fail on inbox checkpointing tx error

* fix docker build

* Debug

* More instrumentation

* Lint

* Use the correct signers

* Lint

* prettier

* suffix -> index, go back to 1 key per agent

* rm relayer user

* Create user and key identifiers

* Move some fns to key-utils, fix gcp secret names

* Correct kathy & checkpointer key names

* Back to Promse.all in deploy-agents, clean

* Don't require GCP keys to be created with agentconfig

* fix

* pure json response for get-key-addresses

Co-authored-by: Trevor Porter <trkporter@ucdavis.edu>
pull/376/head
Nam Chu Hoai 3 years ago committed by GitHub
parent a424371e89
commit cc6c2db5d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      .gitignore
  2. 126
      rust/Cargo.lock
  3. 5
      rust/agents/kathy/src/kathy.rs
  4. 125
      rust/agents/relayer/src/checkpoint_relayer.rs
  5. 189
      rust/agents/relayer/src/message_processor.rs
  6. 2
      rust/agents/validator/src/submit.rs
  7. 2
      rust/chains/abacus-ethereum/src/macros.rs
  8. 114
      rust/config/testnet/alfajores_config.json
  9. 114
      rust/config/testnet/arbitrumrinkeby_config.json
  10. 114
      rust/config/testnet/auroratestnet_config.json
  11. 114
      rust/config/testnet/bsctestnet_config.json
  12. 114
      rust/config/testnet/fuji_config.json
  13. 114
      rust/config/testnet/kovan_config.json
  14. 114
      rust/config/testnet/mumbai_config.json
  15. 114
      rust/config/testnet/optimismkovan_config.json
  16. 6
      rust/helm/abacus-agent/templates/relayer-external-secret.yaml
  17. 4
      rust/helm/abacus-agent/values.yaml
  18. 2
      rust/tools/abacus-cli/src/subcommands/prove.rs
  19. 2
      rust/tools/kms-cli/src/main.rs
  20. 50
      typescript/infra/config/environments/testnet/agent.ts
  21. 70
      typescript/infra/config/environments/testnet/core.ts
  22. 114
      typescript/infra/config/environments/testnet/core/rust/alfajores_config.json
  23. 114
      typescript/infra/config/environments/testnet/core/rust/arbitrumrinkeby_config.json
  24. 114
      typescript/infra/config/environments/testnet/core/rust/auroratestnet_config.json
  25. 114
      typescript/infra/config/environments/testnet/core/rust/bsctestnet_config.json
  26. 114
      typescript/infra/config/environments/testnet/core/rust/fuji_config.json
  27. 114
      typescript/infra/config/environments/testnet/core/rust/kovan_config.json
  28. 114
      typescript/infra/config/environments/testnet/core/rust/mumbai_config.json
  29. 114
      typescript/infra/config/environments/testnet/core/rust/optimismkovan_config.json
  30. 234
      typescript/infra/config/environments/testnet/core/verification/alfajores.json
  31. 234
      typescript/infra/config/environments/testnet/core/verification/arbitrumrinkeby.json
  32. 234
      typescript/infra/config/environments/testnet/core/verification/auroratestnet.json
  33. 234
      typescript/infra/config/environments/testnet/core/verification/bsctestnet.json
  34. 234
      typescript/infra/config/environments/testnet/core/verification/fuji.json
  35. 234
      typescript/infra/config/environments/testnet/core/verification/kovan.json
  36. 234
      typescript/infra/config/environments/testnet/core/verification/mumbai.json
  37. 234
      typescript/infra/config/environments/testnet/core/verification/optimismkovan.json
  38. 38
      typescript/infra/config/environments/testnet/domains.ts
  39. 32
      typescript/infra/config/environments/testnet/governance.ts
  40. 5
      typescript/infra/config/environments/testnet/index.ts
  41. 37
      typescript/infra/config/environments/testnet/infrastructure.ts
  42. 248
      typescript/infra/config/environments/testnet/validators.ts
  43. 24
      typescript/infra/config/networks/testnets.ts
  44. 13
      typescript/infra/scripts/create-keys.ts
  45. 8
      typescript/infra/scripts/delete-keys.ts
  46. 29
      typescript/infra/scripts/deploy-agents.ts
  47. 28
      typescript/infra/scripts/get-key-addresses.ts
  48. 2
      typescript/infra/scripts/utils.ts
  49. 68
      typescript/infra/src/agents/agent.ts
  50. 103
      typescript/infra/src/agents/aws/key.ts
  51. 14
      typescript/infra/src/agents/aws/user.ts
  52. 4
      typescript/infra/src/agents/aws/validator-user.ts
  53. 188
      typescript/infra/src/agents/gcp.ts
  54. 84
      typescript/infra/src/agents/index.ts
  55. 133
      typescript/infra/src/agents/key-utils.ts
  56. 17
      typescript/infra/src/agents/roles.ts
  57. 75
      typescript/infra/src/config/agent.ts
  58. 8
      typescript/infra/src/config/chain.ts
  59. 2
      typescript/infra/src/config/environment.ts
  60. 2
      typescript/infra/src/infrastructure/monitoring/prometheus.ts
  61. 2
      typescript/sdk/src/core/environments/index.ts
  62. 458
      typescript/sdk/src/core/environments/testnet.ts
  63. 28
      typescript/sdk/src/domains.ts
  64. 4
      typescript/sdk/src/types.ts

3
.gitignore vendored

@ -20,4 +20,5 @@ typescript/**/tsconfig.tsbuildinfo
**/**/tsconfig.tsbuildinfo
.yarn/install-state.gz
.yarn/cache
.yarn/cache
yarn-error.log

126
rust/Cargo.lock generated

@ -1320,7 +1320,7 @@ dependencies = [
[[package]]
name = "ethers"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"ethers-addressbook",
"ethers-contract",
@ -1335,7 +1335,7 @@ dependencies = [
[[package]]
name = "ethers-addressbook"
version = "0.1.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"ethers-core",
"once_cell",
@ -1346,7 +1346,7 @@ dependencies = [
[[package]]
name = "ethers-contract"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"ethers-contract-abigen",
"ethers-contract-derive",
@ -1364,7 +1364,7 @@ dependencies = [
[[package]]
name = "ethers-contract-abigen"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"Inflector",
"cfg-if 1.0.0",
@ -1373,7 +1373,6 @@ dependencies = [
"eyre",
"getrandom 0.2.3",
"hex",
"once_cell",
"proc-macro2",
"quote",
"reqwest",
@ -1387,7 +1386,7 @@ dependencies = [
[[package]]
name = "ethers-contract-derive"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"ethers-contract-abigen",
"ethers-core",
@ -1401,13 +1400,12 @@ dependencies = [
[[package]]
name = "ethers-core"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"arrayvec 0.7.2",
"bytes",
"cargo_metadata",
"convert_case",
"ecdsa",
"elliptic-curve",
"ethabi",
"generic-array 0.14.5",
@ -1415,7 +1413,6 @@ dependencies = [
"k256",
"once_cell",
"proc-macro2",
"quote",
"rand 0.8.5",
"rlp",
"rlp-derive",
@ -1429,7 +1426,7 @@ dependencies = [
[[package]]
name = "ethers-etherscan"
version = "0.2.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"ethers-core",
"ethers-solc",
@ -1438,12 +1435,13 @@ dependencies = [
"serde-aux",
"serde_json",
"thiserror",
"tracing",
]
[[package]]
name = "ethers-middleware"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"async-trait",
"ethers-contract",
@ -1466,7 +1464,7 @@ dependencies = [
[[package]]
name = "ethers-providers"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"async-trait",
"auto_impl",
@ -1476,8 +1474,10 @@ dependencies = [
"futures-core",
"futures-timer",
"futures-util",
"hashers",
"hex",
"http",
"once_cell",
"parking_lot",
"pin-project",
"reqwest",
@ -1499,7 +1499,7 @@ dependencies = [
[[package]]
name = "ethers-signers"
version = "0.6.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"async-trait",
"coins-bip32",
@ -1507,25 +1507,20 @@ dependencies = [
"elliptic-curve",
"eth-keystore",
"ethers-core",
"futures-executor",
"futures-util",
"hex",
"home",
"rand 0.8.5",
"rusoto_core",
"rusoto_kms",
"semver",
"sha2 0.9.8",
"spki",
"thiserror",
"tracing",
"tracing-futures",
]
[[package]]
name = "ethers-solc"
version = "0.3.0"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#fab30887a2373d260d41689e71242ce0ac979c80"
source = "git+https://github.com/gakonst/ethers-rs?branch=master#81e7fea14b4f9bc4c531856f8cb7cd31a5248918"
dependencies = [
"colored",
"dunce",
@ -1537,12 +1532,12 @@ dependencies = [
"md-5 0.10.1",
"num_cpus",
"once_cell",
"path-slash",
"rayon",
"regex",
"semver",
"serde 1.0.130",
"serde_json",
"sha2 0.9.8",
"solang-parser",
"thiserror",
"tiny-keccak",
@ -1752,6 +1747,15 @@ dependencies = [
"slab",
]
[[package]]
name = "fxhash"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
dependencies = [
"byteorder",
]
[[package]]
name = "generic-array"
version = "0.12.4"
@ -1846,6 +1850,15 @@ dependencies = [
"ahash",
]
[[package]]
name = "hashers"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30"
dependencies = [
"fxhash",
]
[[package]]
name = "headers"
version = "0.3.5"
@ -1931,7 +1944,7 @@ checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b"
dependencies = [
"bytes",
"fnv",
"itoa",
"itoa 0.4.8",
]
[[package]]
@ -1987,7 +2000,7 @@ dependencies = [
"http-body",
"httparse",
"httpdate",
"itoa",
"itoa 0.4.8",
"pin-project-lite",
"socket2",
"tokio",
@ -2135,6 +2148,12 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "itoa"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
[[package]]
name = "jobserver"
version = "0.1.24"
@ -2155,9 +2174,9 @@ dependencies = [
[[package]]
name = "k256"
version = "0.10.2"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cc5937366afd3b38071f400d1ce5bd8b1d40b5083cc14e6f8dbcc4032a7f5bb"
checksum = "19c3a5e0a0b8450278feda242592512e09f61c72e018b8cd5c859482802daf2d"
dependencies = [
"cfg-if 1.0.0",
"ecdsa",
@ -2986,6 +3005,12 @@ version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58"
[[package]]
name = "path-slash"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cacbb3c4ff353b534a67fb8d7524d00229da4cb1dc8c79f4db96e375ab5b619"
[[package]]
name = "pbkdf2"
version = "0.8.0"
@ -3244,9 +3269,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
[[package]]
name = "proc-macro2"
version = "1.0.36"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1"
dependencies = [
"unicode-xid",
]
@ -3413,9 +3438,9 @@ dependencies = [
[[package]]
name = "rayon"
version = "1.5.1"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221"
dependencies = [
"autocfg",
"crossbeam-deque 0.8.1",
@ -3425,14 +3450,13 @@ dependencies = [
[[package]]
name = "rayon-core"
version = "1.9.1"
version = "1.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4"
dependencies = [
"crossbeam-channel 0.5.1",
"crossbeam-deque 0.8.1",
"crossbeam-utils 0.8.5",
"lazy_static",
"num_cpus",
]
@ -3457,9 +3481,9 @@ dependencies = [
[[package]]
name = "regex"
version = "1.5.4"
version = "1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
dependencies = [
"aho-corasick",
"memchr",
@ -3517,9 +3541,9 @@ dependencies = [
[[package]]
name = "reqwest"
version = "0.11.9"
version = "0.11.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525"
checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb"
dependencies = [
"base64 0.13.0",
"bytes",
@ -3763,9 +3787,9 @@ dependencies = [
[[package]]
name = "rustls-pemfile"
version = "0.2.1"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9"
checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360"
dependencies = [
"base64 0.13.0",
]
@ -3889,9 +3913,9 @@ dependencies = [
[[package]]
name = "semver"
version = "1.0.6"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d"
checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4"
dependencies = [
"serde 1.0.130",
]
@ -3957,7 +3981,7 @@ version = "1.0.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
dependencies = [
"itoa",
"itoa 0.4.8",
"ryu",
"serde 1.0.130",
]
@ -3973,12 +3997,12 @@ dependencies = [
[[package]]
name = "serde_urlencoded"
version = "0.7.0"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
"itoa",
"itoa 1.0.1",
"ryu",
"serde 1.0.130",
]
@ -4135,9 +4159,9 @@ dependencies = [
[[package]]
name = "solang-parser"
version = "0.1.10"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06b8bfb6c910adbada563211b876b91a058791505e4cb646591b205fa817d01"
checksum = "e6b2ad9c159bd02219a59368133301e6195fdaa2b5d55c628ccdcd611d49235f"
dependencies = [
"lalrpop",
"lalrpop-util",
@ -4227,9 +4251,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "syn"
version = "1.0.86"
version = "1.0.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52"
dependencies = [
"proc-macro2",
"quote",
@ -4510,9 +4534,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
[[package]]
name = "tracing"
version = "0.1.31"
version = "0.1.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f"
checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09"
dependencies = [
"cfg-if 1.0.0",
"log",
@ -5055,9 +5079,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "winreg"
version = "0.7.0"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
dependencies = [
"winapi",
]

@ -80,6 +80,11 @@ impl Kathy {
let guard = outbox_lock.lock().await;
outbox.dispatch(&message).await?;
let count = outbox.count().await?;
if count > 1 {
outbox.create_checkpoint().await?;
}
drop(guard);
}
_ => {

@ -119,10 +119,20 @@ impl CheckpointRelayer {
);
self.prover_sync.update_from_batch(&batch)?;
self.inbox_contracts
match self
.inbox_contracts
.validator_manager
.submit_checkpoint(&latest_signed_checkpoint)
.await?;
.await
{
Ok(_) => (),
Err(err) => {
error!(checkpoint=?latest_signed_checkpoint, err=?err, "Checkpoint could not be submitted on-chain");
// Ignore errors as to not fail the process and just retry after some sleep
sleep(Duration::from_secs(self.submission_latency)).await;
return Ok(onchain_checkpoint_index);
}
}
self.inbox_checkpoint_gauge
.set(latest_signed_checkpoint.checkpoint.index as i64);
@ -163,64 +173,71 @@ impl CheckpointRelayer {
}
}
pub(crate) fn spawn(mut self) -> Instrumented<JoinHandle<Result<()>>> {
let span = info_span!("CheckpointRelayer");
tokio::spawn(async move {
let latest_inbox_checkpoint =
self.inbox_contracts.inbox.latest_checkpoint(None).await?;
let mut onchain_checkpoint_index = latest_inbox_checkpoint.index;
self.inbox_checkpoint_gauge
.set(onchain_checkpoint_index as i64);
let mut next_inbox_leaf_index = if onchain_checkpoint_index == 0 {
0
} else {
onchain_checkpoint_index + 1
};
loop {
sleep(Duration::from_secs(self.polling_interval)).await;
if let Some(signed_checkpoint_index) =
self.multisig_checkpoint_syncer.latest_index().await?
#[instrument(ret, err, skip(self), fields(inbox_name=self.inbox_contracts.inbox.name()), level = "info")]
async fn main_loop(mut self) -> Result<()> {
let latest_inbox_checkpoint = self.inbox_contracts.inbox.latest_checkpoint(None).await?;
let mut onchain_checkpoint_index = latest_inbox_checkpoint.index;
self.inbox_checkpoint_gauge
.set(onchain_checkpoint_index as i64);
let mut next_inbox_leaf_index = if onchain_checkpoint_index == 0 {
0
} else {
onchain_checkpoint_index + 1
};
info!(
onchain_checkpoint_index = onchain_checkpoint_index,
"Starting CheckpointRelayer"
);
loop {
sleep(Duration::from_secs(self.polling_interval)).await;
if let Some(signed_checkpoint_index) =
self.multisig_checkpoint_syncer.latest_index().await?
{
self.signed_checkpoint_gauge
.set(signed_checkpoint_index as i64);
if signed_checkpoint_index <= onchain_checkpoint_index {
debug!(
onchain = onchain_checkpoint_index,
signed = signed_checkpoint_index,
"Signed checkpoint matches known checkpoint on-chain, continue"
);
continue;
}
match self
.get_messages_between(next_inbox_leaf_index, signed_checkpoint_index)
.await?
{
self.signed_checkpoint_gauge
.set(signed_checkpoint_index as i64);
if signed_checkpoint_index <= onchain_checkpoint_index {
None => debug!("Couldn't fetch the relevant messages, retry this range"),
Some(messages) if messages.is_empty() => {
next_inbox_leaf_index = signed_checkpoint_index + 1;
debug!("New checkpoint does not include messages for inbox")
}
Some(messages) => {
next_inbox_leaf_index = signed_checkpoint_index + 1;
debug!(
onchain = onchain_checkpoint_index,
signed = signed_checkpoint_index,
"Signed checkpoint matches known checkpoint on-chain, continue"
len = messages.len(),
"Signed checkpoint allows for processing of new messages"
);
continue;
}
match self
.get_messages_between(next_inbox_leaf_index, signed_checkpoint_index)
.await?
{
None => debug!("Couldn't fetch the relevant messages, retry this range"),
Some(messages) if messages.is_empty() => {
next_inbox_leaf_index = signed_checkpoint_index + 1;
debug!("New checkpoint does not include messages for inbox")
}
Some(messages) => {
next_inbox_leaf_index = signed_checkpoint_index + 1;
debug!(
len = messages.len(),
"Signed checkpoint allows for processing of new messages"
);
onchain_checkpoint_index = self
.submit_checkpoint_and_messages(
onchain_checkpoint_index,
signed_checkpoint_index,
messages,
)
.await?;
}
onchain_checkpoint_index = self
.submit_checkpoint_and_messages(
onchain_checkpoint_index,
signed_checkpoint_index,
messages,
)
.await?;
}
}
}
})
.instrument(span)
}
}
pub(crate) fn spawn(self) -> Instrumented<JoinHandle<Result<()>>> {
let span = info_span!("CheckpointRelayer");
tokio::spawn(async move { self.main_loop().await }).instrument(span)
}
}

@ -76,7 +76,7 @@ impl MessageProcessor {
}
}
#[instrument(ret, err, skip(self), level = "debug")]
#[instrument(ret, err, skip(self), fields(inbox_name=self.inbox.name()), level = "debug")]
async fn try_processing_message(
&mut self,
message_leaf_index: u32,
@ -151,74 +151,90 @@ impl MessageProcessor {
}
}
pub(crate) fn spawn(mut self) -> Instrumented<JoinHandle<Result<()>>> {
let span = info_span!("MessageProcessor");
#[instrument(ret, err, skip(self), fields(inbox_name=self.inbox.name()), level = "info")]
async fn main_loop(mut self) -> Result<()> {
let mut message_leaf_index = 0;
tokio::spawn(async move {
loop {
self.processor_loop_gauge.set(message_leaf_index as i64);
self.retry_queue_length_gauge.set(self.retry_queue.len() as i64);
if self.db.retrieve_leaf_processing_status(message_leaf_index)?.is_some() {
message_leaf_index += 1;
continue
}
// Sleep to not fire too many view calls in a short duration
sleep(Duration::from_millis(20)).await;
loop {
self.processor_loop_gauge.set(message_leaf_index as i64);
self.retry_queue_length_gauge
.set(self.retry_queue.len() as i64);
if self
.db
.retrieve_leaf_processing_status(message_leaf_index)?
.is_some()
{
message_leaf_index += 1;
continue;
}
// Sleep to not fire too many view calls in a short duration
sleep(Duration::from_millis(20)).await;
match self.db.leaf_by_leaf_index(message_leaf_index)? {
Some(_) => {
// We have unseen messages to process
info!(
destination = self.inbox.local_domain(),
leaf_index=message_leaf_index,
"Process fresh leaf"
);
match self.try_processing_message(message_leaf_index).await? {
MessageProcessingStatus::Processed => {
self.processed_gauge.set(message_leaf_index as i64);
message_leaf_index += 1
},
MessageProcessingStatus::NotYetCheckpointed => {
// If we don't have an up to date checkpoint, sleep and try again
sleep(Duration::from_secs(self.polling_interval)).await;
}
MessageProcessingStatus::NotDestinedForInbox => message_leaf_index += 1,
MessageProcessingStatus::Error => {
warn!(destination = self.inbox.local_domain(), leaf_index=message_leaf_index, "Message could not be processed, queue for retry");
self.retry_queue
.push(MessageToRetry {
leaf_index: message_leaf_index,
time_to_retry: Reverse(Instant::now()),
retries: 0,
});
message_leaf_index += 1;
}
match self.db.leaf_by_leaf_index(message_leaf_index)? {
Some(_) => {
// We have unseen messages to process
info!(
destination = self.inbox.local_domain(),
leaf_index = message_leaf_index,
"Process fresh leaf"
);
match self.try_processing_message(message_leaf_index).await? {
MessageProcessingStatus::Processed => {
self.processed_gauge.set(message_leaf_index as i64);
message_leaf_index += 1
}
MessageProcessingStatus::NotYetCheckpointed => {
// If we don't have an up to date checkpoint, sleep and try again
sleep(Duration::from_secs(self.polling_interval)).await;
}
MessageProcessingStatus::NotDestinedForInbox => message_leaf_index += 1,
MessageProcessingStatus::Error => {
warn!(
destination = self.inbox.local_domain(),
leaf_index = message_leaf_index,
"Message could not be processed, queue for retry"
);
self.retry_queue.push(MessageToRetry {
leaf_index: message_leaf_index,
time_to_retry: Reverse(Instant::now()),
retries: 0,
});
message_leaf_index += 1;
}
}
None => {
// See if we have messages to retry
if let Some(MessageToRetry{ time_to_retry, .. }) = self.retry_queue.peek() {
// Since we use Reverse, we want time_to_retry to be smaller
if time_to_retry < &Reverse(Instant::now()) {
continue
}
}
None => {
// See if we have messages to retry
if let Some(MessageToRetry { time_to_retry, .. }) = self.retry_queue.peek() {
// Since we use Reverse, we want time_to_retry to be smaller
if time_to_retry < &Reverse(Instant::now()) {
continue;
}
match self.retry_queue.pop() {
Some(MessageToRetry { leaf_index, retries, .. }) => {
info!(
destination = self.inbox.local_domain(),
leaf_index = leaf_index,
retries = retries,
retry_queue_length = self.retry_queue.len(),
"Retry processing of message"
);
match self.try_processing_message(leaf_index).await? {
MessageProcessingStatus::NotDestinedForInbox | MessageProcessingStatus::NotYetCheckpointed => {
error!(leaf_index = leaf_index, "Somehow we tried to retry a message that cant be retried");
bail!("Somehow we tried to retry a message that cant be retried")
}
match self.retry_queue.pop() {
Some(MessageToRetry {
leaf_index,
retries,
..
}) => {
info!(
destination = self.inbox.local_domain(),
leaf_index = leaf_index,
retries = retries,
retry_queue_length = self.retry_queue.len(),
"Retry processing of message"
);
match self.try_processing_message(leaf_index).await? {
MessageProcessingStatus::NotDestinedForInbox
| MessageProcessingStatus::NotYetCheckpointed => {
error!(
leaf_index = leaf_index,
"Somehow we tried to retry a message that cant be retried"
);
bail!(
"Somehow we tried to retry a message that cant be retried"
)
}
MessageProcessingStatus::Processed => {},
MessageProcessingStatus::Processed => {}
MessageProcessingStatus::Error => {
warn!(
destination = self.inbox.local_domain(),
@ -229,32 +245,39 @@ impl MessageProcessor {
);
if retries >= self.max_retries {
error!(
destination = self.inbox.local_domain(),
leaf_index = leaf_index,
retries = retries,
retry_queue_length = self.retry_queue.len(),
"Maximum number of retries exceeded for processing message"
);
continue
destination = self.inbox.local_domain(),
leaf_index = leaf_index,
retries = retries,
retry_queue_length = self.retry_queue.len(),
"Maximum number of retries exceeded for processing message"
);
continue;
}
let retries = retries + 1;
let time_to_retry = Reverse(Instant::now() + Duration::from_secs(2u64.pow(retries as u32)));
self.retry_queue
.push(MessageToRetry{ leaf_index, time_to_retry, retries});
},
}
},
None => {
// Nothing to do, just sleep
sleep(Duration::from_secs(1)).await;
let time_to_retry = Reverse(
Instant::now()
+ Duration::from_secs(2u64.pow(retries as u32)),
);
self.retry_queue.push(MessageToRetry {
leaf_index,
time_to_retry,
retries,
});
}
}
}
None => {
// Nothing to do, just sleep
sleep(Duration::from_secs(1)).await;
}
}
}
}
})
.instrument(span)
}
}
pub(crate) fn spawn(self) -> Instrumented<JoinHandle<Result<()>>> {
let span = info_span!("MessageProcessor");
tokio::spawn(async move { self.main_loop().await }).instrument(span)
}
}

@ -37,6 +37,8 @@ impl ValidatorSubmitter {
let reorg_period = Some(self.reorg_period);
tokio::spawn(async move {
let mut current_index = self.checkpoint_syncer.latest_index().await?.unwrap_or_default();
info!(current_index=current_index, "Starting Validator");
loop {
sleep(Duration::from_secs(self.interval)).await;

@ -97,7 +97,7 @@ macro_rules! boxed_trait {
}};
(@http $url:expr, $($tail:tt)*) => {{
let provider =
Arc::new(ethers::providers::Provider::<ethers::providers::Http>::try_from($url.as_ref())?);
Arc::new(ethers::providers::Provider::<ethers::providers::Http>::try_from($url)?);
boxed_trait!(@finish provider, $($tail)*)
}};
($name:ident, $abi:ident, $trait:ident, $($n:ident:$t:ty),*) => {

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x68311418D79fE8d96599384ED767d225635d88a8",
"validatorManager": "0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x68311418D79fE8d96599384ED767d225635d88a8",
"validatorManager": "0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x1D5EbC3e15e9ECDe0e3530C85899556797eeaea5",
"validatorManager": "0x304cAb315c93B87AAdb2B826A791b2c1Bf749996"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
}
},
"outbox": {
"addresses": {
"outbox": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03"
},
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xe0B988062A0C6492177d64823Ab95a9c256c2a5F",
"validatorManager": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03",
"validatorManager": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03",
"validatorManager": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69",
"validatorManager": "0x5d56B8a669F50193b54319442c6EEE5edD662381"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xc76E477437065093D353b7d56c81ff54D167B0Ab",
"validatorManager": "0xa3AB7E6cE24E6293bD5320A53329Ef2f4DE73fCA"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"validatorManager": "0x1b33611fCc073aB0737011d5512EF673Bff74962"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"validatorManager": "0x1b33611fCc073aB0737011d5512EF673Bff74962"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x07009DA2249c388aD0f416a235AfE90D784e1aAc",
"validatorManager": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x51A0a100e7BC63Ea7821A3a023B6F17fb94FF011",
"validatorManager": "0xb94F96D398eA5BAB5CA528EE9Fdc19afaA825818"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8",
"validatorManager": "0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8",
"validatorManager": "0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x3C5154a193D6e2955650f9305c8d80c18C814A68",
"validatorManager": "0x7914A3349107A7295Bbf2374db5A973d73D1b324"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xae7a78916Ba4c507aCB2F0e474ace545Ff4bF841",
"validatorManager": "0x66b71A4e18FbE09a6977A6520B47fEDdffA82a1c"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C",
"validatorManager": "0x863E8c26621c52ACa1849C53500606e73BA272F0"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xef48bd850E5827B96B55C4D28FB32Bbaa73616F2",
"validatorManager": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE"
},
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x783c4a0bB6663359281aD4a637D5af68F83ae213",
"validatorManager": "0x1b33611fCc073aB0737011d5512EF673Bff74962"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C",
"validatorManager": "0x863E8c26621c52ACa1849C53500606e73BA272F0"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x0526E47C49742C15F8817ef8cf0d8FFc72139D4F",
"validatorManager": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE"
},
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xFCc63b537e70652A280c4E7883C5BB5a1700e897",
"validatorManager": "0x04438ef7622f5412f82915F59caD4f704C61eA48"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD",
"validatorManager": "0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD",
"validatorManager": "0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x33dB966328Ea213b0f76eF96CA368AB37779F065"
},
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x628BC518ED1e0E8C6cbcD574EbA0ee29e7F6943E",
"validatorManager": "0xA2cf52064c921C11adCd83588CbEa08cc3bfF5d8"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff",
"validatorManager": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff",
"validatorManager": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7",
"validatorManager": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -33,16 +33,16 @@ spec:
{{- if eq .keyConfig.type "hexKey" }}
- secretKey: {{ printf "%s_signer_key" .name }}
remoteRef:
key: {{ printf "abacus-%s-key-relayer" $.Values.abacus.runEnv }}
key: {{ printf "abacus-%s-key-%s-relayer" $.Values.abacus.runEnv $.Values.abacus.outboxChain.name }}
property: privateKey
{{- end }}
{{- end }}
{{- if .Values.abacus.relayer.aws }}
- secretKey: aws_access_key_id
remoteRef:
key: {{ printf "abacus-%s-relayer-aws-access-key-id" .Values.abacus.runEnv }}
key: {{ printf "abacus-%s-%s-relayer-aws-access-key-id" .Values.abacus.runEnv .Values.abacus.outboxChain.name }}
- secretKey: aws_secret_access_key
remoteRef:
key: {{ printf "abacus-%s-relayer-aws-secret-access-key" .Values.abacus.runEnv }}
key: {{ printf "abacus-%s-%s-relayer-aws-secret-access-key" .Values.abacus.runEnv .Values.abacus.outboxChain.name }}
{{- end }}
{{- end }}

@ -80,8 +80,8 @@ abacus:
name: ""
resources:
requests:
cpu: 250m
memory: 1Gi
cpu: 100m
memory: 250m
# -- Transaction Signing keys for home and replica(s)
signer: {}
# -- How long to wait between checking for updates

@ -134,7 +134,7 @@ impl ProveCommand {
let provider = self
.rpc
.as_ref()
.map(|rpc| Provider::<Http>::try_from(rpc.as_ref()))
.map(Provider::<Http>::try_from)
.transpose()?
.unwrap_or_else(|| rpc::fetch_rpc_connection(destination).unwrap());

@ -145,7 +145,7 @@ async fn _send_tx(signer: &AwsSigner<'_>, opts: &Opts) -> Result<()> {
SubCommands::Info(_) => unreachable!(),
};
let provider = Provider::<Http>::try_from(tx.rpc.as_ref())?;
let provider = Provider::<Http>::try_from(tx.rpc.clone())?;
let tx_req = prep_tx_request(tx);

@ -0,0 +1,50 @@
import { AgentConfig } from '../../../src/config';
import { ENVIRONMENTS_ENUM } from '../../../src/config/environment';
import { TestnetNetworks, domainNames } from './domains';
import { validators } from './validators';
export const agent: AgentConfig<TestnetNetworks> = {
environment: ENVIRONMENTS_ENUM.Testnet,
namespace: ENVIRONMENTS_ENUM.Testnet,
runEnv: ENVIRONMENTS_ENUM.Testnet,
docker: {
repo: 'gcr.io/abacus-labs-dev/abacus-agent',
tag: 'b7ea3edee7d8d6557ae2ba830c2972586d4687fa',
},
aws: {
region: 'us-east-1',
},
domainNames,
validatorSets: validators,
validator: {
default: {
interval: 5,
reorgPeriod: 1,
},
chainOverrides: {
optimismkovan: {
interval: 5,
reorgPeriod: 2,
},
},
},
relayer: {
default: {
pollingInterval: 5,
submissionLatency: 10,
maxRetries: 10,
relayerMessageProcessing: true,
},
},
// kathy: {
// default: {
// interval: 30,
// },
// chainOverrides: {
// kovan: {
// interval: 120,
// },
// },
// },
};

@ -0,0 +1,70 @@
import { CoreConfig } from '../../../src/core';
export const core: CoreConfig = {
validatorManagers: {
alfajores: {
validators: [
'0x5274db49971f14457fb1b1743012e2527804dc73',
'0x636ca13eb829880539c0078ba9d53214b65603a2',
'0x2f5f8c4bb89dfc1c4e905f7e3cd35294b62a572b',
],
threshold: 2,
},
kovan: {
validators: [
'0x84b998a059719d4476959ffbe0a0402ec65a7c62',
'0x5aaf0bbbc15f13bcb5f4b2bff5e2f935f4360bb5',
'0x3d12f6d395a6532de3d45bd668de43685cb500c3',
],
threshold: 2,
},
fuji: {
validators: [
'0x57d4976751978df23be86ec42e27a5749b1beeda',
'0x5149b863416de4fae9e1cb63c9564414f4f0bb18',
'0xd1ea680f4777eb31569aea1768eaf83bf5587a98',
],
threshold: 2,
},
mumbai: {
validators: [
'0x962a63cf73c8beef63ecd753bc57c80241368818',
'0x636d98ed1cd8e5190900ed53a71e8da0076c2672',
'0xf9e86b19152cc8437794d01d4aec8c8a4eb34b20',
],
threshold: 2,
},
bsctestnet: {
validators: [
'0x71a66da2ad833efca67b2257b45f6c6ba11e3816',
'0x7306663d18af55294dfd44782fa5c7e16d94485f',
'0x19cd5f316993ad15d1ac569cd4e70cbc5e1682ac',
],
threshold: 2,
},
arbitrumrinkeby: {
validators: [
'0x4f78b649646b50b1ff41984cde8b7f4f36e1071d',
'0xf71e75225daaf19135b316c76a9105fbdce4b70a',
'0xded3da1c63c37499c627272f46d66e0e46a5bd07',
],
threshold: 2,
},
optimismkovan: {
validators: [
'0x938b35471ff2e968a125f5f3fc02ede89f7b90c0',
'0x3b8f4217153e9bb9ae3aa8d314269dd06584081d',
'0x2a58a8982a06fbb3757d1c614c6f3ab733d93e6d',
],
threshold: 2,
},
auroratestnet: {
validators: [
'0x3dd10f59ec2f18441eb0a3feca489e6d74752260',
'0x10ac12f07488ea10371071fccc6a7a1e2733fe35',
'0xdf0154233855528a114b4bd640a3fde2020c3b3b',
],
threshold: 2,
},
},
};

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x68311418D79fE8d96599384ED767d225635d88a8",
"validatorManager": "0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x68311418D79fE8d96599384ED767d225635d88a8",
"validatorManager": "0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x1D5EbC3e15e9ECDe0e3530C85899556797eeaea5",
"validatorManager": "0x304cAb315c93B87AAdb2B826A791b2c1Bf749996"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xB08d78F439e55D02C398519eef61606A5926245F",
"validatorManager": "0x589C201a07c26b4725A4A829d772f24423da480B"
}
}
},
"outbox": {
"addresses": {
"outbox": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03"
},
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xe0B988062A0C6492177d64823Ab95a9c256c2a5F",
"validatorManager": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03",
"validatorManager": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03",
"validatorManager": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69",
"validatorManager": "0x5d56B8a669F50193b54319442c6EEE5edD662381"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xc76E477437065093D353b7d56c81ff54D167B0Ab",
"validatorManager": "0xa3AB7E6cE24E6293bD5320A53329Ef2f4DE73fCA"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"validatorManager": "0x1b33611fCc073aB0737011d5512EF673Bff74962"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"validatorManager": "0x1b33611fCc073aB0737011d5512EF673Bff74962"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x07009DA2249c388aD0f416a235AfE90D784e1aAc",
"validatorManager": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x51A0a100e7BC63Ea7821A3a023B6F17fb94FF011",
"validatorManager": "0xb94F96D398eA5BAB5CA528EE9Fdc19afaA825818"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8",
"validatorManager": "0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8",
"validatorManager": "0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x3C5154a193D6e2955650f9305c8d80c18C814A68",
"validatorManager": "0x7914A3349107A7295Bbf2374db5A973d73D1b324"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"validatorManager": "0xd785272D240B07719e417622cbd2cfA0E584d1bd"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xae7a78916Ba4c507aCB2F0e474ace545Ff4bF841",
"validatorManager": "0x66b71A4e18FbE09a6977A6520B47fEDdffA82a1c"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C",
"validatorManager": "0x863E8c26621c52ACa1849C53500606e73BA272F0"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xef48bd850E5827B96B55C4D28FB32Bbaa73616F2",
"validatorManager": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"validatorManager": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE"
},
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x783c4a0bB6663359281aD4a637D5af68F83ae213",
"validatorManager": "0x1b33611fCc073aB0737011d5512EF673Bff74962"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C",
"validatorManager": "0x863E8c26621c52ACa1849C53500606e73BA272F0"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x0526E47C49742C15F8817ef8cf0d8FFc72139D4F",
"validatorManager": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"validatorManager": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE"
},
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xFCc63b537e70652A280c4E7883C5BB5a1700e897",
"validatorManager": "0x04438ef7622f5412f82915F59caD4f704C61eA48"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD",
"validatorManager": "0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD",
"validatorManager": "0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
},
"optimismkovan": {
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"validatorManager": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x33dB966328Ea213b0f76eF96CA368AB37779F065"
},
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,114 @@
{
"environment": "testnet",
"signers": {},
"inboxes": {
"alfajores": {
"domain": "1000",
"name": "alfajores",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x628BC518ED1e0E8C6cbcD574EbA0ee29e7F6943E",
"validatorManager": "0xA2cf52064c921C11adCd83588CbEa08cc3bfF5d8"
}
},
"kovan": {
"domain": "3000",
"name": "kovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff",
"validatorManager": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33"
}
},
"fuji": {
"domain": "43113",
"name": "fuji",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff",
"validatorManager": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33"
}
},
"mumbai": {
"domain": "80001",
"name": "mumbai",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7",
"validatorManager": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A"
}
},
"bsctestnet": {
"domain": "1651715444",
"name": "bsctestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
},
"arbitrumrinkeby": {
"domain": "1634872690",
"name": "arbitrumrinkeby",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"validatorManager": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8"
}
},
"auroratestnet": {
"domain": "1635069300",
"name": "auroratestnet",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
},
"addresses": {
"inbox": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"validatorManager": "0x527768930D889662Fe7ACF64294871e86e4C2381"
}
}
},
"outbox": {
"addresses": {
"outbox": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37"
},
"domain": "1869622635",
"name": "optimismkovan",
"rpcStyle": "ethereum",
"connection": {
"type": "http",
"url": ""
}
},
"tracing": {
"level": "debug",
"fmt": "json"
},
"db": "db_path"
}

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279",
"constructorArguments": [1000],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8",
"constructorArguments": [
"0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279",
"0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03",
"constructorArguments": [
"0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8",
"0xc4d66de80000000000000000000000005821f3b6ee05f3dc62b43b74ab1c8f8e6904b1c8"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0x28B02B97a850872C4D33C3E024fab6499ad96564",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x1b33611fCc073aB0737011d5512EF673Bff74962",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"constructorArguments": [1000],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"constructorArguments": [
"0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x783c4a0bB6663359281aD4a637D5af68F83ae213",
"constructorArguments": [
"0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000001b33611fcc073ab0737011d5512ef673bff7496200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x66b71A4e18FbE09a6977A6520B47fEDdffA82a1c",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xae7a78916Ba4c507aCB2F0e474ace545Ff4bF841",
"constructorArguments": [
"0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000000a86900000000000000000000000066b71a4e18fbe09a6977a6520b47feddffa82a1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x04438ef7622f5412f82915F59caD4f704C61eA48",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xFCc63b537e70652A280c4E7883C5BB5a1700e897",
"constructorArguments": [
"0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000001388100000000000000000000000004438ef7622f5412f82915f59cad4f704c61ea4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xb94F96D398eA5BAB5CA528EE9Fdc19afaA825818",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x51A0a100e7BC63Ea7821A3a023B6F17fb94FF011",
"constructorArguments": [
"0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000062732d74000000000000000000000000b94f96d398ea5bab5ca528ee9fdc19afaa82581800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xe0B988062A0C6492177d64823Ab95a9c256c2a5F",
"constructorArguments": [
"0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061722d72000000000000000000000000b057fb841027a8554521dccdec3c3474cac99ab500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xA2cf52064c921C11adCd83588CbEa08cc3bfF5d8",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x628BC518ED1e0E8C6cbcD574EbA0ee29e7F6943E",
"constructorArguments": [
"0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000006f702d6b000000000000000000000000a2cf52064c921c11adcd83588cbea08cc3bff5d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xa3AB7E6cE24E6293bD5320A53329Ef2f4DE73fCA",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xc76E477437065093D353b7d56c81ff54D167B0Ab",
"constructorArguments": [
"0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061752d74000000000000000000000000a3ab7e6ce24e6293bd5320a53329ef2f4de73fca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0xfc6e546510dC9d76057F1f76633FCFfC188CB213",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"constructorArguments": [1634872690],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"constructorArguments": [
"0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37",
"constructorArguments": [
"0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"0xc4d66de8000000000000000000000000fc6e546510dc9d76057f1f76633fcffc188cb213"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0x44b764045BfDC68517e10e783E69B376cef196B2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x589C201a07c26b4725A4A829d772f24423da480B",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"constructorArguments": [1634872690],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"constructorArguments": [
"0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xB08d78F439e55D02C398519eef61606A5926245F",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b700000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000589c201a07c26b4725a4a829d772f24423da480b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000833dad7ff66884389d5f0cecba446ffaa7d2837e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000000a8690000000000000000000000007d498740a4572f2b5c6b0a1ba9d1d9dbe207e89e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000013881000000000000000000000000f7f0dab0bece4498dac7eb616e288809d449937100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xd785272D240B07719e417622cbd2cfA0E584d1bd",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000062732d74000000000000000000000000d785272d240b07719e417622cbd2cfa0e584d1bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000006f702d6b000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x527768930D889662Fe7ACF64294871e86e4C2381",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061752d74000000000000000000000000527768930d889662fe7acf64294871e86e4c238100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0xfc6e546510dC9d76057F1f76633FCFfC188CB213",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"constructorArguments": [1635069300],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"constructorArguments": [
"0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37",
"constructorArguments": [
"0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"0xc4d66de8000000000000000000000000fc6e546510dc9d76057f1f76633fcffc188cb213"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0x44b764045BfDC68517e10e783E69B376cef196B2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x589C201a07c26b4725A4A829d772f24423da480B",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"constructorArguments": [1635069300],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"constructorArguments": [
"0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xB08d78F439e55D02C398519eef61606A5926245F",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b700000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000589c201a07c26b4725a4a829d772f24423da480b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000833dad7ff66884389d5f0cecba446ffaa7d2837e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000000a8690000000000000000000000007d498740a4572f2b5c6b0a1ba9d1d9dbe207e89e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000013881000000000000000000000000f7f0dab0bece4498dac7eb616e288809d449937100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xd785272D240B07719e417622cbd2cfA0E584d1bd",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000062732d74000000000000000000000000d785272d240b07719e417622cbd2cfa0e584d1bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061722d72000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x527768930D889662Fe7ACF64294871e86e4C2381",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000006f702d6b000000000000000000000000527768930d889662fe7acf64294871e86e4c238100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0xfc6e546510dC9d76057F1f76633FCFfC188CB213",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"constructorArguments": [1651715444],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"constructorArguments": [
"0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37",
"constructorArguments": [
"0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"0xc4d66de8000000000000000000000000fc6e546510dc9d76057f1f76633fcffc188cb213"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0x44b764045BfDC68517e10e783E69B376cef196B2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x589C201a07c26b4725A4A829d772f24423da480B",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"constructorArguments": [1651715444],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"constructorArguments": [
"0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xB08d78F439e55D02C398519eef61606A5926245F",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b700000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000589c201a07c26b4725a4a829d772f24423da480b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000833dad7ff66884389d5f0cecba446ffaa7d2837e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000000a8690000000000000000000000007d498740a4572f2b5c6b0a1ba9d1d9dbe207e89e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000013881000000000000000000000000f7f0dab0bece4498dac7eb616e288809d449937100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xd785272D240B07719e417622cbd2cfA0E584d1bd",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061722d72000000000000000000000000d785272d240b07719e417622cbd2cfa0e584d1bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000006f702d6b000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x527768930D889662Fe7ACF64294871e86e4C2381",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061752d74000000000000000000000000527768930d889662fe7acf64294871e86e4c238100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7",
"constructorArguments": [43113],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0x4926a10788306D84202A2aDbd290b7743146Cc17",
"constructorArguments": [
"0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7",
"0xcf5BaaF976C80a66Fa7839715C45788f60041A33"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE",
"constructorArguments": [
"0x4926a10788306D84202A2aDbd290b7743146Cc17",
"0xc4d66de800000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0x07009DA2249c388aD0f416a235AfE90D784e1aAc",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0xF7561c34f17A32D5620583A3397C304e7038a7F6",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450",
"constructorArguments": [43113],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"constructorArguments": [
"0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450",
"0xcf5BaaF976C80a66Fa7839715C45788f60041A33"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x68311418D79fE8d96599384ED767d225635d88a8",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000005ce550e14b82a9f32a0aaf9efc4fce548d8a0b3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x863E8c26621c52ACa1849C53500606e73BA272F0",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000013881000000000000000000000000ab9b273366d794b7f80b4378bc8aaca75c6178e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000062732d7400000000000000000000000019be55d859368e02d7b9c00803eb677bdc1359bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061722d72000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000006f702d6b000000000000000000000000433f7d6d0cb9eb8ff2902ad01c1bed6c09934a3300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x1b33611fCc073aB0737011d5512EF673Bff74962",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061752d740000000000000000000000001b33611fcc073ab0737011d5512ef673bff7496200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0xcf5BaaF976C80a66Fa7839715C45788f60041A33",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7",
"constructorArguments": [3000],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0x4926a10788306D84202A2aDbd290b7743146Cc17",
"constructorArguments": [
"0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7",
"0xcf5BaaF976C80a66Fa7839715C45788f60041A33"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE",
"constructorArguments": [
"0x4926a10788306D84202A2aDbd290b7743146Cc17",
"0xc4d66de800000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0x07009DA2249c388aD0f416a235AfE90D784e1aAc",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0xF7561c34f17A32D5620583A3397C304e7038a7F6",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450",
"constructorArguments": [3000],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"constructorArguments": [
"0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450",
"0xcf5BaaF976C80a66Fa7839715C45788f60041A33"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x68311418D79fE8d96599384ED767d225635d88a8",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000005ce550e14b82a9f32a0aaf9efc4fce548d8a0b3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x863E8c26621c52ACa1849C53500606e73BA272F0",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000000a869000000000000000000000000863e8c26621c52aca1849c53500606e73ba272f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x86fb9F1c124fB20ff130C41a79a432F770f67AFD",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000013881000000000000000000000000ab9b273366d794b7f80b4378bc8aaca75c6178e200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000062732d7400000000000000000000000019be55d859368e02d7b9c00803eb677bdc1359bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061722d72000000000000000000000000c756cfc1b7d0d4646589edf10ed54b201237f5e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000006f702d6b000000000000000000000000433f7d6d0cb9eb8ff2902ad01c1bed6c09934a3300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x1b33611fCc073aB0737011d5512EF673Bff74962",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C",
"constructorArguments": [
"0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061752d740000000000000000000000001b33611fcc073ab0737011d5512ef673bff7496200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0x6966b0E55883d49BFB24539356a2f8A673E02039",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0x54148470292C24345fb828B003461a9444414517",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x589C201a07c26b4725A4A829d772f24423da480B",
"constructorArguments": [80001],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"constructorArguments": [
"0x589C201a07c26b4725A4A829d772f24423da480B",
"0x6966b0E55883d49BFB24539356a2f8A673E02039"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"constructorArguments": [
"0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"0xc4d66de800000000000000000000000054148470292c24345fb828b003461a9444414517"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0xB08d78F439e55D02C398519eef61606A5926245F",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0x46f7C5D896bbeC89bE1B19e4485e59b4Be49e9Cc",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x304cAb315c93B87AAdb2B826A791b2c1Bf749996",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E",
"constructorArguments": [80001],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"constructorArguments": [
"0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E",
"0x6966b0E55883d49BFB24539356a2f8A673E02039"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x1D5EbC3e15e9ECDe0e3530C85899556797eeaea5",
"constructorArguments": [
"0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"0xe7e7a7b700000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000304cab315c93b87aadb2b826a791b2c1bf74999600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x0526E47C49742C15F8817ef8cf0d8FFc72139D4F",
"constructorArguments": [
"0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000fc8d0d2e15a36f1a3f3ae3cb127b706c1f23aadc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xef48bd850E5827B96B55C4D28FB32Bbaa73616F2",
"constructorArguments": [
"0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000000a869000000000000000000000000666a24f62f7a97ba33c151776eb3d9441a059eb800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x3C5154a193D6e2955650f9305c8d80c18C814A68",
"constructorArguments": [
"0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000062732d740000000000000000000000007914a3349107a7295bbf2374db5a973d73d1b32400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69",
"constructorArguments": [
"0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061722d720000000000000000000000005d56b8a669f50193b54319442c6eee5edd66238100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x58483b754Abb1E8947BE63d6b95DF75b8249543A",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7",
"constructorArguments": [
"0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000006f702d6b00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x07009DA2249c388aD0f416a235AfE90D784e1aAc",
"constructorArguments": [
"0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061752d7400000000000000000000000098aae089cad930c64a76dd2247a2ac5773a4b8ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,234 @@
[
{
"name": "UpgradeBeaconController",
"address": "0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8",
"constructorArguments": [],
"isProxy": false
},
{
"name": "OutboxValidatorManager",
"address": "0xfc6e546510dC9d76057F1f76633FCFfC188CB213",
"constructorArguments": [
1869622635,
[
"0x938B35471FF2e968A125F5F3Fc02eDe89F7b90c0",
"0x3B8F4217153e9BB9ae3aA8d314269DD06584081D",
"0x2a58A8982A06FBb3757D1C614c6F3AB733D93e6D"
],
2
],
"isProxy": false
},
{
"name": "Outbox Implementation",
"address": "0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"constructorArguments": [1869622635],
"isProxy": false
},
{
"name": "Outbox UpgradeBeacon",
"address": "0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"constructorArguments": [
"0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Outbox Proxy",
"address": "0x16B710b86CAd07E6F1C531861a16F5feC29dba37",
"constructorArguments": [
"0xeb6f11189197223c656807a83B0DD374f9A6dF44",
"0xc4d66de8000000000000000000000000fc6e546510dc9d76057f1f76633fcffc188cb213"
],
"isProxy": true
},
{
"name": "InterchainGasPaymaster",
"address": "0x44b764045BfDC68517e10e783E69B376cef196B2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "AbacusConnectionManager",
"address": "0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2",
"constructorArguments": [],
"isProxy": false
},
{
"name": "InboxValidatorManager",
"address": "0x589C201a07c26b4725A4A829d772f24423da480B",
"constructorArguments": [
1000,
[
"0x5274Db49971f14457FB1B1743012e2527804Dc73",
"0x636CA13eB829880539c0078Ba9d53214b65603a2",
"0x2F5f8c4Bb89dFC1c4E905f7e3CD35294B62a572B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Implementation",
"address": "0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"constructorArguments": [1869622635],
"isProxy": false
},
{
"name": "Inbox UpgradeBeacon",
"address": "0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"constructorArguments": [
"0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD",
"0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8"
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xB08d78F439e55D02C398519eef61606A5926245F",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b700000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000589c201a07c26b4725a4a829d772f24423da480b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e",
"constructorArguments": [
3000,
[
"0x84B998A059719d4476959FfbE0A0402EC65A7c62",
"0x5aaf0BBBc15f13BcB5f4B2BFf5E2f935F4360bB5",
"0x3d12F6D395A6532De3D45bd668dE43685cb500c3"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xD3d062a5dcBA85ae863618d4c264d2358300c283",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000833dad7ff66884389d5f0cecba446ffaa7d2837e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E",
"constructorArguments": [
43113,
[
"0x57D4976751978Df23Be86Ec42E27a5749b1BEEDA",
"0x5149B863416DE4faE9e1CB63c9564414f4f0BB18",
"0xd1eA680f4777eb31569AeA1768eAF83bf5587A98"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7FE7EA170cf08A25C2ff315814D96D93C311E692",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b7000000000000000000000000000000000000000000000000000000000000a8690000000000000000000000007d498740a4572f2b5c6b0a1ba9d1d9dbe207e89e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xF7F0DaB0BECE4498dAc7eb616e288809D4499371",
"constructorArguments": [
80001,
[
"0x962a63CF73C8bEeF63Ecd753bC57C80241368818",
"0x636d98ED1Cd8e5190900ed53A71E8DA0076c2672",
"0xF9e86B19152CC8437794D01D4Aec8c8a4eb34B20"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000000013881000000000000000000000000f7f0dab0bece4498dac7eb616e288809d449937100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0xd785272D240B07719e417622cbd2cfA0E584d1bd",
"constructorArguments": [
1651715444,
[
"0x71A66DA2aD833eFCA67b2257B45F6C6BA11e3816",
"0x7306663d18AF55294DFD44782FA5c7E16d94485F",
"0x19cd5f316993ad15d1ac569cd4e70cbc5e1682AC"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x666a24F62f7A97BA33c151776Eb3D9441a059eB8",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000062732d74000000000000000000000000d785272d240b07719e417622cbd2cfa0e584d1bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8",
"constructorArguments": [
1634872690,
[
"0x4f78B649646B50b1ff41984cDe8B7f4F36e1071D",
"0xF71E75225DAaf19135b316c76A9105FBdCE4B70A",
"0xDeD3da1c63C37499c627272F46d66e0e46A5BD07"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x7914A3349107A7295Bbf2374db5A973d73D1b324",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061722d72000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
},
{
"name": "InboxValidatorManager",
"address": "0x527768930D889662Fe7ACF64294871e86e4C2381",
"constructorArguments": [
1635069300,
[
"0x3dd10F59Ec2f18441Eb0A3fECa489E6D74752260",
"0x10AC12F07488EA10371071fCCC6a7a1E2733fE35",
"0xdf0154233855528A114b4bd640a3FDE2020c3b3B"
],
2
],
"isProxy": false
},
{
"name": "Inbox Proxy",
"address": "0x5d56B8a669F50193b54319442c6EEE5edD662381",
"constructorArguments": [
"0x33dB966328Ea213b0f76eF96CA368AB37779F065",
"0xe7e7a7b70000000000000000000000000000000000000000000000000000000061752d74000000000000000000000000527768930d889662fe7acf64294871e86e4c238100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
],
"isProxy": true
}
]

@ -0,0 +1,38 @@
import { registerDomains } from '@abacus-network/deploy';
import { MultiProvider } from '@abacus-network/sdk';
import { fetchSigner } from '../../../src/config/chain';
import { ENVIRONMENTS_ENUM } from '../../../src/config/environment';
import { configs } from '../../networks/testnets';
export type TestnetNetworks =
| 'alfajores'
| 'kovan'
| 'fuji'
| 'mumbai'
| 'bsctestnet'
| 'arbitrumrinkeby'
| 'optimismkovan'
| 'auroratestnet';
export const domainNames: TestnetNetworks[] = [
'alfajores',
'kovan',
'fuji',
'mumbai',
'bsctestnet',
'arbitrumrinkeby',
'optimismkovan',
'auroratestnet',
];
export const registerMultiProvider = async (multiProvider: MultiProvider) => {
registerDomains(domainNames, configs, multiProvider);
await Promise.all(
domainNames.map(async (name) => {
const signer = await fetchSigner(ENVIRONMENTS_ENUM.Testnet, name);
multiProvider.registerSigner(name, signer);
}),
);
};

@ -0,0 +1,32 @@
import { GovernanceConfig } from '../../../src/governance';
export const governance: GovernanceConfig = {
recoveryTimelock: 180,
addresses: {
alfajores: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
governor: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
kovan: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
fuji: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
mumbai: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
bsctestnet: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
arbitrumrinkeby: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
optimismkovan: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
auroratestnet: {
recoveryManager: '0xfaD1C94469700833717Fa8a3017278BC1cA8031C',
},
},
};

@ -0,0 +1,5 @@
export { agent } from './agent';
export { core } from './core';
export { domainNames, registerMultiProvider } from './domains';
export { governance } from './governance';
export { infrastructure } from './infrastructure';

@ -0,0 +1,37 @@
import { InfrastructureConfig } from '../../../src/config';
export const infrastructure: InfrastructureConfig = {
kubernetes: {
clusterName: 'abacus-testnet',
},
monitoring: {
namespace: 'monitoring',
prometheus: {
deployName: 'prometheus',
// Node exporter does not work with GKE Autopilot
nodeExporterEnabled: false,
helmChart: {
// See https://github.com/prometheus-community/helm-charts#usage
repository: {
name: 'prometheus-community',
url: 'https://prometheus-community.github.io/helm-charts',
},
name: 'prometheus',
version: '15.0.1',
},
},
},
externalSecrets: {
namespace: 'external-secrets',
helmChart: {
repository: {
name: 'external-secrets',
url: 'https://charts.external-secrets.io',
},
name: 'external-secrets',
version: '0.5.1',
},
gcpServiceAccountName: 'k8s-external-secrets-testnet',
accessibleGCPSecretPrefixes: ['abacus-testnet-', 'testnet-'],
},
};

@ -0,0 +1,248 @@
import { ChainName } from '@abacus-network/sdk';
import {
ChainValidatorSets,
CheckpointSyncerType,
} from '../../../src/config/agent';
import { TestnetNetworks } from './domains';
const s3BucketRegion = 'us-east-1';
const s3BucketName = (chainName: ChainName, index: number) =>
`abacus-testnet-${chainName}-validator-${index}`;
export const validators: ChainValidatorSets<TestnetNetworks> = {
alfajores: {
threshold: 2,
validators: [
{
address: '0x5274db49971f14457fb1b1743012e2527804dc73',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('alfajores', 0),
region: s3BucketRegion,
},
},
{
address: '0x636ca13eb829880539c0078ba9d53214b65603a2',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('alfajores', 1),
region: s3BucketRegion,
},
},
{
address: '0x2f5f8c4bb89dfc1c4e905f7e3cd35294b62a572b',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('alfajores', 2),
region: s3BucketRegion,
},
},
],
},
kovan: {
threshold: 2,
validators: [
{
address: '0x84b998a059719d4476959ffbe0a0402ec65a7c62',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('kovan', 0),
region: s3BucketRegion,
},
},
{
address: '0x5aaf0bbbc15f13bcb5f4b2bff5e2f935f4360bb5',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('kovan', 1),
region: s3BucketRegion,
},
},
{
address: '0x3d12f6d395a6532de3d45bd668de43685cb500c3',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('kovan', 2),
region: s3BucketRegion,
},
},
],
},
fuji: {
threshold: 2,
validators: [
{
address: '0x57d4976751978df23be86ec42e27a5749b1beeda',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('fuji', 0),
region: s3BucketRegion,
},
},
{
address: '0x5149b863416de4fae9e1cb63c9564414f4f0bb18',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('fuji', 1),
region: s3BucketRegion,
},
},
{
address: '0xd1ea680f4777eb31569aea1768eaf83bf5587a98',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('fuji', 2),
region: s3BucketRegion,
},
},
],
},
mumbai: {
threshold: 2,
validators: [
{
address: '0x962a63cf73c8beef63ecd753bc57c80241368818',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('mumbai', 0),
region: s3BucketRegion,
},
},
{
address: '0x636d98ed1cd8e5190900ed53a71e8da0076c2672',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('mumbai', 1),
region: s3BucketRegion,
},
},
{
address: '0xf9e86b19152cc8437794d01d4aec8c8a4eb34b20',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('mumbai', 2),
region: s3BucketRegion,
},
},
],
},
bsctestnet: {
threshold: 2,
validators: [
{
address: '0x71a66da2ad833efca67b2257b45f6c6ba11e3816',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('bsctestnet', 0),
region: s3BucketRegion,
},
},
{
address: '0x7306663d18af55294dfd44782fa5c7e16d94485f',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('bsctestnet', 1),
region: s3BucketRegion,
},
},
{
address: '0x19cd5f316993ad15d1ac569cd4e70cbc5e1682ac',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('bsctestnet', 2),
region: s3BucketRegion,
},
},
],
},
arbitrumrinkeby: {
threshold: 2,
validators: [
{
address: '0x4f78b649646b50b1ff41984cde8b7f4f36e1071d',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('arbitrumrinkeby', 0),
region: s3BucketRegion,
},
},
{
address: '0xf71e75225daaf19135b316c76a9105fbdce4b70a',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('arbitrumrinkeby', 1),
region: s3BucketRegion,
},
},
{
address: '0xded3da1c63c37499c627272f46d66e0e46a5bd07',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('arbitrumrinkeby', 2),
region: s3BucketRegion,
},
},
],
},
optimismkovan: {
threshold: 2,
validators: [
{
address: '0x938b35471ff2e968a125f5f3fc02ede89f7b90c0',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('optimismkovan', 0),
region: s3BucketRegion,
},
},
{
address: '0x3b8f4217153e9bb9ae3aa8d314269dd06584081d',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('optimismkovan', 1),
region: s3BucketRegion,
},
},
{
address: '0x2a58a8982a06fbb3757d1c614c6f3ab733d93e6d',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('optimismkovan', 2),
region: s3BucketRegion,
},
},
],
},
auroratestnet: {
threshold: 2,
validators: [
{
address: '0x3dd10f59ec2f18441eb0a3feca489e6d74752260',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('auroratestnet', 0),
region: s3BucketRegion,
},
},
{
address: '0x10ac12f07488ea10371071fccc6a7a1e2733fe35',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('auroratestnet', 1),
region: s3BucketRegion,
},
},
{
address: '0xdf0154233855528a114b4bd640a3fde2020c3b3b',
checkpointSyncer: {
type: CheckpointSyncerType.S3,
bucket: s3BucketName('auroratestnet', 2),
region: s3BucketRegion,
},
},
],
},
};

@ -53,6 +53,26 @@ export const ropsten: TransactionConfig = {
},
};
export const bsctestnet: TransactionConfig = {
confirmations: 3,
overrides: {},
};
export const arbitrumrinkeby: TransactionConfig = {
confirmations: 3,
overrides: {},
};
export const optimismkovan: TransactionConfig = {
confirmations: 3,
overrides: {},
};
export const auroratestnet: TransactionConfig = {
confirmations: 3,
overrides: {},
};
export const configs: Partial<Record<ChainName, TransactionConfig>> = {
alfajores,
fuji,
@ -62,4 +82,8 @@ export const configs: Partial<Record<ChainName, TransactionConfig>> = {
rinkarby,
rinkeby,
ropsten,
bsctestnet,
arbitrumrinkeby,
optimismkovan,
auroratestnet,
};

@ -1,17 +1,12 @@
import { createAgentGCPKeys } from '../src/agents/gcp';
import { createAgentKeysIfNotExists } from '../src/agents/key-utils';
import { getArgs, getDomainNames, getEnvironment } from './utils';
import { getAgentConfig, getEnvironment } from './utils';
async function main() {
const environment = await getEnvironment();
const domainNames = await getDomainNames(environment);
const agentConfig = await getAgentConfig(environment);
const { v: validatorCount } = await getArgs()
.alias('v', 'validatorCount')
.number('v')
.demandOption('v').argv;
return createAgentGCPKeys(environment, domainNames, validatorCount);
return createAgentKeysIfNotExists(agentConfig);
}
main().then(console.log).catch(console.error);

@ -1,12 +1,12 @@
import { deleteAgentGCPKeys } from '../src/agents/gcp';
import { deleteAgentKeys } from '../src/agents/key-utils';
import { getDomainNames, getEnvironment } from './utils';
import { getAgentConfig, getEnvironment } from './utils';
async function main() {
const environment = await getEnvironment();
const domainNames = await getDomainNames(environment);
const agentConfig = await getAgentConfig(environment);
return deleteAgentGCPKeys(environment, domainNames);
return deleteAgentKeys(agentConfig);
}
main().then(console.log).catch(console.error);

@ -8,18 +8,23 @@ async function deploy() {
const agentConfig = await getAgentConfig(environment);
const domainNames = await getDomainNames(environment);
// We intentionally do not Promise.all here to avoid race conditions that could result
// in attempting to create a user or key multiple times. This was found to happen in
// situations where agents for different domains would share the same AWS user or
// AWS KMS key.
for (const name of domainNames) {
await runAgentHelmCommand(
HelmCommand.InstallOrUpgrade,
agentConfig,
name,
domainNames,
);
}
// Note the create-keys script should be ran prior to running this script.
// At the moment, `runAgentHelmCommand` has the side effect of creating keys / users
// if they do not exist. It's possible for a race condition to occur where creation of
// a key / user that is used by multiple deployments (like Kathy or the Checkpointer,
// whose keys / users are not chain-specific) will be attempted multiple times.
// While this function still has these side effects, the workaround is to just
// run the create-keys script first.
await Promise.all(
domainNames.map((name) =>
runAgentHelmCommand(
HelmCommand.InstallOrUpgrade,
agentConfig,
name,
domainNames,
),
),
);
}
deploy().then(console.log).catch(console.error);

@ -0,0 +1,28 @@
import { getAllKeys } from '../src/agents/key-utils';
import { getAgentConfig, getEnvironment } from './utils';
async function main() {
const environment = await getEnvironment();
const agentConfig = await getAgentConfig(environment);
const keys = getAllKeys(agentConfig);
const keyInfos = await Promise.all(
keys.map(async (key) => {
let address = '';
try {
await key.fetch();
address = key.address;
} catch (e) {}
return {
identifier: key.identifier,
address,
};
}),
);
console.log(JSON.stringify(keyInfos, null, 2));
}
main().catch(console.error);

@ -10,7 +10,7 @@ import {
} from '@abacus-network/sdk';
import { types } from '@abacus-network/utils';
import { KEY_ROLE_ENUM } from '../src/agents';
import { KEY_ROLE_ENUM } from '../src/agents/roles';
import {
ALL_ENVIRONMENTS,
AgentConfig,

@ -1,23 +1,75 @@
import { KEY_ROLE_ENUM } from '../agents';
import { ChainName } from '@abacus-network/sdk';
import { KEY_ROLE_ENUM } from './roles';
export abstract class AgentKey<Networks extends ChainName> {
constructor(
public environment: string,
public readonly role: KEY_ROLE_ENUM,
public readonly chainName?: Networks,
public readonly index?: number,
) {}
export abstract class AgentKey {
abstract get identifier(): string;
abstract get address(): string;
abstract fetch(): Promise<void>;
abstract createIfNotExists(): Promise<void>;
abstract delete(): Promise<void>;
// Returns new address
abstract update(): Promise<string>;
serializeAsAddress() {
return {
identifier: this.identifier,
address: this.address,
};
}
}
export function isValidatorKey(role: string) {
return role === KEY_ROLE_ENUM.Validator;
}
export function identifier(
function identifier(
isKey: boolean,
environment: string,
role: string,
chainName?: ChainName,
index?: number,
) {
const prefix = `abacus-${environment}-${isKey ? 'key-' : ''}`;
switch (role) {
case KEY_ROLE_ENUM.Validator:
if (index === undefined) {
throw Error('Expected index for validator key');
}
return `${prefix}${chainName}-${role}-${index}`;
case KEY_ROLE_ENUM.Relayer:
if (chainName === undefined) {
throw Error('Expected chainName for relayer key');
}
return `${prefix}${chainName}-${role}`;
default:
return `${prefix}${role}`;
}
}
export function keyIdentifier(
environment: string,
role: string,
chainName?: ChainName,
index?: number,
) {
return identifier(true, environment, role, chainName, index);
}
export function userIdentifier(
environment: string,
role: string,
chainName: string,
index: number | undefined,
chainName?: ChainName,
index?: number,
) {
return isValidatorKey(role)
? `abacus-${environment}-key-${chainName}-${role}-${index}`
: `abacus-${environment}-key-${role}`;
return identifier(false, environment, role, chainName, index);
}

@ -1,5 +1,5 @@
import { KEY_ROLE_ENUM } from '..';
import {
AliasListEntry,
CreateAliasCommand,
CreateKeyCommand,
DeleteAliasCommand,
@ -8,6 +8,7 @@ import {
KeySpec,
KeyUsageType,
ListAliasesCommand,
ListAliasesCommandOutput,
OriginType,
PutKeyPolicyCommand,
UpdateAliasCommand,
@ -17,8 +18,9 @@ import { ChainName } from '@abacus-network/sdk';
import { AgentConfig, AwsKeyConfig, KeyType } from '../../config/agent';
import { getEthereumAddress, sleep } from '../../utils/utils';
import { identifier } from '../agent';
import { keyIdentifier } from '../agent';
import { AgentKey } from '../agent';
import { KEY_ROLE_ENUM } from '../roles';
interface UnfetchedKey {
fetched: false;
@ -31,26 +33,23 @@ interface FetchedKey {
type RemoteKey = UnfetchedKey | FetchedKey;
export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
private environment: string;
export class AgentAwsKey<
Networks extends ChainName,
> extends AgentKey<Networks> {
private client: KMSClient | undefined;
private region: string;
public remoteKey: RemoteKey = { fetched: false };
constructor(
agentConfig: AgentConfig<Networks>,
public readonly chainName: Networks,
public readonly role: KEY_ROLE_ENUM,
public readonly index?: number,
role: KEY_ROLE_ENUM,
chainName?: Networks,
index?: number,
) {
super();
super(agentConfig.environment, role, chainName, index);
if (!agentConfig.aws) {
throw new Error('Not configured as AWS');
}
if (role === KEY_ROLE_ENUM.Validator && index === undefined) {
throw new Error('Expected index for validator key');
}
this.environment = agentConfig.environment;
this.region = agentConfig.aws.region;
}
@ -65,7 +64,7 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
}
get identifier() {
return `alias/${identifier(
return `alias/${keyIdentifier(
this.environment,
this.role,
this.chainName,
@ -103,6 +102,11 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
// It can take a moment for the change to propagate
await sleep(1000);
}
await this.fetch();
}
async delete() {
throw Error('Not implemented yet');
}
// Allows the `userArn` to use the key
@ -142,13 +146,8 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
// Gets the Key's ID if it exists, undefined otherwise
async getId() {
const client = await this.getClient();
const listAliasResponse = await client.send(
new ListAliasesCommand({ Limit: 100 }),
);
const match = listAliasResponse.Aliases!.find(
(_) => _.AliasName === this.identifier,
);
const aliases = await this.getAliases();
const match = aliases.find((_) => _.AliasName === this.identifier);
return match?.TargetKeyId;
}
@ -157,7 +156,7 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
}
/**
* Creates the new key but doesn't acutally rotate it
* Creates the new key but doesn't actually rotate it
* @returns The address of the new key
*/
async update() {
@ -175,18 +174,11 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
const client = await this.getClient();
// Get the key IDs
const listAliasResponse = await client.send(
new ListAliasesCommand({ Limit: 100 }),
);
const canonicalMatch = listAliasResponse.Aliases!.find(
(_) => _.AliasName === canonicalAlias,
);
const newMatch = listAliasResponse.Aliases!.find(
(_) => _.AliasName === newAlias,
);
const oldMatch = listAliasResponse.Aliases!.find(
(_) => _.AliasName === oldAlias,
);
// TODO handle cases when there are > 100 keys
const aliases = await this.getAliases();
const canonicalMatch = aliases.find((_) => _.AliasName === canonicalAlias);
const newMatch = aliases.find((_) => _.AliasName === newAlias);
const oldMatch = aliases.find((_) => _.AliasName === oldAlias);
if (!canonicalMatch || !newMatch) {
throw new Error(
`Attempted to rotate keys but one of them does not exist. Old: ${canonicalMatch}, New: ${newMatch}`,
@ -224,7 +216,7 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
private requireFetched() {
if (!this.remoteKey.fetched) {
throw new Error("Can't persist without address");
throw new Error('Key not fetched');
}
}
@ -273,21 +265,9 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
private async fetchAddressFromAws(keyId?: string) {
const client = await this.getClient();
const alias = this.identifier;
if (!keyId) {
const listAliasResponse = await client.send(
new ListAliasesCommand({ Limit: 100 }),
);
const match = listAliasResponse.Aliases!.find(
(_) => _.AliasName === alias,
);
if (!match || !match.TargetKeyId) {
throw new Error('Couldnt find key');
}
keyId = match.TargetKeyId;
keyId = await this.getId();
}
const publicKeyResponse = await client.send(
@ -296,4 +276,33 @@ export class AgentAwsKey<Networks extends ChainName> extends AgentKey {
return getEthereumAddress(Buffer.from(publicKeyResponse.PublicKey!));
}
private async getAliases(): Promise<AliasListEntry[]> {
const client = await this.getClient();
let aliases: AliasListEntry[] = [];
let marker: string | undefined = undefined;
// List will output a max of 100 at a time, so we need to use marker
// to fetch all of them.
while (true) {
const listAliasResponse: ListAliasesCommandOutput = await client.send(
new ListAliasesCommand({
Limit: 100,
Marker: marker,
}),
);
if (
!listAliasResponse.Aliases ||
listAliasResponse.Aliases.length === 0
) {
break;
}
aliases = aliases.concat(listAliasResponse.Aliases);
if (listAliasResponse.NextMarker) {
marker = listAliasResponse.NextMarker;
} else {
break;
}
}
return aliases;
}
}

@ -7,13 +7,14 @@ import {
import { ChainName } from '@abacus-network/sdk';
import { KEY_ROLE_ENUM } from '../../agents';
import { AgentConfig } from '../../config';
import {
fetchGCPSecret,
gcpSecretExists,
setGCPSecret,
} from '../../utils/gcloud';
import { userIdentifier } from '../agent';
import { KEY_ROLE_ENUM } from '../roles';
import { AgentAwsKey } from './key';
@ -103,7 +104,14 @@ export class AgentAwsUser<Networks extends ChainName> {
}
key(agentConfig: AgentConfig<Networks>): AgentAwsKey<Networks> {
return new AgentAwsKey<Networks>(agentConfig, this.chainName, this.role);
return new AgentAwsKey<Networks>(agentConfig, this.role, this.chainName);
}
async createKeyIfNotExists(agentConfig: AgentConfig<Networks>) {
const key = this.key(agentConfig);
await key.createIfNotExists();
await key.putKeyPolicy(this.arn);
return key;
}
get awsTags() {
@ -123,7 +131,7 @@ export class AgentAwsUser<Networks extends ChainName> {
}
get userName() {
return `abacus-${this.environment}-${this.role}`;
return userIdentifier(this.environment, this.role, this.chainName);
}
get accessKeyIdSecretName() {

@ -7,8 +7,8 @@ import {
import { ChainName } from '@abacus-network/sdk';
import { KEY_ROLE_ENUM } from '../../agents';
import { AgentConfig } from '../../config';
import { KEY_ROLE_ENUM } from '../roles';
import { AgentAwsKey } from './key';
import { AgentAwsUser } from './user';
@ -86,8 +86,8 @@ export class ValidatorAgentAwsUser<
key(agentConfig: AgentConfig<Networks>): AgentAwsKey<Networks> {
return new AgentAwsKey<Networks>(
agentConfig,
this.chainName,
this.role,
this.chainName,
this.index,
);
}

@ -1,10 +1,13 @@
import { Wallet } from 'ethers';
import { KEY_ROLES, KEY_ROLE_ENUM } from '../agents';
import { ChainName } from '@abacus-network/sdk';
import { ENVIRONMENTS_ENUM } from '../config/environment';
import { fetchGCPSecret, setGCPSecret } from '../utils/gcloud';
import { execCmd, include } from '../utils/utils';
import { AgentKey, identifier, isValidatorKey } from './agent';
import { AgentKey, isValidatorKey, keyIdentifier } from './agent';
import { KEY_ROLE_ENUM } from './roles';
// This is the type for how the keys are persisted in GCP
export interface SecretManagerPersistedKeys {
@ -17,11 +20,6 @@ export interface SecretManagerPersistedKeys {
chainName?: string;
}
interface KeyAsAddress {
role: string;
address: string;
}
interface UnfetchedKey {
fetched: false;
}
@ -34,37 +32,31 @@ interface FetchedKey {
type RemoteKey = UnfetchedKey | FetchedKey;
export class AgentGCPKey extends AgentKey {
export class AgentGCPKey<
Networks extends ChainName,
> extends AgentKey<Networks> {
constructor(
public readonly environment: string,
public readonly role: string,
public readonly chainName: string,
public readonly index?: number,
environment: ENVIRONMENTS_ENUM,
role: KEY_ROLE_ENUM,
chainName?: Networks,
index?: number,
private remoteKey: RemoteKey = { fetched: false },
) {
super();
if (this.isValidatorKey && index === undefined) {
throw Error(
`Expected index to be defined for key with environment ${environment}, role ${role}, and chainName ${chainName}`,
);
}
super(environment, role, chainName, index);
}
static async create(
environment: string,
role: string,
chainName: string,
index?: number,
) {
const key = new AgentGCPKey(environment, role, chainName, index);
await key.create();
return key;
async createIfNotExists() {
try {
await this.fetch();
} catch (err) {
await this.create();
}
}
serializeAsAddress() {
this.requireFetched();
return {
role: this.memoryKeyIdentifier,
identifier: this.identifier,
// @ts-ignore
address: this.remoteKey.address,
};
@ -75,12 +67,12 @@ export class AgentGCPKey extends AgentKey {
}
get identifier() {
return identifier(this.environment, this.role, this.chainName, this.index);
}
// The identifier for this key within a set of keys for an enrivonment
get memoryKeyIdentifier() {
return memoryKeyIdentifier(this.role, this.chainName, this.index);
return keyIdentifier(
this.environment,
this.role,
this.chainName,
this.index,
);
}
get privateKey() {
@ -112,6 +104,7 @@ export class AgentGCPKey extends AgentKey {
async update() {
this.remoteKey = await this._create(true);
return this.address;
}
async delete() {
@ -143,7 +136,7 @@ export class AgentGCPKey extends AgentKey {
role: this.role,
...include(this.isValidatorKey, {
chain: this.chainName,
index: this.index!.toString(),
index: this.index,
}),
},
);
@ -155,128 +148,3 @@ export class AgentGCPKey extends AgentKey {
};
}
}
export async function deleteAgentGCPKeys(
environment: string,
chainNames: string[],
) {
await Promise.all(
KEY_ROLES.map(async (role) => {
if (isValidatorKey(role)) {
await Promise.all(
chainNames.map((chainName) => {
const key = new AgentGCPKey(environment, role, chainName);
return key.delete();
}),
);
} else {
const key = new AgentGCPKey(environment, role, 'any');
await key.delete();
}
}),
);
await execCmd(
`gcloud secrets delete ${addressesIdentifier(environment)} --quiet`,
);
}
// The identifier for a key within a memory representation
export function memoryKeyIdentifier(
role: string,
chainName: string,
index?: number,
) {
if (isValidatorKey(role)) {
if (index === undefined) {
throw Error('Expected index');
}
return `${chainName}-${role}-${index}`;
}
return role;
}
export async function createAgentGCPKeys(
environment: string,
chainNames: string[],
validatorCount: number,
) {
const keys: AgentGCPKey[] = await Promise.all(
KEY_ROLES.flatMap((role) => {
if (isValidatorKey(role)) {
// For each chainName, create validatorCount keys
return chainNames.flatMap((chainName) =>
[...Array(validatorCount).keys()].map((index) =>
AgentGCPKey.create(environment, role, chainName, index),
),
);
} else {
// Chain name doesnt matter for non attestation keys
return [AgentGCPKey.create(environment, role, 'any')];
}
}),
);
await persistAddresses(
environment,
keys.map((_) => _.serializeAsAddress()),
);
}
export async function rotateGCPKey(
environment: string,
role: string,
chainName: string,
) {
const key = new AgentGCPKey(environment, role, chainName);
await key.update();
const addresses = await fetchGCPKeyAddresses(environment);
const filteredAddresses = addresses.filter((_) => {
const matchingRole = memoryKeyIdentifier(role, chainName);
return _.role !== matchingRole;
});
filteredAddresses.push(key.serializeAsAddress());
await persistAddresses(environment, filteredAddresses);
}
async function persistAddresses(environment: string, keys: KeyAsAddress[]) {
await setGCPSecret(addressesIdentifier(environment), JSON.stringify(keys), {
environment: environment,
});
}
// This function returns all the GCP keys for a given outbox chain in a dictionary where the key is the memoryKeyIdentifier
export async function fetchAgentGCPKeys(
environment: string,
chainName: string,
validatorCount: number,
): Promise<Record<string, AgentGCPKey>> {
const secrets = await Promise.all(
KEY_ROLES.map(async (role) => {
if (role === KEY_ROLE_ENUM.Validator) {
return Promise.all(
[...Array(validatorCount).keys()].map(async (index) => {
const key = new AgentGCPKey(environment, role, chainName, index);
await key.fetch();
return [key.memoryKeyIdentifier, key];
}),
);
} else {
const key = new AgentGCPKey(environment, role, chainName);
await key.fetch();
return [[key.memoryKeyIdentifier, key]];
}
}),
);
return Object.fromEntries(secrets.flat(1));
}
async function fetchGCPKeyAddresses(environment: string) {
const addresses = await fetchGCPSecret(addressesIdentifier(environment));
return addresses as KeyAsAddress[];
}
function addressesIdentifier(environment: string) {
return `abacus-${environment}-key-addresses`;
}

@ -2,32 +2,18 @@ import { ChainName } from '@abacus-network/sdk';
import { AgentConfig } from '../config';
import { ChainAgentConfig, CheckpointSyncerType } from '../config/agent';
import { ENVIRONMENTS_ENUM } from '../config/environment';
import { fetchGCPSecret } from '../utils/gcloud';
import { HelmCommand, helmifyValues } from '../utils/helm';
import { ensure0x, execCmd, strip0x } from '../utils/utils';
import { rm, writeFile } from 'fs/promises';
import { keyIdentifier } from './agent';
import { AgentAwsUser, ValidatorAgentAwsUser } from './aws';
import { AgentAwsKey } from './aws/key';
import { AgentGCPKey, fetchAgentGCPKeys, memoryKeyIdentifier } from './gcp';
export enum KEY_ROLE_ENUM {
Validator = 'validator',
Checkpointer = 'checkpointer',
Relayer = 'relayer',
Deployer = 'deployer',
Bank = 'bank',
Kathy = 'kathy',
}
export const KEY_ROLES = [
KEY_ROLE_ENUM.Validator,
KEY_ROLE_ENUM.Checkpointer,
KEY_ROLE_ENUM.Relayer,
KEY_ROLE_ENUM.Deployer,
KEY_ROLE_ENUM.Bank,
KEY_ROLE_ENUM.Kathy,
];
import { AgentGCPKey } from './gcp';
import { fetchKeysForChain } from './key-utils';
import { KEY_ROLES, KEY_ROLE_ENUM } from './roles';
async function helmValuesForChain<Networks extends ChainName>(
chainName: Networks,
@ -62,11 +48,11 @@ async function helmValuesForChain<Networks extends ChainName>(
relayer: {
enabled: true,
aws: await chainAgentConfig.relayerRequiresAwsCredentials(),
signers: chainAgentConfig.relayerSigners,
signers: await chainAgentConfig.relayerSigners(),
config: chainAgentConfig.relayerConfig,
},
checkpointer: {
enabled: true,
enabled: chainAgentConfig.checkpointerEnabled,
aws: chainAgentConfig.checkpointerRequiresAwsCredentials,
signers: await chainAgentConfig.checkpointerSigners(),
config: chainAgentConfig.checkpointerConfig,
@ -123,11 +109,10 @@ export async function getAgentEnvVars<Networks extends ChainName>(
// GCP keys
if (!agentConfig.aws) {
const gcpKeys = await fetchAgentGCPKeys(
agentConfig.environment,
const gcpKeys = (await fetchKeysForChain(
agentConfig,
outboxChainName,
agentConfig.validatorSets[outboxChainName].validators.length,
);
)) as Record<string, AgentGCPKey<Networks>>;
// Only checkpointer and relayer need to sign txs
if (role === KEY_ROLE_ENUM.Checkpointer || role === KEY_ROLE_ENUM.Relayer) {
@ -141,7 +126,9 @@ export async function getAgentEnvVars<Networks extends ChainName>(
});
} else if (role === KEY_ROLE_ENUM.Validator) {
const privateKey =
gcpKeys[memoryKeyIdentifier(role, outboxChainName, index)].privateKey;
gcpKeys[
keyIdentifier(agentConfig.environment, role, outboxChainName, index)
].privateKey;
envVars.push(
`OPT_VALIDATOR_VALIDATOR_KEY=${strip0x(privateKey)}`,
@ -189,10 +176,14 @@ export async function getAgentEnvVars<Networks extends ChainName>(
role === KEY_ROLE_ENUM.Relayer ||
role === KEY_ROLE_ENUM.Kathy
) {
chainNames.forEach((name) => {
const key = new AgentAwsKey(agentConfig, name, role);
chainNames.forEach((chainName) => {
const key = new AgentAwsKey(agentConfig, role, chainName);
envVars = envVars.concat(
configEnvVars(key.keyConfig, 'BASE', 'SIGNERS_'),
configEnvVars(
key.keyConfig,
'BASE',
`SIGNERS_${outboxChainName.toUpperCase()}_`,
),
);
});
}
@ -213,12 +204,14 @@ export async function getAgentEnvVars<Networks extends ChainName>(
);
break;
case KEY_ROLE_ENUM.Checkpointer:
envVars = envVars.concat(
configEnvVars(
valueDict.abacus.checkpointer.config,
KEY_ROLE_ENUM.Checkpointer,
),
);
if (valueDict.abacus.checkpointer.config) {
envVars = envVars.concat(
configEnvVars(
valueDict.abacus.checkpointer.config,
KEY_ROLE_ENUM.Checkpointer,
),
);
}
break;
case KEY_ROLE_ENUM.Kathy:
if (valueDict.abacus.kathy.config) {
@ -246,7 +239,11 @@ function configEnvVars(
if (typeof value === 'object') {
envVars = [
...envVars,
...configEnvVars(value, role, `${key.toUpperCase()}_`),
...configEnvVars(
value,
role,
`${key_name_prefix}${key.toUpperCase()}_`,
),
];
} else {
envVars.push(
@ -275,15 +272,15 @@ export async function getSecretAwsCredentials<Networks extends ChainName>(
}
export async function getSecretRpcEndpoint(
environment: string,
environment: ENVIRONMENTS_ENUM,
chainName: ChainName,
) {
return fetchGCPSecret(`${environment}-rpc-endpoint-${chainName}`, false);
}
export async function getSecretDeployerKey(
environment: string,
chainName: string,
environment: ENVIRONMENTS_ENUM,
chainName: ChainName,
) {
const key = new AgentGCPKey(environment, KEY_ROLE_ENUM.Deployer, chainName);
await key.fetch();
@ -356,11 +353,10 @@ export async function runKeymasterHelmCommand<Networks extends ChainName>(
) {
// It's ok to use pick an arbitrary chain here since we are only grabbing the signers
const chainName = chainNames[0];
const gcpKeys = await fetchAgentGCPKeys(
agentConfig.environment,
chainName,
agentConfig.validatorSets[chainName].validators.length,
);
const gcpKeys = (await fetchKeysForChain(agentConfig, chainName)) as Record<
string,
AgentGCPKey<Networks>
>;
const bankKey = gcpKeys[KEY_ROLE_ENUM.Bank];
const config = {
networks: Object.fromEntries(

@ -0,0 +1,133 @@
import { ChainName } from '@abacus-network/sdk';
import { AgentConfig } from '../config';
import { fetchGCPSecret, setGCPSecret } from '../utils/gcloud';
import { execCmd } from '../utils/utils';
import { AgentKey } from './agent';
import { AgentAwsKey } from './aws/key';
import { AgentGCPKey } from './gcp';
import { KEY_ROLES, KEY_ROLE_ENUM } from './roles';
interface KeyAsAddress {
identifier: string;
address: string;
}
export function getKey<Networks extends ChainName>(
agentConfig: AgentConfig<Networks>,
role: KEY_ROLE_ENUM,
chainName?: Networks,
index?: number,
): AgentKey<Networks> {
if (agentConfig.aws) {
return new AgentAwsKey(agentConfig, role, chainName, index);
} else {
return new AgentGCPKey(agentConfig.environment, role, chainName, index);
}
}
export function getAllKeys<Networks extends ChainName>(
agentConfig: AgentConfig<Networks>,
): Array<AgentKey<Networks>> {
return KEY_ROLES.flatMap((role) => {
if (role === KEY_ROLE_ENUM.Validator) {
// For each chainName, create validatorCount keys
return agentConfig.domainNames.flatMap((chainName) =>
[
...Array(
agentConfig.validatorSets[chainName].validators.length,
).keys(),
].map((index) => getKey(agentConfig, role, chainName, index)),
);
} else if (role === KEY_ROLE_ENUM.Relayer) {
return agentConfig.domainNames.map((chainName) =>
getKey(agentConfig, role, chainName),
);
} else {
return [getKey(agentConfig, role)];
}
});
}
export async function deleteAgentKeys<Networks extends ChainName>(
agentConfig: AgentConfig<Networks>,
) {
const keys = getAllKeys(agentConfig);
await Promise.all(keys.map((key) => key.delete()));
await execCmd(
`gcloud secrets delete ${addressesIdentifier(
agentConfig.environment,
)} --quiet`,
);
}
export async function createAgentKeysIfNotExists<Networks extends ChainName>(
agentConfig: AgentConfig<Networks>,
) {
const keys = getAllKeys(agentConfig);
await Promise.all(
keys.map(async (key) => {
return key.createIfNotExists();
}),
);
await persistAddresses(
agentConfig.environment,
keys.map((key) => key.serializeAsAddress()),
);
}
export async function rotateKey<Networks extends ChainName>(
agentConfig: AgentConfig<Networks>,
role: KEY_ROLE_ENUM,
chainName: Networks,
) {
const key = getKey(agentConfig, role, chainName);
await key.update();
const keyIdentifier = key.identifier;
const addresses = await fetchGCPKeyAddresses(agentConfig.environment);
const filteredAddresses = addresses.filter((_) => {
return _.identifier !== keyIdentifier;
});
filteredAddresses.push(key.serializeAsAddress());
await persistAddresses(agentConfig.environment, filteredAddresses);
}
async function persistAddresses(environment: string, keys: KeyAsAddress[]) {
await setGCPSecret(addressesIdentifier(environment), JSON.stringify(keys), {
environment: environment,
});
}
// This function returns all keys for a given outbox chain in a dictionary where the key is the identifier
export async function fetchKeysForChain<Networks extends ChainName>(
agentConfig: AgentConfig<Networks>,
chainName: Networks,
): Promise<Record<string, AgentKey<Networks>>> {
// Get all keys for the chainName. Include keys where chainName is undefined,
// which are keys that are not chain-specific but should still be included
const keys = await Promise.all(
getAllKeys(agentConfig)
.filter(
(key) => key.chainName === undefined || key.chainName == chainName,
)
.map(async (key) => {
await key.fetch();
return [key.identifier, key];
}),
);
return Object.fromEntries(keys);
}
async function fetchGCPKeyAddresses(environment: string) {
const addresses = await fetchGCPSecret(addressesIdentifier(environment));
return addresses as KeyAsAddress[];
}
function addressesIdentifier(environment: string) {
return `abacus-${environment}-key-addresses`;
}

@ -0,0 +1,17 @@
export enum KEY_ROLE_ENUM {
Validator = 'validator',
Checkpointer = 'checkpointer',
Relayer = 'relayer',
Deployer = 'deployer',
Bank = 'bank',
Kathy = 'kathy',
}
export const KEY_ROLES = [
KEY_ROLE_ENUM.Validator,
KEY_ROLE_ENUM.Checkpointer,
KEY_ROLE_ENUM.Relayer,
KEY_ROLE_ENUM.Deployer,
KEY_ROLE_ENUM.Bank,
KEY_ROLE_ENUM.Kathy,
];

@ -1,12 +1,12 @@
import { ChainName, ChainSubsetMap } from '@abacus-network/sdk';
import { types } from '@abacus-network/utils';
import { KEY_ROLE_ENUM } from '../agents';
import {
AgentAwsKey,
AgentAwsUser,
ValidatorAgentAwsUser,
} from '../agents/aws';
import { KEY_ROLE_ENUM } from '../agents/roles';
import { DeployEnvironment } from './environment';
@ -210,7 +210,7 @@ export interface AgentConfig<Networks extends ChainName> {
validatorSets: ChainValidatorSets<Networks>;
validator: ChainValidatorConfigs<Networks>;
relayer: ChainRelayerConfigs<Networks>;
checkpointer: ChainCheckpointerConfigs<Networks>;
checkpointer?: ChainCheckpointerConfigs<Networks>;
kathy?: ChainKathyConfigs<Networks>;
}
@ -264,7 +264,7 @@ export class ChainAgentConfig<Networks extends ChainName> {
// key is pulled from GCP Secret Manager by the helm chart
keyConfig(role: KEY_ROLE_ENUM): KeyConfig {
if (this.awsKeys) {
const key = new AgentAwsKey(this.agentConfig, this.chainName, role);
const key = new AgentAwsKey(this.agentConfig, role, this.chainName);
return key.keyConfig;
}
return {
@ -307,9 +307,7 @@ export class ChainAgentConfig<Networks extends ChainName> {
type: KeyType.Hex,
};
if (this.awsKeys) {
const key = awsUser.key(this.agentConfig);
await key.createIfNotExists();
await key.putKeyPolicy(awsUser.arn);
const key = await awsUser.createKeyIfNotExists(this.agentConfig);
validator = key.keyConfig;
}
@ -347,17 +345,29 @@ export class ChainAgentConfig<Networks extends ChainName> {
await awsUser.createIfNotExists();
// If we're using AWS keys, ensure the key is created and the user can use it
if (this.awsKeys) {
const key = awsUser.key(this.agentConfig);
await key.createIfNotExists();
await key.putKeyPolicy(awsUser.arn);
await awsUser.createKeyIfNotExists(this.agentConfig);
}
return true;
}
return false;
}
get relayerSigners() {
return this.signers(KEY_ROLE_ENUM.Relayer);
async relayerSigners() {
if (!this.awsKeys) {
return this.signers(KEY_ROLE_ENUM.Relayer);
}
const awsUser = new AgentAwsUser(
this.agentConfig.environment,
this.chainName,
KEY_ROLE_ENUM.Relayer,
this.agentConfig.aws!.region,
);
await awsUser.createIfNotExists();
const key = await awsUser.createKeyIfNotExists(this.agentConfig);
return this.agentConfig.domainNames.map((name) => ({
name,
keyConfig: key.keyConfig,
}));
}
get relayerConfig(): RelayerConfig {
@ -383,36 +393,32 @@ export class ChainAgentConfig<Networks extends ChainName> {
};
}
// Gets signers for a provided role. If AWS keys are used, the corresponding
// key and users are created if necessary.
async getAndPrepareSigners(role: KEY_ROLE_ENUM) {
if (this.awsKeys) {
const awsUser = new AgentAwsUser(
this.agentConfig.environment,
this.chainName,
role,
this.agentConfig.aws!.region,
);
await awsUser.createIfNotExists();
const key = awsUser.key(this.agentConfig);
await key.createIfNotExists();
await key.putKeyPolicy(awsUser.arn);
}
return this.signers(role);
get checkpointerEnabled() {
return this.agentConfig.checkpointer !== undefined;
}
// Gets signer info, creating them if necessary
checkpointerSigners() {
return this.getAndPrepareSigners(KEY_ROLE_ENUM.Checkpointer);
if (!this.checkpointerEnabled) {
return [];
}
return [
{
name: this.chainName,
keyConfig: this.keyConfig(KEY_ROLE_ENUM.Kathy),
},
];
}
get checkpointerRequiresAwsCredentials() {
return this.awsKeys;
}
get checkpointerConfig(): CheckpointerConfig {
get checkpointerConfig(): CheckpointerConfig | undefined {
if (!this.checkpointerEnabled) {
return undefined;
}
return getChainOverriddenConfig(
this.agentConfig.checkpointer,
this.agentConfig.checkpointer!,
this.chainName,
);
}
@ -422,7 +428,12 @@ export class ChainAgentConfig<Networks extends ChainName> {
if (!this.kathyEnabled) {
return [];
}
return this.getAndPrepareSigners(KEY_ROLE_ENUM.Kathy);
return [
{
name: this.chainName,
keyConfig: this.keyConfig(KEY_ROLE_ENUM.Kathy),
},
];
}
get kathyRequiresAwsCredentials() {

@ -6,9 +6,11 @@ import { ChainName } from '@abacus-network/sdk';
import { getSecretDeployerKey, getSecretRpcEndpoint } from '../agents';
export async function fetchSigner(
environment: string,
chainName: ChainName,
import { ENVIRONMENTS_ENUM } from './environment';
export async function fetchSigner<Networks extends ChainName>(
environment: ENVIRONMENTS_ENUM,
chainName: Networks,
): Promise<ethers.Signer> {
const rpc = await getSecretRpcEndpoint(environment, chainName);
const key = await getSecretDeployerKey(environment, chainName);

@ -1,10 +1,12 @@
export enum ENVIRONMENTS_ENUM {
Test = 'test',
Dev = 'dev',
Testnet = 'testnet',
}
export const ALL_ENVIRONMENTS = [
ENVIRONMENTS_ENUM.Test,
ENVIRONMENTS_ENUM.Dev,
ENVIRONMENTS_ENUM.Testnet,
] as const;
type DeployEnvironmentTuple = typeof ALL_ENVIRONMENTS;
export type DeployEnvironment = DeployEnvironmentTuple[number];

@ -94,6 +94,6 @@ async function getPrometheusConfig(
// Fetches a secret from GCP Secret Manager. The secret is expected to
// be JSON with the shape of `PrometheusSecrets`.
async function fetchPrometheusSecrets(): Promise<PrometheusSecrets> {
const secrets = await fetchGCPSecret('optics-prometheus-remote_write_config');
const secrets = await fetchGCPSecret('abacus-prometheus-remote_write_config');
return secrets as PrometheusSecrets;
}

@ -2,10 +2,12 @@ import { CoreContractAddresses } from '../';
import { ChainName } from '../../';
import { addresses as test } from './test';
import { addresses as testnet } from './testnet';
export const addresses: Record<
any,
Partial<Record<ChainName, CoreContractAddresses>>
> = {
test,
testnet,
};

@ -0,0 +1,458 @@
export const addresses = {
alfajores: {
upgradeBeaconController: '0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd',
abacusConnectionManager: '0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33',
interchainGasPaymaster: '0x28B02B97a850872C4D33C3E024fab6499ad96564',
outboxValidatorManager: '0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8',
inboxValidatorManagers: {
kovan: '0x1b33611fCc073aB0737011d5512EF673Bff74962',
fuji: '0x66b71A4e18FbE09a6977A6520B47fEDdffA82a1c',
mumbai: '0x04438ef7622f5412f82915F59caD4f704C61eA48',
bsctestnet: '0xb94F96D398eA5BAB5CA528EE9Fdc19afaA825818',
arbitrumrinkeby: '0xB057Fb841027a8554521DcCdeC3c3474CaC99AB5',
optimismkovan: '0xA2cf52064c921C11adCd83588CbEa08cc3bfF5d8',
auroratestnet: '0xa3AB7E6cE24E6293bD5320A53329Ef2f4DE73fCA',
},
outbox: {
proxy: '0xD0680F80F4f947968206806C2598Cbc5b6FE5b03',
implementation: '0x267B6B6eAf6790faE5D5E9070F28a9cE64CbF279',
beacon: '0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8',
},
inboxes: {
kovan: {
proxy: '0x783c4a0bB6663359281aD4a637D5af68F83ae213',
implementation: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
beacon: '0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9',
},
fuji: {
proxy: '0xae7a78916Ba4c507aCB2F0e474ace545Ff4bF841',
implementation: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
beacon: '0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9',
},
mumbai: {
proxy: '0xFCc63b537e70652A280c4E7883C5BB5a1700e897',
implementation: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
beacon: '0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9',
},
bsctestnet: {
proxy: '0x51A0a100e7BC63Ea7821A3a023B6F17fb94FF011',
implementation: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
beacon: '0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9',
},
arbitrumrinkeby: {
proxy: '0xe0B988062A0C6492177d64823Ab95a9c256c2a5F',
implementation: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
beacon: '0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9',
},
optimismkovan: {
proxy: '0x628BC518ED1e0E8C6cbcD574EbA0ee29e7F6943E',
implementation: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
beacon: '0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9',
},
auroratestnet: {
proxy: '0xc76E477437065093D353b7d56c81ff54D167B0Ab',
implementation: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
beacon: '0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9',
},
},
},
kovan: {
upgradeBeaconController: '0xcf5BaaF976C80a66Fa7839715C45788f60041A33',
abacusConnectionManager: '0xF7561c34f17A32D5620583A3397C304e7038a7F6',
interchainGasPaymaster: '0x07009DA2249c388aD0f416a235AfE90D784e1aAc',
outboxValidatorManager: '0x58483b754Abb1E8947BE63d6b95DF75b8249543A',
inboxValidatorManagers: {
alfajores: '0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e',
fuji: '0x863E8c26621c52ACa1849C53500606e73BA272F0',
mumbai: '0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2',
bsctestnet: '0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd',
arbitrumrinkeby: '0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8',
optimismkovan: '0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33',
auroratestnet: '0x1b33611fCc073aB0737011d5512EF673Bff74962',
},
outbox: {
proxy: '0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE',
implementation: '0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7',
beacon: '0x4926a10788306D84202A2aDbd290b7743146Cc17',
},
inboxes: {
alfajores: {
proxy: '0x68311418D79fE8d96599384ED767d225635d88a8',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
fuji: {
proxy: '0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
mumbai: {
proxy: '0x86fb9F1c124fB20ff130C41a79a432F770f67AFD',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
bsctestnet: {
proxy: '0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
arbitrumrinkeby: {
proxy: '0xD0680F80F4f947968206806C2598Cbc5b6FE5b03',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
optimismkovan: {
proxy: '0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
auroratestnet: {
proxy: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
},
},
fuji: {
upgradeBeaconController: '0xcf5BaaF976C80a66Fa7839715C45788f60041A33',
abacusConnectionManager: '0xF7561c34f17A32D5620583A3397C304e7038a7F6',
interchainGasPaymaster: '0x07009DA2249c388aD0f416a235AfE90D784e1aAc',
outboxValidatorManager: '0x58483b754Abb1E8947BE63d6b95DF75b8249543A',
inboxValidatorManagers: {
alfajores: '0x5CE550e14B82a9F32A0aaF9eFc4Fce548D8A0B3e',
kovan: '0x863E8c26621c52ACa1849C53500606e73BA272F0',
mumbai: '0xAb9B273366D794B7F80B4378bc8Aaca75C6178E2',
bsctestnet: '0x19Be55D859368e02d7b9C00803Eb677BDC1359Bd',
arbitrumrinkeby: '0xc756cFc1b7d0d4646589EDf10eD54b201237F5e8',
optimismkovan: '0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33',
auroratestnet: '0x1b33611fCc073aB0737011d5512EF673Bff74962',
},
outbox: {
proxy: '0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE',
implementation: '0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7',
beacon: '0x4926a10788306D84202A2aDbd290b7743146Cc17',
},
inboxes: {
alfajores: {
proxy: '0x68311418D79fE8d96599384ED767d225635d88a8',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
kovan: {
proxy: '0x6b1bb4ce664Bb4164AEB4d3D2E7DE7450DD8084C',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
mumbai: {
proxy: '0x86fb9F1c124fB20ff130C41a79a432F770f67AFD',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
bsctestnet: {
proxy: '0x5821f3B6eE05F3dC62b43B74AB1C8F8E6904b1C8',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
arbitrumrinkeby: {
proxy: '0xD0680F80F4f947968206806C2598Cbc5b6FE5b03',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
optimismkovan: {
proxy: '0x75f3E2a4f424401195A5E176246Ecc9f7e7680ff',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
auroratestnet: {
proxy: '0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C',
implementation: '0xeC7eb4196Bd601DEa7585A744FbFB4CF11278450',
beacon: '0x5CBf4e70448Ed46c2616b04e9ebc72D29FF0cfA9',
},
},
},
mumbai: {
upgradeBeaconController: '0x6966b0E55883d49BFB24539356a2f8A673E02039',
abacusConnectionManager: '0x46f7C5D896bbeC89bE1B19e4485e59b4Be49e9Cc',
interchainGasPaymaster: '0xB08d78F439e55D02C398519eef61606A5926245F',
outboxValidatorManager: '0x54148470292C24345fb828B003461a9444414517',
inboxValidatorManagers: {
alfajores: '0x304cAb315c93B87AAdb2B826A791b2c1Bf749996',
kovan: '0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc',
fuji: '0x666a24F62f7A97BA33c151776Eb3D9441a059eB8',
bsctestnet: '0x7914A3349107A7295Bbf2374db5A973d73D1b324',
arbitrumrinkeby: '0x5d56B8a669F50193b54319442c6EEE5edD662381',
optimismkovan: '0x58483b754Abb1E8947BE63d6b95DF75b8249543A',
auroratestnet: '0x98AAE089CaD930C64a76dD2247a2aC5773a4B8cE',
},
outbox: {
proxy: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
implementation: '0x589C201a07c26b4725A4A829d772f24423da480B',
beacon: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
},
inboxes: {
alfajores: {
proxy: '0x1D5EbC3e15e9ECDe0e3530C85899556797eeaea5',
implementation: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
beacon: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
},
kovan: {
proxy: '0x0526E47C49742C15F8817ef8cf0d8FFc72139D4F',
implementation: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
beacon: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
},
fuji: {
proxy: '0xef48bd850E5827B96B55C4D28FB32Bbaa73616F2',
implementation: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
beacon: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
},
bsctestnet: {
proxy: '0x3C5154a193D6e2955650f9305c8d80c18C814A68',
implementation: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
beacon: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
},
arbitrumrinkeby: {
proxy: '0x05Ea36Caee7d92C173334C9D97DcD39ABdCB2b69',
implementation: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
beacon: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
},
optimismkovan: {
proxy: '0x679Dc08cC3A4acFeea2f7CAFAa37561aE0b41Ce7',
implementation: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
beacon: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
},
auroratestnet: {
proxy: '0x07009DA2249c388aD0f416a235AfE90D784e1aAc',
implementation: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
beacon: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
},
},
},
bsctestnet: {
upgradeBeaconController: '0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8',
abacusConnectionManager: '0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2',
interchainGasPaymaster: '0x44b764045BfDC68517e10e783E69B376cef196B2',
outboxValidatorManager: '0xfc6e546510dC9d76057F1f76633FCFfC188CB213',
inboxValidatorManagers: {
alfajores: '0x589C201a07c26b4725A4A829d772f24423da480B',
kovan: '0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e',
fuji: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
mumbai: '0xF7F0DaB0BECE4498dAc7eb616e288809D4499371',
arbitrumrinkeby: '0xd785272D240B07719e417622cbd2cfA0E584d1bd',
optimismkovan: '0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8',
auroratestnet: '0x527768930D889662Fe7ACF64294871e86e4C2381',
},
outbox: {
proxy: '0x16B710b86CAd07E6F1C531861a16F5feC29dba37',
implementation: '0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7',
beacon: '0xeb6f11189197223c656807a83B0DD374f9A6dF44',
},
inboxes: {
alfajores: {
proxy: '0xB08d78F439e55D02C398519eef61606A5926245F',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
kovan: {
proxy: '0xD3d062a5dcBA85ae863618d4c264d2358300c283',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
fuji: {
proxy: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
mumbai: {
proxy: '0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
arbitrumrinkeby: {
proxy: '0x666a24F62f7A97BA33c151776Eb3D9441a059eB8',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
optimismkovan: {
proxy: '0x7914A3349107A7295Bbf2374db5A973d73D1b324',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
auroratestnet: {
proxy: '0x5d56B8a669F50193b54319442c6EEE5edD662381',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
},
},
arbitrumrinkeby: {
upgradeBeaconController: '0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8',
abacusConnectionManager: '0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2',
interchainGasPaymaster: '0x44b764045BfDC68517e10e783E69B376cef196B2',
outboxValidatorManager: '0xfc6e546510dC9d76057F1f76633FCFfC188CB213',
inboxValidatorManagers: {
alfajores: '0x589C201a07c26b4725A4A829d772f24423da480B',
kovan: '0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e',
fuji: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
mumbai: '0xF7F0DaB0BECE4498dAc7eb616e288809D4499371',
bsctestnet: '0xd785272D240B07719e417622cbd2cfA0E584d1bd',
optimismkovan: '0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8',
auroratestnet: '0x527768930D889662Fe7ACF64294871e86e4C2381',
},
outbox: {
proxy: '0x16B710b86CAd07E6F1C531861a16F5feC29dba37',
implementation: '0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7',
beacon: '0xeb6f11189197223c656807a83B0DD374f9A6dF44',
},
inboxes: {
alfajores: {
proxy: '0xB08d78F439e55D02C398519eef61606A5926245F',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
kovan: {
proxy: '0xD3d062a5dcBA85ae863618d4c264d2358300c283',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
fuji: {
proxy: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
mumbai: {
proxy: '0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
bsctestnet: {
proxy: '0x666a24F62f7A97BA33c151776Eb3D9441a059eB8',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
optimismkovan: {
proxy: '0x7914A3349107A7295Bbf2374db5A973d73D1b324',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
auroratestnet: {
proxy: '0x5d56B8a669F50193b54319442c6EEE5edD662381',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
},
},
optimismkovan: {
upgradeBeaconController: '0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8',
abacusConnectionManager: '0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2',
interchainGasPaymaster: '0x44b764045BfDC68517e10e783E69B376cef196B2',
outboxValidatorManager: '0xfc6e546510dC9d76057F1f76633FCFfC188CB213',
inboxValidatorManagers: {
alfajores: '0x589C201a07c26b4725A4A829d772f24423da480B',
kovan: '0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e',
fuji: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
mumbai: '0xF7F0DaB0BECE4498dAc7eb616e288809D4499371',
bsctestnet: '0xd785272D240B07719e417622cbd2cfA0E584d1bd',
arbitrumrinkeby: '0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8',
auroratestnet: '0x527768930D889662Fe7ACF64294871e86e4C2381',
},
outbox: {
proxy: '0x16B710b86CAd07E6F1C531861a16F5feC29dba37',
implementation: '0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7',
beacon: '0xeb6f11189197223c656807a83B0DD374f9A6dF44',
},
inboxes: {
alfajores: {
proxy: '0xB08d78F439e55D02C398519eef61606A5926245F',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
kovan: {
proxy: '0xD3d062a5dcBA85ae863618d4c264d2358300c283',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
fuji: {
proxy: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
mumbai: {
proxy: '0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
bsctestnet: {
proxy: '0x666a24F62f7A97BA33c151776Eb3D9441a059eB8',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
arbitrumrinkeby: {
proxy: '0x7914A3349107A7295Bbf2374db5A973d73D1b324',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
auroratestnet: {
proxy: '0x5d56B8a669F50193b54319442c6EEE5edD662381',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
},
},
auroratestnet: {
upgradeBeaconController: '0x6E7b29CB2A7617405B4d30C6f84bBD51b4Bb4be8',
abacusConnectionManager: '0xC2E36cd6e32e194EE11f15D9273B64461A4D49A2',
interchainGasPaymaster: '0x44b764045BfDC68517e10e783E69B376cef196B2',
outboxValidatorManager: '0xfc6e546510dC9d76057F1f76633FCFfC188CB213',
inboxValidatorManagers: {
alfajores: '0x589C201a07c26b4725A4A829d772f24423da480B',
kovan: '0x833Dad7FF66884389D5F0cEcba446ffaa7d2837e',
fuji: '0x7d498740A4572f2B5c6b0A1Ba9d1d9DbE207e89E',
mumbai: '0xF7F0DaB0BECE4498dAc7eb616e288809D4499371',
bsctestnet: '0xd785272D240B07719e417622cbd2cfA0E584d1bd',
arbitrumrinkeby: '0x598facE78a4302f11E3de0bee1894Da0b2Cb71F8',
optimismkovan: '0x527768930D889662Fe7ACF64294871e86e4C2381',
},
outbox: {
proxy: '0x16B710b86CAd07E6F1C531861a16F5feC29dba37',
implementation: '0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7',
beacon: '0xeb6f11189197223c656807a83B0DD374f9A6dF44',
},
inboxes: {
alfajores: {
proxy: '0xB08d78F439e55D02C398519eef61606A5926245F',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
kovan: {
proxy: '0xD3d062a5dcBA85ae863618d4c264d2358300c283',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
fuji: {
proxy: '0x7FE7EA170cf08A25C2ff315814D96D93C311E692',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
mumbai: {
proxy: '0xfc8d0D2E15A36f1A3F3aE3Cb127B706c1f23Aadc',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
bsctestnet: {
proxy: '0x666a24F62f7A97BA33c151776Eb3D9441a059eB8',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
arbitrumrinkeby: {
proxy: '0x7914A3349107A7295Bbf2374db5A973d73D1b324',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
optimismkovan: {
proxy: '0x5d56B8a669F50193b54319442c6EEE5edD662381',
implementation: '0xDDcFEcF17586D08A5740B7D91735fcCE3dfe3eeD',
beacon: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
},
},
},
};

@ -1,5 +1,9 @@
import { ChainName, Domain } from './types';
// IDs can be generated in many ways-- for example, in JS:
// > Array.from('celo').map((c, i) => c.charCodeAt(0).toString(16).padStart(2, '0')).join('')
// '63656c6f'
/**
* Mainnets
*/
@ -81,6 +85,26 @@ export const ropsten: Domain = {
id: 3,
};
export const bsctestnet: Domain = {
name: 'bsctestnet',
id: 0x62732d74, // b'bs-t' interpreted as an int
};
export const arbitrumrinkeby: Domain = {
name: 'arbitrumrinkeby',
id: 0x61722d72, // b'ar-r' interpreted as an int
};
export const optimismkovan: Domain = {
name: 'optimismkovan',
id: 0x6f702d6b, // b'op-k' interpreted as an int
};
export const auroratestnet: Domain = {
name: 'auroratestnet',
id: 0x61752d74, // b'au-t' interpreted as an int
};
/**
* Test
*/
@ -112,6 +136,10 @@ export const domains: Record<ChainName, Domain> = {
rinkarby,
ropsten,
kovan,
bsctestnet,
arbitrumrinkeby,
optimismkovan,
auroratestnet,
test1,
test2,
test3,

@ -26,6 +26,10 @@ export enum Chains {
ethereum,
avalanche,
polygon,
bsctestnet,
arbitrumrinkeby,
optimismkovan,
auroratestnet,
test1,
test2,
test3,

Loading…
Cancel
Save