快捷搜索:  汽车  科技

rust怎么写窗口程序(使用Foundry感受快rust对写合约的支持)

rust怎么写窗口程序(使用Foundry感受快rust对写合约的支持)HelloWorld.sol,和test目录里面的文件是我自己改的。$ mkdir n004 $ cd n004 $ forge init 成功后是这个样子,在windows上会出现,不自动下载ds-test的情况,自己下载再拷贝到这个lib目录下就可以快和安全,就是rust 优势吧。在foundry中也体现出了这点。foundry怎么开始玩呢,首先安装rust 环境,这个我就不教了。主要是,安装foundry,这一步特别慢,如果需要windows安装包,可以找我要$ cargo install --git https://github.com/gakonst/foundry --bin forge --locked ###新建项目

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目录下就可以

rust怎么写窗口程序(使用Foundry感受快rust对写合约的支持)(1)

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"); } }

有几点,要注意:

  1. 引入DSTest类,引入要测试的合约
  2. 测试类继承DSTest类,主要是为了使用DSTest的assertEq这些方法,更多的内容可以直接看
    DSTest类的代码。
  3. new 就是部署合约

完成代码,就可以跑跑:

和harthat命令一样,开始测试

forge test

测试结果如下:

rust怎么写窗口程序(使用Foundry感受快rust对写合约的支持)(2)

可以直接调用
emit 输出几个日志,

emit log_string("hello");

运行forge test 是不会有变化的,需要加参数 -vvvvvvvvvvvvvv
v越多日志越详细,很unix
如下:

rust怎么写窗口程序(使用Foundry感受快rust对写合约的支持)(3)

加入依赖

如果需要安装依赖包,像这样

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/']

改好以后像这样:

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)

猜您喜欢: