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__
纽约州总检察长禁止Nexo等2家加密借贷平台在该州运营:10月19日消息,纽约州总检察长Letitia James称她已下令两家加密借贷平台禁止在该州运营,并已向其他三家平台致函,询问运营情况。James未说明是哪些公司,但Nexo发表声明称已收到勒令停止函。另据知情人士透露,Celsius Network是收到询问函的公司之一。James在周一的新闻稿中表示:加密借贷产品完全属于《马丁法案》中规定的证券范畴,它们必须在总检察长办公室进行注册。Nexo联合创始人Antoni Trenchev发表声明称,该公司并未在纽约州提供贷款或交易所产品,因此出具勒令停止函毫无意义。他表示总检察长显然弄错了收信人。(彭博社)[2021/10/19 20:38:44]
#已经根据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')
Bitfinex宣布上架Nexo,将于7月7日17:00开放交易:据官方公告,Bitfinex宣布上架Nexo (NEXO)。NEXO的存款业务现已开放,并将于7月7日17:00开放NEXO/USD、NEXO/USDT、NEXO/BTC交易。[2021/7/5 0:28:14]
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文件
参数:path–Python文件的编译路径
返回值:编译器实例
用途:通过下述程序返回编译器对象进行检查
fromboa.compiler?import?Compilercompiler?=?Compiler.load(‘path/to/your/file.py’)
CoinEx上线KUN:CoinEx公告消息,CoinEx将于2020年12月2日16:00(UTC+8)上线KUN,同时上线“充值瓜分10,000枚KUN”、“净买入瓜分30,000枚KUN”、“持仓CET瓜分10,000枚KUN”三重福利活动。
据了解,QIAN是?种稳定币协议,?户可以通过向协议注?加密资产(如ETH、 HBTC、WBTC、美元稳定币、主流交易所平台币等)并锁定,以铸造 QIAN 协议中的稳定币 。
KUN是稳定币QUSD的治理代币,用于对QIAN生态治理投票和维持QUSD价格稳定。[2020/12/2 22:53:28]
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
下文将介绍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。
Bitfinex将于7月10日上线Dogecoin:据官方公告,Bitfinex将上线Dogecoin。Dogecoin将以MDOGE(MegaDogecoin)上线,转换率为100万。1 MDOGE = 0.000001狗币。MDOGE的存款业务将于7月10日15:30开放,而交易和取款业务将在在7月10日18:00开始。MDOGE将与美元(DOG / USD),Tether(DOG / UST)和比特币(DOG / BTC)进行交易。[2020/7/9]
调用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
print(module.bp.code)
LOAD_CONST
LOAD_CONST‘Main’
MAKE_FUNCTION0
STORE_NAMEMain
LOAD_CONSTNone
RETURN_VALUE
对可执行项进行处理与标记化后,便会生成虚拟机标记集,虚拟机标记虽与byteplay3标记相类似,但仍存在显著区别。这些标记均包含在该模块的all_vm_tokens属性中。
动态 | Bitfinex用户提现仍需数周:据CoinDesk报道,10月15日,加密货币交易所Bitfinex公布了一则声明,称所有加密货币和法币的提现都已恢复且一直在处理,没有丝毫的干扰。所有法币(美元,英镑,日元,欧元)的提现正在处理,而且一如既往。正如CoinDesk当时报道的那样,一些客户在社交媒体上抱怨他们的加密货币和法币提现被推迟了。仅仅三个多星期后,用户仍然表示,尽管等待漫长,他们还是没有收到自己的资金。 CoinDesk在两天内向Bitfinex发送了多条评论请求,但未收到对问题的回复。客户Jamie West周三告诉CoinDesk,在过去了17个工作日后,他还在等待自己的资金,Bitfinex还为24小时快速服务收取309英镑的费用。CoinDesk还采访了其他七位Bitfinex客户,他们已经等了几周才收到提现,或已放弃并取消提现,这些用户持有的金额通常为数万美元。[2018/11/10]
您可调用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官方公众号
获取更多一手社区资讯
据TheBlock消息,Block.one联合创始人兼首席技术官DanLarimer在接受采访时表示,该公司在开发区块链社交应用Voice上已经投资1.5亿美元.
1900/1/1 0:00:00链闻ChainNews:本文针对XVG的数字货币币价翻涨的攻击事件进行分析,攻击者主要利用自己算力的优势伪造时间戳,使得自己挖矿难度不断降低,从而保持自己最长链的优势.
1900/1/1 0:00:00文|武旭升编辑|文刀中文名为区块链基石的Arcblock陷入了一场投资者的对撕中,一方是ABT的早期投资者及亏损者,另一方是项目的“忠实”拥趸。引起双方争论的焦点是ABT价格的大起大落.
1900/1/1 0:00:00据Newsbtc6月5日报道,总部位于库比蒂诺的科技巨头苹果公司于6月4日举行了一年一度的全球开发者大会(WWDC),会上发布了最新的产品阵容,虽然新产品首次向公众发布.
1900/1/1 0:00:00喜欢看动漫的小伙伴都知道,火影忍者里面的主角鸣人靠着“嘴遁”灭了很多Boss,可见说话的艺术是多么的强大.
1900/1/1 0:00:00尊敬的LBank用户:在LBank于?2019.5.2016:00-2019.6.1916:00期间举办的期权交易大赛.
1900/1/1 0:00:00