web3入门-web3.js通过Ganache连接truffle智能合约

//环境
Truffle v5.5.21 (core: 5.5.21)
Ganache v7.2.0
Solidity v0.5.16 (solc-js)
Node v14.17.3
Web3.js v1.7.4

一、用truffle框架在本地部署智能合约

1.建个文件夹 truffle_demo

mkdir truffle_demo

2.进入文件夹内,执行init命令,会搭建基本框架出来

truffle init

3.在contracts下新建一个文件,比如DataDemo.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
contract DataDemo{
    string public returnTest;
    //set方法
    function setData(string memory str ) public payable {
        returnTest = str;
    }
    //get方法
    function getData() public view returns (string memory) {
        return returnTest;
    }
}

4.修改migrations/1_initial_migration.js

const Migrations = artifacts.require("Migrations");
var DataDemo = artifacts.require("./DataDemo.sol");

module.exports = function(deployer) {
  deployer.deploy(Migrations);
  deployer.deploy(DataDemo);
};

5.修改truffle-config.js,把networks里的development放开

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

6.打开Ganache,选择QUICKSTART

7.truffle_demo文件夹下执行两个命令,执行migrate的时候会输出合约地址

truffle compile

truffle migrate

8.此时打开Ganache,点击TRANSACTIONS,可以看到合约已经部署成功

二、通过web3.js连接合约

1.建个文件夹web3_test,然后进入文件夹,执行npm初始化

mkdir web3_test

npm init

2.下载web3

npm install web3 --save

//如果网络问题下载不出来,先切换成淘宝地址。
//npm config set registry https://registry.npm.taobao.org
//再执行npm install web3 --save

3.在web3_test下建一个js文件(连接合约),一个json文件(存合约的abi json字符串)

 4.打开合约项目,在truffle_demo/build/contracts下找到DataDemo.json,打开该文件,把里面的abi复制到建好的abi.json中(只需要复制冒号后面的字符串)

 5.在js文件中输入

var Web3 = require("web3");
var web3 = new Web3();
web3.setProvider(new Web3.providers.HttpProvider("http://localhost:7545"));


var fs = require("fs");
var abi =JSON.parse(fs.readFileSync("./abi.json", "utf-8"));
//address取Ganache中的Created Contract Address
var address = '0x52c7917228D4b19b086d6E15efc5873e24096Dde';
var data = new web3.eth.Contract(abi,address);


data.methods.getData().call(null,function(error, result){
    console.log("1.   the data:"+result);
});
//fromAddress取Ganache中的From Address
data.methods.setData("hello").send({from: '0x00C47333aA9fa968D37c2fc99D4cc8ce59Cd94C4'}).on('transactionHash', function(hash){
    console.log("2.   hash:", hash);
    data.methods.getData().call(null,function(error, result){
        console.log("3.   the data:"+result);
    });
});

其中address和fromAddress分别在下图的位置

6.执行 node.exe index.js 查看结果


版权声明:本文为qq_37928038原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。