An account on the base layer is defined as a pair of pubkey and a commitment s.t.
Acci=(pki,comi)  s.t.  pki=(giri,hiri) Acc_i=(pk_i,com_i) \ \ s.t. \ \ pk_i = (g_i^{r_i},h^{r_i}_i) \
where g is the globally available generator point, r is a random scalar and h is defined as
Note h here is not a global generator point but an elgamal public key point. Commitment is defined as an elgamal style commitment scheme s.t.
com=(gi(riri),gvhi(riri))com=(g_i^{(r_i*r'_i)} ,g^vh_i^{(r_i*r'_i)})
where r' is a random scalar which updates the public key points to generate a new commitment for the key and v is the secret scalar of the balance in the account s.t.
0bl<2320\leq bl<2^{32}

Updatable Accounts

A public key is updated using scalar multiplication of a random scalar
with the group elements.
Update(pk,r1)=(gr1,hr1)=pkUpdate(pk,r_1)= (g^{r_1},h^{r_1})=pk'
A commitment is updated by adding it to a new zero balance commitment, generated using
Update(com,r2)=comCommitpk(0,r2)Update(com,r_2)=com \cdot Commit_{pk}(0,r_2)
Accounts are updated by updating public key
pkpkpk→ pk'
, generating a zero balance commitment using
and adding the previous and new commitment
compk(v)compk(0,r2)com_{pk}(v) \cdot com_{pk}(0,r_2)
UpdateAcc(pk,com);r1,r2=Update(pk,r1);comCommitpk(0,r2)UpdateAcc(pk, com); r_1,r_2=Update(pk,r_1);com\cdot Commit_{pk}(0,r_2)
This construction follows the Updatable Public Key primitive introduced in QuisQuis by Mieklejohn (2018).
Copy link