版本 时间 维护人 备注
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

需求概览

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 地址签名执行的交易

1.3 衍生地址算法要求

EVM 地址执行交易时,实际交易提交的主体是 substrate 格式的衍生地址,对于同一个 EVM 地址该衍生地址的公钥应该与 Hydration 的衍生地址相同。

案例:需要确保 EVM 地址 0xB65E3FaBa1277Bf5b9de6bEbFe584457935384AC 对应的 substrate 衍生地址公钥为 0x45544800b65e3faba1277bf5b9de6bebfe584457935384ac0000000000000000(Bifrost 链上:dHrtijHmrCdQPnJQDuSscC9QniHAfA9ArHA7qBX7TLST3Tm)

2. 本地资产可以添加到 Metamask 展示余额

2.1 实现效果参考案例

Untitled

2.2 功能详细描述

3. 添加到 Metamask 的资产可以直接在 Metamask 中操作转账

3.1 实现效果参考案例

Untitled

EVM 环境记录:

https://explorer.evm.hydration.cloud/tx/0x8c8170e8e240b9d652fbcaf79ef96ef372bf704435ab245db88694979e4a0576

Substrate 对应交易记录:

https://hydration.subscan.io/extrinsic/5460353-2

3.2 功能详细描述

用户在 Metamask 插件中进行操作并传入参数:

在 Metamask 中完成签名后:

4. EVM 网络基础细节设定

4.1 网络 Native Token

在 Metamask 中展示的 Native token 需要为 Snowbridge 桥接的 ETH:

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:

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 余额

Untitled

如图所示浏览器中可以查看到对应 EVM 地址的 WETH(Snowbridge) Token 的余额