| 12345678910111213141516171819202122232425262728293031323334 |
- param secret
- param serial
- param coin_merkle_branch[4]
- param coin_merkle_is_right[4]
- constant generator_coin
- constant generator_value_commit_value
- constant generator_value_commit_random
- public nullifier = mimc_hash(secret, serial)
- private (public_u, public_v) = jj_mul(secret, generator_coin)
- public coin = mimc_hash(public_u, public_v, value, serial, randomness_coin)
- let current = coin
- for i in range(4):
- branch = coin_merkle_branch[i]
- is_right = coin_merkle_is_right[i]
- # reverse(a, b, condition) = if condition (b, a) else (a, b)
- private left, right = conditionally_reverse(current, branch, is_right)
- # Only the last one is public
- if i == 3:
- current = public mimc_hash(left, right)
- else:
- current = private mimc_hash(left, right)
- private value_digits = unpack(value)
- rangeproof_assert(value, value_digits)
- public value_commit = jj_add(
- jj_mul(value, generator_value_commit_value),
- jj_mul(randomness_value, generator_value_commit_random)
- )
|