1. 主页
  2. 文档
  3. Web3.0 设计教程
  4. TTT原则
  5. 5.(代码和环境)代码的透明度

5.(代码和环境)代码的透明度

如果可以信任Dapp也意味着可以信任正在执行的代码 为了获得信任,Dapps 应了解其代码的所有方面。

Web3 价值观

  • 要使 Dapp 受信任,需先信任代码
  • 对于受信任的代码,需要透明,独立可执行和可验证

🔑🔑原则🔑🔑

Dapp前端应该:

➤阐明正在使用的区块链

这是显而易见的,在 Dapps 激增的情况下,Dapps 在不同的区块链上运行不同的版本。 此外,对于Plasma,Polkadot,Cosmos和其他扩展解决方案,Dapp可能会跟踪其子链中的事务,这些子链嵌套在其他 plasma 链或 Cosmos Zones 或 Hub 树的深处 。用户应当知道他们的数据写入存储的位置,因此要知道技术性的变量(安全性,速度等)以及独立验证数据的位置。

➤阐明用于读写操作的智能合约的地址

并链接到独立的区块链浏览器(∞link1.数据来源的透明度)

➤明确哪些代码是开源的以及在哪里找到它

➤阐明代码运行的位置(本地或远程服务器)

这可能是实现最困难和最麻烦的事情之一,需要服务器上运行的部分中至少有一个页面解释运行部分及其原因,并在 UI 的相关部分指向它。

如果在第一原则(∞链接1.数据源的透明度)的示例中看到的“链视图”模式已经实现,那么这将是添加这些其他视图的好地方。  

➤阐明 web3 提供商/ 区块链节点

(本地节点,Dapp 控制节点,Infura,MetaMask 或其他节点) 至于为什么这样做,是因为已检测的节点可以记录数据,例如 etherscan,这可能成为用户隐私风险的来源

允许用户切换到自己所拥有的节点 虽然这已经被像 MetaMask 这样的提供商所关注,但是这个原则适用于 web3 Dapp。因为它可以向特定节点广播事务。

此外,通过私有节点执行的事务可以更快地执行,因为它们可以避免公共节点队列,尤其是在众包等高需求事件期间。

➤阐明 Dapp 是在主网上运行还是在测试网上运行

虽然 web3 提供商负责处理这个问题,但要确保用户理解在主网上进行的操作(可使用∞link中的其他原则2.交易的透明度)

➤阐明从区块链上读取的数据来自 Oracles 可信数据源

关于用户友好型的补充

➤允许自行执行代码

允许高级用户在发送事务之前查看函数调用,以便验证它并通过命令行重现该事务。

这似乎有点夸张,因为 Dapp 前端是为了简化用户并隐藏某些技术问题,但是一个持怀疑态度/偏执的用户会想要验证单个事务:如果区块链类似于分布式数据库,那么用户应该能够独立执行写入操作,并且在此期间 Dapp 工作状态不受影响。

在代码极力争取透明的同时,Dapp 也应该争取在无信任的基础上进行验证 https://blog.wizsec.jp/2018/02/kleiman-v-craig-wright-bitcoins.html?m=1

Data Provenance的增强版本,用户还可以复制粘贴代码以自行检索数据

➤阐明智能合约所需的输入:

智能合约中的数字通常带有大量的零,这对用户不友好,并且很容易造成代价高昂的错误。 Dapp UI 对其进行简化是正常和可取的,较小的数字更易于理解且更不容易出错,例如 0 到 100 。

但是,鉴于代码的透明性原则,用户应清楚地了解这些输入被 UI 简化的内容,并阐明,特别是 DIY 代码检查器,即智能合约的实际输入。Aragon Voting 应用就是一个真实案例。开发人员可以使用该案例提供的相同解决方案,并通过简单数字,科学记数法和智能合约期望的实际输入(全部为零)向用户阐明。

具体示例

  • 提供一个像服务条款或隐私政策页面一样访问的 “代码透明度” 页面
  • 并在某些地方提供用户 github 仓库的链接
  • 在“链视图” 面板(第1章的示例中数据源的透明度)添加显示代码透明度的部分
    • 相关信息:
      • 正在使用的区块链
      • 区块链属性,尤其是平均区块确认时间(∞链接6.Time / Wait 管理)
      • 是主网还是测试网
      • 正在使用的 web3 提供商(允许切换)
      • 合约地址
      • 可能是合同的ABI的简化版本,只有代码实际调用的方法
      • 如果代码的任何部分不在本地运行(文本说明和动机)
      • github 仓库的链接
    • 开关,过滤器或选项:
      • 显示带图标和通过更改颜色,服务器上处理过组件的数据
      • 显示使用(“ 云到链 ”oracle )链接图标和通过改变颜色来自 oracle 可信数据源的数据
      • 如果有必要,请更改 web3 提供商
      • 可在命令行上复制和执行的函数调用来调用事务的预览,对相关的输入进行注释
      • 代码透明度面板和信息示例

我们要如何帮助您?