// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import { IMatterAccount } from "./interfaces/IMatterAccount.sol";
import { Clones } from "./libraries/Clones.sol";
/// @title AgentRegistry
/// @notice Permanent Matter agent names, identities, attestations, and account creation.
/// @dev The immutable admin can only rotate the attester and select the implementation
/// used for future registrations. It has no authority over existing accounts.
contract AgentRegistry {
struct Agent {
uint64 id;
address owner;
address agentKey;
address account;
string name;
string metadataURI;
uint64 registeredAt;
}
error NotAdmin();
error NotAttester();
error NotAgentOwner();
error InvalidAddress();
error InvalidImplementation();
error InvalidName();
error NameUnavailable();
error AgentNotFound();
error Reentrancy();
event AgentRegistered(
uint64 indexed id, address indexed owner, address account, address agentKey, string name
);
event AgentKeyRotated(uint64 indexed id, address newKey);
event AgentOwnershipTransferred(uint64 indexed id, address newOwner);
event MetadataURISet(uint64 indexed id, string uri);
event AttestationRecorded(uint64 indexed id, bytes32 indexed kind, bytes32 dataHash);
event AttesterSet(address indexed attester);
event AccountImplementationSet(address indexed implementation);
// ABI compatibility keeps the deployed getter name lower camel case.
// forge-lint: disable-next-line(screaming-snake-case-immutable)
address public immutable admin;
address public attester;
address public accountImplementation;
uint64 private _totalAgents;
uint256 private _status = 1;
mapping(uint64 id => Agent agent) private _agents;
mapping(bytes32 nameHash => uint64 id) private _idByName;
mapping(uint64 id => mapping(bytes32 kind => bytes32 dataHash)) public attestationOf;
constructor(address admin_, address attester_, address accountImplementation_) {
if (admin_ == address(0) || attester_ == address(0)) revert InvalidAddress();
if (accountImplementation_.code.length == 0) revert InvalidImplementation();
admin = admin_;
attester = attester_;
accountImplementation = accountImplementation_;
emit AttesterSet(attester_);
emit AccountImplementationSet(accountImplementation_);
}
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
if (_status == 2) revert Reentrancy();
_status = 2;
}
function _nonReentrantAfter() private {
_status = 1;
}
function register(string calldata name, address agentKey, string calldata metadataURI)
external
nonReentrant
returns (uint64 id, address account)
{
if (agentKey == address(0)) revert InvalidAddress();
bytes memory rawName = bytes(name);
if (!_validName(rawName)) revert InvalidName();
// Readability is preferable to an assembly-only micro-optimization on registration.
// forge-lint: disable-next-line(asm-keccak256)
bytes32 nameHash = keccak256(rawName);
if (_idByName[nameHash] != 0) revert NameUnavailable();
id = _totalAgents + 1;
_totalAgents = id;
_idByName[nameHash] = id;
account = Clones.clone(accountImplementation);
IMatterAccount(account).initialize(msg.sender, agentKey, address(this), id);
_agents[id] = Agent({
id: id,
owner: msg.sender,
agentKey: agentKey,
account: account,
name: name,
metadataURI: metadataURI,
registeredAt: uint64(block.timestamp)
});
emit AgentRegistered(id, msg.sender, account, agentKey, name);
}
function rotateAgentKey(uint64 id, address newKey) external nonReentrant {
if (newKey == address(0)) revert InvalidAddress();
Agent storage agent = _ownedAgent(id);
agent.agentKey = newKey;
IMatterAccount(agent.account).syncAgentKey(newKey);
emit AgentKeyRotated(id, newKey);
}
function setMetadataURI(uint64 id, string calldata uri) external {
Agent storage agent = _ownedAgent(id);
agent.metadataURI = uri;
emit MetadataURISet(id, uri);
}
function transferAgentOwnership(uint64 id, address newOwner) external nonReentrant {
if (newOwner == address(0)) revert InvalidAddress();
Agent storage agent = _ownedAgent(id);
agent.owner = newOwner;
IMatterAccount(agent.account).syncOwner(newOwner);
emit AgentOwnershipTransferred(id, newOwner);
}
function recordAttestation(uint64 id, bytes32 kind, bytes32 dataHash) external {
if (msg.sender != attester) revert NotAttester();
if (_agents[id].id == 0) revert AgentNotFound();
attestationOf[id][kind] = dataHash;
emit AttestationRecorded(id, kind, dataHash);
}
function agentByName(string calldata name) external view returns (Agent memory) {
uint64 id = _idByName[keccak256(bytes(name))];
if (id == 0) revert AgentNotFound();
return _agents[id];
}
function agentById(uint64 id) external view returns (Agent memory) {
Agent memory agent = _agents[id];
if (agent.id == 0) revert AgentNotFound();
return agent;
}
function totalAgents() external view returns (uint64) {
return _totalAgents;
}
function setAttester(address newAttester) external {
if (msg.sender != admin) revert NotAdmin();
if (newAttester == address(0)) revert InvalidAddress();
attester = newAttester;
emit AttesterSet(newAttester);
}
function setAccountImplementation(address newImplementation) external {
if (msg.sender != admin) revert NotAdmin();
if (newImplementation.code.length == 0) revert InvalidImplementation();
accountImplementation = newImplementation;
emit AccountImplementationSet(newImplementation);
}
function _ownedAgent(uint64 id) private view returns (Agent storage agent) {
agent = _agents[id];
if (agent.id == 0) revert AgentNotFound();
if (msg.sender != agent.owner) revert NotAgentOwner();
}
function _validName(bytes memory name) private pure returns (bool) {
if (name.length < 3 || name.length > 20) return false;
for (uint256 i; i < name.length; ++i) {
bytes1 char = name[i];
if (!((char >= 0x61 && char <= 0x7a) || (char >= 0x30 && char <= 0x39) || char == 0x2d))
{
return false;
}
}
return true;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "admin_",
"type": "address",
"internalType": "address"
},
{
"name": "attester_",
"type": "address",
"internalType": "address"
},
{
"name": "accountImplementation_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AgentNotFound",
"type": "error",
"inputs": []
},
{
"name": "FailedCreateClone",
"type": "error",
"inputs": []
},
{
"name": "InvalidAddress",
"type": "error",
"inputs": []
},
{
"name": "InvalidImplementation",
"type": "error",
"inputs": []
},
{
"name": "InvalidName",
"type": "error",
"inputs": []
},
{
"name": "NameUnavailable",
"type": "error",
"inputs": []
},
{
"name": "NotAdmin",
"type": "error",
"inputs": []
},
{
"name": "NotAgentOwner",
"type": "error",
"inputs": []
},
{
"name": "NotAttester",
"type": "error",
"inputs": []
},
{
"name": "Reentrancy",
"type": "error",
"inputs": []
},
{
"name": "AccountImplementationSet",
"type": "event",
"inputs": [
{
"name": "implementation",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "AgentKeyRotated",
"type": "event",
"inputs": [
{
"name": "id",
"type": "uint64",
"indexed": true,
"internalType": "uint64"
},
{
"name": "newKey",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "AgentOwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "id",
"type": "uint64",
"indexed": true,
"internalType": "uint64"
},
{
"name": "newOwner",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "AgentRegistered",
"type": "event",
"inputs": [
{
"name": "id",
"type": "uint64",
"indexed": true,
"internalType": "uint64"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "agentKey",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "AttestationRecorded",
"type": "event",
"inputs": [
{
"name": "id",
"type": "uint64",
"indexed": true,
"internalType": "uint64"
},
{
"name": "kind",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "dataHash",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "AttesterSet",
"type": "event",
"inputs": [
{
"name": "attester",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "MetadataURISet",
"type": "event",
"inputs": [
{
"name": "id",
"type": "uint64",
"indexed": true,
"internalType": "uint64"
},
{
"name": "uri",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"name": "accountImplementation",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "admin",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "agentById",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "agentKey",
"type": "address",
"internalType": "address"
},
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "metadataURI",
"type": "string",
"internalType": "string"
},
{
"name": "registeredAt",
"type": "uint64",
"internalType": "uint64"
}
],
"internalType": "struct AgentRegistry.Agent"
}
],
"stateMutability": "view"
},
{
"name": "agentByName",
"type": "function",
"inputs": [
{
"name": "name",
"type": "string",
"internalType": "string"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "agentKey",
"type": "address",
"internalType": "address"
},
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "metadataURI",
"type": "string",
"internalType": "string"
},
{
"name": "registeredAt",
"type": "uint64",
"internalType": "uint64"
}
],
"internalType": "struct AgentRegistry.Agent"
}
],
"stateMutability": "view"
},
{
"name": "attestationOf",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "kind",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "dataHash",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "attester",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "recordAttestation",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "kind",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "dataHash",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "register",
"type": "function",
"inputs": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "agentKey",
"type": "address",
"internalType": "address"
},
{
"name": "metadataURI",
"type": "string",
"internalType": "string"
}
],
"outputs": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "rotateAgentKey",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "newKey",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setAccountImplementation",
"type": "function",
"inputs": [
{
"name": "newImplementation",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setAttester",
"type": "function",
"inputs": [
{
"name": "newAttester",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setMetadataURI",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "uri",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "totalAgents",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "transferAgentOwnership",
"type": "function",
"inputs": [
{
"name": "id",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60a03461015457601f611c8c38819003918201601f19168301916001600160401b0383118484101761015857808492606094604052833981010312610154576100478161016c565b9061006060406100596020840161016c565b920161016c565b6001600255916001600160a01b038116158015610143575b61013457823b15610125576080525f80546001600160a01b03199081166001600160a01b039384169081178355600180549092169490931693841790556040519291907f83ae38addfd65fe603eac2c4ea32b98b87684da75955ba744065b0ffd6ed67249080a27fb753c827cb8f9135e10b0530ad158974b66fbd529813549cd793e1767012750a5f80a2611b0b9081610181823960805181818160e0015281816103e40152610b590152f35b63340aafcd60e11b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b506001600160a01b03821615610078565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101545756fe60806040526004361015610011575f80fd5b5f803560e01c80630578dd1c14610c5857806305f17d7214610c1557806309766da214610b285780630c716c4a1461091957806311464fbe146108e55780633d52d39d1461078857806344b3ac0f146105f357806347b0c3b3146105c057806387fc727f146104c55780639daf85ab146103b3578063c505371214610388578063f1215ac214610261578063f5c5d5c0146101075763f851a440146100b4575f80fd5b34610104578060031936011261010457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346101045760206003193601126101045760043567ffffffffffffffff811161025d5761013c61014c913690600401611474565b6101446117e9565b5036916116a7565b602081519101208152600460205267ffffffffffffffff60408220541680156102355781604091610231935260036020522067ffffffffffffffff6005604051926101968461161d565b73ffffffffffffffffffffffffffffffffffffffff8154848116865260401c16602085015273ffffffffffffffffffffffffffffffffffffffff600182015416604085015273ffffffffffffffffffffffffffffffffffffffff600282015416606085015261020760038201611821565b608085015261021860048201611821565b60a085015201541660c082015260405191829182611542565b0390f35b6004827fe93ba223000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346101045760206003193601126101045767ffffffffffffffff6102846114e8565b61028c6117e9565b501681526003602052604081209067ffffffffffffffff6005604051936102b28561161d565b73ffffffffffffffffffffffffffffffffffffffff8154848116875260401c16602086015273ffffffffffffffffffffffffffffffffffffffff600182015416604086015273ffffffffffffffffffffffffffffffffffffffff600282015416606086015261032360038201611821565b608086015261033460048201611821565b60a086015201541660c083015267ffffffffffffffff8251161561036057604051806102318482611542565b807fe93ba2230000000000000000000000000000000000000000000000000000000060049252fd5b5034610104578060031936011261010457602067ffffffffffffffff60015460a01c16604051908152f35b5034610104576020600319360112610104576103cd6114c5565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361049d5773ffffffffffffffffffffffffffffffffffffffff16801561047557807fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782557f83ae38addfd65fe603eac2c4ea32b98b87684da75955ba744065b0ffd6ed67248280a280f35b6004827fe6c4247b000000000000000000000000000000000000000000000000000000008152fd5b6004827f7bfa4b9f000000000000000000000000000000000000000000000000000000008152fd5b5034610104576060600319360112610104576104df6114e8565b602435906044359073ffffffffffffffffffffffffffffffffffffffff84541633036105985767ffffffffffffffff1690818452600360205267ffffffffffffffff604085205416156105705760207ff732734cedf4ce4e3d09abaef92ead5647b0b5c078ddba7ee5c00c2b22fd77819183865260058252604086208587528252806040872055604051908152a380f35b6004847fe93ba223000000000000000000000000000000000000000000000000000000008152fd5b6004847fcab98054000000000000000000000000000000000000000000000000000000008152fd5b503461010457806003193601126101045773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346101045760406003193601126101045761060d6114e8565b6106156114a2565b9061061e6118df565b73ffffffffffffffffffffffffffffffffffffffff82169182156107605773ffffffffffffffffffffffffffffffffffffffff600285926106b061066186611a72565b9182907fffffffff0000000000000000000000000000000000000000ffffffffffffffff7bffffffffffffffffffffffffffffffffffffffff000000000000000083549260401b169116179055565b015416803b1561025d578180916024604051809481937f607ec7ad0000000000000000000000000000000000000000000000000000000083528960048401525af180156107555761073c575b5050602067ffffffffffffffff7f122a2af13a3b142031e250e4bf6d7f6b8fe0ff1cb5351e4f935a24b7782c3809926040519485521692a2600160025580f35b8161074691611666565b61075157825f6106fc565b8280fd5b6040513d84823e3d90fd5b6004847fe6c4247b000000000000000000000000000000000000000000000000000000008152fd5b5034610104576040600319360112610104576107a26114e8565b73ffffffffffffffffffffffffffffffffffffffff6107bf6114a2565b6107c76118df565b169081156108bd578273ffffffffffffffffffffffffffffffffffffffff60026107f084611a72565b60018101867fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055015416803b1561025d578180916024604051809481937f6cb65f7d0000000000000000000000000000000000000000000000000000000083528960048401525af18015610755576108a8575b5050602067ffffffffffffffff7fd64376f18be8428509b22336708f8de79ef2a0563b53f35bae3251e8c22a2ae2926040519485521692a2600160025580f35b816108b291611666565b61075157825f610868565b6004837fe6c4247b000000000000000000000000000000000000000000000000000000008152fd5b5034610104578060031936011261010457602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b5034610104576040600319360112610104576109336114e8565b60243567ffffffffffffffff811161075157610953903690600401611474565b9190600461096083611a72565b0167ffffffffffffffff8411610afb576109848461097e835461170b565b8361175c565b8385601f8211600114610a2957927fb593f5f78ce1b84785f596dd50109896d3d7e108935c59c7e19ef559780ecc6494926109ff83610a189467ffffffffffffffff978b91610a1e575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b60405193849360208552169560208401916117ab565b0390a280f35b90508401355f6109ce565b828752602087209186907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016885b818110610ae057509267ffffffffffffffff95927fb593f5f78ce1b84785f596dd50109896d3d7e108935c59c7e19ef559780ecc64979592610a189510610aa8575b5050600187811b019055610a02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88a60031b161c19908401351690555f80610a99565b86840135855560019094019360209384019389935001610a57565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461010457602060031936011261010457610b426114c5565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361049d57803b15610bed5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fb753c827cb8f9135e10b0530ad158974b66fbd529813549cd793e1767012750a8280a280f35b6004827f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b503461010457604060031936011261010457604060209167ffffffffffffffff610c3d6114e8565b16815260058352818120602435825283522054604051908152f35b50346113a35760606003193601126113a35760043567ffffffffffffffff81116113a357610c8a903690600401611474565b610c926114a2565b906044359267ffffffffffffffff84116113a357610cc973ffffffffffffffffffffffffffffffffffffffff943690600401611474565b949093610cd46118df565b1694851561144c57610ce73684846116a7565b610cf081611916565b15611424576020815191012094855f52600460205267ffffffffffffffff60405f2054166113fc5760015495600167ffffffffffffffff8860a01c16019667ffffffffffffffff88116113cf577fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff000000000000000000000000000000000000000067ffffffffffffffff8a169960a01b169116176001555f52600460205260405f20867fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790556e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff000000000000000000000000000000600154763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b161760205273ffffffffffffffffffffffffffffffffffffffff603760095ff0169485156113a757853b156113a3576040517f3fe3f1cf0000000000000000000000000000000000000000000000000000000081523360048201528860248201523060448201528760648201525f81608481838b5af1801561139857611383575b5060405192610eae8461161d565b878452602084019233845260408501928a8452606086019089825236610ed5908a8a6116a7565b92608088019384523690610ee8926116a7565b60a087019081524267ffffffffffffffff90811660c089019081528c86526003602052604080872099518a5499517bffffffffffffffffffffffffffffffffffffffff0000000000000000921b9190911692167fffffffff0000000000000000000000000000000000000000000000000000000090981697909717178755935173ffffffffffffffffffffffffffffffffffffffff16600187019073ffffffffffffffffffffffffffffffffffffffff1681547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790555173ffffffffffffffffffffffffffffffffffffffff16600286019073ffffffffffffffffffffffffffffffffffffffff1681547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905560038501905180519067ffffffffffffffff8211611356576110458261103f855461170b565b8561175c565b602090601f83116001146112b75761109292918591836111aa575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b6004840191519081519167ffffffffffffffff831161128a576110c2836110bc865461170b565b8661175c565b602091601f84116001146111b5578a979560409c95611144867fea691e16fed2c8e24f0444149aae87c651aa5f69c269008f83fd664c8382d66a9a9767ffffffffffffffff976005978997926111aa5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b5116920191167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790556111968851928392888452602084015260608a840152339660608401916117ab565b0390a3600160025582519182526020820152f35b015190505f80611060565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416858452828420935b81811061127257509560409c9560018667ffffffffffffffff968f9c9a9688967fea691e16fed2c8e24f0444149aae87c651aa5f69c269008f83fd664c8382d66a9d9a6005991061123b575b505050811b019055611147565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f808061122e565b929360206001819287860151815501950193016111e2565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b83855281852091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416865b81811061133e5750908460019594939210611307575b505050811b019055611095565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806112fa565b929360206001819287860151815501950193016112e4565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6113909193505f90611666565b5f915f610ea0565b6040513d5f823e3d90fd5b5f80fd5b7f5cce4a94000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f05a2a96e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f430f13b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe6c4247b000000000000000000000000000000000000000000000000000000005f5260045ffd5b9181601f840112156113a35782359167ffffffffffffffff83116113a357602083818601950101116113a357565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036113a357565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036113a357565b6004359067ffffffffffffffff821682036113a357565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6020815267ffffffffffffffff825116602082015273ffffffffffffffffffffffffffffffffffffffff602083015116604082015273ffffffffffffffffffffffffffffffffffffffff604083015116606082015273ffffffffffffffffffffffffffffffffffffffff606083015116608082015260e067ffffffffffffffff60c06116136115e060808701518560a08801526101008701906114ff565b60a08701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087830301848801526114ff565b9401511691015290565b60e0810190811067ffffffffffffffff82111761163957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761163957604052565b92919267ffffffffffffffff821161163957604051916116ef601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184611666565b8294818452818301116113a3578281602093845f960137010152565b90600182811c92168015611752575b602083101461172557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161171a565b601f821161176957505050565b5f5260205f20906020601f840160051c830193106117a1575b601f0160051c01905b818110611796575050565b5f815560010161178b565b9091508190611782565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b604051906117f68261161d565b5f60c08382815282602082015282604082015282606082015260606080820152606060a08201520152565b9060405191825f8254926118348461170b565b808452936001811690811561189f575060011461185b575b5061185992500383611666565b565b90505f9291925260205f20905f915b818310611883575050906020611859928201015f61184c565b602091935080600191548385890101520191019091849261186a565b602093506118599592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f61184c565b60028054146118ee5760028055565b7fab143c06000000000000000000000000000000000000000000000000000000005f5260045ffd5b805160038110908115611a67575b50611a62575f5b8151811015611a5b577fff0000000000000000000000000000000000000000000000000000000000000060208284010151167f61000000000000000000000000000000000000000000000000000000000000008110159081611a30575b81156119d4575b81156119aa575b50156119a45760010161192b565b50505f90565b7f2d000000000000000000000000000000000000000000000000000000000000009150145f611996565b90507f300000000000000000000000000000000000000000000000000000000000000081101580611a06575b9061198f565b507f3900000000000000000000000000000000000000000000000000000000000000811115611a00565b7f7a000000000000000000000000000000000000000000000000000000000000008111159150611988565b5050600190565b505f90565b60149150115f611924565b67ffffffffffffffff165f52600360205260405f2090815467ffffffffffffffff811615611ae35760401c73ffffffffffffffffffffffffffffffffffffffff163303611abb57565b7f390772fc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe93ba223000000000000000000000000000000000000000000000000000000005f5260045ffd000000000000000000000000d397f7414041383ea1dc86940bda603b6ee77d01000000000000000000000000d397f7414041383ea1dc86940bda603b6ee77d010000000000000000000000008f4920ff59bda8ef1cedafb1130530b5bb768cfa
0x60806040526004361015610011575f80fd5b5f803560e01c80630578dd1c14610c5857806305f17d7214610c1557806309766da214610b285780630c716c4a1461091957806311464fbe146108e55780633d52d39d1461078857806344b3ac0f146105f357806347b0c3b3146105c057806387fc727f146104c55780639daf85ab146103b3578063c505371214610388578063f1215ac214610261578063f5c5d5c0146101075763f851a440146100b4575f80fd5b34610104578060031936011261010457602060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d397f7414041383ea1dc86940bda603b6ee77d01168152f35b80fd5b50346101045760206003193601126101045760043567ffffffffffffffff811161025d5761013c61014c913690600401611474565b6101446117e9565b5036916116a7565b602081519101208152600460205267ffffffffffffffff60408220541680156102355781604091610231935260036020522067ffffffffffffffff6005604051926101968461161d565b73ffffffffffffffffffffffffffffffffffffffff8154848116865260401c16602085015273ffffffffffffffffffffffffffffffffffffffff600182015416604085015273ffffffffffffffffffffffffffffffffffffffff600282015416606085015261020760038201611821565b608085015261021860048201611821565b60a085015201541660c082015260405191829182611542565b0390f35b6004827fe93ba223000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346101045760206003193601126101045767ffffffffffffffff6102846114e8565b61028c6117e9565b501681526003602052604081209067ffffffffffffffff6005604051936102b28561161d565b73ffffffffffffffffffffffffffffffffffffffff8154848116875260401c16602086015273ffffffffffffffffffffffffffffffffffffffff600182015416604086015273ffffffffffffffffffffffffffffffffffffffff600282015416606086015261032360038201611821565b608086015261033460048201611821565b60a086015201541660c083015267ffffffffffffffff8251161561036057604051806102318482611542565b807fe93ba2230000000000000000000000000000000000000000000000000000000060049252fd5b5034610104578060031936011261010457602067ffffffffffffffff60015460a01c16604051908152f35b5034610104576020600319360112610104576103cd6114c5565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d397f7414041383ea1dc86940bda603b6ee77d0116330361049d5773ffffffffffffffffffffffffffffffffffffffff16801561047557807fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782557f83ae38addfd65fe603eac2c4ea32b98b87684da75955ba744065b0ffd6ed67248280a280f35b6004827fe6c4247b000000000000000000000000000000000000000000000000000000008152fd5b6004827f7bfa4b9f000000000000000000000000000000000000000000000000000000008152fd5b5034610104576060600319360112610104576104df6114e8565b602435906044359073ffffffffffffffffffffffffffffffffffffffff84541633036105985767ffffffffffffffff1690818452600360205267ffffffffffffffff604085205416156105705760207ff732734cedf4ce4e3d09abaef92ead5647b0b5c078ddba7ee5c00c2b22fd77819183865260058252604086208587528252806040872055604051908152a380f35b6004847fe93ba223000000000000000000000000000000000000000000000000000000008152fd5b6004847fcab98054000000000000000000000000000000000000000000000000000000008152fd5b503461010457806003193601126101045773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346101045760406003193601126101045761060d6114e8565b6106156114a2565b9061061e6118df565b73ffffffffffffffffffffffffffffffffffffffff82169182156107605773ffffffffffffffffffffffffffffffffffffffff600285926106b061066186611a72565b9182907fffffffff0000000000000000000000000000000000000000ffffffffffffffff7bffffffffffffffffffffffffffffffffffffffff000000000000000083549260401b169116179055565b015416803b1561025d578180916024604051809481937f607ec7ad0000000000000000000000000000000000000000000000000000000083528960048401525af180156107555761073c575b5050602067ffffffffffffffff7f122a2af13a3b142031e250e4bf6d7f6b8fe0ff1cb5351e4f935a24b7782c3809926040519485521692a2600160025580f35b8161074691611666565b61075157825f6106fc565b8280fd5b6040513d84823e3d90fd5b6004847fe6c4247b000000000000000000000000000000000000000000000000000000008152fd5b5034610104576040600319360112610104576107a26114e8565b73ffffffffffffffffffffffffffffffffffffffff6107bf6114a2565b6107c76118df565b169081156108bd578273ffffffffffffffffffffffffffffffffffffffff60026107f084611a72565b60018101867fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055015416803b1561025d578180916024604051809481937f6cb65f7d0000000000000000000000000000000000000000000000000000000083528960048401525af18015610755576108a8575b5050602067ffffffffffffffff7fd64376f18be8428509b22336708f8de79ef2a0563b53f35bae3251e8c22a2ae2926040519485521692a2600160025580f35b816108b291611666565b61075157825f610868565b6004837fe6c4247b000000000000000000000000000000000000000000000000000000008152fd5b5034610104578060031936011261010457602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b5034610104576040600319360112610104576109336114e8565b60243567ffffffffffffffff811161075157610953903690600401611474565b9190600461096083611a72565b0167ffffffffffffffff8411610afb576109848461097e835461170b565b8361175c565b8385601f8211600114610a2957927fb593f5f78ce1b84785f596dd50109896d3d7e108935c59c7e19ef559780ecc6494926109ff83610a189467ffffffffffffffff978b91610a1e575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b60405193849360208552169560208401916117ab565b0390a280f35b90508401355f6109ce565b828752602087209186907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016885b818110610ae057509267ffffffffffffffff95927fb593f5f78ce1b84785f596dd50109896d3d7e108935c59c7e19ef559780ecc64979592610a189510610aa8575b5050600187811b019055610a02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88a60031b161c19908401351690555f80610a99565b86840135855560019094019360209384019389935001610a57565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461010457602060031936011261010457610b426114c5565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000d397f7414041383ea1dc86940bda603b6ee77d0116330361049d57803b15610bed5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fb753c827cb8f9135e10b0530ad158974b66fbd529813549cd793e1767012750a8280a280f35b6004827f68155f9a000000000000000000000000000000000000000000000000000000008152fd5b503461010457604060031936011261010457604060209167ffffffffffffffff610c3d6114e8565b16815260058352818120602435825283522054604051908152f35b50346113a35760606003193601126113a35760043567ffffffffffffffff81116113a357610c8a903690600401611474565b610c926114a2565b906044359267ffffffffffffffff84116113a357610cc973ffffffffffffffffffffffffffffffffffffffff943690600401611474565b949093610cd46118df565b1694851561144c57610ce73684846116a7565b610cf081611916565b15611424576020815191012094855f52600460205267ffffffffffffffff60405f2054166113fc5760015495600167ffffffffffffffff8860a01c16019667ffffffffffffffff88116113cf577fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff000000000000000000000000000000000000000067ffffffffffffffff8a169960a01b169116176001555f52600460205260405f20867fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790556e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff000000000000000000000000000000600154763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b161760205273ffffffffffffffffffffffffffffffffffffffff603760095ff0169485156113a757853b156113a3576040517f3fe3f1cf0000000000000000000000000000000000000000000000000000000081523360048201528860248201523060448201528760648201525f81608481838b5af1801561139857611383575b5060405192610eae8461161d565b878452602084019233845260408501928a8452606086019089825236610ed5908a8a6116a7565b92608088019384523690610ee8926116a7565b60a087019081524267ffffffffffffffff90811660c089019081528c86526003602052604080872099518a5499517bffffffffffffffffffffffffffffffffffffffff0000000000000000921b9190911692167fffffffff0000000000000000000000000000000000000000000000000000000090981697909717178755935173ffffffffffffffffffffffffffffffffffffffff16600187019073ffffffffffffffffffffffffffffffffffffffff1681547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790555173ffffffffffffffffffffffffffffffffffffffff16600286019073ffffffffffffffffffffffffffffffffffffffff1681547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905560038501905180519067ffffffffffffffff8211611356576110458261103f855461170b565b8561175c565b602090601f83116001146112b75761109292918591836111aa575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b6004840191519081519167ffffffffffffffff831161128a576110c2836110bc865461170b565b8661175c565b602091601f84116001146111b5578a979560409c95611144867fea691e16fed2c8e24f0444149aae87c651aa5f69c269008f83fd664c8382d66a9a9767ffffffffffffffff976005978997926111aa5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b5116920191167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790556111968851928392888452602084015260608a840152339660608401916117ab565b0390a3600160025582519182526020820152f35b015190505f80611060565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416858452828420935b81811061127257509560409c9560018667ffffffffffffffff968f9c9a9688967fea691e16fed2c8e24f0444149aae87c651aa5f69c269008f83fd664c8382d66a9d9a6005991061123b575b505050811b019055611147565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f808061122e565b929360206001819287860151815501950193016111e2565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b83855281852091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416865b81811061133e5750908460019594939210611307575b505050811b019055611095565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806112fa565b929360206001819287860151815501950193016112e4565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6113909193505f90611666565b5f915f610ea0565b6040513d5f823e3d90fd5b5f80fd5b7f5cce4a94000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f05a2a96e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f430f13b3000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe6c4247b000000000000000000000000000000000000000000000000000000005f5260045ffd5b9181601f840112156113a35782359167ffffffffffffffff83116113a357602083818601950101116113a357565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036113a357565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036113a357565b6004359067ffffffffffffffff821682036113a357565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6020815267ffffffffffffffff825116602082015273ffffffffffffffffffffffffffffffffffffffff602083015116604082015273ffffffffffffffffffffffffffffffffffffffff604083015116606082015273ffffffffffffffffffffffffffffffffffffffff606083015116608082015260e067ffffffffffffffff60c06116136115e060808701518560a08801526101008701906114ff565b60a08701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087830301848801526114ff565b9401511691015290565b60e0810190811067ffffffffffffffff82111761163957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761163957604052565b92919267ffffffffffffffff821161163957604051916116ef601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184611666565b8294818452818301116113a3578281602093845f960137010152565b90600182811c92168015611752575b602083101461172557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161171a565b601f821161176957505050565b5f5260205f20906020601f840160051c830193106117a1575b601f0160051c01905b818110611796575050565b5f815560010161178b565b9091508190611782565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b604051906117f68261161d565b5f60c08382815282602082015282604082015282606082015260606080820152606060a08201520152565b9060405191825f8254926118348461170b565b808452936001811690811561189f575060011461185b575b5061185992500383611666565b565b90505f9291925260205f20905f915b818310611883575050906020611859928201015f61184c565b602091935080600191548385890101520191019091849261186a565b602093506118599592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f61184c565b60028054146118ee5760028055565b7fab143c06000000000000000000000000000000000000000000000000000000005f5260045ffd5b805160038110908115611a67575b50611a62575f5b8151811015611a5b577fff0000000000000000000000000000000000000000000000000000000000000060208284010151167f61000000000000000000000000000000000000000000000000000000000000008110159081611a30575b81156119d4575b81156119aa575b50156119a45760010161192b565b50505f90565b7f2d000000000000000000000000000000000000000000000000000000000000009150145f611996565b90507f300000000000000000000000000000000000000000000000000000000000000081101580611a06575b9061198f565b507f3900000000000000000000000000000000000000000000000000000000000000811115611a00565b7f7a000000000000000000000000000000000000000000000000000000000000008111159150611988565b5050600190565b505f90565b60149150115f611924565b67ffffffffffffffff165f52600360205260405f2090815467ffffffffffffffff811615611ae35760401c73ffffffffffffffffffffffffffffffffffffffff163303611abb57565b7f390772fc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe93ba223000000000000000000000000000000000000000000000000000000005f5260045ffd
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 18,646,639 | 30 days agoSat, 25 Jul 2026 02:20:05 UTC | 0x4654e1…38f8fa | CREATE | register | 0x258b…e208 | OUT | 0x0fc9…7fec | 0 ETH |
| 17,886,025 | 31 days agoFri, 24 Jul 2026 05:08:44 UTC | 0xd68f02…a8bad1 | CREATE | register | 0x258b…e208 | OUT | 0x8999…427e | 0 ETH |
| 17,779,266 | 31 days agoFri, 24 Jul 2026 02:10:10 UTC | 0x4d81ee…c13f1f | CREATE | register | 0x258b…e208 | OUT | 0x4a10…4df0 | 0 ETH |
| 16,865,532 | 32 days agoThu, 23 Jul 2026 00:43:23 UTC | 0x91b1f7…72052a | CREATE | register | 0x258b…e208 | OUT | 0x1d3c…961e | 0 ETH |
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x4654e1…38f8fa | 30 days agoSat, 25 Jul 2026 02:20:05 UTC | 0xea691e…d66a | [0] 0x000000000000…00000004 [1] 0x000000000000…a75a27ec data: 0x000000000000000000…00000000 |
| 0xd68f02…a8bad1 | 31 days agoFri, 24 Jul 2026 05:08:44 UTC | 0xea691e…d66a | [0] 0x000000000000…00000003 [1] 0x000000000000…6463515b data: 0x000000000000000000…00000000 |
| 0x4d81ee…c13f1f | 31 days agoFri, 24 Jul 2026 02:10:10 UTC | 0xea691e…d66a | [0] 0x000000000000…00000002 [1] 0x000000000000…a842c62a data: 0x000000000000000000…00000000 |
| 0x91b1f7…72052a | 32 days agoThu, 23 Jul 2026 00:43:23 UTC | 0xea691e…d66a | [0] 0x000000000000…00000001 [1] 0x000000000000…6ee77d01 data: 0x000000000000000000…00000000 |
| 0x60a595…7ff6d3 | 32 days agoWed, 22 Jul 2026 22:08:48 UTC | 0xb753c8…750a | [0] 0x000000000000…bb768cfa |
| 0x60a595…7ff6d3 | 32 days agoWed, 22 Jul 2026 22:08:48 UTC | 0x83ae38…6724 | [0] 0x000000000000…6ee77d01 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x4654e1…38f8fa | register | 18,646,639 | 30 days agoSat, 25 Jul 2026 02:20:05 UTC | 0xbad0…27ec | IN | AgentRegistry | $0.000 ETH | 0.00003331 | |
| 0xd68f02…a8bad1 | register | 17,886,025 | 31 days agoFri, 24 Jul 2026 05:08:44 UTC | 0x8b3b…515b | IN | AgentRegistry | $0.000 ETH | 0.00003907 | |
| 0x4d81ee…c13f1f | register | 17,779,266 | 31 days agoFri, 24 Jul 2026 02:10:10 UTC | 0xaea9…c62a | IN | AgentRegistry | $0.000 ETH | 0.00003967 | |
| 0x91b1f7…72052a | register | 16,865,532 | 32 days agoThu, 23 Jul 2026 00:43:23 UTC | 0xd397…7d01 | IN | AgentRegistry | $0.000 ETH | 0.00003094 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||