什麼是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