web与solidity

npm run start 

golang打开react

npm install --save solc@0.4.25
在这里插入图片描述

创建四个javascript文件

01-compile.js
02-deploy.js
03-instance.js
04-interaction.js

在contracts/SimpleStorage.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;
    }
}

在01-compile.js中写

let solc=require('solc') //
let fs=require('fs')


let sourceCode=fs.readFileSync('./contracts/SimpleStorage.sol','utf-8')


let output=solc.compile(sourceCode,1)

console.log('output:no',output)

module.exports=output['contracts'][':Inbox']

在02-deploy.js中写下

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

let web3=new Web3()

const account='0xBF5Ee7FbC1033c070B95dCAf2Bc9792eAC0aCCA2'

web3.setProvider('http://localhost:7545')
// console.log('version:',web3.version)
// console.log('',web3.currentProvider)

//返回合约的实例

let contract=new web3.eth.Contract(JSON.parse(interface))


console.log('-----------------')

//拼接codde
contract.deploy({
    data:bytecode,
    arguments:['hello world']//给构造函数传递参数
}).send({
    from:account,
    gas:3000000,
    gasPrice:'1',
}).then(instance=>{
    console.log('============',instance.options.address)
})


//

03 实例化合约

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

let web3=new Web3()

const account='0xBF5Ee7FbC1033c070B95dCAf2Bc9792eAC0aCCA2'

web3.setProvider('http://localhost:7545')


let abi=[{"constant":false,"inputs":[{"name":"message","type":"string"}],"name":"setMessage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getMessage","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"src","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]



let address='0x2Ee2c1676325194a63c1C731F8a48B213d0b0fB3'

let contractInstance=new web3.eth.Contract(abi,address)

//console.log('contractInstance',contractInstance)

module.exports=contractInstance

04 调用合约

let instance = require('./03-instance')

const from = '0xBF5Ee7FbC1033c070B95dCAf2Bc9792eAC0aCCA2'

// instance.methods.getMessage().call().then(data=>{
//
//     console.log('data:',data)
//
//     instance.methods.setMessage('hello wilson').send({
//         from:from,
//         value:0,
//
//     }).then(res=>{
//         console.log('res:',res)
//
//         instance.methods.getMessage().call().then(data=>{
//             console.log('data2:',data)
//         })
//
//     })
//
//
// })

console.log('04-interaction.............')

let test = async () => {

    try {
        let v1 = await instance.methods.getMessage().call()
        console.log('success...............')
        console.log('v1:', v1)

        let res=await instance.methods.setMessage('hello wilson111').send({
            from:from,
            value:0,
        })

        console.log('res:',res)


        let v2=await instance.methods.getMessage().call()
        console.log('v2',v2)




    } catch (e) {
        console.log('fail..............')
        console.log(e)
    }

}

test()

let test=async ()=>{
    let v1=await instance.methods.getMessage().call()
    console.log(v1)

    let v2=await instance.methods.setMessage('wilon ,go!').send({
        from:from,
        value:0,
    })
    console.log('v2:',v2)


    let v3=await instance.methods.getMessage().call()
    console.log('v3:',v3)

}

test()

在调用合约的时候,使用实例化后的合约对象,instance.methods,在合约对象的.methods中调用方法,.getMessage(),调用getMessage方法,然后进行call()就可以调用了。
如果是需要设置,需要花费gas,instance.methods,在合约对象中调用.setMessage(),在括号中写需要设置的值,然后写send,在send中写{}大括号键值对的形式,需要设置from,花费谁的地址,如果没有payable函数或者构造器,那么value的值为0。
注意:在async中需要些await,如果没有await的话,获取不到值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值