您的位置:首页 > 区块链 >

本体的智能合约API分7个模块 Blockchain API支持区块链查询操作

2019-09-10 08:18:30 来源: 区块网

1 前言在之前的技术视点文章中,我们介绍了目前本体主网支持的智能合约体系以及相应的智能合约开发工具 SmartX。很多小伙伴都想上手练一练

1. 前言

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

本体的智能合约 API 分为7个模块,分别是 Blockchain & Block API、Runtime API、Storage API、Native API、Upgrade API、Execution Engine API 以及 Static & Dynamic Call API。本期我们将介绍 Blockchain & Block API,这是本体智能合约体系中最基础的部分。其中,Blockchain API 支持基本的区块链查询操作,如获取当前块高等;Block API 支持基本的区块查询操作,如查询指定区块交易数等。同时,文末将提供视频讲解。

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

2. Blockchain API 使用方法

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

from ontology.interop.System.Blockchain import GetHeight, GetHeader

2.1 GetHeight

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

from ontology.interop.System.Runtime import Notify

from ontology.interop.System.Blockchain import GetHeight

def Main(operation):

if operation == 'demo':

return demo()

return False

def demo():

height=GetHeight()

Notify(height) # 打印height

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

2.2 GetHeader

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

from ontology.interop.System.Runtime import Notify

from ontology.interop.System.Blockchain import GetHeader

def demo():

block_height=10

header=GetHeader(block_height)

Notify(header)

return header

2.3 GetTransactionByHash

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

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

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

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

c1890c4d730626dfaa9449419d662505eab3bda2e1f01f89463cc1a4a30a279

开发者可以通过 SmartX 提供的转换工具 Hex Number(little endian) <--> 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 <--> Byte Array 实现这一步。

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

\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

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

from ontology.interop.System.Blockchain import GetTransactionByHash

def demo():

# 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)

return tx

2.4 GetTransactionHeight

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

from ontology.interop.System.Blockchain import GetTransactionHeight

def demo():

# 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)

return height

2.5 GetContract

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

from ontology.interop.System.Blockchain import GetContract

def demo():

# 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)

return contract

2.6 GetBlock

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

1. 通过块高获取区块:

from ontology.interop.System.Blockchain import GetBlock

def demo():

block=GetBlock(1408)

return block

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

from ontology.interop.System.Blockchain import GetBlock

def demo():

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)

3. Block API 使用方法

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

3.1 GetTransactionCount

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

from ontology.interop.System.Blockchain import GetBlock

from ontology.interop.System.Block import GetTransactionCount

def demo():

block=GetBlock(1408)

count=GetTransactionCount(block)

return count

3.2 GetTransactions

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

from ontology.interop.System.Blockchain import GetBlock

from ontology.interop.System.Block import GetTransactions

def demo():

block=GetBlock(1408)

txs=GetTransactions(block)

return txs

3.3 GetTransactionByIndex

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

from ontology.interop.System.Blockchain import GetBlock

from ontology.interop.System.Block import GetTransactionByIndex

def demo():

block=GetBlock(1408)

tx=GetTransactionByIndex(block,0) # index starts from 0.

return tx

04 后记

Blockchain & Block API 在智能合约中起到查询区块链数据和区块数据的作用,是智能合约最不可缺少的一部分。(Sheldon)

关键词: 智能合约API Blockchain API 查询

精选 导读

募资55亿港元万物云启动招股 预计9月29日登陆港交所主板

万科9月19日早间公告,万物云当日启动招股,预计发行价介乎每股47 1港元至52 7港元,预计9月29日登陆港交所主板。按发行1 167亿股计算,万

发布时间: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情况曝光 隐形重仓股多为高端制造业

随着半年报披露收官,公募基金二季度持股情况曝光。截至今年二季度末,公募基金全市场基金总数为9794只,资产净值为269454 75亿元,同比上

发布时间: 2022-09-02 10:45
资讯   2022-09-02

又有上市公司宣布变卖房产 上市公司粉饰财报动作不断

再有上市公司宣布变卖房产。四川长虹25日称,拟以1 66亿元的转让底价挂牌出售31套房产。今年以来,A股公司出售房产不断。根据记者不完全统

发布时间: 2022-08-26 09:44
资讯   2022-08-26

16天12连板大港股份回复深交所关注函 股份继续冲高

回复交易所关注函后,大港股份继续冲高。8月11日大港股份高开,随后震荡走高,接近收盘时触及涨停,报20 2元 股。值得一提的是,在7月21日

发布时间: 2022-08-12 09:56
资讯   2022-08-12

万家基金再添第二大股东 中泰证券拟受让11%基金股权

7月13日,中泰证券发布公告,拟受让齐河众鑫投资有限公司(以下简称齐河众鑫)所持有的万家基金11%的股权,交易双方共同确定本次交易的标的资

发布时间: 2022-07-14 09:39
管理   2022-07-14

央行连续7日每天30亿元逆回购 对债市影响如何?

央行12日再次开展了30亿元逆回购操作,中标利率2 10%。这已是央行连续7日每天仅进行30亿元的逆回购缩量投放,创下去年1月以来的最低操作规

发布时间: 2022-07-13 09:38
资讯   2022-07-13

美元指数创近20年新高 黄金期货创出逾9个月新低

由于对美联储激进加息的担忧,美元指数11日大涨近1%创出近20年新高。受此影响,欧美股市、大宗商品均走弱,而黄金期货创出逾9个月新低。美

发布时间: 2022-07-13 09:36
资讯   2022-07-13

美股三大股指全线下跌 纳斯达克跌幅创下记录以来最大跌幅

今年上半年,美股持续回落。数据显示,道琼斯指数上半年下跌15 3%,纳斯达克综合指数下跌29 5%,标普500指数下跌20 6%。其中,纳斯达克连续

发布时间: 2022-07-04 09:51
推荐   2022-07-04

融资客热情回升 两市融资余额月内增加超344亿元

近期A股走强,沪指6月以来上涨4%,融资客热情明显回升。数据显示,截至6月16日,两市融资余额1 479万亿元,月内增加344 67亿元,最近一个半

发布时间: 2022-06-20 09:41
资讯   2022-06-20

4个交易日净买入超百亿元 北向资金持续流入A股市场

北向资金净流入态势延续。继6月15日净买入133 59亿元后,北向资金6月16日净买入44 52亿元。自5月27日至今,除6月13日以外,北向资金累计净

发布时间: 2022-06-17 09:37
推荐   2022-06-17