屏蔽转账 (Shielded Transfers)

在Namada中,多资产隐私池 (MASP) 使得隐私转账成为可能。MASP是一种zk-SNARK ,它扩展了Zcash Sapling电路,以支持发送任意资产。池中的所有资产共享同一个匿名集,这意味着向MASP发出的交易越多,隐私保障就越强。


使用MASP

如果你熟悉Zcash,你可以执行的MASP交互集合会很相似:

  • 隐蔽转账:从透明地址到隐私地址

  • 隐私转账:从隐私地址到隐私地址

  • 取消隐私的转账:从隐私地址到透明地址

我们区分两种私钥:

  • Spending Key是一种私钥,任何拥有它的用户都可以消费相关地址的余额。对于隐私地址,拥有Spending Key还允许用户查看地址的余额和交易数据。

  • Viewing Key允许任何拥有它的用户查看和披露交易详情。它由Spending Key派生而来,并保持相同的别名。

隐蔽转账

要进行隐蔽转账,用户首先必须拥有一些代币余额的透明账户。

生成你的Spending Key

可以通过以下命令随机生成一个新的Spending Key:

namadaw masp gen-key --alias <your-spending-key-alias>

此命令还将生成一个共享相同别名的对应Viewing Key。

创建一个新的支付地址

要从Spending Key创建支付地址,可以运行:

namadaw masp gen-addr \
    --key <your-spending-key-alias> \
    --alias <your-payment-address-alias>

每次用户运行命令时,此命令都会生成一个不同的支付地址。用户可以根据喜好重用或丢弃支付地址,并且没有Spending Key的任何其他用户都无法解密地址之间的任何关系。

发送你的隐蔽转账

一旦有了支付地址,就可以将透明账户的余额转移到隐私账户:

namadac transfer \
    --source <your-established-account-alias> \
    --target <your-payment-address-alias> \
    --token btc \
    --amount <amount-to-shield>

查看余额

一旦此转账被广播、验证并在区块链上执行,就可以查看Spending Key的余额:

namadac balance --owner <your-spending-key-alias>

隐私转账

一旦用户拥有了隐私余额,就可以将其转移到另一个隐私地址:

namadac transfer \
    --source <your-spending-key-alias> \
    --target <destination-payment-address> \
    --token btc \
    --amount <amount-to-transfer> \
    --signing-keys <your-implicit-account-alias>

取消隐私的转账

也可以将余额转移到透明账户:

namadac transfer \
    --source <your-spending-key-alias> \
    --target <some-transparent-address-alias> \
    --token btc \
    --amount <amount-to-unshield> \
    --signing-keys <your-implicit-account-alias>

生成屏蔽地址/密钥(Shielded Address/Key Generation)

生成支出密钥(Spending Key Generation)

当客户端生成支出密钥时,它会自动为其派生一个查看密钥(viewing key)。支出密钥充当从其派生的任何屏蔽地址进行任何转账的"源"。查看密钥能够确定支出密钥有权支出的总未花费注释。

生成支付地址(Payment Address Generation)

支付地址可以从支出密钥和查看密钥派生。支付地址充当目的地址,该地址接收的任何令牌可由相应的支出密钥支出。只有支付地址的支出密钥和查看密钥才能分别支出和查看支付地址的余额。以下是如何生成支付地址的示例:

namadaw masp gen-addr --alias my-pa1 --key my-sk
namadaw masp gen-addr --alias my-pa2 --key my-vk

手动添加密钥/地址(Manual Key/Address Addition)

也可以手动以原始形式添加支出密钥、查看密钥和支付地址。下面的命令展示了这一点:

namadaw masp add --alias my-sk --value xsktest1qqqqqqqqqqqqqq9v0sls5r5de7njx8ehu49pqgmqr9ygelg87l5x8y4s9r0pjlvu69au6gn3su5ewneas486hdccyayx32hxvt64p3d0hfuprpgcgv2q9gdx3jvxrn02f0nnp3jtdd6f5vwscfuyum083cvfv4jun75ak5sdgrm2pthzj3sflxc0jx0edrakx3vdcngrfjmru8ywkguru8mxss2uuqxdlglaz6undx5h8w7g70t2es850g48xzdkqay5qs0yw06rtxcvedhsv
namadaw masp add --alias my-vk --value xfvktest1qqqqqqqqqqqqqqpagte43rsza46v55dlz8cffahv0fnr6eqacvnrkyuf9lmndgal7erg38awgq60r259csg3lxeeyy5355f5nj3ywpeqgd2guqd73uxz46645d0ayt9em88wflka0vsrq29u47x55psw93ly80lvftzdr5ccrzuuedtf6fala4r4nnazm9y9hq5yu6pq24arjskmpv4mdgfn3spffxxv8ugvym36kmnj45jcvvmm227vqjm5fq8882yhjsq97p7xrwqt7n63v
namadaw masp add --alias my-pa --value patest10qy6fuwef9leccl6dfm7wwlyd336x4y32hz62cnrvlrl6r5yk0jnw80kus33x34a5peg2xc4csn

执行屏蔽交易(Making Shielded Transactions)

屏蔽交易(Shielding Transactions)

为了从透明地址屏蔽令牌,用户必须首先生成一个屏蔽支付地址,用户为其持有支出密钥。然后可以从透明地址转账到新创建的屏蔽支付地址。完成此过程后,新令牌现在被视为"屏蔽"。燃气费用将由将令牌转移到屏蔽支付地址的源地址承担。屏蔽令牌的操作如下:

namadac transfer --source Bertha --amount 50 --token BTC --target my-pa

取消屏蔽交易(Unshielding Transactions)

"取消屏蔽"是将令牌余额从屏蔽集合转移到透明集合的过程。当用户从一个屏蔽账户(使用相应的支出密钥)转账到一个透明账户时,新转移的资金被视为"未屏蔽"。燃气费用将由签名者的地址承担(应默认为目标地址)。交易完成后,支出密钥将不再能够支出已转移的金额。以下是执行取消屏蔽交易的示例:

namadac transfer --target Bertha --amount 45 --token BTC --source my-sk

屏蔽交易(Shielded Transactions)

屏蔽转账是从一个屏蔽账户到另一个屏蔽账户进行的。从用户的角度来看,这几乎等同于透明-透明令牌转账,只是燃气费是由交易的签名者支付的。执行屏蔽转账的命令如下:

namadac transfer --source my-sk --amount 5 --token BTC --target your-pa

查看屏蔽余额(Viewing Shielded Balances)

从支出密钥派生的查看密钥允许持有该密钥的任何用户查看附加到相应支出密钥的余额。可以使用此查看密钥解密相应查看密钥的全部余额或查询其中的一部分余额。

namadac balance
namadac balance --owner <the-spending-key-you-created>
namadac balance --owner <the-spending-key-you-created> --token BTC
namadac balance --token BTC

列出屏蔽密钥/地址(Listing Shielded Keys/Addresses)

钱包能够列出它存储的所有支出密钥、查看密钥和支付地址。以下是如何查询钱包存储的示例

namadaw masp list-keys
namadaw masp list-keys --unsafe-show-secret
namadaw masp list-keys --unsafe-show-secret --decrypt
namadaw masp list-addrs

查找屏蔽密钥/地址(Finding Shielded Keys/Addresses)

钱包能够在给定其别名时找到任何支出密钥、查看密钥或支付地址。以下是如何查询钱包存储的示例:

namadaw masp find --alias my-alias
namadaw masp find --alias my-alias --unsafe-show-secret

Last updated