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