Ethereum Classic
$4.84 -0.02%
ETC · 20w

Ring signatures for Pseudonym Pairs — Steemit

Code to add ring signatures to Pseudonym Pairs now finished, based on laundromat.sol from Andrew "blackyblack" Lekar.

How it works, after the pseudonym event, everyone has to mix, the whole global population has to mix their proofs, and do so by joining mixers, incrementally, a new mixer created once the previous one is full. Very simple. There are two sets of mixers, one for NYM, another for registering for the next pseudonym event. Once a mixer group has formed, anyone can finish the transfer of their keys regardless of everyone else, so no risk of getting "locked in". The strays, as in the people who are at the end in case the population size is not evenly divisible by factors of 4, are sorted into a mixer of 3 people, at most three mixers with 3 people.

mapping(address => bool) verified; uint totalVerified; /* Two separate mixers, one for the NYM token and one to register for the next pseudonym event */ mapping(uint => address[4][2]) mixer; mapping(address => uint[2]) mixerIndex; uint[2] mixerCount = [1, 1]; mapping(address => uint[2]) publicKey; uint constant internal Gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240; uint constant internal Gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424; address internal constant arithAddress = 0x600ad7b57f3e6aeee53acb8704a5ed50b60cacd6; ArithLib private arithContract = ArithLib(arithAddress); struct MixerInfo { address sender; uint Ix; uint Iy; uint[] signature; uint[] ring1; uint[] ring2; uint step; uint prevStep; } mapping (address => MixerInfo[2]) private withdraws; mapping (uint => bool) private consumed; event mixingErrorMessage(string message); function attachPublicKey(bytes _publicKey) { require(verified[msg.sender] == true); require(publicKey[msg.sender][0] == 0); require(address(keccak256(_publicKey) == msg.sender); uint pubkey1; uint pubkey2; assembly {...
Continue on steemit.com
Recent news
No posts found