链资讯 链资讯
Ctrl+D收藏链资讯
首页 > 比特币 > 正文

COM:NEXT社区小课堂 | 第十三课:NEO Python编译器介绍(一)_ZYTH

作者:

时间:

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__

Nike旗下RTFKT修改一CloneX元素为詹姆斯相关唯一属性:9月9日消息,据OpenSea数据显示,CLONE X - X TAKASHI MURAKAMI系列NFT创作母公司RTFKT已于近期将其CloneX #7968 NFT作品嘴部特征改动为“LBJ Beard”,头部特征改动为“CHOSEN 1 CRWN”,两个新特征均为唯一属性(1 of 1)。

据悉,嘴部特征“LBJ Beard”为“詹姆斯胡子”,头部特征“CHOSEN 1 CRWN”取自詹姆斯个人“皇冠”Logo及其背部纹身“CHOSEN 1”。而加密时尚潮牌RTFKT于2021年12月被耐克收购,且耐克于2015年与詹姆斯签有终身合同,故市场推测本次改动与后续相关合作有关。[2022/9/9 13:19:12]

#已经根据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')

村上隆携手RTFKT Studios和Crown Collection推出限量版CloneX Chains:5月2日消息,日本著名艺术家村上隆携手 RTFKT Studios 和 Crown Collection 推出 CloneX Chains。

据悉,Crown Collection已经为村上隆和RTFKT 团队制作了四个限量版CloneX Chains,该系列艺术品锁扣上有村上隆标志性的花卉图案,另一端是采用动画村上隆签名艺术风格的RTFKT标志。(nftevening)[2022/5/2 2:45:47]

4、许可证

·开源MIT?

·主作者为localhuman

5、boa.compiler.Compiler

下文将介绍Compiler的具体实现细则。

6、classboa.compiler.Compiler

主编译器接口类

通过下列程序加载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文件

Cardano前架构总监John Woods加入Algorand担任首席技术官:金色财经消息,Cardano前架构总监John Woods加入Algorand担任首席技术官。作为Algorand基金会的首席技术官,Woods将监督基础设施开发、技术合作伙伴关系以及开发人员工具、教育和参与。在加入Algorand基金会之前,Woods曾在Input Output Global担任Cardano架构总监,该公司是一家运营Cardano区块链的公司。此前,他曾在Informatica和ConsenSys担任高级架构师职务。[2022/7/7 1:58:15]

参数:path–Python文件的编译路径

返回值:编译器实例

用途:通过下述程序返回编译器对象进行检查

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)

通过指定路径将输出数据存储至文件系统

参数:

·data——待写入磁盘的数据字节串

·path——文件写入路径

13、boa.code.module.Module

Bitfinex首席技术官:1.2亿枚的USDT转账系链上代币切换:Whale Alert数据显示,北京时间8月11日20:40,1.2亿枚USDT从Bitfinex转入Tether Treasury地址,交易哈希为:3a7dc9fcc778903cd6b90e1d58f41363ecd079ebea699c24f02d6c4e0fd4d617。

Bitfinex首席技术官Paolo Ardoino就此发推称,本次操作为链上代币切换,由TRC-20切换至ERC-20。[2020/8/11]

下文将介绍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

module=Compiler.load

(‘./boa/tests/src/AddTest1.py’).default

动态 | Bitfinex将在以太坊伊斯坦布尔升级前暂停ETH及ERC20代币充提业务:据官方公告,Bitfinex将在以太坊伊斯坦布尔升级前的几个小时将暂停ETH及ERC20代币充值、提现业务,交易不受影响。[2019/12/6]

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官方公众号

获取更多一手社区资讯

标签:COMLOADYTHHONO‘Community ChainZloadrZYTHhong kong floki

比特币热门资讯
稳定币:关于Omni USDT,以太坊 USDT 和 波场 USDT的一切,都在这儿了_比特币

提到USDT,很多人只在交易所买过,只知道它是入场的币种之一,由Tether公司发行的基于美元1:1挂钩的稳定币,对USDT并没有再多的了解。那么今天我们就来科普下USDT的三种形态.

莱特币:“我创建莱特币主要是好玩,中本聪可能真的去世了”,莱特币创始人爆猛料_LEE

在加密生态系统的混战中,莱特币无疑保持了目前表现最好的竞争币之一的地位。备受争议的莱特币创造者查理·李(CharlieLee)罕见地出现在YouTube视频采访中,讨论了莱特币目前的处境和未来计.

LOAD:CNYT福袋 VIP会员!Coinw开启端午特别活动_onekeydownloads

亲爱的Coinw用户:Coinw将于今晚22:00开启端午特别活动。活动期间,Coinw交易用户最高可得6700CNYT福袋,充值用户可获得不同等级的VIP会员.

区块链:小葱专访孙宇晨|今年KPI目标是捐一个亿,3000多万拍下午餐算是帮助完成目标_区块链币圈是什么意思

波场创始人孙宇晨457万美元拍下巴菲特午餐消息传出后,引发市场“爆炸性”讨论,小葱就大家关注的主要问题对事件主角孙宇晨进行了一次专访.

BTC:6月9日早间行情:或将打破上方阻力,迎来一波上行发力_SMAC

假期最后一天走势再次出现了回调征兆,昨晚收线后走势转为下行,最低去到7800下方,不过天亮前及时回头,价格重新回到7900上方,夜间出现这样的走势大部分人只能抓住一次空单机会,不过没有关系.

GATE:分析 :攻击者控制了GateHub数据库里的部分账号API权限,不过用户私钥是安全的_FUTC

慢雾安全团队通过链上行为分析可以得知:攻击者最早于05/29/201912:14UTC时间通过CoinPayments创建并激活了攻击者的第一个“攻击者账号”.