DCIPs/assets/eip-5289/ERC5289Library.sol

43 lines
1.3 KiB
Solidity

/// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.0;
import "./interfaces/IERC165.sol";
import "./interfaces/IERC5289Library.sol";
contract ERC5289Library is IERC165, IERC5289Library {
uint16 private counter = 0;
mapping(uint16 => string) private uris;
mapping(uint16 => mapping(address => uint64)) signedAt;
constructor() { }
function registerDocument(string memory uri) public returns (uint16) {
uris[counter] = uri;
return counter++;
}
function legalDocument(uint16 documentId) public view returns (string uri) {
return uris[documentId];
}
function documentSigned(address user, uint16 documentId) public view returns (bool isSigned) {
return signedAt[documentId][user] != 0;
}
function documentSignedAt(address user, uint16 documentId) public view returns (uint64 timestamp) {
return signedAt[documentId][user];
}
function signDocument(address signer, uint16 documentId) public {
require(signer == msg.sender, "invalid user");
signedAt[documentId][msg.sender] = uint64(block.timestamp);
emit DocumentSigned(msg.sender, documentId);
}
function supportsInterface(bytes4 _interfaceId) public view returns (bool) {
return _interfaceId == type(IERC5289Library).interfaceId;
}
}