# Secret Network：什么是可编程的隐私公链

By [StevenZ](https://paragraph.com/@stevenz) · 2022-03-22

---

撰文：[0x76](https://twitter.com/_0x76)

在区块链行业中，隐私一直是一个十分混乱的概念。因此在真正开始介绍今天的隐私项目 Secret Network 之前，有必要先对隐私相关概念重新进行一下梳理。

本文将分为两部分，第一部分重新辨析隐私及相关的主要概念。第二部分我们则直接上手，看看目前行业内第一条真正可用的，支持隐私编程的公链 Secret Network，在使用中与其他公链到底有哪些不同。

当我们在讨论隐私的时候，到底在讨论什么？
--------------------

隐私，是自比特币诞生以来便一直围绕在加密行业的标签。中本聪也曾在比特币白皮书中单列一章讨论隐私问题。然而，比特币所提供的隐私，真的是我们日常生活意义上的隐私吗？

### 天然匿名的账户

我们知道，目前以比特币、以太坊为代表的主流区块链网络，其最重要的特征之一，便是其所有交易记录是完全公开可验证的。而用户之所以还能在这种极端透明的环境中保有一定的隐私，唯一的原因，便是其独特的账户注册机制。

对于任何一个账户体系来说，其最重要的工作就是防止出现账户重名。因为一旦出现重名，与之相关的信息，乃至资产的权属都将产生争议，进而导致整个系统出现严重的混乱。就像数据库每个表中的主键一样，一个系统中的账户必须保证唯一性，才能使得整个系统正常运转。

因此在一般的账户体系中，必然需要存在一个中心化节点，专门负责新账户的注册工作，以保证系统中每个账户的唯一性。而比特币由于需要做到完全的去中心化，因此必须采用其他的解决方案。

而我们已经知道，最终中本聪给出的答案，是每个用户通过随机算法独立生成地址。那么随机算法如何防止地址出现重复？答案是根本防止不了。我们能做的，只是从概率上将地址出现重复的概率降到足够低，最终以这种去中心化的概率确定性，代替中心化注册机制的最终确定性。

而由于这种生成机制完全随机，因此所有地址都具有先天的匿名性。这种匿名性，便是我们早期常常谈到的隐私。

不过，通过地址的匿名性保护隐私有两个重要的缺陷。一是匿名的不可逆性，一旦一个地址的真实身份暴露，则这种匿名性的丧失是不可逆的。

另一个特点是维护地址匿名的工作完全是链外事物。也就是说，在地址生成后，维护匿名的工作都由链外的持有人负责，区块链系统对相关的任何事情都一无所知也无能为力。

在这种情况下，早期的链上隐私解决方案只能通过不断删号重练，并切断新匿名地址与旧地址的联系，来帮助用户恢复匿名性。

我们熟知的早期隐私项目，如 Tornado.cash，乃至达世币 ( Dash)、门罗币 (XMR, Monero)、大零币 (ZEC, Zcash) 等等隐私公链，基本也是围绕着这个思路设计的。

### 匿名账户体系的瓦解

然而当区块链技术逐渐由比特币时代过渡到以太坊为代表的智能合约时代后，新诞生的各类应用，对原有匿名账户体系的冲击也越来越大。

早期的地址仅仅用来保存购买的加密货币。而在今天，我们需要用这些地址购买 NFT 头像、关联社交账户、持有域名、保留游戏道具甚至发布 Mirror 文章。所有这些活动，都使得继续维持这些地址匿名的成本越来越高，而再次进行删号重练的转移工作也由于越来越复杂以至于几乎不可行。

因此我们突然发现，简单的匿名地址已经不再能满足新时代用户的使用需求，我们需要更加先进的隐私解决方案。

### 什么才是真正的隐私？

对于隐私的定义我们不再做什么学术上的讨论，这里我们直接沿用生活中对隐私约定俗成的理解。我们在日常生活中提到的隐私，并不是让人们每天戴着面具生活，而是即使我们公开了身份，也能在需要的时候，拥有自己私密的空间，进行私密的交易。

对应到区块链中，我们需要的隐私最好是这样一种形态。即便我的地址已经是公开的实名地址，我也可以根据自己的需要，隐藏自己持有的资产数量，与 DeFi 协议进行交互而不必担心信息被公开，购买的 NFT 虽然存在自己的地址中，却可以根据自己的意愿选择是否公开展示。

对于这种需求，传统的无法支持智能合约的隐私公链们显然已经无能为力。我们需要新的可编程的隐私公链来完成这个使命。

可编程的隐私公链
--------

目前整个市场中，能够符合支持智能合约，并且可对公链上发生交易的隐私进行定制化选择的公链有两个，一个是 Oasis Labs 推出的针对隐私编程的 Cipher Paratime，另一个就是 Cosmos 生态中的隐私公链 Secret Network。

当然，我们在下文讲的是目前生态已经初具规模且切实可用的 Secret Network。而 Oasis Labs 的隐私产品由于依然缺少可用的应用，我们只能以后有机会再进行介绍了。

（注：Oasis 网络有不同的 Paratime，不了解 Paratime 概念的读者可以先简单理解成以太坊不同的 Rollup。许多用户接触过的只是其中的 EVM 兼容版 Emerald Paratime，而真正支持隐私编程的 Cipher Paratime 目前尚不成熟。）

### Secret Network 发展历程：从以太坊到 Cosmos 生态应用链

Secret Network 项目早期名称为 Enigma，最早希望依托以太坊生态进行开发。后在遇到性能瓶颈后调整技术路线，改为通过 Cosmos SDK 开发一条独立的，支持隐私计算的公链。这条公链便是如今的 Secret Network。

当然，作为 Cosmos 生态的一员，Secret Network 自然也可以无缝集成 IBC 跨链协议，可以方便地与 Cosmos 生态其他公链进行交互。

### Secret Network 隐私功能实操

之前许多关于隐私项目的介绍文章，总喜欢使用一些似是而非的宏大概念，不是为了把事说清，而是希望把水搅混。因此，在本文的后半部分，我们直接通过上手实操的方式，向读者直观的介绍到底什么才是可编程的隐私。

首先，Secret 与任何其他智能合约平台型公链类似，都有自己的原生 Token：SCRT，这个 Token 可以用于支付 Secret 网络的交易费用，以及参与 PoS 质押。与其他智能合约平台（如 Juno）一样，SCRT 的转账记录是完全透明公开可验证的，因此没有任何隐私属性可言。

但是与 Juno 不同的是，在 Secret Network 中存在一种特殊的隐私 Token，我们称其为 sToken。每一个普通 Token 都可以被打包成 sToken，从而获得隐私属性。

在 Keplr 钱包中我们也能发现，不同于其他公链只有 Stake 与 Governance 两个选项，在 Secret Network 栏目中的治理选项卡下方，还有一个 Secret SCRT 按钮。点开便可以看到 Secret 到 sSecret 的转换页面。

在这个界面中，我们可以直接将钱包中持有的非隐私 SCRT 代币转换成具有隐私属性的 sSCRT 代币。

![](https://storage.googleapis.com/papyrus_images/dbdb1c3c4fb8f39e1ba99c0cad178aaa8c2dc9cb74607b9ab723b5013107b1e9.png)

然而如果你是第一次使用 sSCRT，你会发现当你转换完成后，钱包界面中并不会直接显示 sSCRT 的余额，而是显示 Loading... 状态。这是由于在 Secret Network 中，任何 sToken 对任何访问者都是默认不可见的，包括地址的持有人。如果想要看到 sToken 的余额，需要先使用钱包签署交易生成一个 Viewing Key。

我们如果刷新这个页面，系统便会自动弹出如下的 Add Token 交易签署界面。这里的 Add Token 指的便是添加 sSCRT 通证，界面上方显示的合约地址是 sSCRT 的合约地址。

![](https://storage.googleapis.com/papyrus_images/b9d7b115daac903288548946f522adaf52da0c1d9d1d1e8ddd45fbb85938274f.png)

点击 Submit 提交后便会进入交易签署界面。注意，签署任何交易都需要 SCRT 支付 gas 费，sSCRT 不能作为 gas 使用。因此，当你在进行 sSCRT 兑换的时候，记得保留一些 SCRT 余额。

![](https://storage.googleapis.com/papyrus_images/7535143eae25a2d93b95cbd583d0e4192ceb6e1382ba54e772fa9cb7b8d95633.png)

签署后，系统便会为你的钱包生成一个 Viewing Key。获得了对应 Viewing Key 的钱包，将有权限对相应 sToken 进行查询、转账等各种操作。而且，Viewing Key 的添加的一次性的，后面只要不更换钱包，便不再需要重新计算 Viewing Key。

正如 SCRT 在 Secret Network 中拥有唯一对应版的隐私通证 sSCRT，其他任何 Token 进入到 Secret Network 之后，都可以生成一个单独的隐私通证 sToken，而每个 sToken 都对应着唯一的合约地址。

同理，当账户第一次接收到一个新的 sToken 时，也都需要签署交易生成一个新的 Viewing Key，否则 sToken 的余额无法正常显示。

那么 sToken 在使用时，是如何保护用户的隐私的？下面我们通过 Mintscan 浏览器对一些常见交易进行验证。

**（1）收付 sToken**

当一个地址在支付 sToken 时，会在浏览器中留下一笔交易记录。我们以支付 sSCRT 为例，在浏览器中付款方地址是公开可见的，同时我们也可以知道这笔交易涉及与 sSCRT 合约的交互，但是收款方以及交易金额都不可见。

![](https://storage.googleapis.com/papyrus_images/9798adb6f207fee74762b415d2b04b7d103e3f829cd24f1087204acfdd0f7fc9.png)

我们再来看看收款方的状态，当我们确认钱包中已经收到这笔资金时再打开 Mintscan，发现交易历史记录中并没有显示有新的交易发生。因此，任何人都不能通过公开信息，查到一个地址何时收到过多少 sToken。

**（2）交易与兑换**

我们使用 Secret Network 中的原生交易平台 SecretSwap 将 0.1sSCRT 兑换为 sATOM。

![](https://storage.googleapis.com/papyrus_images/0000431954a3c846fdff59e48bf4d026d65b312adafd230a538b822d61aaf4ac.png)

以下便是这笔交易在浏览器中的记录。可以看出，我们依然能够看出付款方的地址，同时也能推断他与 sSCRT 合约进行了交互，但是他做了什么，兑换了哪些代币，金额是多少，都无法从公开记录中验证。

![](https://storage.googleapis.com/papyrus_images/9f9678e1f44371a390a5818ccd5b914d30495d67b214abcbbf1f2bb97b979e1c.png)

不过，由于我们本次是第一次持有 sATOM，因此在钱包界面中无法直接看到刚才购买的 sATOM 金额，我们需要再签署一笔交易用来创建 sATOM 的 Viewing Key，才能继续操作我们购买的资产。

我们直接来到 Secret Network 官方提供的 sToken 转换专用网站（wrap.scrt.network），并连接 Keplr 钱包。

![](https://storage.googleapis.com/papyrus_images/e279d3e2100da70e8fb68192ef7c776a06fd32c04fb46d7727ffde4ce5eb5e45.png)

可以看到，在右侧 sATOM 的余额处，显示了一个黄色头像表示尚未创建 Viewing Key。鼠标直接点击此处便会弹出创建 Viewing Key 的交易签署界面。

![](https://storage.googleapis.com/papyrus_images/97b02115622b833da9b76ad725092e41b435176e02df5254cb13dd26059ffc45.png)

签署成功后，我们便可以在界面以及 Keplr 钱包插件中看到 sATOM 的余额了。

![](https://storage.googleapis.com/papyrus_images/e26bb35d3ceebb2ed4e3ddc495d32bee1c4ef49a387aad83c376988d89c549a7.png)

同时，刚才的签署操作会留下一笔公开的交易记录。显示你的地址与 sATOM 合约地址有过一次交互，但无法判断具体的交互内容。

![](https://storage.googleapis.com/papyrus_images/6843189f55f1e1f8c7bf94143257b9054405ae3f2cd6929d342d252cf469c8f0.png)

以上便是使用 sToken 进行支付与交易时，在 Secret Network 上产生的公开信息。可以看出，通过使用 sToken，用户可以有选择地隐藏自己交易的关键信息，保护用户关键信息的隐私安全。

### 桥接非隐私资产

正如我们刚才看到的，Secret Network 可以将任何资产转换为隐私通证，进而隐藏相关的交易信息。那么如果用户希望使得自己的以太坊等其他公链资产也拥有这种隐私保护功能，就需要通过跨链桥进行资产跨链。

而 Secret Network 的官方跨链桥包含两个重要的组件，一个是支持 IBC 的跨链打包桥，另一个是支持以太坊、BSC 以及门罗币跨链的官方桥。

**（1）IBC 跨链打包桥（**[**https://wrap.scrt.network/）**](https://wrap.scrt.network/%EF%BC%89)

这个桥就是我们刚刚在查询 sATOM 地址时使用的应用，他不但可以帮助用户快速的将普通代币打包成隐私代币（中间的红框），也可以通过 IBC 协议，在不同 Cosmos 公链间进行快速的资产跨链转移（左侧红框）。

![](https://storage.googleapis.com/papyrus_images/69b32c8f08095aa410e7a58665032f5086d7f94ec41f272eaed194bca7753c1f.png)

我们点击界面左侧的双向箭头按钮直接调出 IBC 跨链的界面，在这里可以操作资产跨入 Secret 以及跨出 Secret。

![](https://storage.googleapis.com/papyrus_images/a38ff1d84c8f777b0b9a5ef90d6503f63649162117fde7b57f90121d01dd4567.png)

而当存入资产后，便可以直接点击右侧的 WRAP 按钮，将其转换成隐私版本的 sToken。

![](https://storage.googleapis.com/papyrus_images/74bf3fce38677a676e99386e73a868b665ab3d3e1d10bf84b9c7d86b4ff4c69c.png)

**（2）官方桥（**[**https://bridge.scrt.network/）**](https://bridge.scrt.network/%EF%BC%89)

Secret Network 的官方跨链桥已经支持了以太坊、BSC 以及门罗币的资产跨链，其跨链方式与普通跨链桥类似，在此不做演示。

![](https://storage.googleapis.com/papyrus_images/c80f0a712b696f37b1b56666e4e3a29cb7f5fde9d21bc073d4d94427091386e3.png)

### 通证标准

Secret Network 建立了独特的隐私通证标准 SNIP-20，该标准基于 Cosmos 生态的 CW-20 标准改造而成，主要加强了原标准的隐私功能。此外，还有支持隐私功能的 SNIP-721 标准，用于支持隐私版的 NFT 发行。

可编程的隐私到底有什么用？
-------------

看了刚才的简单体验，可能很多读者已经发现了一个很重要的问题，那就是：操作这些隐私应用都好麻烦啊。

我们不但需要在原始 Token 与 sToken 之间频繁转账，还要不断签署交易添加 Viewing Key。然而搞的这么麻烦的目的又是什么呢？除了可以隐藏我的钱包里有多少钱（好像也没必要，毕竟我钱包里也没什么钱），Secret Network 的隐私计算还能给我们带来什么？

### 1.抗 MEV

如果你曾经在以太坊中进行过交易，那么你一定听说过三明治攻击。也就是当你签署一笔交易的时候，由于交易在打包前在内存池中公开可见，由此矿工和套利者可以在你的交易之前先进行买入，并在你的交易完成之后进行卖出，导致你的交易成本升高。

而在 Secret Network 中，由于可以将交易指令隐藏，无论是矿工还是套利机器人，都无法再进行 MEV 提取，最终的结果是，用户可以以真正公平的价格，买到自己需要的资产。

### 2.隐私版 NFT

Secret Network 上的隐私版 NFT，同样可以提供 sToken 相似的功能。比如你购买了一个极为珍贵，类似 CryptoPunk 的 NFT，你担心之后被别人发现并对你进行针对的钓鱼攻击。为了保护资产的安全，你可以选择将其隐藏，使得别人在你公开的地址中无法看到你持有的 NFT 资产。

![点击你购买的 NFT 右侧的钥匙按钮，可以调整是否显示持有这个 NFT](https://storage.googleapis.com/papyrus_images/a5472705f95e89c6473de378eaeb4872de56b346d5222ab92f75dad95513234a.png)

点击你购买的 NFT 右侧的钥匙按钮，可以调整是否显示持有这个 NFT

同时，Secret Network 上的 NFT 同样可以选择将链上的元数据进行加密处理。NFT 的铸造者可以规定，只有该 NFT 的持有者才能看到真正的元数据地址，显示清晰图片，而其他地址则只能看到经过模糊处理的图片。

比如在 Secret Network 最大的 NFT 交易平台 stashh 中，我们可以点击左侧的年龄验证按钮后，浏览隐私版的 NFT 产品。

![](https://storage.googleapis.com/papyrus_images/94461965322b0a036dd70dbee7e28833b8bdc57f1c6c098c006889128f1d7950.png)

这类 NFT 在购买前用户只能浏览一个虚化的图像，而只有当你真的购买后，才能看到完整的 NFT 元数据。

![](https://storage.googleapis.com/papyrus_images/0ffe0d297d7533c0abcefa01b70fb709d065d0e31058e3b296d53ee2a53b82e1.png)

不过由于这些产品都不便宜，因此在这里就不买来给大家演示了。最后在此提示想尝试的用户谨防诈骗，因为这些 NFT 的元数据是完全隐藏的，因此你在购买前也没办法知道，里边装的到底是什么东西。

Secret Network 的主要问题有哪些？
------------------------

经过上文简单的体验，我们获得了对 Secret Network 一个比较直观的体验感受。首先，Secret Network 具有任何智能合约平台都具有的基本功能，同时也支持常见的应用部署。目前的 Secret Network 生态既包括去中心化交易平台、各类 DeFi 应用，也包含 NFT 铸造与交易市场。如果不考虑隐私代币 sToken，其体验与传统智能合约公链基本无异。

但是其缺陷也比较明显，那就是用来保护隐私 sToken 给用户的交互体验带来了比较大的影响。新用户不但需要搞清各种涉及隐私的新概念，还需要在隐私通证与非隐私通证之间频繁转换，如果没有明显的激励或使用需求，普通用户可能很难坚持使用下去。

此外，就在前不久，Secret Network 上的 DeFi 应用 Shade Protocol 发放了空投。结果，直接就把 Secret Network 网络给堵死了，不但主网上交易确认的速度缓慢，很多为了领取空投而从 Osmosis 提取 SCRT 的用户，一两天都收不到跨链资产。

一侧 Osmosis 中的 SCRT 已经付出，另一侧迟迟无法到账，这也是我个人使用 IBC 跨链第一次遇到这么差的体验（当然这主要是 Secret Network 的责任）。虽然团队马上进行了紧急更新，然而这样的交易处理能力，离真正的大规模使用，恐怕还有不小的距离。

总的来说，Secret Network 依然是一个整体处于开发早期的公链，上面的生态应用虽然可以让用户初步体验能够真正落地的隐私计算产品。但是目前交互体验还有诸多不足，依然需要持续的发展和改进。

---

*Originally published on [StevenZ](https://paragraph.com/@stevenz/secret-network)*
