{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"a5f9f412-2f3e-4349-b400-f7bc30af740d","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"e96151e54b610a088a7bb6ae81e55d76a0fa84f7c2d40ee1c98b4dcd9f158c0b","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","state":"accepted"}],"objective":"0.5% burn on every transfer\n\nWho can call what: Only owner set the fee\nUpgrades and pausing: owner can pause","parentJobId":"7c622b7a-74aa-4583-9332-c602641067cf","planHash":"56593da36b9f618c1e762b83f7201b6fce6c64dc4f6339ff7f182d64842bc2a5","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"7c622b7a-74aa-4583-9332-c602641067cf","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1025-reputation"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51437","feedbackHash":"5162c949eaa477fbccababe41ec53b395f7a76e948d23059171e82f0b8f1d897","nodeKey":"build_contract_project","submissionHash":"e96151e54b610a088a7bb6ae81e55d76a0fa84f7c2d40ee1c98b4dcd9f158c0b","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"444036eae42d1eb7529b83085f38e7d738ddbe055fee55c544c778aa88b76a32","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"3d65d3e2889d46cac215974f24986307b62361866bc2274bf7cddbdf810f2d03","device":"810692103659803b","findings":[],"hash":"e96151e54b610a088a7bb6ae81e55d76a0fa84f7c2d40ee1c98b4dcd9f158c0b","nodeId":"96500170-e7a3-4308-a106-be5f594981af","outcome":"completed","summary":"Implemented a default 0.5% burn on direct, delegated, and self-transfers, with owner-only fee changes and pause/unpause controls.\n\nDocumented rounding, deployment parameters, ownership handover, and the owner’s configurable 0–100% fee range.\n\nValidation passed with Solidity 0.8.26: `forge build`, all 67 tests, and `forge fmt --check`. Protected files remain unchanged. Nothing was deployed.","treeHash":"03a64ca52d6d373c19dfc7c93bbdc4bf8c3e71d6","usage":{"cachedInputTokens":688384,"inputTokens":74008,"model":"gpt-6-astra","outputTokens":17174,"runtime":"codex","turns":5,"wallClockMs":626244}}],"verification":[{"checks":[{"durationMs":788,"exitCode":0,"name":"build","output":"Compiling 11 files with Solc 0.8.26\nSolc 0.8.26 finished in 736.30ms\nCompiler run successful!\n","passed":true},{"durationMs":5397,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/ReputationToken.adversarial.t.sol:ReputationTokenAdversarialTest\n[PASS] testFuzz_allowancesAreIsolatedByOwner(uint256,uint256,uint256) (runs: 1000, μ: 342915, ~: 346695)\n[PASS] testFuzz_approvalOverwriteIsExactAndIdempotent(uint256,uint256) (runs: 1000, μ: 205490, ~: 205555)\n[PASS] testFuzz_delegatedRoundTripBurnsEachLegAndConsumesGrossApproval(uint256) (runs: 1000, μ: 269097, ~: 271665)\n[PASS] testFuzz_transferFromInsufficientAllowanceIsAtomic(uint256,uint256) (runs: 1000, μ: 131281, ~: 131663)\n[PASS] testFuzz_transferFromInsufficientBalanceIsAtomic(uint256,uint256,bool) (runs: 1000, μ: 193848, ~: 193977)\n[PASS] test_exhaustedAllowanceCannotReplaySuccessfulSpend() (gas: 166027)\n[PASS] test_infiniteAllowanceDoesNotBypassBalanceAtMaximumAmount() (gas: 135888)\n[PASS] test_infiniteApprovalCanBeRevokedAndReplaced() (gas: 317145)\n[PASS] test_infiniteApprovalCannotBurnThroughZeroRecipient() (gas: 130943)\n[PASS] test_largestFiniteAllowanceIsDecremented() (gas: 143970)\n[PASS] test_largestFiniteAllowanceRejectsMaximumSpend() (gas: 131538)\n[PASS] test_maximumTransferFailsWithoutOverflowOrMinting() (gas: 77668)\n[PASS] test_ownerCallingTransferFromStillNeedsAllowance() (gas: 203875)\n[PASS] test_smallestUnitMakesAnExactRoundTrip() (gas: 133131)\n[PASS] test_zeroDelegatedTransferEmitsAndPreservesFiniteApproval() (gas: 143358)\n[PASS] test_zeroSenderCannotCreateApproval() (gas: 81149)\n[PASS] test_zeroSenderCannotReachMintThroughTransfer() (gas: 72910)\n[PASS] test_zeroSpenderCannotBeApprovedEvenForZero() (gas: 80487)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 75.06ms (367.38ms CPU time)\n\nRan 19 tests for test/ReputationToken.controls.t.sol:ReputationTokenControlsTest\n[PASS] testFuzz_feeAccountingAcrossRatesAndTransferPaths(uint256,uint256,bool,bool,bool) (runs: 1000, μ: 144495, ~: 127383)\n[PASS] testFuzz_invalidFeeRevertsWithoutChangingRate(uint256) (runs: 1000, μ: 42765, ~: 42810)\n[PASS] testFuzz_nonOwnerCannotSetFee(uint256) (runs: 1000, μ: 35612, ~: 35563)\n[PASS] test_approvalsRevocationsAndFeeChangesRemainAvailableWhilePaused() (gas: 275758)\n[PASS] test_constructorEmitsOwnershipAndUntaxedMint() (gas: 24055)\n[PASS] test_factoryCanNominateAnOperationalOwner() (gas: 367926)\n[PASS] test_feeRoundsDownAtBaseUnitBoundaries() (gas: 283286)\n[PASS] test_invalidAndUnauthorizedOwnershipOperationsRevert() (gas: 191870)\n[PASS] test_maximumFeeCanBurnEntireSupply() (gas: 142733)\n[PASS] test_maximumFeeStillRequiresGrossBalanceOnSelfTransfer() (gas: 118941)\n[PASS] test_netAllowanceIsInsufficientForGrossTransfer() (gas: 107583)\n[PASS] test_nonOwnerCannotPauseOrUnpause() (gas: 117516)\n[PASS] test_ownerSetsFeeWithEventAndBothTransferPathsUseIt() (gas: 257913)\n[PASS] test_ownershipHandoverWhilePausedAndOldOwnerLosesAllPowers() (gas: 497615)\n[PASS] test_pauseBlocksOwnerHolderSelfAndZeroTransfers() (gas: 252136)\n[PASS] test_pauseUnpauseEventsAndRepeatedTransitions() (gas: 221525)\n[PASS] test_pausedTransferFromRollsBackFiniteAndInfiniteAllowance() (gas: 384373)\n[PASS] test_replacedNomineeCannotAcceptAndAcceptanceCannotReplay() (gas: 176194)\n[PASS] test_zeroFeeDisablesBurnOnBothTransferPaths() (gas: 204112)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 75.21ms (233.96ms CPU time)\n\nRan 29 tests for test/ReputationToken.t.sol:ReputationTokenTest\n[PASS] testFuzz_finiteAllowanceAccounting(uint256,uint256) (runs: 1000, μ: 148129, ~: 151636)\n[PASS] testFuzz_insufficientBalanceIsAtomic(uint256) (runs: 1000, μ: 54619, ~: 54586)\n[PASS] testFuzz_transfersConserveBalancesAndBurnedSupply(uint256) (runs: 1000, μ: 170920, ~: 173379)\n[PASS] test_approveReplacesAndRevokesAllowance() (gas: 163622)\n[PASS] test_approveZeroSpenderReverts() (gas: 34664)\n[PASS] test_constructorEmitsMintEvent() (gas: 5534)\n[PASS] test_create2MintsToFactoryRatherThanTransactionOrigin() (gas: 209563)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 94190)\n[PASS] test_distributionAndPoolStyleTransferPathsAllBurn() (gas: 455715)\n[PASS] test_metadataAndEntireSupplyBelongToDeployer() (gas: 80996)\n[PASS] test_mintSeizureAndUpgradeEntrypointsAreAbsent() (gas: 816581)\n[PASS] test_runtimeHasNoForbiddenOpcodes() (gas: 797094)\n[PASS] test_selfTransferBurnsFee() (gas: 58189)\n[PASS] test_selfTransferOverBalanceStillReverts() (gas: 35395)\n[PASS] test_transferBurnsHalfPercentAndEmitsBothEvents() (gas: 102514)\n[PASS] test_transferEntireBalance() (gas: 82687)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecremented() (gas: 135770)\n[PASS] test_transferFromOverAllowanceRevertsWithoutChanges() (gas: 100108)\n[PASS] test_transferFromOverBalanceRollsBackAllowance() (gas: 100389)\n[PASS] test_transferFromSelfStillSpendsAllowance() (gas: 116847)\n[PASS] test_transferFromSpendsAllowanceAndEmitsTransfer() (gas: 222946)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 95538)\n[PASS] test_transferFromZeroSenderRevertsEvenForZeroAmount() (gas: 44451)\n[PASS] test_transferOverBalanceReverts() (gas: 46999)\n[PASS] test_transferToZeroReverts() (gas: 41761)\n[PASS] test_wrongSpenderCannotUseSomeoneElsesApproval() (gas: 92443)\n[PASS] test_zeroTransferFromDoesNotNeedAllowance() (gas: 63506)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 54961)\n[PASS] test_zeroTransferToZeroAlsoReverts() (gas: 30338)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 75.21ms (237.45ms CPU time)\n\nRan 1 test for test/ReputationToken.invariant.t.sol:ReputationTokenInvariantTest\n[PASS]\nReputationTokenInvariantTest invariants:\n[PASS] invariant_administrationMatchesModel\n[PASS] invariant_allowancesMatchModel\n[PASS] invariant_metadataRemainsFixed\n[PASS] invariant_supplyAndBalancesMatchModel\n ReputationTokenInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------------+----------------------------+-------+---------+----------╮\n| Contract          | Selector                   | Calls | Reverts | Discards |\n+=============================================================================+\n| ReputationHandler | approve                    | 1076  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | approveZeroSpender         | 1065  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | revokeAndAttemptSpend      | 1093  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | roundTrip                  | 1120  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | setFee                     | 1076  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | setInvalidFee              | 1100  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | setPaused                  | 1055  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | transfer                   | 1125  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | transferFrom               | 1110  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | transferFromOverAllowance  | 1077  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | transferFromOverBalance    | 1082  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | transferFromToZero         | 1097  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | transferOverBalance        | 1148  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | transferToZero             | 1020  | 0       | 0        |\n|-------------------+----------------------------+-------+---------+----------|\n| ReputationHandler | unauthorizedAdministration | 1140  | 0       | 0        |\n╰-------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.35s (5.35s CPU time)\n\nRan 4 test suites in 5.35s (5.57s CPU time): 67 tests passed, 0 failed, 0 skipped (67 total tests)\n","passed":true},{"durationMs":24,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ReputationToken.acceptOwnership()\",\"ReputationToken.approve(address,uint256)\",\"ReputationToken.pause()\",\"ReputationToken.setFeeBps(uint256)\",\"ReputationToken.transfer(address,uint256)\",\"ReputationToken.transferFrom(address,address,uint256)\",\"ReputationToken.transferOwnership(address)\",\"ReputationToken.unpause()\"],\"files\":{\".gitignore\":3,\"README.md\":143,\"SECURITY.md\":93,\"foundry.toml\":21,\"src/ReputationToken.sol\":96,\"test/ReputationToken.adversarial.t.sol\":276,\"test/ReputationToken.controls.t.sol\":344,\"test/ReputationToken.invariant.t.sol\":299,\"test/ReputationToken.t.sol\":340,\"test/helpers/TestSupport.sol\":34},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":444,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":233,"exitCode":0,"name":"aderyn","output":"[low] centralization-risk at src/ReputationToken.sol:44: Centralization Risk (4 places)\n[low] large-numeric-literal at src/ReputationToken.sol:10: Large Numeric Literal (2 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e96151e54b610a088a7bb6ae81e55d76a0fa84f7c2d40ee1c98b4dcd9f158c0b","verifiedTreeHash":"03a64ca52d6d373c19dfc7c93bbdc4bf8c3e71d6","verifierVersion":"0.1.0+ad90ce4c"}]}