43 lines
1.3 KiB
Solidity
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;
|
|
}
|
|
}
|