epistery 1.5.1 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/build-info/5a987fca94856a824565c891c6bdbcbd.json +1 -0
- package/artifacts/build-info/cc953ddb7e66dc35eddb3e5994cb649d.json +1 -0
- package/artifacts/contracts/IAddressNaming.sol/IAddressNaming.dbg.json +4 -0
- package/artifacts/contracts/IAddressNaming.sol/IAddressNaming.json +53 -0
- package/artifacts/contracts/ICreditAccount.sol/ICreditAccount.dbg.json +4 -0
- package/artifacts/contracts/ICreditAccount.sol/ICreditAccount.json +67 -0
- package/artifacts/contracts/IUserRegistry.sol/IUserRegistry.dbg.json +4 -0
- package/artifacts/contracts/IUserRegistry.sol/IUserRegistry.json +72 -0
- package/artifacts/contracts/agent.sol/Agent.dbg.json +1 -1
- package/artifacts/contracts/agent.sol/Agent.json +2 -2
- package/contracts/IAddressNaming.sol +42 -0
- package/contracts/ICreditAccount.sol +48 -0
- package/contracts/IUserRegistry.sol +34 -0
- package/contracts/agent.sol +6 -4
- package/docs/IdentityNaming.md +46 -39
- package/package.json +1 -1
- package/routes/whitelist/index.mjs +9 -7
- package/artifacts/build-info/38fa5ceb2313552f45736ffa98317780.json +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"5a987fca94856a824565c891c6bdbcbd","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"contracts/IAddressNaming.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title IAddressNaming\n * @notice Canonical interface for resolving identity names from addresses.\n *\n * Names belong to the address itself, not to any (address, list) join.\n * Roles (\"owner\", \"admin\", \"read\", ...) remain on whitelist / ACL entries;\n * names do not. The same address may carry different per-list handles in\n * legacy WhitelistEntry.name fields, but its identity name lives behind\n * this interface.\n *\n * Implementations may be multi-tenant or single-tenant:\n * - Multi-tenant (e.g. epistery Agent.sol): the read accepts an\n * ownerAddress scope; writes are keyed by msg.sender.\n * - Single-tenant (e.g. epistery-host DomainAgent.sol): the read's\n * ownerAddress argument is accepted on the signature for ABI\n * compatibility but ignored; writes are admin-gated.\n *\n * Off-chain consumers (e.g. epistery's Utils.ResolveAddressName,\n * Utils.SetAddressName) hold against this interface, so they work\n * uniformly against either implementation without branching on\n * contract type.\n */\ninterface IAddressNaming {\n /**\n * @notice Set the human-readable name for an address.\n * @param addr The address to name\n * @param name The name string; empty string clears\n */\n function setAddressName(address addr, string memory name) external;\n\n /**\n * @notice Resolve an address to its name.\n * @param ownerAddress The naming-scope owner; ignored by single-tenant\n * implementations, used by multi-tenant ones\n * @param addr The address to resolve\n * @return The name, or empty string if unset\n */\n function getAddressName(address ownerAddress, address addr) external view returns (string memory);\n}\n"},"contracts/ICreditAccount.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title ICreditAccount\n * @notice Canonical interface for credit-bearing user accounts.\n *\n * Signatures match Steven's `UniversalTeamRegistryV4` on Polygon mainnet\n * (`0x83B25fDD25516057AaaAf8027464C8bbb2f91d5B`) so that contract can\n * declare conformance without renaming any existing methods.\n *\n * Implementations decide the conversion between native token (POL/ETH)\n * and credits. UniversalTeamRegistryV4 uses 1 POL = 1,000,000 credits.\n *\n * The user-facing surface is deposit + read. Implementation-private\n * operations (funding specific child contracts like Secrets or KeyVaults,\n * setting rate tables, etc.) are NOT part of this interface — they're\n * authorization-gated internals.\n *\n * Epistery does not yet implement credit accounting. This interface is\n * declared on the epistery side as the cross-system spec; epistery\n * contracts may adopt it later, or epistery-host may delegate credit\n * operations to rootz-v6's deployed Registry.\n */\ninterface ICreditAccount {\n /**\n * @notice Emitted when credits are added to an account.\n * @param user The user whose balance increased\n * @param amount The credit amount added\n */\n event CreditsDeposited(address indexed user, uint256 amount);\n\n /**\n * @notice Deposit credits for `user`, paying with native token.\n * The native token amount is `msg.value`; implementations convert\n * to credit units according to their rate table.\n * @param user The account to credit\n * @param amount The credit amount to deposit\n */\n function depositCredits(address user, uint256 amount) external payable;\n\n /**\n * @notice Read the current credit balance for `user`.\n * @param user The account to read\n * @return The current credit balance\n */\n function getUserCredits(address user) external view returns (uint256);\n}\n"},"contracts/IUserRegistry.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./IAddressNaming.sol\";\n\n/**\n * @title IUserRegistry\n * @notice Canonical interface for \"I am a user registry\" — the kind of\n * service that knows which addresses belong to people on this system.\n *\n * Carries IAddressNaming as a base because name resolution is a user-registry\n * responsibility. Adds a single membership predicate; implementations decide\n * what \"registered\" means in their domain:\n *\n * - epistery Agent.sol / DomainAgent.sol: addresses listed on any\n * whitelist / ACL under this contract.\n * - rootz-v6 UniversalTeamRegistryV4: addresses with a credit account,\n * authorized factory, or team membership.\n * - rootz-v6 IdentityContractV3: addresses authorized as rivets on this\n * identity.\n *\n * Off-chain code that wants to ask \"does this system know this address?\"\n * holds against this interface and gets a uniform answer.\n */\ninterface IUserRegistry is IAddressNaming {\n /**\n * @notice True if this registry has a record of the address.\n * \"Record\" is implementation-defined — membership, identity,\n * credit account, rivet registration, etc.\n * @param addr The address to check\n * @return True if the address is known to this registry\n */\n function isRegistered(address addr) external view returns (bool);\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":200},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"contracts/IAddressNaming.sol":{"ast":{"absolutePath":"contracts/IAddressNaming.sol","exportedSymbols":{"IAddressNaming":[21]},"id":22,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IAddressNaming","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"57:1023:0","text":" @title IAddressNaming\n @notice Canonical interface for resolving identity names from addresses.\n Names belong to the address itself, not to any (address, list) join.\n Roles (\"owner\", \"admin\", \"read\", ...) remain on whitelist / ACL entries;\n names do not. The same address may carry different per-list handles in\n legacy WhitelistEntry.name fields, but its identity name lives behind\n this interface.\n Implementations may be multi-tenant or single-tenant:\n - Multi-tenant (e.g. epistery Agent.sol): the read accepts an\n ownerAddress scope; writes are keyed by msg.sender.\n - Single-tenant (e.g. epistery-host DomainAgent.sol): the read's\n ownerAddress argument is accepted on the signature for ABI\n compatibility but ignored; writes are admin-gated.\n Off-chain consumers (e.g. epistery's Utils.ResolveAddressName,\n Utils.SetAddressName) hold against this interface, so they work\n uniformly against either implementation without branching on\n contract type."},"fullyImplemented":false,"id":21,"linearizedBaseContracts":[21],"name":"IAddressNaming","nameLocation":"1091:14:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"1112:165:0","text":" @notice Set the human-readable name for an address.\n @param addr The address to name\n @param name The name string; empty string clears"},"functionSelector":"3037c5ad","id":10,"implemented":false,"kind":"function","modifiers":[],"name":"setAddressName","nameLocation":"1291:14:0","nodeType":"FunctionDefinition","parameters":{"id":8,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"mutability":"mutable","name":"addr","nameLocation":"1314:4:0","nodeType":"VariableDeclaration","scope":10,"src":"1306:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4,"name":"address","nodeType":"ElementaryTypeName","src":"1306:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7,"mutability":"mutable","name":"name","nameLocation":"1334:4:0","nodeType":"VariableDeclaration","scope":10,"src":"1320:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6,"name":"string","nodeType":"ElementaryTypeName","src":"1320:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1305:34:0"},"returnParameters":{"id":9,"nodeType":"ParameterList","parameters":[],"src":"1348:0:0"},"scope":21,"src":"1282:67:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":11,"nodeType":"StructuredDocumentation","src":"1355:283:0","text":" @notice Resolve an address to its name.\n @param ownerAddress The naming-scope owner; ignored by single-tenant\n implementations, used by multi-tenant ones\n @param addr The address to resolve\n @return The name, or empty string if unset"},"functionSelector":"b715bb74","id":20,"implemented":false,"kind":"function","modifiers":[],"name":"getAddressName","nameLocation":"1652:14:0","nodeType":"FunctionDefinition","parameters":{"id":16,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13,"mutability":"mutable","name":"ownerAddress","nameLocation":"1675:12:0","nodeType":"VariableDeclaration","scope":20,"src":"1667:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12,"name":"address","nodeType":"ElementaryTypeName","src":"1667:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15,"mutability":"mutable","name":"addr","nameLocation":"1697:4:0","nodeType":"VariableDeclaration","scope":20,"src":"1689:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14,"name":"address","nodeType":"ElementaryTypeName","src":"1689:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1666:36:0"},"returnParameters":{"id":19,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20,"src":"1726:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1725:15:0"},"scope":21,"src":"1643:98:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":22,"src":"1081:662:0","usedErrors":[],"usedEvents":[]}],"src":"32:1712:0"},"id":0},"contracts/ICreditAccount.sol":{"ast":{"absolutePath":"contracts/ICreditAccount.sol","exportedSymbols":{"ICreditAccount":[48]},"id":49,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":23,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:1"},{"abstract":false,"baseContracts":[],"canonicalName":"ICreditAccount","contractDependencies":[],"contractKind":"interface","documentation":{"id":24,"nodeType":"StructuredDocumentation","src":"57:968:1","text":" @title ICreditAccount\n @notice Canonical interface for credit-bearing user accounts.\n Signatures match Steven's `UniversalTeamRegistryV4` on Polygon mainnet\n (`0x83B25fDD25516057AaaAf8027464C8bbb2f91d5B`) so that contract can\n declare conformance without renaming any existing methods.\n Implementations decide the conversion between native token (POL/ETH)\n and credits. UniversalTeamRegistryV4 uses 1 POL = 1,000,000 credits.\n The user-facing surface is deposit + read. Implementation-private\n operations (funding specific child contracts like Secrets or KeyVaults,\n setting rate tables, etc.) are NOT part of this interface — they're\n authorization-gated internals.\n Epistery does not yet implement credit accounting. This interface is\n declared on the epistery side as the cross-system spec; epistery\n contracts may adopt it later, or epistery-host may delegate credit\n operations to rootz-v6's deployed Registry."},"fullyImplemented":false,"id":48,"linearizedBaseContracts":[48],"name":"ICreditAccount","nameLocation":"1036:14:1","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":25,"nodeType":"StructuredDocumentation","src":"1057:169:1","text":" @notice Emitted when credits are added to an account.\n @param user The user whose balance increased\n @param amount The credit amount added"},"eventSelector":"39a4ec3b6d79868398fdc7602609ac7bba0e4a84df0ec6ff2007fdf0691431c7","id":31,"name":"CreditsDeposited","nameLocation":"1237:16:1","nodeType":"EventDefinition","parameters":{"id":30,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1270:4:1","nodeType":"VariableDeclaration","scope":31,"src":"1254:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26,"name":"address","nodeType":"ElementaryTypeName","src":"1254:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1284:6:1","nodeType":"VariableDeclaration","scope":31,"src":"1276:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28,"name":"uint256","nodeType":"ElementaryTypeName","src":"1276:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1253:38:1"},"src":"1231:61:1"},{"documentation":{"id":32,"nodeType":"StructuredDocumentation","src":"1298:296:1","text":" @notice Deposit credits for `user`, paying with native token.\n The native token amount is `msg.value`; implementations convert\n to credit units according to their rate table.\n @param user The account to credit\n @param amount The credit amount to deposit"},"functionSelector":"1409f160","id":39,"implemented":false,"kind":"function","modifiers":[],"name":"depositCredits","nameLocation":"1608:14:1","nodeType":"FunctionDefinition","parameters":{"id":37,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34,"mutability":"mutable","name":"user","nameLocation":"1631:4:1","nodeType":"VariableDeclaration","scope":39,"src":"1623:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33,"name":"address","nodeType":"ElementaryTypeName","src":"1623:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36,"mutability":"mutable","name":"amount","nameLocation":"1645:6:1","nodeType":"VariableDeclaration","scope":39,"src":"1637:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35,"name":"uint256","nodeType":"ElementaryTypeName","src":"1637:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1622:30:1"},"returnParameters":{"id":38,"nodeType":"ParameterList","parameters":[],"src":"1669:0:1"},"scope":48,"src":"1599:71:1","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":40,"nodeType":"StructuredDocumentation","src":"1676:151:1","text":" @notice Read the current credit balance for `user`.\n @param user The account to read\n @return The current credit balance"},"functionSelector":"81b26dda","id":47,"implemented":false,"kind":"function","modifiers":[],"name":"getUserCredits","nameLocation":"1841:14:1","nodeType":"FunctionDefinition","parameters":{"id":43,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42,"mutability":"mutable","name":"user","nameLocation":"1864:4:1","nodeType":"VariableDeclaration","scope":47,"src":"1856:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41,"name":"address","nodeType":"ElementaryTypeName","src":"1856:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1855:14:1"},"returnParameters":{"id":46,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47,"src":"1893:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44,"name":"uint256","nodeType":"ElementaryTypeName","src":"1893:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1892:9:1"},"scope":48,"src":"1832:70:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":49,"src":"1026:878:1","usedErrors":[],"usedEvents":[31]}],"src":"32:1873:1"},"id":1},"contracts/IUserRegistry.sol":{"ast":{"absolutePath":"contracts/IUserRegistry.sol","exportedSymbols":{"IAddressNaming":[21],"IUserRegistry":[63]},"id":64,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":50,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:2"},{"absolutePath":"contracts/IAddressNaming.sol","file":"./IAddressNaming.sol","id":51,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":64,"sourceUnit":22,"src":"57:30:2","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":53,"name":"IAddressNaming","nameLocations":["962:14:2"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"962:14:2"},"id":54,"nodeType":"InheritanceSpecifier","src":"962:14:2"}],"canonicalName":"IUserRegistry","contractDependencies":[],"contractKind":"interface","documentation":{"id":52,"nodeType":"StructuredDocumentation","src":"89:845:2","text":" @title IUserRegistry\n @notice Canonical interface for \"I am a user registry\" — the kind of\n service that knows which addresses belong to people on this system.\n Carries IAddressNaming as a base because name resolution is a user-registry\n responsibility. Adds a single membership predicate; implementations decide\n what \"registered\" means in their domain:\n - epistery Agent.sol / DomainAgent.sol: addresses listed on any\n whitelist / ACL under this contract.\n - rootz-v6 UniversalTeamRegistryV4: addresses with a credit account,\n authorized factory, or team membership.\n - rootz-v6 IdentityContractV3: addresses authorized as rivets on this\n identity.\n Off-chain code that wants to ask \"does this system know this address?\"\n holds against this interface and gets a uniform answer."},"fullyImplemented":false,"id":63,"linearizedBaseContracts":[63,21],"name":"IUserRegistry","nameLocation":"945:13:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":55,"nodeType":"StructuredDocumentation","src":"983:294:2","text":" @notice True if this registry has a record of the address.\n \"Record\" is implementation-defined — membership, identity,\n credit account, rivet registration, etc.\n @param addr The address to check\n @return True if the address is known to this registry"},"functionSelector":"c3c5a547","id":62,"implemented":false,"kind":"function","modifiers":[],"name":"isRegistered","nameLocation":"1291:12:2","nodeType":"FunctionDefinition","parameters":{"id":58,"nodeType":"ParameterList","parameters":[{"constant":false,"id":57,"mutability":"mutable","name":"addr","nameLocation":"1312:4:2","nodeType":"VariableDeclaration","scope":62,"src":"1304:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56,"name":"address","nodeType":"ElementaryTypeName","src":"1304:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1303:14:2"},"returnParameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62,"src":"1341:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":59,"name":"bool","nodeType":"ElementaryTypeName","src":"1341:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1340:6:2"},"scope":63,"src":"1282:65:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":64,"src":"935:414:2","usedErrors":[],"usedEvents":[]}],"src":"32:1318:2"},"id":2}},"contracts":{"contracts/IAddressNaming.sol":{"IAddressNaming":{"abi":[{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"getAddressName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string","name":"name","type":"string"}],"name":"setAddressName","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getAddressName(address,address)":"b715bb74","setAddressName(address,string)":"3037c5ad"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ownerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getAddressName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setAddressName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAddressName(address,address)\":{\"params\":{\"addr\":\"The address to resolve\",\"ownerAddress\":\"The naming-scope owner; ignored by single-tenant implementations, used by multi-tenant ones\"},\"returns\":{\"_0\":\"The name, or empty string if unset\"}},\"setAddressName(address,string)\":{\"params\":{\"addr\":\"The address to name\",\"name\":\"The name string; empty string clears\"}}},\"title\":\"IAddressNaming\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAddressName(address,address)\":{\"notice\":\"Resolve an address to its name.\"},\"setAddressName(address,string)\":{\"notice\":\"Set the human-readable name for an address.\"}},\"notice\":\"Canonical interface for resolving identity names from addresses. Names belong to the address itself, not to any (address, list) join. Roles (\\\"owner\\\", \\\"admin\\\", \\\"read\\\", ...) remain on whitelist / ACL entries; names do not. The same address may carry different per-list handles in legacy WhitelistEntry.name fields, but its identity name lives behind this interface. Implementations may be multi-tenant or single-tenant: - Multi-tenant (e.g. epistery Agent.sol): the read accepts an ownerAddress scope; writes are keyed by msg.sender. - Single-tenant (e.g. epistery-host DomainAgent.sol): the read's ownerAddress argument is accepted on the signature for ABI compatibility but ignored; writes are admin-gated. Off-chain consumers (e.g. epistery's Utils.ResolveAddressName, Utils.SetAddressName) hold against this interface, so they work uniformly against either implementation without branching on contract type.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IAddressNaming.sol\":\"IAddressNaming\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/IAddressNaming.sol\":{\"keccak256\":\"0xf8b93ac3414bd15df108ea437af325845e6c2328a079a7488d034e098326e5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d82ba022d574b496e5e059997eca06b2e6d9dffcc568863b0eefa4b0d5bdd0e\",\"dweb:/ipfs/QmbT4Dg9ky58kew75JHwruwMW61cPhZuF2dARa8StKaELb\"]}},\"version\":1}"}},"contracts/ICreditAccount.sol":{"ICreditAccount":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CreditsDeposited","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositCredits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserCredits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"depositCredits(address,uint256)":"1409f160","getUserCredits(address)":"81b26dda"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CreditsDeposited\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositCredits\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserCredits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"CreditsDeposited(address,uint256)\":{\"params\":{\"amount\":\"The credit amount added\",\"user\":\"The user whose balance increased\"}}},\"kind\":\"dev\",\"methods\":{\"depositCredits(address,uint256)\":{\"params\":{\"amount\":\"The credit amount to deposit\",\"user\":\"The account to credit\"}},\"getUserCredits(address)\":{\"params\":{\"user\":\"The account to read\"},\"returns\":{\"_0\":\"The current credit balance\"}}},\"title\":\"ICreditAccount\",\"version\":1},\"userdoc\":{\"events\":{\"CreditsDeposited(address,uint256)\":{\"notice\":\"Emitted when credits are added to an account.\"}},\"kind\":\"user\",\"methods\":{\"depositCredits(address,uint256)\":{\"notice\":\"Deposit credits for `user`, paying with native token. The native token amount is `msg.value`; implementations convert to credit units according to their rate table.\"},\"getUserCredits(address)\":{\"notice\":\"Read the current credit balance for `user`.\"}},\"notice\":\"Canonical interface for credit-bearing user accounts. Signatures match Steven's `UniversalTeamRegistryV4` on Polygon mainnet (`0x83B25fDD25516057AaaAf8027464C8bbb2f91d5B`) so that contract can declare conformance without renaming any existing methods. Implementations decide the conversion between native token (POL/ETH) and credits. UniversalTeamRegistryV4 uses 1 POL = 1,000,000 credits. The user-facing surface is deposit + read. Implementation-private operations (funding specific child contracts like Secrets or KeyVaults, setting rate tables, etc.) are NOT part of this interface \\u2014 they're authorization-gated internals. Epistery does not yet implement credit accounting. This interface is declared on the epistery side as the cross-system spec; epistery contracts may adopt it later, or epistery-host may delegate credit operations to rootz-v6's deployed Registry.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ICreditAccount.sol\":\"ICreditAccount\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/ICreditAccount.sol\":{\"keccak256\":\"0x106c366de017885ff2f9e2ecf3c6822a7972cde95c28f19dab0132ab62b9ef4a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89157a024cd18708980f20c2eabf0259451a3ff5a92ec067c7d45cca31315e67\",\"dweb:/ipfs/QmcNPfVFXqpnHWq4i9byjFzpZSJ3WJJfQgh7qfB1dp8G82\"]}},\"version\":1}"}},"contracts/IUserRegistry.sol":{"IUserRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"getAddressName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string","name":"name","type":"string"}],"name":"setAddressName","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getAddressName(address,address)":"b715bb74","isRegistered(address)":"c3c5a547","setAddressName(address,string)":"3037c5ad"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"ownerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getAddressName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setAddressName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAddressName(address,address)\":{\"params\":{\"addr\":\"The address to resolve\",\"ownerAddress\":\"The naming-scope owner; ignored by single-tenant implementations, used by multi-tenant ones\"},\"returns\":{\"_0\":\"The name, or empty string if unset\"}},\"isRegistered(address)\":{\"params\":{\"addr\":\"The address to check\"},\"returns\":{\"_0\":\"True if the address is known to this registry\"}},\"setAddressName(address,string)\":{\"params\":{\"addr\":\"The address to name\",\"name\":\"The name string; empty string clears\"}}},\"title\":\"IUserRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAddressName(address,address)\":{\"notice\":\"Resolve an address to its name.\"},\"isRegistered(address)\":{\"notice\":\"True if this registry has a record of the address. \\\"Record\\\" is implementation-defined \\u2014 membership, identity, credit account, rivet registration, etc.\"},\"setAddressName(address,string)\":{\"notice\":\"Set the human-readable name for an address.\"}},\"notice\":\"Canonical interface for \\\"I am a user registry\\\" \\u2014 the kind of service that knows which addresses belong to people on this system. Carries IAddressNaming as a base because name resolution is a user-registry responsibility. Adds a single membership predicate; implementations decide what \\\"registered\\\" means in their domain: - epistery Agent.sol / DomainAgent.sol: addresses listed on any whitelist / ACL under this contract. - rootz-v6 UniversalTeamRegistryV4: addresses with a credit account, authorized factory, or team membership. - rootz-v6 IdentityContractV3: addresses authorized as rivets on this identity. Off-chain code that wants to ask \\\"does this system know this address?\\\" holds against this interface and gets a uniform answer.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IUserRegistry.sol\":\"IUserRegistry\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/IAddressNaming.sol\":{\"keccak256\":\"0xf8b93ac3414bd15df108ea437af325845e6c2328a079a7488d034e098326e5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d82ba022d574b496e5e059997eca06b2e6d9dffcc568863b0eefa4b0d5bdd0e\",\"dweb:/ipfs/QmbT4Dg9ky58kew75JHwruwMW61cPhZuF2dARa8StKaELb\"]},\"contracts/IUserRegistry.sol\":{\"keccak256\":\"0x7d56fa638d36ef669871b65c07f8342b8bd09f5a138ddd5cff64e1090d49f806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76c9d11f44bc0c2bbccdecd25f8f025ee6a8ae25190f6d88b1ac31251edac1c1\",\"dweb:/ipfs/QmRJvZ1PmJW346FqA48aU8XBR8LhDFBMt6mUDGGPU73pmo\"]}},\"version\":1}"}}}}}
|