如果环境已经比较熟悉了,想直接看hello world实战(踩坑),可以翻到第二页
0x00 往期回顾
如果还没装好环境或者GETH不会用的话,可以回去看看DAY1 与DAY2 ,部分truffle相关的内容可以直接看翻译文档
这里不妨假设大家已经装好了truffle、ganache和geth
0x01 写在前面
由于truffle近期有重大更新,目前网上大部分的博客已经官方文档翻译是基于truffle2/3/4的版本,而我在测试是truffle已经更新到了5.3,所以很多内容会与网上操作不太相同......大家查阅资料是注意自己的版本。
学习Truffle前要知道什么
总的来说不需要什么特别的。
由于本身是基本Javascript的,但对Javascript的要求比较低,知道基本语法、模块、Promise的概念差不多就可以了,不知道也行,碰到不懂的,现查资料都来得及。(这个我做为一个后台开发勉强可以懂)。
需要知道Solidity,因为本身就是针对它的一个框架,不然学这个干什么。
知道一点点以太坊的基础,不过学Solidity那点就够了。
https://truffle.tryblockchain.org/
0x02 查看truffle版本
truffle
此时可以看到我们的版本为5.3.7
0x03 初始化工程
mkdir test
cd test
truffle init
0x04 合约编译
合约位置:
所有的合约应该位于./contracts
目录。项目默认提供了一个合约文件,一个库文件,均以.sol
结尾作为示例。尽管库文件有一定的特殊性,但为简单起见,当前均称之为合约。
编译命令:
truffle compile
Truffle仅默认编译自上次编译后被修改过的文件,来减少不必要的编译。如果想编译全部文件,可以使用--compile-all
选项。
truffle compile --compile-all
相关约定:
Truffle需要定义的合约名称 和文件名 准确匹配,类似于JAVA里面的文件名和类名。举例来说,如果文件名为MyContract.sol
,那么合约文件须为如下两者之一:
contract MyContract {
...
}
// or
library MyContract {
...
}
依赖:
可以通过使用import 来声明依赖。Truffle将会按正确顺序依次编译合约,并在需要的时候自动关联库。
编译目录:
编译的输出位于./build/contracts
目录,如果目录不存在会自动创建。这些编译文件对于Truffle框架能否正常工作至关重要——我们不应该在正常的编译或发布以外手动修改这些文件。
0x05 合约移植
移植是由一些Javascript文件组成来协助发布到以太坊网络。主要目的是用来缓存你的发布任务,它的存在基于你的发布需求会改变的前提。当你的工程发生了重要的改变,你将创建新的移植脚本来将这些变化带到区块链上。之前运行移植的历史记录通过一个特殊的Migrations
合约来记录到链上,下面有详细说明。
移植命令:
truffle migrate
这个命令会执行所有的位于migrations
目录内的移植脚本。如果之前的移植成功执行,truffle migrate
仅会执行新创建的移植。如果没有新的移植脚本,这个命令不同执行任何操作。可以使用选项--reset
来从头执行移植脚本。
移植脚本:
例如文件名:4_example_migration.js
module.exports = function(deployer) {
// deployment steps
deployer.deploy(MyContract);
};
需要注意的是文件名以数字开头,一个描述性的后缀结尾。数字前缀是必须的,用于记录移植是否成功。后缀仅是为了提高可读性,以方便理解。
移植js里的exports
的函数接受一个deployer
对象作为第一个参数。这个对象用于发布过程,提供了一个清晰的语法支持,同时提供一些通过的合约部署职责,比如保存发布的文件以备稍后使用。deployer
对象是用来缓存(stage)发布任务的主要操作接口。
移植测试:
这里我们先删掉刚刚手写的移植脚本,减少报错:
truffle compile
truffle migrate
报错,提示无法连接到客户端:
Something went wrong while attempting to connect to the network. Check your network configuration.
Could not connect to your Ethereum client with the following parameters: - host > 127.0.0.1 - port > 7545 - network_id > 5777 Please check that your Ethereum client: - is running - is accepting RPC connections (i.e., "--rpc" option is used in geth) - is accessible over the network - is properly configured in your Truffle configuration file (truffle-config.js)
Truffle v5.3.7 (core: 5.3.7) Node v10.19.0
Comments | NOTHING