diff --git a/README.md b/README.md index b4121136..6ee3b9bf 100755 --- a/README.md +++ b/README.md @@ -373,6 +373,23 @@ Version 1.3.0: * Contract: [0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17](https://sepolia.scrollscan.com/address/0x7C2cb1eDC328491da52de2a0afc44D3B0Ae7ee17) * Deployment and ABI: [Indexer.json](./deployments/scroll-sepolia/Indexer.json) +#### Ink Sepolia + +Version 1.4.1-beta.1: + +* **EAS**: + * Contract: [0x4200000000000000000000000000000000000021](https://explorer-sepolia.inkonchain.com/address/0x4200000000000000000000000000000000000021) + * Deployment and ABI: [EAS.json](./deployments/ink-sepolia/EAS.json) +* **SchemaRegistry**: + * Contract: [0x4200000000000000000000000000000000000020](https://explorer-sepolia.inkonchain.com/address/0x4200000000000000000000000000000000000020) + * Deployment and ABI: [SchemaRegistry.json](./deployments/ink-sepolia/SchemaRegistry.json) +* **EIP712Proxy**: + * Contract: [0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F](https://explorer-sepolia.inkonchain.com/address/0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F) + * Deployment and ABI: [EIP712Proxy.json](./deployments/ink-sepolia/EIP712Proxy.json) +* **Indexer**: + * Contract: [0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e](https://explorer-sepolia.inkonchain.com/address/0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e) + * Deployment and ABI: [Indexer.json](./deployments/ink-sepolia/Indexer.json) + #### Linea Goerli Version 1.2.0: diff --git a/deployments/ink-sepolia/.chainId b/deployments/ink-sepolia/.chainId new file mode 100644 index 00000000..c8baba98 --- /dev/null +++ b/deployments/ink-sepolia/.chainId @@ -0,0 +1 @@ +763373 diff --git a/deployments/ink-sepolia/.migrations.json b/deployments/ink-sepolia/.migrations.json new file mode 100644 index 00000000..f3cfa044 --- /dev/null +++ b/deployments/ink-sepolia/.migrations.json @@ -0,0 +1,9 @@ +{ + "000001-registry": 1682454805, + "000002-eas": 1682454812, + "000003-register-initial-schemas": 1732802675, + "000004-name-initial-schemas": 1732802681, + "000005-eip712-proxy": 1732802997, + "000006-indexer": 1732803300, + "000100-test-seed": 1732813635 +} diff --git a/deployments/ink-sepolia/EAS.json b/deployments/ink-sepolia/EAS.json new file mode 100644 index 00000000..697463cd --- /dev/null +++ b/deployments/ink-sepolia/EAS.json @@ -0,0 +1,1030 @@ +{ + "address": "0x4200000000000000000000000000000000000021", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AccessDenied", + "type": "error" + }, + { + "inputs": [], + "name": "AlreadyRevoked", + "type": "error" + }, + { + "inputs": [], + "name": "AlreadyRevokedOffchain", + "type": "error" + }, + { + "inputs": [], + "name": "AlreadyTimestamped", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestation", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestations", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidExpirationTime", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidLength", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidOffset", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRegistry", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRevocation", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRevocations", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSchema", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidVerifier", + "type": "error" + }, + { + "inputs": [], + "name": "Irrevocable", + "type": "error" + }, + { + "inputs": [], + "name": "NotFound", + "type": "error" + }, + { + "inputs": [], + "name": "NotPayable", + "type": "error" + }, + { + "inputs": [], + "name": "WrongSchema", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + } + ], + "name": "Attested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + } + ], + "name": "Revoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "revoker", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "data", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "RevokedOffchain", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "data", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "name": "Timestamped", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expirationTime", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "refUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct AttestationRequestData", + "name": "data", + "type": "tuple" + } + ], + "internalType": "struct AttestationRequest", + "name": "request", + "type": "tuple" + } + ], + "name": "attest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expirationTime", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "refUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct AttestationRequestData", + "name": "data", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct EIP712Signature", + "name": "signature", + "type": "tuple" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "internalType": "struct DelegatedAttestationRequest", + "name": "delegatedRequest", + "type": "tuple" + } + ], + "name": "attestByDelegation", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getAttestTypeHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "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": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "revoker", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "data", + "type": "bytes32" + } + ], + "name": "getRevokeOffchain", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRevokeTypeHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getSchemaRegistry", + "outputs": [ + { + "internalType": "contract ISchemaRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "data", + "type": "bytes32" + } + ], + "name": "getTimestamp", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + } + ], + "name": "isAttestationValid", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expirationTime", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "refUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct AttestationRequestData[]", + "name": "data", + "type": "tuple[]" + } + ], + "internalType": "struct MultiAttestationRequest[]", + "name": "multiRequests", + "type": "tuple[]" + } + ], + "name": "multiAttest", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expirationTime", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "refUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct AttestationRequestData[]", + "name": "data", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct EIP712Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + } + ], + "internalType": "struct MultiDelegatedAttestationRequest[]", + "name": "multiDelegatedRequests", + "type": "tuple[]" + } + ], + "name": "multiAttestByDelegation", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct RevocationRequestData[]", + "name": "data", + "type": "tuple[]" + } + ], + "internalType": "struct MultiRevocationRequest[]", + "name": "multiRequests", + "type": "tuple[]" + } + ], + "name": "multiRevoke", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct RevocationRequestData[]", + "name": "data", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct EIP712Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "revoker", + "type": "address" + } + ], + "internalType": "struct MultiDelegatedRevocationRequest[]", + "name": "multiDelegatedRequests", + "type": "tuple[]" + } + ], + "name": "multiRevokeByDelegation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "data", + "type": "bytes32[]" + } + ], + "name": "multiRevokeOffchain", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "data", + "type": "bytes32[]" + } + ], + "name": "multiTimestamp", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct RevocationRequestData", + "name": "data", + "type": "tuple" + } + ], + "internalType": "struct RevocationRequest", + "name": "request", + "type": "tuple" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct RevocationRequestData", + "name": "data", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct EIP712Signature", + "name": "signature", + "type": "tuple" + }, + { + "internalType": "address", + "name": "revoker", + "type": "address" + } + ], + "internalType": "struct DelegatedRevocationRequest", + "name": "delegatedRequest", + "type": "tuple" + } + ], + "name": "revokeByDelegation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "data", + "type": "bytes32" + } + ], + "name": "revokeOffchain", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "data", + "type": "bytes32" + } + ], + "name": "timestamp", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/deployments/ink-sepolia/EIP712Proxy.json b/deployments/ink-sepolia/EIP712Proxy.json new file mode 100644 index 00000000..ea075baa --- /dev/null +++ b/deployments/ink-sepolia/EIP712Proxy.json @@ -0,0 +1,793 @@ +{ + "address": "0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IEAS", + "name": "eas", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AccessDenied", + "type": "error" + }, + { + "inputs": [], + "name": "DeadlineExpired", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidEAS", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidLength", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [], + "name": "NotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "inputs": [], + "name": "UsedSignature", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expirationTime", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "refUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct AttestationRequestData", + "name": "data", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct Signature", + "name": "signature", + "type": "tuple" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "uint64", + "name": "deadline", + "type": "uint64" + } + ], + "internalType": "struct DelegatedProxyAttestationRequest", + "name": "delegatedRequest", + "type": "tuple" + } + ], + "name": "attestByDelegation", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAttestTypeHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + } + ], + "name": "getAttester", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getEAS", + "outputs": [ + { + "internalType": "contract IEAS", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRevokeTypeHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expirationTime", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "refUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct AttestationRequestData[]", + "name": "data", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "uint64", + "name": "deadline", + "type": "uint64" + } + ], + "internalType": "struct MultiDelegatedProxyAttestationRequest[]", + "name": "multiDelegatedRequests", + "type": "tuple[]" + } + ], + "name": "multiAttestByDelegation", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct RevocationRequestData[]", + "name": "data", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "revoker", + "type": "address" + }, + { + "internalType": "uint64", + "name": "deadline", + "type": "uint64" + } + ], + "internalType": "struct MultiDelegatedProxyRevocationRequest[]", + "name": "multiDelegatedRequests", + "type": "tuple[]" + } + ], + "name": "multiRevokeByDelegation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "schema", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct RevocationRequestData", + "name": "data", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct Signature", + "name": "signature", + "type": "tuple" + }, + { + "internalType": "address", + "name": "revoker", + "type": "address" + }, + { + "internalType": "uint64", + "name": "deadline", + "type": "uint64" + } + ], + "internalType": "struct DelegatedProxyRevocationRequest", + "name": "delegatedRequest", + "type": "tuple" + } + ], + "name": "revokeByDelegation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xbe240d67a9f696f42f2daa13a57052fb5ed8a085e64a6e126b1853a9fd731a12", + "receipt": { + "to": null, + "from": "0xbA20d34dc4745A3190fEDdEBdDc70270895B457F", + "contractAddress": "0x79369eEe29e7e191F5a6278185eA4a0D906b9b9F", + "transactionIndex": 1, + "gasUsed": "2297740", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x67e94624769fceff8666258dd26414a119c3fb25ab3cad6da63a6b6864eef380", + "transactionHash": "0xbe240d67a9f696f42f2daa13a57052fb5ed8a085e64a6e126b1853a9fd731a12", + "logs": [], + "blockNumber": 3799376, + "cumulativeGasUsed": "2341606", + "status": 1, + "byzantium": true + }, + "args": [ + "0x4200000000000000000000000000000000000021", + "EIP712Proxy" + ], + "numDeployments": 1, + "solcInputHash": "ab2e55c92b39ec3be86af0608f634927", + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEAS\",\"name\":\"eas\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessDenied\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DeadlineExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEAS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UsedSignature\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expirationTime\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"refUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct AttestationRequestData\",\"name\":\"data\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct Signature\",\"name\":\"signature\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"struct DelegatedProxyAttestationRequest\",\"name\":\"delegatedRequest\",\"type\":\"tuple\"}],\"name\":\"attestByDelegation\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAttestTypeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"getAttester\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEAS\",\"outputs\":[{\"internalType\":\"contract IEAS\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRevokeTypeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expirationTime\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"revocable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"refUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct AttestationRequestData[]\",\"name\":\"data\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"struct MultiDelegatedProxyAttestationRequest[]\",\"name\":\"multiDelegatedRequests\",\"type\":\"tuple[]\"}],\"name\":\"multiAttestByDelegation\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct RevocationRequestData[]\",\"name\":\"data\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"struct MultiDelegatedProxyRevocationRequest[]\",\"name\":\"multiDelegatedRequests\",\"type\":\"tuple[]\"}],\"name\":\"multiRevokeByDelegation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schema\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct RevocationRequestData\",\"name\":\"data\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct Signature\",\"name\":\"signature\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"internalType\":\"struct DelegatedProxyRevocationRequest\",\"name\":\"delegatedRequest\",\"type\":\"tuple\"}],\"name\":\"revokeByDelegation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\":{\"params\":{\"delegatedRequest\":\"The arguments of the delegated attestation request.\"},\"returns\":{\"_0\":\"The UID of the new attestation. Example: attestByDelegation({ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: { recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', expirationTime: 1673891048, revocable: true, refUID: '0x0000000000000000000000000000000000000000000000000000000000000000', data: '0x1234', value: 0 }, signature: { v: 28, r: '0x148c...b25b', s: '0x5a72...be22' }, attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e', deadline: 1673891048 })\"}},\"constructor\":{\"details\":\"Creates a new EIP1271Verifier instance.\",\"params\":{\"eas\":\"The address of the global EAS contract.\",\"name\":\"The user readable name of the signing domain.\"}},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\":{\"params\":{\"multiDelegatedRequests\":\"The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization.\"},\"returns\":{\"_0\":\"The UIDs of the new attestations. Example: multiAttestByDelegation([{ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: [{ recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', expirationTime: 1673891048, revocable: true, refUID: '0x0000000000000000000000000000000000000000000000000000000000000000', data: '0x1234', value: 0 }, { recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf', expirationTime: 0, revocable: false, refUID: '0x0000000000000000000000000000000000000000000000000000000000000000', data: '0x00', value: 0 }], signatures: [{ v: 28, r: '0x148c...b25b', s: '0x5a72...be22' }, { v: 28, r: '0x487s...67bb', s: '0x12ad...2366' }], attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4', deadline: 1673891048 }])\"}},\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\":{\"params\":{\"multiDelegatedRequests\":\"The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: [{ uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25', value: 1000 }, { uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade', value: 0 }], signatures: [{ v: 28, r: '0x148c...b25b', s: '0x5a72...be22' }, { v: 28, r: '0x487s...67bb', s: '0x12ad...2366' }], revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992', deadline: 1673891048 }])\"}},\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\":{\"params\":{\"delegatedRequest\":\"The arguments of the delegated revocation request. Example: revokeByDelegation({ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: { uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba', value: 0 }, signature: { v: 27, r: '0xb593...7142', s: '0x0f5b...2cce' }, revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992', deadline: 1673891048 })\"}},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"title\":\"EIP712Proxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))\":{\"notice\":\"Attests to a specific schema via the provided EIP712 signature.\"},\"getAttestTypeHash()\":{\"notice\":\"Returns the EIP712 type hash for the attest function.\"},\"getAttester(bytes32)\":{\"notice\":\"Returns the attester for a given uid.\"},\"getDomainSeparator()\":{\"notice\":\"Returns the domain separator used in the encoding of the signatures for attest, and revoke.\"},\"getEAS()\":{\"notice\":\"Returns the EAS.\"},\"getName()\":{\"notice\":\"Returns the EIP712 name.\"},\"getRevokeTypeHash()\":{\"notice\":\"Returns the EIP712 type hash for the revoke function.\"},\"multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\":{\"notice\":\"Attests to multiple schemas using via provided EIP712 signatures.\"},\"multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])\":{\"notice\":\"Revokes existing attestations to multiple schemas via provided EIP712 signatures.\"},\"revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))\":{\"notice\":\"Revokes an existing attestation to a specific schema via the provided EIP712 signature.\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"notice\":\"This utility contract an be used to aggregate delegated attestations without requiring a specific order via nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable*** signatures.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\":\"EIP712Proxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n// A representation of an empty/uninitialized UID.\\nbytes32 constant EMPTY_UID = 0;\\n\\n// A zero expiration represents an non-expiring attestation.\\nuint64 constant NO_EXPIRATION_TIME = 0;\\n\\nerror AccessDenied();\\nerror DeadlineExpired();\\nerror InvalidEAS();\\nerror InvalidLength();\\nerror InvalidSignature();\\nerror NotFound();\\n\\n/// @notice A struct representing ECDSA signature data.\\nstruct Signature {\\n uint8 v; // The recovery ID.\\n bytes32 r; // The x-coordinate of the nonce R.\\n bytes32 s; // The signature data.\\n}\\n\\n/// @notice A struct representing a single attestation.\\nstruct Attestation {\\n bytes32 uid; // A unique identifier of the attestation.\\n bytes32 schema; // The unique identifier of the schema.\\n uint64 time; // The time when the attestation was created (Unix timestamp).\\n uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\n uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\n bytes32 refUID; // The UID of the related attestation.\\n address recipient; // The recipient of the attestation.\\n address attester; // The attester/sender of the attestation.\\n bool revocable; // Whether the attestation is revocable.\\n bytes data; // Custom attestation data.\\n}\\n\\n/// @notice A helper function to work with unchecked iterators in loops.\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\n unchecked {\\n j = i + 1;\\n }\\n}\\n\",\"keccak256\":\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { ISchemaRegistry } from \\\"./ISchemaRegistry.sol\\\";\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\nimport { Attestation, Signature } from \\\"./Common.sol\\\";\\n\\n/// @notice A struct representing the arguments of the attestation request.\\nstruct AttestationRequestData {\\n address recipient; // The recipient of the attestation.\\n uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\n bool revocable; // Whether the attestation is revocable.\\n bytes32 refUID; // The UID of the related attestation.\\n bytes data; // Custom attestation data.\\n uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\n}\\n\\n/// @notice A struct representing the full arguments of the attestation request.\\nstruct AttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData data; // The arguments of the attestation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\nstruct DelegatedAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData data; // The arguments of the attestation request.\\n Signature signature; // The ECDSA signature data.\\n address attester; // The attesting account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the multi attestation request.\\nstruct MultiAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData[] data; // The arguments of the attestation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\nstruct MultiDelegatedAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData[] data; // The arguments of the attestation requests.\\n Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n address attester; // The attesting account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the arguments of the revocation request.\\nstruct RevocationRequestData {\\n bytes32 uid; // The UID of the attestation to revoke.\\n uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\n}\\n\\n/// @notice A struct representing the full arguments of the revocation request.\\nstruct RevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData data; // The arguments of the revocation request.\\n}\\n\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\nstruct DelegatedRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData data; // The arguments of the revocation request.\\n Signature signature; // The ECDSA signature data.\\n address revoker; // The revoking account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the multi revocation request.\\nstruct MultiRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData[] data; // The arguments of the revocation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\nstruct MultiDelegatedRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData[] data; // The arguments of the revocation requests.\\n Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n address revoker; // The revoking account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @title IEAS\\n/// @notice EAS - Ethereum Attestation Service interface.\\ninterface IEAS is ISemver {\\n /// @notice Emitted when an attestation has been made.\\n /// @param recipient The recipient of the attestation.\\n /// @param attester The attesting account.\\n /// @param uid The UID of the new attestation.\\n /// @param schemaUID The UID of the schema.\\n event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\n\\n /// @notice Emitted when an attestation has been revoked.\\n /// @param recipient The recipient of the attestation.\\n /// @param attester The attesting account.\\n /// @param schemaUID The UID of the schema.\\n /// @param uid The UID the revoked attestation.\\n event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\n\\n /// @notice Emitted when a data has been timestamped.\\n /// @param data The data.\\n /// @param timestamp The timestamp.\\n event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\n\\n /// @notice Emitted when a data has been revoked.\\n /// @param revoker The address of the revoker.\\n /// @param data The data.\\n /// @param timestamp The timestamp.\\n event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\n\\n /// @notice Returns the address of the global schema registry.\\n /// @return The address of the global schema registry.\\n function getSchemaRegistry() external view returns (ISchemaRegistry);\\n\\n /// @notice Attests to a specific schema.\\n /// @param request The arguments of the attestation request.\\n /// @return The UID of the new attestation.\\n ///\\n /// Example:\\n /// attest({\\n /// schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",\\n /// data: {\\n /// recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",\\n /// expirationTime: 0,\\n /// revocable: true,\\n /// refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",\\n /// data: \\\"0xF00D\\\",\\n /// value: 0\\n /// }\\n /// })\\n function attest(AttestationRequest calldata request) external payable returns (bytes32);\\n\\n /// @notice Attests to a specific schema via the provided ECDSA signature.\\n /// @param delegatedRequest The arguments of the delegated attestation request.\\n /// @return The UID of the new attestation.\\n ///\\n /// Example:\\n /// attestByDelegation({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 0\\n /// },\\n /// signature: {\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\n /// deadline: 1673891048\\n /// })\\n function attestByDelegation(\\n DelegatedAttestationRequest calldata delegatedRequest\\n ) external payable returns (bytes32);\\n\\n /// @notice Attests to multiple schemas.\\n /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\n /// schema ids to benefit from the best batching optimization.\\n /// @return The UIDs of the new attestations.\\n ///\\n /// Example:\\n /// multiAttest([{\\n /// schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\n /// data: [{\\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 1000\\n /// },\\n /// {\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 0,\\n /// revocable: false,\\n /// refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\n /// data: '0x00',\\n /// value: 0\\n /// }],\\n /// },\\n /// {\\n /// schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\n /// data: [{\\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n /// expirationTime: 0,\\n /// revocable: true,\\n /// refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\n /// data: '0x12345678',\\n /// value: 0\\n /// },\\n /// }])\\n function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\n\\n /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\n /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\n /// grouped by distinct schema ids to benefit from the best batching optimization.\\n /// @return The UIDs of the new attestations.\\n ///\\n /// Example:\\n /// multiAttestByDelegation([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 0\\n /// },\\n /// {\\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n /// expirationTime: 0,\\n /// revocable: false,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x00',\\n /// value: 0\\n /// }],\\n /// signatures: [{\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// {\\n /// v: 28,\\n /// r: '0x487s...67bb',\\n /// s: '0x12ad...2366'\\n /// }],\\n /// attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\n /// deadline: 1673891048\\n /// }])\\n function multiAttestByDelegation(\\n MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\n ) external payable returns (bytes32[] memory);\\n\\n /// @notice Revokes an existing attestation to a specific schema.\\n /// @param request The arguments of the revocation request.\\n ///\\n /// Example:\\n /// revoke({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\n /// value: 0\\n /// }\\n /// })\\n function revoke(RevocationRequest calldata request) external payable;\\n\\n /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\n /// @param delegatedRequest The arguments of the delegated revocation request.\\n ///\\n /// Example:\\n /// revokeByDelegation({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\n /// value: 0\\n /// },\\n /// signature: {\\n /// v: 27,\\n /// r: '0xb593...7142',\\n /// s: '0x0f5b...2cce'\\n /// },\\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n /// deadline: 1673891048\\n /// })\\n function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\n\\n /// @notice Revokes existing attestations to multiple schemas.\\n /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\n /// schema ids to benefit from the best batching optimization.\\n ///\\n /// Example:\\n /// multiRevoke([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n /// value: 1000\\n /// },\\n /// {\\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n /// value: 0\\n /// }],\\n /// },\\n /// {\\n /// schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\n /// data: [{\\n /// uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\n /// value: 0\\n /// },\\n /// }])\\n function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\n\\n /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\n /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\n /// should be grouped by distinct schema ids to benefit from the best batching optimization.\\n ///\\n /// Example:\\n /// multiRevokeByDelegation([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n /// value: 1000\\n /// },\\n /// {\\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n /// value: 0\\n /// }],\\n /// signatures: [{\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// {\\n /// v: 28,\\n /// r: '0x487s...67bb',\\n /// s: '0x12ad...2366'\\n /// }],\\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n /// deadline: 1673891048\\n /// }])\\n function multiRevokeByDelegation(\\n MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\n ) external payable;\\n\\n /// @notice Timestamps the specified bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was timestamped with.\\n function timestamp(bytes32 data) external returns (uint64);\\n\\n /// @notice Timestamps the specified multiple bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was timestamped with.\\n function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\n\\n /// @notice Revokes the specified bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was revoked with.\\n function revokeOffchain(bytes32 data) external returns (uint64);\\n\\n /// @notice Revokes the specified multiple bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was revoked with.\\n function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\n\\n /// @notice Returns an existing attestation by UID.\\n /// @param uid The UID of the attestation to retrieve.\\n /// @return The attestation data members.\\n function getAttestation(bytes32 uid) external view returns (Attestation memory);\\n\\n /// @notice Checks whether an attestation exists.\\n /// @param uid The UID of the attestation to retrieve.\\n /// @return Whether an attestation exists.\\n function isAttestationValid(bytes32 uid) external view returns (bool);\\n\\n /// @notice Returns the timestamp that the specified data was timestamped with.\\n /// @param data The data to query.\\n /// @return The timestamp the data was timestamped with.\\n function getTimestamp(bytes32 data) external view returns (uint64);\\n\\n /// @notice Returns the timestamp that the specified data was timestamped with.\\n /// @param data The data to query.\\n /// @return The timestamp the data was timestamped with.\\n function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\n\\nimport { ISchemaResolver } from \\\"./resolver/ISchemaResolver.sol\\\";\\n\\n/// @notice A struct representing a record for a submitted schema.\\nstruct SchemaRecord {\\n bytes32 uid; // The unique identifier of the schema.\\n ISchemaResolver resolver; // Optional schema resolver.\\n bool revocable; // Whether the schema allows revocations explicitly.\\n string schema; // Custom specification of the schema (e.g., an ABI).\\n}\\n\\n/// @title ISchemaRegistry\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\ninterface ISchemaRegistry is ISemver {\\n /// @notice Emitted when a new schema has been registered\\n /// @param uid The schema UID.\\n /// @param registerer The address of the account used to register the schema.\\n /// @param schema The schema data.\\n event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\n\\n /// @notice Submits and reserves a new schema\\n /// @param schema The schema data schema.\\n /// @param resolver An optional schema resolver.\\n /// @param revocable Whether the schema allows revocations explicitly.\\n /// @return The UID of the new schema.\\n function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\n\\n /// @notice Returns an existing schema by UID\\n /// @param uid The UID of the schema to retrieve.\\n /// @return The schema data members.\\n function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\n}\\n\",\"keccak256\":\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/// @title ISemver\\n/// @notice A semver interface.\\ninterface ISemver {\\n /// @notice Returns the full semver contract version.\\n /// @return Semver contract version as a string.\\n function version() external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.4;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\n\\n/// @title Semver\\n/// @notice A simple contract for managing contract versions.\\ncontract Semver is ISemver {\\n // Contract's major version number.\\n uint256 private immutable _major;\\n\\n // Contract's minor version number.\\n uint256 private immutable _minor;\\n\\n // Contract's patch version number.\\n uint256 private immutable _patch;\\n\\n /// @dev Create a new Semver instance.\\n /// @param major Major version number.\\n /// @param minor Minor version number.\\n /// @param patch Patch version number.\\n constructor(uint256 major, uint256 minor, uint256 patch) {\\n _major = major;\\n _minor = minor;\\n _patch = patch;\\n }\\n\\n /// @notice Returns the full semver contract version.\\n /// @return Semver contract version as a string.\\n function version() external view returns (string memory) {\\n return\\n string(\\n abi.encodePacked(Strings.toString(_major), \\\".\\\", Strings.toString(_minor), \\\".\\\", Strings.toString(_patch))\\n );\\n }\\n}\\n\",\"keccak256\":\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.27;\\n\\nimport { EIP712 } from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport { ECDSA } from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\n\\n// prettier-ignore\\nimport {\\n AccessDenied,\\n DeadlineExpired,\\n Signature,\\n InvalidEAS,\\n InvalidLength,\\n InvalidSignature,\\n NotFound,\\n NO_EXPIRATION_TIME,\\n uncheckedInc\\n} from \\\"../../Common.sol\\\";\\n\\n// prettier-ignore\\nimport {\\n AttestationRequest,\\n AttestationRequestData,\\n IEAS,\\n MultiAttestationRequest,\\n MultiRevocationRequest,\\n RevocationRequest,\\n RevocationRequestData\\n} from \\\"../../IEAS.sol\\\";\\n\\nimport { Semver } from \\\"../../Semver.sol\\\";\\n\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\nstruct DelegatedProxyAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData data; // The arguments of the attestation request.\\n Signature signature; // The EIP712 signature data.\\n address attester; // The attesting account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\nstruct MultiDelegatedProxyAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData[] data; // The arguments of the attestation requests.\\n Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n address attester; // The attesting account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\nstruct DelegatedProxyRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData data; // The arguments of the revocation request.\\n Signature signature; // The EIP712 signature data.\\n address revoker; // The revoking account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\nstruct MultiDelegatedProxyRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData[] data; // The arguments of the revocation requests.\\n Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n address revoker; // The revoking account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @title EIP712Proxy\\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\\n/// nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\\n/// signatures.\\ncontract EIP712Proxy is Semver, EIP712 {\\n error UsedSignature();\\n\\n // The hash of the data type used to relay calls to the attest function. It's the value of\\n // keccak256(\\\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\\\").\\n bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\\n\\n // The hash of the data type used to relay calls to the revoke function. It's the value of\\n // keccak256(\\\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\\\").\\n bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\\n\\n // The global EAS contract.\\n IEAS private immutable _eas;\\n\\n // The user readable name of the signing domain.\\n string private _name;\\n\\n // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\\n // attester is able to revert attestations by proxy.\\n mapping(bytes32 uid => address attester) private _attesters;\\n\\n // Replay protection signatures.\\n mapping(bytes signature => bool used) private _signatures;\\n\\n /// @dev Creates a new EIP1271Verifier instance.\\n /// @param eas The address of the global EAS contract.\\n /// @param name The user readable name of the signing domain.\\n constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \\\"1.4.0\\\") {\\n if (address(eas) == address(0)) {\\n revert InvalidEAS();\\n }\\n\\n _eas = eas;\\n _name = name;\\n }\\n\\n /// @notice Returns the EAS.\\n function getEAS() external view returns (IEAS) {\\n return _eas;\\n }\\n\\n /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\\n function getDomainSeparator() external view returns (bytes32) {\\n return _domainSeparatorV4();\\n }\\n\\n /// Returns the EIP712 type hash for the attest function.\\n function getAttestTypeHash() external pure returns (bytes32) {\\n return ATTEST_PROXY_TYPEHASH;\\n }\\n\\n /// Returns the EIP712 type hash for the revoke function.\\n function getRevokeTypeHash() external pure returns (bytes32) {\\n return REVOKE_PROXY_TYPEHASH;\\n }\\n\\n /// Returns the EIP712 name.\\n function getName() external view returns (string memory) {\\n return _name;\\n }\\n\\n /// Returns the attester for a given uid.\\n function getAttester(bytes32 uid) external view returns (address) {\\n return _attesters[uid];\\n }\\n\\n /// @notice Attests to a specific schema via the provided EIP712 signature.\\n /// @param delegatedRequest The arguments of the delegated attestation request.\\n /// @return The UID of the new attestation.\\n ///\\n /// Example:\\n /// attestByDelegation({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 0\\n /// },\\n /// signature: {\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\n /// deadline: 1673891048\\n /// })\\n function attestByDelegation(\\n DelegatedProxyAttestationRequest calldata delegatedRequest\\n ) public payable virtual returns (bytes32) {\\n _verifyAttest(delegatedRequest);\\n\\n bytes32 uid = _eas.attest{ value: msg.value }(\\n AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\n );\\n\\n _attesters[uid] = delegatedRequest.attester;\\n\\n return uid;\\n }\\n\\n /// @notice Attests to multiple schemas using via provided EIP712 signatures.\\n /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\n /// grouped by distinct schema ids to benefit from the best batching optimization.\\n /// @return The UIDs of the new attestations.\\n ///\\n /// Example:\\n /// multiAttestByDelegation([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 0\\n /// },\\n /// {\\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n /// expirationTime: 0,\\n /// revocable: false,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x00',\\n /// value: 0\\n /// }],\\n /// signatures: [{\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// {\\n /// v: 28,\\n /// r: '0x487s...67bb',\\n /// s: '0x12ad...2366'\\n /// }],\\n /// attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\n /// deadline: 1673891048\\n /// }])\\n function multiAttestByDelegation(\\n MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\\n ) public payable virtual returns (bytes32[] memory) {\\n uint256 length = multiDelegatedRequests.length;\\n MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\\n\\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\n AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\n\\n // Ensure that no inputs are missing.\\n uint256 dataLength = data.length;\\n if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\n revert InvalidLength();\\n }\\n\\n // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n _verifyAttest(\\n DelegatedProxyAttestationRequest({\\n schema: multiDelegatedRequest.schema,\\n data: data[j],\\n signature: multiDelegatedRequest.signatures[j],\\n attester: multiDelegatedRequest.attester,\\n deadline: multiDelegatedRequest.deadline\\n })\\n );\\n }\\n\\n multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\\n }\\n\\n bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\\n\\n // Store all attesters, according to the order of the attestation requests.\\n uint256 uidCounter = 0;\\n\\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\\n AttestationRequestData[] calldata data = multiDelegatedRequest.data;\\n\\n uint256 dataLength = data.length;\\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\\n\\n unchecked {\\n ++uidCounter;\\n }\\n }\\n }\\n\\n return uids;\\n }\\n\\n /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\\n /// @param delegatedRequest The arguments of the delegated revocation request.\\n ///\\n /// Example:\\n /// revokeByDelegation({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\n /// value: 0\\n /// },\\n /// signature: {\\n /// v: 27,\\n /// r: '0xb593...7142',\\n /// s: '0x0f5b...2cce'\\n /// },\\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n /// deadline: 1673891048\\n /// })\\n function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\\n _verifyRevoke(delegatedRequest);\\n\\n return\\n _eas.revoke{ value: msg.value }(\\n RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\\n );\\n }\\n\\n /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\\n /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\n /// should be grouped by distinct schema ids to benefit from the best batching optimization.\\n ///\\n /// Example:\\n /// multiRevokeByDelegation([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n /// value: 1000\\n /// },\\n /// {\\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n /// value: 0\\n /// }],\\n /// signatures: [{\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// {\\n /// v: 28,\\n /// r: '0x487s...67bb',\\n /// s: '0x12ad...2366'\\n /// }],\\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n /// deadline: 1673891048\\n /// }])\\n function multiRevokeByDelegation(\\n MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\\n ) public payable virtual {\\n uint256 length = multiDelegatedRequests.length;\\n MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\\n\\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\\n RevocationRequestData[] memory data = multiDelegatedRequest.data;\\n\\n // Ensure that no inputs are missing.\\n uint256 dataLength = data.length;\\n if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\\n revert InvalidLength();\\n }\\n\\n // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\\n RevocationRequestData memory requestData = data[j];\\n\\n _verifyRevoke(\\n DelegatedProxyRevocationRequest({\\n schema: multiDelegatedRequest.schema,\\n data: requestData,\\n signature: multiDelegatedRequest.signatures[j],\\n revoker: multiDelegatedRequest.revoker,\\n deadline: multiDelegatedRequest.deadline\\n })\\n );\\n }\\n\\n multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\\n }\\n\\n _eas.multiRevoke{ value: msg.value }(multiRequests);\\n }\\n\\n /// @dev Verifies delegated attestation request.\\n /// @param request The arguments of the delegated attestation request.\\n function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\\n if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\n revert DeadlineExpired();\\n }\\n\\n AttestationRequestData memory data = request.data;\\n Signature memory signature = request.signature;\\n\\n _verifyUnusedSignature(signature);\\n\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n ATTEST_PROXY_TYPEHASH,\\n request.attester,\\n request.schema,\\n data.recipient,\\n data.expirationTime,\\n data.revocable,\\n data.refUID,\\n keccak256(data.data),\\n data.value,\\n request.deadline\\n )\\n )\\n );\\n\\n if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\\n revert InvalidSignature();\\n }\\n }\\n\\n /// @dev Verifies delegated revocation request.\\n /// @param request The arguments of the delegated revocation request.\\n function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\\n if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\\n revert DeadlineExpired();\\n }\\n\\n RevocationRequestData memory data = request.data;\\n\\n // Allow only original attesters to revoke their attestations.\\n address attester = _attesters[data.uid];\\n if (attester == address(0)) {\\n revert NotFound();\\n }\\n\\n if (attester != request.revoker) {\\n revert AccessDenied();\\n }\\n\\n Signature memory signature = request.signature;\\n\\n _verifyUnusedSignature(signature);\\n\\n bytes32 digest = _hashTypedDataV4(\\n keccak256(\\n abi.encode(\\n REVOKE_PROXY_TYPEHASH,\\n request.revoker,\\n request.schema,\\n data.uid,\\n data.value,\\n request.deadline\\n )\\n )\\n );\\n\\n if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\\n revert InvalidSignature();\\n }\\n }\\n\\n /// @dev Ensures that the provided EIP712 signature wasn't already used.\\n /// @param signature The EIP712 signature data.\\n function _verifyUnusedSignature(Signature memory signature) internal {\\n bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\\n\\n if (_signatures[packedSignature]) {\\n revert UsedSignature();\\n }\\n\\n _signatures[packedSignature] = true;\\n }\\n\\n /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\\n /// current block time.\\n function _time() internal view virtual returns (uint64) {\\n return uint64(block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x74b4c674d93b5be831d71042409c85dd1f340efad57fbd4b1b4a16877bffdd46\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { Attestation } from \\\"./../Common.sol\\\";\\nimport { ISemver } from \\\"./../ISemver.sol\\\";\\n\\n/// @title ISchemaResolver\\n/// @notice The interface of an optional schema resolver.\\ninterface ISchemaResolver is ISemver {\\n /// @notice Checks if the resolver can be sent ETH.\\n /// @return Whether the resolver supports ETH transfers.\\n function isPayable() external pure returns (bool);\\n\\n /// @notice Processes an attestation and verifies whether it's valid.\\n /// @param attestation The new attestation.\\n /// @return Whether the attestation is valid.\\n function attest(Attestation calldata attestation) external payable returns (bool);\\n\\n /// @notice Processes multiple attestations and verifies whether they are valid.\\n /// @param attestations The new attestations.\\n /// @param values Explicit ETH amounts which were sent with each attestation.\\n /// @return Whether all the attestations are valid.\\n function multiAttest(\\n Attestation[] calldata attestations,\\n uint256[] calldata values\\n ) external payable returns (bool);\\n\\n /// @notice Processes an attestation revocation and verifies if it can be revoked.\\n /// @param attestation The existing attestation to be revoked.\\n /// @return Whether the attestation can be revoked.\\n function revoke(Attestation calldata attestation) external payable returns (bool);\\n\\n /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\n /// @param attestations The existing attestations to be revoked.\\n /// @param values Explicit ETH amounts which were sent with each revocation.\\n /// @return Whether the attestations can be revoked.\\n function multiRevoke(\\n Attestation[] calldata attestations,\\n uint256[] calldata values\\n ) external payable returns (bool);\\n}\\n\",\"keccak256\":\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\\n\\npragma solidity ^0.8.20;\\n\\ninterface IERC5267 {\\n /**\\n * @dev MAY be emitted to signal that the domain could have changed.\\n */\\n event EIP712DomainChanged();\\n\\n /**\\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\\n * signature.\\n */\\n function eip712Domain()\\n external\\n view\\n returns (\\n bytes1 fields,\\n string memory name,\\n string memory version,\\n uint256 chainId,\\n address verifyingContract,\\n bytes32 salt,\\n uint256[] memory extensions\\n );\\n}\\n\",\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {StorageSlot} from \\\"./StorageSlot.sol\\\";\\n\\n// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |\\n// | length | 0x BB |\\ntype ShortString is bytes32;\\n\\n/**\\n * @dev This library provides functions to convert short memory strings\\n * into a `ShortString` type that can be used as an immutable variable.\\n *\\n * Strings of arbitrary length can be optimized using this library if\\n * they are short enough (up to 31 bytes) by packing them with their\\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\\n * fallback mechanism can be used for every other case.\\n *\\n * Usage example:\\n *\\n * ```solidity\\n * contract Named {\\n * using ShortStrings for *;\\n *\\n * ShortString private immutable _name;\\n * string private _nameFallback;\\n *\\n * constructor(string memory contractName) {\\n * _name = contractName.toShortStringWithFallback(_nameFallback);\\n * }\\n *\\n * function name() external view returns (string memory) {\\n * return _name.toStringWithFallback(_nameFallback);\\n * }\\n * }\\n * ```\\n */\\nlibrary ShortStrings {\\n // Used as an identifier for strings longer than 31 bytes.\\n bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\\n\\n error StringTooLong(string str);\\n error InvalidShortString();\\n\\n /**\\n * @dev Encode a string of at most 31 chars into a `ShortString`.\\n *\\n * This will trigger a `StringTooLong` error is the input string is too long.\\n */\\n function toShortString(string memory str) internal pure returns (ShortString) {\\n bytes memory bstr = bytes(str);\\n if (bstr.length > 31) {\\n revert StringTooLong(str);\\n }\\n return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\\n }\\n\\n /**\\n * @dev Decode a `ShortString` back to a \\\"normal\\\" string.\\n */\\n function toString(ShortString sstr) internal pure returns (string memory) {\\n uint256 len = byteLength(sstr);\\n // using `new string(len)` would work locally but is not memory safe.\\n string memory str = new string(32);\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(str, len)\\n mstore(add(str, 0x20), sstr)\\n }\\n return str;\\n }\\n\\n /**\\n * @dev Return the length of a `ShortString`.\\n */\\n function byteLength(ShortString sstr) internal pure returns (uint256) {\\n uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\\n if (result > 31) {\\n revert InvalidShortString();\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\\n */\\n function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\\n if (bytes(value).length < 32) {\\n return toShortString(value);\\n } else {\\n StorageSlot.getStringSlot(store).value = value;\\n return ShortString.wrap(FALLBACK_SENTINEL);\\n }\\n }\\n\\n /**\\n * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\\n */\\n function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\n return toString(value);\\n } else {\\n return store;\\n }\\n }\\n\\n /**\\n * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\\n * {setWithFallback}.\\n *\\n * WARNING: This will return the \\\"byte length\\\" of the string. This may not reflect the actual length in terms of\\n * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\\n */\\n function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\\n return byteLength(value);\\n } else {\\n return bytes(store).length;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(newImplementation.code.length > 0);\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Math} from \\\"./math/Math.sol\\\";\\nimport {SignedMath} from \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant HEX_DIGITS = \\\"0123456789abcdef\\\";\\n uint8 private constant ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev The `value` string doesn't fit in the specified `length`.\\n */\\n error StringsInsufficientHexLength(uint256 value, uint256 length);\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toStringSigned(int256 value) internal pure returns (string memory) {\\n return string.concat(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value)));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n uint256 localValue = value;\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = HEX_DIGITS[localValue & 0xf];\\n localValue >>= 4;\\n }\\n if (localValue != 0) {\\n revert StringsInsufficientHexLength(value, length);\\n }\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\n * representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS\\n }\\n\\n /**\\n * @dev The signature derives the `address(0)`.\\n */\\n error ECDSAInvalidSignature();\\n\\n /**\\n * @dev The signature has an invalid length.\\n */\\n error ECDSAInvalidSignatureLength(uint256 length);\\n\\n /**\\n * @dev The signature has an S value that is in the upper half order.\\n */\\n error ECDSAInvalidSignatureS(bytes32 s);\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\\n * and a bytes32 providing additional information about the error.\\n *\\n * If no error is returned, then the address can be used for verification purposes.\\n *\\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\\n _throwError(error, errorArg);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n */\\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\\n unchecked {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n // We do not check for an overflow here since the shift operation results in 0 or 1.\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n */\\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\\n _throwError(error, errorArg);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError, bytes32) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS, s);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\\n }\\n\\n return (signer, RecoverError.NoError, bytes32(0));\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\\n _throwError(error, errorArg);\\n return recovered;\\n }\\n\\n /**\\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\\n */\\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert ECDSAInvalidSignature();\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert ECDSAInvalidSignatureS(errorArg);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {MessageHashUtils} from \\\"./MessageHashUtils.sol\\\";\\nimport {ShortStrings, ShortString} from \\\"../ShortStrings.sol\\\";\\nimport {IERC5267} from \\\"../../interfaces/IERC5267.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\\n *\\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\\n */\\nabstract contract EIP712 is IERC5267 {\\n using ShortStrings for *;\\n\\n bytes32 private constant TYPE_HASH =\\n keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _cachedDomainSeparator;\\n uint256 private immutable _cachedChainId;\\n address private immutable _cachedThis;\\n\\n bytes32 private immutable _hashedName;\\n bytes32 private immutable _hashedVersion;\\n\\n ShortString private immutable _name;\\n ShortString private immutable _version;\\n string private _nameFallback;\\n string private _versionFallback;\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n _name = name.toShortStringWithFallback(_nameFallback);\\n _version = version.toShortStringWithFallback(_versionFallback);\\n _hashedName = keccak256(bytes(name));\\n _hashedVersion = keccak256(bytes(version));\\n\\n _cachedChainId = block.chainid;\\n _cachedDomainSeparator = _buildDomainSeparator();\\n _cachedThis = address(this);\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\\n return _cachedDomainSeparator;\\n } else {\\n return _buildDomainSeparator();\\n }\\n }\\n\\n function _buildDomainSeparator() private view returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n\\n /**\\n * @dev See {IERC-5267}.\\n */\\n function eip712Domain()\\n public\\n view\\n virtual\\n returns (\\n bytes1 fields,\\n string memory name,\\n string memory version,\\n uint256 chainId,\\n address verifyingContract,\\n bytes32 salt,\\n uint256[] memory extensions\\n )\\n {\\n return (\\n hex\\\"0f\\\", // 01111\\n _EIP712Name(),\\n _EIP712Version(),\\n block.chainid,\\n address(this),\\n bytes32(0),\\n new uint256[](0)\\n );\\n }\\n\\n /**\\n * @dev The name parameter for the EIP712 domain.\\n *\\n * NOTE: By default this function reads _name which is an immutable value.\\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function _EIP712Name() internal view returns (string memory) {\\n return _name.toStringWithFallback(_nameFallback);\\n }\\n\\n /**\\n * @dev The version parameter for the EIP712 domain.\\n *\\n * NOTE: By default this function reads _version which is an immutable value.\\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function _EIP712Version() internal view returns (string memory) {\\n return _version.toStringWithFallback(_versionFallback);\\n }\\n}\\n\",\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Strings} from \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\\n *\\n * The library provides methods for generating a hash of a message that conforms to the\\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\\n * specifications.\\n */\\nlibrary MessageHashUtils {\\n /**\\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\n * `0x45` (`personal_sign` messages).\\n *\\n * The digest is calculated by prefixing a bytes32 `messageHash` with\\n * `\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"` and hashing the result. It corresponds with the\\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\n *\\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\\n * keccak256, although any bytes32 value can be safely used because the final digest will\\n * be re-hashed.\\n *\\n * See {ECDSA-recover}.\\n */\\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore(0x00, \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\") // 32 is the bytes-length of messageHash\\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\\n }\\n }\\n\\n /**\\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\n * `0x45` (`personal_sign` messages).\\n *\\n * The digest is calculated by prefixing an arbitrary `message` with\\n * `\\\"\\\\x19Ethereum Signed Message:\\\\n\\\" + len(message)` and hashing the result. It corresponds with the\\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\\n *\\n * See {ECDSA-recover}.\\n */\\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\\n return\\n keccak256(bytes.concat(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", bytes(Strings.toString(message.length)), message));\\n }\\n\\n /**\\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\\n * `0x00` (data with intended validator).\\n *\\n * The digest is calculated by prefixing an arbitrary `data` with `\\\"\\\\x19\\\\x00\\\"` and the intended\\n * `validator` address. Then hashing the result.\\n *\\n * See {ECDSA-recover}.\\n */\\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(hex\\\"19_00\\\", validator, data));\\n }\\n\\n /**\\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\\n *\\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\\n * `\\\\x19\\\\x01` and hashing the result. It corresponds to the hash signed by the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\\n *\\n * See {ECDSA-recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, hex\\\"19_01\\\")\\n mstore(add(ptr, 0x02), domainSeparator)\\n mstore(add(ptr, 0x22), structHash)\\n digest := keccak256(ptr, 0x42)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Muldiv operation overflow.\\n */\\n error MathOverflowedMulDiv();\\n\\n enum Rounding {\\n Floor, // Toward negative infinity\\n Ceil, // Toward positive infinity\\n Trunc, // Toward zero\\n Expand // Away from zero\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds towards infinity instead\\n * of rounding towards zero.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (b == 0) {\\n // Guarantee the same behavior as in a regular Solidity division.\\n return a / b;\\n }\\n\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\n * denominator == 0.\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\n * Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0 = x * y; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n if (denominator <= prod1) {\\n revert MathOverflowedMulDiv();\\n }\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\n\\n uint256 twos = denominator & (0 - denominator);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\n // works in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\n * towards zero.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2 of a positive value rounded towards zero.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10 of a positive value rounded towards zero.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256 of a positive value rounded towards zero.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\n */\\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\n return uint8(rounding) % 2 == 1;\\n }\\n}\\n\",\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a", + "deployedBytecode": "0x6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a", + "devdoc": { + "errors": { + "ECDSAInvalidSignature()": [ + { + "details": "The signature derives the `address(0)`." + } + ], + "ECDSAInvalidSignatureLength(uint256)": [ + { + "details": "The signature has an invalid length." + } + ], + "ECDSAInvalidSignatureS(bytes32)": [ + { + "details": "The signature has an S value that is in the upper half order." + } + ] + }, + "events": { + "EIP712DomainChanged()": { + "details": "MAY be emitted to signal that the domain could have changed." + } + }, + "kind": "dev", + "methods": { + "attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))": { + "params": { + "delegatedRequest": "The arguments of the delegated attestation request." + }, + "returns": { + "_0": "The UID of the new attestation. Example: attestByDelegation({ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: { recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', expirationTime: 1673891048, revocable: true, refUID: '0x0000000000000000000000000000000000000000000000000000000000000000', data: '0x1234', value: 0 }, signature: { v: 28, r: '0x148c...b25b', s: '0x5a72...be22' }, attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e', deadline: 1673891048 })" + } + }, + "constructor": { + "details": "Creates a new EIP1271Verifier instance.", + "params": { + "eas": "The address of the global EAS contract.", + "name": "The user readable name of the signing domain." + } + }, + "eip712Domain()": { + "details": "See {IERC-5267}." + }, + "multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": { + "params": { + "multiDelegatedRequests": "The arguments of the delegated multi attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization." + }, + "returns": { + "_0": "The UIDs of the new attestations. Example: multiAttestByDelegation([{ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: [{ recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', expirationTime: 1673891048, revocable: true, refUID: '0x0000000000000000000000000000000000000000000000000000000000000000', data: '0x1234', value: 0 }, { recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf', expirationTime: 0, revocable: false, refUID: '0x0000000000000000000000000000000000000000000000000000000000000000', data: '0x00', value: 0 }], signatures: [{ v: 28, r: '0x148c...b25b', s: '0x5a72...be22' }, { v: 28, r: '0x487s...67bb', s: '0x12ad...2366' }], attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4', deadline: 1673891048 }])" + } + }, + "multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": { + "params": { + "multiDelegatedRequests": "The arguments of the delegated multi revocation attestation requests. The requests should be grouped by distinct schema ids to benefit from the best batching optimization. Example: multiRevokeByDelegation([{ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: [{ uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25', value: 1000 }, { uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade', value: 0 }], signatures: [{ v: 28, r: '0x148c...b25b', s: '0x5a72...be22' }, { v: 28, r: '0x487s...67bb', s: '0x12ad...2366' }], revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992', deadline: 1673891048 }])" + } + }, + "revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))": { + "params": { + "delegatedRequest": "The arguments of the delegated revocation request. Example: revokeByDelegation({ schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc', data: { uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba', value: 0 }, signature: { v: 27, r: '0xb593...7142', s: '0x0f5b...2cce' }, revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992', deadline: 1673891048 })" + } + }, + "version()": { + "returns": { + "_0": "Semver contract version as a string." + } + } + }, + "title": "EIP712Proxy", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address,uint64))": { + "notice": "Attests to a specific schema via the provided EIP712 signature." + }, + "getAttestTypeHash()": { + "notice": "Returns the EIP712 type hash for the attest function." + }, + "getAttester(bytes32)": { + "notice": "Returns the attester for a given uid." + }, + "getDomainSeparator()": { + "notice": "Returns the domain separator used in the encoding of the signatures for attest, and revoke." + }, + "getEAS()": { + "notice": "Returns the EAS." + }, + "getName()": { + "notice": "Returns the EIP712 name." + }, + "getRevokeTypeHash()": { + "notice": "Returns the EIP712 type hash for the revoke function." + }, + "multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": { + "notice": "Attests to multiple schemas using via provided EIP712 signatures." + }, + "multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address,uint64)[])": { + "notice": "Revokes existing attestations to multiple schemas via provided EIP712 signatures." + }, + "revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address,uint64))": { + "notice": "Revokes an existing attestation to a specific schema via the provided EIP712 signature." + }, + "version()": { + "notice": "Returns the full semver contract version." + } + }, + "notice": "This utility contract an be used to aggregate delegated attestations without requiring a specific order via nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable*** signatures.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5640, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy", + "label": "_nameFallback", + "offset": 0, + "slot": "0", + "type": "t_string_storage" + }, + { + "astId": 5642, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy", + "label": "_versionFallback", + "offset": 0, + "slot": "1", + "type": "t_string_storage" + }, + { + "astId": 3573, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy", + "label": "_name", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + }, + { + "astId": 3577, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy", + "label": "_attesters", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_bytes32,t_address)" + }, + { + "astId": 3581, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol:EIP712Proxy", + "label": "_signatures", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_bytes_memory_ptr,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes_memory_ptr": { + "encoding": "bytes", + "label": "bytes", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_address)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_bytes_memory_ptr,t_bool)": { + "encoding": "mapping", + "key": "t_bytes_memory_ptr", + "label": "mapping(bytes => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/deployments/ink-sepolia/Indexer.json b/deployments/ink-sepolia/Indexer.json new file mode 100644 index 00000000..c4dab9b7 --- /dev/null +++ b/deployments/ink-sepolia/Indexer.json @@ -0,0 +1,678 @@ +{ + "address": "0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IEAS", + "name": "eas", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidAttestation", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidEAS", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidOffset", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + } + ], + "name": "Indexed", + "type": "event" + }, + { + "inputs": [], + "name": "getEAS", + "outputs": [ + { + "internalType": "contract IEAS", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + } + ], + "name": "getReceivedAttestationUIDCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "reverseOrder", + "type": "bool" + } + ], + "name": "getReceivedAttestationUIDs", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + } + ], + "name": "getSchemaAttestationUIDCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "reverseOrder", + "type": "bool" + } + ], + "name": "getSchemaAttestationUIDs", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "getSchemaAttesterRecipientAttestationUIDCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "reverseOrder", + "type": "bool" + } + ], + "name": "getSchemaAttesterRecipientAttestationUIDs", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + } + ], + "name": "getSentAttestationUIDCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "reverseOrder", + "type": "bool" + } + ], + "name": "getSentAttestationUIDs", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationUID", + "type": "bytes32" + } + ], + "name": "indexAttestation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "attestationUIDs", + "type": "bytes32[]" + } + ], + "name": "indexAttestations", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "attestationUID", + "type": "bytes32" + } + ], + "name": "isAttestationIndexed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x4e0a53b3b8d7ffa058060770c21a2daadb60d8ed1e2a1f6a491e9645e3949ea1", + "receipt": { + "to": null, + "from": "0xbA20d34dc4745A3190fEDdEBdDc70270895B457F", + "contractAddress": "0x367A20665BAB1bb4DB6D80A4CF20db5Be1568d1e", + "transactionIndex": 1, + "gasUsed": "989532", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x3a77da50022600316571122283ee9ffafc990c58b58ecaf92c3b6215c8453959", + "transactionHash": "0x4e0a53b3b8d7ffa058060770c21a2daadb60d8ed1e2a1f6a491e9645e3949ea1", + "logs": [], + "blockNumber": 3799383, + "cumulativeGasUsed": "1033398", + "status": 1, + "byzantium": true + }, + "args": [ + "0x4200000000000000000000000000000000000021" + ], + "numDeployments": 1, + "solcInputHash": "ab2e55c92b39ec3be86af0608f634927", + "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEAS\",\"name\":\"eas\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEAS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOffset\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"Indexed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getEAS\",\"outputs\":[{\"internalType\":\"contract IEAS\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"name\":\"getReceivedAttestationUIDCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"reverseOrder\",\"type\":\"bool\"}],\"name\":\"getReceivedAttestationUIDs\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"name\":\"getSchemaAttestationUIDCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"reverseOrder\",\"type\":\"bool\"}],\"name\":\"getSchemaAttestationUIDs\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"getSchemaAttesterRecipientAttestationUIDCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"reverseOrder\",\"type\":\"bool\"}],\"name\":\"getSchemaAttesterRecipientAttestationUIDs\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"name\":\"getSentAttestationUIDCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"reverseOrder\",\"type\":\"bool\"}],\"name\":\"getSentAttestationUIDs\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"attestationUID\",\"type\":\"bytes32\"}],\"name\":\"indexAttestation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"attestationUIDs\",\"type\":\"bytes32[]\"}],\"name\":\"indexAttestations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"attestationUID\",\"type\":\"bytes32\"}],\"name\":\"isAttestationIndexed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Indexed(bytes32)\":{\"params\":{\"uid\":\"The UID the attestation.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Creates a new Indexer instance.\",\"params\":{\"eas\":\"The address of the global EAS contract.\"}},\"getReceivedAttestationUIDCount(address,bytes32)\":{\"params\":{\"recipient\":\"The recipient of the attestation.\",\"schemaUID\":\"The UID of the schema.\"},\"returns\":{\"_0\":\"The total number of attestations.\"}},\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\":{\"params\":{\"length\":\"The number of total members to retrieve.\",\"recipient\":\"The recipient of the attestation.\",\"reverseOrder\":\"Whether the offset starts from the end and the data is returned in reverse.\",\"schemaUID\":\"The UID of the schema.\",\"start\":\"The offset to start from.\"},\"returns\":{\"_0\":\"An array of attestation UIDs.\"}},\"getSchemaAttestationUIDCount(bytes32)\":{\"params\":{\"schemaUID\":\"The UID of the schema.\"},\"returns\":{\"_0\":\"An array of attestation UIDs.\"}},\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\":{\"params\":{\"length\":\"The number of total members to retrieve.\",\"reverseOrder\":\"Whether the offset starts from the end and the data is returned in reverse.\",\"schemaUID\":\"The UID of the schema.\",\"start\":\"The offset to start from.\"},\"returns\":{\"_0\":\"An array of attestation UIDs.\"}},\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\":{\"params\":{\"attester\":\"The attester of the attestation.\",\"recipient\":\"The recipient of the attestation.\",\"schemaUID\":\"The UID of the schema.\"},\"returns\":{\"_0\":\"An array of attestation UIDs.\"}},\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\":{\"params\":{\"attester\":\"The attester of the attestation.\",\"length\":\"The number of total members to retrieve.\",\"recipient\":\"The recipient of the attestation.\",\"reverseOrder\":\"Whether the offset starts from the end and the data is returned in reverse.\",\"schemaUID\":\"The UID of the schema.\",\"start\":\"The offset to start from.\"},\"returns\":{\"_0\":\"An array of attestation UIDs.\"}},\"getSentAttestationUIDCount(address,bytes32)\":{\"params\":{\"attester\":\"The attester of the attestation.\",\"schemaUID\":\"The UID of the schema.\"},\"returns\":{\"_0\":\"The total number of attestations.\"}},\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\":{\"params\":{\"attester\":\"The attester of the attestation.\",\"length\":\"The number of total members to retrieve.\",\"reverseOrder\":\"Whether the offset starts from the end and the data is returned in reverse.\",\"schemaUID\":\"The UID of the schema.\",\"start\":\"The offset to start from.\"},\"returns\":{\"_0\":\"An array of attestation UIDs.\"}},\"indexAttestation(bytes32)\":{\"params\":{\"attestationUID\":\"The UID of the attestation to index.\"}},\"indexAttestations(bytes32[])\":{\"params\":{\"attestationUIDs\":\"The UIDs of the attestations to index.\"}},\"isAttestationIndexed(bytes32)\":{\"params\":{\"attestationUID\":\"The UID of the attestation to check.\"},\"returns\":{\"_0\":\"Whether an attestation has been already indexed.\"}},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"title\":\"Indexer\",\"version\":1},\"userdoc\":{\"events\":{\"Indexed(bytes32)\":{\"notice\":\"Emitted when an attestation has been indexed.\"}},\"kind\":\"user\",\"methods\":{\"getEAS()\":{\"notice\":\"Returns the EAS.\"},\"getReceivedAttestationUIDCount(address,bytes32)\":{\"notice\":\"Returns the total number of attestations to a specific schema which were attested to/received by a specific recipient.\"},\"getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)\":{\"notice\":\"Returns the UIDs of attestations to a specific schema which were attested to/received by a specific recipient.\"},\"getSchemaAttestationUIDCount(bytes32)\":{\"notice\":\"Returns the total number of attestations to a specific schema.\"},\"getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)\":{\"notice\":\"Returns the UIDs of attestations to a specific schema.\"},\"getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)\":{\"notice\":\"Returns the total number of UIDs of attestations to a specific schema which were attested by a specific attester to a specific recipient.\"},\"getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)\":{\"notice\":\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a specific recipient.\"},\"getSentAttestationUIDCount(address,bytes32)\":{\"notice\":\"Returns the total number of attestations to a specific schema which were attested by a specific attester.\"},\"getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)\":{\"notice\":\"Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\"},\"indexAttestation(bytes32)\":{\"notice\":\"Indexes an existing attestation.\"},\"indexAttestations(bytes32[])\":{\"notice\":\"Indexes multiple existing attestations.\"},\"isAttestationIndexed(bytes32)\":{\"notice\":\"Returns whether an existing attestation has been already indexed.\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"notice\":\"Indexing Service for the Ethereum Attestation Service\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\":\"Indexer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@ethereum-attestation-service/eas-contracts/contracts/Common.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n// A representation of an empty/uninitialized UID.\\nbytes32 constant EMPTY_UID = 0;\\n\\n// A zero expiration represents an non-expiring attestation.\\nuint64 constant NO_EXPIRATION_TIME = 0;\\n\\nerror AccessDenied();\\nerror DeadlineExpired();\\nerror InvalidEAS();\\nerror InvalidLength();\\nerror InvalidSignature();\\nerror NotFound();\\n\\n/// @notice A struct representing ECDSA signature data.\\nstruct Signature {\\n uint8 v; // The recovery ID.\\n bytes32 r; // The x-coordinate of the nonce R.\\n bytes32 s; // The signature data.\\n}\\n\\n/// @notice A struct representing a single attestation.\\nstruct Attestation {\\n bytes32 uid; // A unique identifier of the attestation.\\n bytes32 schema; // The unique identifier of the schema.\\n uint64 time; // The time when the attestation was created (Unix timestamp).\\n uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\n uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\\n bytes32 refUID; // The UID of the related attestation.\\n address recipient; // The recipient of the attestation.\\n address attester; // The attester/sender of the attestation.\\n bool revocable; // Whether the attestation is revocable.\\n bytes data; // Custom attestation data.\\n}\\n\\n/// @notice A helper function to work with unchecked iterators in loops.\\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\\n unchecked {\\n j = i + 1;\\n }\\n}\\n\",\"keccak256\":\"0x957bd2e6d0d6d637f86208b135c29fbaf4412cb08e5e7a61ede16b80561bf685\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { ISchemaRegistry } from \\\"./ISchemaRegistry.sol\\\";\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\nimport { Attestation, Signature } from \\\"./Common.sol\\\";\\n\\n/// @notice A struct representing the arguments of the attestation request.\\nstruct AttestationRequestData {\\n address recipient; // The recipient of the attestation.\\n uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\\n bool revocable; // Whether the attestation is revocable.\\n bytes32 refUID; // The UID of the related attestation.\\n bytes data; // Custom attestation data.\\n uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\n}\\n\\n/// @notice A struct representing the full arguments of the attestation request.\\nstruct AttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData data; // The arguments of the attestation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the full delegated attestation request.\\nstruct DelegatedAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData data; // The arguments of the attestation request.\\n Signature signature; // The ECDSA signature data.\\n address attester; // The attesting account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the multi attestation request.\\nstruct MultiAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData[] data; // The arguments of the attestation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\\nstruct MultiDelegatedAttestationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n AttestationRequestData[] data; // The arguments of the attestation requests.\\n Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n address attester; // The attesting account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the arguments of the revocation request.\\nstruct RevocationRequestData {\\n bytes32 uid; // The UID of the attestation to revoke.\\n uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\\n}\\n\\n/// @notice A struct representing the full arguments of the revocation request.\\nstruct RevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData data; // The arguments of the revocation request.\\n}\\n\\n/// @notice A struct representing the arguments of the full delegated revocation request.\\nstruct DelegatedRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData data; // The arguments of the revocation request.\\n Signature signature; // The ECDSA signature data.\\n address revoker; // The revoking account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @notice A struct representing the full arguments of the multi revocation request.\\nstruct MultiRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData[] data; // The arguments of the revocation request.\\n}\\n\\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\\nstruct MultiDelegatedRevocationRequest {\\n bytes32 schema; // The unique identifier of the schema.\\n RevocationRequestData[] data; // The arguments of the revocation requests.\\n Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\\n address revoker; // The revoking account.\\n uint64 deadline; // The deadline of the signature/request.\\n}\\n\\n/// @title IEAS\\n/// @notice EAS - Ethereum Attestation Service interface.\\ninterface IEAS is ISemver {\\n /// @notice Emitted when an attestation has been made.\\n /// @param recipient The recipient of the attestation.\\n /// @param attester The attesting account.\\n /// @param uid The UID of the new attestation.\\n /// @param schemaUID The UID of the schema.\\n event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\n\\n /// @notice Emitted when an attestation has been revoked.\\n /// @param recipient The recipient of the attestation.\\n /// @param attester The attesting account.\\n /// @param schemaUID The UID of the schema.\\n /// @param uid The UID the revoked attestation.\\n event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\\n\\n /// @notice Emitted when a data has been timestamped.\\n /// @param data The data.\\n /// @param timestamp The timestamp.\\n event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\\n\\n /// @notice Emitted when a data has been revoked.\\n /// @param revoker The address of the revoker.\\n /// @param data The data.\\n /// @param timestamp The timestamp.\\n event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\\n\\n /// @notice Returns the address of the global schema registry.\\n /// @return The address of the global schema registry.\\n function getSchemaRegistry() external view returns (ISchemaRegistry);\\n\\n /// @notice Attests to a specific schema.\\n /// @param request The arguments of the attestation request.\\n /// @return The UID of the new attestation.\\n ///\\n /// Example:\\n /// attest({\\n /// schema: \\\"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\\\",\\n /// data: {\\n /// recipient: \\\"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\\\",\\n /// expirationTime: 0,\\n /// revocable: true,\\n /// refUID: \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\",\\n /// data: \\\"0xF00D\\\",\\n /// value: 0\\n /// }\\n /// })\\n function attest(AttestationRequest calldata request) external payable returns (bytes32);\\n\\n /// @notice Attests to a specific schema via the provided ECDSA signature.\\n /// @param delegatedRequest The arguments of the delegated attestation request.\\n /// @return The UID of the new attestation.\\n ///\\n /// Example:\\n /// attestByDelegation({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 0\\n /// },\\n /// signature: {\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\\n /// deadline: 1673891048\\n /// })\\n function attestByDelegation(\\n DelegatedAttestationRequest calldata delegatedRequest\\n ) external payable returns (bytes32);\\n\\n /// @notice Attests to multiple schemas.\\n /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\\n /// schema ids to benefit from the best batching optimization.\\n /// @return The UIDs of the new attestations.\\n ///\\n /// Example:\\n /// multiAttest([{\\n /// schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\\n /// data: [{\\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 1000\\n /// },\\n /// {\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 0,\\n /// revocable: false,\\n /// refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\\n /// data: '0x00',\\n /// value: 0\\n /// }],\\n /// },\\n /// {\\n /// schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\n /// data: [{\\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n /// expirationTime: 0,\\n /// revocable: true,\\n /// refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\\n /// data: '0x12345678',\\n /// value: 0\\n /// },\\n /// }])\\n function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\\n\\n /// @notice Attests to multiple schemas using via provided ECDSA signatures.\\n /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\\n /// grouped by distinct schema ids to benefit from the best batching optimization.\\n /// @return The UIDs of the new attestations.\\n ///\\n /// Example:\\n /// multiAttestByDelegation([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\\n /// expirationTime: 1673891048,\\n /// revocable: true,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x1234',\\n /// value: 0\\n /// },\\n /// {\\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\\n /// expirationTime: 0,\\n /// revocable: false,\\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\\n /// data: '0x00',\\n /// value: 0\\n /// }],\\n /// signatures: [{\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// {\\n /// v: 28,\\n /// r: '0x487s...67bb',\\n /// s: '0x12ad...2366'\\n /// }],\\n /// attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\\n /// deadline: 1673891048\\n /// }])\\n function multiAttestByDelegation(\\n MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\\n ) external payable returns (bytes32[] memory);\\n\\n /// @notice Revokes an existing attestation to a specific schema.\\n /// @param request The arguments of the revocation request.\\n ///\\n /// Example:\\n /// revoke({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\\n /// value: 0\\n /// }\\n /// })\\n function revoke(RevocationRequest calldata request) external payable;\\n\\n /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\\n /// @param delegatedRequest The arguments of the delegated revocation request.\\n ///\\n /// Example:\\n /// revokeByDelegation({\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: {\\n /// uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\\n /// value: 0\\n /// },\\n /// signature: {\\n /// v: 27,\\n /// r: '0xb593...7142',\\n /// s: '0x0f5b...2cce'\\n /// },\\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n /// deadline: 1673891048\\n /// })\\n function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\\n\\n /// @notice Revokes existing attestations to multiple schemas.\\n /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\\n /// schema ids to benefit from the best batching optimization.\\n ///\\n /// Example:\\n /// multiRevoke([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n /// value: 1000\\n /// },\\n /// {\\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n /// value: 0\\n /// }],\\n /// },\\n /// {\\n /// schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\\n /// data: [{\\n /// uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\\n /// value: 0\\n /// },\\n /// }])\\n function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\\n\\n /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\\n /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\\n /// should be grouped by distinct schema ids to benefit from the best batching optimization.\\n ///\\n /// Example:\\n /// multiRevokeByDelegation([{\\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\\n /// data: [{\\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\\n /// value: 1000\\n /// },\\n /// {\\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\\n /// value: 0\\n /// }],\\n /// signatures: [{\\n /// v: 28,\\n /// r: '0x148c...b25b',\\n /// s: '0x5a72...be22'\\n /// },\\n /// {\\n /// v: 28,\\n /// r: '0x487s...67bb',\\n /// s: '0x12ad...2366'\\n /// }],\\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\\n /// deadline: 1673891048\\n /// }])\\n function multiRevokeByDelegation(\\n MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\\n ) external payable;\\n\\n /// @notice Timestamps the specified bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was timestamped with.\\n function timestamp(bytes32 data) external returns (uint64);\\n\\n /// @notice Timestamps the specified multiple bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was timestamped with.\\n function multiTimestamp(bytes32[] calldata data) external returns (uint64);\\n\\n /// @notice Revokes the specified bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was revoked with.\\n function revokeOffchain(bytes32 data) external returns (uint64);\\n\\n /// @notice Revokes the specified multiple bytes32 data.\\n /// @param data The data to timestamp.\\n /// @return The timestamp the data was revoked with.\\n function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\\n\\n /// @notice Returns an existing attestation by UID.\\n /// @param uid The UID of the attestation to retrieve.\\n /// @return The attestation data members.\\n function getAttestation(bytes32 uid) external view returns (Attestation memory);\\n\\n /// @notice Checks whether an attestation exists.\\n /// @param uid The UID of the attestation to retrieve.\\n /// @return Whether an attestation exists.\\n function isAttestationValid(bytes32 uid) external view returns (bool);\\n\\n /// @notice Returns the timestamp that the specified data was timestamped with.\\n /// @param data The data to query.\\n /// @return The timestamp the data was timestamped with.\\n function getTimestamp(bytes32 data) external view returns (uint64);\\n\\n /// @notice Returns the timestamp that the specified data was timestamped with.\\n /// @param data The data to query.\\n /// @return The timestamp the data was timestamped with.\\n function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0xdad0674defce04905dc7935f2756d6c477a6e876c0b1b7094b112a862f164c12\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\n\\nimport { ISchemaResolver } from \\\"./resolver/ISchemaResolver.sol\\\";\\n\\n/// @notice A struct representing a record for a submitted schema.\\nstruct SchemaRecord {\\n bytes32 uid; // The unique identifier of the schema.\\n ISchemaResolver resolver; // Optional schema resolver.\\n bool revocable; // Whether the schema allows revocations explicitly.\\n string schema; // Custom specification of the schema (e.g., an ABI).\\n}\\n\\n/// @title ISchemaRegistry\\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\\ninterface ISchemaRegistry is ISemver {\\n /// @notice Emitted when a new schema has been registered\\n /// @param uid The schema UID.\\n /// @param registerer The address of the account used to register the schema.\\n /// @param schema The schema data.\\n event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\\n\\n /// @notice Submits and reserves a new schema\\n /// @param schema The schema data schema.\\n /// @param resolver An optional schema resolver.\\n /// @param revocable Whether the schema allows revocations explicitly.\\n /// @return The UID of the new schema.\\n function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\\n\\n /// @notice Returns an existing schema by UID\\n /// @param uid The UID of the schema to retrieve.\\n /// @return The schema data members.\\n function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\\n}\\n\",\"keccak256\":\"0xea97dcd36a0c422169cbaac06698249e199049b627c16bff93fb8ab829058754\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/// @title ISemver\\n/// @notice A semver interface.\\ninterface ISemver {\\n /// @notice Returns the full semver contract version.\\n /// @return Semver contract version as a string.\\n function version() external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x04a67939b4e1a8d0a51101b8f69f8882930bbdc66319f38023828625b5d1ff18\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.8.27;\\n\\nimport { IEAS, Attestation } from \\\"./IEAS.sol\\\";\\nimport { EMPTY_UID, uncheckedInc } from \\\"./Common.sol\\\";\\nimport { Semver } from \\\"./Semver.sol\\\";\\n\\n/// @title Indexer\\n/// @notice Indexing Service for the Ethereum Attestation Service\\ncontract Indexer is Semver {\\n error InvalidEAS();\\n error InvalidAttestation();\\n error InvalidOffset();\\n\\n /// @notice Emitted when an attestation has been indexed.\\n /// @param uid The UID the attestation.\\n event Indexed(bytes32 indexed uid);\\n\\n /// A mapping between an account and its received attestations.\\n mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\\n\\n // A mapping between an account and its sent attestations.\\n mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\\n\\n // A mapping between a schema, attester, and recipient.\\n mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\\n private _schemaAttesterRecipientAttestations;\\n\\n // A mapping between a schema and its attestations.\\n mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\\n\\n // The global mapping of attestation indexing status.\\n mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\\n\\n // The address of the global EAS contract.\\n IEAS private immutable _eas;\\n\\n /// @dev Creates a new Indexer instance.\\n /// @param eas The address of the global EAS contract.\\n constructor(IEAS eas) Semver(1, 3, 0) {\\n if (address(eas) == address(0)) {\\n revert InvalidEAS();\\n }\\n\\n _eas = eas;\\n }\\n\\n /// @notice Returns the EAS.\\n function getEAS() external view returns (IEAS) {\\n return _eas;\\n }\\n\\n /// @notice Indexes an existing attestation.\\n /// @param attestationUID The UID of the attestation to index.\\n function indexAttestation(bytes32 attestationUID) external {\\n _indexAttestation(attestationUID);\\n }\\n\\n /// @notice Indexes multiple existing attestations.\\n /// @param attestationUIDs The UIDs of the attestations to index.\\n function indexAttestations(bytes32[] calldata attestationUIDs) external {\\n uint256 length = attestationUIDs.length;\\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\\n _indexAttestation(attestationUIDs[i]);\\n }\\n }\\n\\n /// @notice Returns whether an existing attestation has been already indexed.\\n /// @param attestationUID The UID of the attestation to check.\\n /// @return Whether an attestation has been already indexed.\\n function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\\n return _indexedAttestations[attestationUID];\\n }\\n\\n /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\\n /// recipient.\\n /// @param recipient The recipient of the attestation.\\n /// @param schemaUID The UID of the schema.\\n /// @param start The offset to start from.\\n /// @param length The number of total members to retrieve.\\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n /// @return An array of attestation UIDs.\\n function getReceivedAttestationUIDs(\\n address recipient,\\n bytes32 schemaUID,\\n uint256 start,\\n uint256 length,\\n bool reverseOrder\\n ) external view returns (bytes32[] memory) {\\n return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\\n }\\n\\n /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\\n /// specific recipient.\\n /// @param recipient The recipient of the attestation.\\n /// @param schemaUID The UID of the schema.\\n /// @return The total number of attestations.\\n function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\\n return _receivedAttestations[recipient][schemaUID].length;\\n }\\n\\n /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\\n /// @param attester The attester of the attestation.\\n /// @param schemaUID The UID of the schema.\\n /// @param start The offset to start from.\\n /// @param length The number of total members to retrieve.\\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n /// @return An array of attestation UIDs.\\n function getSentAttestationUIDs(\\n address attester,\\n bytes32 schemaUID,\\n uint256 start,\\n uint256 length,\\n bool reverseOrder\\n ) external view returns (bytes32[] memory) {\\n return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\\n }\\n\\n /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\\n /// attester.\\n /// @param attester The attester of the attestation.\\n /// @param schemaUID The UID of the schema.\\n /// @return The total number of attestations.\\n function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\\n return _sentAttestations[attester][schemaUID].length;\\n }\\n\\n /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\\n /// specific recipient.\\n /// @param schemaUID The UID of the schema.\\n /// @param attester The attester of the attestation.\\n /// @param recipient The recipient of the attestation.\\n /// @param start The offset to start from.\\n /// @param length The number of total members to retrieve.\\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n /// @return An array of attestation UIDs.\\n function getSchemaAttesterRecipientAttestationUIDs(\\n bytes32 schemaUID,\\n address attester,\\n address recipient,\\n uint256 start,\\n uint256 length,\\n bool reverseOrder\\n ) external view returns (bytes32[] memory) {\\n return\\n _sliceUIDs(\\n _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\\n start,\\n length,\\n reverseOrder\\n );\\n }\\n\\n /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\\n /// attester to a specific recipient.\\n /// @param schemaUID The UID of the schema.\\n /// @param attester The attester of the attestation.\\n /// @param recipient The recipient of the attestation.\\n /// @return An array of attestation UIDs.\\n function getSchemaAttesterRecipientAttestationUIDCount(\\n bytes32 schemaUID,\\n address attester,\\n address recipient\\n ) external view returns (uint256) {\\n return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\\n }\\n\\n /// @notice Returns the UIDs of attestations to a specific schema.\\n /// @param schemaUID The UID of the schema.\\n /// @param start The offset to start from.\\n /// @param length The number of total members to retrieve.\\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n /// @return An array of attestation UIDs.\\n function getSchemaAttestationUIDs(\\n bytes32 schemaUID,\\n uint256 start,\\n uint256 length,\\n bool reverseOrder\\n ) external view returns (bytes32[] memory) {\\n return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\\n }\\n\\n /// @notice Returns the total number of attestations to a specific schema.\\n /// @param schemaUID The UID of the schema.\\n /// @return An array of attestation UIDs.\\n function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\\n return _schemaAttestations[schemaUID].length;\\n }\\n\\n /// @dev Indexes an existing attestation.\\n /// @param attestationUID The UID of the attestation to index.\\n function _indexAttestation(bytes32 attestationUID) private {\\n // Skip already indexed attestations.\\n if (_indexedAttestations[attestationUID]) {\\n return;\\n }\\n\\n // Check if the attestation exists.\\n Attestation memory attestation = _eas.getAttestation(attestationUID);\\n\\n bytes32 uid = attestation.uid;\\n if (uid == EMPTY_UID) {\\n revert InvalidAttestation();\\n }\\n\\n // Index the attestation.\\n address attester = attestation.attester;\\n address recipient = attestation.recipient;\\n bytes32 schemaUID = attestation.schema;\\n\\n _indexedAttestations[attestationUID] = true;\\n _schemaAttestations[schemaUID].push(attestationUID);\\n _receivedAttestations[recipient][schemaUID].push(attestationUID);\\n _sentAttestations[attester][schemaUID].push(attestationUID);\\n _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\\n\\n emit Indexed({ uid: uid });\\n }\\n\\n /// @dev Returns a slice in an array of attestation UIDs.\\n /// @param uids The array of attestation UIDs.\\n /// @param start The offset to start from.\\n /// @param length The number of total members to retrieve.\\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\\n /// @return An array of attestation UIDs.\\n function _sliceUIDs(\\n bytes32[] memory uids,\\n uint256 start,\\n uint256 length,\\n bool reverseOrder\\n ) private pure returns (bytes32[] memory) {\\n uint256 attestationsLength = uids.length;\\n if (attestationsLength == 0) {\\n return new bytes32[](0);\\n }\\n\\n if (start >= attestationsLength) {\\n revert InvalidOffset();\\n }\\n\\n unchecked {\\n uint256 len = length;\\n if (attestationsLength < start + length) {\\n len = attestationsLength - start;\\n }\\n\\n bytes32[] memory res = new bytes32[](len);\\n\\n for (uint256 i = 0; i < len; ++i) {\\n res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\\n }\\n\\n return res;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5173770dc89df935a847cc6ae766c6adba7606cf37a88a9bb70564ce96e52734\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/Semver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.4;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\nimport { ISemver } from \\\"./ISemver.sol\\\";\\n\\n/// @title Semver\\n/// @notice A simple contract for managing contract versions.\\ncontract Semver is ISemver {\\n // Contract's major version number.\\n uint256 private immutable _major;\\n\\n // Contract's minor version number.\\n uint256 private immutable _minor;\\n\\n // Contract's patch version number.\\n uint256 private immutable _patch;\\n\\n /// @dev Create a new Semver instance.\\n /// @param major Major version number.\\n /// @param minor Minor version number.\\n /// @param patch Patch version number.\\n constructor(uint256 major, uint256 minor, uint256 patch) {\\n _major = major;\\n _minor = minor;\\n _patch = patch;\\n }\\n\\n /// @notice Returns the full semver contract version.\\n /// @return Semver contract version as a string.\\n function version() external view returns (string memory) {\\n return\\n string(\\n abi.encodePacked(Strings.toString(_major), \\\".\\\", Strings.toString(_minor), \\\".\\\", Strings.toString(_patch))\\n );\\n }\\n}\\n\",\"keccak256\":\"0x4f23442d048661b6aaa188ddc16b69cb310c2e44066b3852026afcb4201d61a9\",\"license\":\"MIT\"},\"@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport { Attestation } from \\\"./../Common.sol\\\";\\nimport { ISemver } from \\\"./../ISemver.sol\\\";\\n\\n/// @title ISchemaResolver\\n/// @notice The interface of an optional schema resolver.\\ninterface ISchemaResolver is ISemver {\\n /// @notice Checks if the resolver can be sent ETH.\\n /// @return Whether the resolver supports ETH transfers.\\n function isPayable() external pure returns (bool);\\n\\n /// @notice Processes an attestation and verifies whether it's valid.\\n /// @param attestation The new attestation.\\n /// @return Whether the attestation is valid.\\n function attest(Attestation calldata attestation) external payable returns (bool);\\n\\n /// @notice Processes multiple attestations and verifies whether they are valid.\\n /// @param attestations The new attestations.\\n /// @param values Explicit ETH amounts which were sent with each attestation.\\n /// @return Whether all the attestations are valid.\\n function multiAttest(\\n Attestation[] calldata attestations,\\n uint256[] calldata values\\n ) external payable returns (bool);\\n\\n /// @notice Processes an attestation revocation and verifies if it can be revoked.\\n /// @param attestation The existing attestation to be revoked.\\n /// @return Whether the attestation can be revoked.\\n function revoke(Attestation calldata attestation) external payable returns (bool);\\n\\n /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\\n /// @param attestations The existing attestations to be revoked.\\n /// @param values Explicit ETH amounts which were sent with each revocation.\\n /// @return Whether the attestations can be revoked.\\n function multiRevoke(\\n Attestation[] calldata attestations,\\n uint256[] calldata values\\n ) external payable returns (bool);\\n}\\n\",\"keccak256\":\"0xb7d1961ed928c620cddf35c2bf46845b10828bc5d73145214630202ed355b6bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Math} from \\\"./math/Math.sol\\\";\\nimport {SignedMath} from \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant HEX_DIGITS = \\\"0123456789abcdef\\\";\\n uint8 private constant ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev The `value` string doesn't fit in the specified `length`.\\n */\\n error StringsInsufficientHexLength(uint256 value, uint256 length);\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toStringSigned(int256 value) internal pure returns (string memory) {\\n return string.concat(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value)));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n uint256 localValue = value;\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = HEX_DIGITS[localValue & 0xf];\\n localValue >>= 4;\\n }\\n if (localValue != 0) {\\n revert StringsInsufficientHexLength(value, length);\\n }\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\\n * representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Muldiv operation overflow.\\n */\\n error MathOverflowedMulDiv();\\n\\n enum Rounding {\\n Floor, // Toward negative infinity\\n Ceil, // Toward positive infinity\\n Trunc, // Toward zero\\n Expand // Away from zero\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds towards infinity instead\\n * of rounding towards zero.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (b == 0) {\\n // Guarantee the same behavior as in a regular Solidity division.\\n return a / b;\\n }\\n\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\\n * denominator == 0.\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\\n * Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0 = x * y; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n if (denominator <= prod1) {\\n revert MathOverflowedMulDiv();\\n }\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\\n\\n uint256 twos = denominator & (0 - denominator);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\\n // works in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\\n * towards zero.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2 of a positive value rounded towards zero.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10 of a positive value rounded towards zero.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256 of a positive value rounded towards zero.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\\n */\\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\\n return uint8(rounding) % 2 == 1;\\n }\\n}\\n\",\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a", + "devdoc": { + "events": { + "Indexed(bytes32)": { + "params": { + "uid": "The UID the attestation." + } + } + }, + "kind": "dev", + "methods": { + "constructor": { + "details": "Creates a new Indexer instance.", + "params": { + "eas": "The address of the global EAS contract." + } + }, + "getReceivedAttestationUIDCount(address,bytes32)": { + "params": { + "recipient": "The recipient of the attestation.", + "schemaUID": "The UID of the schema." + }, + "returns": { + "_0": "The total number of attestations." + } + }, + "getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)": { + "params": { + "length": "The number of total members to retrieve.", + "recipient": "The recipient of the attestation.", + "reverseOrder": "Whether the offset starts from the end and the data is returned in reverse.", + "schemaUID": "The UID of the schema.", + "start": "The offset to start from." + }, + "returns": { + "_0": "An array of attestation UIDs." + } + }, + "getSchemaAttestationUIDCount(bytes32)": { + "params": { + "schemaUID": "The UID of the schema." + }, + "returns": { + "_0": "An array of attestation UIDs." + } + }, + "getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)": { + "params": { + "length": "The number of total members to retrieve.", + "reverseOrder": "Whether the offset starts from the end and the data is returned in reverse.", + "schemaUID": "The UID of the schema.", + "start": "The offset to start from." + }, + "returns": { + "_0": "An array of attestation UIDs." + } + }, + "getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)": { + "params": { + "attester": "The attester of the attestation.", + "recipient": "The recipient of the attestation.", + "schemaUID": "The UID of the schema." + }, + "returns": { + "_0": "An array of attestation UIDs." + } + }, + "getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)": { + "params": { + "attester": "The attester of the attestation.", + "length": "The number of total members to retrieve.", + "recipient": "The recipient of the attestation.", + "reverseOrder": "Whether the offset starts from the end and the data is returned in reverse.", + "schemaUID": "The UID of the schema.", + "start": "The offset to start from." + }, + "returns": { + "_0": "An array of attestation UIDs." + } + }, + "getSentAttestationUIDCount(address,bytes32)": { + "params": { + "attester": "The attester of the attestation.", + "schemaUID": "The UID of the schema." + }, + "returns": { + "_0": "The total number of attestations." + } + }, + "getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)": { + "params": { + "attester": "The attester of the attestation.", + "length": "The number of total members to retrieve.", + "reverseOrder": "Whether the offset starts from the end and the data is returned in reverse.", + "schemaUID": "The UID of the schema.", + "start": "The offset to start from." + }, + "returns": { + "_0": "An array of attestation UIDs." + } + }, + "indexAttestation(bytes32)": { + "params": { + "attestationUID": "The UID of the attestation to index." + } + }, + "indexAttestations(bytes32[])": { + "params": { + "attestationUIDs": "The UIDs of the attestations to index." + } + }, + "isAttestationIndexed(bytes32)": { + "params": { + "attestationUID": "The UID of the attestation to check." + }, + "returns": { + "_0": "Whether an attestation has been already indexed." + } + }, + "version()": { + "returns": { + "_0": "Semver contract version as a string." + } + } + }, + "title": "Indexer", + "version": 1 + }, + "userdoc": { + "events": { + "Indexed(bytes32)": { + "notice": "Emitted when an attestation has been indexed." + } + }, + "kind": "user", + "methods": { + "getEAS()": { + "notice": "Returns the EAS." + }, + "getReceivedAttestationUIDCount(address,bytes32)": { + "notice": "Returns the total number of attestations to a specific schema which were attested to/received by a specific recipient." + }, + "getReceivedAttestationUIDs(address,bytes32,uint256,uint256,bool)": { + "notice": "Returns the UIDs of attestations to a specific schema which were attested to/received by a specific recipient." + }, + "getSchemaAttestationUIDCount(bytes32)": { + "notice": "Returns the total number of attestations to a specific schema." + }, + "getSchemaAttestationUIDs(bytes32,uint256,uint256,bool)": { + "notice": "Returns the UIDs of attestations to a specific schema." + }, + "getSchemaAttesterRecipientAttestationUIDCount(bytes32,address,address)": { + "notice": "Returns the total number of UIDs of attestations to a specific schema which were attested by a specific attester to a specific recipient." + }, + "getSchemaAttesterRecipientAttestationUIDs(bytes32,address,address,uint256,uint256,bool)": { + "notice": "Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a specific recipient." + }, + "getSentAttestationUIDCount(address,bytes32)": { + "notice": "Returns the total number of attestations to a specific schema which were attested by a specific attester." + }, + "getSentAttestationUIDs(address,bytes32,uint256,uint256,bool)": { + "notice": "Returns the UIDs of attestations to a specific schema which were attested by a specific attester." + }, + "indexAttestation(bytes32)": { + "notice": "Indexes an existing attestation." + }, + "indexAttestations(bytes32[])": { + "notice": "Indexes multiple existing attestations." + }, + "isAttestationIndexed(bytes32)": { + "notice": "Returns whether an existing attestation has been already indexed." + }, + "version()": { + "notice": "Returns the full semver contract version." + } + }, + "notice": "Indexing Service for the Ethereum Attestation Service", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 2421, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer", + "label": "_receivedAttestations", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))" + }, + { + "astId": 2428, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer", + "label": "_sentAttestations", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))" + }, + { + "astId": 2437, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer", + "label": "_schemaAttesterRecipientAttestations", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))" + }, + { + "astId": 2442, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer", + "label": "_schemaAttestations", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)" + }, + { + "astId": 2446, + "contract": "@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol:Indexer", + "label": "_indexedAttestations", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_bytes32,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "base": "t_bytes32", + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_bytes32)dyn_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bytes32[])", + "numberOfBytes": "32", + "value": "t_array(t_bytes32)dyn_storage" + }, + "t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bytes32[]))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_array(t_bytes32)dyn_storage)" + }, + "t_mapping(t_address,t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(bytes32 => bytes32[]))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)" + }, + "t_mapping(t_bytes32,t_array(t_bytes32)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bytes32[])", + "numberOfBytes": "32", + "value": "t_array(t_bytes32)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage)))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => mapping(address => bytes32[])))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_mapping(t_address,t_array(t_bytes32)dyn_storage))" + } + } + } +} \ No newline at end of file diff --git a/deployments/ink-sepolia/SchemaRegistry.json b/deployments/ink-sepolia/SchemaRegistry.json new file mode 100644 index 00000000..bd57172e --- /dev/null +++ b/deployments/ink-sepolia/SchemaRegistry.json @@ -0,0 +1,117 @@ +{ + "address": "0x4200000000000000000000000000000000000020", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AlreadyExists", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "registerer", + "type": "address" + } + ], + "name": "Registered", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + } + ], + "name": "getSchema", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "uid", + "type": "bytes32" + }, + { + "internalType": "contract ISchemaResolver", + "name": "resolver", + "type": "address" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + }, + { + "internalType": "string", + "name": "schema", + "type": "string" + } + ], + "internalType": "struct SchemaRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "schema", + "type": "string" + }, + { + "internalType": "contract ISchemaResolver", + "name": "resolver", + "type": "address" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + } + ], + "name": "register", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} diff --git a/deployments/ink-sepolia/solcInputs/ab2e55c92b39ec3be86af0608f634927.json b/deployments/ink-sepolia/solcInputs/ab2e55c92b39ec3be86af0608f634927.json new file mode 100644 index 00000000..38fecc7d --- /dev/null +++ b/deployments/ink-sepolia/solcInputs/ab2e55c92b39ec3be86af0608f634927.json @@ -0,0 +1,115 @@ +{ + "language": "Solidity", + "sources": { + "@ethereum-attestation-service/eas-contracts/contracts/Common.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n// A representation of an empty/uninitialized UID.\nbytes32 constant EMPTY_UID = 0;\n\n// A zero expiration represents an non-expiring attestation.\nuint64 constant NO_EXPIRATION_TIME = 0;\n\nerror AccessDenied();\nerror DeadlineExpired();\nerror InvalidEAS();\nerror InvalidLength();\nerror InvalidSignature();\nerror NotFound();\n\n/// @notice A struct representing ECDSA signature data.\nstruct Signature {\n uint8 v; // The recovery ID.\n bytes32 r; // The x-coordinate of the nonce R.\n bytes32 s; // The signature data.\n}\n\n/// @notice A struct representing a single attestation.\nstruct Attestation {\n bytes32 uid; // A unique identifier of the attestation.\n bytes32 schema; // The unique identifier of the schema.\n uint64 time; // The time when the attestation was created (Unix timestamp).\n uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\n uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).\n bytes32 refUID; // The UID of the related attestation.\n address recipient; // The recipient of the attestation.\n address attester; // The attester/sender of the attestation.\n bool revocable; // Whether the attestation is revocable.\n bytes data; // Custom attestation data.\n}\n\n/// @notice A helper function to work with unchecked iterators in loops.\nfunction uncheckedInc(uint256 i) pure returns (uint256 j) {\n unchecked {\n j = i + 1;\n }\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/EAS.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.27;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { EIP1271Verifier } from \"./eip1271/EIP1271Verifier.sol\";\n\nimport { ISchemaResolver } from \"./resolver/ISchemaResolver.sol\";\n\n// prettier-ignore\nimport {\n AccessDenied,\n EMPTY_UID,\n InvalidLength,\n NotFound,\n NO_EXPIRATION_TIME,\n uncheckedInc\n} from \"./Common.sol\";\n\n// prettier-ignore\nimport {\n Attestation,\n AttestationRequest,\n AttestationRequestData,\n DelegatedAttestationRequest,\n DelegatedRevocationRequest,\n IEAS,\n MultiAttestationRequest,\n MultiDelegatedAttestationRequest,\n MultiDelegatedRevocationRequest,\n MultiRevocationRequest,\n RevocationRequest,\n RevocationRequestData\n} from \"./IEAS.sol\";\n\nimport { Semver } from \"./Semver.sol\";\nimport { ISchemaRegistry, SchemaRecord } from \"./ISchemaRegistry.sol\";\n\n/// @title EAS\n/// @notice The Ethereum Attestation Service protocol.\ncontract EAS is IEAS, Semver, EIP1271Verifier {\n using Address for address payable;\n\n error AlreadyRevoked();\n error AlreadyRevokedOffchain();\n error AlreadyTimestamped();\n error InsufficientValue();\n error InvalidAttestation();\n error InvalidAttestations();\n error InvalidExpirationTime();\n error InvalidOffset();\n error InvalidRegistry();\n error InvalidRevocation();\n error InvalidRevocations();\n error InvalidSchema();\n error InvalidVerifier();\n error Irrevocable();\n error NotPayable();\n error WrongSchema();\n\n /// @notice A struct representing an internal attestation result.\n struct AttestationsResult {\n uint256 usedValue; // Total ETH amount that was sent to resolvers.\n bytes32[] uids; // UIDs of the new attestations.\n }\n\n // The global schema registry.\n ISchemaRegistry private immutable _schemaRegistry;\n\n // The global mapping between attestations and their UIDs.\n mapping(bytes32 uid => Attestation attestation) private _db;\n\n // The global mapping between data and their timestamps.\n mapping(bytes32 data => uint64 timestamp) private _timestamps;\n\n // The global mapping between data and their revocation timestamps.\n mapping(address revoker => mapping(bytes32 data => uint64 timestamp) timestamps) private _revocationsOffchain;\n\n /// @dev Creates a new EAS instance.\n /// @param registry The address of the global schema registry.\n constructor(ISchemaRegistry registry) Semver(1, 3, 0) EIP1271Verifier(\"EAS\", \"1.3.0\") {\n if (address(registry) == address(0)) {\n revert InvalidRegistry();\n }\n\n _schemaRegistry = registry;\n }\n\n /// @inheritdoc IEAS\n function getSchemaRegistry() external view returns (ISchemaRegistry) {\n return _schemaRegistry;\n }\n\n /// @inheritdoc IEAS\n function attest(AttestationRequest calldata request) external payable returns (bytes32) {\n AttestationRequestData[] memory data = new AttestationRequestData[](1);\n data[0] = request.data;\n\n return _attest(request.schema, data, msg.sender, msg.value, true).uids[0];\n }\n\n /// @inheritdoc IEAS\n function attestByDelegation(\n DelegatedAttestationRequest calldata delegatedRequest\n ) external payable returns (bytes32) {\n _verifyAttest(delegatedRequest);\n\n AttestationRequestData[] memory data = new AttestationRequestData[](1);\n data[0] = delegatedRequest.data;\n\n return _attest(delegatedRequest.schema, data, delegatedRequest.attester, msg.value, true).uids[0];\n }\n\n /// @inheritdoc IEAS\n function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory) {\n // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\n // all the returned UIDs into a single list.\n uint256 length = multiRequests.length;\n bytes32[][] memory totalUIDs = new bytes32[][](length);\n uint256 totalUIDCount = 0;\n\n // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n // possible to send too much ETH anyway.\n uint256 availableValue = msg.value;\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n // last and final batch).\n bool last;\n unchecked {\n last = i == length - 1;\n }\n\n // Process the current batch of attestations.\n MultiAttestationRequest calldata multiRequest = multiRequests[i];\n\n // Ensure that data isn't empty.\n if (multiRequest.data.length == 0) {\n revert InvalidLength();\n }\n\n AttestationsResult memory res = _attest(\n multiRequest.schema,\n multiRequest.data,\n msg.sender,\n availableValue,\n last\n );\n\n // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n availableValue -= res.usedValue;\n\n // Collect UIDs (and merge them later).\n totalUIDs[i] = res.uids;\n unchecked {\n totalUIDCount += res.uids.length;\n }\n }\n\n // Merge all the collected UIDs and return them as a flatten array.\n return _mergeUIDs(totalUIDs, totalUIDCount);\n }\n\n /// @inheritdoc IEAS\n function multiAttestByDelegation(\n MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\n ) external payable returns (bytes32[] memory) {\n // Since a multi-attest call is going to make multiple attestations for multiple schemas, we'd need to collect\n // all the returned UIDs into a single list.\n uint256 length = multiDelegatedRequests.length;\n bytes32[][] memory totalUIDs = new bytes32[][](length);\n uint256 totalUIDCount = 0;\n\n // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n // possible to send too much ETH anyway.\n uint256 availableValue = msg.value;\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n // last and final batch).\n bool last;\n unchecked {\n last = i == length - 1;\n }\n\n MultiDelegatedAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\n AttestationRequestData[] calldata data = multiDelegatedRequest.data;\n\n // Ensure that no inputs are missing.\n uint256 dataLength = data.length;\n if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n revert InvalidLength();\n }\n\n // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\n _verifyAttest(\n DelegatedAttestationRequest({\n schema: multiDelegatedRequest.schema,\n data: data[j],\n signature: multiDelegatedRequest.signatures[j],\n attester: multiDelegatedRequest.attester,\n deadline: multiDelegatedRequest.deadline\n })\n );\n }\n\n // Process the current batch of attestations.\n AttestationsResult memory res = _attest(\n multiDelegatedRequest.schema,\n data,\n multiDelegatedRequest.attester,\n availableValue,\n last\n );\n\n // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n availableValue -= res.usedValue;\n\n // Collect UIDs (and merge them later).\n totalUIDs[i] = res.uids;\n unchecked {\n totalUIDCount += res.uids.length;\n }\n }\n\n // Merge all the collected UIDs and return them as a flatten array.\n return _mergeUIDs(totalUIDs, totalUIDCount);\n }\n\n /// @inheritdoc IEAS\n function revoke(RevocationRequest calldata request) external payable {\n RevocationRequestData[] memory data = new RevocationRequestData[](1);\n data[0] = request.data;\n\n _revoke(request.schema, data, msg.sender, msg.value, true);\n }\n\n /// @inheritdoc IEAS\n function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable {\n _verifyRevoke(delegatedRequest);\n\n RevocationRequestData[] memory data = new RevocationRequestData[](1);\n data[0] = delegatedRequest.data;\n\n _revoke(delegatedRequest.schema, data, delegatedRequest.revoker, msg.value, true);\n }\n\n /// @inheritdoc IEAS\n function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable {\n // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n // possible to send too much ETH anyway.\n uint256 availableValue = msg.value;\n\n uint256 length = multiRequests.length;\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n // last and final batch).\n bool last;\n unchecked {\n last = i == length - 1;\n }\n\n MultiRevocationRequest calldata multiRequest = multiRequests[i];\n\n // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n availableValue -= _revoke(multiRequest.schema, multiRequest.data, msg.sender, availableValue, last);\n }\n }\n\n /// @inheritdoc IEAS\n function multiRevokeByDelegation(\n MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\n ) external payable {\n // We are keeping track of the total available ETH amount that can be sent to resolvers and will keep deducting\n // from it to verify that there isn't any attempt to send too much ETH to resolvers. Please note that unless\n // some ETH was stuck in the contract by accident (which shouldn't happen in normal conditions), it won't be\n // possible to send too much ETH anyway.\n uint256 availableValue = msg.value;\n\n uint256 length = multiDelegatedRequests.length;\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n // The last batch is handled slightly differently: if the total available ETH wasn't spent in full and there\n // is a remainder - it will be refunded back to the attester (something that we can only verify during the\n // last and final batch).\n bool last;\n unchecked {\n last = i == length - 1;\n }\n\n MultiDelegatedRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\n RevocationRequestData[] memory data = multiDelegatedRequest.data;\n\n // Ensure that no inputs are missing.\n uint256 dataLength = data.length;\n if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n revert InvalidLength();\n }\n\n // Verify signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\n _verifyRevoke(\n DelegatedRevocationRequest({\n schema: multiDelegatedRequest.schema,\n data: data[j],\n signature: multiDelegatedRequest.signatures[j],\n revoker: multiDelegatedRequest.revoker,\n deadline: multiDelegatedRequest.deadline\n })\n );\n }\n\n // Ensure to deduct the ETH that was forwarded to the resolver during the processing of this batch.\n availableValue -= _revoke(\n multiDelegatedRequest.schema,\n data,\n multiDelegatedRequest.revoker,\n availableValue,\n last\n );\n }\n }\n\n /// @inheritdoc IEAS\n function timestamp(bytes32 data) external returns (uint64) {\n uint64 time = _time();\n\n _timestamp(data, time);\n\n return time;\n }\n\n /// @inheritdoc IEAS\n function revokeOffchain(bytes32 data) external returns (uint64) {\n uint64 time = _time();\n\n _revokeOffchain(msg.sender, data, time);\n\n return time;\n }\n\n /// @inheritdoc IEAS\n function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64) {\n uint64 time = _time();\n\n uint256 length = data.length;\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n _revokeOffchain(msg.sender, data[i], time);\n }\n\n return time;\n }\n\n /// @inheritdoc IEAS\n function multiTimestamp(bytes32[] calldata data) external returns (uint64) {\n uint64 time = _time();\n\n uint256 length = data.length;\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n _timestamp(data[i], time);\n }\n\n return time;\n }\n\n /// @inheritdoc IEAS\n function getAttestation(bytes32 uid) external view returns (Attestation memory) {\n return _db[uid];\n }\n\n /// @inheritdoc IEAS\n function isAttestationValid(bytes32 uid) public view returns (bool) {\n return _db[uid].uid != EMPTY_UID;\n }\n\n /// @inheritdoc IEAS\n function getTimestamp(bytes32 data) external view returns (uint64) {\n return _timestamps[data];\n }\n\n /// @inheritdoc IEAS\n function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64) {\n return _revocationsOffchain[revoker][data];\n }\n\n /// @dev Attests to a specific schema.\n /// @param schemaUID The unique identifier of the schema to attest to.\n /// @param data The arguments of the attestation requests.\n /// @param attester The attesting account.\n /// @param availableValue The total available ETH amount that can be sent to the resolver.\n /// @param last Whether this is the last attestations/revocations set.\n /// @return The UID of the new attestations and the total sent ETH amount.\n function _attest(\n bytes32 schemaUID,\n AttestationRequestData[] memory data,\n address attester,\n uint256 availableValue,\n bool last\n ) private returns (AttestationsResult memory) {\n uint256 length = data.length;\n\n AttestationsResult memory res;\n res.uids = new bytes32[](length);\n\n // Ensure that we aren't attempting to attest to a non-existing schema.\n SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\n if (schemaRecord.uid == EMPTY_UID) {\n revert InvalidSchema();\n }\n\n Attestation[] memory attestations = new Attestation[](length);\n uint256[] memory values = new uint256[](length);\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n AttestationRequestData memory request = data[i];\n\n // Ensure that either no expiration time was set or that it was set in the future.\n if (request.expirationTime != NO_EXPIRATION_TIME && request.expirationTime <= _time()) {\n revert InvalidExpirationTime();\n }\n\n // Ensure that we aren't trying to make a revocable attestation for a non-revocable schema.\n if (!schemaRecord.revocable && request.revocable) {\n revert Irrevocable();\n }\n\n Attestation memory attestation = Attestation({\n uid: EMPTY_UID,\n schema: schemaUID,\n refUID: request.refUID,\n time: _time(),\n expirationTime: request.expirationTime,\n revocationTime: 0,\n recipient: request.recipient,\n attester: attester,\n revocable: request.revocable,\n data: request.data\n });\n\n // Look for the first non-existing UID (and use a bump seed/nonce in the rare case of a conflict).\n bytes32 uid;\n uint32 bump = 0;\n while (true) {\n uid = _getUID(attestation, bump);\n if (_db[uid].uid == EMPTY_UID) {\n break;\n }\n\n unchecked {\n ++bump;\n }\n }\n attestation.uid = uid;\n\n _db[uid] = attestation;\n\n if (request.refUID != EMPTY_UID) {\n // Ensure that we aren't trying to attest to a non-existing referenced UID.\n if (!isAttestationValid(request.refUID)) {\n revert NotFound();\n }\n }\n\n attestations[i] = attestation;\n values[i] = request.value;\n\n res.uids[i] = uid;\n\n emit Attested(request.recipient, attester, uid, schemaUID);\n }\n\n res.usedValue = _resolveAttestations(schemaRecord, attestations, values, false, availableValue, last);\n\n return res;\n }\n\n /// @dev Revokes an existing attestation to a specific schema.\n /// @param schemaUID The unique identifier of the schema to attest to.\n /// @param data The arguments of the revocation requests.\n /// @param revoker The revoking account.\n /// @param availableValue The total available ETH amount that can be sent to the resolver.\n /// @param last Whether this is the last attestations/revocations set.\n /// @return Returns the total sent ETH amount.\n function _revoke(\n bytes32 schemaUID,\n RevocationRequestData[] memory data,\n address revoker,\n uint256 availableValue,\n bool last\n ) private returns (uint256) {\n // Ensure that a non-existing schema ID wasn't passed by accident.\n SchemaRecord memory schemaRecord = _schemaRegistry.getSchema(schemaUID);\n if (schemaRecord.uid == EMPTY_UID) {\n revert InvalidSchema();\n }\n\n uint256 length = data.length;\n Attestation[] memory attestations = new Attestation[](length);\n uint256[] memory values = new uint256[](length);\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n RevocationRequestData memory request = data[i];\n\n Attestation storage attestation = _db[request.uid];\n\n // Ensure that we aren't attempting to revoke a non-existing attestation.\n if (attestation.uid == EMPTY_UID) {\n revert NotFound();\n }\n\n // Ensure that a wrong schema ID wasn't passed by accident.\n if (attestation.schema != schemaUID) {\n revert InvalidSchema();\n }\n\n // Allow only original attesters to revoke their attestations.\n if (attestation.attester != revoker) {\n revert AccessDenied();\n }\n\n // Please note that also checking of the schema itself is revocable is unnecessary, since it's not possible to\n // make revocable attestations to an irrevocable schema.\n if (!attestation.revocable) {\n revert Irrevocable();\n }\n\n // Ensure that we aren't trying to revoke the same attestation twice.\n if (attestation.revocationTime != 0) {\n revert AlreadyRevoked();\n }\n attestation.revocationTime = _time();\n\n attestations[i] = attestation;\n values[i] = request.value;\n\n emit Revoked(attestations[i].recipient, revoker, request.uid, schemaUID);\n }\n\n return _resolveAttestations(schemaRecord, attestations, values, true, availableValue, last);\n }\n\n /// @dev Resolves a new attestation or a revocation of an existing attestation.\n /// @param schemaRecord The schema of the attestation.\n /// @param attestation The data of the attestation to make/revoke.\n /// @param value An explicit ETH amount to send to the resolver.\n /// @param isRevocation Whether to resolve an attestation or its revocation.\n /// @param availableValue The total available ETH amount that can be sent to the resolver.\n /// @param last Whether this is the last attestations/revocations set.\n /// @return Returns the total sent ETH amount.\n function _resolveAttestation(\n SchemaRecord memory schemaRecord,\n Attestation memory attestation,\n uint256 value,\n bool isRevocation,\n uint256 availableValue,\n bool last\n ) private returns (uint256) {\n ISchemaResolver resolver = schemaRecord.resolver;\n if (address(resolver) == address(0)) {\n // Ensure that we don't accept payments if there is no resolver.\n if (value != 0) {\n revert NotPayable();\n }\n\n if (last) {\n _refund(availableValue);\n }\n\n return 0;\n }\n\n // Ensure that we don't accept payments which can't be forwarded to the resolver.\n if (value != 0) {\n if (!resolver.isPayable()) {\n revert NotPayable();\n }\n\n // Ensure that the attester/revoker doesn't try to spend more than available.\n if (value > availableValue) {\n revert InsufficientValue();\n }\n\n // Ensure to deduct the sent value explicitly.\n unchecked {\n availableValue -= value;\n }\n }\n\n if (isRevocation) {\n if (!resolver.revoke{ value: value }(attestation)) {\n revert InvalidRevocation();\n }\n } else if (!resolver.attest{ value: value }(attestation)) {\n revert InvalidAttestation();\n }\n\n if (last) {\n _refund(availableValue);\n }\n\n return value;\n }\n\n /// @dev Resolves multiple attestations or revocations of existing attestations.\n /// @param schemaRecord The schema of the attestation.\n /// @param attestations The data of the attestations to make/revoke.\n /// @param values Explicit ETH amounts to send to the resolver.\n /// @param isRevocation Whether to resolve an attestation or its revocation.\n /// @param availableValue The total available ETH amount that can be sent to the resolver.\n /// @param last Whether this is the last attestations/revocations set.\n /// @return Returns the total sent ETH amount.\n function _resolveAttestations(\n SchemaRecord memory schemaRecord,\n Attestation[] memory attestations,\n uint256[] memory values,\n bool isRevocation,\n uint256 availableValue,\n bool last\n ) private returns (uint256) {\n uint256 length = attestations.length;\n if (length == 1) {\n return _resolveAttestation(schemaRecord, attestations[0], values[0], isRevocation, availableValue, last);\n }\n\n ISchemaResolver resolver = schemaRecord.resolver;\n if (address(resolver) == address(0)) {\n // Ensure that we don't accept payments if there is no resolver.\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n if (values[i] != 0) {\n revert NotPayable();\n }\n }\n\n if (last) {\n _refund(availableValue);\n }\n\n return 0;\n }\n\n uint256 totalUsedValue = 0;\n bool isResolverPayable = resolver.isPayable();\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n uint256 value = values[i];\n\n // Ensure that we don't accept payments which can't be forwarded to the resolver.\n if (value == 0) {\n continue;\n }\n\n if (!isResolverPayable) {\n revert NotPayable();\n }\n\n // Ensure that the attester/revoker doesn't try to spend more than available.\n if (value > availableValue) {\n revert InsufficientValue();\n }\n\n // Ensure to deduct the sent value explicitly and add it to the total used value by the batch.\n unchecked {\n availableValue -= value;\n totalUsedValue += value;\n }\n }\n\n if (isRevocation) {\n if (!resolver.multiRevoke{ value: totalUsedValue }(attestations, values)) {\n revert InvalidRevocations();\n }\n } else if (!resolver.multiAttest{ value: totalUsedValue }(attestations, values)) {\n revert InvalidAttestations();\n }\n\n if (last) {\n _refund(availableValue);\n }\n\n return totalUsedValue;\n }\n\n /// @dev Calculates a UID for a given attestation.\n /// @param attestation The input attestation.\n /// @param bump A bump value to use in case of a UID conflict.\n /// @return Attestation UID.\n function _getUID(Attestation memory attestation, uint32 bump) private pure returns (bytes32) {\n return\n keccak256(\n abi.encodePacked(\n attestation.schema,\n attestation.recipient,\n attestation.attester,\n attestation.time,\n attestation.expirationTime,\n attestation.revocable,\n attestation.refUID,\n attestation.data,\n bump\n )\n );\n }\n\n /// @dev Refunds remaining ETH amount to the attester.\n /// @param remainingValue The remaining ETH amount that was not sent to the resolver.\n function _refund(uint256 remainingValue) private {\n if (remainingValue > 0) {\n // Using a regular transfer here might revert, for some non-EOA attesters, due to exceeding of the 2300\n // gas limit which is why we're using call instead (via sendValue), which the 2300 gas limit does not\n // apply for.\n payable(msg.sender).sendValue(remainingValue);\n }\n }\n\n /// @dev Timestamps the specified bytes32 data.\n /// @param data The data to timestamp.\n /// @param time The timestamp.\n function _timestamp(bytes32 data, uint64 time) private {\n if (_timestamps[data] != 0) {\n revert AlreadyTimestamped();\n }\n\n _timestamps[data] = time;\n\n emit Timestamped(data, time);\n }\n\n /// @dev Revokes the specified bytes32 data.\n /// @param revoker The revoking account.\n /// @param data The data to revoke.\n /// @param time The timestamp the data was revoked with.\n function _revokeOffchain(address revoker, bytes32 data, uint64 time) private {\n mapping(bytes32 data => uint64 timestamp) storage revocations = _revocationsOffchain[revoker];\n\n if (revocations[data] != 0) {\n revert AlreadyRevokedOffchain();\n }\n\n revocations[data] = time;\n\n emit RevokedOffchain(revoker, data, time);\n }\n\n /// @dev Merges lists of UIDs.\n /// @param uidLists The provided lists of UIDs.\n /// @param uidCount Total UID count.\n /// @return A merged and flatten list of all the UIDs.\n function _mergeUIDs(bytes32[][] memory uidLists, uint256 uidCount) private pure returns (bytes32[] memory) {\n bytes32[] memory uids = new bytes32[](uidCount);\n\n uint256 currentIndex = 0;\n uint256 uidListLength = uidLists.length;\n for (uint256 i = 0; i < uidListLength; i = uncheckedInc(i)) {\n bytes32[] memory currentUIDs = uidLists[i];\n uint256 currentUIDsLength = currentUIDs.length;\n for (uint256 j = 0; j < currentUIDsLength; j = uncheckedInc(j)) {\n uids[currentIndex] = currentUIDs[j];\n\n unchecked {\n ++currentIndex;\n }\n }\n }\n\n return uids;\n }\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/eip1271/EIP1271Verifier.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.27;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { EIP712 } from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport { SignatureChecker } from \"@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol\";\nimport { DeadlineExpired, NO_EXPIRATION_TIME, Signature, InvalidSignature } from \"./../Common.sol\";\n\n// prettier-ignore\nimport {\n AttestationRequestData,\n DelegatedAttestationRequest,\n DelegatedRevocationRequest,\n RevocationRequestData\n} from \"../IEAS.sol\";\n\n/// @title EIP1271Verifier\n/// @notice EIP1271Verifier typed signatures verifier for EAS delegated attestations.\nabstract contract EIP1271Verifier is EIP712 {\n using Address for address;\n\n error InvalidNonce();\n\n // The hash of the data type used to relay calls to the attest function. It's the value of\n // keccak256(\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint256 nonce,uint64 deadline)\").\n bytes32 private constant ATTEST_TYPEHASH = 0xfeb2925a02bae3dae48d424a0437a2b6ac939aa9230ddc55a1a76f065d988076;\n\n // The hash of the data type used to relay calls to the revoke function. It's the value of\n // keccak256(\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint256 nonce,uint64 deadline)\").\n bytes32 private constant REVOKE_TYPEHASH = 0xb5d556f07587ec0f08cf386545cc4362c702a001650c2058002615ee5c9d1e75;\n\n // The user readable name of the signing domain.\n string private _name;\n\n // Replay protection nonces.\n mapping(address attester => uint256 nonce) private _nonces;\n\n /// @notice Emitted when users invalidate nonces by increasing their nonces to (higher) new values.\n /// @param oldNonce The previous nonce.\n /// @param newNonce The new value.\n event NonceIncreased(uint256 oldNonce, uint256 newNonce);\n\n /// @dev Creates a new EIP1271Verifier instance.\n /// @param version The current major version of the signing domain\n constructor(string memory name, string memory version) EIP712(name, version) {\n _name = name;\n }\n\n /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\n /// @return The domain separator used in the encoding of the signatures for attest, and revoke.\n function getDomainSeparator() external view returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n /// @notice Returns the current nonce per-account.\n /// @param account The requested account.\n /// @return The current nonce.\n function getNonce(address account) external view returns (uint256) {\n return _nonces[account];\n }\n\n /// @notice Returns the EIP712 type hash for the attest function.\n /// @return The EIP712 type hash for the attest function.\n function getAttestTypeHash() external pure returns (bytes32) {\n return ATTEST_TYPEHASH;\n }\n\n /// @notice Returns the EIP712 type hash for the revoke function.\n /// @return The EIP712 type hash for the revoke function.\n function getRevokeTypeHash() external pure returns (bytes32) {\n return REVOKE_TYPEHASH;\n }\n\n /// @notice Returns the EIP712 name.\n /// @return The EIP712 name.\n function getName() external view returns (string memory) {\n return _name;\n }\n\n /// @notice Provides users an option to invalidate nonces by increasing their nonces to (higher) new values.\n /// @param newNonce The (higher) new value.\n function increaseNonce(uint256 newNonce) external {\n uint256 oldNonce = _nonces[msg.sender];\n if (newNonce <= oldNonce) {\n revert InvalidNonce();\n }\n\n _nonces[msg.sender] = newNonce;\n\n emit NonceIncreased({ oldNonce: oldNonce, newNonce: newNonce });\n }\n\n /// @dev Verifies delegated attestation request.\n /// @param request The arguments of the delegated attestation request.\n function _verifyAttest(DelegatedAttestationRequest memory request) internal {\n if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n revert DeadlineExpired();\n }\n\n AttestationRequestData memory data = request.data;\n Signature memory signature = request.signature;\n\n bytes32 hash = _hashTypedDataV4(\n keccak256(\n abi.encode(\n ATTEST_TYPEHASH,\n request.attester,\n request.schema,\n data.recipient,\n data.expirationTime,\n data.revocable,\n data.refUID,\n keccak256(data.data),\n data.value,\n _nonces[request.attester]++,\n request.deadline\n )\n )\n );\n if (\n !SignatureChecker.isValidSignatureNow(\n request.attester,\n hash,\n abi.encodePacked(signature.r, signature.s, signature.v)\n )\n ) {\n revert InvalidSignature();\n }\n }\n\n /// @dev Verifies delegated revocation request.\n /// @param request The arguments of the delegated revocation request.\n function _verifyRevoke(DelegatedRevocationRequest memory request) internal {\n if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n revert DeadlineExpired();\n }\n\n RevocationRequestData memory data = request.data;\n Signature memory signature = request.signature;\n\n bytes32 hash = _hashTypedDataV4(\n keccak256(\n abi.encode(\n REVOKE_TYPEHASH,\n request.revoker,\n request.schema,\n data.uid,\n data.value,\n _nonces[request.revoker]++,\n request.deadline\n )\n )\n );\n if (\n !SignatureChecker.isValidSignatureNow(\n request.revoker,\n hash,\n abi.encodePacked(signature.r, signature.s, signature.v)\n )\n ) {\n revert InvalidSignature();\n }\n }\n\n /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\n /// current block time.\n function _time() internal view virtual returns (uint64) {\n return uint64(block.timestamp);\n }\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.27;\n\nimport { EIP712 } from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\n\n// prettier-ignore\nimport {\n AccessDenied,\n DeadlineExpired,\n Signature,\n InvalidEAS,\n InvalidLength,\n InvalidSignature,\n NotFound,\n NO_EXPIRATION_TIME,\n uncheckedInc\n} from \"../../Common.sol\";\n\n// prettier-ignore\nimport {\n AttestationRequest,\n AttestationRequestData,\n IEAS,\n MultiAttestationRequest,\n MultiRevocationRequest,\n RevocationRequest,\n RevocationRequestData\n} from \"../../IEAS.sol\";\n\nimport { Semver } from \"../../Semver.sol\";\n\n/// @notice A struct representing the full arguments of the full delegated attestation request.\nstruct DelegatedProxyAttestationRequest {\n bytes32 schema; // The unique identifier of the schema.\n AttestationRequestData data; // The arguments of the attestation request.\n Signature signature; // The EIP712 signature data.\n address attester; // The attesting account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\nstruct MultiDelegatedProxyAttestationRequest {\n bytes32 schema; // The unique identifier of the schema.\n AttestationRequestData[] data; // The arguments of the attestation requests.\n Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n address attester; // The attesting account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the arguments of the full delegated revocation request.\nstruct DelegatedProxyRevocationRequest {\n bytes32 schema; // The unique identifier of the schema.\n RevocationRequestData data; // The arguments of the revocation request.\n Signature signature; // The EIP712 signature data.\n address revoker; // The revoking account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\nstruct MultiDelegatedProxyRevocationRequest {\n bytes32 schema; // The unique identifier of the schema.\n RevocationRequestData[] data; // The arguments of the revocation requests.\n Signature[] signatures; // The EIP712 signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n address revoker; // The revoking account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @title EIP712Proxy\n/// @notice This utility contract an be used to aggregate delegated attestations without requiring a specific order via\n/// nonces. The contract doesn't request nonces and implements replay protection by storing ***immalleable***\n/// signatures.\ncontract EIP712Proxy is Semver, EIP712 {\n error UsedSignature();\n\n // The hash of the data type used to relay calls to the attest function. It's the value of\n // keccak256(\"Attest(address attester,bytes32 schema,address recipient,uint64 expirationTime,bool revocable,bytes32 refUID,bytes data,uint256 value,uint64 deadline)\").\n bytes32 private constant ATTEST_PROXY_TYPEHASH = 0xea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af1;\n\n // The hash of the data type used to relay calls to the revoke function. It's the value of\n // keccak256(\"Revoke(address revoker,bytes32 schema,bytes32 uid,uint256 value,uint64 deadline)\").\n bytes32 private constant REVOKE_PROXY_TYPEHASH = 0x78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d;\n\n // The global EAS contract.\n IEAS private immutable _eas;\n\n // The user readable name of the signing domain.\n string private _name;\n\n // The global mapping between proxy attestations and their attesters, so that we can verify that only the original\n // attester is able to revert attestations by proxy.\n mapping(bytes32 uid => address attester) private _attesters;\n\n // Replay protection signatures.\n mapping(bytes signature => bool used) private _signatures;\n\n /// @dev Creates a new EIP1271Verifier instance.\n /// @param eas The address of the global EAS contract.\n /// @param name The user readable name of the signing domain.\n constructor(IEAS eas, string memory name) Semver(1, 4, 0) EIP712(name, \"1.4.0\") {\n if (address(eas) == address(0)) {\n revert InvalidEAS();\n }\n\n _eas = eas;\n _name = name;\n }\n\n /// @notice Returns the EAS.\n function getEAS() external view returns (IEAS) {\n return _eas;\n }\n\n /// @notice Returns the domain separator used in the encoding of the signatures for attest, and revoke.\n function getDomainSeparator() external view returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n /// Returns the EIP712 type hash for the attest function.\n function getAttestTypeHash() external pure returns (bytes32) {\n return ATTEST_PROXY_TYPEHASH;\n }\n\n /// Returns the EIP712 type hash for the revoke function.\n function getRevokeTypeHash() external pure returns (bytes32) {\n return REVOKE_PROXY_TYPEHASH;\n }\n\n /// Returns the EIP712 name.\n function getName() external view returns (string memory) {\n return _name;\n }\n\n /// Returns the attester for a given uid.\n function getAttester(bytes32 uid) external view returns (address) {\n return _attesters[uid];\n }\n\n /// @notice Attests to a specific schema via the provided EIP712 signature.\n /// @param delegatedRequest The arguments of the delegated attestation request.\n /// @return The UID of the new attestation.\n ///\n /// Example:\n /// attestByDelegation({\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: {\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n /// expirationTime: 1673891048,\n /// revocable: true,\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n /// data: '0x1234',\n /// value: 0\n /// },\n /// signature: {\n /// v: 28,\n /// r: '0x148c...b25b',\n /// s: '0x5a72...be22'\n /// },\n /// attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\n /// deadline: 1673891048\n /// })\n function attestByDelegation(\n DelegatedProxyAttestationRequest calldata delegatedRequest\n ) public payable virtual returns (bytes32) {\n _verifyAttest(delegatedRequest);\n\n bytes32 uid = _eas.attest{ value: msg.value }(\n AttestationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\n );\n\n _attesters[uid] = delegatedRequest.attester;\n\n return uid;\n }\n\n /// @notice Attests to multiple schemas using via provided EIP712 signatures.\n /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\n /// grouped by distinct schema ids to benefit from the best batching optimization.\n /// @return The UIDs of the new attestations.\n ///\n /// Example:\n /// multiAttestByDelegation([{\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: [{\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n /// expirationTime: 1673891048,\n /// revocable: true,\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n /// data: '0x1234',\n /// value: 0\n /// },\n /// {\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n /// expirationTime: 0,\n /// revocable: false,\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n /// data: '0x00',\n /// value: 0\n /// }],\n /// signatures: [{\n /// v: 28,\n /// r: '0x148c...b25b',\n /// s: '0x5a72...be22'\n /// },\n /// {\n /// v: 28,\n /// r: '0x487s...67bb',\n /// s: '0x12ad...2366'\n /// }],\n /// attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\n /// deadline: 1673891048\n /// }])\n function multiAttestByDelegation(\n MultiDelegatedProxyAttestationRequest[] calldata multiDelegatedRequests\n ) public payable virtual returns (bytes32[] memory) {\n uint256 length = multiDelegatedRequests.length;\n MultiAttestationRequest[] memory multiRequests = new MultiAttestationRequest[](length);\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\n AttestationRequestData[] calldata data = multiDelegatedRequest.data;\n\n // Ensure that no inputs are missing.\n uint256 dataLength = data.length;\n if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n revert InvalidLength();\n }\n\n // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\n _verifyAttest(\n DelegatedProxyAttestationRequest({\n schema: multiDelegatedRequest.schema,\n data: data[j],\n signature: multiDelegatedRequest.signatures[j],\n attester: multiDelegatedRequest.attester,\n deadline: multiDelegatedRequest.deadline\n })\n );\n }\n\n multiRequests[i] = MultiAttestationRequest({ schema: multiDelegatedRequest.schema, data: data });\n }\n\n bytes32[] memory uids = _eas.multiAttest{ value: msg.value }(multiRequests);\n\n // Store all attesters, according to the order of the attestation requests.\n uint256 uidCounter = 0;\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n MultiDelegatedProxyAttestationRequest calldata multiDelegatedRequest = multiDelegatedRequests[i];\n AttestationRequestData[] calldata data = multiDelegatedRequest.data;\n\n uint256 dataLength = data.length;\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\n _attesters[uids[uidCounter]] = multiDelegatedRequest.attester;\n\n unchecked {\n ++uidCounter;\n }\n }\n }\n\n return uids;\n }\n\n /// @notice Revokes an existing attestation to a specific schema via the provided EIP712 signature.\n /// @param delegatedRequest The arguments of the delegated revocation request.\n ///\n /// Example:\n /// revokeByDelegation({\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: {\n /// uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\n /// value: 0\n /// },\n /// signature: {\n /// v: 27,\n /// r: '0xb593...7142',\n /// s: '0x0f5b...2cce'\n /// },\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n /// deadline: 1673891048\n /// })\n function revokeByDelegation(DelegatedProxyRevocationRequest calldata delegatedRequest) public payable virtual {\n _verifyRevoke(delegatedRequest);\n\n return\n _eas.revoke{ value: msg.value }(\n RevocationRequest({ schema: delegatedRequest.schema, data: delegatedRequest.data })\n );\n }\n\n /// @notice Revokes existing attestations to multiple schemas via provided EIP712 signatures.\n /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\n /// should be grouped by distinct schema ids to benefit from the best batching optimization.\n ///\n /// Example:\n /// multiRevokeByDelegation([{\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: [{\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\n /// value: 1000\n /// },\n /// {\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\n /// value: 0\n /// }],\n /// signatures: [{\n /// v: 28,\n /// r: '0x148c...b25b',\n /// s: '0x5a72...be22'\n /// },\n /// {\n /// v: 28,\n /// r: '0x487s...67bb',\n /// s: '0x12ad...2366'\n /// }],\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n /// deadline: 1673891048\n /// }])\n function multiRevokeByDelegation(\n MultiDelegatedProxyRevocationRequest[] calldata multiDelegatedRequests\n ) public payable virtual {\n uint256 length = multiDelegatedRequests.length;\n MultiRevocationRequest[] memory multiRequests = new MultiRevocationRequest[](length);\n\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n MultiDelegatedProxyRevocationRequest memory multiDelegatedRequest = multiDelegatedRequests[i];\n RevocationRequestData[] memory data = multiDelegatedRequest.data;\n\n // Ensure that no inputs are missing.\n uint256 dataLength = data.length;\n if (dataLength == 0 || dataLength != multiDelegatedRequest.signatures.length) {\n revert InvalidLength();\n }\n\n // Verify EIP712 signatures. Please note that the signatures are assumed to be signed with increasing nonces.\n for (uint256 j = 0; j < dataLength; j = uncheckedInc(j)) {\n RevocationRequestData memory requestData = data[j];\n\n _verifyRevoke(\n DelegatedProxyRevocationRequest({\n schema: multiDelegatedRequest.schema,\n data: requestData,\n signature: multiDelegatedRequest.signatures[j],\n revoker: multiDelegatedRequest.revoker,\n deadline: multiDelegatedRequest.deadline\n })\n );\n }\n\n multiRequests[i] = MultiRevocationRequest({ schema: multiDelegatedRequest.schema, data: data });\n }\n\n _eas.multiRevoke{ value: msg.value }(multiRequests);\n }\n\n /// @dev Verifies delegated attestation request.\n /// @param request The arguments of the delegated attestation request.\n function _verifyAttest(DelegatedProxyAttestationRequest memory request) internal {\n if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n revert DeadlineExpired();\n }\n\n AttestationRequestData memory data = request.data;\n Signature memory signature = request.signature;\n\n _verifyUnusedSignature(signature);\n\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n ATTEST_PROXY_TYPEHASH,\n request.attester,\n request.schema,\n data.recipient,\n data.expirationTime,\n data.revocable,\n data.refUID,\n keccak256(data.data),\n data.value,\n request.deadline\n )\n )\n );\n\n if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.attester) {\n revert InvalidSignature();\n }\n }\n\n /// @dev Verifies delegated revocation request.\n /// @param request The arguments of the delegated revocation request.\n function _verifyRevoke(DelegatedProxyRevocationRequest memory request) internal {\n if (request.deadline != NO_EXPIRATION_TIME && request.deadline < _time()) {\n revert DeadlineExpired();\n }\n\n RevocationRequestData memory data = request.data;\n\n // Allow only original attesters to revoke their attestations.\n address attester = _attesters[data.uid];\n if (attester == address(0)) {\n revert NotFound();\n }\n\n if (attester != request.revoker) {\n revert AccessDenied();\n }\n\n Signature memory signature = request.signature;\n\n _verifyUnusedSignature(signature);\n\n bytes32 digest = _hashTypedDataV4(\n keccak256(\n abi.encode(\n REVOKE_PROXY_TYPEHASH,\n request.revoker,\n request.schema,\n data.uid,\n data.value,\n request.deadline\n )\n )\n );\n\n if (ECDSA.recover(digest, signature.v, signature.r, signature.s) != request.revoker) {\n revert InvalidSignature();\n }\n }\n\n /// @dev Ensures that the provided EIP712 signature wasn't already used.\n /// @param signature The EIP712 signature data.\n function _verifyUnusedSignature(Signature memory signature) internal {\n bytes memory packedSignature = abi.encodePacked(signature.v, signature.r, signature.s);\n\n if (_signatures[packedSignature]) {\n revert UsedSignature();\n }\n\n _signatures[packedSignature] = true;\n }\n\n /// @dev Returns the current's block timestamp. This method is overridden during tests and used to simulate the\n /// current block time.\n function _time() internal view virtual returns (uint64) {\n return uint64(block.timestamp);\n }\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { ISchemaRegistry } from \"./ISchemaRegistry.sol\";\nimport { ISemver } from \"./ISemver.sol\";\nimport { Attestation, Signature } from \"./Common.sol\";\n\n/// @notice A struct representing the arguments of the attestation request.\nstruct AttestationRequestData {\n address recipient; // The recipient of the attestation.\n uint64 expirationTime; // The time when the attestation expires (Unix timestamp).\n bool revocable; // Whether the attestation is revocable.\n bytes32 refUID; // The UID of the related attestation.\n bytes data; // Custom attestation data.\n uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\n}\n\n/// @notice A struct representing the full arguments of the attestation request.\nstruct AttestationRequest {\n bytes32 schema; // The unique identifier of the schema.\n AttestationRequestData data; // The arguments of the attestation request.\n}\n\n/// @notice A struct representing the full arguments of the full delegated attestation request.\nstruct DelegatedAttestationRequest {\n bytes32 schema; // The unique identifier of the schema.\n AttestationRequestData data; // The arguments of the attestation request.\n Signature signature; // The ECDSA signature data.\n address attester; // The attesting account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the multi attestation request.\nstruct MultiAttestationRequest {\n bytes32 schema; // The unique identifier of the schema.\n AttestationRequestData[] data; // The arguments of the attestation request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi attestation request.\nstruct MultiDelegatedAttestationRequest {\n bytes32 schema; // The unique identifier of the schema.\n AttestationRequestData[] data; // The arguments of the attestation requests.\n Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n address attester; // The attesting account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the arguments of the revocation request.\nstruct RevocationRequestData {\n bytes32 uid; // The UID of the attestation to revoke.\n uint256 value; // An explicit ETH amount to send to the resolver. This is important to prevent accidental user errors.\n}\n\n/// @notice A struct representing the full arguments of the revocation request.\nstruct RevocationRequest {\n bytes32 schema; // The unique identifier of the schema.\n RevocationRequestData data; // The arguments of the revocation request.\n}\n\n/// @notice A struct representing the arguments of the full delegated revocation request.\nstruct DelegatedRevocationRequest {\n bytes32 schema; // The unique identifier of the schema.\n RevocationRequestData data; // The arguments of the revocation request.\n Signature signature; // The ECDSA signature data.\n address revoker; // The revoking account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @notice A struct representing the full arguments of the multi revocation request.\nstruct MultiRevocationRequest {\n bytes32 schema; // The unique identifier of the schema.\n RevocationRequestData[] data; // The arguments of the revocation request.\n}\n\n/// @notice A struct representing the full arguments of the delegated multi revocation request.\nstruct MultiDelegatedRevocationRequest {\n bytes32 schema; // The unique identifier of the schema.\n RevocationRequestData[] data; // The arguments of the revocation requests.\n Signature[] signatures; // The ECDSA signatures data. Please note that the signatures are assumed to be signed with increasing nonces.\n address revoker; // The revoking account.\n uint64 deadline; // The deadline of the signature/request.\n}\n\n/// @title IEAS\n/// @notice EAS - Ethereum Attestation Service interface.\ninterface IEAS is ISemver {\n /// @notice Emitted when an attestation has been made.\n /// @param recipient The recipient of the attestation.\n /// @param attester The attesting account.\n /// @param uid The UID of the new attestation.\n /// @param schemaUID The UID of the schema.\n event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\n\n /// @notice Emitted when an attestation has been revoked.\n /// @param recipient The recipient of the attestation.\n /// @param attester The attesting account.\n /// @param schemaUID The UID of the schema.\n /// @param uid The UID the revoked attestation.\n event Revoked(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID);\n\n /// @notice Emitted when a data has been timestamped.\n /// @param data The data.\n /// @param timestamp The timestamp.\n event Timestamped(bytes32 indexed data, uint64 indexed timestamp);\n\n /// @notice Emitted when a data has been revoked.\n /// @param revoker The address of the revoker.\n /// @param data The data.\n /// @param timestamp The timestamp.\n event RevokedOffchain(address indexed revoker, bytes32 indexed data, uint64 indexed timestamp);\n\n /// @notice Returns the address of the global schema registry.\n /// @return The address of the global schema registry.\n function getSchemaRegistry() external view returns (ISchemaRegistry);\n\n /// @notice Attests to a specific schema.\n /// @param request The arguments of the attestation request.\n /// @return The UID of the new attestation.\n ///\n /// Example:\n /// attest({\n /// schema: \"0facc36681cbe2456019c1b0d1e7bedd6d1d40f6f324bf3dd3a4cef2999200a0\",\n /// data: {\n /// recipient: \"0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf\",\n /// expirationTime: 0,\n /// revocable: true,\n /// refUID: \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n /// data: \"0xF00D\",\n /// value: 0\n /// }\n /// })\n function attest(AttestationRequest calldata request) external payable returns (bytes32);\n\n /// @notice Attests to a specific schema via the provided ECDSA signature.\n /// @param delegatedRequest The arguments of the delegated attestation request.\n /// @return The UID of the new attestation.\n ///\n /// Example:\n /// attestByDelegation({\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: {\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n /// expirationTime: 1673891048,\n /// revocable: true,\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n /// data: '0x1234',\n /// value: 0\n /// },\n /// signature: {\n /// v: 28,\n /// r: '0x148c...b25b',\n /// s: '0x5a72...be22'\n /// },\n /// attester: '0xc5E8740aD971409492b1A63Db8d83025e0Fc427e',\n /// deadline: 1673891048\n /// })\n function attestByDelegation(\n DelegatedAttestationRequest calldata delegatedRequest\n ) external payable returns (bytes32);\n\n /// @notice Attests to multiple schemas.\n /// @param multiRequests The arguments of the multi attestation requests. The requests should be grouped by distinct\n /// schema ids to benefit from the best batching optimization.\n /// @return The UIDs of the new attestations.\n ///\n /// Example:\n /// multiAttest([{\n /// schema: '0x33e9094830a5cba5554d1954310e4fbed2ef5f859ec1404619adea4207f391fd',\n /// data: [{\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n /// expirationTime: 1673891048,\n /// revocable: true,\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n /// data: '0x1234',\n /// value: 1000\n /// },\n /// {\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n /// expirationTime: 0,\n /// revocable: false,\n /// refUID: '0x480df4a039efc31b11bfdf491b383ca138b6bde160988222a2a3509c02cee174',\n /// data: '0x00',\n /// value: 0\n /// }],\n /// },\n /// {\n /// schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\n /// data: [{\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n /// expirationTime: 0,\n /// revocable: true,\n /// refUID: '0x75bf2ed8dca25a8190c50c52db136664de25b2449535839008ccfdab469b214f',\n /// data: '0x12345678',\n /// value: 0\n /// },\n /// }])\n function multiAttest(MultiAttestationRequest[] calldata multiRequests) external payable returns (bytes32[] memory);\n\n /// @notice Attests to multiple schemas using via provided ECDSA signatures.\n /// @param multiDelegatedRequests The arguments of the delegated multi attestation requests. The requests should be\n /// grouped by distinct schema ids to benefit from the best batching optimization.\n /// @return The UIDs of the new attestations.\n ///\n /// Example:\n /// multiAttestByDelegation([{\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: [{\n /// recipient: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n /// expirationTime: 1673891048,\n /// revocable: true,\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n /// data: '0x1234',\n /// value: 0\n /// },\n /// {\n /// recipient: '0xdEADBeAFdeAdbEafdeadbeafDeAdbEAFdeadbeaf',\n /// expirationTime: 0,\n /// revocable: false,\n /// refUID: '0x0000000000000000000000000000000000000000000000000000000000000000',\n /// data: '0x00',\n /// value: 0\n /// }],\n /// signatures: [{\n /// v: 28,\n /// r: '0x148c...b25b',\n /// s: '0x5a72...be22'\n /// },\n /// {\n /// v: 28,\n /// r: '0x487s...67bb',\n /// s: '0x12ad...2366'\n /// }],\n /// attester: '0x1D86495b2A7B524D747d2839b3C645Bed32e8CF4',\n /// deadline: 1673891048\n /// }])\n function multiAttestByDelegation(\n MultiDelegatedAttestationRequest[] calldata multiDelegatedRequests\n ) external payable returns (bytes32[] memory);\n\n /// @notice Revokes an existing attestation to a specific schema.\n /// @param request The arguments of the revocation request.\n ///\n /// Example:\n /// revoke({\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: {\n /// uid: '0x101032e487642ee04ee17049f99a70590c735b8614079fc9275f9dd57c00966d',\n /// value: 0\n /// }\n /// })\n function revoke(RevocationRequest calldata request) external payable;\n\n /// @notice Revokes an existing attestation to a specific schema via the provided ECDSA signature.\n /// @param delegatedRequest The arguments of the delegated revocation request.\n ///\n /// Example:\n /// revokeByDelegation({\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: {\n /// uid: '0xcbbc12102578c642a0f7b34fe7111e41afa25683b6cd7b5a14caf90fa14d24ba',\n /// value: 0\n /// },\n /// signature: {\n /// v: 27,\n /// r: '0xb593...7142',\n /// s: '0x0f5b...2cce'\n /// },\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n /// deadline: 1673891048\n /// })\n function revokeByDelegation(DelegatedRevocationRequest calldata delegatedRequest) external payable;\n\n /// @notice Revokes existing attestations to multiple schemas.\n /// @param multiRequests The arguments of the multi revocation requests. The requests should be grouped by distinct\n /// schema ids to benefit from the best batching optimization.\n ///\n /// Example:\n /// multiRevoke([{\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: [{\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\n /// value: 1000\n /// },\n /// {\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\n /// value: 0\n /// }],\n /// },\n /// {\n /// schema: '0x5ac273ce41e3c8bfa383efe7c03e54c5f0bff29c9f11ef6ffa930fc84ca32425',\n /// data: [{\n /// uid: '0x053d42abce1fd7c8fcddfae21845ad34dae287b2c326220b03ba241bc5a8f019',\n /// value: 0\n /// },\n /// }])\n function multiRevoke(MultiRevocationRequest[] calldata multiRequests) external payable;\n\n /// @notice Revokes existing attestations to multiple schemas via provided ECDSA signatures.\n /// @param multiDelegatedRequests The arguments of the delegated multi revocation attestation requests. The requests\n /// should be grouped by distinct schema ids to benefit from the best batching optimization.\n ///\n /// Example:\n /// multiRevokeByDelegation([{\n /// schema: '0x8e72f5bc0a8d4be6aa98360baa889040c50a0e51f32dbf0baa5199bd93472ebc',\n /// data: [{\n /// uid: '0x211296a1ca0d7f9f2cfebf0daaa575bea9b20e968d81aef4e743d699c6ac4b25',\n /// value: 1000\n /// },\n /// {\n /// uid: '0xe160ac1bd3606a287b4d53d5d1d6da5895f65b4b4bab6d93aaf5046e48167ade',\n /// value: 0\n /// }],\n /// signatures: [{\n /// v: 28,\n /// r: '0x148c...b25b',\n /// s: '0x5a72...be22'\n /// },\n /// {\n /// v: 28,\n /// r: '0x487s...67bb',\n /// s: '0x12ad...2366'\n /// }],\n /// revoker: '0x244934dd3e31bE2c81f84ECf0b3E6329F5381992',\n /// deadline: 1673891048\n /// }])\n function multiRevokeByDelegation(\n MultiDelegatedRevocationRequest[] calldata multiDelegatedRequests\n ) external payable;\n\n /// @notice Timestamps the specified bytes32 data.\n /// @param data The data to timestamp.\n /// @return The timestamp the data was timestamped with.\n function timestamp(bytes32 data) external returns (uint64);\n\n /// @notice Timestamps the specified multiple bytes32 data.\n /// @param data The data to timestamp.\n /// @return The timestamp the data was timestamped with.\n function multiTimestamp(bytes32[] calldata data) external returns (uint64);\n\n /// @notice Revokes the specified bytes32 data.\n /// @param data The data to timestamp.\n /// @return The timestamp the data was revoked with.\n function revokeOffchain(bytes32 data) external returns (uint64);\n\n /// @notice Revokes the specified multiple bytes32 data.\n /// @param data The data to timestamp.\n /// @return The timestamp the data was revoked with.\n function multiRevokeOffchain(bytes32[] calldata data) external returns (uint64);\n\n /// @notice Returns an existing attestation by UID.\n /// @param uid The UID of the attestation to retrieve.\n /// @return The attestation data members.\n function getAttestation(bytes32 uid) external view returns (Attestation memory);\n\n /// @notice Checks whether an attestation exists.\n /// @param uid The UID of the attestation to retrieve.\n /// @return Whether an attestation exists.\n function isAttestationValid(bytes32 uid) external view returns (bool);\n\n /// @notice Returns the timestamp that the specified data was timestamped with.\n /// @param data The data to query.\n /// @return The timestamp the data was timestamped with.\n function getTimestamp(bytes32 data) external view returns (uint64);\n\n /// @notice Returns the timestamp that the specified data was timestamped with.\n /// @param data The data to query.\n /// @return The timestamp the data was timestamped with.\n function getRevokeOffchain(address revoker, bytes32 data) external view returns (uint64);\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.27;\n\nimport { IEAS, Attestation } from \"./IEAS.sol\";\nimport { EMPTY_UID, uncheckedInc } from \"./Common.sol\";\nimport { Semver } from \"./Semver.sol\";\n\n/// @title Indexer\n/// @notice Indexing Service for the Ethereum Attestation Service\ncontract Indexer is Semver {\n error InvalidEAS();\n error InvalidAttestation();\n error InvalidOffset();\n\n /// @notice Emitted when an attestation has been indexed.\n /// @param uid The UID the attestation.\n event Indexed(bytes32 indexed uid);\n\n /// A mapping between an account and its received attestations.\n mapping(address account => mapping(bytes32 => bytes32[] uids) receivedAttestations) private _receivedAttestations;\n\n // A mapping between an account and its sent attestations.\n mapping(address account => mapping(bytes32 => bytes32[] uids) sentAttestations) private _sentAttestations;\n\n // A mapping between a schema, attester, and recipient.\n mapping(bytes32 schemaUID => mapping(address attester => mapping(address recipient => bytes32[] uids)))\n private _schemaAttesterRecipientAttestations;\n\n // A mapping between a schema and its attestations.\n mapping(bytes32 schemaUID => bytes32[] uids) private _schemaAttestations;\n\n // The global mapping of attestation indexing status.\n mapping(bytes32 attestationUID => bool status) private _indexedAttestations;\n\n // The address of the global EAS contract.\n IEAS private immutable _eas;\n\n /// @dev Creates a new Indexer instance.\n /// @param eas The address of the global EAS contract.\n constructor(IEAS eas) Semver(1, 3, 0) {\n if (address(eas) == address(0)) {\n revert InvalidEAS();\n }\n\n _eas = eas;\n }\n\n /// @notice Returns the EAS.\n function getEAS() external view returns (IEAS) {\n return _eas;\n }\n\n /// @notice Indexes an existing attestation.\n /// @param attestationUID The UID of the attestation to index.\n function indexAttestation(bytes32 attestationUID) external {\n _indexAttestation(attestationUID);\n }\n\n /// @notice Indexes multiple existing attestations.\n /// @param attestationUIDs The UIDs of the attestations to index.\n function indexAttestations(bytes32[] calldata attestationUIDs) external {\n uint256 length = attestationUIDs.length;\n for (uint256 i = 0; i < length; i = uncheckedInc(i)) {\n _indexAttestation(attestationUIDs[i]);\n }\n }\n\n /// @notice Returns whether an existing attestation has been already indexed.\n /// @param attestationUID The UID of the attestation to check.\n /// @return Whether an attestation has been already indexed.\n function isAttestationIndexed(bytes32 attestationUID) external view returns (bool) {\n return _indexedAttestations[attestationUID];\n }\n\n /// @notice Returns the UIDs of attestations to a specific schema which were attested to/received by a specific\n /// recipient.\n /// @param recipient The recipient of the attestation.\n /// @param schemaUID The UID of the schema.\n /// @param start The offset to start from.\n /// @param length The number of total members to retrieve.\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n /// @return An array of attestation UIDs.\n function getReceivedAttestationUIDs(\n address recipient,\n bytes32 schemaUID,\n uint256 start,\n uint256 length,\n bool reverseOrder\n ) external view returns (bytes32[] memory) {\n return _sliceUIDs(_receivedAttestations[recipient][schemaUID], start, length, reverseOrder);\n }\n\n /// @notice Returns the total number of attestations to a specific schema which were attested to/received by a\n /// specific recipient.\n /// @param recipient The recipient of the attestation.\n /// @param schemaUID The UID of the schema.\n /// @return The total number of attestations.\n function getReceivedAttestationUIDCount(address recipient, bytes32 schemaUID) external view returns (uint256) {\n return _receivedAttestations[recipient][schemaUID].length;\n }\n\n /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester.\n /// @param attester The attester of the attestation.\n /// @param schemaUID The UID of the schema.\n /// @param start The offset to start from.\n /// @param length The number of total members to retrieve.\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n /// @return An array of attestation UIDs.\n function getSentAttestationUIDs(\n address attester,\n bytes32 schemaUID,\n uint256 start,\n uint256 length,\n bool reverseOrder\n ) external view returns (bytes32[] memory) {\n return _sliceUIDs(_sentAttestations[attester][schemaUID], start, length, reverseOrder);\n }\n\n /// @notice Returns the total number of attestations to a specific schema which were attested by a specific\n /// attester.\n /// @param attester The attester of the attestation.\n /// @param schemaUID The UID of the schema.\n /// @return The total number of attestations.\n function getSentAttestationUIDCount(address attester, bytes32 schemaUID) external view returns (uint256) {\n return _sentAttestations[attester][schemaUID].length;\n }\n\n /// @notice Returns the UIDs of attestations to a specific schema which were attested by a specific attester to a\n /// specific recipient.\n /// @param schemaUID The UID of the schema.\n /// @param attester The attester of the attestation.\n /// @param recipient The recipient of the attestation.\n /// @param start The offset to start from.\n /// @param length The number of total members to retrieve.\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n /// @return An array of attestation UIDs.\n function getSchemaAttesterRecipientAttestationUIDs(\n bytes32 schemaUID,\n address attester,\n address recipient,\n uint256 start,\n uint256 length,\n bool reverseOrder\n ) external view returns (bytes32[] memory) {\n return\n _sliceUIDs(\n _schemaAttesterRecipientAttestations[schemaUID][attester][recipient],\n start,\n length,\n reverseOrder\n );\n }\n\n /// @notice Returns the total number of UIDs of attestations to a specific schema which were attested by a specific\n /// attester to a specific recipient.\n /// @param schemaUID The UID of the schema.\n /// @param attester The attester of the attestation.\n /// @param recipient The recipient of the attestation.\n /// @return An array of attestation UIDs.\n function getSchemaAttesterRecipientAttestationUIDCount(\n bytes32 schemaUID,\n address attester,\n address recipient\n ) external view returns (uint256) {\n return _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].length;\n }\n\n /// @notice Returns the UIDs of attestations to a specific schema.\n /// @param schemaUID The UID of the schema.\n /// @param start The offset to start from.\n /// @param length The number of total members to retrieve.\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n /// @return An array of attestation UIDs.\n function getSchemaAttestationUIDs(\n bytes32 schemaUID,\n uint256 start,\n uint256 length,\n bool reverseOrder\n ) external view returns (bytes32[] memory) {\n return _sliceUIDs(_schemaAttestations[schemaUID], start, length, reverseOrder);\n }\n\n /// @notice Returns the total number of attestations to a specific schema.\n /// @param schemaUID The UID of the schema.\n /// @return An array of attestation UIDs.\n function getSchemaAttestationUIDCount(bytes32 schemaUID) external view returns (uint256) {\n return _schemaAttestations[schemaUID].length;\n }\n\n /// @dev Indexes an existing attestation.\n /// @param attestationUID The UID of the attestation to index.\n function _indexAttestation(bytes32 attestationUID) private {\n // Skip already indexed attestations.\n if (_indexedAttestations[attestationUID]) {\n return;\n }\n\n // Check if the attestation exists.\n Attestation memory attestation = _eas.getAttestation(attestationUID);\n\n bytes32 uid = attestation.uid;\n if (uid == EMPTY_UID) {\n revert InvalidAttestation();\n }\n\n // Index the attestation.\n address attester = attestation.attester;\n address recipient = attestation.recipient;\n bytes32 schemaUID = attestation.schema;\n\n _indexedAttestations[attestationUID] = true;\n _schemaAttestations[schemaUID].push(attestationUID);\n _receivedAttestations[recipient][schemaUID].push(attestationUID);\n _sentAttestations[attester][schemaUID].push(attestationUID);\n _schemaAttesterRecipientAttestations[schemaUID][attester][recipient].push(attestationUID);\n\n emit Indexed({ uid: uid });\n }\n\n /// @dev Returns a slice in an array of attestation UIDs.\n /// @param uids The array of attestation UIDs.\n /// @param start The offset to start from.\n /// @param length The number of total members to retrieve.\n /// @param reverseOrder Whether the offset starts from the end and the data is returned in reverse.\n /// @return An array of attestation UIDs.\n function _sliceUIDs(\n bytes32[] memory uids,\n uint256 start,\n uint256 length,\n bool reverseOrder\n ) private pure returns (bytes32[] memory) {\n uint256 attestationsLength = uids.length;\n if (attestationsLength == 0) {\n return new bytes32[](0);\n }\n\n if (start >= attestationsLength) {\n revert InvalidOffset();\n }\n\n unchecked {\n uint256 len = length;\n if (attestationsLength < start + length) {\n len = attestationsLength - start;\n }\n\n bytes32[] memory res = new bytes32[](len);\n\n for (uint256 i = 0; i < len; ++i) {\n res[i] = uids[reverseOrder ? attestationsLength - (start + i + 1) : start + i];\n }\n\n return res;\n }\n }\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/ISchemaRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { ISemver } from \"./ISemver.sol\";\n\nimport { ISchemaResolver } from \"./resolver/ISchemaResolver.sol\";\n\n/// @notice A struct representing a record for a submitted schema.\nstruct SchemaRecord {\n bytes32 uid; // The unique identifier of the schema.\n ISchemaResolver resolver; // Optional schema resolver.\n bool revocable; // Whether the schema allows revocations explicitly.\n string schema; // Custom specification of the schema (e.g., an ABI).\n}\n\n/// @title ISchemaRegistry\n/// @notice The interface of global attestation schemas for the Ethereum Attestation Service protocol.\ninterface ISchemaRegistry is ISemver {\n /// @notice Emitted when a new schema has been registered\n /// @param uid The schema UID.\n /// @param registerer The address of the account used to register the schema.\n /// @param schema The schema data.\n event Registered(bytes32 indexed uid, address indexed registerer, SchemaRecord schema);\n\n /// @notice Submits and reserves a new schema\n /// @param schema The schema data schema.\n /// @param resolver An optional schema resolver.\n /// @param revocable Whether the schema allows revocations explicitly.\n /// @return The UID of the new schema.\n function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32);\n\n /// @notice Returns an existing schema by UID\n /// @param uid The UID of the schema to retrieve.\n /// @return The schema data members.\n function getSchema(bytes32 uid) external view returns (SchemaRecord memory);\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/ISemver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @title ISemver\n/// @notice A semver interface.\ninterface ISemver {\n /// @notice Returns the full semver contract version.\n /// @return Semver contract version as a string.\n function version() external view returns (string memory);\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/resolver/ISchemaResolver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport { Attestation } from \"./../Common.sol\";\nimport { ISemver } from \"./../ISemver.sol\";\n\n/// @title ISchemaResolver\n/// @notice The interface of an optional schema resolver.\ninterface ISchemaResolver is ISemver {\n /// @notice Checks if the resolver can be sent ETH.\n /// @return Whether the resolver supports ETH transfers.\n function isPayable() external pure returns (bool);\n\n /// @notice Processes an attestation and verifies whether it's valid.\n /// @param attestation The new attestation.\n /// @return Whether the attestation is valid.\n function attest(Attestation calldata attestation) external payable returns (bool);\n\n /// @notice Processes multiple attestations and verifies whether they are valid.\n /// @param attestations The new attestations.\n /// @param values Explicit ETH amounts which were sent with each attestation.\n /// @return Whether all the attestations are valid.\n function multiAttest(\n Attestation[] calldata attestations,\n uint256[] calldata values\n ) external payable returns (bool);\n\n /// @notice Processes an attestation revocation and verifies if it can be revoked.\n /// @param attestation The existing attestation to be revoked.\n /// @return Whether the attestation can be revoked.\n function revoke(Attestation calldata attestation) external payable returns (bool);\n\n /// @notice Processes revocation of multiple attestation and verifies they can be revoked.\n /// @param attestations The existing attestations to be revoked.\n /// @param values Explicit ETH amounts which were sent with each revocation.\n /// @return Whether the attestations can be revoked.\n function multiRevoke(\n Attestation[] calldata attestations,\n uint256[] calldata values\n ) external payable returns (bool);\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.27;\n\nimport { ISchemaResolver } from \"./resolver/ISchemaResolver.sol\";\n\nimport { EMPTY_UID } from \"./Common.sol\";\nimport { Semver } from \"./Semver.sol\";\nimport { ISchemaRegistry, SchemaRecord } from \"./ISchemaRegistry.sol\";\n\n/// @title SchemaRegistry\n/// @notice The global schema registry.\ncontract SchemaRegistry is ISchemaRegistry, Semver {\n error AlreadyExists();\n\n // The global mapping between schema records and their IDs.\n mapping(bytes32 uid => SchemaRecord schemaRecord) private _registry;\n\n /// @dev Creates a new SchemaRegistry instance.\n constructor() Semver(1, 3, 0) {}\n\n /// @inheritdoc ISchemaRegistry\n function register(string calldata schema, ISchemaResolver resolver, bool revocable) external returns (bytes32) {\n SchemaRecord memory schemaRecord = SchemaRecord({\n uid: EMPTY_UID,\n schema: schema,\n resolver: resolver,\n revocable: revocable\n });\n\n bytes32 uid = _getUID(schemaRecord);\n if (_registry[uid].uid != EMPTY_UID) {\n revert AlreadyExists();\n }\n\n schemaRecord.uid = uid;\n _registry[uid] = schemaRecord;\n\n emit Registered(uid, msg.sender, schemaRecord);\n\n return uid;\n }\n\n /// @inheritdoc ISchemaRegistry\n function getSchema(bytes32 uid) external view returns (SchemaRecord memory) {\n return _registry[uid];\n }\n\n /// @dev Calculates a UID for a given schema.\n /// @param schemaRecord The input schema.\n /// @return schema UID.\n function _getUID(SchemaRecord memory schemaRecord) private pure returns (bytes32) {\n return keccak256(abi.encodePacked(schemaRecord.schema, schemaRecord.resolver, schemaRecord.revocable));\n }\n}\n" + }, + "@ethereum-attestation-service/eas-contracts/contracts/Semver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.4;\n\nimport { Strings } from \"@openzeppelin/contracts/utils/Strings.sol\";\n\nimport { ISemver } from \"./ISemver.sol\";\n\n/// @title Semver\n/// @notice A simple contract for managing contract versions.\ncontract Semver is ISemver {\n // Contract's major version number.\n uint256 private immutable _major;\n\n // Contract's minor version number.\n uint256 private immutable _minor;\n\n // Contract's patch version number.\n uint256 private immutable _patch;\n\n /// @dev Create a new Semver instance.\n /// @param major Major version number.\n /// @param minor Minor version number.\n /// @param patch Patch version number.\n constructor(uint256 major, uint256 minor, uint256 patch) {\n _major = major;\n _minor = minor;\n _patch = patch;\n }\n\n /// @notice Returns the full semver contract version.\n /// @return Semver contract version as a string.\n function version() external view returns (string memory) {\n return\n string(\n abi.encodePacked(Strings.toString(_major), \".\", Strings.toString(_minor), \".\", Strings.toString(_patch))\n );\n }\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC1271 standard signature validation method for\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\n */\ninterface IERC1271 {\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param hash Hash of the data to be signed\n * @param signature Signature byte array associated with _data\n */\n function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\n}\n" + }, + "@openzeppelin/contracts/interfaces/IERC5267.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC5267 {\n /**\n * @dev MAY be emitted to signal that the domain could have changed.\n */\n event EIP712DomainChanged();\n\n /**\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n * signature.\n */\n function eip712Domain()\n external\n view\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n );\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/cryptography/EIP712.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.20;\n\nimport {MessageHashUtils} from \"./MessageHashUtils.sol\";\nimport {ShortStrings, ShortString} from \"../ShortStrings.sol\";\nimport {IERC5267} from \"../../interfaces/IERC5267.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n *\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\n */\nabstract contract EIP712 is IERC5267 {\n using ShortStrings for *;\n\n bytes32 private constant TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _cachedDomainSeparator;\n uint256 private immutable _cachedChainId;\n address private immutable _cachedThis;\n\n bytes32 private immutable _hashedName;\n bytes32 private immutable _hashedVersion;\n\n ShortString private immutable _name;\n ShortString private immutable _version;\n string private _nameFallback;\n string private _versionFallback;\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n _name = name.toShortStringWithFallback(_nameFallback);\n _version = version.toShortStringWithFallback(_versionFallback);\n _hashedName = keccak256(bytes(name));\n _hashedVersion = keccak256(bytes(version));\n\n _cachedChainId = block.chainid;\n _cachedDomainSeparator = _buildDomainSeparator();\n _cachedThis = address(this);\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\n return _cachedDomainSeparator;\n } else {\n return _buildDomainSeparator();\n }\n }\n\n function _buildDomainSeparator() private view returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n\n /**\n * @dev See {IERC-5267}.\n */\n function eip712Domain()\n public\n view\n virtual\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n )\n {\n return (\n hex\"0f\", // 01111\n _EIP712Name(),\n _EIP712Version(),\n block.chainid,\n address(this),\n bytes32(0),\n new uint256[](0)\n );\n }\n\n /**\n * @dev The name parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _name which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Name() internal view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n\n /**\n * @dev The version parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _version which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Version() internal view returns (string memory) {\n return _version.toStringWithFallback(_versionFallback);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)\n\npragma solidity ^0.8.20;\n\nimport {ECDSA} from \"./ECDSA.sol\";\nimport {IERC1271} from \"../../interfaces/IERC1271.sol\";\n\n/**\n * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA\n * signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like\n * Argent and Safe Wallet (previously Gnosis Safe).\n */\nlibrary SignatureChecker {\n /**\n * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the\n * signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.\n *\n * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\n * change through time. It could return true at block N and false at block N+1 (or the opposite).\n */\n function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {\n (address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);\n return\n (error == ECDSA.RecoverError.NoError && recovered == signer) ||\n isValidERC1271SignatureNow(signer, hash, signature);\n }\n\n /**\n * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated\n * against the signer smart contract using ERC1271.\n *\n * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus\n * change through time. It could return true at block N and false at block N+1 (or the opposite).\n */\n function isValidERC1271SignatureNow(\n address signer,\n bytes32 hash,\n bytes memory signature\n ) internal view returns (bool) {\n (bool success, bytes memory result) = signer.staticcall(\n abi.encodeCall(IERC1271.isValidSignature, (hash, signature))\n );\n return (success &&\n result.length >= 32 &&\n abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SignedMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/ShortStrings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\n\npragma solidity ^0.8.20;\n\nimport {StorageSlot} from \"./StorageSlot.sol\";\n\n// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |\n// | length | 0x BB |\ntype ShortString is bytes32;\n\n/**\n * @dev This library provides functions to convert short memory strings\n * into a `ShortString` type that can be used as an immutable variable.\n *\n * Strings of arbitrary length can be optimized using this library if\n * they are short enough (up to 31 bytes) by packing them with their\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\n * fallback mechanism can be used for every other case.\n *\n * Usage example:\n *\n * ```solidity\n * contract Named {\n * using ShortStrings for *;\n *\n * ShortString private immutable _name;\n * string private _nameFallback;\n *\n * constructor(string memory contractName) {\n * _name = contractName.toShortStringWithFallback(_nameFallback);\n * }\n *\n * function name() external view returns (string memory) {\n * return _name.toStringWithFallback(_nameFallback);\n * }\n * }\n * ```\n */\nlibrary ShortStrings {\n // Used as an identifier for strings longer than 31 bytes.\n bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\n\n error StringTooLong(string str);\n error InvalidShortString();\n\n /**\n * @dev Encode a string of at most 31 chars into a `ShortString`.\n *\n * This will trigger a `StringTooLong` error is the input string is too long.\n */\n function toShortString(string memory str) internal pure returns (ShortString) {\n bytes memory bstr = bytes(str);\n if (bstr.length > 31) {\n revert StringTooLong(str);\n }\n return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\n }\n\n /**\n * @dev Decode a `ShortString` back to a \"normal\" string.\n */\n function toString(ShortString sstr) internal pure returns (string memory) {\n uint256 len = byteLength(sstr);\n // using `new string(len)` would work locally but is not memory safe.\n string memory str = new string(32);\n /// @solidity memory-safe-assembly\n assembly {\n mstore(str, len)\n mstore(add(str, 0x20), sstr)\n }\n return str;\n }\n\n /**\n * @dev Return the length of a `ShortString`.\n */\n function byteLength(ShortString sstr) internal pure returns (uint256) {\n uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\n if (result > 31) {\n revert InvalidShortString();\n }\n return result;\n }\n\n /**\n * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\n */\n function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\n if (bytes(value).length < 32) {\n return toShortString(value);\n } else {\n StorageSlot.getStringSlot(store).value = value;\n return ShortString.wrap(FALLBACK_SENTINEL);\n }\n }\n\n /**\n * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\n */\n function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return toString(value);\n } else {\n return store;\n }\n }\n\n /**\n * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n * {setWithFallback}.\n *\n * WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\n */\n function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return byteLength(value);\n } else {\n return bytes(store).length;\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n" + }, + "contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/EAS.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@ethereum-attestation-service/eas-contracts/contracts/EAS.sol';\n" + }, + "contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.sol';\n" + }, + "contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@ethereum-attestation-service/eas-contracts/contracts/Indexer.sol';\n" + }, + "contracts/hardhat-dependency-compiler/@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@ethereum-attestation-service/eas-contracts/contracts/SchemaRegistry.sol';\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 1000000 + }, + "evmVersion": "paris", + "metadata": { + "bytecodeHash": "none", + "useLiteralContent": true + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts b/deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts new file mode 100644 index 00000000..219c03f5 --- /dev/null +++ b/deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/Indexer.ts @@ -0,0 +1,413 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../../../common"; + +export interface IndexerInterface extends Interface { + getFunction( + nameOrSignature: + | "getEAS" + | "getReceivedAttestationUIDCount" + | "getReceivedAttestationUIDs" + | "getSchemaAttestationUIDCount" + | "getSchemaAttestationUIDs" + | "getSchemaAttesterRecipientAttestationUIDCount" + | "getSchemaAttesterRecipientAttestationUIDs" + | "getSentAttestationUIDCount" + | "getSentAttestationUIDs" + | "indexAttestation" + | "indexAttestations" + | "isAttestationIndexed" + | "version" + ): FunctionFragment; + + getEvent(nameOrSignatureOrTopic: "Indexed"): EventFragment; + + encodeFunctionData(functionFragment: "getEAS", values?: undefined): string; + encodeFunctionData( + functionFragment: "getReceivedAttestationUIDCount", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getReceivedAttestationUIDs", + values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttestationUIDCount", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttestationUIDs", + values: [BytesLike, BigNumberish, BigNumberish, boolean] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttesterRecipientAttestationUIDCount", + values: [BytesLike, AddressLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttesterRecipientAttestationUIDs", + values: [ + BytesLike, + AddressLike, + AddressLike, + BigNumberish, + BigNumberish, + boolean + ] + ): string; + encodeFunctionData( + functionFragment: "getSentAttestationUIDCount", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getSentAttestationUIDs", + values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean] + ): string; + encodeFunctionData( + functionFragment: "indexAttestation", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "indexAttestations", + values: [BytesLike[]] + ): string; + encodeFunctionData( + functionFragment: "isAttestationIndexed", + values: [BytesLike] + ): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + + decodeFunctionResult(functionFragment: "getEAS", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getReceivedAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getReceivedAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttesterRecipientAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttesterRecipientAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSentAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSentAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "indexAttestation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "indexAttestations", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isAttestationIndexed", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; +} + +export namespace IndexedEvent { + export type InputTuple = [uid: BytesLike]; + export type OutputTuple = [uid: string]; + export interface OutputObject { + uid: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface Indexer extends BaseContract { + connect(runner?: ContractRunner | null): Indexer; + waitForDeployment(): Promise; + + interface: IndexerInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + getEAS: TypedContractMethod<[], [string], "view">; + + getReceivedAttestationUIDCount: TypedContractMethod< + [recipient: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + + getReceivedAttestationUIDs: TypedContractMethod< + [ + recipient: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + getSchemaAttestationUIDCount: TypedContractMethod< + [schemaUID: BytesLike], + [bigint], + "view" + >; + + getSchemaAttestationUIDs: TypedContractMethod< + [ + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod< + [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike], + [bigint], + "view" + >; + + getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod< + [ + schemaUID: BytesLike, + attester: AddressLike, + recipient: AddressLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + getSentAttestationUIDCount: TypedContractMethod< + [attester: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + + getSentAttestationUIDs: TypedContractMethod< + [ + attester: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + indexAttestation: TypedContractMethod< + [attestationUID: BytesLike], + [void], + "nonpayable" + >; + + indexAttestations: TypedContractMethod< + [attestationUIDs: BytesLike[]], + [void], + "nonpayable" + >; + + isAttestationIndexed: TypedContractMethod< + [attestationUID: BytesLike], + [boolean], + "view" + >; + + version: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "getEAS" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getReceivedAttestationUIDCount" + ): TypedContractMethod< + [recipient: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "getReceivedAttestationUIDs" + ): TypedContractMethod< + [ + recipient: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "getSchemaAttestationUIDCount" + ): TypedContractMethod<[schemaUID: BytesLike], [bigint], "view">; + getFunction( + nameOrSignature: "getSchemaAttestationUIDs" + ): TypedContractMethod< + [ + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "getSchemaAttesterRecipientAttestationUIDCount" + ): TypedContractMethod< + [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "getSchemaAttesterRecipientAttestationUIDs" + ): TypedContractMethod< + [ + schemaUID: BytesLike, + attester: AddressLike, + recipient: AddressLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "getSentAttestationUIDCount" + ): TypedContractMethod< + [attester: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "getSentAttestationUIDs" + ): TypedContractMethod< + [ + attester: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "indexAttestation" + ): TypedContractMethod<[attestationUID: BytesLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "indexAttestations" + ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], "nonpayable">; + getFunction( + nameOrSignature: "isAttestationIndexed" + ): TypedContractMethod<[attestationUID: BytesLike], [boolean], "view">; + getFunction( + nameOrSignature: "version" + ): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "Indexed" + ): TypedContractEvent< + IndexedEvent.InputTuple, + IndexedEvent.OutputTuple, + IndexedEvent.OutputObject + >; + + filters: { + "Indexed(bytes32)": TypedContractEvent< + IndexedEvent.InputTuple, + IndexedEvent.OutputTuple, + IndexedEvent.OutputObject + >; + Indexed: TypedContractEvent< + IndexedEvent.InputTuple, + IndexedEvent.OutputTuple, + IndexedEvent.OutputObject + >; + }; +} diff --git a/deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts b/deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts new file mode 100644 index 00000000..69d0ba16 --- /dev/null +++ b/deployments/ink-sepolia/types/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy.ts @@ -0,0 +1,455 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../../../../../common"; + +export type AttestationRequestDataStruct = { + recipient: AddressLike; + expirationTime: BigNumberish; + revocable: boolean; + refUID: BytesLike; + data: BytesLike; + value: BigNumberish; +}; + +export type AttestationRequestDataStructOutput = [ + recipient: string, + expirationTime: bigint, + revocable: boolean, + refUID: string, + data: string, + value: bigint +] & { + recipient: string; + expirationTime: bigint; + revocable: boolean; + refUID: string; + data: string; + value: bigint; +}; + +export type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike }; + +export type SignatureStructOutput = [v: bigint, r: string, s: string] & { + v: bigint; + r: string; + s: string; +}; + +export type DelegatedProxyAttestationRequestStruct = { + schema: BytesLike; + data: AttestationRequestDataStruct; + signature: SignatureStruct; + attester: AddressLike; + deadline: BigNumberish; +}; + +export type DelegatedProxyAttestationRequestStructOutput = [ + schema: string, + data: AttestationRequestDataStructOutput, + signature: SignatureStructOutput, + attester: string, + deadline: bigint +] & { + schema: string; + data: AttestationRequestDataStructOutput; + signature: SignatureStructOutput; + attester: string; + deadline: bigint; +}; + +export type MultiDelegatedProxyAttestationRequestStruct = { + schema: BytesLike; + data: AttestationRequestDataStruct[]; + signatures: SignatureStruct[]; + attester: AddressLike; + deadline: BigNumberish; +}; + +export type MultiDelegatedProxyAttestationRequestStructOutput = [ + schema: string, + data: AttestationRequestDataStructOutput[], + signatures: SignatureStructOutput[], + attester: string, + deadline: bigint +] & { + schema: string; + data: AttestationRequestDataStructOutput[]; + signatures: SignatureStructOutput[]; + attester: string; + deadline: bigint; +}; + +export type RevocationRequestDataStruct = { + uid: BytesLike; + value: BigNumberish; +}; + +export type RevocationRequestDataStructOutput = [uid: string, value: bigint] & { + uid: string; + value: bigint; +}; + +export type MultiDelegatedProxyRevocationRequestStruct = { + schema: BytesLike; + data: RevocationRequestDataStruct[]; + signatures: SignatureStruct[]; + revoker: AddressLike; + deadline: BigNumberish; +}; + +export type MultiDelegatedProxyRevocationRequestStructOutput = [ + schema: string, + data: RevocationRequestDataStructOutput[], + signatures: SignatureStructOutput[], + revoker: string, + deadline: bigint +] & { + schema: string; + data: RevocationRequestDataStructOutput[]; + signatures: SignatureStructOutput[]; + revoker: string; + deadline: bigint; +}; + +export type DelegatedProxyRevocationRequestStruct = { + schema: BytesLike; + data: RevocationRequestDataStruct; + signature: SignatureStruct; + revoker: AddressLike; + deadline: BigNumberish; +}; + +export type DelegatedProxyRevocationRequestStructOutput = [ + schema: string, + data: RevocationRequestDataStructOutput, + signature: SignatureStructOutput, + revoker: string, + deadline: bigint +] & { + schema: string; + data: RevocationRequestDataStructOutput; + signature: SignatureStructOutput; + revoker: string; + deadline: bigint; +}; + +export interface EIP712ProxyInterface extends Interface { + getFunction( + nameOrSignature: + | "attestByDelegation" + | "eip712Domain" + | "getAttestTypeHash" + | "getAttester" + | "getDomainSeparator" + | "getEAS" + | "getName" + | "getRevokeTypeHash" + | "multiAttestByDelegation" + | "multiRevokeByDelegation" + | "revokeByDelegation" + | "version" + ): FunctionFragment; + + getEvent(nameOrSignatureOrTopic: "EIP712DomainChanged"): EventFragment; + + encodeFunctionData( + functionFragment: "attestByDelegation", + values: [DelegatedProxyAttestationRequestStruct] + ): string; + encodeFunctionData( + functionFragment: "eip712Domain", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getAttestTypeHash", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getAttester", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getDomainSeparator", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "getEAS", values?: undefined): string; + encodeFunctionData(functionFragment: "getName", values?: undefined): string; + encodeFunctionData( + functionFragment: "getRevokeTypeHash", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "multiAttestByDelegation", + values: [MultiDelegatedProxyAttestationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "multiRevokeByDelegation", + values: [MultiDelegatedProxyRevocationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "revokeByDelegation", + values: [DelegatedProxyRevocationRequestStruct] + ): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + + decodeFunctionResult( + functionFragment: "attestByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "eip712Domain", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAttestTypeHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAttester", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getDomainSeparator", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getEAS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getName", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getRevokeTypeHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiAttestByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiRevokeByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "revokeByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; +} + +export namespace EIP712DomainChangedEvent { + export type InputTuple = []; + export type OutputTuple = []; + export interface OutputObject {} + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface EIP712Proxy extends BaseContract { + connect(runner?: ContractRunner | null): EIP712Proxy; + waitForDeployment(): Promise; + + interface: EIP712ProxyInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + attestByDelegation: TypedContractMethod< + [delegatedRequest: DelegatedProxyAttestationRequestStruct], + [string], + "payable" + >; + + eip712Domain: TypedContractMethod< + [], + [ + [string, string, string, bigint, string, string, bigint[]] & { + fields: string; + name: string; + version: string; + chainId: bigint; + verifyingContract: string; + salt: string; + extensions: bigint[]; + } + ], + "view" + >; + + getAttestTypeHash: TypedContractMethod<[], [string], "view">; + + getAttester: TypedContractMethod<[uid: BytesLike], [string], "view">; + + getDomainSeparator: TypedContractMethod<[], [string], "view">; + + getEAS: TypedContractMethod<[], [string], "view">; + + getName: TypedContractMethod<[], [string], "view">; + + getRevokeTypeHash: TypedContractMethod<[], [string], "view">; + + multiAttestByDelegation: TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]], + [string[]], + "payable" + >; + + multiRevokeByDelegation: TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]], + [void], + "payable" + >; + + revokeByDelegation: TypedContractMethod< + [delegatedRequest: DelegatedProxyRevocationRequestStruct], + [void], + "payable" + >; + + version: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "attestByDelegation" + ): TypedContractMethod< + [delegatedRequest: DelegatedProxyAttestationRequestStruct], + [string], + "payable" + >; + getFunction( + nameOrSignature: "eip712Domain" + ): TypedContractMethod< + [], + [ + [string, string, string, bigint, string, string, bigint[]] & { + fields: string; + name: string; + version: string; + chainId: bigint; + verifyingContract: string; + salt: string; + extensions: bigint[]; + } + ], + "view" + >; + getFunction( + nameOrSignature: "getAttestTypeHash" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getAttester" + ): TypedContractMethod<[uid: BytesLike], [string], "view">; + getFunction( + nameOrSignature: "getDomainSeparator" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getEAS" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getName" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getRevokeTypeHash" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "multiAttestByDelegation" + ): TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]], + [string[]], + "payable" + >; + getFunction( + nameOrSignature: "multiRevokeByDelegation" + ): TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]], + [void], + "payable" + >; + getFunction( + nameOrSignature: "revokeByDelegation" + ): TypedContractMethod< + [delegatedRequest: DelegatedProxyRevocationRequestStruct], + [void], + "payable" + >; + getFunction( + nameOrSignature: "version" + ): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "EIP712DomainChanged" + ): TypedContractEvent< + EIP712DomainChangedEvent.InputTuple, + EIP712DomainChangedEvent.OutputTuple, + EIP712DomainChangedEvent.OutputObject + >; + + filters: { + "EIP712DomainChanged()": TypedContractEvent< + EIP712DomainChangedEvent.InputTuple, + EIP712DomainChangedEvent.OutputTuple, + EIP712DomainChangedEvent.OutputObject + >; + EIP712DomainChanged: TypedContractEvent< + EIP712DomainChangedEvent.InputTuple, + EIP712DomainChangedEvent.OutputTuple, + EIP712DomainChangedEvent.OutputObject + >; + }; +} diff --git a/deployments/ink-sepolia/types/contracts/EAS.ts b/deployments/ink-sepolia/types/contracts/EAS.ts new file mode 100644 index 00000000..eae3ce35 --- /dev/null +++ b/deployments/ink-sepolia/types/contracts/EAS.ts @@ -0,0 +1,1082 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type AttestationRequestDataStruct = { + recipient: PromiseOrValue; + expirationTime: PromiseOrValue; + revocable: PromiseOrValue; + refUID: PromiseOrValue; + data: PromiseOrValue; + value: PromiseOrValue; +}; + +export type AttestationRequestDataStructOutput = [ + string, + BigNumber, + boolean, + string, + string, + BigNumber +] & { + recipient: string; + expirationTime: BigNumber; + revocable: boolean; + refUID: string; + data: string; + value: BigNumber; +}; + +export type AttestationRequestStruct = { + schema: PromiseOrValue; + data: AttestationRequestDataStruct; +}; + +export type AttestationRequestStructOutput = [ + string, + AttestationRequestDataStructOutput +] & { schema: string; data: AttestationRequestDataStructOutput }; + +export type EIP712SignatureStruct = { + v: PromiseOrValue; + r: PromiseOrValue; + s: PromiseOrValue; +}; + +export type EIP712SignatureStructOutput = [number, string, string] & { + v: number; + r: string; + s: string; +}; + +export type DelegatedAttestationRequestStruct = { + schema: PromiseOrValue; + data: AttestationRequestDataStruct; + signature: EIP712SignatureStruct; + attester: PromiseOrValue; +}; + +export type DelegatedAttestationRequestStructOutput = [ + string, + AttestationRequestDataStructOutput, + EIP712SignatureStructOutput, + string +] & { + schema: string; + data: AttestationRequestDataStructOutput; + signature: EIP712SignatureStructOutput; + attester: string; +}; + +export type AttestationStruct = { + uid: PromiseOrValue; + schema: PromiseOrValue; + time: PromiseOrValue; + expirationTime: PromiseOrValue; + revocationTime: PromiseOrValue; + refUID: PromiseOrValue; + recipient: PromiseOrValue; + attester: PromiseOrValue; + revocable: PromiseOrValue; + data: PromiseOrValue; +}; + +export type AttestationStructOutput = [ + string, + string, + BigNumber, + BigNumber, + BigNumber, + string, + string, + string, + boolean, + string +] & { + uid: string; + schema: string; + time: BigNumber; + expirationTime: BigNumber; + revocationTime: BigNumber; + refUID: string; + recipient: string; + attester: string; + revocable: boolean; + data: string; +}; + +export type MultiAttestationRequestStruct = { + schema: PromiseOrValue; + data: AttestationRequestDataStruct[]; +}; + +export type MultiAttestationRequestStructOutput = [ + string, + AttestationRequestDataStructOutput[] +] & { schema: string; data: AttestationRequestDataStructOutput[] }; + +export type MultiDelegatedAttestationRequestStruct = { + schema: PromiseOrValue; + data: AttestationRequestDataStruct[]; + signatures: EIP712SignatureStruct[]; + attester: PromiseOrValue; +}; + +export type MultiDelegatedAttestationRequestStructOutput = [ + string, + AttestationRequestDataStructOutput[], + EIP712SignatureStructOutput[], + string +] & { + schema: string; + data: AttestationRequestDataStructOutput[]; + signatures: EIP712SignatureStructOutput[]; + attester: string; +}; + +export type RevocationRequestDataStruct = { + uid: PromiseOrValue; + value: PromiseOrValue; +}; + +export type RevocationRequestDataStructOutput = [string, BigNumber] & { + uid: string; + value: BigNumber; +}; + +export type MultiRevocationRequestStruct = { + schema: PromiseOrValue; + data: RevocationRequestDataStruct[]; +}; + +export type MultiRevocationRequestStructOutput = [ + string, + RevocationRequestDataStructOutput[] +] & { schema: string; data: RevocationRequestDataStructOutput[] }; + +export type MultiDelegatedRevocationRequestStruct = { + schema: PromiseOrValue; + data: RevocationRequestDataStruct[]; + signatures: EIP712SignatureStruct[]; + revoker: PromiseOrValue; +}; + +export type MultiDelegatedRevocationRequestStructOutput = [ + string, + RevocationRequestDataStructOutput[], + EIP712SignatureStructOutput[], + string +] & { + schema: string; + data: RevocationRequestDataStructOutput[]; + signatures: EIP712SignatureStructOutput[]; + revoker: string; +}; + +export type RevocationRequestStruct = { + schema: PromiseOrValue; + data: RevocationRequestDataStruct; +}; + +export type RevocationRequestStructOutput = [ + string, + RevocationRequestDataStructOutput +] & { schema: string; data: RevocationRequestDataStructOutput }; + +export type DelegatedRevocationRequestStruct = { + schema: PromiseOrValue; + data: RevocationRequestDataStruct; + signature: EIP712SignatureStruct; + revoker: PromiseOrValue; +}; + +export type DelegatedRevocationRequestStructOutput = [ + string, + RevocationRequestDataStructOutput, + EIP712SignatureStructOutput, + string +] & { + schema: string; + data: RevocationRequestDataStructOutput; + signature: EIP712SignatureStructOutput; + revoker: string; +}; + +export interface EASInterface extends utils.Interface { + functions: { + "VERSION()": FunctionFragment; + "attest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)))": FunctionFragment; + "attestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256),(uint8,bytes32,bytes32),address))": FunctionFragment; + "getAttestTypeHash()": FunctionFragment; + "getAttestation(bytes32)": FunctionFragment; + "getDomainSeparator()": FunctionFragment; + "getName()": FunctionFragment; + "getNonce(address)": FunctionFragment; + "getRevokeOffchain(address,bytes32)": FunctionFragment; + "getRevokeTypeHash()": FunctionFragment; + "getSchemaRegistry()": FunctionFragment; + "getTimestamp(bytes32)": FunctionFragment; + "isAttestationValid(bytes32)": FunctionFragment; + "multiAttest((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[])[])": FunctionFragment; + "multiAttestByDelegation((bytes32,(address,uint64,bool,bytes32,bytes,uint256)[],(uint8,bytes32,bytes32)[],address)[])": FunctionFragment; + "multiRevoke((bytes32,(bytes32,uint256)[])[])": FunctionFragment; + "multiRevokeByDelegation((bytes32,(bytes32,uint256)[],(uint8,bytes32,bytes32)[],address)[])": FunctionFragment; + "multiRevokeOffchain(bytes32[])": FunctionFragment; + "multiTimestamp(bytes32[])": FunctionFragment; + "revoke((bytes32,(bytes32,uint256)))": FunctionFragment; + "revokeByDelegation((bytes32,(bytes32,uint256),(uint8,bytes32,bytes32),address))": FunctionFragment; + "revokeOffchain(bytes32)": FunctionFragment; + "timestamp(bytes32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "VERSION" + | "attest" + | "attestByDelegation" + | "getAttestTypeHash" + | "getAttestation" + | "getDomainSeparator" + | "getName" + | "getNonce" + | "getRevokeOffchain" + | "getRevokeTypeHash" + | "getSchemaRegistry" + | "getTimestamp" + | "isAttestationValid" + | "multiAttest" + | "multiAttestByDelegation" + | "multiRevoke" + | "multiRevokeByDelegation" + | "multiRevokeOffchain" + | "multiTimestamp" + | "revoke" + | "revokeByDelegation" + | "revokeOffchain" + | "timestamp" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; + encodeFunctionData( + functionFragment: "attest", + values: [AttestationRequestStruct] + ): string; + encodeFunctionData( + functionFragment: "attestByDelegation", + values: [DelegatedAttestationRequestStruct] + ): string; + encodeFunctionData( + functionFragment: "getAttestTypeHash", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getAttestation", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getDomainSeparator", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "getName", values?: undefined): string; + encodeFunctionData( + functionFragment: "getNonce", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getRevokeOffchain", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getRevokeTypeHash", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getSchemaRegistry", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getTimestamp", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "isAttestationValid", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "multiAttest", + values: [MultiAttestationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "multiAttestByDelegation", + values: [MultiDelegatedAttestationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "multiRevoke", + values: [MultiRevocationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "multiRevokeByDelegation", + values: [MultiDelegatedRevocationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "multiRevokeOffchain", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "multiTimestamp", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "revoke", + values: [RevocationRequestStruct] + ): string; + encodeFunctionData( + functionFragment: "revokeByDelegation", + values: [DelegatedRevocationRequestStruct] + ): string; + encodeFunctionData( + functionFragment: "revokeOffchain", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "timestamp", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "attest", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "attestByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAttestTypeHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAttestation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getDomainSeparator", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getName", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getNonce", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getRevokeOffchain", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getRevokeTypeHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaRegistry", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getTimestamp", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isAttestationValid", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiAttest", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiAttestByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiRevoke", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiRevokeByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiRevokeOffchain", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiTimestamp", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "revoke", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "revokeByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "revokeOffchain", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "timestamp", data: BytesLike): Result; + + events: { + "Attested(address,address,bytes32,bytes32)": EventFragment; + "Revoked(address,address,bytes32,bytes32)": EventFragment; + "RevokedOffchain(address,bytes32,uint64)": EventFragment; + "Timestamped(bytes32,uint64)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Attested"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Revoked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RevokedOffchain"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Timestamped"): EventFragment; +} + +export interface AttestedEventObject { + recipient: string; + attester: string; + uid: string; + schema: string; +} +export type AttestedEvent = TypedEvent< + [string, string, string, string], + AttestedEventObject +>; + +export type AttestedEventFilter = TypedEventFilter; + +export interface RevokedEventObject { + recipient: string; + attester: string; + uid: string; + schema: string; +} +export type RevokedEvent = TypedEvent< + [string, string, string, string], + RevokedEventObject +>; + +export type RevokedEventFilter = TypedEventFilter; + +export interface RevokedOffchainEventObject { + revoker: string; + data: string; + timestamp: BigNumber; +} +export type RevokedOffchainEvent = TypedEvent< + [string, string, BigNumber], + RevokedOffchainEventObject +>; + +export type RevokedOffchainEventFilter = TypedEventFilter; + +export interface TimestampedEventObject { + data: string; + timestamp: BigNumber; +} +export type TimestampedEvent = TypedEvent< + [string, BigNumber], + TimestampedEventObject +>; + +export type TimestampedEventFilter = TypedEventFilter; + +export interface EAS extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: EASInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + VERSION(overrides?: CallOverrides): Promise<[string]>; + + attest( + request: AttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + attestByDelegation( + delegatedRequest: DelegatedAttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getAttestTypeHash(overrides?: CallOverrides): Promise<[string]>; + + getAttestation( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[AttestationStructOutput]>; + + getDomainSeparator(overrides?: CallOverrides): Promise<[string]>; + + getName(overrides?: CallOverrides): Promise<[string]>; + + getNonce( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + getRevokeOffchain( + revoker: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + getRevokeTypeHash(overrides?: CallOverrides): Promise<[string]>; + + getSchemaRegistry(overrides?: CallOverrides): Promise<[string]>; + + getTimestamp( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + isAttestationValid( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + multiAttest( + multiRequests: MultiAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiAttestByDelegation( + multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevoke( + multiRequests: MultiRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeByDelegation( + multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeOffchain( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + multiTimestamp( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + request: RevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeByDelegation( + delegatedRequest: DelegatedRevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeOffchain( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + timestamp( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + VERSION(overrides?: CallOverrides): Promise; + + attest( + request: AttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + attestByDelegation( + delegatedRequest: DelegatedAttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getAttestTypeHash(overrides?: CallOverrides): Promise; + + getAttestation( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDomainSeparator(overrides?: CallOverrides): Promise; + + getName(overrides?: CallOverrides): Promise; + + getNonce( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeOffchain( + revoker: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeTypeHash(overrides?: CallOverrides): Promise; + + getSchemaRegistry(overrides?: CallOverrides): Promise; + + getTimestamp( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isAttestationValid( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + multiAttest( + multiRequests: MultiAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiAttestByDelegation( + multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevoke( + multiRequests: MultiRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeByDelegation( + multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeOffchain( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + multiTimestamp( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + request: RevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeByDelegation( + delegatedRequest: DelegatedRevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeOffchain( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + timestamp( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + VERSION(overrides?: CallOverrides): Promise; + + attest( + request: AttestationRequestStruct, + overrides?: CallOverrides + ): Promise; + + attestByDelegation( + delegatedRequest: DelegatedAttestationRequestStruct, + overrides?: CallOverrides + ): Promise; + + getAttestTypeHash(overrides?: CallOverrides): Promise; + + getAttestation( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDomainSeparator(overrides?: CallOverrides): Promise; + + getName(overrides?: CallOverrides): Promise; + + getNonce( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeOffchain( + revoker: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeTypeHash(overrides?: CallOverrides): Promise; + + getSchemaRegistry(overrides?: CallOverrides): Promise; + + getTimestamp( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isAttestationValid( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + multiAttest( + multiRequests: MultiAttestationRequestStruct[], + overrides?: CallOverrides + ): Promise; + + multiAttestByDelegation( + multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[], + overrides?: CallOverrides + ): Promise; + + multiRevoke( + multiRequests: MultiRevocationRequestStruct[], + overrides?: CallOverrides + ): Promise; + + multiRevokeByDelegation( + multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[], + overrides?: CallOverrides + ): Promise; + + multiRevokeOffchain( + data: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + multiTimestamp( + data: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + revoke( + request: RevocationRequestStruct, + overrides?: CallOverrides + ): Promise; + + revokeByDelegation( + delegatedRequest: DelegatedRevocationRequestStruct, + overrides?: CallOverrides + ): Promise; + + revokeOffchain( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + timestamp( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Attested(address,address,bytes32,bytes32)"( + recipient?: PromiseOrValue | null, + attester?: PromiseOrValue | null, + uid?: null, + schema?: PromiseOrValue | null + ): AttestedEventFilter; + Attested( + recipient?: PromiseOrValue | null, + attester?: PromiseOrValue | null, + uid?: null, + schema?: PromiseOrValue | null + ): AttestedEventFilter; + + "Revoked(address,address,bytes32,bytes32)"( + recipient?: PromiseOrValue | null, + attester?: PromiseOrValue | null, + uid?: null, + schema?: PromiseOrValue | null + ): RevokedEventFilter; + Revoked( + recipient?: PromiseOrValue | null, + attester?: PromiseOrValue | null, + uid?: null, + schema?: PromiseOrValue | null + ): RevokedEventFilter; + + "RevokedOffchain(address,bytes32,uint64)"( + revoker?: PromiseOrValue | null, + data?: PromiseOrValue | null, + timestamp?: PromiseOrValue | null + ): RevokedOffchainEventFilter; + RevokedOffchain( + revoker?: PromiseOrValue | null, + data?: PromiseOrValue | null, + timestamp?: PromiseOrValue | null + ): RevokedOffchainEventFilter; + + "Timestamped(bytes32,uint64)"( + data?: PromiseOrValue | null, + timestamp?: PromiseOrValue | null + ): TimestampedEventFilter; + Timestamped( + data?: PromiseOrValue | null, + timestamp?: PromiseOrValue | null + ): TimestampedEventFilter; + }; + + estimateGas: { + VERSION(overrides?: CallOverrides): Promise; + + attest( + request: AttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + attestByDelegation( + delegatedRequest: DelegatedAttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getAttestTypeHash(overrides?: CallOverrides): Promise; + + getAttestation( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDomainSeparator(overrides?: CallOverrides): Promise; + + getName(overrides?: CallOverrides): Promise; + + getNonce( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeOffchain( + revoker: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeTypeHash(overrides?: CallOverrides): Promise; + + getSchemaRegistry(overrides?: CallOverrides): Promise; + + getTimestamp( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isAttestationValid( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + multiAttest( + multiRequests: MultiAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiAttestByDelegation( + multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevoke( + multiRequests: MultiRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeByDelegation( + multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeOffchain( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + multiTimestamp( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + request: RevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeByDelegation( + delegatedRequest: DelegatedRevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeOffchain( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + timestamp( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + VERSION(overrides?: CallOverrides): Promise; + + attest( + request: AttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + attestByDelegation( + delegatedRequest: DelegatedAttestationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + getAttestTypeHash(overrides?: CallOverrides): Promise; + + getAttestation( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDomainSeparator( + overrides?: CallOverrides + ): Promise; + + getName(overrides?: CallOverrides): Promise; + + getNonce( + account: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeOffchain( + revoker: PromiseOrValue, + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRevokeTypeHash(overrides?: CallOverrides): Promise; + + getSchemaRegistry(overrides?: CallOverrides): Promise; + + getTimestamp( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + isAttestationValid( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + multiAttest( + multiRequests: MultiAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiAttestByDelegation( + multiDelegatedRequests: MultiDelegatedAttestationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevoke( + multiRequests: MultiRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeByDelegation( + multiDelegatedRequests: MultiDelegatedRevocationRequestStruct[], + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + multiRevokeOffchain( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + multiTimestamp( + data: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + request: RevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeByDelegation( + delegatedRequest: DelegatedRevocationRequestStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + revokeOffchain( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + timestamp( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/deployments/ink-sepolia/types/contracts/Indexer.ts b/deployments/ink-sepolia/types/contracts/Indexer.ts new file mode 100644 index 00000000..052e599e --- /dev/null +++ b/deployments/ink-sepolia/types/contracts/Indexer.ts @@ -0,0 +1,413 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../common"; + +export interface IndexerInterface extends Interface { + getFunction( + nameOrSignature: + | "getEAS" + | "getReceivedAttestationUIDCount" + | "getReceivedAttestationUIDs" + | "getSchemaAttestationUIDCount" + | "getSchemaAttestationUIDs" + | "getSchemaAttesterRecipientAttestationUIDCount" + | "getSchemaAttesterRecipientAttestationUIDs" + | "getSentAttestationUIDCount" + | "getSentAttestationUIDs" + | "indexAttestation" + | "indexAttestations" + | "isAttestationIndexed" + | "version" + ): FunctionFragment; + + getEvent(nameOrSignatureOrTopic: "Indexed"): EventFragment; + + encodeFunctionData(functionFragment: "getEAS", values?: undefined): string; + encodeFunctionData( + functionFragment: "getReceivedAttestationUIDCount", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getReceivedAttestationUIDs", + values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttestationUIDCount", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttestationUIDs", + values: [BytesLike, BigNumberish, BigNumberish, boolean] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttesterRecipientAttestationUIDCount", + values: [BytesLike, AddressLike, AddressLike] + ): string; + encodeFunctionData( + functionFragment: "getSchemaAttesterRecipientAttestationUIDs", + values: [ + BytesLike, + AddressLike, + AddressLike, + BigNumberish, + BigNumberish, + boolean + ] + ): string; + encodeFunctionData( + functionFragment: "getSentAttestationUIDCount", + values: [AddressLike, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getSentAttestationUIDs", + values: [AddressLike, BytesLike, BigNumberish, BigNumberish, boolean] + ): string; + encodeFunctionData( + functionFragment: "indexAttestation", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "indexAttestations", + values: [BytesLike[]] + ): string; + encodeFunctionData( + functionFragment: "isAttestationIndexed", + values: [BytesLike] + ): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + + decodeFunctionResult(functionFragment: "getEAS", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getReceivedAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getReceivedAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttesterRecipientAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSchemaAttesterRecipientAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSentAttestationUIDCount", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getSentAttestationUIDs", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "indexAttestation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "indexAttestations", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "isAttestationIndexed", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; +} + +export namespace IndexedEvent { + export type InputTuple = [uid: BytesLike]; + export type OutputTuple = [uid: string]; + export interface OutputObject { + uid: string; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface Indexer extends BaseContract { + connect(runner?: ContractRunner | null): Indexer; + waitForDeployment(): Promise; + + interface: IndexerInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + getEAS: TypedContractMethod<[], [string], "view">; + + getReceivedAttestationUIDCount: TypedContractMethod< + [recipient: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + + getReceivedAttestationUIDs: TypedContractMethod< + [ + recipient: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + getSchemaAttestationUIDCount: TypedContractMethod< + [schemaUID: BytesLike], + [bigint], + "view" + >; + + getSchemaAttestationUIDs: TypedContractMethod< + [ + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + getSchemaAttesterRecipientAttestationUIDCount: TypedContractMethod< + [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike], + [bigint], + "view" + >; + + getSchemaAttesterRecipientAttestationUIDs: TypedContractMethod< + [ + schemaUID: BytesLike, + attester: AddressLike, + recipient: AddressLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + getSentAttestationUIDCount: TypedContractMethod< + [attester: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + + getSentAttestationUIDs: TypedContractMethod< + [ + attester: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + + indexAttestation: TypedContractMethod< + [attestationUID: BytesLike], + [void], + "nonpayable" + >; + + indexAttestations: TypedContractMethod< + [attestationUIDs: BytesLike[]], + [void], + "nonpayable" + >; + + isAttestationIndexed: TypedContractMethod< + [attestationUID: BytesLike], + [boolean], + "view" + >; + + version: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "getEAS" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getReceivedAttestationUIDCount" + ): TypedContractMethod< + [recipient: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "getReceivedAttestationUIDs" + ): TypedContractMethod< + [ + recipient: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "getSchemaAttestationUIDCount" + ): TypedContractMethod<[schemaUID: BytesLike], [bigint], "view">; + getFunction( + nameOrSignature: "getSchemaAttestationUIDs" + ): TypedContractMethod< + [ + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "getSchemaAttesterRecipientAttestationUIDCount" + ): TypedContractMethod< + [schemaUID: BytesLike, attester: AddressLike, recipient: AddressLike], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "getSchemaAttesterRecipientAttestationUIDs" + ): TypedContractMethod< + [ + schemaUID: BytesLike, + attester: AddressLike, + recipient: AddressLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "getSentAttestationUIDCount" + ): TypedContractMethod< + [attester: AddressLike, schemaUID: BytesLike], + [bigint], + "view" + >; + getFunction( + nameOrSignature: "getSentAttestationUIDs" + ): TypedContractMethod< + [ + attester: AddressLike, + schemaUID: BytesLike, + start: BigNumberish, + length: BigNumberish, + reverseOrder: boolean + ], + [string[]], + "view" + >; + getFunction( + nameOrSignature: "indexAttestation" + ): TypedContractMethod<[attestationUID: BytesLike], [void], "nonpayable">; + getFunction( + nameOrSignature: "indexAttestations" + ): TypedContractMethod<[attestationUIDs: BytesLike[]], [void], "nonpayable">; + getFunction( + nameOrSignature: "isAttestationIndexed" + ): TypedContractMethod<[attestationUID: BytesLike], [boolean], "view">; + getFunction( + nameOrSignature: "version" + ): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "Indexed" + ): TypedContractEvent< + IndexedEvent.InputTuple, + IndexedEvent.OutputTuple, + IndexedEvent.OutputObject + >; + + filters: { + "Indexed(bytes32)": TypedContractEvent< + IndexedEvent.InputTuple, + IndexedEvent.OutputTuple, + IndexedEvent.OutputObject + >; + Indexed: TypedContractEvent< + IndexedEvent.InputTuple, + IndexedEvent.OutputTuple, + IndexedEvent.OutputObject + >; + }; +} diff --git a/deployments/ink-sepolia/types/contracts/SchemaRegistry.ts b/deployments/ink-sepolia/types/contracts/SchemaRegistry.ts new file mode 100644 index 00000000..3531a5e5 --- /dev/null +++ b/deployments/ink-sepolia/types/contracts/SchemaRegistry.ts @@ -0,0 +1,204 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "../common"; + +export type SchemaRecordStruct = { + uid: PromiseOrValue; + resolver: PromiseOrValue; + revocable: PromiseOrValue; + schema: PromiseOrValue; +}; + +export type SchemaRecordStructOutput = [string, string, boolean, string] & { + uid: string; + resolver: string; + revocable: boolean; + schema: string; +}; + +export interface SchemaRegistryInterface extends utils.Interface { + functions: { + "VERSION()": FunctionFragment; + "getSchema(bytes32)": FunctionFragment; + "register(string,address,bool)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "VERSION" | "getSchema" | "register" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "VERSION", values?: undefined): string; + encodeFunctionData( + functionFragment: "getSchema", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "register", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + + decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getSchema", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "register", data: BytesLike): Result; + + events: { + "Registered(bytes32,address)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Registered"): EventFragment; +} + +export interface RegisteredEventObject { + uid: string; + registerer: string; +} +export type RegisteredEvent = TypedEvent< + [string, string], + RegisteredEventObject +>; + +export type RegisteredEventFilter = TypedEventFilter; + +export interface SchemaRegistry extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: SchemaRegistryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + VERSION(overrides?: CallOverrides): Promise<[string]>; + + getSchema( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[SchemaRecordStructOutput]>; + + register( + schema: PromiseOrValue, + resolver: PromiseOrValue, + revocable: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + VERSION(overrides?: CallOverrides): Promise; + + getSchema( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + register( + schema: PromiseOrValue, + resolver: PromiseOrValue, + revocable: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + VERSION(overrides?: CallOverrides): Promise; + + getSchema( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + register( + schema: PromiseOrValue, + resolver: PromiseOrValue, + revocable: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Registered(bytes32,address)"( + uid?: PromiseOrValue | null, + registerer?: null + ): RegisteredEventFilter; + Registered( + uid?: PromiseOrValue | null, + registerer?: null + ): RegisteredEventFilter; + }; + + estimateGas: { + VERSION(overrides?: CallOverrides): Promise; + + getSchema( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + register( + schema: PromiseOrValue, + resolver: PromiseOrValue, + revocable: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + VERSION(overrides?: CallOverrides): Promise; + + getSchema( + uid: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + register( + schema: PromiseOrValue, + resolver: PromiseOrValue, + revocable: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/deployments/ink-sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts b/deployments/ink-sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts new file mode 100644 index 00000000..9d2d7fc0 --- /dev/null +++ b/deployments/ink-sepolia/types/contracts/eip712/proxy/EIP712Proxy.ts @@ -0,0 +1,455 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../../../common"; + +export type AttestationRequestDataStruct = { + recipient: AddressLike; + expirationTime: BigNumberish; + revocable: boolean; + refUID: BytesLike; + data: BytesLike; + value: BigNumberish; +}; + +export type AttestationRequestDataStructOutput = [ + recipient: string, + expirationTime: bigint, + revocable: boolean, + refUID: string, + data: string, + value: bigint +] & { + recipient: string; + expirationTime: bigint; + revocable: boolean; + refUID: string; + data: string; + value: bigint; +}; + +export type SignatureStruct = { v: BigNumberish; r: BytesLike; s: BytesLike }; + +export type SignatureStructOutput = [v: bigint, r: string, s: string] & { + v: bigint; + r: string; + s: string; +}; + +export type DelegatedProxyAttestationRequestStruct = { + schema: BytesLike; + data: AttestationRequestDataStruct; + signature: SignatureStruct; + attester: AddressLike; + deadline: BigNumberish; +}; + +export type DelegatedProxyAttestationRequestStructOutput = [ + schema: string, + data: AttestationRequestDataStructOutput, + signature: SignatureStructOutput, + attester: string, + deadline: bigint +] & { + schema: string; + data: AttestationRequestDataStructOutput; + signature: SignatureStructOutput; + attester: string; + deadline: bigint; +}; + +export type MultiDelegatedProxyAttestationRequestStruct = { + schema: BytesLike; + data: AttestationRequestDataStruct[]; + signatures: SignatureStruct[]; + attester: AddressLike; + deadline: BigNumberish; +}; + +export type MultiDelegatedProxyAttestationRequestStructOutput = [ + schema: string, + data: AttestationRequestDataStructOutput[], + signatures: SignatureStructOutput[], + attester: string, + deadline: bigint +] & { + schema: string; + data: AttestationRequestDataStructOutput[]; + signatures: SignatureStructOutput[]; + attester: string; + deadline: bigint; +}; + +export type RevocationRequestDataStruct = { + uid: BytesLike; + value: BigNumberish; +}; + +export type RevocationRequestDataStructOutput = [uid: string, value: bigint] & { + uid: string; + value: bigint; +}; + +export type MultiDelegatedProxyRevocationRequestStruct = { + schema: BytesLike; + data: RevocationRequestDataStruct[]; + signatures: SignatureStruct[]; + revoker: AddressLike; + deadline: BigNumberish; +}; + +export type MultiDelegatedProxyRevocationRequestStructOutput = [ + schema: string, + data: RevocationRequestDataStructOutput[], + signatures: SignatureStructOutput[], + revoker: string, + deadline: bigint +] & { + schema: string; + data: RevocationRequestDataStructOutput[]; + signatures: SignatureStructOutput[]; + revoker: string; + deadline: bigint; +}; + +export type DelegatedProxyRevocationRequestStruct = { + schema: BytesLike; + data: RevocationRequestDataStruct; + signature: SignatureStruct; + revoker: AddressLike; + deadline: BigNumberish; +}; + +export type DelegatedProxyRevocationRequestStructOutput = [ + schema: string, + data: RevocationRequestDataStructOutput, + signature: SignatureStructOutput, + revoker: string, + deadline: bigint +] & { + schema: string; + data: RevocationRequestDataStructOutput; + signature: SignatureStructOutput; + revoker: string; + deadline: bigint; +}; + +export interface EIP712ProxyInterface extends Interface { + getFunction( + nameOrSignature: + | "attestByDelegation" + | "eip712Domain" + | "getAttestTypeHash" + | "getAttester" + | "getDomainSeparator" + | "getEAS" + | "getName" + | "getRevokeTypeHash" + | "multiAttestByDelegation" + | "multiRevokeByDelegation" + | "revokeByDelegation" + | "version" + ): FunctionFragment; + + getEvent(nameOrSignatureOrTopic: "EIP712DomainChanged"): EventFragment; + + encodeFunctionData( + functionFragment: "attestByDelegation", + values: [DelegatedProxyAttestationRequestStruct] + ): string; + encodeFunctionData( + functionFragment: "eip712Domain", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getAttestTypeHash", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getAttester", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getDomainSeparator", + values?: undefined + ): string; + encodeFunctionData(functionFragment: "getEAS", values?: undefined): string; + encodeFunctionData(functionFragment: "getName", values?: undefined): string; + encodeFunctionData( + functionFragment: "getRevokeTypeHash", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "multiAttestByDelegation", + values: [MultiDelegatedProxyAttestationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "multiRevokeByDelegation", + values: [MultiDelegatedProxyRevocationRequestStruct[]] + ): string; + encodeFunctionData( + functionFragment: "revokeByDelegation", + values: [DelegatedProxyRevocationRequestStruct] + ): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + + decodeFunctionResult( + functionFragment: "attestByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "eip712Domain", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAttestTypeHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAttester", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getDomainSeparator", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "getEAS", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getName", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getRevokeTypeHash", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiAttestByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "multiRevokeByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "revokeByDelegation", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; +} + +export namespace EIP712DomainChangedEvent { + export type InputTuple = []; + export type OutputTuple = []; + export interface OutputObject {} + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface EIP712Proxy extends BaseContract { + connect(runner?: ContractRunner | null): EIP712Proxy; + waitForDeployment(): Promise; + + interface: EIP712ProxyInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + on( + event: TCEvent, + listener: TypedListener + ): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + once( + event: TCEvent, + listener: TypedListener + ): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener + ): Promise; + + listeners( + event: TCEvent + ): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners( + event?: TCEvent + ): Promise; + + attestByDelegation: TypedContractMethod< + [delegatedRequest: DelegatedProxyAttestationRequestStruct], + [string], + "payable" + >; + + eip712Domain: TypedContractMethod< + [], + [ + [string, string, string, bigint, string, string, bigint[]] & { + fields: string; + name: string; + version: string; + chainId: bigint; + verifyingContract: string; + salt: string; + extensions: bigint[]; + } + ], + "view" + >; + + getAttestTypeHash: TypedContractMethod<[], [string], "view">; + + getAttester: TypedContractMethod<[uid: BytesLike], [string], "view">; + + getDomainSeparator: TypedContractMethod<[], [string], "view">; + + getEAS: TypedContractMethod<[], [string], "view">; + + getName: TypedContractMethod<[], [string], "view">; + + getRevokeTypeHash: TypedContractMethod<[], [string], "view">; + + multiAttestByDelegation: TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]], + [string[]], + "payable" + >; + + multiRevokeByDelegation: TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]], + [void], + "payable" + >; + + revokeByDelegation: TypedContractMethod< + [delegatedRequest: DelegatedProxyRevocationRequestStruct], + [void], + "payable" + >; + + version: TypedContractMethod<[], [string], "view">; + + getFunction( + key: string | FunctionFragment + ): T; + + getFunction( + nameOrSignature: "attestByDelegation" + ): TypedContractMethod< + [delegatedRequest: DelegatedProxyAttestationRequestStruct], + [string], + "payable" + >; + getFunction( + nameOrSignature: "eip712Domain" + ): TypedContractMethod< + [], + [ + [string, string, string, bigint, string, string, bigint[]] & { + fields: string; + name: string; + version: string; + chainId: bigint; + verifyingContract: string; + salt: string; + extensions: bigint[]; + } + ], + "view" + >; + getFunction( + nameOrSignature: "getAttestTypeHash" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getAttester" + ): TypedContractMethod<[uid: BytesLike], [string], "view">; + getFunction( + nameOrSignature: "getDomainSeparator" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getEAS" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getName" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "getRevokeTypeHash" + ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "multiAttestByDelegation" + ): TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyAttestationRequestStruct[]], + [string[]], + "payable" + >; + getFunction( + nameOrSignature: "multiRevokeByDelegation" + ): TypedContractMethod< + [multiDelegatedRequests: MultiDelegatedProxyRevocationRequestStruct[]], + [void], + "payable" + >; + getFunction( + nameOrSignature: "revokeByDelegation" + ): TypedContractMethod< + [delegatedRequest: DelegatedProxyRevocationRequestStruct], + [void], + "payable" + >; + getFunction( + nameOrSignature: "version" + ): TypedContractMethod<[], [string], "view">; + + getEvent( + key: "EIP712DomainChanged" + ): TypedContractEvent< + EIP712DomainChangedEvent.InputTuple, + EIP712DomainChangedEvent.OutputTuple, + EIP712DomainChangedEvent.OutputObject + >; + + filters: { + "EIP712DomainChanged()": TypedContractEvent< + EIP712DomainChangedEvent.InputTuple, + EIP712DomainChangedEvent.OutputTuple, + EIP712DomainChangedEvent.OutputObject + >; + EIP712DomainChanged: TypedContractEvent< + EIP712DomainChangedEvent.InputTuple, + EIP712DomainChangedEvent.OutputTuple, + EIP712DomainChangedEvent.OutputObject + >; + }; +} diff --git a/deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts b/deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts new file mode 100644 index 00000000..c211ef25 --- /dev/null +++ b/deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/Indexer__factory.ts @@ -0,0 +1,435 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, + AddressLike, + ContractDeployTransaction, + ContractRunner, +} from "ethers"; +import type { NonPayableOverrides } from "../../../../common"; +import type { + Indexer, + IndexerInterface, +} from "../../../../@ethereum-attestation-service/eas-contracts/contracts/Indexer"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEAS", + name: "eas", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "InvalidAttestation", + type: "error", + }, + { + inputs: [], + name: "InvalidEAS", + type: "error", + }, + { + inputs: [], + name: "InvalidOffset", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + name: "Indexed", + type: "event", + }, + { + inputs: [], + name: "getEAS", + outputs: [ + { + internalType: "contract IEAS", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + ], + name: "getReceivedAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getReceivedAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + ], + name: "getSchemaAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getSchemaAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + ], + name: "getSchemaAttesterRecipientAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getSchemaAttesterRecipientAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + ], + name: "getSentAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getSentAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationUID", + type: "bytes32", + }, + ], + name: "indexAttestation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationUIDs", + type: "bytes32[]", + }, + ], + name: "indexAttestations", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationUID", + type: "bytes32", + }, + ], + name: "isAttestationIndexed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x61010060405234801561001157600080fd5b506040516111db3803806111db83398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110f46100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110f46000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c84565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610ceb565b6104ad565b61028061027b366004610d41565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db8565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610ceb565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610dfa565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e91565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610ec0565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610ec0565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e91565b60200260200101518282815181106107c8576107c8610e91565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fed565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b602080825282518282018190526000918401906040840190835b81811015610c79578351835260209384019390920191600101610c5b565b509095945050505050565b60008060008060008060c08789031215610c9d57600080fd5b863595506020870135610caf81610b16565b94506040870135610cbf81610b16565b9350606087013592506080870135915060a0870135610cdd81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0357600080fd5b8535610d0e81610b16565b94506020860135935060408601359250606086013591506080860135610d3381610bf2565b809150509295509295909350565b60008060208385031215610d5457600080fd5b823567ffffffffffffffff811115610d6b57600080fd5b8301601f81018513610d7c57600080fd5b803567ffffffffffffffff811115610d9357600080fd5b8560208260051b8401011115610da857600080fd5b6020919091019590945092505050565b600080600060608486031215610dcd57600080fd5b833592506020840135610ddf81610b16565b91506040840135610def81610b16565b809150509250925092565b60008451610e0c818460208901610b7d565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451610e46816001840160208901610b7d565b7f2e00000000000000000000000000000000000000000000000000000000000000600192909101918201528351610e84816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610f1357610f13610ec0565b60405290565b805167ffffffffffffffff81168114610f3157600080fd5b919050565b8051610f3181610b16565b8051610f3181610bf2565b600082601f830112610f5d57600080fd5b815167ffffffffffffffff811115610f7757610f77610ec0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610fc457610fc4610ec0565b604052818152838201602001851015610fdc57600080fd5b610408826020830160208701610b7d565b600060208284031215610fff57600080fd5b815167ffffffffffffffff81111561101657600080fd5b8201610140818503121561102957600080fd5b611031610eef565b815181526020808301519082015261104b60408301610f19565b604082015261105c60608301610f19565b606082015261106d60808301610f19565b608082015260a0828101519082015261108860c08301610f36565b60c082015261109960e08301610f36565b60e08201526110ab6101008301610f41565b61010082015261012082015167ffffffffffffffff8111156110cc57600080fd5b6110d886828501610f4c565b6101208301525094935050505056fea164736f6c634300081b000a"; + +type IndexerConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: IndexerConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Indexer__factory extends ContractFactory { + constructor(...args: IndexerConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + eas: AddressLike, + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(eas, overrides || {}); + } + override deploy( + eas: AddressLike, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(eas, overrides || {}) as Promise< + Indexer & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): Indexer__factory { + return super.connect(runner) as Indexer__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): IndexerInterface { + return new Interface(_abi) as IndexerInterface; + } + static connect(address: string, runner?: ContractRunner | null): Indexer { + return new Contract(address, _abi, runner) as unknown as Indexer; + } +} diff --git a/deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts b/deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts new file mode 100644 index 00000000..8f8734cf --- /dev/null +++ b/deployments/ink-sepolia/types/factories/@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy__factory.ts @@ -0,0 +1,643 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, + AddressLike, + ContractDeployTransaction, + ContractRunner, +} from "ethers"; +import type { NonPayableOverrides } from "../../../../../../common"; +import type { + EIP712Proxy, + EIP712ProxyInterface, +} from "../../../../../../@ethereum-attestation-service/eas-contracts/contracts/eip712/proxy/EIP712Proxy"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEAS", + name: "eas", + type: "address", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "AccessDenied", + type: "error", + }, + { + inputs: [], + name: "DeadlineExpired", + type: "error", + }, + { + inputs: [], + name: "ECDSAInvalidSignature", + type: "error", + }, + { + inputs: [ + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + ], + name: "ECDSAInvalidSignatureLength", + type: "error", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + name: "ECDSAInvalidSignatureS", + type: "error", + }, + { + inputs: [], + name: "InvalidEAS", + type: "error", + }, + { + inputs: [], + name: "InvalidLength", + type: "error", + }, + { + inputs: [], + name: "InvalidShortString", + type: "error", + }, + { + inputs: [], + name: "InvalidSignature", + type: "error", + }, + { + inputs: [], + name: "NotFound", + type: "error", + }, + { + inputs: [ + { + internalType: "string", + name: "str", + type: "string", + }, + ], + name: "StringTooLong", + type: "error", + }, + { + inputs: [], + name: "UsedSignature", + type: "error", + }, + { + anonymous: false, + inputs: [], + name: "EIP712DomainChanged", + type: "event", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData", + name: "data", + type: "tuple", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature", + name: "signature", + type: "tuple", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct DelegatedProxyAttestationRequest", + name: "delegatedRequest", + type: "tuple", + }, + ], + name: "attestByDelegation", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "eip712Domain", + outputs: [ + { + internalType: "bytes1", + name: "fields", + type: "bytes1", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "version", + type: "string", + }, + { + internalType: "uint256", + name: "chainId", + type: "uint256", + }, + { + internalType: "address", + name: "verifyingContract", + type: "address", + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32", + }, + { + internalType: "uint256[]", + name: "extensions", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getAttestTypeHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + name: "getAttester", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDomainSeparator", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getEAS", + outputs: [ + { + internalType: "contract IEAS", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getName", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getRevokeTypeHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData[]", + name: "data", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature[]", + name: "signatures", + type: "tuple[]", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct MultiDelegatedProxyAttestationRequest[]", + name: "multiDelegatedRequests", + type: "tuple[]", + }, + ], + name: "multiAttestByDelegation", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData[]", + name: "data", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature[]", + name: "signatures", + type: "tuple[]", + }, + { + internalType: "address", + name: "revoker", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct MultiDelegatedProxyRevocationRequest[]", + name: "multiDelegatedRequests", + type: "tuple[]", + }, + ], + name: "multiRevokeByDelegation", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData", + name: "data", + type: "tuple", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature", + name: "signature", + type: "tuple", + }, + { + internalType: "address", + name: "revoker", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct DelegatedProxyRevocationRequest", + name: "delegatedRequest", + type: "tuple", + }, + ], + name: "revokeByDelegation", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x6101e060405234801561001157600080fd5b50604051612d2e380380612d2e83398101604081905261003091610211565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c081905282919061006b90839061015d565b6101805261007a81600161015d565b6101a05281516020808401919091206101405281519082012061016052466101005261010a6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821661013b576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c0526002610155828261036e565b505050610483565b60006020835110156101795761017283610190565b905061018a565b81610184848261036e565b5060ff90505b92915050565b600080829050601f815111156101c4578260405163305a27a960e01b81526004016101bb919061042c565b60405180910390fd5b80516101cf8261045f565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102085781810151838201526020016101f0565b50506000910152565b6000806040838503121561022457600080fd5b82516001600160a01b038116811461023b57600080fd5b60208401519092506001600160401b0381111561025757600080fd5b8301601f8101851361026857600080fd5b80516001600160401b03811115610281576102816101d7565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102af576102af6101d7565b6040528181528282016020018710156102c757600080fd5b6102d88260208301602086016101ed565b8093505050509250929050565b600181811c908216806102f957607f821691505b60208210810361031957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036957806000526020600020601f840160051c810160208510156103465750805b601f840160051c820191505b818110156103665760008155600101610352565b50505b505050565b81516001600160401b03811115610387576103876101d7565b61039b8161039584546102e5565b8461031f565b6020601f8211600181146103cf57600083156103b75750848201515b600019600385901b1c1916600184901b178455610366565b600084815260208120601f198516915b828110156103ff57878501518255602094850194600190920191016103df565b508482101561041d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015261044b8160408501602087016101ed565b601f01601f19169190910160400192915050565b805160208083015191908110156103195760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612809610525600039600081816101e4015281816104d1015281816105e901528181610a5b0152610c3c0152600061127c0152600061124f0152600061138901526000611361015260006112bc015260006112e601526000611310015260006107760152600061074d0152600061072401526128096000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da3660046119be565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a00565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611a87565b61017d6101bb366004611aa1565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611adc565b61024361023e3660046119be565b610822565b6040516101459190611b9d565b6100df61025e366004611be0565b610c23565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d23565b8060008167ffffffffffffffff8111156102c7576102c7611bfc565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c2b565b90506020028101906103419190611c5a565b61034a90611ec7565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c2b565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c2b565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d32565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c2b565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401611fc8565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f9061209f565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061209f565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612218565b610fa8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e7346040518060400160405280876000013581526020018780602001906106499190612291565b610652906122c5565b8152506040518363ffffffff1660e01b81526004016106719190612344565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b49190612371565b90506106c660c0840160a0850161238a565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f000000000000000000000000000000000000000000000000000000000000000061118a565b6107717f000000000000000000000000000000000000000000000000000000000000000061118a565b61079a7f000000000000000000000000000000000000000000000000000000000000000061118a565b6040516020016107ac939291906123a5565b604051602081830303815290604052905090565b6000606080600080600060606107d4611248565b6107dc611275565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561084057610840611bfc565b60405190808252806020026020018201604052801561088657816020015b60408051808201909152600081526060602082015281526020019060019003908161085e5790505b50905060005b82811015610a5657368686838181106108a7576108a7611c2b565b90506020028101906108b99190611c5a565b90503660006108cb602084018461243c565b9092509050808015806108ec57506108e660408501856124a4565b90508114155b15610923576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a04576109fc6040518060a001604052808760000135815260200186868581811061095857610958611c2b565b905060200281019061096a9190612291565b610973906122c5565b815260200161098560408901896124a4565b8581811061099557610995611c2b565b9050606002018036038101906109ab919061250b565b81526020016109c06080890160608a0161238a565b73ffffffffffffffffffffffffffffffffffffffff1681526020016109eb60a0890160808a01612527565b67ffffffffffffffff169052610fa8565b600101610926565b50604080518082019091528435815260208101610a218486612542565b815250868681518110610a3657610a36611c2b565b602002602001018190525050505050610a4f8160010190565b905061088c565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610ab391906125a8565b60006040518083038185885af1158015610ad1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b18919081019061269b565b90506000805b84811015610c155736888883818110610b3957610b39611c2b565b9050602002810190610b4b9190611c5a565b9050366000610b5d602084018461243c565b90925090508060005b81811015610bff57610b7e608086016060870161238a565b600360008a8a81518110610b9457610b94611c2b565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610bf88160010190565b9050610b66565b5050505050610c0e8160010190565b9050610b1e565b509093505050505b92915050565b610c3a610c3536839003830183612731565b610d32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ca0919061279f565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d0757600080fd5b505af1158015610d1b573d6000803e3d6000fd5b505050505050565b6000610d2d6112a2565b905090565b608081015167ffffffffffffffff1615801590610d6657504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610d9d576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e02576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610e79816113da565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f1f9060e0015b604051602081830303815290604052805190602001206114e8565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f5482846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff1615801590610fdc57504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611013576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516040820151611026816113da565b60006111027fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f049a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661113782846000015185602001518660400151611530565b73ffffffffffffffffffffffffffffffffffffffff1614611184576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111978361155e565b600101905060008167ffffffffffffffff8111156111b7576111b7611bfc565b6040519080825280601f01601f1916602001820160405280156111e1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846111eb57509392505050565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006000611640565b6060610d2d7f00000000000000000000000000000000000000000000000000000000000000006001611640565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561130857507f000000000000000000000000000000000000000000000000000000000000000046145b1561133257507f000000000000000000000000000000000000000000000000000000000000000090565b610d2d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff00000000000000000000000000000000000000000000000000000000000000169284019290925260218301526041820152600090606101604051602081830303815290604052905060048160405161144a91906127bb565b9081526040519081900360200190205460ff1615611494576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004826040516114a691906127bb565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c1d6114f56112a2565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611542888888886116eb565b92509250925061155282826117e5565b50909695505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115a7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106115d3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115f157662386f26fc10000830492506010015b6305f5e1008310611609576305f5e100830492506008015b612710831061161d57612710830492506004015b6064831061162f576064830492506002015b600a8310610c1d5760010192915050565b606060ff831461165a57611653836118f2565b9050610c1d565b8180546116669061209f565b80601f01602080910402602001604051908101604052809291908181526020018280546116929061209f565b80156116df5780601f106116b4576101008083540402835291602001916116df565b820191906000526020600020905b8154815290600101906020018083116116c257829003601f168201915b50505050509050610c1d565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561172657506000915060039050826117db565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561177a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1575060009250600191508290506117db565b9250600091508190505b9450945094915050565b60008260038111156117f9576117f96127cd565b03611802575050565b6001826003811115611816576118166127cd565b0361184d576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611861576118616127cd565b036118a0576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60038260038111156118b4576118b46127cd565b036118ee576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611897565b5050565b606060006118ff83611931565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f811115610c1d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f84011261198457600080fd5b50813567ffffffffffffffff81111561199c57600080fd5b6020830191508360208260051b85010111156119b757600080fd5b9250929050565b600080602083850312156119d157600080fd5b823567ffffffffffffffff8111156119e857600080fd5b6119f485828601611972565b90969095509350505050565b600060208284031215611a1257600080fd5b5035919050565b60005b83811015611a34578181015183820152602001611a1c565b50506000910152565b60008151808452611a55816020860160208601611a19565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a9a6020830184611a3d565b9392505050565b600060208284031215611ab357600080fd5b813567ffffffffffffffff811115611aca57600080fd5b820160e08185031215611a9a57600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611b1760e0830189611a3d565b8281036040840152611b298189611a3d565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611b8c578351835260209384019390920191600101611b6e565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611bd5578351835260209384019390920191600101611bb7565b509095945050505050565b6000610100828403128015611bf457600080fd5b509092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611c8e57600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b60405290565b60405160c0810167ffffffffffffffff81118282101715611cbb57611cbb611bfc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d2b57611d2b611bfc565b604052919050565b600067ffffffffffffffff821115611d4d57611d4d611bfc565b5060051b60200190565b600060408284031215611d6957600080fd5b6040805190810167ffffffffffffffff81118282101715611d8c57611d8c611bfc565b604052823581526020928301359281019290925250919050565b600060608284031215611db857600080fd5b6040516060810167ffffffffffffffff81118282101715611ddb57611ddb611bfc565b604052905080823560ff81168114611df257600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f830112611e2057600080fd5b8135611e33611e2e82611d33565b611ce4565b80828252602082019150602060608402860101925085831115611e5557600080fd5b602085015b83811015611e7c57611e6c8782611da6565b8352602090920191606001611e5a565b5095945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611eaa57600080fd5b919050565b803567ffffffffffffffff81168114611eaa57600080fd5b600060a08236031215611ed957600080fd5b611ee1611c98565b82358152602083013567ffffffffffffffff811115611eff57600080fd5b830136601f820112611f1057600080fd5b8035611f1e611e2e82611d33565b8082825260208201915060208360061b850101925036831115611f4057600080fd5b6020840193505b82841015611f6c57611f593685611d57565b8252602082019150604084019350611f47565b6020850152505050604083013567ffffffffffffffff811115611f8e57600080fd5b611f9a36828601611e0f565b604083015250611fac60608401611e86565b6060820152611fbd60808401611eaf565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b8083101561207b5761206482855180518252602090810151910152565b604082019150602084019350600183019250612047565b50965050506020938401939190910190600101611ff0565b50929695505050505050565b600181811c908216806120b357607f821691505b6020821081036120ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082601f83011261210357600080fd5b813567ffffffffffffffff81111561211d5761211d611bfc565b61214e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ce4565b81815284602083860101111561216357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561219257600080fd5b61219a611cc1565b90506121a582611e86565b81526121b360208301611eaf565b6020820152604082013580151581146121cb57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156121f457600080fd5b612200848285016120f2565b60808301525060a09182013591810191909152919050565b600060e0823603121561222a57600080fd5b612232611c98565b82358152602083013567ffffffffffffffff81111561225057600080fd5b61225c36828601612180565b60208301525061226f3660408501611da6565b604082015261228060a08401611e86565b6060820152611fbd60c08401611eaf565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611c8e57600080fd5b6000610c1d3683612180565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261233060c0850182611a3d565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261236960608401826122d1565b949350505050565b60006020828403121561238357600080fd5b5051919050565b60006020828403121561239c57600080fd5b611a9a82611e86565b600084516123b7818460208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000090830190815284516123f1816001840160208901611a19565b7f2e0000000000000000000000000000000000000000000000000000000000000060019290910191820152835161242f816002840160208801611a19565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261247157600080fd5b83018035915067ffffffffffffffff82111561248c57600080fd5b6020019150600581901b36038213156119b757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124d957600080fd5b83018035915067ffffffffffffffff8211156124f457600080fd5b60200191506060810236038213156119b757600080fd5b60006060828403121561251d57600080fd5b611a9a8383611da6565b60006020828403121561253957600080fd5b611a9a82611eaf565b6000612550611e2e84611d33565b8381526020810190600585901b84013681111561256c57600080fd5b845b81811015611bd557803567ffffffffffffffff81111561258d57600080fd5b61259936828901612180565b8552506020938401930161256e565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612093577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612681577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261266b8486516122d1565b6020958601959094509290920191600101612631565b5091975050506020948501949290920191506001016125d0565b6000602082840312156126ad57600080fd5b815167ffffffffffffffff8111156126c457600080fd5b8201601f810184136126d557600080fd5b80516126e3611e2e82611d33565b8082825260208201915060208360051b85010192508683111561270557600080fd5b6020840193505b8284101561272757835182526020938401939091019061270c565b9695505050505050565b600061010082840312801561274557600080fd5b5061274e611c98565b8235815261275f8460208501611d57565b60208201526127718460608501611da6565b604082015261278260c08401611e86565b606082015261279360e08401611eaf565b60808201529392505050565b6000604082840312156127b157600080fd5b611a9a8383611d57565b60008251611c8e818460208701611a19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081b000a"; + +type EIP712ProxyConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EIP712ProxyConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EIP712Proxy__factory extends ContractFactory { + constructor(...args: EIP712ProxyConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + eas: AddressLike, + name: string, + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(eas, name, overrides || {}); + } + override deploy( + eas: AddressLike, + name: string, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(eas, name, overrides || {}) as Promise< + EIP712Proxy & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): EIP712Proxy__factory { + return super.connect(runner) as EIP712Proxy__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EIP712ProxyInterface { + return new Interface(_abi) as EIP712ProxyInterface; + } + static connect(address: string, runner?: ContractRunner | null): EIP712Proxy { + return new Contract(address, _abi, runner) as unknown as EIP712Proxy; + } +} diff --git a/deployments/ink-sepolia/types/factories/contracts/EAS__factory.ts b/deployments/ink-sepolia/types/factories/contracts/EAS__factory.ts new file mode 100644 index 00000000..e9fa50b8 --- /dev/null +++ b/deployments/ink-sepolia/types/factories/contracts/EAS__factory.ts @@ -0,0 +1,1090 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { EAS, EASInterface } from "../../contracts/EAS"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract ISchemaRegistry", + name: "registry", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "AccessDenied", + type: "error", + }, + { + inputs: [], + name: "AlreadyRevoked", + type: "error", + }, + { + inputs: [], + name: "AlreadyRevokedOffchain", + type: "error", + }, + { + inputs: [], + name: "AlreadyTimestamped", + type: "error", + }, + { + inputs: [], + name: "InsufficientValue", + type: "error", + }, + { + inputs: [], + name: "InvalidAttestation", + type: "error", + }, + { + inputs: [], + name: "InvalidAttestations", + type: "error", + }, + { + inputs: [], + name: "InvalidExpirationTime", + type: "error", + }, + { + inputs: [], + name: "InvalidLength", + type: "error", + }, + { + inputs: [], + name: "InvalidOffset", + type: "error", + }, + { + inputs: [], + name: "InvalidRegistry", + type: "error", + }, + { + inputs: [], + name: "InvalidRevocation", + type: "error", + }, + { + inputs: [], + name: "InvalidRevocations", + type: "error", + }, + { + inputs: [], + name: "InvalidSchema", + type: "error", + }, + { + inputs: [], + name: "InvalidSignature", + type: "error", + }, + { + inputs: [], + name: "InvalidVerifier", + type: "error", + }, + { + inputs: [], + name: "Irrevocable", + type: "error", + }, + { + inputs: [], + name: "NotFound", + type: "error", + }, + { + inputs: [], + name: "NotPayable", + type: "error", + }, + { + inputs: [], + name: "WrongSchema", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "attester", + type: "address", + }, + { + indexed: false, + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + indexed: true, + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + ], + name: "Attested", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "recipient", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "attester", + type: "address", + }, + { + indexed: false, + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + indexed: true, + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + ], + name: "Revoked", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "revoker", + type: "address", + }, + { + indexed: true, + internalType: "bytes32", + name: "data", + type: "bytes32", + }, + { + indexed: true, + internalType: "uint64", + name: "timestamp", + type: "uint64", + }, + ], + name: "RevokedOffchain", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "data", + type: "bytes32", + }, + { + indexed: true, + internalType: "uint64", + name: "timestamp", + type: "uint64", + }, + ], + name: "Timestamped", + type: "event", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData", + name: "data", + type: "tuple", + }, + ], + internalType: "struct AttestationRequest", + name: "request", + type: "tuple", + }, + ], + name: "attest", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData", + name: "data", + type: "tuple", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct EIP712Signature", + name: "signature", + type: "tuple", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + internalType: "struct DelegatedAttestationRequest", + name: "delegatedRequest", + type: "tuple", + }, + ], + name: "attestByDelegation", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "getAttestTypeHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + 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: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDomainSeparator", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getName", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "getNonce", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "revoker", + type: "address", + }, + { + internalType: "bytes32", + name: "data", + type: "bytes32", + }, + ], + name: "getRevokeOffchain", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getRevokeTypeHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [], + name: "getSchemaRegistry", + outputs: [ + { + internalType: "contract ISchemaRegistry", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "data", + type: "bytes32", + }, + ], + name: "getTimestamp", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + name: "isAttestationValid", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData[]", + name: "data", + type: "tuple[]", + }, + ], + internalType: "struct MultiAttestationRequest[]", + name: "multiRequests", + type: "tuple[]", + }, + ], + name: "multiAttest", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData[]", + name: "data", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct EIP712Signature[]", + name: "signatures", + type: "tuple[]", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + ], + internalType: "struct MultiDelegatedAttestationRequest[]", + name: "multiDelegatedRequests", + type: "tuple[]", + }, + ], + name: "multiAttestByDelegation", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData[]", + name: "data", + type: "tuple[]", + }, + ], + internalType: "struct MultiRevocationRequest[]", + name: "multiRequests", + type: "tuple[]", + }, + ], + name: "multiRevoke", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData[]", + name: "data", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct EIP712Signature[]", + name: "signatures", + type: "tuple[]", + }, + { + internalType: "address", + name: "revoker", + type: "address", + }, + ], + internalType: "struct MultiDelegatedRevocationRequest[]", + name: "multiDelegatedRequests", + type: "tuple[]", + }, + ], + name: "multiRevokeByDelegation", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "data", + type: "bytes32[]", + }, + ], + name: "multiRevokeOffchain", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "data", + type: "bytes32[]", + }, + ], + name: "multiTimestamp", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData", + name: "data", + type: "tuple", + }, + ], + internalType: "struct RevocationRequest", + name: "request", + type: "tuple", + }, + ], + name: "revoke", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData", + name: "data", + type: "tuple", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct EIP712Signature", + name: "signature", + type: "tuple", + }, + { + internalType: "address", + name: "revoker", + type: "address", + }, + ], + internalType: "struct DelegatedRevocationRequest", + name: "delegatedRequest", + type: "tuple", + }, + ], + name: "revokeByDelegation", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "data", + type: "bytes32", + }, + ], + name: "revokeOffchain", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "data", + type: "bytes32", + }, + ], + name: "timestamp", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x610160346200030457601f19906001600160401b0390601f62004c8b38819003918201851683019184831184841017620003095780849260409485528339602093849181010312620003045751916001600160a01b0383168084036200030457818351966200006e886200031f565b60038852818801966245415360e81b885285516200008c816200031f565b6004958187809352019863302e323760e01b8a528a5190209820988860e05261010099808b524660a0528751858101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9b8c84528a83015260608201524660808201523060a082015260a0815260c0810181811085821117620002ef5789525190206080523060c0526101209889528051918211620002da576000938454916001928381811c91168015620002cf575b83821014620002bc57601f811162000271575b5081601f85116001146200020b5750839450908392918694620001ff575b50501b916000199060031b1c19161790555b15620001f15750610140918252519161494f93846200033c8539608051846143de015260a05184614499015260c051846143af015260e0518461442d015251836144530152518261440a0152518181816102a901528181611e660152818161269001528181612d9c015261301a0152f35b90516311a1e69760e01b8152fd5b0151925038806200016e565b9294849081168780528488209488905b888383106200025657505050106200023c575b505050811b01905562000180565b015160001960f88460031b161c191690553880806200022e565b8587015188559096019594850194879350908101906200021b565b868052828720601f860160051c810191848710620002b1575b601f0160051c019084905b828110620002a557505062000150565b88815501849062000295565b90915081906200028a565b634e487b7160e01b875260228952602487fd5b90607f16906200013d565b604186634e487b7160e01b6000525260246000fd5b604189634e487b7160e01b6000525260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117620003095760405256fe61016060406101405280610140515260048036101561001d57600080fd5b600091823560e01c90816312b11a171461118d5750806313893f611461110557806317d7de7c14610fe25780632d0335ab14610f7a57806344adc90e14610e715780634692626714610e125780634cb7e9e514610d095780634d00307014610cc0578063831e05a114610a71578063a3112a6414610a07578063b469318d14610987578063b83010d31461092c578063cf190f34146108e2578063d45c44351461088c578063e13458fc14610790578063e30bb56314610739578063e45d03f9146104b1578063e57a6b1b1461039b578063e71ff36514610310578063ed24911d146102cd578063f10b5cc81461025c578063f17325e7146101ae5763ffa1ad741461012857600080fd5b346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5761014051516101a6916101688261141f565b81527f302e3237000000000000000000000000000000000000000000000000000000006020820152610140515191829160208352602083019061123e565b0390f35b5080fd5b50907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc906020823601126102595782359267ffffffffffffffff84116101aa578301916101405190843603011261025957602061024e8161024786866102296102156114eb565b92610224602436920184611553565b6115d6565b61023283611586565b5261023c82611586565b503491339135611df1565b0151611586565b516101405151908152f35b80fd5b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610140515173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610259576020610306614398565b6101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff918282116103975761035f913691016111e5565b90914216925b818110610379576020846101405151908152f35b806103918561038b6001948688611a39565b356141c0565b01610365565b8380fd5b5060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101405151906103d58261139c565b358082526103e236611981565b602083015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126104ad57610140515161041f81611403565b60643560ff811681036104a9578152608435602082015260a435610140518201526101405183015260c43573ffffffffffffffffffffffffffffffffffffffff8116810361039757610479838260606104a596015261487c565b610481611932565b61048a36611981565b61049382611586565b5261049d81611586565b503492612d4f565b5080f35b8480fd5b8280fd5b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5767ffffffffffffffff82358181116104a95784926104ff8592369084016111e5565b91903493865b848110610510578780f35b6105208186859a9798999a61189e565b906080823603126107315761014051519761053a8961139c565b82358952858301358a811161073557830196601f973689820112156101aa5761056990369089813591016119c7565b94878b01958652610140518501358c81116104ad5785019836908a0112156101aa57883596610597886114d3565b996105a761014051519b8c611458565b888b52898b018a6060809b0283010191368311610731578b808c9201925b84841061071957505090506105e591508d6101405101978c8952016112a4565b96888d0197885251998a51801591821561070d575b50506106e257825b8a51811015610673578061066d8c8f8b8b8f926106448761063c60019a73ffffffffffffffffffffffffffffffffffffffff9451986115c2565b5193516115c2565b51925116926101405151946106588661139c565b8552840152610140518301528c82015261487c565b01610602565b5099986106d6949897506001955083906106d0939d97929c519073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d018c1494511691612fcc565b90611862565b91969195929301610505565b5061014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b51141590508e806105fa565b6107233685611698565b8152019101908b8b916105c5565b8580fd5b8780fd5b5090346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061078483356000526002602052604060002054151590565b61014051519015158152f35b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc916020833601126102595767ffffffffffffffff9282358481116104ad5760c08185019282360301126104ad576101405151946107ee8661139c565b82359485875260248301948535928311610259575060209661086b6102479561085860a461024e9a9761082b8d9b986108849836918401016115d6565b8b87015261083c3660448301611698565b61014051870152019361084e856112a4565b60608201526144bf565b6102246108636114eb565b953692611553565b61087484611586565b5261087e83611586565b506116d6565b903492611df1565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff913581526003835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff421680923533614266565b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025957602061014051517fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a996508152f35b50346101aa57610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209167ffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff6109e3611281565b16825283526101405181206024358252835261014051902054166101405151908152f35b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101a691610a5b91610a47611a49565b503581526002602052610140519020611ae7565b6101405151918291602083526020830190611300565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff81116104ad57610abb8391369084016111e5565b9092610ac6826116f7565b9383346101205280935b808510610af2576101a6610ae4878961432b565b6101405151918291826112c5565b9091929394610b0286838661189e565b610b0f602082018261179e565b80929192158015610ca6575b610c7b578560608301928035915b838110610bbb57505092602092610b829260019695610b7c8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494610b7461012051956116d6565b9336916117f2565b9061261e565b610b90815161012051611862565b61012052018051610ba1898b6115c2565b52610bac888a6115c2565b50515101950193929190610ad0565b610bca8160051b870187611553565b610bd9610140518401846118de565b831015610c4f576001929173ffffffffffffffffffffffffffffffffffffffff610c4992610c37610c098b6116d6565b91610c26610140515195610c1c8761139c565b8b875236906115d6565b602086015236906060880201611698565b610140518401521660608201526144bf565b01610b29565b60248b60328f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8761014051517f947d5a84000000000000000000000000000000000000000000000000000000008152fd5b50610cb6610140518301836118de565b9050811415610b1b565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209061030667ffffffffffffffff42168092356141c0565b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad57813567ffffffffffffffff928382116104a957610d54913691016111e5565b8493919290345b818610610d66578680f35b610d7186838761175e565b838101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215610e0e57810191823592868411610e0a578501928060061b36038413610e0a57600193826106d092610e0295610dfb8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b011494339336916119c7565b9035612fcc565b950194610d5b565b8980fd5b8880fd5b5060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576104a590610e49611932565b90610e5336611981565b610e5c83611586565b52610e6682611586565b503491339135612d4f565b50602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104ad5780359067ffffffffffffffff821161039757610ebe9084923691016111e5565b90610ec8826116f7565b93833490937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101905b808610610f06576101a6610ae4888a61432b565b90919293949560019085610f51610f488a8888610f24838a8f61175e565b610f41610f338883018361179e565b9390951494339336916117f2565b903561261e565b96875190611862565b95018051610f5f8a8c6115c2565b52610f6a898b6115c2565b5051510196019493929190610ef2565b82346102595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595760209073ffffffffffffffffffffffffffffffffffffffff610fca611281565b16815260018252610140519020546101405151908152f35b823461025957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102595761014051519080805461102381611a94565b808552916001918083169081156110bd5750600114611063575b6101a68561104d81870382611458565b610140515191829160208352602083019061123e565b80809450527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106110a557505050810160200161104d826101a661103d565b8054602085870181019190915290930192810161108a565b8695506101a69693506020925061104d9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101929361103d565b50346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57803567ffffffffffffffff9182821161039757611154913691016111e5565b90914216925b81811061116e576020846101405151908152f35b80611187856111806001948688611a39565b3533614266565b0161115a565b8390346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa57807fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de6160209252f35b9181601f840112156112165782359167ffffffffffffffff8311611216576020808501948460051b01011161121657565b600080fd5b60005b83811061122e5750506000910152565b818101518382015260200161121e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361127a8151809281875287808801910161121b565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b359073ffffffffffffffffffffffffffffffffffffffff8216820361121657565b6020908160408183019282815285518094520193019160005b8281106112ec575050505090565b8351855293810193928101926001016112de565b9061139991805182526020810151602083015267ffffffffffffffff806040830151166040840152806060830151166060840152608082015116608083015260a081015160a083015273ffffffffffffffffffffffffffffffffffffffff8060c08301511660c084015260e08201511660e08301526101008082015115159083015261012080910151916101408092820152019061123e565b90565b6080810190811067ffffffffffffffff8211176113b857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff8211176113b857604052565b6060810190811067ffffffffffffffff8211176113b857604052565b6040810190811067ffffffffffffffff8211176113b857604052565b610140810190811067ffffffffffffffff8211176113b857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b857604052565b67ffffffffffffffff81116113b857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116113b85760051b60200190565b6040908151916114fa8361141f565b60018352829160005b60208082101561154b5783516020929161151c826113e7565b6000825260008183015260008683015260606000818401526080830152600060a0830152828801015201611503565b505091925050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181360301821215611216570190565b8051156115935760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156115935760209160051b010190565b91909160c08184031261121657604051906115f0826113e7565b81936115fb826112a4565b835260209167ffffffffffffffff8184013581811681036112165784860152604082013580151581036112165760408601526060820135606086015260808201359081116112165781019180601f840112156112165782359261165d84611499565b9161166b6040519384611458565b84835285858301011161121657848460a09695879660009401838601378301015260808501520135910152565b9190826060910312611216576040516116b081611403565b8092803560ff811681036112165760409182918452602081013560208501520135910152565b3573ffffffffffffffffffffffffffffffffffffffff811681036112165790565b90611701826114d3565b61170e6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061173c82946114d3565b019060005b82811061174d57505050565b806060602080938501015201611741565b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff821161121657602001918160051b3603831361121657565b929190926117ff846114d3565b9161180d6040519384611458565b829480845260208094019060051b8301928284116112165780915b84831061183757505050505050565b823567ffffffffffffffff811161121657869161185786849386016115d6565b815201920191611828565b9190820391821161186f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908110156115935760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215611216570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215611216570180359067ffffffffffffffff82116112165760200191606082023603831361121657565b6040908151916119418361141f565b600183528291600091825b602080821015611978578251602092916119658261141f565b868252868183015282890101520161194c565b50505091925050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc604091011261121657604051906119b88261141f565b60243582526044356020830152565b9291926119d3826114d3565b6040926119e284519283611458565b819581835260208093019160061b84019381851161121657915b848310611a0b57505050505050565b8583830312611216578386918251611a228161141f565b8535815282860135838201528152019201916119fc565b91908110156115935760051b0190565b60405190611a568261143b565b606061012083600080825280602083015280604083015280848301528060808301528060a08301528060c08301528060e08301526101008201520152565b90600182811c92168015611add575b6020831014611aae57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611aa3565b9060405191611af58361143b565b828154815260016006818401549360209485850152600281015467ffffffffffffffff908181166040870152818160401c16606087015260801c166080850152600381015460a085015260ff73ffffffffffffffffffffffffffffffffffffffff8060048401541660c0870152600583015490811660e087015260a01c1615156101008501520190604051938492600092815491611b9283611a94565b80875292828116908115611c075750600114611bc1575b505050506101209291611bbd910384611458565b0152565b60009081528381209695945091905b818310611bef57509394509192509082010181611bbd61012038611ba9565b86548884018501529586019587945091830191611bd0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685880152505050151560051b830101905081611bbd61012038611ba9565b60405190611c548261141f565b6060602083600081520152565b90611c6b826114d3565b611c786040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ca682946114d3565b0190602036910137565b5190811515820361121657565b906020808383031261121657825167ffffffffffffffff938482116112165701926080848403126112165760405193611cf58561139c565b805185528281015173ffffffffffffffffffffffffffffffffffffffff811681036112165783860152611d2a60408201611cb0565b60408601526060810151918211611216570182601f8201121561121657805190611d5382611499565b93611d616040519586611458565b8285528383830101116112165782611d7c938501910161121b565b606082015290565b90611d8e826114d3565b611d9b6040519182611458565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611dc982946114d3565b019060005b828110611dda57505050565b602090611de5611a49565b82828501015201611dce565b9192608052611dfe611c47565b50805190611e0a611c47565b60a052611e1682611c61565b602060a05101526040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815283600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015612612576000610100526125ec575b506101005151156125c2579091611eaf83611d84565b60e052611ebb83611c61565b60c0526000915b838310611eed575050505050611ee360805160c05160e051610100516132bc565b60a0515260a05190565b611efd83829793949596976115c2565b519167ffffffffffffffff60208401511680151590816125ad575b506125835760406101005101511580612576575b61254c5760608301519567ffffffffffffffff6020850151169673ffffffffffffffffffffffffffffffffffffffff85511660408601511515906080870151926040519a611f798c61143b565b60008c528960208d015267ffffffffffffffff421660408d015260608c0152600060808c015260a08b015260c08a015273ffffffffffffffffffffffffffffffffffffffff8a1660e08a015261010089015261012088015260005b602088015160c08901516120dd609d60e08c015160408d01518d60608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b8201907fffffffff000000000000000000000000000000000000000000000000000000008860e01b169082015203607d810184520182611458565b51902080600052600260205260406000205415612103575060010163ffffffff16611fd4565b905097969293909495919780845280600052600260205260406000209184518355602085015160018401556121df6002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b85789946122c16006840154611a94565b601f81116124f1575b50602090601f8311600114612424576006929160009183612419575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b6060810151806123c9575b5073ffffffffffffffffffffffffffffffffffffffff9060019561234a8660e0516115c2565b526123578560e0516115c2565b5060a08101516123698660c0516115c2565b528261237b86602060a05101516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff8b1693a401919290611ec2565b6123e29193506000526002602052604060002054151590565b156123ef57869138612324565b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b0151905038806122e6565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0851681106124d65750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0600697161061249f575b505050811b01910155612319565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612491565b8183015184558d985060019093019260209283019201612435565b90919293949550600684016000526020600020601f840160051c810160208510612545575b908c979695949392915b601f830160051c820181106125365750506122ca565b600081558d9850600101612520565b5080612516565b60046040517f157bd4c3000000000000000000000000000000000000000000000000000000008152fd5b5060408301511515611f2c565b60046040517f08e8b937000000000000000000000000000000000000000000000000000000008152fd5b905067ffffffffffffffff4216101538611f18565b60046040517fbf37b20e000000000000000000000000000000000000000000000000000000008152fd5b612608903d806000833e6126008183611458565b810190611cbd565b6101005238611e99565b6040513d6000823e3d90fd5b929094939161262b611c47565b50855193612637611c47565b9461264181611c61565b6020870152604051907fa2ea7c6e00000000000000000000000000000000000000000000000000000000825282600483015260008260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561261257600092612d32575b508151156125c257929790916126d684611d84565b986126e085611c61565b946000935b818510612702575050505050956126fd949596613520565b815290565b919593989496999092976127168a846115c2565b519a67ffffffffffffffff60208d0151168015159081612d1d575b506125835760408901511580612d10575b61254c57899860608d01518d602081015167ffffffffffffffff1691815173ffffffffffffffffffffffffffffffffffffffff1690604083015115159260800151936040519e8f906127938261143b565b6000825260208201524267ffffffffffffffff166040820152606001528d608081016000905260a0015260c08d015273ffffffffffffffffffffffffffffffffffffffff8b1660e08d01526101008c01526101208b015260005b60208b01518b6128be609d60c08301519260e08101519060408101519060608101519161010082015115159061012060a084015193015193604051988996602088019b8c527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16604089015260601b1660548701527fffffffffffffffff000000000000000000000000000000000000000000000000809260c01b16606887015260c01b16607085015260f81b6078840152607983015280516120a2816099936020858701910161121b565b519020806000526002602052604060002054156128e4575060010163ffffffff166127ed565b90509d979b9199929a949d9c909698939c80845280600052600260205260406000209184518355602085015160018401556129c66002840167ffffffffffffffff6040880151168154907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff000000000000000060608b015160401b1692161717815567ffffffffffffffff6080880151167fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff77ffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b60a085015160038401556004830173ffffffffffffffffffffffffffffffffffffffff60c0870151167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556005830173ffffffffffffffffffffffffffffffffffffffff60e0870151168154907fffffffffffffffffffffff00000000000000000000000000000000000000000074ff00000000000000000000000000000000000000006101008a0151151560a01b1692161717905561012085015192835167ffffffffffffffff81116113b8578894612aa86006840154611a94565b601f8111612cb5575b50602090601f8311600114612be8576006929160009183612bdd575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179101555b8d8b8b606084015180612bb0575b5086602073ffffffffffffffffffffffffffffffffffffffff95948794612b46848660019e612b4083612b5e9a6115c2565b526115c2565b50612b568460a0890151926115c2565b5201516115c2565b5251166040519182527f8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35602073ffffffffffffffffffffffffffffffffffffffff881693a4019290919293949a6126e5565b92505050612bcd9193506000526002602052604060002054151590565b156123ef5785918d8b8b38612b0e565b015190503880612acd565b906006840160005260206000209160005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085168110612c9a5750918391600193837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06006971610612c63575b505050811b01910155612b00565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080612c55565b8183015184558c985060019093019260209283019201612bf9565b90919293949550600684016000526020600020601f840160051c810160208510612d09575b908b979695949392915b601f830160051c82018110612cfa575050612ab1565b600081558c9850600101612ce4565b5080612cda565b5060408c01511515612742565b905067ffffffffffffffff4216101538612731565b612d489192503d806000833e6126008183611458565b90386126c1565b939291936040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815281600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561261257600091612fb1575b508051156125c2578251612de081611d84565b92612dea82611c61565b9460005b838110612e045750505050611399949550613701565b612e0e81836115c2565b5190815160005260028060205260406000208054156123ef57856001820154036125c2578c73ffffffffffffffffffffffffffffffffffffffff6005830154911673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8282015460801c16612f5d5790810180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff00000000000000000000000000000000161790556001928c9190612ee282611ae7565b612eec858c6115c2565b52612ef7848b6115c2565b506020810151612f07858d6115c2565b527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff87816004870154169451950154956040519586521693a401612dee565b60046040517f905e7107000000000000000000000000000000000000000000000000000000008152fd5b60046040517f4ca88867000000000000000000000000000000000000000000000000000000008152fd5b612fc691503d806000833e6126008183611458565b38612dcd565b90949392916040517fa2ea7c6e00000000000000000000000000000000000000000000000000000000815282600482015260008160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612612576000916131ed575b508051156125c257865161305e81611d84565b9261306882611c61565b9460005b8381106130825750505050611399959650613900565b61308c818c6115c2565b519081516000526002918260205260406000208054156123ef57846001820154036125c257600581015473ffffffffffffffffffffffffffffffffffffffff871673ffffffffffffffffffffffffffffffffffffffff821603612f875760a01c60ff161561254c5767ffffffffffffffff8482015460801c16612f5d5792830180547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff164260801b77ffffffffffffffff000000000000000000000000000000001617905560019261315d81611ae7565b613167848b6115c2565b52613172838a6115c2565b506020820151613182848c6115c2565b528373ffffffffffffffffffffffffffffffffffffffff6004830154169251910154916040519182527ff930a6e2523c9cc298691873087a740550b8fc85a0680830414c148ed927f615602073ffffffffffffffffffffffffffffffffffffffff891693a40161306c565b61320291503d806000833e6126008183611458565b3861304b565b60408101906040815282518092526060810160608360051b830101926020809501916000905b82821061327157505050508281830391015281808451928381520193019160005b82811061325d575050505090565b83518552938101939281019260010161324f565b909192959485806132ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089600196030186528a51611300565b979801949391909101910161322e565b9092918351936001908186146134ff5773ffffffffffffffffffffffffffffffffffffffff602080950151169182156134cf579560009687915b8083106133c1575050509183929161333f9492876040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af19081156126125760009161338d575b509050156133635761139990614091565b60046040517fe8bee839000000000000000000000000000000000000000000000000000000008152fd5b82813d83116133ba575b6133a18183611458565b8101031261025957506133b390611cb0565b8038613352565b503d613397565b909197966133cf89876115c2565b5180151580613449575b61341f578181116133f5578084920398019801909190916132f6565b60046040517f11011294000000000000000000000000000000000000000000000000000000008152fd5b60046040517f1574f9f3000000000000000000000000000000000000000000000000000000008152fd5b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613490575b50156133d9565b908982813d83116134be575b6134a68183611458565b8101031261025957506134b890611cb0565b38613489565b503d61349c565b513d6000823e3d90fd5b9594505050905060005b8281106134e95750505050600090565b6134f381836115c2565b5161341f5783016134d9565b6113999550613519915061351290611586565b5191611586565b5191613ad8565b9093918451946001908187146136e45773ffffffffffffffffffffffffffffffffffffffff602080950151169182156136b3579660009788915b80831061360357505050918392916135a39492886040518097819582947f91db0b7e00000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916135cf575b50905015613363576135c6575090565b61139990614091565b82813d83116135fc575b6135e38183611458565b8101031261025957506135f590611cb0565b80386135b6565b503d6135d9565b909198976136118a876115c2565b5180151580613637575b61341f578181116133f55780849203990199019091909161355a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c5575060009161367e575b501561361b565b908982813d83116136ac575b6136948183611458565b8101031261025957506136a690611cb0565b38613677565b503d61368a565b969550505091505060005b8281106136ce5750505050600090565b6136d881836115c2565b5161341f5783016136be565b61139996506136fa915061351290959495611586565b5191613c5f565b9092918351936001908186146138e65773ffffffffffffffffffffffffffffffffffffffff602080950151169182156138b6579560009687915b80831061380657505050918392916137849492876040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916137d2575b509050156137a85761139990614091565b60046040517fbf2f3a8b000000000000000000000000000000000000000000000000000000008152fd5b82813d83116137ff575b6137e68183611458565b8101031261025957506137f890611cb0565b8038613797565b503d6137dc565b9091979661381489876115c2565b518015158061383a575b61341f578181116133f55780849203980198019091909161373b565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613881575b501561381e565b908982813d83116138af575b6138978183611458565b8101031261025957506138a990611cb0565b3861387a565b503d61388d565b9594505050905060005b8281106138d05750505050600090565b6138da81836115c2565b5161341f5783016138c0565b61139995506138f9915061351290611586565b5191613dc7565b909391845194600190818714613abb5773ffffffffffffffffffffffffffffffffffffffff60208095015116918215613a8a579660009788915b8083106139da57505050918392916139839492886040518097819582947f88e5b2d900000000000000000000000000000000000000000000000000000000845260048401613208565b03925af1908115612612576000916139a6575b509050156137a8576135c6575090565b82813d83116139d3575b6139ba8183611458565b8101031261025957506139cc90611cb0565b8038613996565b503d6139b0565b909198976139e88a876115c2565b5180151580613a0e575b61341f578181116133f55780849203990199019091909161393a565b50604080517fce46e04600000000000000000000000000000000000000000000000000000000815289816004818b5afa9182156134c55750600091613a55575b50156139f2565b908982813d8311613a83575b613a6b8183611458565b810103126102595750613a7d90611cb0565b38613a4e565b503d613a61565b969550505091505060005b828110613aa55750505050600090565b613aaf81836115c2565b5161341f578301613a95565b6113999650613ad1915061351290959495611586565b5191613f41565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613bd8575b61341f578385116133f557613b54829186946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613ba4575b50905015613b7a57816113999103614091565b60046040517fbd8ba84d000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613bd1575b613bb88183611458565b810103126102595750613bca90611cb0565b8038613b67565b503d613bae565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613c1d575b5015613b06565b908382813d8311613c4b575b613c338183611458565b810103126102595750613c4590611cb0565b38613c16565b503d613c29565b5050505061341f57600090565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580613d3f575b61341f578486116133f557613cdb829187946040519586809481937fe60c35050000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613d0b575b50905015613b7a578290613d0157505090565b6113999103614091565b82813d8311613d38575b613d1f8183611458565b810103126102595750613d3190611cb0565b8038613cee565b503d613d15565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613d84575b5015613c8d565b908382813d8311613db2575b613d9a8183611458565b810103126102595750613dac90611cb0565b38613d7d565b503d613d90565b505050505061341f57600090565b92919273ffffffffffffffffffffffffffffffffffffffff602080920151168015613c525784151580613ec7575b61341f578385116133f557613e43829186946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613e93575b50905015613e6957816113999103614091565b60046040517fccf3bb27000000000000000000000000000000000000000000000000000000008152fd5b82813d8311613ec0575b613ea78183611458565b810103126102595750613eb990611cb0565b8038613e56565b503d613e9d565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa90811561261257600091613f0c575b5015613df5565b908382813d8311613f3a575b613f228183611458565b810103126102595750613f3490611cb0565b38613f05565b503d613f18565b93919373ffffffffffffffffffffffffffffffffffffffff602080920151168015613db95785151580614017575b61341f578486116133f557613fbd829187946040519586809481937fe49617e10000000000000000000000000000000000000000000000000000000083528760048401526024830190611300565b03925af190811561261257600091613fe3575b50905015613e69578290613d0157505090565b82813d8311614010575b613ff78183611458565b81010312610259575061400990611cb0565b8038613fd0565b503d613fed565b506040517fce46e0460000000000000000000000000000000000000000000000000000000081528281600481855afa9081156126125760009161405c575b5015613f6f565b908382813d831161408a575b6140728183611458565b81010312610259575061408490611cb0565b38614055565b503d614068565b806140995750565b80471061416257600080808093335af13d1561415d573d6140b981611499565b906140c76040519283611458565b8152600060203d92013e5b156140d957565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152fd5b6140d2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152fd5b6000818152600360205267ffffffffffffffff908160408220541661423c577f5aafceeb1c7ad58e4a84898bdee37c02c0fc46e7d24e6b60e8209449f183459f91838252600360205260408220941693847fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a3565b60046040517f2e267946000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff166000818152600460205260408120908381528160205267ffffffffffffffff80604083205416614301577f92a1f7a41a7c585a8b09e25b195e225b1d43248daca46b0faf9e0792777a22299285835260205260408220951694857fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082541617905580a4565b60046040517fec9d6eeb000000000000000000000000000000000000000000000000000000008152fd5b9061433590611c61565b60009283925b8051841015614390579361434f84866115c2565b519160005b835181101561437f5761436781856115c2565b5161437284876115c2565b5260019283019201614354565b50909460019094019390915061433b565b509250905090565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480614496575b15614400577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152614490816113e7565b51902090565b507f000000000000000000000000000000000000000000000000000000000000000046146143d7565b6020908181015190604080938183015192606081019173ffffffffffffffffffffffffffffffffffffffff948584511660005260018252846000209283549360018501905551928688511667ffffffffffffffff988985820151168882015115159060806060840151930151878151910120938a5198888a019b7fdbfdf8dc2b135c26253e00d5b6cbe6f20457e003fd526d97cea183883570de618d528a01526060890152608088015260a087015260c086015260e085015261010090818501528352610120830196838810908811176113b8576145aa86956145be946145c6998b52519020614830565b918860ff8351169183015192015192614794565b9490946145fb565b51169116036145d25750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6005811015614765578061460c5750565b600181036146725760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036146d85760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146146e157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116148245791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa1561481757815173ffffffffffffffffffffffffffffffffffffffff811615614811579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b614838614398565b906040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526144908161139c565b602081015160409182810151916060820173ffffffffffffffffffffffffffffffffffffffff9283825116600052600160205285600020908154916001830190555192519086519160208301947fa98d02348410c9c76735e0d0bb1396f4015ac2bb9615f9c2611d19d7a8a99650865288840152606083015260808201526080815260a081019481861067ffffffffffffffff8711176113b85761492d85946145be936145c6988a52519020614830565b9060ff8151168860208301519201519261479456fea164736f6c6343000813000a"; + +type EASConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EASConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EAS__factory extends ContractFactory { + constructor(...args: EASConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + registry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(registry, overrides || {}) as Promise; + } + override getDeployTransaction( + registry: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(registry, overrides || {}); + } + override attach(address: string): EAS { + return super.attach(address) as EAS; + } + override connect(signer: Signer): EAS__factory { + return super.connect(signer) as EAS__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EASInterface { + return new utils.Interface(_abi) as EASInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): EAS { + return new Contract(address, _abi, signerOrProvider) as EAS; + } +} diff --git a/deployments/ink-sepolia/types/factories/contracts/Indexer__factory.ts b/deployments/ink-sepolia/types/factories/contracts/Indexer__factory.ts new file mode 100644 index 00000000..3c175e72 --- /dev/null +++ b/deployments/ink-sepolia/types/factories/contracts/Indexer__factory.ts @@ -0,0 +1,432 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, + AddressLike, + ContractDeployTransaction, + ContractRunner, +} from "ethers"; +import type { NonPayableOverrides } from "../../common"; +import type { Indexer, IndexerInterface } from "../../contracts/Indexer"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEAS", + name: "eas", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "InvalidAttestation", + type: "error", + }, + { + inputs: [], + name: "InvalidEAS", + type: "error", + }, + { + inputs: [], + name: "InvalidOffset", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + name: "Indexed", + type: "event", + }, + { + inputs: [], + name: "getEAS", + outputs: [ + { + internalType: "contract IEAS", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + ], + name: "getReceivedAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getReceivedAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + ], + name: "getSchemaAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getSchemaAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + ], + name: "getSchemaAttesterRecipientAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getSchemaAttesterRecipientAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + ], + name: "getSentAttestationUIDCount", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "bytes32", + name: "schemaUID", + type: "bytes32", + }, + { + internalType: "uint256", + name: "start", + type: "uint256", + }, + { + internalType: "uint256", + name: "length", + type: "uint256", + }, + { + internalType: "bool", + name: "reverseOrder", + type: "bool", + }, + ], + name: "getSentAttestationUIDs", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationUID", + type: "bytes32", + }, + ], + name: "indexAttestation", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32[]", + name: "attestationUIDs", + type: "bytes32[]", + }, + ], + name: "indexAttestations", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "attestationUID", + type: "bytes32", + }, + ], + name: "isAttestationIndexed", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x61010060405234801561001157600080fd5b506040516111b13803806111b183398101604081905261003091610077565b6001608052600360a052600060c0526001600160a01b038116610066576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b031660e0526100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b60805160a05160c05160e0516110ca6100e7600039600081816101ea01526108330152600061034c01526000610323015260006102fa01526110ca6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715ecdf61161008c578063b616352a11610066578063b616352a1461026d578063bbbdc81814610282578063ea51994b14610295578063ec864cba146102e057600080fd5b8063715ecdf61461021457806389a82fbe14610227578063af288efe1461025a57600080fd5b806354fd4d50116100bd57806354fd4d501461019b57806363bbf81b146101b057806365c40b9c146101d057600080fd5b80632412e9cc146100e4578063288a0a7b146101385780632f45f90e1461017b575b600080fd5b6101256100f2366004610b38565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b6040519081526020015b60405180910390f35b610125610146366004610b38565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600160209081526040808320938352929052205490565b610125610189366004610b64565b60009081526003602052604090205490565b6101a36102f3565b60405161012f9190610ba1565b6101c36101be366004610c00565b610396565b60405161012f9190610c41565b60405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161012f565b6101c3610222366004610c85565b610410565b61024a610235366004610b64565b60009081526004602052604090205460ff1690565b604051901515815260200161012f565b6101c3610268366004610cec565b6104ad565b61028061027b366004610d42565b61053c565b005b610280610290366004610b64565b610577565b6101256102a3366004610db7565b600092835260026020908152604080852073ffffffffffffffffffffffffffffffffffffffff948516865282528085209290931684525290205490565b6101c36102ee366004610cec565b610583565b606061031e7f000000000000000000000000000000000000000000000000000000000000000061060a565b6103477f000000000000000000000000000000000000000000000000000000000000000061060a565b6103707f000000000000000000000000000000000000000000000000000000000000000061060a565b60405160200161038293929190610df9565b604051602081830303815290604052905090565b6060610405600360008781526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156103f857602002820191906000526020600020905b8154815260200190600101908083116103e4575b50505050508585856106c8565b90505b949350505050565b600086815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff808a168552908352818420908816845282529182902080548351818402810184019094528084526060936104a293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208181526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b9695505050505050565b8060005b818110156105715761056984848381811061055d5761055d610e6f565b905060200201356107e7565b600101610540565b50505050565b610580816107e7565b50565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600160209081526040808320878452825291829020805483518184028101840190945280845260609361053293909291908301828280156103f857602002820191906000526020600020908154815260200190600101908083116103e45750505050508585856106c8565b6060600061061783610a33565b600101905060008167ffffffffffffffff81111561063757610637610e9e565b6040519080825280601f01601f191660200182016040528015610661576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461066b57509392505050565b835160609060008190036106ec575050604080516000815260208101909152610408565b808510610725576040517f01da157200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8385810182101561073557508481035b60008167ffffffffffffffff81111561075057610750610e9e565b604051908082528060200260200182016040528015610779578160200160208202803683370190505b50905060005b828110156107db5788866107955781890161079e565b81890160010185035b815181106107ae576107ae610e6f565b60200260200101518282815181106107c8576107c8610e6f565b602090810291909101015260010161077f565b50979650505050505050565b60008181526004602052604090205460ff16156108015750565b6040517fa3112a64000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a3112a6490602401600060405180830381865afa15801561088f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108d59190810190610fc6565b805190915080610911576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e082015160c0830151602080850151600087815260048352604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558383526003855281832080548083018255908452858420018a905573ffffffffffffffffffffffffffffffffffffffff808716808552848752838520868652875283852080548085018255908652878620018c9055908816808552828752838520868652875283852080548085018255908652878620018c905585855260028752838520908552865282842090845285528183208054918201815583529382209093018890559151909185917f2178f435e9624d54115e1d50a7313c90518a363b292678118444c0a239f11cf99190a2505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610a7c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610aa8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610ac657662386f26fc10000830492506010015b6305f5e1008310610ade576305f5e100830492506008015b6127108310610af257612710830492506004015b60648310610b04576064830492506002015b600a8310610b10576001015b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461058057600080fd5b60008060408385031215610b4b57600080fd5b8235610b5681610b16565b946020939093013593505050565b600060208284031215610b7657600080fd5b5035919050565b60005b83811015610b98578181015183820152602001610b80565b50506000910152565b6020815260008251806020840152610bc0816040850160208701610b7d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b801515811461058057600080fd5b60008060008060808587031215610c1657600080fd5b8435935060208501359250604085013591506060850135610c3681610bf2565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015610c7957835183529284019291840191600101610c5d565b50909695505050505050565b60008060008060008060c08789031215610c9e57600080fd5b863595506020870135610cb081610b16565b94506040870135610cc081610b16565b9350606087013592506080870135915060a0870135610cde81610bf2565b809150509295509295509295565b600080600080600060a08688031215610d0457600080fd5b8535610d0f81610b16565b94506020860135935060408601359250606086013591506080860135610d3481610bf2565b809150509295509295909350565b60008060208385031215610d5557600080fd5b823567ffffffffffffffff80821115610d6d57600080fd5b818501915085601f830112610d8157600080fd5b813581811115610d9057600080fd5b8660208260051b8501011115610da557600080fd5b60209290920196919550909350505050565b600080600060608486031215610dcc57600080fd5b833592506020840135610dde81610b16565b91506040840135610dee81610b16565b809150509250925092565b60008451610e0b818460208901610b7d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551610e47816001850160208a01610b7d565b60019201918201528351610e62816002840160208801610b7d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715610ef157610ef1610e9e565b60405290565b805167ffffffffffffffff81168114610f0f57600080fd5b919050565b8051610f0f81610b16565b8051610f0f81610bf2565b600082601f830112610f3b57600080fd5b815167ffffffffffffffff80821115610f5657610f56610e9e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610f9c57610f9c610e9e565b81604052838152866020858801011115610fb557600080fd5b610532846020830160208901610b7d565b600060208284031215610fd857600080fd5b815167ffffffffffffffff80821115610ff057600080fd5b90830190610140828603121561100557600080fd5b61100d610ecd565b825181526020830151602082015261102760408401610ef7565b604082015261103860608401610ef7565b606082015261104960808401610ef7565b608082015260a083015160a082015261106460c08401610f14565b60c082015261107560e08401610f14565b60e0820152610100611088818501610f1f565b9082015261012083810151838111156110a057600080fd5b6110ac88828701610f2a565b91830191909152509594505050505056fea164736f6c6343000813000a"; + +type IndexerConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: IndexerConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class Indexer__factory extends ContractFactory { + constructor(...args: IndexerConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + eas: AddressLike, + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(eas, overrides || {}); + } + override deploy( + eas: AddressLike, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(eas, overrides || {}) as Promise< + Indexer & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): Indexer__factory { + return super.connect(runner) as Indexer__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): IndexerInterface { + return new Interface(_abi) as IndexerInterface; + } + static connect(address: string, runner?: ContractRunner | null): Indexer { + return new Contract(address, _abi, runner) as unknown as Indexer; + } +} diff --git a/deployments/ink-sepolia/types/factories/contracts/SchemaRegistry__factory.ts b/deployments/ink-sepolia/types/factories/contracts/SchemaRegistry__factory.ts new file mode 100644 index 00000000..5b291100 --- /dev/null +++ b/deployments/ink-sepolia/types/factories/contracts/SchemaRegistry__factory.ts @@ -0,0 +1,170 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../../common"; +import type { + SchemaRegistry, + SchemaRegistryInterface, +} from "../../contracts/SchemaRegistry"; + +const _abi = [ + { + inputs: [], + name: "AlreadyExists", + type: "error", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + indexed: false, + internalType: "address", + name: "registerer", + type: "address", + }, + ], + name: "Registered", + type: "event", + }, + { + inputs: [], + name: "VERSION", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + name: "getSchema", + outputs: [ + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "contract ISchemaResolver", + name: "resolver", + type: "address", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "string", + name: "schema", + type: "string", + }, + ], + internalType: "struct SchemaRecord", + name: "", + type: "tuple", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "schema", + type: "string", + }, + { + internalType: "contract ISchemaResolver", + name: "resolver", + type: "address", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + ], + name: "register", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +] as const; + +const _bytecode = + "0x60808060405234610016576107b8908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816360d7a2781461029757508063a2ea7c6e146101045763ffa1ad741461004657600080fd5b3461010057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610100578051918183019083821067ffffffffffffffff8311176100d45750926100d093825282527f302e323700000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610689565b0390f35b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b5080fd5b503461010057602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610293576060808351610144816106cc565b85815285878201528585820152015235825281835280822090805191610169836106cc565b805483526001918282015491868501600273ffffffffffffffffffffffffffffffffffffffff92838616835260ff8589019660a01c16151586520188845196898354936101b585610758565b808b52948381169081156102505750600114610214575b50505050506101e1856100d097980386610717565b606087019485528251978897818952519088015251169085015251151560608401525160808084015260a0830190610689565b908094939b50528983205b82841061023d575050508501909601956101e1886100d087386101cc565b80548985018c0152928a0192810161021f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858c01525050505090151560051b86010196506101e1886100d087386101cc565b8280fd5b92939050346106625760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106625780359067ffffffffffffffff80831161065e573660238401121561065e57828201359181831161065a57366024848601011161065a576024359673ffffffffffffffffffffffffffffffffffffffff9182891680990361010057604435978815158099036102935761033b816106cc565b8281526020998a8201908152888201998a52885197848c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe099818b601f83011601610386908d610717565b808c5280828d019460240185378b0101528b6060840199808b5283518d5115158d519384938185019687915180926103bd92610666565b84019260601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169083015260f81b6034820152036015810182526035016104059082610717565b519020998a8552848c5289852054610632579082918b600294528b8652858d528a8620925183556001968784019251167fffffffffffffffffffffff00000000000000000000000000000000000000000074ff000000000000000000000000000000000000000084549351151560a01b1692161717905501955190815194851161060657506104948654610758565b601f81116105c0575b508891601f8511600114610545578495509084939492919361051a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c19161790555b817f7d917fcbc9a29a9705ff9936ffa599500e4fd902e4486bae317414fe967b307c848351338152a251908152f35b015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff386104ba565b9294849081168785528a8520945b8b888383106105a95750505010610572575b505050811b0190556104eb565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080610565565b868601518855909601959485019487935001610553565b868352898320601f860160051c8101918b87106105fc575b601f0160051c019084905b8281106105f157505061049d565b8481550184906105e3565b90915081906105d8565b8260416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b838a517f23369fa6000000000000000000000000000000000000000000000000000000008152fd5b8680fd5b8580fd5b8380fd5b60005b8381106106795750506000910152565b8181015183820152602001610669565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936106c581518092818752878088019101610666565b0116010190565b6080810190811067ffffffffffffffff8211176106e857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e857604052565b90600182811c921680156107a1575b602083101461077257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161076756fea164736f6c6343000813000a"; + +type SchemaRegistryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: SchemaRegistryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class SchemaRegistry__factory extends ContractFactory { + constructor(...args: SchemaRegistryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): SchemaRegistry { + return super.attach(address) as SchemaRegistry; + } + override connect(signer: Signer): SchemaRegistry__factory { + return super.connect(signer) as SchemaRegistry__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): SchemaRegistryInterface { + return new utils.Interface(_abi) as SchemaRegistryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): SchemaRegistry { + return new Contract(address, _abi, signerOrProvider) as SchemaRegistry; + } +} diff --git a/deployments/ink-sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts b/deployments/ink-sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts new file mode 100644 index 00000000..b6d30c8e --- /dev/null +++ b/deployments/ink-sepolia/types/factories/contracts/eip712/proxy/EIP712Proxy__factory.ts @@ -0,0 +1,616 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Contract, + ContractFactory, + ContractTransactionResponse, + Interface, +} from "ethers"; +import type { + Signer, + AddressLike, + ContractDeployTransaction, + ContractRunner, +} from "ethers"; +import type { NonPayableOverrides } from "../../../../common"; +import type { + EIP712Proxy, + EIP712ProxyInterface, +} from "../../../../contracts/eip712/proxy/EIP712Proxy"; + +const _abi = [ + { + inputs: [ + { + internalType: "contract IEAS", + name: "eas", + type: "address", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "AccessDenied", + type: "error", + }, + { + inputs: [], + name: "DeadlineExpired", + type: "error", + }, + { + inputs: [], + name: "InvalidEAS", + type: "error", + }, + { + inputs: [], + name: "InvalidLength", + type: "error", + }, + { + inputs: [], + name: "InvalidShortString", + type: "error", + }, + { + inputs: [], + name: "InvalidSignature", + type: "error", + }, + { + inputs: [], + name: "NotFound", + type: "error", + }, + { + inputs: [ + { + internalType: "string", + name: "str", + type: "string", + }, + ], + name: "StringTooLong", + type: "error", + }, + { + inputs: [], + name: "UsedSignature", + type: "error", + }, + { + anonymous: false, + inputs: [], + name: "EIP712DomainChanged", + type: "event", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData", + name: "data", + type: "tuple", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature", + name: "signature", + type: "tuple", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct DelegatedProxyAttestationRequest", + name: "delegatedRequest", + type: "tuple", + }, + ], + name: "attestByDelegation", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "eip712Domain", + outputs: [ + { + internalType: "bytes1", + name: "fields", + type: "bytes1", + }, + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "string", + name: "version", + type: "string", + }, + { + internalType: "uint256", + name: "chainId", + type: "uint256", + }, + { + internalType: "address", + name: "verifyingContract", + type: "address", + }, + { + internalType: "bytes32", + name: "salt", + type: "bytes32", + }, + { + internalType: "uint256[]", + name: "extensions", + type: "uint256[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getAttestTypeHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + ], + name: "getAttester", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getDomainSeparator", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getEAS", + outputs: [ + { + internalType: "contract IEAS", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getName", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getRevokeTypeHash", + outputs: [ + { + internalType: "bytes32", + name: "", + type: "bytes32", + }, + ], + stateMutability: "pure", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "address", + name: "recipient", + type: "address", + }, + { + internalType: "uint64", + name: "expirationTime", + type: "uint64", + }, + { + internalType: "bool", + name: "revocable", + type: "bool", + }, + { + internalType: "bytes32", + name: "refUID", + type: "bytes32", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct AttestationRequestData[]", + name: "data", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature[]", + name: "signatures", + type: "tuple[]", + }, + { + internalType: "address", + name: "attester", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct MultiDelegatedProxyAttestationRequest[]", + name: "multiDelegatedRequests", + type: "tuple[]", + }, + ], + name: "multiAttestByDelegation", + outputs: [ + { + internalType: "bytes32[]", + name: "", + type: "bytes32[]", + }, + ], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData[]", + name: "data", + type: "tuple[]", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature[]", + name: "signatures", + type: "tuple[]", + }, + { + internalType: "address", + name: "revoker", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct MultiDelegatedProxyRevocationRequest[]", + name: "multiDelegatedRequests", + type: "tuple[]", + }, + ], + name: "multiRevokeByDelegation", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + components: [ + { + internalType: "bytes32", + name: "schema", + type: "bytes32", + }, + { + components: [ + { + internalType: "bytes32", + name: "uid", + type: "bytes32", + }, + { + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + internalType: "struct RevocationRequestData", + name: "data", + type: "tuple", + }, + { + components: [ + { + internalType: "uint8", + name: "v", + type: "uint8", + }, + { + internalType: "bytes32", + name: "r", + type: "bytes32", + }, + { + internalType: "bytes32", + name: "s", + type: "bytes32", + }, + ], + internalType: "struct Signature", + name: "signature", + type: "tuple", + }, + { + internalType: "address", + name: "revoker", + type: "address", + }, + { + internalType: "uint64", + name: "deadline", + type: "uint64", + }, + ], + internalType: "struct DelegatedProxyRevocationRequest", + name: "delegatedRequest", + type: "tuple", + }, + ], + name: "revokeByDelegation", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "version", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x6101e06040523480156200001257600080fd5b5060405162002d9f38038062002d9f83398101604081905262000035916200022c565b6040805180820190915260058152640312e332e360dc1b60208201526001608052600360a052600060c0819052829190620000729083906200016b565b61018052620000838160016200016b565b6101a052815160208084019190912061014052815190820120610160524661010052620001146101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b03821662000146576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600262000162828262000396565b505050620004bc565b60006020835110156200018b576200018383620001a4565b90506200019e565b8162000198848262000396565b5060ff90505b92915050565b600080829050601f81511115620001db578260405163305a27a960e01b8152600401620001d2919062000462565b60405180910390fd5b8051620001e88262000497565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200022357818101518382015260200162000209565b50506000910152565b600080604083850312156200024057600080fd5b82516001600160a01b03811681146200025857600080fd5b60208401519092506001600160401b03808211156200027657600080fd5b818501915085601f8301126200028b57600080fd5b815181811115620002a057620002a0620001f0565b604051601f8201601f19908116603f01168101908382118183101715620002cb57620002cb620001f0565b81604052828152886020848701011115620002e557600080fd5b620002f883602083016020880162000206565b80955050505050509250929050565b600181811c908216806200031c57607f821691505b6020821081036200033d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039157600081815260208120601f850160051c810160208610156200036c5750805b601f850160051c820191505b818110156200038d5782815560010162000378565b5050505b505050565b81516001600160401b03811115620003b257620003b2620001f0565b620003ca81620003c3845462000307565b8462000343565b602080601f831160018114620004025760008415620003e95750858301515b600019600386901b1c1916600185901b1785556200038d565b600085815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b5085821015620004525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200048381604085016020870162000206565b601f01601f19169190910160400192915050565b805160208083015191908110156200033d5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516128406200055f600039600081816101e4015281816104d1015281816105e901528181610a9d0152610c7e015260006107f8015260006107ce01526000611402015260006113da015260006113350152600061135f01526000611389015260006107760152600061074d0152600061072401526128406000f3fe6080604052600436106100c75760003560e01c806365c40b9c11610074578063a6d4dbc71161004e578063a6d4dbc714610250578063b83010d314610263578063ed24911d1461029657600080fd5b806365c40b9c146101d557806384b0196e14610208578063954115251461023057600080fd5b806317d7de7c116100a557806317d7de7c1461018b5780633c042715146101ad57806354fd4d50146101c057600080fd5b80630eabf660146100cc57806310d736d5146100e157806312b11a171461014e575b600080fd5b6100df6100da366004611a29565b6102ab565b005b3480156100ed57600080fd5b506101246100fc366004611a6b565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561015a57600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b604051908152602001610145565b34801561019757600080fd5b506101a0610540565b6040516101459190611af2565b61017d6101bb366004611b0c565b6105d2565b3480156101cc57600080fd5b506101a061071d565b3480156101e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610124565b34801561021457600080fd5b5061021d6107c0565b6040516101459796959493929190611b47565b61024361023e366004611a29565b610864565b6040516101459190611c06565b6100df61025e366004611c4a565b610c65565b34801561026f57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d61017d565b3480156102a257600080fd5b5061017d610d65565b8060008167ffffffffffffffff8111156102c7576102c7611c63565b60405190808252806020026020018201604052801561030d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102e55790505b50905060005b8281101561049357600085858381811061032f5761032f611c92565b90506020028101906103419190611cc1565b61034a90611f2e565b602081015180519192509080158061036757508260400151518114155b1561039e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156104485760008382815181106103bd576103bd611c92565b6020026020010151905061043f6040518060a0016040528087600001518152602001838152602001876040015185815181106103fb576103fb611c92565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250610d74565b506001016103a1565b506040518060400160405280846000015181526020018381525085858151811061047457610474611c92565b602002602001018190525050505061048c8160010190565b9050610313565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610508908590600401612029565b6000604051808303818588803b15801561052157600080fd5b505af1158015610535573d6000803e3d6000fd5b505050505050505050565b60606002805461054f906120f8565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906120f8565b80156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e56105e083612269565b610fd0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e73460405180604001604052808760000135815260200187806020019061064991906122e2565b61065290612316565b8152506040518363ffffffff1660e01b81526004016106719190612395565b60206040518083038185885af115801561068f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106b491906123c2565b90506106c660c0840160a085016123db565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606107487f00000000000000000000000000000000000000000000000000000000000000006111b2565b6107717f00000000000000000000000000000000000000000000000000000000000000006111b2565b61079a7f00000000000000000000000000000000000000000000000000000000000000006111b2565b6040516020016107ac939291906123f6565b604051602081830303815290604052905090565b6000606080828080836107f37f000000000000000000000000000000000000000000000000000000000000000083611270565b61081e7f00000000000000000000000000000000000000000000000000000000000000006001611270565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160008167ffffffffffffffff81111561088257610882611c63565b6040519080825280602002602001820160405280156108c857816020015b6040805180820190915260008152606060208201528152602001906001900390816108a05790505b50905060005b82811015610a9857368686838181106108e9576108e9611c92565b90506020028101906108fb9190611cc1565b905036600061090d602084018461246c565b90925090508080158061092e575061092860408501856124d4565b90508114155b15610965576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a4657610a3e6040518060a001604052808760000135815260200186868581811061099a5761099a611c92565b90506020028101906109ac91906122e2565b6109b590612316565b81526020016109c760408901896124d4565b858181106109d7576109d7611c92565b9050606002018036038101906109ed919061253b565b8152602001610a026080890160608a016123db565b73ffffffffffffffffffffffffffffffffffffffff168152602001610a2d60a0890160808a01612557565b67ffffffffffffffff169052610fd0565b600101610968565b50604080518082019091528435815260208101610a638486612572565b815250868681518110610a7857610a78611c92565b602002602001018190525050505050610a918160010190565b90506108ce565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610af591906125e6565b60006040518083038185885af1158015610b13573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b5a91908101906126d9565b90506000805b84811015610c575736888883818110610b7b57610b7b611c92565b9050602002810190610b8d9190611cc1565b9050366000610b9f602084018461246c565b90925090508060005b81811015610c4157610bc060808601606087016123db565b600360008a8a81518110610bd657610bd6611c92565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866001019650610c3a8160010190565b9050610ba8565b5050505050610c508160010190565b9050610b60565b509093505050505b92915050565b610c7c610c773683900383018361276a565b610d74565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663469262673460405180604001604052808560000135815260200185602001803603810190610ce291906127d6565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b158015610d4957600080fd5b505af1158015610d5d573d6000803e3d6000fd5b505050505050565b6000610d6f61131b565b905090565b608081015167ffffffffffffffff1615801590610da857504267ffffffffffffffff16816080015167ffffffffffffffff16105b15610ddf576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680610e44576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163314610e93576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151610ea181611453565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c0820152600090610f479060e0015b60405160208183030381529060405280519060200120611561565b9050846060015173ffffffffffffffffffffffffffffffffffffffff16610f7c828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff161580159061100457504267ffffffffffffffff16816080015167ffffffffffffffff16105b1561103b576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161104e81611453565b600061112a7fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d60800151604051602001610f2c9a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661115f828460000151856020015186604001516115a9565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060006111bf836115d1565b600101905060008167ffffffffffffffff8111156111df576111df611c63565b6040519080825280601f01601f191660200182016040528015611209576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461121357509392505050565b606060ff831461128a57611283836116b3565b9050610c5f565b818054611296906120f8565b80601f01602080910402602001604051908101604052809291908181526020018280546112c2906120f8565b801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b50505050509050610c5f565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561138157507f000000000000000000000000000000000000000000000000000000000000000046145b156113ab57507f000000000000000000000000000000000000000000000000000000000000000090565b610d6f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b8051602080830151604080850151905160f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016928401929092526021830152604182015260009060610160405160208183030381529060405290506004816040516114c391906127f2565b9081526040519081900360200190205460ff161561150d576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160048260405161151f91906127f2565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b6000610c5f61156e61131b565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b60008060006115ba878787876116f2565b915091506115c7816117e1565b5095945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061161a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061166457662386f26fc10000830492506010015b6305f5e100831061167c576305f5e100830492506008015b612710831061169057612710830492506004015b606483106116a2576064830492506002015b600a8310610c5f5760010192915050565b606060006116c08361199c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561172957506000905060036117d8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561177d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166117d1576000600192509250506117d8565b9150600090505b94509492505050565b60008160048111156117f5576117f5612804565b036117fd5750565b600181600481111561181157611811612804565b0361187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561189157611891612804565b036118f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611874565b600381600481111561190c5761190c612804565b03611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611874565b50565b600060ff8216601f811115610c5f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f8401126119ef57600080fd5b50813567ffffffffffffffff811115611a0757600080fd5b6020830191508360208260051b8501011115611a2257600080fd5b9250929050565b60008060208385031215611a3c57600080fd5b823567ffffffffffffffff811115611a5357600080fd5b611a5f858286016119dd565b90969095509350505050565b600060208284031215611a7d57600080fd5b5035919050565b60005b83811015611a9f578181015183820152602001611a87565b50506000910152565b60008151808452611ac0816020860160208601611a84565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b056020830184611aa8565b9392505050565b600060208284031215611b1e57600080fd5b813567ffffffffffffffff811115611b3557600080fd5b820160e08185031215611b0557600080fd5b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611b8360e084018a611aa8565b8381036040850152611b95818a611aa8565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611bf457835183529284019291840191600101611bd8565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611c3e57835183529284019291840191600101611c22565b50909695505050505050565b60006101008284031215611c5d57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112611cf557600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715611d2257611d22611c63565b60405290565b60405160c0810167ffffffffffffffff81118282101715611d2257611d22611c63565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d9257611d92611c63565b604052919050565b600067ffffffffffffffff821115611db457611db4611c63565b5060051b60200190565b600060408284031215611dd057600080fd5b6040516040810181811067ffffffffffffffff82111715611df357611df3611c63565b604052823581526020928301359281019290925250919050565b600060608284031215611e1f57600080fd5b6040516060810181811067ffffffffffffffff82111715611e4257611e42611c63565b604052905080823560ff81168114611e5957600080fd5b8082525060208301356020820152604083013560408201525092915050565b600082601f830112611e8957600080fd5b81356020611e9e611e9983611d9a565b611d4b565b82815260609283028501820192828201919087851115611ebd57600080fd5b8387015b85811015611ee057611ed38982611e0d565b8452928401928101611ec1565b5090979650505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f1157600080fd5b919050565b803567ffffffffffffffff81168114611f1157600080fd5b600060a08236031215611f4057600080fd5b611f48611cff565b8235815260208084013567ffffffffffffffff80821115611f6857600080fd5b9085019036601f830112611f7b57600080fd5b8135611f89611e9982611d9a565b81815260069190911b83018401908481019036831115611fa857600080fd5b938501935b82851015611fd157611fbf3686611dbe565b82528582019150604085019450611fad565b80868801525050506040860135925080831115611fed57600080fd5b5050611ffb36828601611e78565b60408301525061200d60608401611eed565b606082015261201e60808401611f16565b608082015292915050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b848110156120e9578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018652825180518552880151888501889052805188860181905290890190839060608701905b808310156120d4576120c082855180518252602090810151910152565b928b019260019290920191908a01906120a3565b50978a01979550505091870191600101612051565b50919998505050505050505050565b600181811c9082168061210c57607f821691505b602082108103611c5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600082601f83011261215657600080fd5b813567ffffffffffffffff81111561217057612170611c63565b6121a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611d4b565b8181528460208386010111156121b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156121e557600080fd5b6121ed611d28565b90506121f882611eed565b815261220660208301611f16565b60208201526040820135801515811461221e57600080fd5b604082015260608281013590820152608082013567ffffffffffffffff81111561224757600080fd5b61225384828501612145565b60808301525060a082013560a082015292915050565b600060e0823603121561227b57600080fd5b612283611cff565b82358152602083013567ffffffffffffffff8111156122a157600080fd5b6122ad368286016121d3565b6020830152506122c03660408501611e0d565b60408201526122d160a08401611eed565b606082015261201e60c08401611f16565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112611cf557600080fd5b6000610c5f36836121d3565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261238160c0850182611aa8565b60a093840151949093019390935250919050565b6020815281516020820152600060208301516040808401526123ba6060840182612322565b949350505050565b6000602082840312156123d457600080fd5b5051919050565b6000602082840312156123ed57600080fd5b611b0582611eed565b60008451612408818460208901611a84565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612444816001850160208a01611a84565b6001920191820152835161245f816002840160208801611a84565b0160020195945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124a157600080fd5b83018035915067ffffffffffffffff8211156124bc57600080fd5b6020019150600581901b3603821315611a2257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261250957600080fd5b83018035915067ffffffffffffffff82111561252457600080fd5b6020019150606081023603821315611a2257600080fd5b60006060828403121561254d57600080fd5b611b058383611e0d565b60006020828403121561256957600080fd5b611b0582611f16565b6000612580611e9984611d9a565b80848252602080830192508560051b85013681111561259e57600080fd5b855b818110156125da57803567ffffffffffffffff8111156125c05760008081fd5b6125cc36828a016121d3565b8652509382019382016125a0565b50919695505050505050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156126c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b85030187528251805185528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156126b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08985030183526126a1848651612322565b948e01949350918d0191600101612667565b505050978a01979450509188019160010161260d565b50919a9950505050505050505050565b600060208083850312156126ec57600080fd5b825167ffffffffffffffff81111561270357600080fd5b8301601f8101851361271457600080fd5b8051612722611e9982611d9a565b81815260059190911b8201830190838101908783111561274157600080fd5b928401925b8284101561275f57835182529284019290840190612746565b979650505050505050565b6000610100828403121561277d57600080fd5b612785611cff565b823581526127968460208501611dbe565b60208201526127a88460608501611e0d565b60408201526127b960c08401611eed565b60608201526127ca60e08401611f16565b60808201529392505050565b6000604082840312156127e857600080fd5b611b058383611dbe565b60008251611cf5818460208701611a84565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000813000a"; + +type EIP712ProxyConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: EIP712ProxyConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class EIP712Proxy__factory extends ContractFactory { + constructor(...args: EIP712ProxyConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + eas: AddressLike, + name: string, + overrides?: NonPayableOverrides & { from?: string } + ): Promise { + return super.getDeployTransaction(eas, name, overrides || {}); + } + override deploy( + eas: AddressLike, + name: string, + overrides?: NonPayableOverrides & { from?: string } + ) { + return super.deploy(eas, name, overrides || {}) as Promise< + EIP712Proxy & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): EIP712Proxy__factory { + return super.connect(runner) as EIP712Proxy__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): EIP712ProxyInterface { + return new Interface(_abi) as EIP712ProxyInterface; + } + static connect(address: string, runner?: ContractRunner | null): EIP712Proxy { + return new Contract(address, _abi, runner) as unknown as EIP712Proxy; + } +}