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__
Hypersonic Laboratories完成350万美元pre-seed轮融资,SamsungNext等参投:9月15日消息,元宇宙平台HELIX背后开发公司Hypersonic Laboratories宣布完成350万美元pre-seed轮融资,Samsung Next、GSR、Third Kind、以及包括Alex Chung(Giphy创始人)和Scott Belsky(Behance创始人)在内的几位天使投资人参投。H.E.L.I.X.元宇宙全称是Hyper Expansive Life like Interoperable eXperience,该平台计划于10月推出“创始人通行证”(Founder Pass),此外他们已经在以太坊区块链上铸造了5000枚Founder Pass NFT并计划在9月下旬发行。(digitaljournal)[2022/9/15 6:58:30]
#已经根据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')
CoinEx入驻慢雾区并发布“安全漏洞与威胁情报赏金计划“:2021年5月14日,为了进一步保障用户资产安全,提高平台安全风控等级,CoinEx 入驻慢雾区,发布”安全漏洞与威胁情报赏金计划“,严重漏洞最高奖励 5000 USDT。
CoinEx 成立于 2017 年 12 月,是一家面向全球的数字货币交易平台。CoinEx 致力于为全球用户打造最安全、稳定、高效的数字货币交易平台。平台支持中/英/日/韩/俄等多国语言,为全球超过一百个国家和地区提供安全、可信赖的数字资产交易服务。[2021/5/14 22:02:30]
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文件
Bitfinex宣布下线CS,12月9日19:00暂停交易:12月8日,Bitfinex官方宣布将下线Credits(CS),将于12月9日19:00暂停CS交易和存款,提现截止时间为12月29日19:00。[2020/12/8 14:37:01]
参数: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
下文将介绍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将从8月20日18:00开始下线21组交易对:Bitfinex将从8月20日18:00开始下线21组交易对,以优化用户交易体验。具体交易对为:1.USDK相关交易对:USK/BTC、USK/ETH、USK/EOS、USK/UST;2.BTC相关交易对:Aion(AIO/BTC)、BnkToTheFuture(BFT/BTC)、Nectar(NEC/BTC)、CallistoNetwork(CLO/BTC)、OKEX(OKB/BTC);3.ETH相关交易对:ParkinGO(GOT/ETH)、Digix(DGX/ETH)、Cindicator(CND/ETH)、TimeNewBank(TNB/ETH)、Augur(REP/ETH)、Status(SNT/ETH);4.DAI相关交易对:MakerDAO(MKR/DAI);5.日元相关交易对:Tron(TRX/JPY)。官方提醒称,以上多涉及的代币尚未退市,仍可在Bitfinex上交易。[2020/8/17]
调用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
动态 | 8i及区块链金融服务公司Diginex将就合并事项召开股东大会:金色财经报道,投资控股公司8i Enterprises Acquisition Corp.和区块链金融服务及技术公司Diginex已安排召开股东大会,以考虑拟议的业务合并。特别会议将于3月20日在纽约举行。两家公司最初于去年7月宣布了合并计划。一旦交易完成,Diginex据称将成为首家在纳斯达克上市的完全多元化公司。与8i的反向合并交易包括债务在内共计2.76亿美元。据报道,Diginex股东将获得2000万股8i的普通股,每股价值10美元。[2020/2/25]
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官方公众号
获取更多一手社区资讯
引言 我在推特上发起了一次调查,发现大家似乎对闪电网络的局限性都很感兴趣——究竟闪电网络能做些什么,又或做不到什么。今天我就来和大家理清一下闪电网络的能力范围.
据TokenGazer数据显示,BTC价格早间从$8500下挫至$7900左右。市场对此有较多解读,其中呼声较高的是来自Coinbase的砸盘.
在Linux上查看文件权限时,有时你会看到的不仅仅是普通的r、w、x和-。如何更清晰地了解这些字符试图告诉你什么以及这些权限如何工作?--SandraHenry-stocker在Linux上查看.
尊敬的BTB.io用户:币虎基金会将基于自己在区块链领域数年强大的技术开发实力、丰富的项目运营经验、雄厚的资本支持开发独立的BHEC主网.
加密数字货币是一个不断发展的行业,它带来了许多有趣和创新的想法,进而推动着它不停的向前发展。近期的一场竞赛促使一些设计师尝试将一个比特币挖矿设施改造成一个有趣的地方——一座摩天大楼水上公园.
关于Gate.ioStartup打折福利计划为回馈平台用户,Gate.io上线“Startup主流项目打折福利计划”,在Startup区定期上线区块链主流项目的大幅折扣认购.