10.2.4 Ethereum Ropsten的跨链
1. 应用合约开发指南
ETH应用合约开发根据自身的业务场景而定,主要实现包含两部分功能:如果是发起跨链交易的源链,其应用合约通过跨链去访问目标链需要实现outbound,如果是接收跨链交易的目标链,其应用合约需要实现inbound。ETH测试网的链ID是2。链ID是注册在Poly Enterprise中的链ID。此配置适用于BSN生产环境与BSN测试网。
源链发起跨链交易调用的示例:
/**
* @dev 通过调用say方法实现跨链调用
* @param _toChainId 被调用的目标链在Poly网络中所对应的链ID
* @param _functionName 被调用合约的合约方法
* @param _somethingWoW 跨链传递的参数
* @return bool
**/
function say(uint64 _toChainId, string memory _functionName, string memory _somethingWoW) public returns (bool){
//获取跨链管理合约接口
IEthCrossChainManagerProxy eccmp = IEthCrossChainManagerProxy(managerProxyContract);
//获取跨链管理合约地址
address eccmAddr = eccmp.getEthCrossChainManager();
//获取跨链管理合约对象
IEthCrossChainManager eccm = IEthCrossChainManager(eccmAddr);
//获取目标链应用合约地址
bytes memory toProxyHash = proxyHashMap[_toChainId];
//调用跨链
require(eccm.crossChain(_toChainId, toProxyHash, bytes(_functionName),bytes(_somethingWoW)),"EthCrossChainManager crossChain executed error!");
emit Say(_toChainId,toProxyHash, bytes(_somethingWoW));
return true;
}
目标链接收跨链交易调用的示例:
/**
* @param _somethingWoW 跨链传递的参数
* @param _fromContractAddr 被调用的应用合约地址
* @param _toChainId 被调用的合约框架chainId
* @return bool
**/
function hear(bytes _somethingWoW, bytes _fromContractAddr, uint64 _toChainId) public returns (bool){
hearSomeThing = _somethingWoW;
emit Hear(_somethingWoW, _fromContractAddr);
return true;
}
2. 演示合约实例
Github:
https://github.com/BSNDA/ICH/tree/main/sample/polychain/eth_contracts/hellopoly