truffle可以部署在ganache环境
Ganache下载 http://trufflesuite.com/ganache/
一键启动个人以太坊区块链,您可以使用它来运行测试、执行命令和检查状态,同时控制链的运行方式。

truffle是世界级的以太坊开发框架它使得以太坊开发变得简单⾼效,它具有以下特点:
1. 内置智能合约编译、链接、开发和⼆进制管理。
2. 快速开发的⾃动化合约测试
3. 脚本、可扩展性部署和迁移框架。
4. ⽤于部署到任意数量的公⽹和私⽹的⽹络管理
5. 基于EthPM和NPM,并使⽤ERC190标准进⾏包管理
6. 为合约通信提供交互式控制台
7. 为紧密集成提供可配置的构建管道
8. 在Truffle的环境中执⾏外部的运⾏脚本
官⽅⽹站:https://truffleframework.com

truffle安装
先安装好Node

npm install -g truffle
truffle version

truffle执行web3命令

truffle console --network ganacheNet
accounts[0];
web3.eth.getBalance(accounts[0]);
web3.eth.getBlockNumber();

注意:每个web3版本写法差别很大 具体参见对应版本文档调试
https://web3js.readthedocs.io/en


进入D:\www\truffleProject\demo1

//console模式
truffle console

//查看ganache下,所有的账户
var accounts;
accounts = web3.eth.getAccounts().then(function (acc) {accounts = acc});
accounts;

//查看第1个账户的ETH余额
let weiBalance0 = await web3.eth.getBalance(accounts[0]);
var ethAcc0;
ethAcc0 = web3.utils.fromWei(weiBalance0, "ether");
ethAcc0;

//查看第2个账户的ETH余额
let weiBalance1 = await web3.eth.getBalance(accounts[1]);
var ethAcc1;
ethAcc1 = web3.utils.fromWei(weiBalance0, "ether");
ethAcc1;

通过web3转账10eth

var bigNum = web3.utils.toWei('10','ether')
web3.eth.sendTransaction({from: accounts[0],to: accounts[1],value: bigNum}).then(console.log);
web3.eth.getBalance(accounts[0]);
web3.eth.getBalance(accounts[1]);

创建项目

mkdir truffleProject
mkdir demo1
cd demo1

truffle init

目录结构
contracts: 存放合约⽂件
migrations:存放部署相关⽂件
test:⽤于做单元测试
truffle.js:配置⽂件,告诉truffle部署到哪个⽹络(测试⽹络,主⽹,私有⽹络等),⾮
windows平台使⽤
truffle-config.js:同truffle.js,仅供windows平台使⽤

创建Hello.sol 添加合约代码

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.18;

contract Hello {
    uint storedData;
    function set(uint x) public {
        storedData = x;
    }

    function add() public {
        storedData += 1;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}

添加部署文件 2_deploy_contracts.js

const Hello = artifacts.require("./Hello.sol")
module.exports = function(deployer) {
    deployer.deploy(Hello);
};

修改配置⽂件

ganacheNet: {
     host: "127.0.0.1",     // Localhost (default: none)
     port: 8545,            // Standard Ethereum port (default: none)
     network_id: "*",       // Any network (default: none)
    },

每⼀个⽹络,如果没有指定下⾯的选项,那么系统会使⽤下⾯的默认值:
For each network, if unspecified, transaction options will default to the following values:
gas :部署合约时的gas上限,默认 4712388
gasPrice : 部署合约时的gas价格,默认 100000000000 (100 Shannon).
from : 部署合约的地址,如果没指定,默认为第⼀个账户。
provider : 默认情况下的 web3 provider 会使⽤指定的 host and port ,如果指定该字
段,则会忽略 host 和 port ,同时需要创建 provider 如下: new
Web3.providers.HttpProvider(“http://:”)

编译部署合约

truffle compile

compile 将把我们的 Solidity 代码编译成字节码(以太坊虚拟机 (EVM) 能理解的代码),build⽂件
夹⾥⾯的两个⽂件是根据合约⽣成的,每⼀个.sol⽂件会编译出⼀个.json⽂件,json描述⽂件⾥⾯包
含合约的 abi , bytecode 等相关信息,⽤于后续部署。

方法1、部署在truffle开发模式

truffle develop
执行migrate 命令,完成部署

方法2、部署在ganacheNet

truffle migrate --network ganacheNet

方法3、部署在私有网络上 暂未测试

与合约互动
调取刚刚部署合约的方法 如果有不好解决的错误尝试 truffle migrate –reset (仅在测试环境使用)

Hello.deployed().then(inst => {myhello = inst});
myhello.set(500);
myhello.add();
myhello.get();