From 626aca2b874c8219f665e863c6fdfbeb2c8c149c Mon Sep 17 00:00:00 2001 From: ollie <67156692+0xEillo@users.noreply.github.com> Date: Sat, 23 Mar 2024 08:01:38 +0000 Subject: [PATCH] feat: As an Issuer, I want to issue Attestations on Arbitrum Nova (#523) --- README.md | 37 + contracts/.openzeppelin/arbitrum-nova.json | 955 ++++++++++++++++++ .../arbitrum-nova/AttestationReader.json | 215 ++++ .../arbitrum-nova/AttestationRegistry.json | 658 ++++++++++++ .../arbitrum-nova/ModuleRegistry.json | 395 ++++++++ .../arbitrum-nova/PortalRegistry.json | 403 ++++++++ .../deployments/arbitrum-nova/Router.json | 233 +++++ .../arbitrum-nova/SchemaRegistry.json | 396 ++++++++ contracts/env/.env.arbitrum-nova | 14 + contracts/hardhat.config.ts | 13 + contracts/script/deploy/deployEverything.ts | 12 + contracts/script/utils.ts | 2 + sdk/src/VeraxSdk.ts | 18 +- subgraph/networks.json | 18 + subgraph/package.json | 15 +- subgraph/subgraph.arbitrum-nova.yaml | 86 ++ 16 files changed, 3463 insertions(+), 7 deletions(-) create mode 100644 contracts/.openzeppelin/arbitrum-nova.json create mode 100644 contracts/deployments/arbitrum-nova/AttestationReader.json create mode 100644 contracts/deployments/arbitrum-nova/AttestationRegistry.json create mode 100644 contracts/deployments/arbitrum-nova/ModuleRegistry.json create mode 100644 contracts/deployments/arbitrum-nova/PortalRegistry.json create mode 100644 contracts/deployments/arbitrum-nova/Router.json create mode 100644 contracts/deployments/arbitrum-nova/SchemaRegistry.json create mode 100644 contracts/env/.env.arbitrum-nova create mode 100644 subgraph/subgraph.arbitrum-nova.yaml diff --git a/README.md b/README.md index 819a048c..57f8c8b2 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ The main contracts (i.e. the "registries") and the helpers contracts are deploye - Linea Mainnet - Arbitrum Testnet - Arbitrum Mainnet +- Arbitrum Nova Here are the addresses on those networks: @@ -164,12 +165,48 @@ Here are the addresses on those networks: +
+ Arbitrum Nova + +- Router = + [0xC81B5149D9Cd49195D00EFb16FED89f3Ba78E03B](https://nova.arbiscan.io/address/0xc81b5149d9cd49195d00efb16fed89f3ba78e03b) +- AttestationRegistry = + [0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8](https://nova.arbiscan.io/address/0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8) +- ModuleRegistry = + [0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3](https://nova.arbiscan.io/address/0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3) +- PortalRegistry = + [0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38](https://nova.arbiscan.io/address/0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38) +- SchemaRegistry = + [0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB](https://nova.arbiscan.io/address/0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB) +- AttestationReader = + [0x7A22D0Fba31a4d5b5E4F5263379B4dbf3707b48c](https://nova.arbiscan.io/address/0x7A22D0Fba31a4d5b5E4F5263379B4dbf3707b48c) + +
+
+ Arbitrum Nova + +- Router = + [0xC81B5149D9Cd49195D00EFb16FED89f3Ba78E03B](https://nova.arbiscan.io/address/0xc81b5149d9cd49195d00efb16fed89f3ba78e03b) +- AttestationRegistry = + [0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8](https://nova.arbiscan.io/address/0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8) +- ModuleRegistry = + [0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3](https://nova.arbiscan.io/address/0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3) +- PortalRegistry = + [0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38](https://nova.arbiscan.io/address/0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38) +- SchemaRegistry = + [0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB](https://nova.arbiscan.io/address/0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB) +- AttestationReader = + [0x7A22D0Fba31a4d5b5E4F5263379B4dbf3707b48c](https://nova.arbiscan.io/address/0x7A22D0Fba31a4d5b5E4F5263379B4dbf3707b48c) + +
+ ## Subgraphs Addresses - [Linea Testnet](https://api.goldsky.com/api/public/project_clqghnrbp9nx201wtgylv8748/subgraphs/verax/subgraph-testnet/gn) - [Linea Mainnet](https://graph-query.linea.build/subgraphs/name/Consensys/linea-attestation-registry/graphql) - [Arbitrum Goerli](https://api.thegraph.com/subgraphs/name/cliqueofficial/verax-arbitrum-goerli) - [Arbitrum Mainnet](https://api.thegraph.com/subgraphs/name/cliqueofficial/verax-arbitrum) +- [Arbitrum Nova](https://api.goldsky.com/api/public/project_clr9aj9alwgwg01q7ci1rh781/subgraphs/verax-arbitrum-nova/0.0.5/gn) ## License diff --git a/contracts/.openzeppelin/arbitrum-nova.json b/contracts/.openzeppelin/arbitrum-nova.json new file mode 100644 index 00000000..f0e9be9c --- /dev/null +++ b/contracts/.openzeppelin/arbitrum-nova.json @@ -0,0 +1,955 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0xF318A96f3A7AB731CCF837cb99A82a4a5d973e96", + "txHash": "0x08993a854d4381837715cfa190b699a86a7e86ce7e4905aa590f7d2551ad01d7" + }, + "proxies": [ + { + "address": "0xC81B5149D9Cd49195D00EFb16FED89f3Ba78E03B", + "txHash": "0x785aaa879e29731cc7ee57f412597642c98448f79dd22a79f629ef0773be1f16", + "kind": "transparent" + }, + { + "address": "0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8", + "txHash": "0x05ee92525d3b2c79b684562f4bd6acb126338939a2c044c4b712165aa8bc5b70", + "kind": "transparent" + }, + { + "address": "0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3", + "txHash": "0x89c1eb8595e045e312457acad456c857ca429a452c34125d6371a230b96a2c82", + "kind": "transparent" + }, + { + "address": "0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38", + "txHash": "0xe63780a4948181ec3e340ae0ca427d6f11091e9e1b49635a0cbb5b2eec1aed6d", + "kind": "transparent" + }, + { + "address": "0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB", + "txHash": "0xdc5d5085485f234f5754ed060b247a5a35731a64c7ec7e526f6344e0975982d2", + "kind": "transparent" + }, + { + "address": "0x7A22D0Fba31a4d5b5E4F5263379B4dbf3707b48c", + "txHash": "0xc3aa5dfc8c185aa12eb36e304d7d5426a213b19ceed674513319f7ded2615714", + "kind": "transparent" + } + ], + "impls": { + "4353fbe787c13443291bba3d18e906853909285ba948d10f4d95994940b68c97": { + "address": "0x4B226C4Ca8b303cF38B8927940A8a1B4E452D66A", + "txHash": "0x3d032d18b9974500ccb943667c4e74de8cb795e3e56c2a5b438c67ae3ecc3fb7", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "ATTESTATION_REGISTRY", + "offset": 0, + "slot": "101", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:13" + }, + { + "label": "MODULE_REGISTRY", + "offset": 0, + "slot": "102", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:14" + }, + { + "label": "PORTAL_REGISTRY", + "offset": 0, + "slot": "103", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:15" + }, + { + "label": "SCHEMA_REGISTRY", + "offset": 0, + "slot": "104", + "type": "t_address", + "contract": "Router", + "src": "src/Router.sol:16" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "afc9287c19cb1b830999d2016348e104b2143101ed97ea26cf1c1b48849ca551": { + "address": "0xF2FaAE8f4A14BED20a3Abc011a5baaB76aeCDcb6", + "txHash": "0x6e604cfd76157a23c1eb5bc6d702f0e6042dba4816da366cfee74e2f5e9213d6", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)7410", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:17" + }, + { + "label": "version", + "offset": 20, + "slot": "101", + "type": "t_uint16", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:19" + }, + { + "label": "attestationIdCounter", + "offset": 22, + "slot": "101", + "type": "t_uint32", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:20" + }, + { + "label": "attestations", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_bytes32,t_struct(Attestation)8775_storage)", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:22" + }, + { + "label": "chainPrefix", + "offset": 0, + "slot": "103", + "type": "t_uint256", + "contract": "AttestationRegistry", + "src": "src/AttestationRegistry.sol:24" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_storage": { + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(IRouter)7410": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_struct(Attestation)8775_storage)": { + "label": "mapping(bytes32 => struct Attestation)", + "numberOfBytes": "32" + }, + "t_struct(Attestation)8775_storage": { + "label": "struct Attestation", + "members": [ + { + "label": "attestationId", + "type": "t_bytes32", + "offset": 0, + "slot": "0" + }, + { + "label": "schemaId", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + }, + { + "label": "replacedBy", + "type": "t_bytes32", + "offset": 0, + "slot": "2" + }, + { + "label": "attester", + "type": "t_address", + "offset": 0, + "slot": "3" + }, + { + "label": "portal", + "type": "t_address", + "offset": 0, + "slot": "4" + }, + { + "label": "attestedDate", + "type": "t_uint64", + "offset": 20, + "slot": "4" + }, + { + "label": "expirationDate", + "type": "t_uint64", + "offset": 0, + "slot": "5" + }, + { + "label": "revocationDate", + "type": "t_uint64", + "offset": 8, + "slot": "5" + }, + { + "label": "version", + "type": "t_uint16", + "offset": 16, + "slot": "5" + }, + { + "label": "revoked", + "type": "t_bool", + "offset": 18, + "slot": "5" + }, + { + "label": "subject", + "type": "t_bytes_storage", + "offset": 0, + "slot": "6" + }, + { + "label": "attestationData", + "type": "t_bytes_storage", + "offset": 0, + "slot": "7" + } + ], + "numberOfBytes": "256" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "855a9f1d8e96c2bd24b6a929c90e3681a27dfdf6e80bf08bdaf0de5f33e7accf": { + "address": "0x80c2E4937157C104ACda9b64F1AD8F2EFf808d77", + "txHash": "0x4481571891995c765276308e1f91bb5c167bd0a33047e054f667f69841b0608d", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)7410", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:19" + }, + { + "label": "modules", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(Module)8807_storage)", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:21" + }, + { + "label": "moduleAddresses", + "offset": 0, + "slot": "103", + "type": "t_array(t_address)dyn_storage", + "contract": "ModuleRegistry", + "src": "src/ModuleRegistry.sol:23" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IRouter)7410": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(Module)8807_storage)": { + "label": "mapping(address => struct Module)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Module)8807_storage": { + "label": "struct Module", + "members": [ + { + "label": "moduleAddress", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "6a363cbbef1041962fe59a76993db35c8e1078fc08b62ce3c7093407d7e8a39d": { + "address": "0x337F01f3DA4DE2F99d5B9859f396050b0BC9C4a8", + "txHash": "0x6d6883953bbba09e99c59b67f14570fda7ae84326abcd5cb046ad27069c66d3e", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)7410", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:20" + }, + { + "label": "portals", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(Portal)8800_storage)", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:22" + }, + { + "label": "issuers", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_bool)", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:24" + }, + { + "label": "portalAddresses", + "offset": 0, + "slot": "104", + "type": "t_array(t_address)dyn_storage", + "contract": "PortalRegistry", + "src": "src/PortalRegistry.sol:26" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IRouter)7410": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Portal)8800_storage)": { + "label": "mapping(address => struct Portal)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Portal)8800_storage": { + "label": "struct Portal", + "members": [ + { + "label": "id", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "ownerAddress", + "type": "t_address", + "offset": 0, + "slot": "1" + }, + { + "label": "modules", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "isRevocable", + "type": "t_bool", + "offset": 0, + "slot": "3" + }, + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "5" + }, + { + "label": "ownerName", + "type": "t_string_storage", + "offset": 0, + "slot": "6" + } + ], + "numberOfBytes": "224" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "68d0630cb0ae02e0e7d37f7e07193d62999ecb9070d3ca38b245f3954a34b089": { + "address": "0xd23BA3E22dC9728B6b1CC7250040C34423B6Db94", + "txHash": "0x2825e9f4e5f5624ac23c27a1544b2ab672d660daeb4abaf20a4df61a0f5065d1", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)7410", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:16" + }, + { + "label": "schemas", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_bytes32,t_struct(Schema)8784_storage)", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:18" + }, + { + "label": "schemaIds", + "offset": 0, + "slot": "103", + "type": "t_array(t_bytes32)dyn_storage", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:20" + }, + { + "label": "schemasIssuers", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_bytes32,t_address)", + "contract": "SchemaRegistry", + "src": "src/SchemaRegistry.sol:22" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IRouter)7410": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_address)": { + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(Schema)8784_storage)": { + "label": "mapping(bytes32 => struct Schema)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Schema)8784_storage": { + "label": "struct Schema", + "members": [ + { + "label": "name", + "type": "t_string_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "description", + "type": "t_string_storage", + "offset": 0, + "slot": "1" + }, + { + "label": "context", + "type": "t_string_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "schema", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "cc3bd5ce0f70ee7ad8fd47bda375d640dc7035da4746a94f0ccf30df96358f53": { + "address": "0x1Cc982044486fA5620C1b57B2E666755dE340A3F", + "txHash": "0xba6c2a6808146e6d46f9dc20435b21271af2014f3b0cbc453bbbb979e48fcc88", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol:94" + }, + { + "label": "router", + "offset": 0, + "slot": "101", + "type": "t_contract(IRouter)7410", + "contract": "AttestationReader", + "src": "src/AttestationReader.sol:17" + }, + { + "label": "easRegistry", + "offset": 0, + "slot": "102", + "type": "t_contract(IEAS)7361", + "contract": "AttestationReader", + "src": "src/AttestationReader.sol:18" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IEAS)7361": { + "label": "contract IEAS", + "numberOfBytes": "20" + }, + "t_contract(IRouter)7410": { + "label": "contract IRouter", + "numberOfBytes": "20" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + } + } +} diff --git a/contracts/deployments/arbitrum-nova/AttestationReader.json b/contracts/deployments/arbitrum-nova/AttestationReader.json new file mode 100644 index 00000000..ea215943 --- /dev/null +++ b/contracts/deployments/arbitrum-nova/AttestationReader.json @@ -0,0 +1,215 @@ +{ + "address": "0x7A22D0Fba31a4d5b5E4F5263379B4dbf3707b48c", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EASAddressInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "easRegistry", + "outputs": [ + { + "internalType": "contract IEAS", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + } + ], + "name": "getAttestation", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "time", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "expirationTime", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "revocationTime", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "refUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Attestation", + "name": "attestation", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_easRegistryAddress", + "type": "address" + } + ], + "name": "updateEASRegistryAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} diff --git a/contracts/deployments/arbitrum-nova/AttestationRegistry.json b/contracts/deployments/arbitrum-nova/AttestationRegistry.json new file mode 100644 index 00000000..415f5d69 --- /dev/null +++ b/contracts/deployments/arbitrum-nova/AttestationRegistry.json @@ -0,0 +1,658 @@ +{ + "address": "0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AlreadyRevoked", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationDataFieldEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationNotAttested", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationNotRevocable", + "type": "error" + }, + { + "inputs": [], + "name": "AttestationSubjectFieldEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyAttestingPortal", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyPortal", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "AttestationRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "replacedBy", + "type": "bytes32" + } + ], + "name": "AttestationReplaced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "AttestationRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint16", + "name": "version", + "type": "uint16" + } + ], + "name": "VersionUpdated", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload", + "name": "attestationPayload", + "type": "tuple" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "attest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationsPayloads", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "bulkAttest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "attestationIds", + "type": "bytes32[]" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationPayloads", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "bulkReplace", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "attestationIds", + "type": "bytes32[]" + } + ], + "name": "bulkRevoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "getAttestation", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "replacedBy", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "address", + "name": "portal", + "type": "address" + }, + { + "internalType": "uint64", + "name": "attestedDate", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "revocationDate", + "type": "uint64" + }, + { + "internalType": "uint16", + "name": "version", + "type": "uint16" + }, + { + "internalType": "bool", + "name": "revoked", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct Attestation", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAttestationIdCounter", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVersionNumber", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementVersionNumber", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "portalId", + "type": "address" + } + ], + "name": "isRevocable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationsPayloads", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "portal", + "type": "address" + } + ], + "name": "massImport", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload", + "name": "attestationPayload", + "type": "tuple" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "name": "replace", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationId", + "type": "bytes32" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} diff --git a/contracts/deployments/arbitrum-nova/ModuleRegistry.json b/contracts/deployments/arbitrum-nova/ModuleRegistry.json new file mode 100644 index 00000000..69cdc17e --- /dev/null +++ b/contracts/deployments/arbitrum-nova/ModuleRegistry.json @@ -0,0 +1,395 @@ +{ + "address": "0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AttestationPayloadMissing", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleAddressInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleNotRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "ModuleValidationPayloadMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyIssuer", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "name": "ModuleRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "modulesAddresses", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload[]", + "name": "attestationsPayloads", + "type": "tuple[]" + }, + { + "internalType": "bytes[][]", + "name": "validationPayloads", + "type": "bytes[][]" + } + ], + "name": "bulkRunModules", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getModulesNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + } + ], + "name": "isContractAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "moduleAddresses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + } + ], + "name": "modules", + "outputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "modulesAddresses", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "uint64", + "name": "expirationDate", + "type": "uint64" + }, + { + "internalType": "bytes", + "name": "subject", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "attestationData", + "type": "bytes" + } + ], + "internalType": "struct AttestationPayload", + "name": "attestationPayload", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "validationPayloads", + "type": "bytes[]" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "runModules", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} diff --git a/contracts/deployments/arbitrum-nova/PortalRegistry.json b/contracts/deployments/arbitrum-nova/PortalRegistry.json new file mode 100644 index 00000000..5195e035 --- /dev/null +++ b/contracts/deployments/arbitrum-nova/PortalRegistry.json @@ -0,0 +1,403 @@ +{ + "address": "0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "OnlyIssuer", + "type": "error" + }, + { + "inputs": [], + "name": "PortalAddressInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "PortalAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "PortalDescriptionMissing", + "type": "error" + }, + { + "inputs": [], + "name": "PortalInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "PortalNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "PortalNotRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "PortalOwnerNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "issuerAddress", + "type": "address" + } + ], + "name": "IssuerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "issuerAddress", + "type": "address" + } + ], + "name": "IssuerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "portalAddress", + "type": "address" + } + ], + "name": "PortalRegistered", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "bool", + "name": "isRevocable", + "type": "bool" + }, + { + "internalType": "string", + "name": "ownerName", + "type": "string" + } + ], + "name": "deployDefaultPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + } + ], + "name": "getPortalByAddress", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "id", + "type": "address" + }, + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "isRevocable", + "type": "bool" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "ownerName", + "type": "string" + } + ], + "internalType": "struct Portal", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPortalsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "isIssuer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "id", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "bool", + "name": "isRevocable", + "type": "bool" + }, + { + "internalType": "string", + "name": "ownerName", + "type": "string" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "removeIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "setIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} diff --git a/contracts/deployments/arbitrum-nova/Router.json b/contracts/deployments/arbitrum-nova/Router.json new file mode 100644 index 00000000..e334c877 --- /dev/null +++ b/contracts/deployments/arbitrum-nova/Router.json @@ -0,0 +1,233 @@ +{ + "address": "0xC81B5149D9Cd49195D00EFb16FED89f3Ba78E03B", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "registryAddress", + "type": "address" + } + ], + "name": "AttestationRegistryUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "registryAddress", + "type": "address" + } + ], + "name": "ModuleRegistryUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "registryAddress", + "type": "address" + } + ], + "name": "PortalRegistryUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "registryAddress", + "type": "address" + } + ], + "name": "SchemaRegistryUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "getAttestationRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getModuleRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPortalRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSchemaRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_attestationRegistry", + "type": "address" + } + ], + "name": "updateAttestationRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_moduleRegistry", + "type": "address" + } + ], + "name": "updateModuleRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_portalRegistry", + "type": "address" + } + ], + "name": "updatePortalRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_schemaRegistry", + "type": "address" + } + ], + "name": "updateSchemaRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} diff --git a/contracts/deployments/arbitrum-nova/SchemaRegistry.json b/contracts/deployments/arbitrum-nova/SchemaRegistry.json new file mode 100644 index 00000000..2f1513c6 --- /dev/null +++ b/contracts/deployments/arbitrum-nova/SchemaRegistry.json @@ -0,0 +1,396 @@ +{ + "address": "0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "IssuerInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyAssignedIssuer", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyIssuer", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyPortalRegistry", + "type": "error" + }, + { + "inputs": [], + "name": "RouterInvalid", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaNameMissing", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaNotRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "SchemaStringMissing", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "name": "SchemaContextUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "context", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "schemaString", + "type": "string" + } + ], + "name": "SchemaCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "context", + "type": "string" + }, + { + "internalType": "string", + "name": "schemaString", + "type": "string" + } + ], + "name": "createSchema", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "schema", + "type": "string" + } + ], + "name": "getIdFromSchemaString", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + } + ], + "name": "getSchema", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "string", + "name": "context", + "type": "string" + }, + { + "internalType": "string", + "name": "schema", + "type": "string" + } + ], + "internalType": "struct Schema", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSchemasNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + } + ], + "name": "isRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IRouter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "schemaIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "context", + "type": "string" + } + ], + "name": "updateContext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldIssuer", + "type": "address" + }, + { + "internalType": "address", + "name": "newIssuer", + "type": "address" + } + ], + "name": "updateMatchingSchemaIssuers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "updateRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "issuer", + "type": "address" + } + ], + "name": "updateSchemaIssuer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} diff --git a/contracts/env/.env.arbitrum-nova b/contracts/env/.env.arbitrum-nova new file mode 100644 index 00000000..5e6c32fe --- /dev/null +++ b/contracts/env/.env.arbitrum-nova @@ -0,0 +1,14 @@ +# Config +INFURA_KEY= + +PRIVATE_KEY_NOVA=0000000000000000000000000000000000000000000000000000000000000001 + +ARBISCAN_NOVA_API_KEY= + +# Contracts +ROUTER_ADDRESS=0xC81B5149D9Cd49195D00EFb16FED89f3Ba78E03B +ATTESTATION_REGISTRY_ADDRESS=0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8 +MODULE_REGISTRY_ADDRESS=0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3 +PORTAL_REGISTRY_ADDRESS=0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38 +SCHEMA_REGISTRY_ADDRESS=0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB +ATTESTATION_READER_ADDRESS=0x7A22D0Fba31a4d5b5E4F5263379B4dbf3707b48c \ No newline at end of file diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 0dab6d7f..4c147948 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -35,6 +35,10 @@ const config: HardhatUserConfig = { accounts: process.env.PRIVATE_KEY_ARBITRUM_MAINNET !== undefined ? [process.env.PRIVATE_KEY_ARBITRUM_MAINNET] : [], }, + "arbitrum-nova": { + url: "https://arbitrum-nova.publicnode.com", + accounts: process.env.PRIVATE_KEY_NOVA !== undefined ? [process.env.PRIVATE_KEY_NOVA] : [], + }, "linea-goerli": { url: `https://linea-goerli.infura.io/v3/${process.env.INFURA_KEY ?? ""}`, accounts: process.env.PRIVATE_KEY_LINEA_TESTNET !== undefined ? [process.env.PRIVATE_KEY_LINEA_TESTNET] : [], @@ -56,6 +60,7 @@ const config: HardhatUserConfig = { "arbitrum-goerli": process.env.ARBISCAN_API_KEY ?? "", "arbitrum-sepolia": process.env.ARBISCAN_API_KEY ?? "", arbitrum: process.env.ARBISCAN_API_KEY ?? "", + "arbitrum-nova": process.env.ARBISCAN_NOVA_API_KEY ?? "", "linea-goerli": process.env.LINEASCAN_API_KEY ?? "", linea: process.env.LINEASCAN_API_KEY ?? "", "scroll-sepolia": process.env.SCROLL_API_KEY ?? "", @@ -85,6 +90,14 @@ const config: HardhatUserConfig = { browserURL: "https://arbiscan.io", }, }, + { + network: "arbitrum-nova", + chainId: 42170, + urls: { + apiURL: "https://api-nova.arbiscan.io/api", + browserURL: "https://nova.arbiscan.io/", + }, + }, { network: "linea-goerli", chainId: 59140, diff --git a/contracts/script/deploy/deployEverything.ts b/contracts/script/deploy/deployEverything.ts index 219396ae..ddbd346d 100644 --- a/contracts/script/deploy/deployEverything.ts +++ b/contracts/script/deploy/deployEverything.ts @@ -16,6 +16,8 @@ async function main() { const routerProxyAddress = await router.getAddress(); const routerImplementationAddress = await upgrades.erc1967.getImplementationAddress(routerProxyAddress); + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait for 5 seconds + await run("verify:verify", { address: routerProxyAddress, }); @@ -35,6 +37,8 @@ async function main() { attestationRegistryProxyAddress, ); + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait for 5 seconds + await run("verify:verify", { address: attestationRegistryProxyAddress, }); @@ -54,6 +58,8 @@ async function main() { moduleRegistryProxyAddress, ); + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait for 5 seconds + await run("verify:verify", { address: moduleRegistryProxyAddress, }); @@ -73,6 +79,8 @@ async function main() { portalRegistryProxyAddress, ); + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait for 5 seconds + await run("verify:verify", { address: portalRegistryProxyAddress, }); @@ -92,6 +100,8 @@ async function main() { schemaRegistryProxyAddress, ); + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait for 5 seconds + await run("verify:verify", { address: schemaRegistryProxyAddress, }); @@ -111,6 +121,8 @@ async function main() { attestationReaderProxyAddress, ); + await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait for 5 seconds + await run("verify:verify", { address: attestationReaderProxyAddress, }); diff --git a/contracts/script/utils.ts b/contracts/script/utils.ts index 07b240e5..c2ce1fe8 100644 --- a/contracts/script/utils.ts +++ b/contracts/script/utils.ts @@ -10,6 +10,8 @@ export const getChainPrefix = (chainId: bigint): `0x${string}` => { return "0x0001000000000000000000000000000000000000000000000000000000000000"; case 42161n: // Arbitrum mainnet return "0x0001000000000000000000000000000000000000000000000000000000000000"; + case 42170n: // Arbitrum nova + return "0x0002000000000000000000000000000000000000000000000000000000000000"; default: throw new Error("Unknown network"); } diff --git a/sdk/src/VeraxSdk.ts b/sdk/src/VeraxSdk.ts index ac4389e4..e8704381 100644 --- a/sdk/src/VeraxSdk.ts +++ b/sdk/src/VeraxSdk.ts @@ -1,4 +1,4 @@ -import { arbitrum, arbitrumGoerli, arbitrumSepolia, linea, lineaTestnet } from "viem/chains"; +import { arbitrumNova, arbitrum, arbitrumGoerli, arbitrumSepolia, linea, lineaTestnet } from "viem/chains"; import AttestationDataMapper from "./dataMapper/AttestationDataMapper"; import SchemaDataMapper from "./dataMapper/SchemaDataMapper"; import ModuleDataMapper from "./dataMapper/ModuleDataMapper"; @@ -38,6 +38,22 @@ export class VeraxSdk { attestationRegistryAddress: "0xC765F28096F6121C2F2b82D35A4346280164428b", }; + static DEFAULT_ARBITRUM_NOVA: Conf = { + chain: arbitrumNova, + mode: SDKMode.BACKEND, + subgraphUrl: + "https://api.goldsky.com/api/public/project_clr9aj9alwgwg01q7ci1rh781/subgraphs/verax-arbitrum-nova/0.0.5/gn", + portalRegistryAddress: "0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38", + moduleRegistryAddress: "0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3", + schemaRegistryAddress: "0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB", + attestationRegistryAddress: "0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8", + }; + + static DEFAULT_ARBITRUM_NOVA_FRONTEND: Conf = { + ...VeraxSdk.DEFAULT_ARBITRUM_NOVA, + mode: SDKMode.FRONTEND, + }; + static DEFAULT_LINEA_TESTNET_FRONTEND: Conf = { ...VeraxSdk.DEFAULT_LINEA_TESTNET, mode: SDKMode.FRONTEND, diff --git a/subgraph/networks.json b/subgraph/networks.json index b77219fb..7427d013 100644 --- a/subgraph/networks.json +++ b/subgraph/networks.json @@ -88,5 +88,23 @@ "address": "0xE96072F46EA0e42e538762dDc0aFa4ED8AE6Ec27", "startBlock": 149975041 } + }, + "arbitrum-nova": { + "AttestationRegistry": { + "address": "0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8", + "startBlock": 38935000 + }, + "ModuleRegistry": { + "address": "0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3", + "startBlock": 38935000 + }, + "PortalRegistry": { + "address": "0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38", + "startBlock": 38935000 + }, + "SchemaRegistry": { + "address": "0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB", + "startBlock": 38935000 + } } } diff --git a/subgraph/package.json b/subgraph/package.json index cb4c562d..d305ec98 100644 --- a/subgraph/package.json +++ b/subgraph/package.json @@ -17,14 +17,16 @@ "scripts": { "build:linea-mainnet": "cp subgraph.linea-mainnet.yaml subgraph.yaml && pnpm run codegen:linea-mainnet && graph build --network linea-mainnet", "build:linea-goerli": "cp subgraph.linea-goerli.yaml subgraph.yaml && pnpm run codegen:linea-goerli && graph build --network linea-goerli", - "build:arbitrum-goerli": "cp subgraph.linea-goerli.yaml subgraph.yaml && pnpm run codegen:arbitrum-goerli && graph build --network arbitrum-goerli", + "build:arbitrum-goerli": "cp subgraph.arbitrum-goerli.yaml subgraph.yaml && pnpm run codegen:arbitrum-goerli && graph build --network arbitrum-goerli", "build:arbitrum-sepolia": "cp subgraph.arbitrum-sepolia.yaml subgraph.yaml && pnpm run codegen:arbitrum-sepolia && graph build --network arbitrum-sepolia", - "build:arbitrum-one": "cp subgraph.linea-goerli.yaml subgraph.yaml && pnpm run codegen:arbitrum-one && graph build --network arbitrum-one", + "build:arbitrum-mainnet": "cp subgraph.arbitrum-mainnet.yaml subgraph.yaml && pnpm run codegen:arbitrum-mainnet && graph build --network arbitrum-mainnet", + "build:arbitrum-nova": "cp subgraph.arbitrum-nova.yaml subgraph.yaml && pnpm run codegen:arbitrum-nova && graph build --network arbitrum-nova", "codegen:linea-mainnet": "cp subgraph.linea-mainnet.yaml subgraph.yaml && graph codegen", "codegen:linea-goerli": "cp subgraph.linea-goerli.yaml subgraph.yaml && graph codegen", - "codegen:arbitrum-goerli": "cp subgraph.linea-goerli.yaml subgraph.yaml && graph codegen", + "codegen:arbitrum-goerli": "cp subgraph.arbitrum-goerli.yaml subgraph.yaml && graph codegen", "codegen:arbitrum-sepolia": "cp subgraph.arbitrum-sepolia.yaml subgraph.yaml && graph codegen", - "codegen:arbitrum-one": "cp subgraph.linea-mainnet.yaml subgraph.yaml && graph codegen", + "codegen:arbitrum-mainnet": "cp subgraph.arbitrum-mainnet.yaml subgraph.yaml && graph codegen", + "codegen:arbitrum-nova": "cp subgraph.arbitrum-nova.yaml subgraph.yaml && graph codegen", "create:linea-mainnet": "source .env && graph create --node $DEPLOY_ENDPOINT_LINEA_MAINNET Consensys/linea-attestation-registry", "create:linea-goerli": "source .env && graph create --node $DEPLOY_ENDPOINT_LINEA_GOERLI Consensys/linea-attestation-registry", "create:arbitrum-goerli": "source .env && graph create --node $DEPLOY_ENDPOINT_ARBITRUM_GOERLI Consensys/verax-arbitrum-goerli", @@ -32,9 +34,10 @@ "create:arbitrum-one": "source .env && graph create --node $DEPLOY_ENDPOINT_ARBITRUM_GOERLI Consensys/verax-arbitrum", "deploy:linea-mainnet": "source .env && cp subgraph.linea-mainnet.yaml subgraph.yaml && pnpm run build:linea-mainnet && graph deploy --network linea-mainnet --node $DEPLOY_ENDPOINT_LINEA_MAINNET --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.1 Consensys/linea-attestation-registry", "deploy:linea-goerli": "source .env && cp subgraph.linea-goerli.yaml subgraph.yaml && pnpm run build:linea-goerli && graph deploy --network linea-goerli --node $DEPLOY_ENDPOINT_LINEA_GOERLI --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.5 Consensys/linea-attestation-registry", - "deploy:arbitrum-goerli": "source .env && cp subgraph.arbitrum-goerli.yaml subgraph.yaml && pnpm run build:arbitrum-goerli && graph deploy --network arbitrum-goerli --product hosted-service $SUBGRAPH_NAME_ARBITRUM_GOERLI", + "deploy:arbitrum-goerli": "source .env && cp subgraph.arbitrum-goerli.yaml subgraph.yaml && pnpm run build:arbitrum-goerli && graph deploy --network arbitrum-goerli --node $DEPLOY_ENDPOINT_ARBITRUM_GOERLI --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.5 Consensys/verax-arbitrum-goerli", "deploy:arbitrum-sepolia": "source .env && cp subgraph.arbitrum-sepolia.yaml subgraph.yaml && pnpm run build:arbitrum-sepolia && graph deploy --studio $SUBGRAPH_NAME_ARBITRUM_SEPOLIA", - "deploy:arbitrum-one": "source .env && cp subgraph.arbitrum-one.yaml subgraph.yaml && pnpm run build:arbitrum-one && graph deploy --network arbitrum-one --product hosted-service $SUBGRAPH_NAME_ARBITRUM", + "deploy:arbitrum-mainnet": "source .env && cp subgraph.arbitrum-mainnet.yaml subgraph.yaml && pnpm run build:arbitrum-mainnet && graph deploy --network arbitrum-mainnet --node $DEPLOY_ENDPOINT_ARBITRUM_MAINNET --headers \"{\\\"Authorization\\\": \\\"Basic $IPFS_IDENTIFIERS\\\"}\" --ipfs $IPFS_ENDPOINT --version-label v0.0.5 Consensys/verax-arbitrum", + "deploy:arbitrum-nova": "source .env && cp subgraph.arbitrum-nova.yaml subgraph.yaml && pnpm run build:arbitrum-nova && goldsky subgraph deploy 'verax-arbitrum-nova/0.0.5'", "remove:linea-mainnet": "source .env && graph remove --node $DEPLOY_ENDPOINT_LINEA_MAINNET Consensys/linea-attestation-registry", "remove:linea-goerli": "source .env && graph remove --node $DEPLOY_ENDPOINT_LINEA_GOERLI Consensys/linea-attestation-registry", "test": "pnpm run codegen:linea-goerli && graph test", diff --git a/subgraph/subgraph.arbitrum-nova.yaml b/subgraph/subgraph.arbitrum-nova.yaml new file mode 100644 index 00000000..615b0e27 --- /dev/null +++ b/subgraph/subgraph.arbitrum-nova.yaml @@ -0,0 +1,86 @@ +specVersion: 0.0.5 +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum + name: AttestationRegistry + network: arbitrum-nova + source: + abi: AttestationRegistry + address: "0xB9Cf26ED827Eb4A7079e8dedB0ea93D932A2e3e8" + startBlock: 38935000 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Attestation + abis: + - name: AttestationRegistry + file: ./abis/AttestationRegistry.json + eventHandlers: + - event: AttestationRegistered(indexed bytes32) + handler: handleAttestationRegistered + file: ./src/attestation-registry.ts + - kind: ethereum + name: ModuleRegistry + network: arbitrum-nova + source: + abi: ModuleRegistry + address: "0x46F7471cd2C1d69Cb5e62c1a34F3fCAf81304Fc3" + startBlock: 38935000 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Module + abis: + - name: ModuleRegistry + file: ./abis/ModuleRegistry.json + eventHandlers: + - event: ModuleRegistered(string,string,address) + handler: handleModuleRegistered + file: ./src/module-registry.ts + - kind: ethereum + name: PortalRegistry + network: arbitrum-nova + source: + abi: PortalRegistry + address: "0xADc8da3d3388dEe74C7134fC4AEe1cF866Da5d38" + startBlock: 38935000 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Portal + abis: + - name: PortalRegistry + file: ./abis/PortalRegistry.json + eventHandlers: + - event: PortalRegistered(string,string,address) + handler: handlePortalRegistered + file: ./src/portal-registry.ts + - kind: ethereum + name: SchemaRegistry + network: arbitrum-nova + source: + abi: SchemaRegistry + address: "0x9b5BABcEbf0E8550da1eCDe5674783179B6557FB" + startBlock: 38935000 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - Portal + abis: + - name: SchemaRegistry + file: ./abis/SchemaRegistry.json + eventHandlers: + - event: SchemaCreated(indexed bytes32,string,string,string,string) + handler: handleSchemaCreated + - event: SchemaContextUpdated(indexed bytes32) + handler: handleSchemaContextUpdated + file: ./src/schema-registry.ts