python广告搞笑_技术入门 | 听说Python的广告刷爆了你的朋友圈?
前幾天,一條 Python 廣告刷爆了小編的朋友圈。網友紛紛驚呼,“什么鬼?居然這么多人在學 Python?”而在日前 IEEE Spectrum 發布的第五屆年度編程語言交互排行榜中,Python 不但雄踞第一,在綜合指數、用戶增速、就業優勢和開源語言單項中,全部霸占榜首。
于是有網友開玩笑:“人生苦短,你還不用 Python 嗎?”既然要用,何不來本體學學 Python 智能合約開發?言歸正傳,今天小編就教你點干貨!
圖?| 網絡
01?導語
上一期我們介紹了跨合約靜態調用,講述了如何使用 RegisterAppCall API 進行靜態調用其它合約的函數。本期我們將討論如何跨合約動態調用。API只有一個,用法如下:
02 DynamicAppCall 使用方法
使用 DynamicAppCall 函數前需要將其引入。這可以通過下面的語句實現:
from ontology.interop.System.App import DynamicAppCall
2.1?DynamicAppCall API
DynamicAppCall API 有三個參數,分別對應被調用合約的哈希反序,被調用合約方法和被調用方法所需要的參數。我們準備兩個智能合約,合約 A 與合約 B。接下來我們通過合約 A 來動態調用合約 B 的功能函數。
合約 A 的代碼如下:特別注意:獲取合約 B 的合約哈希后,需要將其反序后再作為調用合約 A 時的參數傳入。from ontology.interop.System.App import DynamicAppCallfrom ontology.interop.System.Runtime import Notify
def Main(operation, args): if operation == "DynamicCallContract": if len(args) != 3: return False revesedContractAddress = args[0] opt = args[1] params = args[2] return DynamicCallContract(revesedContractAddress, opt, params)
return False
def DynamicCallContract(revesedContractAddress, operation, params): res = DynamicAppCall(revesedContractAddress, operation, [params]) Notify(["the result of the DynamicCall is: ", res]) return res合約 B。也是最簡單的 Hello World 合約。合約 A 將調用合約 B 中的 Hello 函數。特別注意:需要先部署合約 B,獲取合約 B 的合約哈希。from ontology.interop.System.Runtime import Notify
def Main(operation, args): if operation == 'Hello': msg = args[0] return Hello(msg)
return False
def Hello(msg): return msg此外,我們推薦在合約 A 中預留接口,對 B 合約哈希的反序進行存儲 (注意存儲時,value 的類型應為 bytearray)。當我們通過合約 A 調用合約 B 時,可將被存儲的 B 合約哈希取出填充到 DynamicAppCall() 中的第一個參數位置。這樣做的好處有:
1. 不用每次調用方法時,傳入 B 合約的哈希反序;
2. 對于函數調用者而言,合約 B 的哈希是隱形的,可以預先在合約 A 中方便地進行設置,進而保留了動態調用的靈活性,同時也包含了 RegisterAppCall 接口傳參的簡潔性。
03?SmartX 示例
1. 部署合約 B,得到其合約哈希為028de32923bcc21e8a5485e4b0e81eff2d9ba08e;
2. 點擊工具欄使用Hex String (Big-endian/Little-endian),將合約哈希反序得到8ea09b2dff1ee8b0e485548a1ec2bc2329e38d02;
3. 部署合約 A;
4. 在 SmartX 上選中合約 A 中的 DynamicCallContract 方法,并設置參數:
5. 點擊「運行預執行」,返回68656c6c6f20776f726c64?(Hello World 十六進制字符串),?調用成功。
04 總結
這兩期我們分別介紹了靜態合約調用與動態合約調用。可以總結,二者的主要區別在于:
靜態合約調用需要寫死合約地址(作為參數寫入 RegisterAppCall),也就是說靜態調用只能調用某個特定合約。而動態合約調用可以將合約地址作為參數傳入,意味著可以沒有限制地調用任意非 Native 合約。
靜態合約調用合約地址無需反序,而動態調用合約地址需要反序。
下一期我們將介紹本體 Python 智能合約語法的?Execution Engine API,也是本系列教程的最后一篇,記得搬好小板凳來聽課哦~
來源:公眾號:本體研究院
?本文僅代表作者本人觀點,與趣幣網無關。趣幣網對文中陳述、觀點判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。若以此作為投資依據,請自行承擔全部責任。轉載請注明出處:趣幣網
總結
以上是生活随笔為你收集整理的python广告搞笑_技术入门 | 听说Python的广告刷爆了你的朋友圈?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pythonfor循环加2_python
- 下一篇: python几岁开始学_python编程