diff --git a/contracts/examples/ProofOfExistence.sol b/contracts/examples/ProofOfExistence.sol new file mode 100644 index 000000000..e12382e43 --- /dev/null +++ b/contracts/examples/ProofOfExistence.sol @@ -0,0 +1,37 @@ +import "../Rejector.sol"; + +/* + * Proof of Existence example contract + * see https://medium.com/zeppelin-blog/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05 + */ +contract ProofOfExistence is Rejector { + + mapping (bytes32 => bool) public proofs; + + // store a proof of existence in the contract state + function storeProof(bytes32 proof) { + proofs[proof] = true; + } + + // calculate and store the proof for a document + function notarize(string document) { + var proof = calculateProof(document); + storeProof(proof); + } + + // helper function to get a document's sha256 + function calculateProof(string document) constant returns (bytes32) { + return sha256(document); + } + + // check if a document has been notarized + function checkDocument(string document) constant returns (bool) { + var proof = calculateProof(document); + return hasProof(proof); + } + + // returns true if proof is stored + function hasProof(bytes32 proof) constant returns (bool) { + return proofs[proof]; + } +} diff --git a/migrations/2_deploy_contracts.js b/migrations/2_deploy_contracts.js index 8db14c0b9..b29a532cc 100644 --- a/migrations/2_deploy_contracts.js +++ b/migrations/2_deploy_contracts.js @@ -1,6 +1,7 @@ module.exports = function(deployer) { deployer.deploy(PullPaymentBid); deployer.deploy(BadArrayUse); + deployer.deploy(ProofOfExistence); deployer.deploy(Bounty); deployer.deploy(Ownable); deployer.deploy(LimitFunds);