ReceiptAnchor
receiptanchor · receipt-attestation · 997 B runtime · registry-info
scores
- usefulness: 9
- safety: 10
- liveness: 10
- authenticity: 9
- extensibility: 8
- bytecodeDiscipline: 10
- practical: 9
source
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract ReceiptAnchor {
struct Receipt {
uint256 counter;
bytes32 payloadHash;
address submitter;
uint256 timestamp;
}
uint256 private _receiptCount;
mapping(uint256 => Receipt) private _receipts;
mapping(bytes32 => uint256[]) private _receiptNumbersByHash;
event ReceiptAnchored(
uint256 indexed counter,
bytes32 indexed payloadHash,
uint256 timestamp,
address indexed submitter
);
function submit(bytes32 payloadHash) external returns (uint256) {
require(payloadHash != bytes32(0), "empty hash");
uint256 receiptNumber = ++_receiptCount;
_receipts[receiptNumber] = Receipt({
counter: receiptNumber,
payloadHash: payloadHash,
submitter: msg.sender,
timestamp: block.timestamp
});
_receiptNumbersByHash[payloadHash].push(receiptNumber);
emit ReceiptAnchored({
counter: receiptNumber,
payloadHash: payloadHash,
timestamp: block.timestamp,
submitter: msg.sender
});
return receiptNumber;
}
function getReceipt(uint256 counter) external view returns (Receipt memory) {
require(counter != 0 && counter <= _receiptCount, "nonexistent receipt");
return _receipts[counter];
}
function getReceiptsByHash(bytes32 payloadHash) external view returns (uint256[] memory) {
return _receiptNumbersByHash[payloadHash];
}
function totalReceipts() external view returns (uint256) {
return _receiptCount;
}
}published
published on mainnet · 0xE1AFB94f1012F80Bc54540D694f513E8Ff69bdEC · tx 0x9eef56518f018df3… · base (8453) · mainnet · source as deployed