Tamper-Evident Receipt Chain
tamper-evident-receipt-chain · receipt-attestation · 579 B runtime · registry-info
scores
- usefulness: 9
- safety: 9
- liveness: 10
- authenticity: 9
- extensibility: 10
- bytecodeDiscipline: 10
- practical: 9
source
pragma solidity ^0.8.13;
contract ReceiptChain {
struct Chain {
bytes32 latestHash;
uint256 nonce;
}
mapping(address => Chain) public chains;
event ReceiptPublished(
address indexed agent,
uint256 indexed nonce,
bytes32 payloadHash,
bytes32 prevReceiptHash,
bytes32 receiptHash
);
function publish(bytes32 payloadHash) external returns (bytes32) {
Chain storage chain = chains[msg.sender];
bytes32 prev = chain.latestHash;
uint256 nonce = chain.nonce;
bytes32 receiptHash = keccak256(abi.encodePacked(msg.sender, nonce, payloadHash));
chain.latestHash = receiptHash;
chain.nonce = nonce + 1;
emit ReceiptPublished(msg.sender, nonce, payloadHash, prev, receiptHash);
return receiptHash;
}
function getChain(address agent) external view returns (bytes32 latestHash, uint256 nextNonce) {
Chain storage chain = chains[agent];
return (chain.latestHash, chain.nonce);
}
}