solidity truffle学习

环境:ubuntu 18

安装nodejs和npm

sudo apt install nodejs

sudo apt install npm

安装truffle

npm -g参数是安装到全局的node_modules目录

sudo npm install -g truffle

sudo npm install -g ethereumjs-testrpc

我的truffle版本是v5.0.41

其它参照下面的文章:

Truffle入门到实战

https://www.jianshu.com/p/e697313d9e9a

truffle官方文档

https://www.trufflesuite.com/docs

创建一个工程


1、创建工程目录
    mkdir MetaCoin
    cd MetaCoin
2、下载(unbox)MetaCoin box
    truffle unbox metacoin
    注意:a、可以使用truffle unbox <box-name>命令下载其它的truffle box
        b、使用truffle init创建一个干净的truffle项目
        c、可以在上面的两个命令中添加--force参数,无视当前目录状态,覆盖已有内容。
工程目录下的目录:
contracts/: Solidity合约文件目录
migrations/: 部署脚本目录
test/: 应用程序和合约的测试文件目录
truffle-config.js: Truffle配置文件

编译合约


contracts目录下有个Migrations.sol文件,它是在部署中提供帮助。
编译

在工程目录根部输入truffle compile。第一次编译时会全部编译,再次编译,只编修改过的。添加--all参数可以全部编译。
编译的问题
   Error: Truffle is currently using solc 0.5.8, but one or more of your contracts specify "pragma solidity ^0.4.24".
安装其它版本的solidity编译器(不管用)
   npm install -g [email protected]
修改工程目录下的truffle-config.js
module.exports = {
compilers: {
  solc: {
    version: "0.4.24",
  }
}
};
改完编译ok。编译输出目录build/contracts/。

依懒(Dependencies)
import某个文件
    import "./AnotherContract.sol";
import其它包中的文件,truffle支持import通过 EthPM 和 NPM 安装的包. 
    import "somepackage/SomeContract.sol";

运行部署?(RUNNING MIGRATIONS)
Migrations是些JavaScript文件,用来帮你部署合约到Ethereum网络.
命令 truffle migrate
简单来说,migrations是管理部署脚本的集合。它每次只会执行新的migrations,可以添加--reset参数从头开始执行。
一个简单的migration文件如下:
Filename: 4_example_migration.js

var MyContract = artifacts.require("MyContract");

module.exports = function(deployer) {
  // deployment steps
  deployer.deploy(MyContract);
};
文件名包含数字和描述两部分。
artifacts.require 告知truffle我们要搞那个合约(指定合约名,返回contract abstraction合约的抽象)
module.exports 所有migrations必须通过module.exports导出一个函数,函数的第一个参数是deployer,部署过程中需要用到它。
Initial migration
Truffle要求我们要有个Migrations的合约,以便能使用Migrations的功能。这个合约必须包含一个特别的接口,而你可以自由编辑它。对大多数工程,这个合约会作为最先部署的并且不再作修改。truffle init会默认创建这个文件contracts/Migrations.sol。
Deployer 使用deployer安排部署任务。
// Deploy A, then deploy B, passing in A's newly deployed address
deployer.deploy(A).then(function() {
  return deployer.deploy(B, A.address);
});
Deployer API
    1、deployer.deploy(contract, args..., options)
    2、deployer.link(library, destinations)
    3、deployer.then(function() {...})
Network considerations基于网络来写不同的部署

与合约交互(合约调用)INTERACTING WITH YOUR CONTRACTS

调试合约

truffle debug <transaction hash>

命令与gdb差不多。https://www.trufflesuite.com/docs/truffle/getting-started/debugging-your-contracts

使用truffle develop和终端


Truffle Console: 一个基本的可连接到任何的以太坊客户端的交互终端。可以连接到Ganache或者geth等;还可以选择测试网或者主网;和选择自己的账号。
Truffle Develop: 一个自带blockchain的终端。在测试阶段,不用去部署;用默认账号;不用安装和维护blockchain客户端。
truffle console可以使用--network <name>指定网络。

遇到问题再来记录。。。

发布了12 篇原创文章 · 获赞 1 · 访问量 901

猜你喜欢

转载自blog.csdn.net/huafable007/article/details/102667429
今日推荐