8.2.5 Interchain Services based on Neo Testnet
Application Contract Development Guide
The development of Neo application contract is based on its own business scenario. The main implementation includes two parts: if the source chain initiates a cross-chain transaction, its application contract needs to get outbound to access the target chain; if the target chain receives a cross-chain transaction, its application contract needs to get inbound. Neo has a chain ID of 4, which is registered on Poly Enterprise, and its configuration is applicable to the BSN production environment.
Below is an example of a source chain initiating a cross-chain transaction call:
{
/// <summary>
/// This method is used to make cross-chain calls to other target chains (this method is self-defining)
/// </summary>
/// <param name="toChainId">The chain ID of the target chain in the Poly network</param>
/// <param name="msg">The cross-chain information that the target chain needs to pass to apply the contract</param>
/// <returns></returns>
[DisplayName("say")]
public static bool Say(BigInteger toChainId, string method ,byte[] msg)
{
// Get the application contract on the target chain
var toProxyHash = HelloPoly.GetProxyHash(toChainId);
// Get the CCMC contract address
var ccmcScriptHash = HelloPoly.GetProxyHash(neoChainID);
// Call across the chains
bool success = (bool)((DynCall)ccmcScriptHash.ToDelegate())("CrossChain", new object[] { toChainId, toProxyHash, method, msg });
HelloPoly.Notify(success, "[HelloPoly]-Say: Failed to call CCMC.");
// Event notification
HelloPoly.SayEvent(toChainId, toProxyHash);
return true;
}
}
Below is an example of a target chain call when receiving a cross-chain transaction:
{
/// <summary>
/// This method is used to make cross-chain calls to other target chains (this method is self-defining)
/// </summary>
/// <param name="fromChainId">The chain ID of the source chain in a Poly network</param>
/// <param name="toChainId">The chain ID of the target chain in the Poly network</param>
/// <param name="msg">Receive a cross-chain message sent by the source chain</param>
/// <param name="callingScriptHash">Callback script hash</param>
/// <returns></returns>
[DisplayName("hear")]
public static bool Hear(byte[] inputBytes, byte[] fromProxyContract, BigInteger fromChainId, byte[] callingScriptHash)
//commit into ledger
Storage.Put(fromProxyContract, inputBytes);
// Event notification
HearEvent(fromChainId, fromProxyContract, inputBytes);
return true;
}
Demo Contract Example
GitHub: https://github.com/BSNDA/ICH/tree/main/sample/polychain/neo-contract