NEXT社區|小課堂
由于近期NEXT社區加入很多新的小伙伴,有在校大學生,有對區塊鏈感興趣的傳統企業從業者。為了更方便、更系統的讓NEXT社區的伙伴們了解NEO的技術知識,因此我們開設了小課堂,每周3節,向大家普及NEO相關的知識要點!
NEXT社區小課堂|第十三課
NEOPython編譯器介紹
neo-boa編譯器介紹
neo-boa編譯器可將Python文件編譯為.avm格式,在NEO虛擬機中運行。NEO虛擬機可在NEO區塊鏈上執行合約。
編譯器支持Python語言子集。
1、目前功能
·?將Python語言子集編譯成.avm格式,在NEO虛擬機上運行
·??適用于Python3.4與3.5
2、未來功能
·?編譯更廣泛的Python語言子集
·??適用于Python3.6
3、已支持的Python功能
下文為目前支持的Python功能一覽。詳細介紹請參見boa.tests.src目錄中的案例
4、流控制
If、Else、Elif、While、Break、Methodcalls、Lamdbas、forxin
5、用于整數運算的算數運算符與相等運算符
ADD、SUB、MUL、DIV、ABS、LSHIFT、RSHIFT、AND、OR、XOR、MODULO、INVERT、GT、GTE、LT、LTE、EQ、NOTEQ
6、使用自定義內置功能進行列表創建。注意列表一經創建,其長度便不可更改。
fromboa.code.builtinsimportlist
#thisworks
x=list(length=10)
x=84
#thisalsoworks
x=
#thisdoesNOTwork
x=
x.append(1)
#支持列表操作
x=
y=x
#在可能的情況下,Python的某些__builtins__
動態 | Bitfinex啟動Tether Gold保證金交易:金色財經報道,加密貨幣交易所Bitfinex增加了實物黃金支持的穩定幣Tether Gold(XAUt)的保證金交易。從1月30日開始,該交易所將支持XAU?的保證金交易以及其與美元和比特幣的交易對。根據新聞稿,保證金功能將要求初始股本為20%,并提供高達5倍的杠桿率。[2020/1/31]
#已經根據NEO虛擬機的特點以自定義的方式實現
fromboa.code.builtinsimportrange
xrange=range(1,30)
#thisalsoworks
foriinrange(2,21):
i=i1
安裝
1、使用pip
pipinstallneo-boa
2、手動安裝
克隆存儲庫,進入項目目錄后創建Python3虛擬環境,并通過以下指令激活。
python3?-mvenvvenvsourcevenv/bin/activate
或單獨安裝Python3.5
virtualenv?-p?/usr/local/bin/python3.5venvsourcevenv/bin/activate
或單獨安裝Python3.5
virtualenv?-p?/usr/local/bin/python3.5venvsourcevenv/bin/activate
接著,通過以下指令安裝需求
pipinstall?-rrequirements.txt
3、基本用途
編譯器使用指南如下
fromboa.compiler?import?CompilerCompiler.load_and_save('path/to/your/file.py')
4、許可證
·開源MIT?
·主作者為localhuman
5、boa.compiler.Compiler
下文將介紹Compiler的具體實現細則。
6、classboa.compiler.Compiler
分析 | BTC多空開單量保持謹慎 Coinbase BTC/USD 對 Bitfinex仍處負溢價狀態:據TokenGazer數據分析顯示,截止至6月19日17點整,BTC價格為$9170.8,市值為162,838.6MM,主流交易所24H BTC交易量約為$1126.9MM,環比昨日下滑18%;經過比對Bitfinex、Bitstamp、Coinbase三個交易所18日全天交易數據,TokenGazer發現Bitstamp上的主動買單超過了主動賣單,Bitfinex與Coinbase上主動賣單多于主動買單;當前Coinbase BTC/USD 對 Bitfinex仍處負溢價狀態,但是溢價差距在縮小;算力方面,BTC算力呈現一定下降趨勢;期貨方面,BTC多空開單量都存在輕微下滑情況。[2019/6/19]
主編譯器接口類
通過下列程序加載python文件,編譯為.avm格式,并與python文件存儲在一個地方。
fromboa.compilerimportCompilerCompiler.load_and_save(‘path/to/your/file.py’)#returnthecompilerobjectforinspectioncompiler=Compiler.load(‘path/to/your/file.py’)#retrievethedefaultmoduleforinpectiondefault_module=compiler.default#retreivethedefault/entrymethodforthesmartcontractentry_method=default_module.main
7、defaule
取回默認或“入口”模塊。
返回值:默認反回值為boa.code.Module對象,異常時無返回值
8、staticinstance()
取回當前編譯器對象的實例,否則創建一個實例
返回值:編譯器對象的單個實例
9、staticload(path)
調用load來加載需編譯但無需寫為.avm格式的Python文件
參數:path–Python文件的編譯路徑
返回值:編譯器實例
用途:通過下述程序返回編譯器對象進行檢查
聲音 | Bitfinex電子郵件回應用戶:有信心為解凍資金提供有說服力的證據,不會“跑路”:Bitfinex用戶今日收到一封來自交易所的電子郵件,在這封郵件中,該交易所再次向用戶保證了他們的財務狀況,在官方回應中,他們表示“財務狀況良好”。reddit用戶GooseG17將這封郵件公布出來,部分內容如下:“親愛的Bitfinex交易員,到目前為止,你可能已經知道了過去48小時發生的事情,但我想親自告訴你發生了什么,以及我們的業務進展如何。4月24日星期三,紐約總檢察長辦公室向位于曼哈頓的紐約州最高法院提交了一份有關Bitfinex和Tether的請愿書和相關文件。我們相信,這份請愿書是基于紐約總檢察長辦公室從我們和其他渠道收到的信息和材料。事實上,就在昨天之前,我們一直在全力配合紐約當局對我們業務的調查。請愿書和其他材料是在沒有通知我們或機會回應的情況下提交的。我們認為,不構成民事或刑事指控的材料充滿了不準確和錯誤的主張。我們特別要向你保證,關于我們“損失”8.5億美元等指控是絕對錯誤的。我我們正在積極努力行使我們的權利和補救措施,以解凍這些資金。我們有信心能夠為收回這些資金提出明確,連貫和有說服力的論據。請放心,我們將對紐約總檢察長辦公室在其文件中所作的虛假斷言提出有力的質疑。我們在此向您保證,我們一如既往地堅強,我們不會去任何地方。”[2019/4/27]
fromboa.compiler?import?Compilercompiler?=?Compiler.load(‘path/to/your/file.py’)
10、staticload_and_save(path,output_path=None)
調用load_and_save來加載需編譯為.avm格式的Python文件,并保存結果。
默認情況下,最終生成的.avm文件將與源文件存儲在一個地方。
參數:
·path——Python文件的編譯路徑
·output_path——已編譯的.avm文件的可選保存路徑
返回值:返回編譯器實例
用途:通過下述代碼返回編譯器對象進行檢查
fromboa.compilerimportCompiler
Compiler.load_and_save(‘path/to/your/file.py’)
11、write()
動態 | 美國政府歸還 Bifitnex 此前因安全漏洞被非法取走的比特幣:據 IMEOS 報道,Bitfinex 發文表示在 2016 年 8 月份因安全漏洞被不合法取走的 27.66 個比特幣,在美國政府的執法協助下成功拿回。 Bitbinex 在文中說到,2016 年時間發生后就登記備案并協同國際執法機構提供調查情報,并在去年 11 月份收到美國政府通知稱已經拿到這筆比特幣。目前,Bitfinex 已經拿到這些比特幣,并將進行恢復計劃,歸還給有恢復權限的代幣持有者。[2019/2/25]
返回值:已編譯的Python程序的字節串
12、staticwrite_file(data,path)
通過指定路徑將輸出數據存儲至文件系統
參數:
·data——待寫入磁盤的數據字節串
·path——文件寫入路徑
13、boa.code.module.Module
下文將介紹Module的具體實現細則。
14、classboa.code.module.Module(path,module_name=”,is_sys_module=False,items_to_import=None)
模塊是包含代碼對象的頂層組件。例如,在path/to/my/file.py的編譯過程中,file.py中包含的項目即為模塊。一個可執行項可包含多個模塊。上述案例中的“默認”或“入口”模塊即為file.py。
調用Compiler.load_and_save(‘path/to/file.py’)時會專門為file.py創建一個模塊。若file.py導入了其他任何功能,那些模塊也會被添加至可執行項中,并置于Module.loaded_modules屬性中。
在模塊被當做方法處理,方法被當做基本塊處理,基本塊被處理為標記后,主模塊或default模塊的write()方法即被調用,將可執行項寫為字節串,返回磁盤并存儲。
如果您想檢查模塊內容,可使用Compiler.load(‘path/to/file.py’),該功能將返回一個編譯器實例。獲取該實例后,您便可以訪問編譯器的default模塊,從而訪問該默認模塊中裝入的其他模塊。
各模塊均包含byteplay3對象bp的引用,該對象包含可在Python解釋器中顯示的指令集。
Nexus與SingularityNET合作 通過3D區塊鏈技術探索人工智能:\t據Cryptoninjas消息,Nexus和SingularityNET今天宣布了一項合作,以探索區塊鏈和人工智能技術的結合。SingularityNET正在創建基于區塊鏈的分布式人工智能網絡。這種新的合作關系可能會帶來最安全、可升級、可受審查的區塊鏈人工智能基礎設施。對于SingularityNET,這種合作關系為其人工智能網絡創建了可伸縮性、可訪問性和安全性。這種關系也有助于兩家公司實現各自強大技術的共同目標。對于Nexus來說,該合作關系為部署其3D區塊鏈結構以及在其網絡層面上探索AI應用程序提供了寶貴的用例。[2018/2/7]
您可對具備bp屬性的任意對象調用print(module.bp.code),結果將輸出一段Python解釋器代碼。
fromboa.compilerimportCompiler
module=Compiler.load
(‘./boa/tests/src/AddTest1.py’).default
print(module.bp.code)
LOAD_CONST
LOAD_CONST‘Main’
MAKE_FUNCTION0
STORE_NAMEMain
LOAD_CONSTNone
RETURN_VALUE
對可執行項進行處理與標記化后,便會生成虛擬機標記集,虛擬機標記雖與byteplay3標記相類似,但仍存在顯著區別。這些標記均包含在該模塊的all_vm_tokens屬性中。
您可調用module.to_s()來查看該程序,因為該程序已根據NEO虛擬機的特點進行了標記化。
>>>module.to_s()
LOAD_FAST?
LOAD_CONST
BINARY_MULTIPL??
STORE_FAST?
LOAD_FAST?
LOAD_CONST?
BINARY_ADD????
LOAD_FAST
LOAD_CONST
BINARY_TRUE_DIVIDE
STORE_FAST?
LOAD_FAST?
LOAD_CONST?
BINARY_SUBTRACT
STORE_FAST
b''
LOAD_FAST
LOAD_FAST
BINARY_ADD????
LOAD_FAST?
BINARY_ADD
LOAD_FAST?
BINARY_ADD
NOP
15、add_method(method)
在模塊中添加方法如下:
Parameters:?method(boa.code.method.Method)——模塊中待添加的方法對象
返回值:顯示是否已添加該方法
返回值類型:布爾值
16、build()
將bp.code對象拆分成行,并合并多行,生成不同的項目。
17、link_methods()
關聯各方法地址
18、main
返回該模塊的默認方法
返回值:該模塊的默認方法
返回值類型:boa.code.method.Method
19、method_by_name(method_name)
在模塊的methods列表中查找方法名稱:parammethod_name:
待查找的方法名稱:typemethod_name:str
返回值:方法
返回值類型:boa.code.method.Method
20、module_path
返回該模塊的文件路徑
返回值:模塊路徑
返回值類型:str
21、orderered_methods
方法序列表
返回值:該模塊中的方法序列表
返回值類型:列表
22、process_action(lineset)
處理模塊中的動作,樣本如下,其目的類似于創建下列事件:
fromboa.blockchain.vm.Neo.ActionimportRegisterAction
#Registertheaction.
onRefund=RegisterAction(‘refund’,’to_address’,’amount’)
#Dispatchanaction.
onRefund(my_address,100)
參數:lineset(list)–包含應用程序調用注冊功能的行集
23、process_import(import_item)
處理該模塊中的導入語句
Parameters:?import_item(boa.code.items.Importsubclass)–
24、process_method(lineset)
處理包含byteplay3代碼對象的行集
參數:lineset(list)–需處理與添加的行集
25、process_smart_contract_app_registration(lineset)?
在智能合約中調用另一個智能合約時處理智能合約應用程序注冊事宜:
fromboa.blockchain.vm.Neo.AppimportRegisterAppCall
#registerthecontract
otherContract=RegisterAppCall(‘contract_hash’,’param1′,’param2′)
#callthecontract
result=otherContract(a,b)
參數:lineset(list)–包含應用程序調用注冊功能的行集
26、split_lines()
將模塊中的行集拆分成可編譯的對象集
27、to_s()
該方法的目的在于以可讀/標記化的格式打印可執行項的輸出值,樣本如下:
>>>fromboa.compilerimportCompiler
>>>module=Compiler.
load('./boa/tests/src/LambdaTest.py').default
>>>module.write()
>>>module.to_s()
LOAD_CONST
STORE_FAST
LOAD_FAST
CALL_FUNCTION?Main..
q_1
STORE_FAST
b''
m??
NOP?
RETURN_VALUE??
b''?
LOAD_FAST?x?
LOAD_CONST?
BINARY_ADD??
NOP????
RETURN_VALUE?
28、tokenize()
將boa.code.pytoken.PyToken對象集轉化為boa.code.vmtoken.VMToken對象。
29、total_lines
獲取該方法的總行數
返回值:總行數
返回值類型:int
30、total_module_variables
獲取局部變量總數
返回值:該模塊中的變量總數
返回值類型:int
31、vm_tokens
返回該方法中的虛擬機標記列表
返回值:該方法中的虛擬機標記列表
返回值類型:列表
32、write()
將標記器當前的狀態寫為字節串
返回值:當前標記器的字節串
返回值類型:字節
原文鏈接:https://github.com/localhuman/neo-python
往期精彩內容
NEXT社區小課堂|第五課:NEO-共識算法dBFT源碼解析
NEXT社區小課堂|第八課:如果往錯誤的NEO地址轉賬會發生什么
NEXT社區小課堂|第十課:如何正確理解NEO平臺上的GAS
NEXT社區小課堂|第十一課:NEO中數字的表達和運算
??
聯系我們?
微博:https://weibo.com/u/6724929880
官網:https://neonext.club/
QQ群:612334080
電報:https://t.me/neonextop
twitter:https://twitter.com/NE0NEXT
關注NEONEXT官方公眾號
獲取更多一手社區資訊
6月8日,加密貨幣分析師WillyWoo在推特上回應網友質疑加密貨幣僅僅只是投機而無真實效用時表示,比特幣的核心功能是價值儲存,而投機是SoV的基礎.
1900/1/1 0:00:00據支付寶方面透露,其區塊鏈技術已經落地40余個場景中,其中長三角占比超過一半。城市之間的地鐵票務結算可實時完成,區塊鏈記載了用戶所有跨城交易且不可篡改.
1900/1/1 0:00:00喜歡看動漫的小伙伴都知道,火影忍者里面的主角鳴人靠著“嘴遁”滅了很多Boss,可見說話的藝術是多么的強大.
1900/1/1 0:00:00火星財經APP一線報道,火星財經及共識實驗室發起人王峰今日就外界對孫宇晨的諸多爭議發表評論,表示自己依然支持孫宇晨.
1900/1/1 0:00:00進入2019年以來,行業出現各種新型玩法,例如IEO、模式幣、共振幣,最終都草草收場。幣圈資金盤橫行,但終歸是一場零和游戲,小部分投資者嘗到短暫的甜頭,大部分投資者為這場瘋狂買單.
1900/1/1 0:00:006月2日,ETC價格強勢拉升,單日漲逾11%,創年內新高。不過僅僅在一天之后,以BTC為代表的數字貨幣市場出現快速跳水,BTC在兩天內跌逾800美元,此前積累了至少一周之久的上漲幅度在兩天內即遭.
1900/1/1 0:00:00