[翻译] Polyjuice注意事项

原文链接: godwoken/known_caveats_of_polyjuice.md at master · nervosnetwork/godwoken · GitHub

作者:https://justjjy.com

译者:https://pandatea.life

Polyjuice的设计宗旨是提高Nervos的兼容性

  • polyjuice中会使用evmone作为solidity虚拟机,这可以兼容最新版本以太坊上的智能合约

  • Polyjuice通过提供Polyjuice Web3 Provider,适配以太坊Web3接口

然而,由于CKB和Ethereum在整体架构上的不同,开发者在使用polyjuice的时候还是会有一些问题。

本文将记录这些问题,以供参考。

# Account Creation

如果想使用Godwoken的polyjuice,开发者必须先在Godwoken上注册一个账户。

注册账户的方法是向Godwoken deposit一些资产。

# pETH

pETH本身是一个xUDT。每部署一条polyjuice链,就会部署一个pETH代币。pETH代币类似以太坊的ETH,都被用作Gas费用的支付。

用户发起交易时,需要支付pETH作为手续费。

各polyjuice链可以使用不同的代币作为pETH。例如可以强制使用force bridge跨链桥的ETH代币作为pETH。

另外,每一条Godwoken链可以包含多条polyjuice链。每条polyjuice对应Godwoken上的一个账户,类似在Ethereum上的0x0000… 000地址。

pETH在godwoken上部署,用于各Polyjuice。

# 所有代币都是ERC20

在以太坊上,有两种代币,一种是ERC20 token,另一种是ETH这种链原生代币。这也就是为什么会有wETH。

但是在Godwoken中,无论你在CKB上是使用链的CKB原生代币,还是sUDT token,在Godwoken里,它都用sUDT来实现。

Polyjuice确保Godwoken上所有代币都是ERC20格式。

# Godwoken Address vs Ethereum Address

Godwoken address 引入了互操作性,希望您看完本章后,确保您了解其中的注意事项

所有Blockchain都有两个必要的部分:

  • Identity Check : 如何鉴别交易的发起人的身份

  • Computation / Verification : 如何改变链上状态

和其他区块链一样,Ethereum将两个组件合并。然而,在Nervos中,我们将Godwoken中的身份检查和链上计算完全分离开来

以实现新的特性:

  • Ethereum的Dapp 不再只能通过Metamask等以太坊钱包来交互

  • Metamask等以太坊钱包,可以交互除Ethereum以外的链

这俩不是一个事儿么

当前区块链世界中,一个用户通过一个钱包和一个地址与多个Dapp交互。

有了Polyjuice,一个dapp可以通过一次部署,向拥有不同钱包的用户打开。

看上去,我可以通过我Tron链的钱包,连接CKB的Provider,从而使用 CKB上的Dapp。如果是这个意思,那Metamask也能从Heco链上跨到BSC链上,再跨到ETH上。cosmos也行。

然而这种需求有其代价:Ethereum在身份和计算的时候使用的均是20Bytes长度的格式。这对Ethereum来说是好事,ETH计算、验证是一体的,所以用统一规格的address会很方便。

但是Godwoken要交互的并非只有Ethereum,还有Tron、EOS、BTC、CKB或者其他链。这些链的address格式都各不相同。如果我们将所有不同的地址转换成Ethereum使用的20Bytes长度格式,那么这些数据会过于庞大,以至于在polyjuice上没有空间存储。

出于这个考虑,我们引入了Godwoken address。

一旦用户通过Deposit请求,在Godwoken上创建了一个账户。那么这个账户的地址便是用户在Godwoken链上的唯一标识。无论这个账户本身是什么东西。EOA也好,Ethereum合约也好,Diam合约也好。都只有一个标识 —— Godwoken address。

我们当然知道引入这么一个Address会很麻烦,但是我们认为,他的收益大于其缺点。

我们提供了一些工具来弥补这些缺点:

  • 我们提供Address转换工具。开发者可以通过这些函数 将 公链Address 和 Godwoken Address 互相转化。

  • 用户可以使用 Godwoken Address来签发交易

  • 引入一个新的Web3 Provider, 你可以通过这个工具和Godwoken交互。

  • 我们将系统函数ecrecover改成了recover_account,在函数返回时会返回Godwoken Address格式的地址。如此一来Polyjuice就可以兼容Ethereum和Godwoken了。

基于上述变化,我们建议您在开发polyjuice项目时,要注意一下事项:

  • 通过polyjuice在Ethereum上部署的合约会正常工作,Godwoken地址会经过Polyjuice转换成Ethereum地址

  • 我们建议再应用程序的UI中使用公链地址而不是Godwoken地址,这样用户可以直接在应用程序中使用自己的钱包地址。

  • 在合约调用的时候,polyjuice会把公链地址转换成Godwoken地址

  • 可以通过节点的RPC接口,将Godwoken地址和公链地址互相转换。

总之,我们建议多使用公链地址。某些情况下,必须使用公链地址。

4 Likes

哇 谢谢大大的翻译

1 Like

嘿嘿嘿 其实我是看了您翻译了好多文章,方便了新手学习, 才模仿您,想去帮助别人的

1 Like

其实那些文章也是我自己在学习的途径
这篇文要不是你挖出来我还没有细瞧呢

1 Like

这句看起来好像还没有翻译完
The gas price of polyjuice transactions is measured using pETH designated for the polyjuice chain,「 which will be deducted from sender’s account when the transaction is committed on chain.」 Different polyjuice chains might use…

这里的断句好像有点中断,decouple 解耦这个特性似乎没有翻译到

这句话应该是你提出的问题吧? 我看原文的 but also 后面你没有翻译到,但是加上去应该不难理解

  • An Ethereum app can be used not only via Ethereum wallets such as MetaMask, but also Tron, EOS, BTC or other wallets.
  • An Etheruem wallet can work on not only Ethereum apps, but also diem or other blockchain apps.

一个是说,Godwoken 上的 EVM 兼容链不只能够用 ETH 钱包,同时 Tron 和 EOS 等其他链的钱包也可以; 另个是说,以太坊钱包在 Godwoekn 架构上不只能够适用于 ETH 链,同时还适用于 Godwoken 上面未来的其他链的兼容环境,例如 Diem (如果未来在上面有实现的话)

1 Like