前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以太坊真实测试网络合约交互实战

以太坊真实测试网络合约交互实战

作者头像
Tiny熊
发布2020-06-30 15:48:18
1.1K0
发布2020-06-30 15:48:18
举报

操作步骤

•安装truffle-hdwallet-provider•导入包•创建一个prodivier

代码语言:javascript
复制
//引入包
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 truffle-hdwallet-provider@0.0.3[1] --save

什么是Infura

•专业一点讲,Infura是一种IaaS(Infrastructure as a Service)产品,目的是为了降低访问以太坊数据的门槛。•通俗一点讲,Infura就是一个可以让你的dApp快速接入以太坊的平台,不需要本地运行以太坊节点。•从程序员的角度讲,Infura就是一个Web3 Provider,背后是负载均衡的API节点集群。使用它的好处就是,你永远不必担心连接的节点失效的问题,Infura会管理好这一切。

代码修改

02-deploy

代码语言:javascript
复制
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

代码语言:javascript
复制
c//引入包
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

代码语言:javascript
复制
//引入包
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] truffle-hdwallet-provider@0.0.3: mailto:truffle-hdwallet-provider@0.0.3


本文作者:potaxie

作者主页

https://learnblockchain.cn/people/633


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深入浅出区块链技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 操作步骤
  • 需要填写的数据
  • 什么是Infura
  • 代码修改
    • 02-deploy
      • 03-instance
        • 04-interaction
        • 结果展示
          • References
          相关产品与服务
          区块链
          云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档