Last active
April 9, 2018 13:31
-
-
Save evertonfraga/eb35484929a686f4214ec10711f3f534 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "factIndex", | |
"type": "uint256" | |
}, | |
{ | |
"name": "validator", | |
"type": "address" | |
} | |
], | |
"name": "isTrustedBy", | |
"outputs": [ | |
{ | |
"name": "isTrusted", | |
"type": "bool" | |
} | |
], | |
"payable": false, | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "pointer", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"payable": false, | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "factIndex", | |
"type": "uint256" | |
} | |
], | |
"name": "attest", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"payable": false, | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "", | |
"type": "uint256" | |
}, | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"name": "validations", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"payable": false, | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "description", | |
"type": "string" | |
}, | |
{ | |
"name": "meta", | |
"type": "string" | |
} | |
], | |
"name": "newFact", | |
"outputs": [], | |
"payable": false, | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"name": "facts", | |
"outputs": [ | |
{ | |
"name": "reportedBy", | |
"type": "address" | |
}, | |
{ | |
"name": "description", | |
"type": "string" | |
}, | |
{ | |
"name": "meta", | |
"type": "string" | |
}, | |
{ | |
"name": "validationCount", | |
"type": "uint256" | |
} | |
], | |
"payable": false, | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"name": "factIndex", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": true, | |
"name": "reportedBy", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"name": "description", | |
"type": "string" | |
}, | |
{ | |
"indexed": false, | |
"name": "meta", | |
"type": "string" | |
} | |
], | |
"name": "NewFact", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "factIndex", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"name": "validator", | |
"type": "address" | |
} | |
], | |
"name": "AttestedFact", | |
"type": "event" | |
} | |
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.4.20; | |
contract Pointer { | |
uint256 public pointer; | |
function bumpPointer() internal returns (uint256 p) { | |
return pointer++; | |
} | |
} | |
contract DistributedTrust is Pointer { | |
mapping(uint256 => Fact) public facts; | |
mapping(uint256 => mapping(address => bool)) public validations; | |
event NewFact(uint256 factIndex, address indexed reportedBy, string description, string meta); | |
event AttestedFact(uint256 indexed factIndex, address validator); | |
struct Fact { | |
address reportedBy; | |
string description; | |
string meta; | |
uint validationCount; | |
} | |
modifier factExist(uint256 factIndex) { | |
assert(facts[factIndex].reportedBy != 0); | |
_; | |
} | |
modifier notAttestedYetBySigner(uint256 factIndex) { | |
assert(validations[factIndex][msg.sender] != true); | |
_; | |
} | |
function newFact(string description, string meta) public { | |
uint256 factIndex = bumpPointer(); | |
facts[factIndex] = Fact(msg.sender, description, meta, 0); | |
attest(factIndex); | |
NewFact(factIndex, msg.sender, description, meta); | |
} | |
function attest(uint256 factIndex) factExist(factIndex) notAttestedYetBySigner(factIndex) public returns (bool) { | |
validations[factIndex][msg.sender] = true; | |
facts[factIndex].validationCount++; | |
AttestedFact(factIndex, msg.sender); | |
return true; | |
} | |
function isTrustedBy(uint256 factIndex, address validator) factExist(factIndex) view public returns (bool isTrusted) { | |
return validations[factIndex][validator]; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Published at: 0x69dc41428b1457232ce454a4b9d8e67709243996 | |
execute `attest` method with `0` as param |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment