VNT:打造开发者友好的下一代公链基础设施
文字|唐仙女座科技首席执行官
编辑|阿里八卦
经朋友推荐,我参加了VNT的全球发展竞赛。VNT全球开发大赛由区块链底层基础设施VNT链和云翔区块链以及众多知名大学和研究机构联合举办,并邀请全球开发者参与。
VNT是国内新一代公链,其架构借鉴了以太坊、EOS等主流公链。同时,使用Web Assembly作为虚拟机的底层。有关详细信息,请参见VNT白皮书。在这里,我将重点介绍开发的经验。
c语言智能合约
以太坊的智能合约被称为区块链2.0的里程碑,它使用Solidity编程语言并在以太坊的虚拟机EVM上运行。但是固体语言有一些问题:
1,局限性:接触该语言的程序员较少,Solidity只开放了部分接口,因此其表达能力有限;
2.安全性:根据研究论文《大规模发现贪婪、挥霍和自杀合同》,智能合同有87%的可能性存在漏洞。
VNT链采用Web Assembly(WASM)实现智能合约语言,这是苹果、谷歌和微软支持的语言标准。WASM产生了一种中间语言:字节码,它可以被编译成机器码并由解释器直接执行。
理论上,任何高级语言都可以被编译成WASM字节码程序,只要有合适的编译器支持。这样可以降低开发者的学习成本。此外,WASM还具有以下优势:
1,高性能:精简指令,程序执行过程中性能优越;
2、存储成本低:与文本格式相比,二进制编码文本占用的存储空间更小;
3.多语言支持:用户可以用C/C++/RUST编写智能合约,并将其编译成WASM格式的字节码。
VNT链还将在以下方面优化WASM,使其更加安全和可用:
1,改进原生WASM中多线程、浮点数和异常处理导致的计算不确定性的设计,以确保计算的确定性;
2.添加Gas机制以解决智能合约中的停机问题;
3.提供沙盒运行环境,实现资源隔离,保证系统的安全性;
4.支持正式验证以确保合同安全。
基于WASM语言的应用和优化,VNT链的智能合约模块具有卓越的兼容性和性能,以及安全性和灵活性。
特别是VNT链首创的形式化自验证能力编程语言将语言本身的类型体系与数学定理体系相结合,将语言的类型验证与形式化验证相结合,为智能合约的形式化安全验证提供了有力支持。
VNT链将吸引更多的开发人员,并努力通过安全、可靠和面向公众的智能合约设计为分布式经济赋能。与以太坊不同的是,VNT目前使用高级语言C作为智能合约的编程语言,具有更强的表达能力和第三方生态。
在VNT合约中,关键字key用于修改状态变量以指示区块链中的持久数据。例如,您可以使用以下代码来描述一个数据结构,以记录一个地址中有多少个令牌。
关键结构{
地址addr
uint256 u256
} s1= { Address(“0x aaaaa11“),U256(100000000011)};
与Solidity类似,VNT的合约也有一个可支付功能,表明它是否可以接受来自交易的原始代币。通过在函数名前添加一个$符号,它变得更加简洁和动态。
智能合约中最重要的设计是合约之间的调用。VNT设计了一个调用机制来支持跨契约访问,访问的对象是契约中可以从外部访问的函数。通过这种设计,可以实现嵌套级别之间的契约之间的通信。
//合约a,以前叫。
易变的
uint32测试(int32 var 1,string var 2 ){
...
}
//合约b,调用合约a。
//声明调用
调用uint 32测试(调用params params,int 32 var 1,【比特币是什么意思】string var 2);
易变的
uint 32 test call(){
call params prams = { Address(“0x AAAA“),U256(10000),100000 };
uint 32 RES = test(prams,1,“string“);
...
}
官方还提供了猜谜游戏的教程。
瓶子命令行工具
谈完合约语言,我们再来看看合约的编译和部署。在这里,政府提供了一套Go语言的命令行工具,它们在效果上类似于eosio.cdt,在语法上类似于Truffle。
Bottle提供的命令行参数如下:
名称:
瓶子-瓶子命令行界面
版权所有20 18-20 19瓶子作者
用法:
bottle【全局选项】命令【命令选项】【参数1 1...]
版本:
0.6.0-beta- 1e52fa2f
命令:
构建构建合同
编译编译合同源文件
压缩压缩wasm和abi文件
将解压缩文件解压缩为wasm和abi文件
提示【央行数字货币物联网】合约提示
init初始化dapp项目
迁移运行迁移以部署合同
帮助,h显示命令列表或某个命令的帮助
路径选项:
-特定于合同代码路径的代码值
-包括合同要求的特定头文件目录
-输出特定的输出目录路径
-文件值特定于要解压缩的压缩文件路径
- abi值特定合同所需的abi路径
- wasm值特定的wasm路径
迁移选项:
-重置从头开始运行所有迁移,而不是从上次完成的迁移开始运行
特定迁移的-f值运行合同。该数字是指迁移文件的前缀(默认值:0)
-t值运行合约【比特币开发】到特定迁移。该编号引用迁移文件的前缀(默认值为0)。
- network value指定要使用的网络,保存特定于该网络的工件。配置中必须存在网络名称
-verbose-记录bottle和VNTChain客户端之间的通信
全局选项:
-救命-救命
将contract部署到Testnet或Mainnet的方法类似于使用Truffle。
//部署不带构造函数参数的单个协定
deployer . deploy(A);
//使用构造函数参数部署单个协定
deployer . deploy(A,arg 1,arg2...);
//如果已部署此协定,则不要部署它
deployer . deploy(A,{ overwrite:false });
//为部署设置最大gas量和from地址
【gdc数字货币】部署者。部署(a,{gas: 46 12388,from:“0x。。。“});
//外部依赖关系示例:
//
//对于这个示例,当我们部署到
//实时网络,但不适用于测试和开发等任何其他网络。
//当我们部署到实时网络时,我们希望它使用该地址,但在
//测试和开发我们需要部署自己的版本。而不是写作
//一堆条件句,我们可以简单用覆盖键。
deployer . deploy(some dependency,{ overwrite:false });
因此,您还可以使用该工具进行调试和单元测试。
var ERC 20 = artifacts . require(“https://www . jiemian . com/contracts/ERC 20 . c“)
module . exports = function(deployer,a ){
deployer . deploy(ERC 20、“1000000“、“比特币“、“BTC“)。然后(函数(实例){
部署=实例;
返回部署。GetTotalSupply()
}).然后(function(total supply ){
console . log(“total supply“,total supply . tostring());
返回部署。get decimals();
}).然后(函数(小数){
console . log(“decimals“,decimals . tostring());
返回部署。GetTokenName();
}).然后(函数(令牌名){
console.log(“令牌名”,token name);
返回部署。geta mount(“0x122369 f 04 f 32269598789998 de 33 e 3d 56 e2c 507 a“)
}).然后(功能(平衡){
console . log(“balance“,balance . tostring());
})
};
总结
目前,VNT链结合了公链的分布式价值流特征和联盟链的商业属性,构建了由公链(哈勃网络)、伽利略网络和开普勒路线组成的聚合链架构。最近完成了主网上线,期望在上面孵化一种新的区块链应用程序。
俗话说,工欲善其事,必先利其器。在拥有这些基础设施后,开发人员需要认真讨论区块链的核心规则、逻辑、公平性和概率,其中哪些应该上传,如何上传,以及如何建立属于Web3.0时代的商业模式。
开发人员需要思考如何使用公有链为自己的应用程序赋能,并使用云计算平台构建测试环境。最终形成一个不仅仅是赌博和游戏,而是更多“刚需”场景和真正商业适用的底层公链。
这些都是非常迫切的问题,深入探讨非常有利于行业的长远发展。
注册有任何问题请添加 微信:MVIP619 拉你进入群
打开微信扫一扫
添加客服
进入交流群
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。