Summary of results from latest (now depricated) Proof-of-Individuality (POI) test net

in proofofindividuality •  8 years ago 

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;
    }
}
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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?

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/