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

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函数,小伙伴在练习的时候可以根据需要加入。

观点:寿险行业若将0.1%资产投资比特币,相当于BTC流通供应量的1.35%:Adamant Capital创始人Tuur Demeester在推特上就“美国万通人寿保险公司购买1亿美元比特币”的消息评论称,如果整个寿险行业按照目前的价格将其资产的0.1%配置到比特币上,他们将在市场上用45亿美元购买251400枚比特币——相当于BTC流通供应量的1.35%。

此前消息,美国万通人寿保险公司(MassMutual)已通过纽约数字投资集团(NYDIG)为其普通保险帐户购买了价值1亿美元的比特币,并收购了NYDIG价值500万美元的股份。MassMutual成立于1851年,是一家拥有500万客户的美国共同人寿保险公司,管理着超过2350亿美元的保险账户。[2020/12/12 14:59:47]

fromontology.interop.System.RuntimeimportNotify

fromontology.interop.System.BlockchainimportGetHeight

defMain(operation):

ifoperation=='demo':

returndemo()

returnFalse

defdemo():

height=GetHeight()

Notify(height)#打印height

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

观点:未来区块链去中心化趋势将随用户基础扩张逐步减弱:10月15日消息,世界经济论坛学术撰稿人Stephanie Hurde撰文称,从表面上看,区块链技术支持者认为,区块链是现代经济的反垄断趋势的解药。但实际上,区块链应用当前不像大型科技公司那样大肆行使经济和权力,那是因为它们还没有实现任何可与之媲美的用户基础。大规模的采用以及随之而来的关注和资金,是积累权力的先决条件。万维网从Tim Berners-Lee的去中心化发明发展到,成为像Facebook和Twitter这样利润丰厚、功能强大的社交媒体应用,花了几十年的时间。关键问题在于,如果区块链拥有了自己的杀手级应用,这些服务是否会比目前的选择更加去中心化,而答案是不会。他称,很有可能,再过一二十年,我们就会像今天抱怨大型科技公司一样,抱怨区块链大公司的邪恶本质。(CoinDesk)[2020/10/15]

2.2?GetHeader

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

fromontology.interop.System.RuntimeimportNotify

fromontology.interop.System.BlockchainimportGetHeader

defdemo():

block_height=10

header=GetHeader(block_height)

Notify(header)

returnheader

观点:BTC和ETH可以成为比股票和债券更可靠的宏观指标:风险投资公司Placeholder合伙人Chris Burniske表示,加密市场可能更能洞察全球经济状况。Burniske解释称:“考虑到政府对传统市场的干预,更不用说加密技术的全球24/7流动性,BTC和ETH可以成为比股票和债券更可靠的宏观指标。”(CryptoSlate)[2020/6/22]

2.3GetTransactionByHash

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

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

9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1

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

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}

观点:俄罗斯政府访问央行数据计划或将人们推向加密货币:4月30日消息,俄罗斯内政部长已向该国中央银行提出了一项建议,以允许该部门访问央行的机密会计记录,借此加强政府和银行之间的合作帮助逃税执法。但央行对此持怀疑态度,并称此举可能会影响公众对银行系统的信心。加拿大皇家银行也表示,许多人认为,如果该举动成功,将人们导致对数字货币的需求增加。俄罗斯媒体也表示,人们希望保护自己数据的隐私性,因此他们将求助于将储蓄资金从法定货币转换为加密货币。(Cryptocurrency News )[2020/4/30]

开发者可以通过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

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

fromontology.interop.System.BlockchainimportGetTransactionByHash

defdemo():

#tx_hash="9f270aa3a4c13c46891ff0e1a2bdb3ea0525669d414994aadf2606734d0c89c1"

观点:埃及央行限制提现,比特币可以解决此类问题:据《纽约时报》周日报道,埃及央行已指示全国各银行实施临时的每日存取款限额。这一最新举措旨在控制该国的通货膨胀,并防止民众在新冠疫情期间囤积现金。据悉,个人每日提款限额已降至1万埃及镑(635美元),公司则降至5万埃及镑(3100美元)。只有那些需要提取现金来支付员工工资的企业将不受此限制。这些措施是在该国银行掀起一波大规模取款潮之后出台的。埃及央行行长Tarek Amer周日表示,在过去三周中,有300亿埃及镑(约合19.1亿美元)从该国银行取出。加密货币倡导者Vis在推特上就此发表评论称:“这就是比特币被创造出来的原因……如果有人能加以限制,那就不是你的钱。”(Bitcoinist)[2020/4/2]

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

开发者可以使用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,探讨它们和本体区块链的交互。本期讲述的所有语法部分我们提供了中文视频,小伙伴们可以观看和学习。

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

区块博客

DAIEOS:观点 | 区块链不要通证到底行不行?_EOSWIN

通证曾被认为是区块链系统的灵魂,是区块链系统中不同主体所拥有权益的承载。但2017年以后,随着区块链上一波热潮涌起,通证成为各种打着区块链名义的项目方通过ICO等方式发行的融资代币.

[0:15ms0-6:695ms