As I had learnt a bit more Ethereum development, I finished a test ProofOfIndividuality network, https://testnet.etherscan.io/address/0x74bcba9e46037eedeecef3cf9037b59a58d0e3cb#code
To bug test, I launched a test net with a 7 hour cycle, instead of 28 days, so that anyone could test it, and if a number of people were to test it at the same time, they could test-hangout over http://appear.in/hangout-address, and verify one another using the point-system in contract hangout
.
The POI system uses a few different smart-contracts, you can find them all under Read Contract on https://testnet.etherscan.io/address/0x74bcba9e46037eedeecef3cf9037b59a58d0e3cb#code
The POI whitepaper
Anti-Sybil Protocol Using Virtual Pseudonym Parties
The technical limitations are that the system needs integration with time-based alarm scheduling, which has been available for a while on different Ethereum test nets and should hit the main net soon.
Interact with the test net
The user has to register in two steps. First, register() payable
which generates a hash from the user. Then some 14 days later, or 2 hours later on this test net, they have to commit()
, which assigns them to a group based on their userHash
, and the max hash, 1.159 quindecillion.
To register and then commit, here is a gist of the registration ABI, https://gist.github.com/anonymous/12ff224a4e6158ed1ec7bf7d0fa0779e, the contract is on 0x24f02ee355dde8ef01f61566d89cc04bf59a12ba.
The registration contract will then assign you into a hangout group and give you a hangout address. At the moment, groups could host their test pseudonym parties on http://appear.in/hangout-address
The POI system currently creates a hangout contract per group, at a gas cost of 0.01 ETH,
https://testnet.etherscan.io/tx/0x7fb1b12188e37e437f9c3a4d25fd049e14e1d9410953d629e6416cf0424a1113
These Hangout contracts then pass the verified users back to the registration contract, which sends them to the ProofOfIndividuality contract, that sends them to contract Poi
which stores that months POIs.
Using this many contracts may be a waste of gas, and it may complicate things. It was how I organized it while I was learning and developing at the same time, as a novice smart-contract developer it was easier to conceptually compartmentalize things. Now that I understand smart-contracts a bit better I may re-write the whole thing.
This here would be more gas efficient,
enum State { Registration, Commitment, Hangout, IssuePOIs }
mapping(uint => address[]) PseudonymPartyGroup;
mapping(address => bool) POI;
function givePoints(address _to, uint _value) inState(State.Hangout) {
if(userGroup[_to] != userGroup[msg.sender] throw;
}
function submitVerifiedUsers() inState(State.IssuePOIs) {
uint groupNumber = userGroup[msg.sender];
for(uint i = 0; i < PseudonymPartyGroup[groupNumber].length; i++){
address nym = PseudonymPartyGroup[groupNumber][i];
if(points[nym] > 4000) POI[nym] = true;
}
}
I wish I could run these smart contracts but the blocks are just crawling in, and still over 500,000 to go until I am current with the Ethereum blocks. The Ethereum-wallet shows 13 peers too. Maybe there is a trustworthy .zip file out there somewhere with past blocks?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
You could use http://myetherwallet.com, they have contract support and support for the Ethereum Ropsten test net since yesterday :) :)
There is a new PoC for the POI system now, that I've written today since I posted this blog-post summary of the progress so far,
https://www.reddit.com/r/ethereum/comments/5nbm95/proofofindividuality_poi_poc3/
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit