diff --git a/src/TimeStampAuthority3.sol b/src/TimeStampAuthority3.sol new file mode 100644 index 0000000000000000000000000000000000000000..542feeb4fd6bdf85ceff3e7a0105a649cb265691 --- /dev/null +++ b/src/TimeStampAuthority3.sol @@ -0,0 +1,60 @@ +// 20180718 Robert Martin-Legene <robert@nic.ar> +// Time stamp authority +// vim:filetype=javascript + +pragma solidity ^0.5.2; + +contract TimeStampAuthority { + struct stamp { + uint256 stamped; + address stamper; + uint256 blockno; + } + stamp[] stamplist; + // Provide mappings from what is being stamped, back to the stamplist + mapping ( uint256 => uint256[] ) hashstamped; + // Provide mappings from who is stamping, back to the stamplist + mapping ( address => uint256[] ) hashstamper; + constructor() public { + // We don't like to assign anything to position 0, so we fill + // it with a dummy which just happens to also have information + // about the creator and the blocknumber it was created. + stamplist.push( stamp( 0, msg.sender, block.number) ); + } + // Stores hashes (256 bit uint) in the mapping + function put( uint256[] memory hasharray ) public { + uint256 i = 0; + uint256 max = hasharray.length; + while ( i<max ) + { + uint256 h = hasharray[i]; + uint256 idx = stamplist.push( stamp( h, msg.sender, block.number ) ) - 1; + hashstamped[h].push( idx ); + hashstamper[msg.sender].push( idx ); + i++; + } + } + + function getStamplistPos( uint256 pos ) public view returns ( uint256, address, uint256 ) + { + return (stamplist[pos].stamped, stamplist[pos].stamper, stamplist[pos].blockno ); + } + // returns the number of stamps stored with this hash + function getStampedCount( uint256 hash ) public view returns (uint256) { + return hashstamped[hash].length; + } + // returns the index position into the stamplist + function getStampedPos( uint256 hash, uint256 pos ) public view returns (uint256) + { + return hashstamped[hash][pos]; + } + // returns the number of stamps stored from this sender + function getStamperCount( address sndr ) public view returns (uint256) { + return hashstamper[sndr].length; + } + // returns the index position into the stamplist + function getStampedPos( address sndr, uint256 pos ) public view returns (uint256) + { + return hashstamper[sndr][pos]; + } +}