ESSAY / NOTE

ETH truffle框架在Ganache部署调用合约

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();