版权声明:忠于祖国,忠于人民 https://blog.csdn.net/boss2967/article/details/83419771
01. 目录结构
- contracts
- test
- compile.js
- deploy.js
02.配置文件
- npm init
- npm install --save solc
03.具体实现
Index.sol
pragma solidity ^0.4.21;
contract Inbox {
string _message;
function Inbox(string src) public {
_message = src;
}
function setMessage(string message) {
_message = message;
}
function getMessage() public returns(string) {
return _message;
}
}
compile.js
- 加载编译器
let solc = require('solc')
let fs = require('fs')
- 获取.sol源码
let sourceInfo = fs.readFileSync('./contracts/Index.sol', 'utf-8');
- 编译,获取abi,bytecode
module.exports = output.contracts[':Inbox']
deploy.js
- 引入web3
let Web3 = require('web3')
- 创建web3实例
web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'))
- 指定服务商
web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'))
- 引用compile.js
let {interface, bytecode} = require('./compile')
- 部署合约
deploy = async()=>{
// 需要abi 和bytecode
try{
let accounts = await web3.eth.getAccounts()
console.log("合约地址是:",accounts)
let contract = await new web3.eth.Contract(JSON.parse(interface))
let contractInstance = await contract.deploy({
data:bytecode,
arguments:['HelloWord'],
}).send({
from:accounts[0],
gas:'1000000'
})
//***********************1.获取合约的地址,在options里面 .调用setMessage方法*********
let msg = await contractInstance.methods.getMessage().call({
from:accounts[0],
})
console.log('msg:',msg)
//***********************2 调用setMessage方法***********************
let res = await contractInstance.methods.setMessage('nihao').send({
from:accounts[0],
})
console.log("res:",res)
////***********************3.调用getMessage方法
msg = await contractInstance.methods.getMessage().call({
from:accounts[0]
})
console.log("getMessage:",msg)
//获取合约的地质,在options里面
console.log('address:',contractInstance.options.address)
}catch(e){
console.log(e)
}
}
- 调用合约
deploy()
- 注意事项
- JSON.parse
- 构造函数传数组
- 部署一定要有gas,用单引号,不然矿工懒得理你