An introduction to Suterusu Shield

Heisenberg Lin
Suterusu
Published in
5 min readNov 24, 2020

Suterusu Shield is a product that allows the user to invoke the private payment functionality provided by the Suterusu protocol. The following is the user interface of the coming Suter Shield product:

The interested readers are referred to this link (https://medium.com/suterusu/an-introduction-to-the-suterusu-protocol-fe890bc49ead) for a detailed introduction of how the Suterusu protocol works.

A user that intends to protect the payment privacy of any ERC-20 token, say USDT could use Suter Shield to launch a private payment to himself (or herself) to hide the trace of any ERC-20 token. Here we assume the user at least has two Metamask wallets with different secret keys.

Suppose the user wishes to use the Suter Shield functionality to transfer USDT in an anonymous and confidential manner. The first thing one needs to make sure of is both Metamask wallets have a Suter-USDT account. This can be achieved by first add the Suter-USDT token to the Metamask account since Suter-USDT is basically an ERC-20 token, so this step is identical to adding any other ERC-20 token. In addition, the webpage UI provides a button “Register or fetch your Suter account public key”, under which you could find a token list in which a specific Suter token can be selected. In our case the user chooses the Suter-USDT token, and click on the “Register or fetch your Suter account public key” button, a dialog box will pop up and remind the user to “Enter your Metamask account private key”. The user inputs his or her private key and the backend algorithm will generate H(Metamask secret key) as the user’s Suter ERC-20 token account secret key, and then invokes the public key generation algorithm to derive the Suter ERC-20 token account public key. The output public key will be displayed either as a string or a bar code so that the user can copy the string or the bar code and send it to the transaction sender when needed. The output public key will be stored in the cookie.

Note this whole process happens on the client-side while all the private information especially the user’s Metamask private key never leaves the user’s client-side device. Therefore, there is no risk of leaking the user’s private information. Since the Suter ERC-20 account private key is derived from the Metamask private key, the user can generate the account private key on the fly in any of his or her devices, the user doesn’t need to store the Suter ERC-20 private key either.

Suppose the user wishes to convert USDT stored in Metamask wallet 1 into Suter-USDT. The user clicks on the “Deposit” frame under wallet 1, then clicks the Token list to select the type of token (s)he intends to deposit. In this example, (s)he will choose USDT and then the USDT amount (s)he intends to deposit, say the 10 USDT in wallet 1. Afterward, (s)he will click on the “fund” button, upon which the backend will run the CreateFundTx algorithm, which in turn triggers the Fund contract to convert the USDT in address 1 to Suter-USDT. Note the moment the “fund” button is clicked, the backend will first check whether the public key of Suter-USDT can be found in the cookie of Metamask wallet 1. A dialog box will pop up to remind the user “you need to register a Suter-USDT account” if the public key is absent. The user can then go through the aforementioned register process to generate the public key. After the registration, the user can paste the public key in the dialog box, which would be taken as the input of the CreateFundTx algorithm.

After the Fund contract is verified by the blockchain, the user should be able to see under Metamask wallet 1, the amount of USDT token is reduced by 10, and the amount of Suter-USDT token adds 10 more.

Suppose now the user wishes to invoke the Suter transfer functionality, the user needs to first specify the target Suter-USDT account. When the user clicks on the transfer button under the “Deposit” frame, a dialog box “You need to specify the target Suter account public key” pops up.

If the target public key is generated by the user himself (or herself), the user can simply click on the “Register or fetch your Suter account public key” button and input the target Metamask wallet secret key and generate the public key, and then paste the public key in the dialog box, which would be taken as the input of the CreateTransferTx algorithm.

If the target public key is generated by another receiver. The receiver could generate the public key by registration in a similar manner and send the public key to the sender via other communication channels such as Telegram or Wechat. The sender can then paste the received public key in the dialog box, which would be taken as input to the CreateTransferTx algorithm. Note when a public key is pasted in a dialog box, the backend could check whether the format of the public key is correct by checking whether it is indeed a point in the elliptical curve of our scheme.

Now the backend is ready to run the CreateTransferTx algorithm, which takes the secret key of account 1 and the public key of the target account and the public keys of the anonymity set and the transaction amount as input. This algorithm will generate the zero-knowledge proof, which will be used as input to trigger the transfer contract. After clicking the “transfer” button and the transfer contract is verified by the blockchain, the user can check the receiver Metamask account to check whether there are 10 more Suter-USDT under its wallet.

To convert the 10 Suter-USDT tokens back to 10 USDT tokens in a Metamask wallet in Suter Shield, the user first switches to the respective Metamask account and clicks on the “connect wallet” button. Then (s)he clicks on the “Withdraw” frame and selects the Suter-USDT token and then clicks on the “burn” button. A dialog box “Please enter your Metamask token secret key” pops up. The user inputs the Metamask secret key and the backend will run the H(Metamask secret key) algorithm to generate the user’s Suter ERC-20 token account secret key, which will be treated as the input of the CreateBurnTx algorithm. The backend then runs the CreateBurnTx algorithm, which triggers the Burn contract. After this contract is verified by the blockchain, the user should see that the amount of Suter-USDT tokens under this account is reduced by 10, and its USDT account adds 10 tokens when the Burn contract is verified by the blockchain.

The following is the flowchart of our Suter Shield product:

--

--