"""Contract ABIs for ARC-402 protocol contracts."""

ARC402Wallet_ABI = [{'inputs': [{'internalType': 'address', 'name': '_registry', 'type': 'address'},
             {'internalType': 'address', 'name': '_owner', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'constructor'},
 {'stateMutability': 'payable', 'type': 'receive'},
 {'inputs': [],
  'name': 'REGISTRY_TIMELOCK',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'SPEND_WINDOW',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'activeContextId',
  'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'activePolicyId',
  'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'activeTaskType',
  'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'action', 'type': 'string'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'},
             {'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'}],
  'name': 'attest',
  'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'authorizedInterceptor',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'cancelRegistryUpdate', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [], 'name': 'closeContext', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [],
  'name': 'contextOpen',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'contextOpenedAt',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'ethSpendingInWindow',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'executeRegistryUpdate', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'address payable', 'name': 'recipient', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'executeSpend',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'executeTokenSpend',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'freeze',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'frozen',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'frozenAt',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'frozenBy',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'getActiveContext',
  'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'},
              {'internalType': 'string', 'name': '', 'type': 'string'},
              {'internalType': 'uint256', 'name': '', 'type': 'uint256'},
              {'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'getTrustScore',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'contextId', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'taskType', 'type': 'string'}],
  'name': 'openContext',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'owner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'pendingRegistry',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'recipientWallet', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'proposeMASSettlement',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'newRegistry', 'type': 'address'}],
  'name': 'proposeRegistryUpdate',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'registry',
  'outputs': [{'internalType': 'contract ARC402RegistryV2', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'registryUpdateUnlockAt',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'interceptor', 'type': 'address'}],
  'name': 'setAuthorizedInterceptor',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'limit', 'type': 'uint256'}],
  'name': 'setVelocityLimit',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'spendingWindowStart',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'tokenSpendingInWindow',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'unfreeze', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'newPolicyId', 'type': 'bytes32'}],
  'name': 'updatePolicy',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'velocityLimit',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'contextId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
  'name': 'ContextClosed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'contextId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'string', 'name': 'taskType', 'type': 'string'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
  'name': 'ContextOpened',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'interceptor', 'type': 'address'}],
  'name': 'InterceptorUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': False, 'internalType': 'bytes32', 'name': 'newPolicyId', 'type': 'bytes32'}],
  'name': 'PolicyUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'cancelledRegistry', 'type': 'address'}],
  'name': 'RegistryUpdateCancelled',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'oldRegistry', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newRegistry', 'type': 'address'}],
  'name': 'RegistryUpdateExecuted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'newRegistry', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'unlockAt', 'type': 'uint256'}],
  'name': 'RegistryUpdateProposed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'recipientWallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'SettlementProposed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'SpendExecuted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'SpendRejected',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'TokenSpendExecuted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': False, 'internalType': 'uint256', 'name': 'newLimit', 'type': 'uint256'}],
  'name': 'VelocityLimitUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'by', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'reason', 'type': 'string'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
  'name': 'WalletFrozen',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'by', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
  'name': 'WalletUnfrozen',
  'type': 'event'},
 {'inputs': [{'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'SafeERC20FailedOperation',
  'type': 'error'}]

PolicyEngine_ABI = [{'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'addPreferred',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'addToBlocklist',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'string', 'name': '', 'type': 'string'}],
  'name': 'categoryLimits',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getPolicy',
  'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'},
              {'internalType': 'bytes', 'name': '', 'type': 'bytes'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'getPreferred',
  'outputs': [{'internalType': 'address[]', 'name': '', 'type': 'address[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'isBlocked',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'isPreferred',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'owner', 'type': 'address'}],
  'name': 'registerWallet',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'removeFromBlocklist',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'removePreferred',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'internalType': 'uint256', 'name': 'limitPerTx', 'type': 'uint256'}],
  'name': 'setCategoryLimit',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'internalType': 'uint256', 'name': 'limitPerTx', 'type': 'uint256'}],
  'name': 'setCategoryLimitFor',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'policyHash', 'type': 'bytes32'},
             {'internalType': 'bytes', 'name': 'policyData', 'type': 'bytes'}],
  'name': 'setPolicy',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'name': 'validateSpend',
  'outputs': [{'internalType': 'bool', 'name': 'valid', 'type': 'bool'},
              {'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'walletOwners',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'category', 'type': 'string'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'limitPerTx', 'type': 'uint256'}],
  'name': 'CategoryLimitSet',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'policyHash', 'type': 'bytes32'}],
  'name': 'PolicySet',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'ProviderBlocked',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'ProviderPreferred',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'ProviderUnblocked',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'ProviderUnpreferred',
  'type': 'event'}]

TrustRegistry_ABI = [{'inputs': [], 'stateMutability': 'nonpayable', 'type': 'constructor'},
 {'inputs': [],
  'name': 'DECREMENT',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'INCREMENT',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'INITIAL_SCORE',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'MAX_SCORE',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'acceptOwnership', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'addUpdater',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getScore',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getTrustLevel',
  'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'initWallet',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'isAuthorizedUpdater',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'owner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'pendingOwner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'string', 'name': '', 'type': 'string'},
             {'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'name': 'recordAnomaly',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'string', 'name': '', 'type': 'string'},
             {'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'name': 'recordSuccess',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'removeUpdater',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [], 'name': 'renounceOwnership', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'transferOwnership',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'previousOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferStarted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'previousOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferred',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'oldScore', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'newScore', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'ScoreUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'UpdaterAdded',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'UpdaterRemoved',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'score', 'type': 'uint256'}],
  'name': 'WalletInitialized',
  'type': 'event'},
 {'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}],
  'name': 'OwnableInvalidOwner',
  'type': 'error'},
 {'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}],
  'name': 'OwnableUnauthorizedAccount',
  'type': 'error'}]

IntentAttestation_ABI = [{'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'action', 'type': 'string'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'},
             {'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'}],
  'name': 'attest',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'consume',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'getAttestation',
  'outputs': [{'internalType': 'bytes32', 'name': 'id', 'type': 'bytes32'},
              {'internalType': 'address', 'name': 'wallet', 'type': 'address'},
              {'internalType': 'string', 'name': 'action', 'type': 'string'},
              {'internalType': 'string', 'name': 'reason', 'type': 'string'},
              {'internalType': 'address', 'name': 'recipient', 'type': 'address'},
              {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
              {'internalType': 'address', 'name': 'token', 'type': 'address'},
              {'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'isExpired',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'name': 'used',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'},
             {'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'verify',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'},
             {'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'AttestationConsumed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'},
             {'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'action', 'type': 'string'},
             {'indexed': False, 'internalType': 'address', 'name': 'recipient', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'}],
  'name': 'AttestationCreated',
  'type': 'event'}]

SettlementCoordinator_ABI = [{'inputs': [],
  'name': 'EXECUTION_WINDOW',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'name': 'accept',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'name': 'checkExpiry',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'name': 'execute',
  'outputs': [],
  'stateMutability': 'payable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'name': 'expireAccepted',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'name': 'getProposal',
  'outputs': [{'internalType': 'address', 'name': 'fromWallet', 'type': 'address'},
              {'internalType': 'address', 'name': 'toWallet', 'type': 'address'},
              {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
              {'internalType': 'address', 'name': 'token', 'type': 'address'},
              {'internalType': 'bytes32', 'name': 'intentId', 'type': 'bytes32'},
              {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'},
              {'internalType': 'uint256', 'name': 'acceptedAt', 'type': 'uint256'},
              {'internalType': 'enum SettlementCoordinator.ProposalStatus', 'name': 'status', 'type': 'uint8'},
              {'internalType': 'string', 'name': 'rejectionReason', 'type': 'string'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'fromWallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'toWallet', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'internalType': 'bytes32', 'name': 'intentId', 'type': 'bytes32'},
             {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'}],
  'name': 'propose',
  'outputs': [{'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'reject',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'name': 'ProposalAccepted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'},
             {'indexed': True, 'internalType': 'address', 'name': 'from', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'to', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'ProposalCreated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'}],
  'name': 'ProposalExecuted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'}],
  'name': 'ProposalExpired',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'proposalId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'ProposalRejected',
  'type': 'event'},
 {'inputs': [{'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'SafeERC20FailedOperation',
  'type': 'error'}]

AgentRegistry_ABI = [{'inputs': [{'internalType': 'address', 'name': '_trustRegistry', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'constructor'},
 {'inputs': [],
  'name': 'DEFAULT_HEARTBEAT_GRACE_PERIOD',
  'outputs': [{'internalType': 'uint64', 'name': '', 'type': 'uint64'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'DEFAULT_HEARTBEAT_INTERVAL',
  'outputs': [{'internalType': 'uint64', 'name': '', 'type': 'uint64'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'MAX_SCORE',
  'outputs': [{'internalType': 'uint32', 'name': '', 'type': 'uint32'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'agentCount',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'deactivate', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getAgent',
  'outputs': [{'components': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
                              {'internalType': 'string', 'name': 'name', 'type': 'string'},
                              {'internalType': 'string[]', 'name': 'capabilities', 'type': 'string[]'},
                              {'internalType': 'string', 'name': 'serviceType', 'type': 'string'},
                              {'internalType': 'string', 'name': 'endpoint', 'type': 'string'},
                              {'internalType': 'string', 'name': 'metadataURI', 'type': 'string'},
                              {'internalType': 'bool', 'name': 'active', 'type': 'bool'},
                              {'internalType': 'uint256', 'name': 'registeredAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'endpointChangedAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'endpointChangeCount', 'type': 'uint256'}],
               'internalType': 'struct IAgentRegistry.AgentInfo',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
  'name': 'getAgentAtIndex',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getCapabilities',
  'outputs': [{'internalType': 'string[]', 'name': '', 'type': 'string[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getEndpointStability',
  'outputs': [{'internalType': 'uint256', 'name': 'score', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getOperationalMetrics',
  'outputs': [{'components': [{'internalType': 'uint64', 'name': 'heartbeatInterval', 'type': 'uint64'},
                              {'internalType': 'uint64', 'name': 'heartbeatGracePeriod', 'type': 'uint64'},
                              {'internalType': 'uint64', 'name': 'lastHeartbeatAt', 'type': 'uint64'},
                              {'internalType': 'uint64', 'name': 'rollingLatency', 'type': 'uint64'},
                              {'internalType': 'uint32', 'name': 'heartbeatCount', 'type': 'uint32'},
                              {'internalType': 'uint32', 'name': 'missedHeartbeatCount', 'type': 'uint32'},
                              {'internalType': 'uint32', 'name': 'uptimeScore', 'type': 'uint32'},
                              {'internalType': 'uint32', 'name': 'responseScore', 'type': 'uint32'}],
               'internalType': 'struct IAgentRegistry.OperationalMetrics',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getTrustScore',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'isActive',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'isRegistered',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'reactivate', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'name', 'type': 'string'},
             {'internalType': 'string[]', 'name': 'capabilities', 'type': 'string[]'},
             {'internalType': 'string', 'name': 'serviceType', 'type': 'string'},
             {'internalType': 'string', 'name': 'endpoint', 'type': 'string'},
             {'internalType': 'string', 'name': 'metadataURI', 'type': 'string'}],
  'name': 'register',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint64', 'name': 'interval', 'type': 'uint64'},
             {'internalType': 'uint64', 'name': 'gracePeriod', 'type': 'uint64'}],
  'name': 'setHeartbeatPolicy',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint32', 'name': 'latencyMs', 'type': 'uint32'}],
  'name': 'submitHeartbeat',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'trustRegistry',
  'outputs': [{'internalType': 'contract ITrustRegistry', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'name', 'type': 'string'},
             {'internalType': 'string[]', 'name': 'capabilities', 'type': 'string[]'},
             {'internalType': 'string', 'name': 'serviceType', 'type': 'string'},
             {'internalType': 'string', 'name': 'endpoint', 'type': 'string'},
             {'internalType': 'string', 'name': 'metadataURI', 'type': 'string'}],
  'name': 'update',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'AgentDeactivated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'AgentReactivated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'name', 'type': 'string'},
             {'indexed': False, 'internalType': 'string', 'name': 'serviceType', 'type': 'string'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
  'name': 'AgentRegistered',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'name', 'type': 'string'},
             {'indexed': False, 'internalType': 'string', 'name': 'serviceType', 'type': 'string'}],
  'name': 'AgentUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'oldEndpoint', 'type': 'string'},
             {'indexed': False, 'internalType': 'string', 'name': 'newEndpoint', 'type': 'string'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'changeCount', 'type': 'uint256'}],
  'name': 'EndpointChanged',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'interval', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'gracePeriod', 'type': 'uint256'}],
  'name': 'HeartbeatPolicyUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'latency', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'heartbeatCount', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'uptimeScore', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'responseScore', 'type': 'uint256'}],
  'name': 'HeartbeatSubmitted',
  'type': 'event'}]

ServiceAgreement_ABI = [{'inputs': [{'internalType': 'address', 'name': '_trustRegistry', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'constructor'},
 {'stateMutability': 'payable', 'type': 'receive'},
 {'inputs': [],
  'name': 'DISPUTE_TIMEOUT',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'ETH',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'MAX_REMEDIATION_CYCLES',
  'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'REMEDIATION_WINDOW',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'VERIFY_WINDOW',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'accept',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [], 'name': 'acceptOwnership', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [],
  'name': 'agreementCount',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'allowToken',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'allowedTokens',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'autoRelease',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'cancel',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'bytes32', 'name': 'deliverableHash', 'type': 'bytes32'}],
  'name': 'commitDeliverable',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'disallowToken',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'dispute',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'enum IServiceAgreement.DirectDisputeReason', 'name': 'directReason', 'type': 'uint8'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'directDispute',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'enum IServiceAgreement.ArbitrationVote', 'name': 'vote', 'type': 'uint8'},
             {'internalType': 'uint256', 'name': 'providerAward', 'type': 'uint256'},
             {'internalType': 'uint256', 'name': 'clientAward', 'type': 'uint256'}],
  'name': 'castArbitrationVote',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'escalateToDispute',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'enum IServiceAgreement.DirectDisputeReason', 'name': 'directReason', 'type': 'uint8'}],
  'name': 'canDirectDispute',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'expiredCancel',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'expiredDisputeRefund',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'bytes32', 'name': 'actualDeliverablesHash', 'type': 'bytes32'}],
  'name': 'fulfill',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'id', 'type': 'uint256'}],
  'name': 'getAgreement',
  'outputs': [{'components': [{'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
                              {'internalType': 'address', 'name': 'client', 'type': 'address'},
                              {'internalType': 'address', 'name': 'provider', 'type': 'address'},
                              {'internalType': 'string', 'name': 'serviceType', 'type': 'string'},
                              {'internalType': 'string', 'name': 'description', 'type': 'string'},
                              {'internalType': 'uint256', 'name': 'price', 'type': 'uint256'},
                              {'internalType': 'address', 'name': 'token', 'type': 'address'},
                              {'internalType': 'uint256', 'name': 'deadline', 'type': 'uint256'},
                              {'internalType': 'bytes32', 'name': 'deliverablesHash', 'type': 'bytes32'},
                              {'internalType': 'enum IServiceAgreement.Status', 'name': 'status', 'type': 'uint8'},
                              {'internalType': 'uint256', 'name': 'createdAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'resolvedAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'verifyWindowEnd', 'type': 'uint256'},
                              {'internalType': 'bytes32', 'name': 'committedHash', 'type': 'bytes32'}],
               'internalType': 'struct IServiceAgreement.Agreement',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'client', 'type': 'address'}],
  'name': 'getAgreementsByClient',
  'outputs': [{'internalType': 'uint256[]', 'name': '', 'type': 'uint256[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'getAgreementsByProvider',
  'outputs': [{'internalType': 'uint256[]', 'name': '', 'type': 'uint256[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'getArbitrationCase',
  'outputs': [{'components': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
                              {'internalType': 'address[3]', 'name': 'arbitrators', 'type': 'address[3]'},
                              {'internalType': 'uint8', 'name': 'arbitratorCount', 'type': 'uint8'},
                              {'internalType': 'uint8', 'name': 'providerVotes', 'type': 'uint8'},
                              {'internalType': 'uint8', 'name': 'clientVotes', 'type': 'uint8'},
                              {'internalType': 'uint8', 'name': 'splitVotes', 'type': 'uint8'},
                              {'internalType': 'uint8', 'name': 'humanVotes', 'type': 'uint8'},
                              {'internalType': 'uint256', 'name': 'selectionDeadlineAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'decisionDeadlineAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'splitProviderAward', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'splitClientAward', 'type': 'uint256'},
                              {'internalType': 'bool', 'name': 'finalized', 'type': 'bool'},
                              {'internalType': 'bool', 'name': 'humanBackstopUsed', 'type': 'bool'}],
               'internalType': 'struct IServiceAgreement.ArbitrationCase',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'getDisputeCase',
  'outputs': [{'components': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'openedAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'responseDeadlineAt', 'type': 'uint256'},
                              {'internalType': 'enum IServiceAgreement.DisputeOutcome',
                               'name': 'outcome',
                               'type': 'uint8'},
                              {'internalType': 'uint256', 'name': 'providerAward', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'clientAward', 'type': 'uint256'},
                              {'internalType': 'bool', 'name': 'humanReviewRequested', 'type': 'bool'},
                              {'internalType': 'uint256', 'name': 'evidenceCount', 'type': 'uint256'}],
               'internalType': 'struct IServiceAgreement.DisputeCase',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
  'name': 'getDisputeEvidence',
  'outputs': [{'components': [{'internalType': 'address', 'name': 'submitter', 'type': 'address'},
                              {'internalType': 'enum IServiceAgreement.EvidenceType',
                               'name': 'evidenceType',
                               'type': 'uint8'},
                              {'internalType': 'bytes32', 'name': 'evidenceHash', 'type': 'bytes32'},
                              {'internalType': 'string', 'name': 'evidenceURI', 'type': 'string'},
                              {'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
               'internalType': 'struct IServiceAgreement.DisputeEvidence',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'getRemediationCase',
  'outputs': [{'components': [{'internalType': 'uint8', 'name': 'cycleCount', 'type': 'uint8'},
                              {'internalType': 'uint256', 'name': 'openedAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'deadlineAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'lastActionAt', 'type': 'uint256'},
                              {'internalType': 'bytes32', 'name': 'latestTranscriptHash', 'type': 'bytes32'},
                              {'internalType': 'bool', 'name': 'active', 'type': 'bool'}],
               'internalType': 'struct IServiceAgreement.RemediationCase',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
  'name': 'getRemediationFeedback',
  'outputs': [{'components': [{'internalType': 'uint8', 'name': 'cycle', 'type': 'uint8'},
                              {'internalType': 'address', 'name': 'author', 'type': 'address'},
                              {'internalType': 'bytes32', 'name': 'feedbackHash', 'type': 'bytes32'},
                              {'internalType': 'string', 'name': 'feedbackURI', 'type': 'string'},
                              {'internalType': 'bytes32', 'name': 'previousTranscriptHash', 'type': 'bytes32'},
                              {'internalType': 'bytes32', 'name': 'transcriptHash', 'type': 'bytes32'},
                              {'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
               'internalType': 'struct IServiceAgreement.RemediationFeedback',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
  'name': 'getRemediationResponse',
  'outputs': [{'components': [{'internalType': 'uint8', 'name': 'cycle', 'type': 'uint8'},
                              {'internalType': 'address', 'name': 'author', 'type': 'address'},
                              {'internalType': 'enum IServiceAgreement.ProviderResponseType',
                               'name': 'responseType',
                               'type': 'uint8'},
                              {'internalType': 'uint256', 'name': 'proposedProviderPayout', 'type': 'uint256'},
                              {'internalType': 'bytes32', 'name': 'responseHash', 'type': 'bytes32'},
                              {'internalType': 'string', 'name': 'responseURI', 'type': 'string'},
                              {'internalType': 'bytes32', 'name': 'previousTranscriptHash', 'type': 'bytes32'},
                              {'internalType': 'bytes32', 'name': 'transcriptHash', 'type': 'bytes32'},
                              {'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'}],
               'internalType': 'struct IServiceAgreement.RemediationResponse',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'minimumTrustValue',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'owner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'pendingOwner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'internalType': 'string', 'name': 'serviceType', 'type': 'string'},
             {'internalType': 'string', 'name': 'description', 'type': 'string'},
             {'internalType': 'uint256', 'name': 'price', 'type': 'uint256'},
             {'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'deadline', 'type': 'uint256'},
             {'internalType': 'bytes32', 'name': 'deliverablesHash', 'type': 'bytes32'}],
  'name': 'propose',
  'outputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'stateMutability': 'payable',
  'type': 'function'},
 {'inputs': [],
  'name': 'reputationOracle',
  'outputs': [{'internalType': 'contract ReputationOracle', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'address', 'name': 'arbitrator', 'type': 'address'}],
  'name': 'nominateArbitrator',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'bytes32', 'name': 'feedbackHash', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'feedbackURI', 'type': 'string'},
             {'internalType': 'bytes32', 'name': 'previousTranscriptHash', 'type': 'bytes32'}],
  'name': 'requestRevision',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'requestHumanEscalation',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'bool', 'name': 'favorProvider', 'type': 'bool'}],
  'name': 'resolveDispute',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'enum IServiceAgreement.DisputeOutcome', 'name': 'outcome', 'type': 'uint8'},
             {'internalType': 'uint256', 'name': 'providerAward', 'type': 'uint256'},
             {'internalType': 'uint256', 'name': 'clientAward', 'type': 'uint256'}],
  'name': 'resolveDisputeDetailed',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'enum IServiceAgreement.ProviderResponseType', 'name': 'responseType', 'type': 'uint8'},
             {'internalType': 'uint256', 'name': 'proposedProviderPayout', 'type': 'uint256'},
             {'internalType': 'bytes32', 'name': 'responseHash', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'responseURI', 'type': 'string'},
             {'internalType': 'bytes32', 'name': 'previousTranscriptHash', 'type': 'bytes32'}],
  'name': 'respondToRevision',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'value', 'type': 'uint256'}],
  'name': 'setMinimumTrustValue',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'oracle', 'type': 'address'}],
  'name': 'setReputationOracle',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'internalType': 'enum IServiceAgreement.EvidenceType', 'name': 'evidenceType', 'type': 'uint8'},
             {'internalType': 'bytes32', 'name': 'evidenceHash', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'evidenceURI', 'type': 'string'}],
  'name': 'submitDisputeEvidence',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'transferOwnership',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'trustRegistry',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'}],
  'name': 'verifyDeliverable',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'AgreementAccepted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'client', 'type': 'address'}],
  'name': 'AgreementCancelled',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'initiator', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'AgreementDisputed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'deliverablesHash', 'type': 'bytes32'}],
  'name': 'AgreementFulfilled',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'client', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'serviceType', 'type': 'string'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'price', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'address', 'name': 'token', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'deadline', 'type': 'uint256'}],
  'name': 'AgreementProposed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'}],
  'name': 'AutoReleased',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'hash', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'verifyWindowEnd', 'type': 'uint256'}],
  'name': 'DeliverableCommitted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': False,
              'internalType': 'enum IServiceAgreement.DisputeOutcome',
              'name': 'outcome',
              'type': 'uint8'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'providerAward', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'clientAward', 'type': 'uint256'}],
  'name': 'DetailedDisputeResolved',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'uint256', 'name': 'evidenceIndex', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'submitter', 'type': 'address'},
             {'indexed': False,
              'internalType': 'enum IServiceAgreement.EvidenceType',
              'name': 'evidenceType',
              'type': 'uint8'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'evidenceHash', 'type': 'bytes32'}],
  'name': 'DisputeEvidenceSubmitted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'bool', 'name': 'favorProvider', 'type': 'bool'}],
  'name': 'DisputeResolved',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'beneficiary', 'type': 'address'}],
  'name': 'DisputeTimedOut',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': False, 'internalType': 'uint256', 'name': 'newValue', 'type': 'uint256'}],
  'name': 'MinimumTrustValueUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'currentOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferStarted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'oldOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferred',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'oracle', 'type': 'address'}],
  'name': 'ReputationOracleUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'uint8', 'name': 'cycle', 'type': 'uint8'},
             {'indexed': True, 'internalType': 'address', 'name': 'client', 'type': 'address'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'transcriptHash', 'type': 'bytes32'}],
  'name': 'RevisionRequested',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'id', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'uint8', 'name': 'cycle', 'type': 'uint8'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'indexed': False,
              'internalType': 'enum IServiceAgreement.ProviderResponseType',
              'name': 'responseType',
              'type': 'uint8'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'transcriptHash', 'type': 'bytes32'}],
  'name': 'RevisionResponded',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'TokenAllowed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'TokenDisallowed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'agreementId', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'string', 'name': 'context', 'type': 'string'}],
  'name': 'TrustUpdateFailed',
  'type': 'event'},
 {'inputs': [], 'name': 'ReentrancyGuardReentrantCall', 'type': 'error'},
 {'inputs': [{'internalType': 'address', 'name': 'token', 'type': 'address'}],
  'name': 'SafeERC20FailedOperation',
  'type': 'error'}]

WalletFactory_ABI = [{'inputs': [{'internalType': 'address', 'name': '_registry', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'constructor'},
 {'inputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'name': 'allWallets',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'createWallet',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}],
  'name': 'getWallets',
  'outputs': [{'internalType': 'address[]', 'name': '', 'type': 'address[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'name': 'ownerWallets',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'registry',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'totalWallets',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'owner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'walletAddress', 'type': 'address'}],
  'name': 'WalletCreated',
  'type': 'event'}]

ReputationOracle_ABI = [{'inputs': [{'internalType': 'address', 'name': '_trustRegistry', 'type': 'address'},
             {'internalType': 'address', 'name': '_serviceAgreement', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'constructor'},
 {'inputs': [],
  'name': 'AUTO_WARN_COOLDOWN',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'AUTO_WARN_MAX_PER_WINDOW',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'AUTO_WARN_WINDOW',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'ENDORSE_STREAK_THRESHOLD',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'client', 'type': 'address'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'}],
  'name': 'autoRecordSuccess',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'client', 'type': 'address'},
             {'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'}],
  'name': 'autoWarn',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'autoWarnWindows',
  'outputs': [{'internalType': 'uint64', 'name': 'windowStartedAt', 'type': 'uint64'},
              {'internalType': 'uint32', 'name': 'warnCount', 'type': 'uint32'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'subject', 'type': 'address'},
             {'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'}],
  'name': 'getCapabilityReputation',
  'outputs': [{'internalType': 'uint256', 'name': 'weightedScore', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'subject', 'type': 'address'}],
  'name': 'getReputation',
  'outputs': [{'internalType': 'uint256', 'name': 'endorsements', 'type': 'uint256'},
              {'internalType': 'uint256', 'name': 'warnings', 'type': 'uint256'},
              {'internalType': 'uint256', 'name': 'blocks', 'type': 'uint256'},
              {'internalType': 'uint256', 'name': 'weightedScore', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'subject', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
  'name': 'getSignal',
  'outputs': [{'components': [{'internalType': 'address', 'name': 'publisher', 'type': 'address'},
                              {'internalType': 'address', 'name': 'subject', 'type': 'address'},
                              {'internalType': 'enum ReputationOracle.SignalType',
                               'name': 'signalType',
                               'type': 'uint8'},
                              {'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'},
                              {'internalType': 'string', 'name': 'reason', 'type': 'string'},
                              {'internalType': 'uint256', 'name': 'publisherTrustAtTime', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'timestamp', 'type': 'uint256'},
                              {'internalType': 'bool', 'name': 'autoPublished', 'type': 'bool'}],
               'internalType': 'struct ReputationOracle.Signal',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'subject', 'type': 'address'}],
  'name': 'getSignalCount',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'hasAutoSignaled',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'hasManualSignaled',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'lastAutoWarnAt',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'subject', 'type': 'address'},
             {'internalType': 'enum ReputationOracle.SignalType', 'name': 'signalType', 'type': 'uint8'},
             {'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'},
             {'internalType': 'string', 'name': 'reason', 'type': 'string'}],
  'name': 'publishSignal',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'serviceAgreement',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'successStreak',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'trustRegistry',
  'outputs': [{'internalType': 'contract ITrustRegistry', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'client', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'provider', 'type': 'address'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'reasonCode', 'type': 'bytes32'}],
  'name': 'AutoWarnSuppressed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'publisher', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'subject', 'type': 'address'},
             {'indexed': False,
              'internalType': 'enum ReputationOracle.SignalType',
              'name': 'signalType',
              'type': 'uint8'},
             {'indexed': False, 'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'publisherTrustAtTime', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'bool', 'name': 'autoPublished', 'type': 'bool'}],
  'name': 'SignalPublished',
  'type': 'event'}]

SponsorshipAttestation_ABI = [{'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'activeAttestation',
  'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'sponsor', 'type': 'address'}],
  'name': 'activeSponsorCount',
  'outputs': [{'internalType': 'uint256', 'name': 'count', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'name': 'attestations',
  'outputs': [{'internalType': 'address', 'name': 'sponsor', 'type': 'address'},
              {'internalType': 'address', 'name': 'agent', 'type': 'address'},
              {'internalType': 'uint256', 'name': 'issuedAt', 'type': 'uint256'},
              {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'},
              {'internalType': 'bool', 'name': 'revoked', 'type': 'bool'},
              {'internalType': 'enum SponsorshipAttestation.IdentityTier', 'name': 'tier', 'type': 'uint8'},
              {'internalType': 'string', 'name': 'evidenceURI', 'type': 'string'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'sponsor', 'type': 'address'},
             {'internalType': 'address', 'name': 'agent', 'type': 'address'}],
  'name': 'getActiveAttestation',
  'outputs': [{'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'agent', 'type': 'address'}],
  'name': 'getAgentAttestations',
  'outputs': [{'internalType': 'bytes32[]', 'name': '', 'type': 'bytes32[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'getAttestation',
  'outputs': [{'components': [{'internalType': 'address', 'name': 'sponsor', 'type': 'address'},
                              {'internalType': 'address', 'name': 'agent', 'type': 'address'},
                              {'internalType': 'uint256', 'name': 'issuedAt', 'type': 'uint256'},
                              {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'},
                              {'internalType': 'bool', 'name': 'revoked', 'type': 'bool'},
                              {'internalType': 'enum SponsorshipAttestation.IdentityTier',
                               'name': 'tier',
                               'type': 'uint8'},
                              {'internalType': 'string', 'name': 'evidenceURI', 'type': 'string'}],
               'internalType': 'struct SponsorshipAttestation.Attestation',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'agent', 'type': 'address'}],
  'name': 'getHighestTier',
  'outputs': [{'internalType': 'enum SponsorshipAttestation.IdentityTier', 'name': 'tier', 'type': 'uint8'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'sponsor', 'type': 'address'}],
  'name': 'getSponsorAttestations',
  'outputs': [{'internalType': 'bytes32[]', 'name': '', 'type': 'bytes32[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'isActive',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'agent', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'}],
  'name': 'publish',
  'outputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'agent', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'},
             {'internalType': 'enum SponsorshipAttestation.IdentityTier', 'name': 'tier', 'type': 'uint8'},
             {'internalType': 'string', 'name': 'evidenceURI', 'type': 'string'}],
  'name': 'publishWithTier',
  'outputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'}],
  'name': 'revoke',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'},
             {'indexed': True, 'internalType': 'address', 'name': 'sponsor', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'agent', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'expiresAt', 'type': 'uint256'},
             {'indexed': False,
              'internalType': 'enum SponsorshipAttestation.IdentityTier',
              'name': 'tier',
              'type': 'uint8'},
             {'indexed': False, 'internalType': 'string', 'name': 'evidenceURI', 'type': 'string'}],
  'name': 'AttestationPublished',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'attestationId', 'type': 'bytes32'},
             {'indexed': True, 'internalType': 'address', 'name': 'sponsor', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'agent', 'type': 'address'}],
  'name': 'AttestationRevoked',
  'type': 'event'}]

CapabilityRegistry_ABI = [{'inputs': [{'internalType': 'address', 'name': '_agentRegistry', 'type': 'address'},
             {'internalType': 'address', 'name': '_owner', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'constructor'},
 {'inputs': [],
  'name': 'MAX_CAPABILITIES_PER_AGENT',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'MAX_CAPABILITY_LENGTH',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'MIN_SEGMENTS',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'acceptOwnership', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [],
  'name': 'agentRegistry',
  'outputs': [{'internalType': 'contract IAgentDirectory', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'agent', 'type': 'address'}],
  'name': 'capabilityCount',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'claim',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'agent', 'type': 'address'}],
  'name': 'getCapabilities',
  'outputs': [{'internalType': 'string[]', 'name': 'capabilities', 'type': 'string[]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'root', 'type': 'string'}],
  'name': 'getRoot',
  'outputs': [{'components': [{'internalType': 'string', 'name': 'name', 'type': 'string'},
                              {'internalType': 'bool', 'name': 'active', 'type': 'bool'},
                              {'internalType': 'uint64', 'name': 'createdAt', 'type': 'uint64'},
                              {'internalType': 'uint64', 'name': 'disabledAt', 'type': 'uint64'}],
               'internalType': 'struct CapabilityRegistry.RootConfig',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'index', 'type': 'uint256'}],
  'name': 'getRootAt',
  'outputs': [{'components': [{'internalType': 'string', 'name': 'name', 'type': 'string'},
                              {'internalType': 'bool', 'name': 'active', 'type': 'bool'},
                              {'internalType': 'uint64', 'name': 'createdAt', 'type': 'uint64'},
                              {'internalType': 'uint64', 'name': 'disabledAt', 'type': 'uint64'}],
               'internalType': 'struct CapabilityRegistry.RootConfig',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'name': 'hasCapability',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'agent', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'isCapabilityClaimed',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'root', 'type': 'string'}],
  'name': 'isRootActive',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'owner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'pendingOwner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'root', 'type': 'string'}],
  'name': 'registerRoot',
  'outputs': [{'internalType': 'bytes32', 'name': 'rootId', 'type': 'bytes32'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [], 'name': 'renounceOwnership', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'revoke',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'rootCount',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'string', 'name': 'root', 'type': 'string'},
             {'internalType': 'bool', 'name': 'active', 'type': 'bool'}],
  'name': 'setRootStatus',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'transferOwnership',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'agent', 'type': 'address'},
             {'indexed': True, 'internalType': 'bytes32', 'name': 'capabilityId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'CapabilityClaimed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'agent', 'type': 'address'},
             {'indexed': True, 'internalType': 'bytes32', 'name': 'capabilityId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'CapabilityRevoked',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'previousOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferStarted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'previousOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferred',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'rootId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'string', 'name': 'root', 'type': 'string'}],
  'name': 'RootRegistered',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'bytes32', 'name': 'rootId', 'type': 'bytes32'},
             {'indexed': False, 'internalType': 'string', 'name': 'root', 'type': 'string'},
             {'indexed': False, 'internalType': 'bool', 'name': 'active', 'type': 'bool'}],
  'name': 'RootStatusUpdated',
  'type': 'event'},
 {'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}],
  'name': 'OwnableInvalidOwner',
  'type': 'error'},
 {'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}],
  'name': 'OwnableUnauthorizedAccount',
  'type': 'error'}]

ARC402Governance_ABI = [{'inputs': [{'internalType': 'address[]', 'name': '_signers', 'type': 'address[]'},
             {'internalType': 'uint256', 'name': '_threshold', 'type': 'uint256'}],
  'stateMutability': 'payable',
  'type': 'constructor'},
 {'stateMutability': 'payable', 'type': 'receive'},
 {'inputs': [{'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'}],
  'name': 'confirmTransaction',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'}],
  'name': 'executeTransaction',
  'outputs': [{'internalType': 'bytes', 'name': 'returnData', 'type': 'bytes'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'}],
  'name': 'getTransaction',
  'outputs': [{'components': [{'internalType': 'address', 'name': 'target', 'type': 'address'},
                              {'internalType': 'uint256', 'name': 'value', 'type': 'uint256'},
                              {'internalType': 'bytes', 'name': 'data', 'type': 'bytes'},
                              {'internalType': 'bool', 'name': 'executed', 'type': 'bool'},
                              {'internalType': 'uint256', 'name': 'confirmationCount', 'type': 'uint256'}],
               'internalType': 'struct ARC402Governance.Transaction',
               'name': '',
               'type': 'tuple'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'},
             {'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'isConfirmed',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'isSigner',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'}],
  'name': 'revokeConfirmation',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'name': 'signers',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'target', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'value', 'type': 'uint256'},
             {'internalType': 'bytes', 'name': 'data', 'type': 'bytes'}],
  'name': 'submitTransaction',
  'outputs': [{'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'}],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'threshold',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'transactionCount',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'signer', 'type': 'address'}],
  'name': 'TransactionConfirmed',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'executor', 'type': 'address'},
             {'indexed': False, 'internalType': 'bytes', 'name': 'returnData', 'type': 'bytes'}],
  'name': 'TransactionExecuted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'signer', 'type': 'address'}],
  'name': 'TransactionRevoked',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'uint256', 'name': 'txId', 'type': 'uint256'},
             {'indexed': True, 'internalType': 'address', 'name': 'signer', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'target', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'value', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'bytes', 'name': 'data', 'type': 'bytes'}],
  'name': 'TransactionSubmitted',
  'type': 'event'}]

TrustRegistryV3_ABI = [{'inputs': [{'internalType': 'address', 'name': '_v1Registry', 'type': 'address'}],
  'stateMutability': 'nonpayable',
  'type': 'constructor'},
 {'inputs': [],
  'name': 'ANOMALY_PENALTY',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'BASE_INCREMENT',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'CAP_SLOTS',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'DECAY_FLOOR',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'HALF_LIFE',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'INITIAL_SCORE',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'MAX_SCORE',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'MAX_SINGLE_GAIN',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'REFERENCE_VALUE',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [], 'name': 'acceptOwnership', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'addUpdater',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'address', 'name': '', 'type': 'address'},
             {'internalType': 'bytes32', 'name': '', 'type': 'bytes32'}],
  'name': 'dealCount',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'getCapabilityScore',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getCapabilitySlots',
  'outputs': [{'components': [{'internalType': 'bytes32', 'name': 'capabilityHash', 'type': 'bytes32'},
                              {'internalType': 'uint256', 'name': 'score', 'type': 'uint256'}],
               'internalType': 'struct ITrustRegistryV3.CapabilityScore[5]',
               'name': '',
               'type': 'tuple[5]'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getEffectiveScore',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getGlobalScore',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'getScore',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'}],
  'name': 'initWallet',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'isAuthorizedUpdater',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'minScore', 'type': 'uint256'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'}],
  'name': 'meetsCapabilityThreshold',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'uint256', 'name': 'minScore', 'type': 'uint256'}],
  'name': 'meetsThreshold',
  'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'minimumAgreementValue',
  'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'owner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [],
  'name': 'pendingOwner',
  'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
  'name': 'profiles',
  'outputs': [{'internalType': 'uint256', 'name': 'globalScore', 'type': 'uint256'},
              {'internalType': 'uint256', 'name': 'lastUpdated', 'type': 'uint256'},
              {'internalType': 'bytes32', 'name': 'capabilityProfileHash', 'type': 'bytes32'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'counterparty', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'},
             {'internalType': 'uint256', 'name': 'agreementValueWei', 'type': 'uint256'}],
  'name': 'recordAnomaly',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'internalType': 'address', 'name': 'counterparty', 'type': 'address'},
             {'internalType': 'string', 'name': 'capability', 'type': 'string'},
             {'internalType': 'uint256', 'name': 'agreementValueWei', 'type': 'uint256'}],
  'name': 'recordSuccess',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'removeUpdater',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [], 'name': 'renounceOwnership', 'outputs': [], 'stateMutability': 'nonpayable', 'type': 'function'},
 {'inputs': [{'internalType': 'uint256', 'name': 'value', 'type': 'uint256'}],
  'name': 'setMinimumAgreementValue',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [{'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'transferOwnership',
  'outputs': [],
  'stateMutability': 'nonpayable',
  'type': 'function'},
 {'inputs': [],
  'name': 'v1Registry',
  'outputs': [{'internalType': 'contract ITrustRegistry', 'name': '', 'type': 'address'}],
  'stateMutability': 'view',
  'type': 'function'},
 {'anonymous': False,
  'inputs': [{'indexed': False, 'internalType': 'uint256', 'name': 'oldValue', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'newValue', 'type': 'uint256'}],
  'name': 'MinimumAgreementValueUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'previousOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferStarted',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'previousOwner', 'type': 'address'},
             {'indexed': True, 'internalType': 'address', 'name': 'newOwner', 'type': 'address'}],
  'name': 'OwnershipTransferred',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'newGlobalScore', 'type': 'uint256'},
             {'indexed': False, 'internalType': 'string', 'name': 'capability', 'type': 'string'},
             {'indexed': False, 'internalType': 'int256', 'name': 'delta', 'type': 'int256'}],
  'name': 'ScoreUpdated',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'UpdaterAdded',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'updater', 'type': 'address'}],
  'name': 'UpdaterRemoved',
  'type': 'event'},
 {'anonymous': False,
  'inputs': [{'indexed': True, 'internalType': 'address', 'name': 'wallet', 'type': 'address'},
             {'indexed': False, 'internalType': 'uint256', 'name': 'initialScore', 'type': 'uint256'}],
  'name': 'WalletInitialized',
  'type': 'event'},
 {'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}],
  'name': 'OwnableInvalidOwner',
  'type': 'error'},
 {'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}],
  'name': 'OwnableUnauthorizedAccount',
  'type': 'error'}]
