安装所需工具:
Node.js 点击打开链接
可以安装一个geth 点击打开链接
geth是正式部署的时候需要用到的也可以在线测试区块链转账等一些功能,百度上有
而testrpc是开发者测试用的
先来安装一个truffle
npm install -g [email protected]
查看版本:
truffle version
truffle -v
Truffle v4.0.0 (core: 4.0.0)
Solidity v0.4.18 (solc-js)
如果没有npm的需要安装
npm -v
5.6.0
接着安装testRPC
npm install -g ethereumjs-testrpc
/usr/local/bin/testrpc -> /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js
+ [email protected]
added 1 package and updated 2 packages in 10.648s
安装完成后....
可以开始了
我的操作还在之前就安装了git 在git的bash如下图:
现在可以区块链了
先在git下创建一个目录:
创建之前需开启testrpc
如果开启成功如下图:
会给你10 地址Accounts是账户keys就是密码了
在另外开启git-bash
新建一个文件
mkdir hello
cd hello
truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
Commands:
Compile: truffle compile
Migrate: truffle migrate
Test contracts: truffle test
然后找到目录就会看到
contracts 智能合约目录
migrations 发布脚本目录
test 存放测试文件
truffle.js Truffle的配置文件
编译合约:
truffle compile
一般情况是成功的,比如mac系统 ubt系统 Linux系统,便便Windows就是不成功,
需要看下面的文章就会明白:http://truffleframework.com/docs/advanced/configuration
这个文章,
说的是需要添加:.cmd
truffle.cmd compile
truffle.cmd compile --compile-all(编译全部的)
创建一个合约并编译
hello.sol
在contracts
目录中新建一个hello.sol
文件,代码如下:
pragma solidity ^0.4.23;
contract hello {
function sayHello() returns (string) {
return "abc";
}
}
代码中有两个方法:
sayHello方法是输出一段文字print(string name)
方法是输出传入的内容。
编辑migrations/1_initial_migration.js
部署脚本,将我们刚才创建的hello.sol
文件设置到发布配置文件中,内容如下:
var Migrations = artifacts.require("./Migrations.sol");
var hello = artifacts.require("./hello.sol");
var Hello_mshk_top = artifacts.require("./Hello_mshk_top.sol");
module.exports = function(deployer) {
deployer.deploy(Migrations);
deployer.deploy(Hello_mshk_top);
deployer.deploy(hello);
};
需要部署两个地方
使用artifacts.require
语句来取得准备部署的合约。使用deployer.deploy
语句将合约部署到区块链上。这边HelloWorld
是contract
的名称而不是文件名。因此可以用此语法读入任一.sol
文件中的任一合约。
继续编译命令
truffle compile
编译后的文件都放在了./build/contracts
目录下
Compiling ./contracts/Hello_mshk_top.sol...
Compiling ./contracts/Migrations.sol...
Writing artifacts to ./build/contracts
部署智能合约
编辑truffle.js
配置文件,设置我们稍后要部署智能合约的位置,内容如下:
module.exports = {
// See
// to customize your Truffle configuration!
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*"
}
}
};
truffle
的智能合约项目部署,使用下面的命令:
truffle migrate
这个命令会执行所有migrations
目录下的js文件。如果之前执行过truffle migrate
命令,再次执行,只会部署新的js文件,如果没有新的js文件,不会起任何作用。如果使用--reset
参数,则会重新的执行所有脚本的部署。不然会提示找不到方法
如果要部署到指定的网络,可以使用--network
参数,例如:
truffle migrate --network live
多个网络的配置格式如下:
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*" // match any network
},
live: {
host: "178.25.19.88", // Random IP for example purposes (do not use)
port: 80,
network_id: 1, // Ethereum public network
// optional config values:
// gas Gas limit used for deploys. Default is 4712388
// gasPrice Gas price used for deploys. Default is 100000000000 (100 Shannon).
// from - default address to use for any transaction Truffle makes during migrations
// provider - web3 provider instance Truffle should use to talk to the Ethereum network.
// - if specified, host and port are ignored.
}}
要确保testrpc是打开的状态
输入truffle console
truffle console
中预载了truffle-contract
函数库,以方便操作部署到区块链上的合约。
成功是这个样子的
接着继续调用:
HelloWorld.deployed().then(instance => contract = instance)
这边使用HelloWorld.deployed().then
语句来取得HelloWorld
合约的Instance
(实例),并存到contract
变量中,以方便后续的调用。
上面用的是Javascript ES6+
的语法,这句也可以写成:
HelloWorld.deployed().then(instance => {
contract = instance
});
还可以用ES5的写法:
HelloWorld.deployed().then(function(instance) {
hello = instance;
});
truffle(development)> contract.sayHello.call()
'Hello World'
这里直接呼叫contract.sayHello()
也会得到一样的结果。truffle-contract
提供使用call()
来读取只读(read only)的数据,这样就不需提供gas
。因此如果遇到的操作需要向区块链写入数据,我们就不能用call
语句了。
如此一来,我们已写好并部署完成了第一个智能合约,也验证了合约确实可以运作。
添加新的方法之后要重新编译一下truffle migrate --reset来执行
否则会调用失败
附一张图:
https://blog.csdn.net/diandianxiyu_geek/article/details/78361621
http://blog.51cto.com/iceman123/2089553?utm_source=oschina-app
https://yq.aliyun.com/articles/212944
https://blog.csdn.net/aaa19890808/article/details/79418335
https://www.cnblogs.com/lion.net/p/7809954.html