版本 |
时间 |
维护人 |
备注 |
v1.1.0 |
July 2, 2024 |
@Anonymous |
补充更加详细的需求描述 |
v1.0.0 |
April 24, 2024 |
@Anonymous |
|
需求背景
为了更好地拓展用户群体,降低用户使用的入门门槛,我们计划后续支持直接使用 EVM 地址签名控制 Bifrost 链上的衍生地址进行任意操作,从而间接实现 Bifrost 网络对 EVM 地址和钱包的完全兼容。
参考协议
可以完全参考 Hydradx 对于这部分的实现,hydradx 已经基本完成了我们需求侧的所有需求可以再其 Dapp 上直接体验:
HydraDX Omnipool - An Ocean of Liquidity
需求概览
- EVM 地址可以通过签名实现 Bifrost 网络的任意构造的交易
- 本地资产可以添加到 Metamask 钱包中展示余额
- Metamask 钱包中可以直接进行 Bifrost 链上资产的转账
- 可以设置多种 Token 作为网络手续费(主要需求是 BNC & ETH & DOT 作为手续费)
- 可以支持 EVM 跨链桥(主要场景: Moobeam 资产跨链至 Bifrost)
- 与 vETH 3.0 交互的整体流程
- 实现 EVM 环境的浏览器,参考:
Blockscout: A block explorer designed for a decentralized world.
具体需求
1. EVM 地址通过 EVM 钱包插件实现 EVM 地址在 Bifrost 链上衍生地址执行任意交易
1.1 实现效果参考案例
2024-07-02 18-59-40.mp4
从演示视频中可以看到,在 hydration 上的 EVM 环境下使用 metamask 可以流畅地签名完成 Dapp 上的任意操作,具体实际操作记录如下:
Swap ⇒ https://hydration.subscan.io/extrinsic/0x76e17a16e30b7069941813d2e5e37037e340d1a02edc74c9e693c09c5bb186a0
Add Liquidity ⇒ https://hydration.subscan.io/extrinsic/0x9e41abc52ce316d32f9afe6f689cb96dba29e10593ef96c8a364291e30d26ef8
Add to omnipool ⇒ https://hydration.subscan.io/extrinsic/0x10015e56e4c7ce81205b2dfc1f3d79c1b1762594990298ebd4a6ac599be9dfdb
1.2 需要测试确保能成功使用 EVM 地址签名执行的交易
- 转账 BNC/DOT/vDOT/GLMR/vGLMR/ASTR/vASTR/MANTA/vMANTA/USDT/INTR/iBTC/BNCS/PINK/BLP-DOT-vDOT/LP-DOT-vDOT
- 跨链转出 BNC/DOT/vDOT/GLMR/vGLMR/ASTR/vASTR/MANTA/vMANTA/USDT/INTR/iBTC/BNCS/PINK
- 铸造 vDOT/vGLMR/vMANTA/vASTR
- 赎回 vDOT/vGLMR/vMANTA/vASTR
- 取消赎回 vDOT/vGLMR/vMANTA
- 参与某个 farming 池 / 领取 Farming 池奖励 / 一次性领取多个 Farming 池奖励(Batch 交易)
- 使用 Zenlink 进行 Swap / 添加流动性到 Zenlink Pool / 从 Zenlink Pool 中移除流动性
- 使用 Stable swap 进行 Swap / 添加流动性到 Stable Pool / 从 Stable Pool 中移除流动性
1.3 衍生地址算法要求
EVM 地址执行交易时,实际交易提交的主体是 substrate 格式的衍生地址,对于同一个 EVM 地址该衍生地址的公钥应该与 Hydration 的衍生地址相同。
案例:需要确保 EVM 地址 0xB65E3FaBa1277Bf5b9de6bEbFe584457935384AC 对应的 substrate 衍生地址公钥为 0x45544800b65e3faba1277bf5b9de6bebfe584457935384ac0000000000000000(Bifrost 链上:dHrtijHmrCdQPnJQDuSscC9QniHAfA9ArHA7qBX7TLST3Tm)
2. 本地资产可以添加到 Metamask 展示余额
2.1 实现效果参考案例
2.2 功能详细描述
- 用户可以在 Bifrost Dapp 触发添加资产到 Metamask,添加成功后,Metamask 上可以查看到相应地址对应 Token 的实时链上余额
- 需要支持 Bifrost 链上的主要资产:BNC/DOT/vDOT/GLMR/vGLMR/ASTR/vASTR/MANTA/vMANTA/USDT/INTR/iBTC/BNCS/PINK
- 需要确保资产余额产生变化时,Metamask 内的展示也实时更新
3. 添加到 Metamask 的资产可以直接在 Metamask 中操作转账
3.1 实现效果参考案例
EVM 环境记录:
https://explorer.evm.hydration.cloud/tx/0x8c8170e8e240b9d652fbcaf79ef96ef372bf704435ab245db88694979e4a0576
Substrate 对应交易记录:
https://hydration.subscan.io/extrinsic/5460353-2
3.2 功能详细描述
用户在 Metamask 插件中进行操作并传入参数:
- 转账 Token 类型
- 转账 Token 数量
- 转账目标 EVM 地址
在 Metamask 中完成签名后:
- 交易被发送至 Bifrost 网络
- 对应 Token 从发送交易的 EVM 地址的 Bifrost substrate 衍生地址转入接收地址的 EVM 地址的Bifrost substrate 衍生地址
4. EVM 网络基础细节设定
4.1 网络 Native Token
在 Metamask 中展示的 Native token 需要为 Snowbridge 桥接的 ETH:
- name: Wrapped Ether
- symbol: WETH
- decimals: 18
4.2 EVM 环境下的默认手续费
默认手续费为 Snowbridge 桥接的 WETH
4.3 EVM 环境交易 hash 读取
EVM 环境下发起的交易,对应在 Bifrost substrate 侧的交易 hash 需要方便地提供给前端,便于前端实现交易记录的定位
5. 支持使用不同的 Token 作为网络交易手续费
5.1 实现效果参考案例
2024-07-02-18-47-24.mp4
如视频所示,Hydration 上的一个只有 HDX 资产没有默认手续费 WETH 的地址,也可以正常成功发起交易,交易记录:
https://hydration.subscan.io/extrinsic/0xf42c4c6b3dbe692170e646df4d7811001d2747031f36060ee46ceb62e5d4dc33
5.2 默认自动选择手续费 token
当一个地址没有 WETH 的情况下,会基于系统默认的顺序自动以该地址已有的且支持作为手续费的 Token 作为交易的手续费,目前需要额外支持 BNC 和 DOT:
- 当用户地址只有 BNC 时,自动使用 BNC 作为 EVM 环境交易手续费
- 当用户只有 DOT 时,自动使用 DOT 作为 EVM 环境交易手续费
- 当用户同时拥有 BNC&DOT 时,优先使用 BNC 作为 EVM 环境交易手续费
5.3 支持 EVM 环境用户设置默认手续费 Token
当用户持有多种手续费 Token 时,可以支持用户通过一个方法设置默认的手续费 Token。设置完成后后续任意普通交易均采用该 Token 作为手续费 Token。但调用该方法时则不使用默认手续费 Token 支付手续费,而是使用该方法中设置的新的默认手续费 Token 支付手续费。例:
地址 A 的默认手续费 Token 为 BNC,且同时持有 DOT,当用户调用设置默认手续费交易将默认手续费修改为 DOT 时,该笔交易手续费收取 DOT。
6. 实现 EVM 环境的浏览器
6.1 参考实现
https://explorer.evm.hydration.cloud/
6.2 实现 EVM 部分交易记录
在 EVM 环境浏览器中可以查到对应地址所有以 WETH (Native fee token) 进行的交易记录(使用非 WETH 作为手续费的交易由于需要特殊构造可以不记录)参考:https://explorer.evm.hydration.cloud/address/0xB65E3FaBa1277Bf5b9de6bEbFe584457935384AC
6.3 能正常展示用户地址的 WETH 余额
如图所示浏览器中可以查看到对应 EVM 地址的 WETH(Snowbridge) Token 的余额