维基链智能合约知多少
暮然柒
发表于 2023-1-6 03:55:41
319
0
0
实现合约框架的方式
作为承载DApp的最重要基石,维基链智能合约框架采用Lua语言作为合约的编码语言。Lua语言具有轻量、可拓展等特性,在游戏开发、独立应用脚本和数据库插件方面都已被大量地应用。维基链核心功能均由C/C开发,而Lua代码可以很容易的被C/C 代码调用,也可以反过来调用C/C++的函数。所以这款学习成本低、兼容性好又具备高性能和安全的语言是构建智能合约框架很好的编程语言。- l# W* v& a8 s% [/ o$ P
框架使用的Lua5.3版本的虚拟机,在虚拟机层设计了一个mylib函数库以开放接口给合约层调用,其遵循了Lua标准函数库的设计方式。与常见的Lua虚拟机不同,智能合约的代码会在链上所有的节点包括矿工节点和观察者节点上执行,因此智能合约虚拟机不支持大部分Lua标准函数库:
*对math库中的random函数作了调整以保证同一合约每次执行都能获得一致的随机结果
维基链智能合约框架在具备区块链特性的基础上,还有以下特点:内部货币系统、去中心化部署及运行、代码风格自由且透明,通过JsonRpc接口或区块浏览器还可以查看每笔合约交易的输入、输出信息。
mylib库的功能: p+ X# c* ^: C3 |- y2 i
mylib库是合约与外部环境交互的唯一接口,包含计算、验证、查询、资产管理及数据存储等基础功能,主要由以下这些接口实现:9 g+ |. [( Z* N+ K+ a4 A& l7 v) ?
具体的使用方法,大家可以在维基链开发者中心文档(见文末)内查询到。9 p) l' [; \! e8 T* y+ j
如何开发智能合约8 I# V& d/ z& H
开始开发前,你需要学习Lua的基本语法,钱包节点的搭建和JsonRpc的使用以及mylib的各函数的使用方式,还需要注意智能合约框架存在以下限制:) m1 }, v K! a$ Z! ?
a. 每个合约代码需要在合约代码头部引入mylib库;8 j. w: P+ C/ n. `1 S) q" q2 ~
b. 合约代码总长度限制在64KB;' x3 @$ ^! N( Z
c. 合约参数总长度限制在4096字节;9 R" C$ E' e. C: D% \1 v3 f
d. 合约数据库存储的Key和Value长度均限制在500字节。
对于合约参数,在虚拟机启动后会以Byte数组(表)的方式存放在全局变量contract中。目前的最佳实践是将合约参数进行类似Protobuf方式的编码,你可以参考在开发者文档中心里WRC20代币的智能合约。不管是以何种方式传递参数给智能合约,你都需要自行设计编码工具和合约代码内的解码函数。
现在,维基链官方提供了在线合约编辑器,你可以很方便地在浏览器中开发、调试和发布你的智能合约。社区也有一些编解码的工具和优秀的合约模板库供使用参考。4 x6 l$ M% Z# P$ D, D. L: e
优化升级
维基链核心开发团队仍持续地优化智能合约框架,将Gas计算的范围和价格调整的更合理,丰富链上mylib库的功能,增加链下的智能合约调试开发工具,也有对其他的语言如Solidity和WebAsambly进行兼容的计划。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
成为第一个吐槽的人