国产乱人伦在线播放,99无码精品二区在线视频,最近在线更新8中文字幕免费,精品成人一区二区三区四区

您的位置:首頁 > 區(qū)塊鏈 >

Native API可調(diào)用本體原生合約 可節(jié)省調(diào)用Gas的費(fèi)用

2019-09-17 11:06:21 來源: 區(qū)塊網(wǎng)

上一期我們介紹了本體 Python 智能合約的合約執(zhí)行 API,本期我們將討論如何通過 Native API 來進(jìn)行本體原生合約調(diào)用。原生合約調(diào)用最典型的功

上一期我們介紹了本體 Python 智能合約的合約執(zhí)行 API,本期我們將討論如何通過 Native API 來進(jìn)行本體原生合約調(diào)用。原生合約調(diào)用最典型的功能就是合約轉(zhuǎn)賬,這也是整個(gè)智能合約最核心的部分。Native API 只有1個(gè) API。用法如下:

同時(shí),使用 Invoke 函數(shù)需要內(nèi)建的 state 函數(shù)輔助來封裝參數(shù),用法如下:

下面我們具體講述一下這兩個(gè) API 的使用方法。在這之前,小伙伴們可以在本體智能合約開發(fā)工具 SmartX 中新建一個(gè)合約,跟著我們進(jìn)行操作。跟以前的API講解一樣,在文章最后我們將給出這次講解的所有源代碼以及視頻講解。

02 Native API 使用方法

同樣,使用這兩個(gè)函數(shù)前需要引入。下面兩條語句分別引入了這兩個(gè)函數(shù)。

from ontology.interop.Ontology.Native import Invoke

from ontology.builtins import state

2.1 本體原生合約列表

目前,本體可供使用的原生合約有六個(gè)。以下就是可以使用 Native API 調(diào)用的原生合約列表:

在合約中,將合約地址轉(zhuǎn)成 bytearray 形式傳入 Invoke 即可。例如,需要調(diào)用 ONT Token 合約時(shí),可以先將 ONT Token 合約對應(yīng)的地址轉(zhuǎn)成相應(yīng)的 bytearray 形式,再進(jìn)行相應(yīng)的 Invoke 函數(shù)調(diào)用。在進(jìn)行 Invoke 函數(shù)調(diào)用時(shí),傳入的參數(shù)分別為版本號,合約地址,調(diào)用的合約方法以及 state 函數(shù)封裝的轉(zhuǎn)賬相關(guān)參數(shù)。

這里特別要注意的一點(diǎn)是,在進(jìn)行 ONG 的合約轉(zhuǎn)賬時(shí),所填數(shù)量是實(shí)際數(shù)量的10^9倍。 即,如果需要轉(zhuǎn)10個(gè) ONG,那么數(shù)量需要填為10^10。而在采用 ONTO 或者 Cyano 等錢包轉(zhuǎn)賬時(shí),所填數(shù)量即為轉(zhuǎn)賬數(shù)量。

contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01')

param = state(from_acct, to_acct, ont_amount) # 參數(shù)為轉(zhuǎn)出地址,轉(zhuǎn)入地址, 轉(zhuǎn)賬金額

res = Invoke(1, contract_address_ONT, 'transfer', [param])

2.2 轉(zhuǎn)賬合約代碼

下面我們給出一個(gè)完整的示例,演示如何使用 Python 語言來實(shí)現(xiàn) ONT 以及 ONG 的轉(zhuǎn)賬功能。下述代碼以傳入的轉(zhuǎn)出賬戶和轉(zhuǎn)入地址參數(shù)類型為string為例實(shí)現(xiàn)該合約。另外,也可以以address為類型的賬戶參數(shù)進(jìn)行傳遞,從而達(dá)到節(jié)省調(diào)用Gas費(fèi)用的目的。該合約代碼流程如下:

1. 定義合約地址變量 contract_address_ONT,contract_address_ONG;

2. 將轉(zhuǎn)出地址和轉(zhuǎn)入地址從 base58 格式轉(zhuǎn)成 bytearray 格式;

3. 驗(yàn)簽,確認(rèn)轉(zhuǎn)出地址與合約調(diào)用地址為同一地址;

4. state 函數(shù)封裝轉(zhuǎn)賬相關(guān)參數(shù);

5. Invoke 函數(shù)調(diào)用 ONT Token 和 ONG Token 原生合約轉(zhuǎn)賬;

6. 通過返回 res 判斷轉(zhuǎn)賬是否成功。返回值 b'\x01' 為成功,成功則推送事件“transfer succeed”。

from ontology.interop.System.Runtime import Notify, CheckWitness

from ontology.interop.Ontology.Runtime import Base58ToAddress

from ontology.interop.Ontology.Native import Invoke

from ontology.builtins import state

# contract address

contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01')

contract_address_ONG = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02')

def Main(operation, args):

if operation == 'transfer':

from_acct = args[0]

to_acct = args[1]

ont_amount = args[2]

ong_amount = args[3]

return transfer(from_acct,to_acct,ont_amount,ong_amount)

return False

def transfer(from_acct, to_acct, ont_amount, ong_amount):

# 將base58地址轉(zhuǎn)換成 bytearray格式地址

from_acct=Base58ToAddress(from_acct)

to_acct=Base58ToAddress(to_acct)

# 驗(yàn)簽,調(diào)用方必須與轉(zhuǎn)出地址為同一地址

if CheckWitness(from_acct):

# ONT轉(zhuǎn)賬

if ont_amount > 0:

param = state(from_acct, to_acct, ont_amount) # state函數(shù)用于封裝轉(zhuǎn)賬相關(guān)參數(shù)

res = Invoke(1, contract_address_ONT, 'transfer', [param]) # invoke調(diào)用ONT token原生合約轉(zhuǎn)賬

if res and res == b'\x01':

Notify('transfer succeeded')

else:

Notify('transfer failed')

# ONG轉(zhuǎn)賬,流程同上

if ong_amount > 0:

param = state(from_acct, to_acct, ong_amount)

res = Invoke(1, contract_address_ONG, 'transfer', [param])

if res and res == b'\x01':

Notify('transfer succeeded')

else:

Notify('transfer failed')

else:

Notify('CheckWitness failed')

03 SmartX 實(shí)踐

接下來,小伙伴們可以在 SmartX 上進(jìn)行操作,動(dòng)手編譯和運(yùn)行上述提供的合約示例代碼。具體步驟如下:

1. 編譯合約。首先在 SmartX 中新建一個(gè)合約項(xiàng)目,并將代碼放入該項(xiàng)目中進(jìn)行編譯。

2. 部署合約。部署過程中如需申請測試幣,申請地址為https://developer.ont.io/applyOng。部署結(jié)果示意如下:

3. 執(zhí)行轉(zhuǎn)賬。執(zhí)行 transfer 函數(shù)進(jìn)行轉(zhuǎn)賬前需要進(jìn)行相關(guān)參數(shù)設(shè)置。在該示例中,需要填入發(fā)送地址、接收地址、代轉(zhuǎn)賬的 ONT 數(shù)量以及 ONG 數(shù)量:

4. 轉(zhuǎn)賬成功。當(dāng)轉(zhuǎn)帳參數(shù)設(shè)置正確時(shí),執(zhí)行 transfer 函數(shù)將轉(zhuǎn)賬成功。上面所填的接收地址中將顯示出收到的代幣:

04 總結(jié)

本次技術(shù)視點(diǎn)中我們介紹了本體區(qū)塊鏈的 Native API,開發(fā)者可以使用 Native API 來進(jìn)行本體原生合約調(diào)用。原生合約調(diào)用最典型的功能就是合約轉(zhuǎn)賬,這也是整個(gè)智能合約最核心的部分。在下一期技術(shù)視點(diǎn)中,我們將介紹 Upgrade API,探討如何在本體智能合約中進(jìn)行合約升級。(Sheldon)

關(guān)鍵詞: Native API 本體原生合約 Gas

精選 導(dǎo)讀

募資55億港元萬物云啟動(dòng)招股 預(yù)計(jì)9月29日登陸港交所主板

萬科9月19日早間公告,萬物云當(dāng)日啟動(dòng)招股,預(yù)計(jì)發(fā)行價(jià)介乎每股47 1港元至52 7港元,預(yù)計(jì)9月29日登陸港交所主板。按發(fā)行1 167億股計(jì)算,萬

發(fā)布時(shí)間: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情況曝光 隱形重倉股多為高端制造業(yè)

隨著半年報(bào)披露收官,公募基金二季度持股情況曝光。截至今年二季度末,公募基金全市場基金總數(shù)為9794只,資產(chǎn)凈值為269454 75億元,同比上

發(fā)布時(shí)間: 2022-09-02 10:45
資訊   2022-09-02

又有上市公司宣布變賣房產(chǎn) 上市公司粉飾財(cái)報(bào)動(dòng)作不斷

再有上市公司宣布變賣房產(chǎn)。四川長虹25日稱,擬以1 66億元的轉(zhuǎn)讓底價(jià)掛牌出售31套房產(chǎn)。今年以來,A股公司出售房產(chǎn)不斷。根據(jù)記者不完全統(tǒng)

發(fā)布時(shí)間: 2022-08-26 09:44
資訊   2022-08-26

16天12連板大港股份回復(fù)深交所關(guān)注函 股份繼續(xù)沖高

回復(fù)交易所關(guān)注函后,大港股份繼續(xù)沖高。8月11日大港股份高開,隨后震蕩走高,接近收盤時(shí)觸及漲停,報(bào)20 2元 股。值得一提的是,在7月21日

發(fā)布時(shí)間: 2022-08-12 09:56
資訊   2022-08-12

萬家基金再添第二大股東 中泰證券擬受讓11%基金股權(quán)

7月13日,中泰證券發(fā)布公告,擬受讓齊河眾鑫投資有限公司(以下簡稱齊河眾鑫)所持有的萬家基金11%的股權(quán),交易雙方共同確定本次交易的標(biāo)的資

發(fā)布時(shí)間: 2022-07-14 09:39
管理   2022-07-14

央行連續(xù)7日每天30億元逆回購 對債市影響如何?

央行12日再次開展了30億元逆回購操作,中標(biāo)利率2 10%。這已是央行連續(xù)7日每天僅進(jìn)行30億元的逆回購縮量投放,創(chuàng)下去年1月以來的最低操作規(guī)

發(fā)布時(shí)間: 2022-07-13 09:38
資訊   2022-07-13

美元指數(shù)創(chuàng)近20年新高 黃金期貨創(chuàng)出逾9個(gè)月新低

由于對美聯(lián)儲激進(jìn)加息的擔(dān)憂,美元指數(shù)11日大漲近1%創(chuàng)出近20年新高。受此影響,歐美股市、大宗商品均走弱,而黃金期貨創(chuàng)出逾9個(gè)月新低。美

發(fā)布時(shí)間: 2022-07-13 09:36
資訊   2022-07-13

美股三大股指全線下跌 納斯達(dá)克跌幅創(chuàng)下記錄以來最大跌幅

今年上半年,美股持續(xù)回落。數(shù)據(jù)顯示,道瓊斯指數(shù)上半年下跌15 3%,納斯達(dá)克綜合指數(shù)下跌29 5%,標(biāo)普500指數(shù)下跌20 6%。其中,納斯達(dá)克連續(xù)

發(fā)布時(shí)間: 2022-07-04 09:51
推薦   2022-07-04

融資客熱情回升 兩市融資余額月內(nèi)增加超344億元

近期A股走強(qiáng),滬指6月以來上漲4%,融資客熱情明顯回升。數(shù)據(jù)顯示,截至6月16日,兩市融資余額1 479萬億元,月內(nèi)增加344 67億元,最近一個(gè)半

發(fā)布時(shí)間: 2022-06-20 09:41
資訊   2022-06-20

4個(gè)交易日凈買入超百億元 北向資金持續(xù)流入A股市場

北向資金凈流入態(tài)勢延續(xù)。繼6月15日凈買入133 59億元后,北向資金6月16日凈買入44 52億元。自5月27日至今,除6月13日以外,北向資金累計(jì)凈

發(fā)布時(shí)間: 2022-06-17 09:37
推薦   2022-06-17

熱門TAG

more
美聯(lián)儲今年已將基準(zhǔn)利率從接近零大幅上調(diào)至略高于3% EIA報(bào)告:美國原油庫存及戰(zhàn)略儲備減少,汽油及精煉油庫存輕微波動(dòng) 美國政府更廣泛推動(dòng)從汽油動(dòng)力汽車轉(zhuǎn)向電動(dòng)汽車的一部分 數(shù)據(jù)顯示:今年9月日本船企接單量延續(xù)8月下跌下跌趨勢 公告顯示:2022年前三季度TCL中環(huán)研發(fā)投入為27億元 占比營業(yè)收入5.42% 新的111.75億英鎊注資列在“對金融機(jī)構(gòu)的援助—支付給英格蘭銀行”標(biāo)題下 本次政府儲備肉投放面向北京18家主要連鎖超市門店及相關(guān)零售終端投放 有交易員預(yù)計(jì):如果LME不采取措施 接下來可能將有數(shù)十萬噸鋁流入LME 據(jù)報(bào)道:繼德國最大釀酒商拉德貝格啤酒公司9月宣布漲價(jià) 據(jù)報(bào)道:澳大利亞礦商Pilbara的鋰礦拍賣價(jià)再創(chuàng)新高 折算后的碳酸鋰成本 中集天達(dá)首次公開發(fā)行A股股票 招股書顯示此次擬公開發(fā)行股數(shù)不超過103, 多家銀行加強(qiáng)綠色金融頂層設(shè)計(jì) 致力于為經(jīng)濟(jì)社會綠色低碳轉(zhuǎn)型貢獻(xiàn)力量 萊特幣 比特幣 數(shù)字資產(chǎn) 火幣 以太經(jīng)典 比特股 EOS 比特幣現(xiàn)金 量子鏈 Hcash 泰達(dá)幣 瑞波幣 Qcash 比特幣鉆石 超級比特幣 優(yōu)幣 硬分叉 加密貨幣