
这是在Ontology区块链网络上使用Python创建智能合约的一系列教程的第三部分。 在之前的文章中,我们遇到了
- 区块链和区块API
- 存储API
既然您已经了解了在本体网络上使用Python开发智能合约时如何调用适当的持久性存储API,让我们开始了解如何使用
运行时API (合约执行API)。 运行时API具有8个相关的API,它们提供了用于执行合同的通用接口,并帮助开发人员接收,转换和验证数据。
以下是8种API数据的简要说明:

让我们仔细看看如何使用这8个API。 在此之前,您可以在Ontology
SmartX智能合约开发工具中创建一个新合约,并按照以下说明进行操作。
如何使用运行时API
有两种导入
运行时API的方式:Onology.interop.System.Runtime和
Onology.interop.Ontology.Runtime 。 本体路径包含最近添加的API。 下面的行导入API数据。
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58, GetCurrentBlockHash
通知API
通知功能通过网络广播事件。 在下面的示例中,Notify函数将返回十六进制字符串“ hello word”并通过网络进行传输。
from ontology.interop.System.Runtime import Notify def demo(): Notify("hello world")
您可以在日志中看到以下内容:

GetTime API
GetTime函数返回当前时间戳,该时间戳返回调用该函数的Unix时间。 单位是第二。
from ontology.interop.System.Runtime import GetTime def demo(): time=GetTime() return time
GetCurrentBlockHash API
GetCurrentBlockHash函数返回当前块的哈希。
from ontology.interop.Ontology.Runtime import GetCurrentBlockHash def demo(): block_hash = GetCurrentBlockHash() return block_hash
序列化和反序列化
这些是一对序列化和反序列化功能。 Serialize函数将对象转换为字节数组对象,而Deserialize函数将字节数组转换为原始对象。 下面的代码示例转换输入的参数并将其存储在合同的永久存储中。 它还从合同的永久存储中提取数据,并将其转换为原始对象。
from ontology.interop.System.Runtime import GetTime, CheckWitness, Log, Notify, Serialize, Deserialize from ontology.interop.System.Storage import Put, Get, GetContext def Main(operation, args): if operation == 'serialize_to_bytearray': data = args[0] return serialize_to_bytearray(data) if operation == 'deserialize_from_bytearray': key = args[0] return deserialize_from_bytearray(key) return False def serialize_to_bytearray(data): sc = GetContext() key = "1" byte_data = Serialize(data) Put(sc, key, byte_data) def deserialize_from_bytearray(key): sc = GetContext() byte_data = Get(sc, key) data = Deserialize(byte_data) return data
Base58ToAddress和AddressToBase58
这对地址转换功能。 Base58ToAddress函数将base58的编码地址转换为字节数组形式的地址,而AddressToBase58将字节数组形式的地址转换为base58编码地址。
from ontology.interop.Ontology.Runtime import Base58ToAddress, AddressToBase58 def demo(): base58_addr="AV1GLfVzw28vtK3d1kVGxv5xuWU59P6Sgn" addr=Base58ToAddress(base58_addr) Log(addr) base58_addr=AddressToBase58(addr) Log(base58_addr)
证人
CheckWitness(fromAcct)功能具有两个功能:
- 验证fromAcct对象是否正在调用当前函数。 如果是(即,签名验证已通过),则函数返回。
- 检查调用当前函数的对象是否为合同。 如果它是合同,并且功能是从合同执行的,则通过验证。 也就是说,验证fromAcct是否为GetCallingScriptHash()的返回值。 GetCallingScriptHash()函数可以获取当前智能合约的合约的哈希值。
GetCallingScriptHash():
有关
Guthub的更多
信息 from ontology.interop.System.Runtime import CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress def demo(): addr=Base58ToAddress("AW8hN1KhHE3fLDoPAwrhtjD1P7vfad3v8z") res=CheckWitness(addr) return res
可以在
Guthub上找到更多信息。 在下一篇文章中,我们将介绍本
机API,以学习如何在本体智能合约中转移资产。
这篇文章是由Hashrate&Shares专为OntologyRussia翻译的。
您是开发人员吗? 加入我们的
Discord技术社区。 另外,请查看本体
开发人员中心,以获取更多工具,文档等。
开发人员的开放任务。 关闭任务-获得奖励。
申请本体学生人才计划
本体论
本体网站 -GitHub -
Discord- 电报俄语 -Twitter -
Reddit