solidity 智能合约(3):使用truffle编译部署及测
先找源码敲一遍,跑起来,后面慢慢讲怎么用solidity编写以太坊智能合约。
一 编写源码
1.1 合约源码SimpleStorage.sol
这个文件编写在contracts
目录下
pragma solidity ^0.5.0;
contract SimpleStorage {
constructor () public {
}
uint256 storedData;
function set(uint256 x) public {
require(x>10,'数字不能小于10');
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
}
1.2 编写合约迁移脚本3_simple_storage.js
这个文件在migrations
目录下
const SimpleStorage = artifacts.require("SimpleStorage");
module.exports = function(deployer) {
deployer.deploy(SimpleStorage);
};
1.3 测试脚本simple_storage.js
这个文件可以创建一个test
目录,然后放进去,我这里直接放在了根目录,不太规范。
const BN = require("bn.js");
module.exports = async function (callback) {
try {
let frac = new BN(100);
// frac = frac.pow(new BN(18));
let SimpleStorage = artifacts.require("SimpleStorage");
let tokenInstance = await SimpleStorage.deployed();
// console.log("tokenInstance = "+JSON.stringify(tokenInstance));
await tokenInstance.set(frac);
let data = await tokenInstance.get();
console.log('data =' + JSON.stringify(data));
callback()
} catch (e) {
callback(e);
}
};
二 几个命令
编译命令
要编译Truffle项目里的合约,请切换到项目工程所在根目录,然后在终端中键入以下内容:
sudo truffle compile
首次运行时,将编译所有合约。 在后续运行中,Truffle将仅编译自上次编译以来有更改的合约。如果我们想覆盖此行为,可以使用 --all
选项运行上面的命令。
编译的目标文件 Artifacts 将放在 build/contracts/ 目录中,相对于项目根目录(如果该目录不存在,将创建该目录。)
这些 Artifacts 是Truffle内部工作的组成部分,它们在成功部署应用程序中起着重要作用。 不要去编辑这些文件,因为这些文件将被合约编译和部署覆盖。
编译成功后
image.png
合约部署
迁移脚本(JavaScript文件)可帮助我们将合约部署到以太坊网络。 这些文件负责暂存我们的部署任务,并且假设我们的部署需求会随着时间的推移而发生变化。 随着项目的发展,我们将创建新的迁移脚本,以进一步推动区块链的发展。 先前运行的部署记录通过特殊的 Migrations 迁移合约记录在链上,详细信息如下。
部署命令
要运行部署,请运行以下命令:
sudo truffle migrate
这将部署在项目的 migrations 目录中的所有迁移文件。 最简单的迁移只是一组管理部署脚本。 如果我们的迁移先前已成功运行,则 truffle migrate
将从上次运行的迁移开始执行,仅运行新创建的迁移。 如果不存在新的迁移,truffle migrate
将不会执行任何操作。 我们可以使用 --reset
选项从头开始运行所有迁移。 对于本地测试,确保在执行 migrate
之前安装并运行了 Ganache等 测试区块链。
测试合约
sudo truffle exec simple_storage.js
image.png
image.png
测试脚本中输入数值100
,取出的数值为64
(这个值是16进制格式,转为十进制就是100
).