风险提示:理性看待区块链,提高风险意识!
使用SmartX进行本体网络智能合约开发教程
首页 > 币界资讯 > 区块链知识 2019-11-03 15:13
摘要
在之前的技术视点文章中,我们介绍了目前本体主网支持的智能合约体系以及相应的智能合约开发工具 SmartX。很多小伙伴都想上手练一练。在本期的本体技术视点中,我们将正式开始讲述智能合约语法部分。本体的智能合约 API 分为7个模块,分别是 Blockchain & Block API、Runtime API、Storage API、Native API、Upgrade API、Execution Engine API 以及 Static & Dynamic Call API 。
币界网报道:

在之前的技术视点文章中,我们介绍了目前本体主网支持的智能合约体系以及相应的智能合约开发工具 SmartX。很多小伙伴都想上手练一练。在本期的本体技术视点中,我们将正式开始讲述智能合约语法部分。本体的智能合约 API 分为7个模块,分别是 Blockchain & Block API、Runtime API、Storage API、Native API、Upgrade API、Execution Engine API 以及 Static & Dynamic Call API。

image.png

本期我们将介绍 Blockchain & Block API,这是本体智能合约体系中最基础的部分。其中,Blockchain API 支持基本的区块链查询操作,如获取当前块高等;Block API 支持基本的区块查询操作,如查询指定区块交易数等。同时,文末将提供视频讲解。在这之前,小伙伴们可以在本体智能合约开发工具 SmartX 中新建一个合约,跟着我们进行操作。

Blockchain API 使用方法

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

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

2.1GetHeight

开发者可以使用 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.2GetHeader

开发者可以使用 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.4GetTransactionHeight

开发者可以使用 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.5GetContract

开发者可以使用 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.6GetBlock

开发者可以使用 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)

Block API 使用方法

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

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

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

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

后记

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

发表评论
发表评论
暂无评论
    相关阅读
    众所周知,Web 2.0向我们介绍了Facebook和MySpace等社交媒体网络以及YouTube等平台,这些平台使日常互联网用户能够轻松发布他们的内容。
    区块链
    2025-01-08 11:51:34
    人工智能为CES 2025最古怪的小工具提供动力,包括机器人吸尘器、智能电视,甚至是跟踪健康指标的智能镜子。
    区块链
    2025-01-08 08:31:29
    据报道,亚马逊支持的人工智能初创公司Anthropic即将获得20亿美元的新一轮融资。据报道,这家人工智能公司还与
    区块链
    2025-01-08 06:44:34
    节点网络验证区块链交易。节点赚取加密货币作为费用,激励他们处理这些交易。当区块链上的交易比平时更多时,随着用户竞相实现更高的处理速度,费用也会增加。当特定加密货币的价格上涨时,有时会发生这种情况。更多的用户倾向于移动他们的资产
    区块链
    2025-01-08 06:12:51
    黄仁勋推出了该公司最具雄心的消费者技术阵容,包括人工智能计算机、代理商和新的GeForce RTX 5000系列GPU。
    区块链
    2025-01-08 06:11:47
    推荐专栏
    热门币种
    更多
    币种
    美元价格
    24H涨跌幅
    BTC比特币
    60,963.61 USDT
    ¥435,103.38
    -2.72%
    ETH以太坊
    3,368.69 USDT
    ¥24,042.67
    -0.3%
    BNB币安币
    570.68 USDT
    ¥4,073.00
    -0.28%
    USDT泰达币
    1.02 USDT
    ¥7.25
    -0.19%
    SOL
    135.96 USDT
    ¥970.36
    +7.66%
    USDC
    1.00 USDT
    ¥7.15
    -0.01%
    TON
    7.59 USDT
    ¥54.14
    +4.55%
    XRP瑞波币
    0.47720 USDT
    ¥3.41
    +0.48%
    DOGE狗狗币
    0.12210 USDT
    ¥0.87140
    +2.43%
    ADA艾达币
    0.39050 USDT
    ¥2.79
    +3.88%
    热搜币种
    更多
    币种
    美元价格
    24H涨跌幅
    狗狗币
    0.3499 USDT
    ¥2.57
    -10.56%
    Filecoin
    5.2874 USDT
    ¥38.77
    -12.83%
    比特币
    96247.13 USDT
    ¥705,645.46
    -5.36%
    Gatechain Token
    17.6291 USDT
    ¥129.25
    -4.7%
    Horizen
    22.8354 USDT
    ¥167.42
    -18.79%
    dYdX
    1.3924 USDT
    ¥10.21
    -13.94%
    柚子
    0.8057 USDT
    ¥5.91
    -11.12%
    Solana
    196.85 USDT
    ¥1,443.23
    -9.1%
    Shiba Inu
    2.157E-5 USDT
    ¥0.00
    -11.63%
    火币积分
    0.9278 USDT
    ¥6.80
    -28.99%
    Fantom
    0.6724 USDT
    ¥4.93
    -13.09%
    艾达币
    0.9901 USDT
    ¥7.26
    -9.01%
    最新快讯
    更多
    币界网实时价格午报:ETH以太坊报3338.77美元/枚,跌幅达-5.05%
    2025-01-08 13:06:55
    币界网实时价格午报:AVAX报38.38美元/枚,跌幅达-3.54%
    2025-01-08 13:06:54
    WeMade员工起诉公司未支付山寨币奖金,索赔约1100万美元
    2025-01-08 12:59:04
    中国银行原副行长王永利:理性看待特朗普的比特币新政
    2025-01-08 12:58:23
    币界网实时价格午报:OP报1.838美元/枚,跌幅达-3.06%
    2025-01-08 12:57:09
    币安将上线SONICUSDT永续合约
    2025-01-08 12:55:12
    一个新地址从Binance提出562万美元THE
    2025-01-08 12:51:20