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

Copyright 北京红枣科技有限公司

results matching ""

    No results matching ""

    results matching ""

      No results matching ""