zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    最新的thinkphp 数据库字段 自动转为小写。是个坑,要小心
    游戏助手开发
    最新的thinkphp 后台入口的问题
    最近的小成就
    一个大坑1111111111
    一个大坑
    代码的重构
    PHP上传文件大小的修改
    博客园Markdown编辑器代码高亮失效(官方已修复)
    2014年最新前端开发面试题(题目列表+答案 完整版)
  • 原文地址:https://www.cnblogs.com/jackluo/p/12016536.html
Copyright © 2011-2022 走看看