如何在本体网络上编写智能Python合同。 第3部分:运行时API

图片

这是在Ontology区块链网络上使用Python创建智能合约的一系列教程的第三部分。 在之前的文章中,我们遇到了

  1. 区块链和区块API
  2. 存储API

既然您已经了解了在本体网络上使用Python开发智能合约时如何调用适当的持久性存储API,让我们开始了解如何使用运行时API (合约执行API)。 运行时API具有8个相关的API,它们提供了用于执行合同的通用接口,并帮助开发人员接收,转换和验证数据。

以下是8种API数据的简要说明:

图片

让我们仔细看看如何使用这8个API。 在此之前,您可以在Ontology SmartX智能合约开发工具中创建一个新合约,并按照以下说明进行操作。

如何使用运行时API


有两种导入运行时API的方式:Onology.interop.System.RuntimeOnology.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 # return a uint num 

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

Source: https://habr.com/ru/post/zh-CN476862/


All Articles