GET:技术指南 | Python智能合约开发?看这一篇就够了

01前言

在之前的技术视点文章中,我们介绍了目前本体主网支持的智能合约体系以及相应的智能合约开发工具SmartX。很多小伙伴都想上手练一练。在本期的技术视点中,我们将正式开始讲述智能合约语法部分。

本体的智能合约API分为7个模块,分别是Blockchain&BlockAPI、RuntimeAPI、StorageAPI、NativeAPI、UpgradeAPI、ExecutionEngineAPI以及Static&DynamicCallAPI。本期我们将介绍

?Blockchain&BlockAPI

,这是本体智能合约体系中最基础的部分。其中,BlockchainAPI支持基本的区块链查询操作,如获取当前块高等;BlockAPI支持基本的区块查询操作,如查询指定区块交易数等。

在这之前,小伙伴们可以在本体智能合约开发工具SmartX中新建一个合约,跟着我们进行操作。

02?BlockchainAPI使用方法

智能合约函数的引用与Python的引用如出一辙。开发者可以根据需要引入相应的函数。例如,下面语句引入了获取当前最新块高函数GetHeight和获取区块头函数GetHeader。

fromontology.interop.System.BlockchainimportGetHeight,GetHeader

2.1?GetHeight

开发者可以使用GetHeight来获取当前最新块高,具体例子如下。在后面的例子中,为了节省空间,我们将省略Main函数,小伙伴在练习的时候可以根据需要加入。

Evercore ISI策略师:技术指标支持比特币走强 价格上看75000美元:周二比特币上涨至两周高点,因整体金融市场风险偏好回升。加密货币支持者认为大型金融机构正争先恐后地进入这个市场,Evercore ISI策略师Rich Ross在报告上写道,技术指标支持比特币走强,价格上看75000美元。(金十)[2021/3/10 18:30:18]

fromontology.interop.System.RuntimeimportNotify

fromontology.interop.System.BlockchainimportGetHeight

defMain(operation):

ifoperation=='demo':

returndemo()

returnFalse

defdemo():

height=GetHeight()

Notify(height)#打印height

returnheight#在函数运行结束后返回height

2.2?GetHeader

开发者可以使用GetHeader来获取区块头,参数是某个块的块高。具体例子如下:

fromontology.interop.System.RuntimeimportNotify

fromontology.interop.System.BlockchainimportGetHeader

58学院TIM:不要过分依赖技术指标:今晚,在58学院第二期《合约市场中的丛林法则(上)》的直播中,58学院研究员兼58COIN矿池高级产品经理TIM谈及技术指标时表示:技术指标虽然有一定作用,但其更容易成为交易者做决定的绊脚石。任何指标都是具有滞后性的,当你过分依赖使用各种指标,便容易忽视图表或价格如何在关键水平附近的走势形态。所以在判断走势时切记不要过分依赖技术指标,真正的能具有前瞻性往往就是基于裸K价格图表中的价格行为。[2020/6/4]

defdemo():

block_height=10

header=GetHeader(block_height)

Notify(header)

returnheader

2.3GetTransactionByHash

开发者可以使用GetTransactionByHash函数通过交易哈希获取交易。交易哈希以bytearray的格式,作为参数传入GetTransactionByHash。这个函数的关键在于如何转换将十六进制格式的交易哈希转变为bytearray格式的交易哈希。

我们以16进制格式的交易哈希为例,实现将十六进制格式的交易哈希转变为bytearray格式的交易哈希。示例哈希如下:

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

首先,将该交易哈希反序得到:

声音 | 分析师:比特币已在CME和现货交易所爆发,技术指标显示看涨:加密货币分析师Filbfilb今日发推称,“在我看来,比特币已经在CME和现货交易所爆发,OBV(On-balance volume,平衡交易量)已经得到确认,而宏观TFs正在等待更高的价位。也许会有一些横盘和后测,但是所有的一切都让我对市场看涨。”[2020/1/13]

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

开发者可以通过SmartX提供的转换工具HexNumber(littleendian)<-->Number实现这一步。

然后,将其转成bytearray格式:

{0xc1,0x89,0x0c,0x4d,0x73,0x06,0x26,0xdf,0xaa,0x94,0x49,0x41,0x9d,0x66,0x25,0x05,0xea,0xb3,0xbd,0xa2,0xe1,0xf0,0x1f,0x89,0x46,0x3c,0xc1,0xa4,0xa3,0x0a,0x27,0x9f}

开发者可以通过SmartX提供的转换工具String<-->ByteArray实现这一步。

最后,将得到的bytearray转换成相应的字符串:

\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f

声音 | Rekt Capital:重要技术指标显示,数种山寨币或迎来强势逆转行情:加密货币交易员Rekt Capital发推称,尽管我并不特别看好山寨币,但我发现,目前有少数几种山寨币在200指数移动均线(200 EMA)下方徘徊。200 EMA是投资者情绪的一个长期指标,这意味着一些山寨币可能处于强势逆转的边缘。注:200 EMA是很好的衡量投资者对某种资产的情绪指标。因此,如果一种资产价格高于该指数移动,可能意味着牛市已经开始。(BeInCrypto)[2019/11/3]

GetTransactionByHash函数通过交易哈希获取交易的例子如下:

fromontology.interop.System.BlockchainimportGetTransactionByHash

defdemo():

#tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"

tx_hash=bytearray(b"\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f")

tx=GetTransactionByHash(tx_hash)

returntx

2.4?GetTransactionHeight

动态 | CME公司创始人赵易天:“区块链+AI”等新技术指引未来音乐市场的发展走向:据中国文化报消息,日前,第二十八届中国国际专业音响·灯光·乐器及技术展览会(乐器展)在北京举办。CME公司创始人赵易天在会上表示,无论产品硬件研发还是音乐软件开发,都需要符合市场潮流与方向。他提到,MIDI新标准、“区块链+AI”等新技术指引着未来音乐市场的发展走向。例如,MIDI新标准将建立起智能化乐器互联,云服务能建立起无地域限制的双向连接,区块链可以实现节点间的价值传递等。[2019/6/14]

开发者可以使用GetTransactionHeight函数通过交易哈希获取交易高度。我们还是以上个例子中的哈希为例:

fromontology.interop.System.BlockchainimportGetTransactionHeight

defdemo():

#tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"

tx_hash=bytearray(b"\xc1\x89\x0c\x4d\x73\x06\x26\xdf\xaa\x94\x49\x41\x9d\x66\x25\x05\xea\xb3\xbd\xa2\xe1\xf0\x1f\x89\x46\x3c\xc1\xa4\xa3\x0a\x27\x9f")

height=GetTransactionHeight(tx_hash)

returnheight

2.5?GetContract

开发者可以使用GetContract函数通过合约哈希获取合约。其中,合约哈希的转换过程与上面讲到的交易哈希转换过程一致。

fromontology.interop.System.BlockchainimportGetContract

defdemo():

#contract_hash="d81a75a5ff9b95effa91239ff0bb3232219698fa"

contract_hash=bytearray(b"\xfa\x98\x96\x21\x32\x32\xbb\xf0\x9f\x23\x91\xfa\xef\x95\x9b\xff\xa5\x75\x1a\xd8")

contract=GetContract(contract_hash)

returncontract

?2.6?GetBlock

开发者可以使用GetBlock函数获取区块。有两种方法可以获取指定区块:

1.通过块高获取区块:

fromontology.interop.System.BlockchainimportGetBlock

defdemo():

block=GetBlock(1408)

returnblock

2.通过区块哈希获取区块:

fromontology.interop.System.BlockchainimportGetBlock

defdemo():

block_hash=bytearray(b'\x16\xe0\xc5\x40\x82\x79\x77\x30\x44\xea\x66\xc8\xc4\x5d\x17\xf7\x17\x73\x92\x33\x6d\x54\xe3\x48\x46\x0b\xc3\x2f\xe2\x15\x03\xe4')

block=GetBlock(block_hash)

03?BlockAPI使用方法

BlockAPI中可供引用的函数有三个,它们分别是GetTransactions、GetTransactionCount和GetTransactionByIndex。我们依次介绍下这三个函数。

3.1?GetTransactionCount

开发者可以使用GetTransactionCount函数获取指定区块的交易数量。

fromontology.interop.System.BlockchainimportGetBlock

fromontology.interop.System.BlockimportGetTransactionCount

defdemo():

block=GetBlock(1408)

count=GetTransactionCount(block)

returncount

3.2?GetTransactions

开发者可以使用GetTransactions函数获取获取指定区块的所有交易。

fromontology.interop.System.BlockchainimportGetBlock

fromontology.interop.System.BlockimportGetTransactions

defdemo():

block=GetBlock(1408)

txs=GetTransactions(block)

returntxs

3.3GetTransactionByIndex

开发者可以使用GetTransactionByIndex函数获取指定区块的指定交易。

fromontology.interop.System.BlockchainimportGetBlock

fromontology.interop.System.BlockimportGetTransactionByIndex

defdemo():

block=GetBlock(1408)

tx=GetTransactionByIndex(block,0)#indexstartsfrom0.

returntx

04?后记

Blockchain&BlockAPI在智能合约中起到查询区块链数据和区块数据的作用,是智能合约最不可缺少的一部分。在后面的技术视点中,我们将讨论如何使用其它API,探讨它们和本体区块链的交互。本期讲述的所有语法部分我们提供了中文视频,小伙伴们可以观看和学习。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:0ms0-0:942ms