Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web3跨链技术方案 #2

Open
HelloAldis opened this issue Aug 1, 2024 · 0 comments
Open

Web3跨链技术方案 #2

HelloAldis opened this issue Aug 1, 2024 · 0 comments

Comments

@HelloAldis
Copy link

HelloAldis commented Aug 1, 2024

修改历史

时间 内容 版本 作者
2024-07-23 完成整体技术框架 V0.1 @HelloAldis
2024-07-30 在stub、合约设计上添加更多细节 V0.2 @HelloAldis

参考学习资料

方案目标

  • 基于WeCross技术框架开发一个Web3的跨链Stub,命名为WeCross-Web3-Stub
  • 任意支持web3j接入的区块链都可以使用WeCross-Web3-Stub进行接入
  • 支持FISCO BCOS3 到EVM测试网络Sepolia的跨链
  • 支持更符合web味道的跨链演示,直接通过remix+metamask演示资产跨链

方案难点问题

  • Stub中如何接入web3,如何做好stub兼容多种支持web3的链
  • web3跨链合约如何设计, 还要不要使用二阶段事务方式,如果不用是不是说无法同其他Stub混用?
  • wecross集成测试如何设计
  • 如何支持通过remix+metamask进行跨链演示
  • 手续费设计,必须提供手续费以保障在部署合约、执行交易需要收费的web3网络的运行可持续性

Stub中如何接入web3

使用Web3J 4.11版本作为链接入SDK,开发Stub,对比Web3J陆羽跨链Plugin和BCOS3 Stub,轻车熟路对比开发即可。
关键部分需要注意的细节

Web3StubFactory实现

照常实现,注意对BCOS3和Web3的双向同时兼容必然会裁剪一些功能,例如:

  • 不支持WASM合约
  • 不支持国密
  • generateConnection生成配置必选按web3j方式进行创建和初始化连接
  • generateAccount生成的账户文件必须方便在BCOS3和Web3同时使用

Web3Driver实现

Driver进行照搬实现

  • decodeTransactionRequest 考虑BCOS3和Web3的编码兼容性,可以进行照搬,web3j解码能力偏弱可以考量引入bcos3 sdk或代码
  • getResources照搬实现
  • asyncCall 要结合合约设计进行实现,特别是针对合约锁定和代理调用逻辑
  • asyncSendTransaction 要结合合约设计进行实现,特别是针对合约锁定和代理调用逻辑
  • asyncGetBlockNumber 用web3j正常实现
  • asyncGetBlock 用web3j正常实现
  • asyncGetTransaction 用web3j正常实现
  • asyncCustomCommand 结合合约设计进行调整
  • accountSign 使用web3j签名方法
  • accountVerify 使用web3j验签方法

Web3Connection

  • asyncSend 照web3j发送交易方式进行实现
  • setConnectionEventHandler 照搬实现
  • getProperties 存入web3j连接信息

Account 和 AccountFactory

  • 针对Account实现需要考虑基于Web3J设计实现,保障对BCOS3和Web3J的兼容
  • 加密方式只考量标准加密
  • 需要考虑从链A跨链到链B,链B是收费网络,那链B上的交易由谁来执行,以及私钥的安全性,公链web3玩法用钱包

BlockManager实现

  • 基于Web3J照搬实现

web3跨链合约如何设计

Hub合约

以下方法在跨链协议层面被定义,不可改变,同时接口设计的数据的结构也不可改变,

  • function getInterchainRequests(uint256 _num) public view returns (string memory) 可照搬实现,无需改动
  • function updateCurrentRequestIndex(uint256 _index) public 可照搬实现,无需改动
  • function registerCallbackResult(string memory _uid, string memory _tid, string memory _seq, string memory _errorCode, string memory _errorMsg, string[] memory _result) public 可照搬实现,无需改动
  • function selectCallbackResult(string memory _uid) public view returns (string[] memory) 可照搬实现,无需改动

Proxy合约

bfs需要进行替换为新的实现,涉及改动,需要进行重新设计以下接口,推荐在Proxy内部进行简单合约管理即可,不用独立部署一个合约进行管理,

  • function deployContract(bytes memory _bin) public returns (address addr)
  • function deployContractWithRegisterBFS(string memory _path, bytes memory _bin, string memory _abi) public returns (address)
  • function linkBFS(string memory _path, string memory _addr, string memory _abi) public
  • function readlink(string memory name) public view returns (string memory _version, string memory _address, string memory _abi)

以下方法在跨链协议层面被定义,不可改变,同时接口设计的数据的结构也不可改变。实现层面需要进一步讨论?

  • function startXATransaction(string memory _xaTransactionID, string[] memory _selfPaths, string[] memory _otherPaths) public returns (string memory)
  • function commitXATransaction(string memory _xaTransactionID) public returns (string memory)
  • function rollbackXATransaction(string memory _xaTransactionID) public returns (string memory)
  • function listXATransactions(string memory _index, uint256 _size) public view returns (string memory)
  • function getXATransaction(string memory _xaTransactionID) public view returns (string memory)
  • function getXATransactionState(string memory _path) public view returns (string memory)

remix+metamask演示资产跨链

  1. Metamask 钱包连接 BCOS3 和 Sepolia 网络
  2. 使用Remix通过Injected Provider在BCOS3 和 Sepolia 部署ERC20 Token合约
    或使用跨链平台部署合约(我不推荐,不太喜欢在跨链平台部署、体验不好)
  3. 使用Remix通过Injected Provider在BCOS3 和 Sepolia 部署Proxy和Hub合约
    或使用类似java HubContractDeployment部署Proxy和Hub合约 (需要考虑账号内的余额)
  4. 在WeCross配置Web3Stub,接入WeCross,配置好跨链账户特别是针对收费网络的跨链账户内必须有余额
  5. 在Remix中 BCOS3 部署跨链的业务合约,例如:TokenTransferor合约,
  6. 在MetaMask先将需要跨链转移代币转移给TokenTransferor合约
  7. 在Remix中通过Injected Provider在BCOS3 和 Sepolia 调用 TokenTransferor合约的进行
    BCOS 3 Token 到 Sepolia的互相跨链转移

wecross集成测试如何设计

步骤类似上章的演示,但考虑部署Geth私链进行测试

手续费设计

  1. 初步考虑可以跟进gas量进行计算费率,
  2. 可使用链上原生币进行支付
  3. 可使用链上Token进行支付

工作安排

序号 工作内容 开发者 进展
1 WeCross-Web3-Stub创建项目、初始化整体工程
2 Web3StubFactory实现 @JyFangYang
3 Driver实现 @hanlinbo123
4 Web3Connection以及web3Clientwrapper实现 @JyFangYang
5 Account 和 AccountFactory实现 @JyFangYang
6 BlockManager实现 @hanlinbo123
7 跨链合约设计,手续费设计 @HelloAldis
8 WeCross-Web3-Stub集成测试
9 用于测试的跨链业务合约 @HelloAldis
10 wecross集成测试脚本
11 wecross web3stub 相关文档,包含remix+metamask转账演示步骤
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant