Show / Hide Table of Contents
合约部署与调用
由于在 Neo N3 中绝大部分功能都是通过合约提供的,所以理解合约是使用 Neo N3 的基础,每个合约由脚本哈希 (ScriptHash) 作为唯一标识,通常也是调用合约的必须参数。本文档主要介绍以下 SDK 功能:
合约部署
ContractClient
中提供了合约部署交易的构建方法 CreateDeployContractTxAsync
, 参数为合约脚本,manifest 和支付系统费和网络费的账户密钥对,其中合约脚本和 manifest 可通过编译获取,账户中需要有足够的 GAS 支付所需费用。
读取合约 nef 和 manifest.json 文件:
构造发布合约的交易:
交易构建后需要广播到链上:
等待交易上链后可以获取交易的执行状态以确保合约部署成功:
下面是完整的示例:
合约模拟调用
ContractClient
提供了 TestInvokeAsync
方法来对合约进行模拟调用,执行后不会影响链上数据。可以直接调用读取信息的合约方法,比如下面的例子调用了NEO原生合约中的name方法
或者使用 MakeScript
构造想要执行的脚本,再调用 RpcClient
中的方法 InvokeScriptAsync
获取执行结果
合约调用(上链交易)
上链的合约调用一般要经过以下步骤:
-
构建调用脚本
以调用原生合约 NEO 的 transfer
方法为例:
-
构建交易:
-
交易构造后广播到链上:
-
等待交易上链后,获取交易的执行状态以确保合约调用成功:
完整示例请参考 构造交易 。
NEP17 合约
Nep17API
封装了转账交易的生成方法,以上交易过程可简化为:
此外 Nep17API
还提供了以下读取方法: