使用Foundry,感受快,rust对写合约的支持
source link: https://learnblockchain.cn/article/3502
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
使用Foundry,感受快,rust对写合约的支持
rust 版的合约开发工具Foundry入门
Foundry 是一个新出的rust写的合约开发框架
rust一直在改变编程界的格局,btc C语言开发,eth go主导,也有 rust 的eth
波卡链 直接rust,兴起跨链的生态。
不少web开发工具,打包也采用rust来加速,swc,deno,都是rust 开发。
现在rust 改造到了合约开发框架
快和安全,就是rust 优势吧。
在foundry中也体现出了这点。
foundry怎么开始玩呢,
首先安装rust 环境,这个我就不教了。
主要是,安装foundry,这一步特别慢,如果需要windows安装包,可以找我要
$ cargo install --git https://github.com/gakonst/foundry --bin forge --locked
###新建项目
$ mkdir n004
$ cd n004
$ forge init
成功后是这个样子,在windows上会出现,不自动下载ds-test的情况,自己下载再拷贝到这个lib目录下就可以
HelloWorld.sol,和test目录里面的文件是我自己改的。
HelloWorld.sol的内容如下:
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.10;
contract HelloWorld {
string private greeting;
uint256 public version = 0;
constructor(string memory _greeting) {
greeting = _greeting;
}
function greet() public view returns (string memory) {
return greeting;
}
function updateGreeting(string memory _greeting) public {
version += 1;
greeting = _greeting;
}
}
再src里面再建立一个test目录,里面添加测试用例就好了
一个最简单的例子是这样
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
import "ds-test/test.sol";
import "src/HelloWorld.sol";
contract HelloWorldTest is DSTest {
HelloWorld hello;
function setUp() public {
hello = new HelloWorld("Foundry is fast!");
}
function test1() public {
assertEq(hello.greet(), "Foundry is fast!");
}
function test2() public {
assertEq(hello.version(), 0);
hello.updateGreeting("Hello World");
assertEq(hello.version(), 1);
assertEq(hello.greet(), "Hello World");
}
}
有几点,要注意:
- 引入DSTest类,引入要测试的合约
- 测试类继承DSTest类,主要是为了使用DSTest的assertEq这些方法,更多的内容可以直接看
DSTest类的代码。 - new 就是部署合约
完成代码,就可以跑跑:
和harthat命令一样,开始测试
forge test
测试结果如下:
可以直接调用
emit 输出几个日志,
emit log_string("hello");
运行forge test 是不会有变化的,需要加参数 -vvvvvvvvvvvvvv
v越多日志越详细,很unix
如下:
如果需要安装依赖包,像这样
forge install openzeppelin/openzeppelin-contracts
在windows上不会成功,自己下载到lib目录就好
如果需要使用@openzeppelin这种import
打开foundry.toml文件 查看
[default]
src = 'src'
out = 'out'
libs = ['lib']
remappings = ['ds-test/=lib/ds-test/src/,'@openzeppelin=lib/openzeppelin-contracts/']
改好后像这样:
remappings = ['@ds-test=lib/ds-test/src/','@openzeppelin=lib/openzeppelin-contracts/']
还有个专门的build命令,就是只编译吧。
test命令是先build,再test。
abi 文件在out目录
好了,就这样 !
希望你玩得愉快,真的感觉到快了,我是觉得非常快了,上面编译forge特别慢。
这里可以下载编译好了的
https://github.com/gakonst/foundry/releases
一些项目的速度对比测试,基本都是快3倍以上
Project Forge DappTools Speedup
guni-lev 28.6s 2m36s 5.45x
solmate 6s 46s。 7.66x
geb。 11s 40s 3.63x
vaults 1.4s 5.5s 3.9x
参考
GitHub - gakonst/foundry: Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.
Getting Started With Forge — Wilson (mirror.xyz)
Getting Started with Forge — crisgarner.eth (mirror.xyz)
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
- 发表于 2022-01-29 18:01
- 阅读 ( 228 )
- 学分 ( 14 )
- 分类:智能合约
Recommend
-
114
website upgrading… 京ICP备1100...
-
91
MacBook Pro - @windbadboy - 1.屏幕确实很棒,比以前使用过的任何屏幕都来得清晰。但对一个需要一边看文档一边写 bug 的人来说,最好还是需要外接一个显示器。2.键盘需要适应,和机械键盘的反馈感是两种风格。不过一旦适应它的键程
-
13
Apple - @glacial - 本人是个程序员之前从来没接触过 macOs 系统 , 以前远远的看去只觉得很酷 系统 ui 很好看比 windows 好看多了 其次 好多人看开发效率上比 windows 快很多。想买但是很贵 一直舍
-
18
Apple - @KEYIIIII - 23 号首发拿到白色的 12,用了一天说下个人主观感受外观:比 11 轻薄了很多,单手使用不会累了;边框割手个人觉得还行;几个物理按键的键程短了一点需要适应信号:个人觉得信号大提升(基于电信
-
10
老的 iPhone 6s Plus 电池实在不行了,可 iPhone 12 要 10 月 23 号之后才能收到。这半个月先用安卓机次机皇 小米 10 替代下。正好也是个再次全面地体验安卓机的好机会。 本文写于 10月 19 日。 以下就说说我的一些感受,有安...
-
5
【精】低价钱,高享受,80后说说马3的使用感受 低价钱,高享受,80后说说马3的使用感受 本人文笔不咋,各位将就看
-
4
【精】浅谈17款的1.3T自尊款帝豪GL使用感受家用好车首页推荐 浅谈17款的1.3T自尊款帝豪GL使用感受 此...
-
5
普通爱好者的索尼相机使用感受和日常随拍 ...
-
4
【精】【爱车说车】--嘉际五万五千公里使用感受分享家用好车精选推荐 【爱车说车】--嘉际五万五千公里使用感受分享 ...
-
5
GTA VI:使用GTA V重新制作的预告片,Digital Foundry的分析显示为1440p和30 fps admin 2023年12月12日 10:51 一位粉丝使用侠盗猎车...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK