
之前,我在
第1部分:区块链和区块API和
第2部分:存储API第3部分:运行时API今天,让我们谈谈如何通过
Native API调用Ontology Native智能合约。 调用本地合同的最典型功能之一是资产转移。
引言
本机API只有一个API。 使用Invoke函数时,需要使用内置状态函数来帮助您封装参数。 请参阅下文以了解如何使用这些功能。

现在,让我们更详细地介绍如何使用这两个API。 在此之前,您可以在本体智能合约开发工具
SmartX中创建一个新合约,并按照以下说明进行操作。 像往常一样,在文章末尾,我将提供到源代码的链接。
如何使用本机API
与往常一样,在使用这两个功能之前,需要按如下所示导入它们。
from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state
本体本地合同清单
当前有6个本体本机合同可供开发人员使用。 以下是可以由本机API调用的6种本机合约的列表。

在合同中,您只需要将合同地址转换为字节数组格式并调用它。
例如 ,当您需要调用ONT令牌合同时,可以先将ONT令牌合同的地址转换为字节数组格式,然后再调用Invoke函数。 调用Invoke函数时,导入的参数是版本号,合同地址,调用的合同方法以及由state函数封装的与传输相关的参数。
这里需要特别注意的一点是,当进行ONG的合同转让时,填写的数量是实际数量的10倍。 也就是说,如果您需要转移10 ONG,则需要填写的数量是10。 当使用诸如ONTO或Cyano之类的钱包进行转账时,您输入的数量就是转账金额。
contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param])
转让合同代码
下面我们给出一个详细的示例,说明如何使用Python
传输ONT和ONG 。 在下面的代码中,导入的发送帐户和接收地址的参数类型是一个字符串。 此外,还可以使用帐户参数类型的地址进行交付,从而节省了调用合同的Gas费用。 流程如下:
- 定义合同地址变量contract_address_ONT和contract_address_ONG;
- 将发送和接收地址从base58格式转换为bytearray格式;
- 验证签名并确认发送地址与合同调用地址相同;
- 状态函数封装了与传输相关的参数;
- Invoke函数调用ONT令牌和ONG令牌本机合约进行传输;
- 通过返回res确定传输是否成功。 如果返回值为b'\ x01',则传输成功,并且将推出“传输成功”事件。
from ontology.interop.System.Runtime import Notify, CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state
在SmartX上练习
您还可以
按照以下步骤在
SmarX上编译并运行上述代码示例:
- 编制合同。 首先,在SmartX上创建一个项目,然后编译该项目中的代码。

- 部署合同。 如果您需要测试令牌来部署合同,请在此处申请。 部署结果如下:

- 运行传递函数。 在运行传递函数之前,需要根据需要配置参数。 在下面的示例中,您需要输入发送地址,接收地址以及转移的ONT和ONG金额:

- 转移成功。 正确配置参数后,运行传输功能时传输将成功。 转移的令牌将显示在上方的接收地址中:

总结
在本文中,我们介绍了本体链的本
机API 。 开发人员可以使用此API调用本体本机合同。 在下一篇文章中,我们将介绍
升级API,以探讨如何在本体智能合约中升级合约。
在
此处找到GitHub上的教程。
这是先前在Ontology Medium博客上发布的官方教程
您是开发人员吗? 确保您已加入
Discord上的我们的技术社区。 另外,请访问我们网站上的
开发人员中心,在那里您可以找到开发人员工具,文档等。
在其他地方找到本体
本体网站GitHub /
不和谐电报
英语 /
俄语Twitter /
Reddit