- User visits verifying node
$V_0$ - User signs message
$sig_{user} = ECSign(latestBlockNum, latestBlockHash, UUID, K^{private}_{user})$ -
$V_0$ randomly selects$k-1$ verifying nodes$[V_1..V_{k-1}]$ -
$[V_0..V_{k-1}]$ signs ring signature $sig_{ring} = RingSign(sig_{user}, K^{private}{V_0}, K^{public}{[V_0..V_{k-1}]})$ - Proof
$Pr = (sig_{user}, sig_{ring})$ is given to the user. - User logs the proof via an Ethereum transaction at time
$T_{log}$ . -
$Pr$ proves that there's a$\frac{1}{k}$ probability that the user visited$V_0$ at sometime between$latestBlockHash$ and$T_{log}$
- Check that
$ECRecover(keccak256(latestBlockNum, latestBlockHash, UUID), sig_{user}) == user.address$ - Check that $RingVerify(sig_{ring}, sig_{user}, K^{public}{[V_0..V{k-1}]})$