Domain-Bound Per-Agent Hash-Chain Receipt Anchor

domain-bound-per-agent-hash-chain-receipt-anchor · receipt-attestation · 350 B runtime · registry-info

scores

source

pragma solidity ^0.8.13;

contract ReceiptAnchor {
    mapping(address => bytes32) public tips;

    event Append(address indexed agent, bytes32 indexed receiptHash);

    function append(bytes32 receiptHash) external {
        assembly {
            let slot := tips.slot
            mstore(0x00, caller())
            mstore(0x20, slot)
            let key := keccak256(0x00, 0x40)
            let old := sload(key)

            mstore(0x00, old)
            mstore(0x20, shl(0x60, caller()))
            mstore(0x34, receiptHash)
            mstore(0x54, chainid())
            mstore(0x74, shl(0x60, address()))

            sstore(key, keccak256(0x00, 0x88))
        }
        emit Append(msg.sender, receiptHash);
    }
}