11.智能合约本地开发部署流程

版权声明:忠于祖国,忠于人民 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

  1. 加载编译器
let solc = require('solc')
let fs = require('fs')

  1. 获取.sol源码
let sourceInfo = fs.readFileSync('./contracts/Index.sol', 'utf-8');
  1. 编译,获取abi,bytecode
module.exports = output.contracts[':Inbox']

deploy.js

  1. 引入web3
let Web3 = require('web3')
  1. 创建web3实例
web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'))
  1. 指定服务商
web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'))
  1. 引用compile.js
let {interface, bytecode} = require('./compile')
  1. 部署合约
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)
     }
}
  1. 调用合约
deploy()
  1. 注意事项
    • JSON.parse
    • 构造函数传数组
    • 部署一定要有gas,用单引号,不然矿工懒得理你

猜你喜欢

转载自blog.csdn.net/boss2967/article/details/83419771