//环境
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 查看结果
|