ERC-8004 feedback, blocked. Evidence read live from Monad mainnet (chain 143) on 2026-09-08. No transaction was sent, every call below is a read or a simulation. Reputation Registry proxy 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 Implementation behind the ERC-1967 slot: 0x16e0FA7f7C56B9a767E34B192B51f921BE31dA34 Not verified on Sourcify for chain 143, and Monadscan needs an API key we do not have, so the ABI was confirmed by matching selectors against the implementation bytecode and then by calling the functions. 1. The read functions to confirm getVersion() -> "2.0.0" getIdentityRegistry() -> 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 getClients(10248) -> [] getLastIndex(10248,deployer) -> 0 getSummary(10248,[],"","") -> reverts: clientAddresses required (the summary needs a non-empty client list, so there is no all-clients view) 2. giveFeedback has no feedbackAuth on this deployment The integration plan said giveFeedback takes a feedbackAuth signed by the agent owner. It does not. The deployed function is exactly the one quoted in the ERC-8004 specification (https://eips.ethereum.org/EIPS/eip-8004), eight arguments and no signature: giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackHash) Selector check against the implementation runtime bytecode (a PUSH4 of each selector is present): 0x3c036a7e giveFeedback(uint256,int128,uint8,string,string,string,string,bytes32) 0x81bbba58 getSummary(uint256,address[],string,string) 0x232b0810 readFeedback(uint256,address,uint64) 0xd9d84224 readAllFeedback(uint256,address[],string,string,bool) 0x42dd519c getClients(uint256) 0x4ab3ca99 revokeFeedback(uint256,uint64) 0xc2349ab2 appendResponse(uint256,address,uint64,string,bytes32) 0xf2d81759 getLastIndex(uint256,address) 0xbc4d861b getIdentityRegistry() There is no authorise, no permit, no EIP-712 domain and no nonce function in the bytecode. Nothing on chain would verify a signature from signFeedbackAuth, so that function cannot be written against this contract, and the DONE MEANS test for it cannot be written either. 3. The deployer cannot leave feedback about its own agent ownerOf(10248) on the Identity Registry -> 0x559F357aDa3A96d11AEa679eC0D622E4AF15F67c which is the deployer wallet. Simulated giveFeedback from the deployer (eth_call, no transaction): Error: execution reverted: Self-feedback not allowed Simulated from a non-owner address (0x...dEaD), same arguments: succeeds, returns 0x So the planned fallback, "VERIFIER_PRIVATE_KEY if set, else the deployer key", cannot work: VERIFIER_PRIVATE_KEY is not in the root .env, and the deployer key is the one address the registry refuses. A real feedback transaction needs a second funded wallet that is not the agent owner. 4. What is needed to unblock, in one line each a. A verifier wallet: generate a key, put VERIFIER_PRIVATE_KEY in .env, send it enough MON for gas plus the 10 MON Monad keeps reserved. Both the .env edit and the funding transfer are outside this order's permissions. b. Drop signFeedbackAuth and agentAuth.ts from the interface: there is nothing on chain for them to authorise. c. postFeedback then takes (agentId, matched, distance, passportId, signerKey) and calls giveFeedback with value = the score, valueDecimals = 0, tag1 "moolam", tag2 "verification", endpoint the verify URL, feedbackURI and feedbackHash pointing at the verification result. d. readReputation reads getSummary(agentId, [verifierAddress], "moolam", "verification"), because getSummary needs a non-empty client list. ======================================================================== Moolam reputation post, live on Monad mainnet (chain 143). Started 2026-09-08T08:55:21.454Z Signer 0xC5ead1E4E5C6d56E87e02317f3fB3731cB0b6Ef7, from VERIFIER_PRIVATE_KEY, 12 MON Registry 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 (ERC-8004 Reputation Registry) Passport 0x59bdee9f4478fcb4bab722ca2224bac05350ed3d1d0397a81c998a2b0ad24440 read from the Moolam registry 0xeBeeD7A422531789aa009a9c45CC10C84dF12119 generator agent 10248, creator 0x559F357aDa3A96d11AEa679eC0D622E4AF15F67c metadataURI ipfs://bafkreifsrqzdwddo2b4f2337lgybebksbwcm5ovpeagc34wom2vmfqvtdu Verification: matched true, pHash distance 1 of 64 bits Summary before, from getSummary(agent, [signer], "moolam", "verification") before: count 0, value 0, decimals 0 giveFeedback(agentId, value, valueDecimals, tag1, tag2, endpoint, feedbackURI, feedbackHash) agentId 10248 value 90 with 0 decimals tags "moolam", "verification" endpoint "", the verifier has no public URL yet feedbackURI ipfs://bafkreifsrqzdwddo2b4f2337lgybebksbwcm5ovpeagc34wom2vmfqvtdu feedbackHash 0xce505f2e49653c6e95d0c16d7352347878a1663aca6a6cd85ce369c60ca6f187 hashed bytes {"product":"moolam","check":"verification","agentId":"10248","passportId":"0x59bdee9f4478fcb4bab722ca2224bac05350ed3d1d0397a81c998a2b0ad24440","matched":true,"distanceBits":1,"score":90} signed by 0xC5ead1E4E5C6d56E87e02317f3fB3731cB0b6Ef7, the verifier wallet, not the agent owner transaction 0x7ced2375dc476f8b94ff7f80341eb6bc6e557468f7716385a9e0791a33ae380a https://monadvision.com/tx/0x7ced2375dc476f8b94ff7f80341eb6bc6e557468f7716385a9e0791a33ae380a block 102997141 gas 313125 used of a 313125 limit, and Monad bills the limit Summary after after: count 1, value 90, decimals 0 the count moved from 0 to 1 Wallet left with 11.96806125 MON Read back from the chain afterwards, with cast, not through our own code: getClients(10248) -> [0xC5ead1E4E5C6d56E87e02317f3fB3731cB0b6Ef7] readFeedback(10248, verifier, 1) -> value 0x5a (90), valueDecimals 0, tag1 "moolam", tag2 "verification", isRevoked false The entry is index 1, so this registry counts feedback from 1, not 0. Checked again after the verifier moved to viem 2.56.3, through our own readReputation with no arguments beyond the agent id, so it used VERIFIER_ADDRESS from .env: getSummary(10248, [verifier], "moolam", "verification") -> count 1, value 90, decimals 0 ======================================================================== Moolam reputation post, live on Monad mainnet (chain 143). Started 2026-09-08T14:03:59.722Z Signer 0xC5ead1E4E5C6d56E87e02317f3fB3731cB0b6Ef7, from VERIFIER_PRIVATE_KEY, 11.60086125 MON Registry 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 (ERC-8004 Reputation Registry) Passport 0x5f66c389c9561e05141dc6276b80d82dd1eb356984535b1bfd0a83c6ae1e54ed read from the Moolam registry 0xa19188801E5DC93CD925884d73e4DaFc2bcb80C0 generator agent 10248, creator 0x559F357aDa3A96d11AEa679eC0D622E4AF15F67c metadataURI ipfs://bafkreiepr5tuj23bvva5rlu2f73b7nwrfbzewoh72udubucwhbmlixfh2m Verification: matched true, pHash distance 0 of 64 bits Summary before, from getSummary(agent, [signer], "moolam", "verification") before: count 1, value 90, decimals 0 giveFeedback(agentId, value, valueDecimals, tag1, tag2, endpoint, feedbackURI, feedbackHash) agentId 10248 value 100 with 0 decimals tags "moolam", "verification" endpoint "", the verifier has no public URL yet feedbackURI ipfs://bafkreiepr5tuj23bvva5rlu2f73b7nwrfbzewoh72udubucwhbmlixfh2m feedbackHash 0x3c2d02a5c68678928809efc5cc069334dd6c4b3e12615919469e650ee5d6f20f hashed bytes {"product":"moolam","check":"verification","agentId":"10248","passportId":"0x5f66c389c9561e05141dc6276b80d82dd1eb356984535b1bfd0a83c6ae1e54ed","matched":true,"distanceBits":0,"score":100} signed by 0xC5ead1E4E5C6d56E87e02317f3fB3731cB0b6Ef7, the verifier wallet, not the agent owner transaction 0xcf283067e66a5f8ae917a340db3294c763180f279cc3035aa52f4f5594ed572d https://monadvision.com/tx/0xcf283067e66a5f8ae917a340db3294c763180f279cc3035aa52f4f5594ed572d block 103058400 gas 210576 used of a 210576 limit, and Monad bills the limit Summary after after: count 2, value 95, decimals 0 the count moved from 1 to 2 Wallet left with 11.579382498 MON