隐私代币合约使用指南

1. 概述

该代币合约利用同态加密和零知识证明来隐藏用户在代币合约中的余额和交易过程中的金额。为了在保证代币合约中资产安全性的前提下,达到保护用户隐私的需求,用户在使用隐私代币合约时,需要使用线下工具生成同态加密算法的公私钥和交易过程中的零知识证明。目前,已有同态加密和零知识证明的算法库和工具,供合约调用和用户线下使用。

2. 流程描述

流程包括代币生成(初始化),用户注册(向token合约注册自己的公钥),代币交易。上述过程需要线下和线上(合约调用)两个部分配合。

3. 操作演示

3.1. 合约部署者公私钥 Deployer key

pubkey:
XZo30iKb0xe5wsUU57y+h/Z5mGEwpED3By8XZwlvq0CWBvcPscTBkh/ImGTbjinWZEZA9IWfIvWqGDPCOt6GIdn/INW+1eu3w89cOok8VPBezOo9YunV/PtGtvnA8DNF/iBKyus4q0qVsoAX5c2odwTCkLBv+uGLcWstE68vgGUiOWl14iLSNPaLSTBb4xABfbmb76+v823kRjXzqzlP5oaFecCav48+MlCmWQGfI0bZbu/sg97z5cP7TmfWWB8uc7HpXx4KyjPaSFAx5S5+65EuIYn6frCirulEVXMsTOyESSUPiqSpbJMzmzb7K2T9X/grtXJoZiuf6+fwcvcEH1/q7yP9Inm1sO6A1zSV+I6T+EmP+5WtIhJ+ioNI88P9m09L0Ndeyw3GouD1VAjPsw6qIg+ysWYgjo5YZfEc5vo3o0GUgFrjICekm13qeyr4YmOzJfM0yG7TLcGdptVwZDU4nAS1AnpLObMiyzc97cvxEtz6L5dF1qqAi1h7eyfZXZo30iKb0xe5wsUU57y+h/Z5mGEwpED3By8XZwlvq0CWBvcPscTBkh/ImGTbjinWZEZA9IWfIvWqGDPCOt6GIdn/INW+1eu3w89cOok8VPBezOo9YunV/PtGtvnA8DNF/iBKyus4q0qVsoAX5c2odwTCkLBv+uGLcWstE68vgGY=

seckey:
XZo30iKb0xe5wsUU57y+h/Z5mGEwpED3By8XZwlvq0CWBvcPscTBkh/ImGTbjinWZEZA9IWfIvWqGDPCOt6GIKPKiL1kPLS76xThY2EuLDDqV4G5RZARfPYhdR6OAhwp6xqsFA53rGNFs3h2Sh6GOv7yyQPzyULSCoZ587Or1iwLFWuhGQ2XPR4bjE5tcbjV7WMsfM6OM4bIFLFQ/XVyuMLtTrFnjqRS44QGBElW8rLcNe1ZI/QvCzaILpsman++rAXzhemc9a/5K9KDJDzwQCK5B7oa9lcf8QKU74rXgASnda7lIPk7xmKkA/GQAhlmx3rUHHpJ9eEqMYoX4G/Tpg==

3.2. 部署隐私代币合约 Deploy contract

ctool deploy --code ~/PlatONE-Go/release/linux/conf/contracts/token.wasm --abi ~/PlatONE-Go/release/linux/conf/contracts/token.cpp.abi.json --config ../ctool.json
# generate user keys offline
./nizkpail
cmd> 1

#upload user pubkey
ctool invoke --addr 0x6566ed9c6c5accf27ebdcadae3f04f16220c6b2a --func userregister --param mi++ciEiqNGsHajPbYCCk01oaUkPICWfcPyg204sSOiRWDqd3iJppTSspSiQaRNRk+6qjrBxa7zwT+zvpEvnAXO+aaV4oIyrTrhGZd3cKNzBBziTQAMYNBDlsRv7GnrMhAZxJKGfF5bmB74NMOh741tQ9RBuHRz0gUKN9jXsTe1c3XoIy3N55znQbG4yTEyZLoj1lwYM3fOGXr4LDW+n1Dl1G/F5Aj3d3fv0dYjcrhs05k/eggWMktKMPQPDl0CSfDZyhlp6US1g4nE9W61R1NCYZCaAwjy+zLUr2h8NZE0OPvLn53wk52enCWmgUfDlwOeAzhuffM7U1UcDWTzA3miMnvUQZOIyS8+F+FuCkeCyibdug0S3OmPWxe6lWDUBkMEw0v3DAMA1EJ9nhjqtFu5y9mwDxrazkr88kdM7xa8oSj6bcrQXbU3viye7s36Il91nc1v8YV96cC2dmN96CdXQCkHVZt4EyLEqvdOHhkM0IUejczd8WwOMh9/msG1pmi++ciEiqNGsHajPbYCCk01oaUkPICWfcPyg204sSOiRWDqd3iJppTSspSiQaRNRk+6qjrBxa7zwT+zvpEvnAXO+aaV4oIyrTrhGZd3cKNzBBziTQAMYNBDlsRv7GnrMhAZxJKGfF5bmB74NMOh741tQ9RBuHRz0gUKN9jXsTe4= --abi ~/PlatONE-Go/release/linux/conf/contracts/token.cpp.abi.json --config ../config.json
# generate zk proof
./nizkpail
cmd> 6

#invoke transfer function

ctool invoke --addr 0x6566ed9c6c5accf27ebdcadae3f04f16220c6b2a --func transfer --param ${pai} --param ${fromAmountCipher} --param ${toAmountCipher} --param 0x5224a76e6ce5a1e2d6839c72fc5bdebe90bede68 --abi ~/PlatONE-Go/release/linux/conf/contracts/token.cpp.abi.json --config ../ctool.json
ctool invoke --addr 0x6566ed9c6c5accf27ebdcadae3f04f16220c6b2a --func getBalance --param 0xf564dbddb09083ecf801b1a26e4d356213a3dcf7  --abi ~/PlatONE-Go/release/linux/conf/contracts/token.cpp.abi.json --config ../config.json

ps: addr 0x5224a76e6ce5a1e2d6839c72fc5bdebe90bede68