Canonical ECDSA Signature Enforcement
canonical-ecdsa-signature-enforcement · receipt-attestation · 779 B runtime · registry-info
scores
- usefulness: 85
- safety: 92
- liveness: 95
- authenticity: 88
- extensibility: 75
- bytecodeDiscipline: 90
- practical: 88
source
pragma solidity ^0.8.13;
contract AckAttestation {
mapping(address => uint256) private _nonces;
event Attested(bytes32 indexed payloadHash, address indexed signer, uint256 blockNumber, uint256 nonce);
function attest(
bytes32 payloadHash,
uint256 nonce,
uint8 v,
bytes32 r,
bytes32 s
) external returns (address signer) {
require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0);
bytes32 digest = keccak256(abi.encodePacked(payloadHash, nonce, block.chainid, address(this)));
signer = ecrecover(digest, v, r, s);
require(signer != address(0) && nonce == _nonces[signer]);
_nonces[signer]++;
emit Attested(payloadHash, signer, block.number, nonce);
}
function nonceOf(address signer) external view returns (uint256) {
return _nonces[signer];
}
}published
published on mainnet · 0x6823c4950F7D7927B33c6A64D6347EAc8e797646 · tx 0xc6e866e22f59c625… · base (8453) · mainnet · source as deployed
published on testnet · 0x7A3589f90c9B84AeDe2222263Cc351537eb33C36 · tx 0x6e822e0348025055… · base (84532) · testnet · source as deployed