以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > UNI > Info

LOAD:NEXT社區小課堂 | 第十三課:NEO Python編譯器介紹(一)

Author:

Time:1900/1/1 0:00:00

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__

Tether首席技術官:Bitfinex擁有最大的以太坊錢包:Tether首席技術官Paolo Ardoino轉發“Bitfinex將支持以太坊2.0遷移”的推文,并表示,Bitfinex擁有最大的以太坊錢包。進行早期支持的示范是很重要的。[2020/11/28 22:26:53]

#已經根據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

主編譯器接口類

Monex集團CEO:建議首次投資者購買比特幣、黃金和美國股票:日本加密貨幣交易所Coincheck母公司Monex集團社長松本大在一篇博客文章中表示,建議首次投資者遠離傳統的流動性資產,轉向加密和貴金屬。松本大認為,為應對冠狀病大流行帶來的金融影響,各國央行已經比2008年金融危機期間印鈔更多。他說,冠狀病大流行將不可避免地導致通貨膨脹。松本大表示,這可能會導致美元和日元等法定貨幣的信譽下降,導致投資者開始購買黃金和“數字黃金”,即比特幣。他表示,價格上漲也可能起到一定作用。大規模的量化寬松政策可能會導致法定貨幣儲蓄的價值下降。因此,黃金和鉑金等既稀有又有限的貴金屬,需求將會上升。比特幣也有嚴格的發行和供應限制,它擁有數字黃金的所有資產特征——這也是投資者將繼續涌向比特幣的原因之一。不過松本大認為,股市投資仍有用武之地。他表示,黃金和比特幣市場“太小”,不足以滿足全球主流投資者的需求,并建議首次投資者考慮購買美國股票。(Cryptonews)[2020/5/14]

通過下列程序加載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文件的編譯路徑

聲音 | Charlie Shrem:Mt.Gox是第一個創造“債務代幣”的公司而不是Bitfinex:據AMBCrypto消息, 比特幣企業家Charlie Shrem討論了Mt. Gox的故事。當85萬BTC失蹤或被盜時,Mt. Gox面臨著無法預料的阻礙。Shrem強調,當時該交易所有兩種比特幣可供選擇;一個是原始比特幣(BTC),另一個是Mt.Gox的比特幣,也就是“你可以在Mt.Gox系統中交易的假比特幣”。這導致了購買Gox BTC的二級市場的形成,該市場“本質上是在Mt.Gox突然崩潰之前不能從該交易所轉移走的比特幣”。 Shrem聲稱,即使Mt. Gox突然崩潰,市場也創造了自己的債務代幣,盡管Bitfinex聲稱是第一個發行旨在償還債務的代幣。Charlie Shrem注意到Mt.Gox的債權人Josh Jones創造了一個系統來把Mt.Gox BTC換成真正的BTC。當時的加密用戶可以以折扣價將Gox BTC換成真正的BTC,以擺脫黑客攻擊后留下的爛攤子。[2019/5/20]

返回值:編譯器實例

用途:通過下述程序返回編譯器對象進行檢查

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()

返回值:已編譯的Python程序的字節串

12、staticwrite_file(data,path)

聲音 | 趙東:網上Bitfinex ICO白皮書是山寨的,真正的還未發布:今日,一份“Bitfinex ICO白皮書”在社區傳播,根據該白皮書,Bitfinex將在6月2日啟動ICO,并且發行總量為2億的Bitfinex Coin(BFX)。根據趙東剛剛表示,“大家看到的白皮書是山寨的,真正的白皮書還沒有放出來。token名稱不是BFX,而是LEO,募資接受USDT,而是不是BTC和ETH,總量仍就是10億。[2019/5/4]

通過指定路徑將輸出數據存儲至文件系統

參數:

·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解釋器中顯示的指令集。

您可對具備bp屬性的任意對象調用print(module.bp.code),結果將輸出一段Python解釋器代碼。

fromboa.compilerimportCompiler

Tether昨夜向Bitfinex賬戶打入1億枚USDT,未實質性拉漲BTC:據Chaindigg數據顯示,USDT昨日晚間23:26:50出現一筆大額交易。1NTMakcgVwQpMdGxRQnFKyb3G1FAJysSfz地址一次性轉出了1億枚USDT到1KYiKJEfdJtap9QX2v9BXJMpz2SfU4pgZw這一地址。這兩個錢包地址分為屬于Tether Treasury和Bitfinex。轉賬發生后1h內,BTC小幅跳漲約50美元,但隨后陷入深跌,一度觸及6500美元。[2018/6/16]

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官方公眾號

獲取更多一手社區資訊

Tags:LOACOMLOADMPIcloak幣最新消息COMPLUS NETWORKHotelLoadRise Of Empire

UNI
DEFI:DeFi系列第一篇:去中心化借貸丨幣安研究院

本文翻譯自6月6日由幣安研究院發布的報告,部分內容略有刪改。 報告原文: https://info.binance.com/en/research/marketresearch/defi-1.h.

1900/1/1 0:00:00
LBank:PHV 公示:「PHV期權補償基金」6.5 虧損補償數據

為了慶祝LBank期權交易火熱上線,并拓展PHV的交易場景。我們啟動了預算共20BTC的「PHV期權補償基金」激勵補償活動.

1900/1/1 0:00:00
BAN:FBC 公示:「FBC 期權補償基金」6.5 虧損補償數據

為了慶祝LBank期權交易火熱上線,并拓展FBC的交易場景。我們啟動了預算共1,000,000RMB的「FBC啟動期權虧損豁免權!100萬補償金邀你參加LBank期權交易」.

1900/1/1 0:00:00
GAME:EOS表現不盡人意,隨大盤沖高回落

1924年6月8日,人類首次向珠穆朗瑪峰沖擊未果。英國登山家喬治·馬洛里和安德魯·歐文在嘗試登頂珠穆朗瑪峰的途中遇難.

1900/1/1 0:00:00
ITM:閃電網絡不斷優化,數字貨幣不漲反跌

據研究報告顯示,去中心化金融服務已經發展成為以太坊上的主要應用之一,大多數DeFi協議都是在以太坊上構建的,截至6月5日,以以太坊為基礎的DeFi應用程序的抵押品總價值超過5億美元.

1900/1/1 0:00:00
BOX:年化收益超184% 這款產品挨過了幣圈寒冬

在曾經長達一年多的幣圈熊市之中,有很多數字資產產品沒能堅守住自己的戰場,敗下陣來,陸續退場,但是仍有這么一款產品挨過了寒冬.

1900/1/1 0:00:00
ads