以太坊真實測試網路合約互動實戰

買賣虛擬貨幣
操作步驟•安裝truffle-hdwallet-provider•匯入包•建立一個prodivier//引入包let Web3 =require('web3')
let HDWalletProvider = require('truffle-hdwallet-provider')//2.new一個web3例項let web3 = new Web3()//3.設定metamask Ropsten-network的助記住詞,表明花誰的錢let terms = 'truly state fruit rug decide riot shy lake apple orphan october dinosaur'//3.設定測試網路 infura
let netIp = 'https://ropsten.infura.io/v3/4c25a49808354c5480f97d4c82117ee4'let provider = new HDWalletProvider(terms, netIp)web3.setProvider(provider)需要填寫的資料•助記詞,表示花誰的錢--metamask 測試網路 scout same naive genius cannon maze differ acquire penalty habit surround ice•指定一個服務商,讓他幫助我們連線到真實網路 https://ropsten.infura.io/v3/4c25a49808354c5480f97d4c82117ee4
•需要使用個npm包(接受兩個引數:1,2,這個包會幫我們連線到對應網路) npm install admin@chaindaily[1] --save

什麼是Infura

•專業一點講,Infura是一種IaaS(Infrastructure as a Service)產品,目的是為了降低訪問以太坊資料的門檻。
•通俗一點講,Infura就是一個可以讓你的dApp快速接入以太坊的平臺,不需要本地執行以太坊節點。
•從程式設計師的角度講,Infura就是一個Web3 Provider,背後是負載均衡的API節點叢集。使用它的好處就是,你永遠不必擔心連線的節點失效的問題,Infura會管理好這一切。

程式碼修改

02-deploy

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

//1.引入web3
let Web3 = require('web3')

//引入包
let HDWalletProvider = require('truffle-hdwallet-provider')

//2.new一個web3例項
let web3 = new Web3()

//3.設定metamask Ropsten-network的助記住詞,表明花誰的錢
let terms = 'truly state fruit rug decide riot shy lake apple orphan october dinosaur'

//3.設定測試網路 infura
let netIp = 'https://ropsten.infura.io/v3/4c25a49808354c5480f97d4c82117ee4'
let provider = new HDWalletProvider(terms, netIp)
web3.setProvider(provider)
console.log('version:________', web3.version)
console.log('web3-eth.curretProvider_____________', web3.currentProvider)
//1.拼接合約資料
let contract = new web3.eth.Contract(JSON.parse(interface))
let deploy = async () => {
    //獲取所有的賬戶

    let accounts = await web3.eth.getAccounts()
    console.log('accounts____', accounts)
    //執行部署

    let instance = await contract.deploy({
        data: bytecode,//合約的bytecode
        arguments: ['helloworld']//給建構函式傳遞引數,使用陣列
    }).send({
        from: accounts[0],
        gas: '3000000',
        gasPrice: '1',
    })

    console.log('instance_address_____', instance.options.address)
}

deploy()

03-instance

//引入包
let Web3 =require('web3')
let HDWalletProvider = require('truffle-hdwallet-provider')

//2.new一個web3例項
let web3 = new Web3()

//3.設定metamask Ropsten-network的助記住詞,表明花誰的錢
let terms = 'truly state fruit rug decide riot shy lake apple orphan october dinosaur'

//3.設定測試網路 infura
let netIp = 'https://ropsten.infura.io/v3/4c25a49808354c5480f97d4c82117ee4'
let provider = new HDWalletProvider(terms, netIp)
web3.setProvider(provider)

let abi = [{
    "constant": true,
    "inputs": [],
    "name": "getValue",
    "outputs": [{"name": "", "type": "string"}],
    "payable": false,
    "stateMutability": "view",
    "type": "function"
}, {
    "constant": false,
    "inputs": [{"name": "_str", "type": "string"}],
    "name": "setValue",
    "outputs": [],
    "payable": false,
    "stateMutability": "nonpayable",
    "type": "function"
}, {
    "inputs": [{"name": "_str", "type": "string"}],
    "payable": false,
    "stateMutability": "nonpayable",
    "type": "constructor"
}]

let address = '0x797Ff2e41b64eD1adfc84cA98afeD00813Dd051D' //此處是合約地址

//此處abi已經json物件,不需要進行parse動作
let contractInstance = new web3.eth.Contract(abi, address)
console.log('address__________', contractInstance.options.address)
module.exports = contractInstance

04-interaction

//引入包
let Web3 =require('web3')
let HDWalletProvider = require('truffle-hdwallet-provider')

//2.new一個web3例項
let web3 = new Web3()

//3.設定metamask Ropsten-network的助記住詞,表明花誰的錢
let terms = 'truly state fruit rug decide riot shy lake apple orphan october dinosaur'

//3.設定測試網路 infura
let netIp = 'https://ropsten.infura.io/v3/4c25a49808354c5480f97d4c82117ee4'
let provider = new HDWalletProvider(terms, netIp)
web3.setProvider(provider)

//整體封裝成函式
//web3和區塊鏈互動的返回值都是promise,可以直接使用async

let test = async () => {
    try {
        //獲取當前區塊鏈的對應助記詞的賬戶地址
        let accounts = await web3.eth.getAccounts()
        let from = accounts[0]
        let y1 = await instance.methods.getValue().call()

        let res = await instance.methods.setValue('Hello HangTou').send({
            from: from,
            gas:'3000000',
            value: 0,
        })

        console.log('res:', res)
        let v2 = await instance.methods.getValue().call()

        console.log('v2:', v2)
    } catch (e) {
        console.log(e)
    }
}

test()

結果展示

git地址 https://github.com/potaxie/web3

References
[1] admin@chaindaily: mailto:admin@chaindaily

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;