10.2.5 Neo测试网的跨链

  1. 应用合约开发指南

  Neo应用合约开发根据自身的业务场景而定,主要实现包含两部分功能:如果是发起跨链交易的源链,其应用合约通过跨链去访问目标链需要实现outbound,如果是接收跨链交易的目标链,其应用合约需要实现inbound。Neo测试网的链ID是4。链ID是注册在Poly Enterprise中的链ID。此配置适用于BSN生产环境与BSN测试网。

  源链发起跨链交易调用的示例:

/// <summary>
        /// 此方法用于对其它目标链进行跨链调用(此方法可自行定义)
        /// </summary>
        /// <param name="toChainId">目标链在Poly网络中所对应的链ID</param>
        /// <param name="msg">目标链应用合约所需要传递的跨链信息</param>
        /// <returns></returns>
        [DisplayName("say")]
        public static bool Say(BigInteger toChainId, string method ,byte[] msg)
        {
            // 获取目标链上的应用合约
            var toProxyHash = HelloPoly.GetProxyHash(toChainId);

            // 获取CCMC合约地址
            var ccmcScriptHash = HelloPoly.GetProxyHash(neoChainID);

            // 跨链调用
           bool success = (bool)((DynCall)ccmcScriptHash.ToDelegate())("CrossChain", new object[] { toChainId, toProxyHash, method, msg });

            HelloPoly.Notify(success, "[HelloPoly]-Say: Failed to call CCMC.");

            // 事件通知
            HelloPoly.SayEvent(toChainId, toProxyHash);
            return true;
        }

  目标链接收跨链交易调用的示例:

// <summary>
        /// 此方法用于对其它目标链进行跨链调用(此方法可自行定义)
        /// </summary>
        /// <param name="fromChainId">源链在Poly网络中所对应的链ID</param>
        /// <param name="toChainId">目标链在Poly网络中所对应的链ID</param>
        /// <param name="msg">接收到源链发送的跨链信息</param>
        /// <param name="callingScriptHash">回调脚本哈希</param>
        /// <returns></returns>
        [DisplayName("hear")]
        public static bool Hear(byte[] inputBytes, byte[] fromProxyContract, BigInteger fromChainId, byte[] callingScriptHash)
        {
            // 写入账本
            Storage.Put(fromProxyContract, inputBytes);

            // 事件通知
            HearEvent(fromChainId, fromProxyContract, inputBytes);

            return true;
        }

  2. 演示合约实例

  Github:

  https://github.com/BSNDA/ICH/tree/main/sample/polychain/neo-contract

Copyright 北京红枣科技有限公司

results matching ""

    No results matching ""

    results matching ""

      No results matching ""