web3 編譯部署調用合約


//導入solc 編譯器
let solc = require('solc')
let fs = require('fs')
//讀取合約
let sourceCode = fs.readFileSync('./contracts/SimpleStorage.sol','utf-8')

//var input = 'contract x { function g() {} }'
// Setting 1 as second paramateractivates the optimiser
//編譯合約
let output = solc.compile(sourceCode, 1)
module.exports = output['contracts'][':SimpleStorage']

部署合約

let {bytecode, interface} = require('./01-complie')
//console.log(bytecode)
//console.log(interface) 

// 1.引入web3
let Web3 = require('web3')
// 2.new 一個web3實例
let web3 = new Web3()
// 3.設置網絡
let isConnect = web3.setProvider('http://localhost:7545')

const account = '0x975938478Fa7359567b84E9c9ccc20b2aac23066'

//console.log(isConnect)
//console.log("version:", web3.version)
//console.log(web3.eth.currentProvider)

// 1. 拼接合約數據 interface
let contract = new web3.eth.Contract(JSON.parse(interface))
// 2. 拼接bytecode
contract.deploy({
    data: bytecode,//合約bytecode
    arguments: ['HelloWorld'] //給構造函數傳遞參數,使用數組
}).send({
    from: account,
    gas: '3000000',
    //gasPrice: '1',
}).then(instance =>{
    console.log('address :',instance.options.address)
});
// 3. 合約部署

獲取合約實例

//獲取 合約實例,導出合約實例
let {bytecode, interface} = require('./01-complie')

// 1.引入web3
let Web3 = require('web3')
// 2.new 一個web3實例
let web3 = new Web3()
// 3.設置網絡
let isConnect = web3.setProvider('http://localhost:7545')
// 合約的abi
let abi = [{"constant":false,"inputs":[{"name":"message","type":"string"}],"name":"setMessage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMessage","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"str","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
//合約地址
let address = '0x7f61E1A3970777C3C25DA410fD6E2c3CfCFB953a';
//此處abi 已經是json對象了不需要進行parse動作
let contractInstance = new web3.eth.Contract(abi,address);

//console.log('address',contractInstance.options.address);
module.exports = contractInstance;

調用合約

//1 .導入合約實例
let instance = require('./03-instance');
const from = '0x4E4c6a3655A5863089f9341ff61D3d8BeE00384a';


//異步調用,返回值是一個promise
//2。讀取數據
/*
instance.methods.getMessage().call().then(data => {
console.log('data: ', data);
//3.寫入數據
instance.methods.setMessage('Hello JackLuo').send({
from: from,
value: 0
}).then(res => {
//4.讀取數據
console.log('res :', res)
instance.methods.getMessage().call().then(data => {
console.log('data2: ', data);
})
})
});
*/

// web3與區塊鏈交互的返回值都是promise,可以直接使用async/await
let test = async () => {
try {
let v1 = await instance.methods.getMessage().call()
console.log('v1:', v1)
let res = await instance.methods.setMessage('Hello Jackluo').send({
from: from,
value: 0
});
console.log('res:', res)
let v2 = await instance.methods.getMessage().call()
console.log('v2:', v2)
} catch (e) {
console.log(e)
}
};

test();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM