使用web3连接Georli测试网络

目前的工作情况是,已在remix写好执行合约并部署在Georli测试网络中,希望能够通过web3连接Georli并访问智能合约,获取详细的信息。

注意点:Goerli测试网络的url为http://goerli.infura.io/v3/<Your-API-Key>,其中的获取是通过https://infura.io,注册账户再注册项目得到

1.使用geth方式在终端

要连接Goerli测试网络,首先需要安装Node.js框架。安装完成后,通过npm安装Web3库。

首先安装客户端,比如Geth、Parity或Mist,本文安装的是Geth,下载地址是https://geth.ethereum.org/downloads,安装完成后,配置环境变量。

然后通过npm安装Web3库,npm install web3

在这里插入图片描述

成功后可使用 geth version测试,如下图。

在这里插入图片描述

下面开始连接。

使用geth --datadir geth-tutorial --goerli --syncmode snap

在这里插入图片描述

运行成功后,查看下图红色部分,可发现geth提供三种连接js环境方式,IPC、HTTP和WebSocket。

在这里插入图片描述

法一:使用IPC方式与goerli测试网络连接

另起一个终端,运行geth attach \\.\pipe\geth.ipc

在这里插入图片描述

运行var Web3=require('web3')

var web3=new Web3(new Web3.providers.HttpProvider('http://goerli.infura.io/v3/<Your-API-Key>'))

web3.isConnected() 测试web3是否连接成功 (始终连接不成功)

在这里插入图片描述

法二:使用HTTP方式与goerli测试网络连接 (不成功)

运行geth attach http://127.0.0.1:8551,注意8551端口需要auth验证。

在这里插入图片描述

2.写成脚本

2.1 通过metamask (现成的太复杂,搞不太来)
2.2 通过自己的接口

创建文件get.js,并写入一下内容:

let Web3 = require('web3');
let web3;

if(typeof web3 !=='undefined'){ //检查是否已有web3实例
    web3=new Web3(web3.currentProvider);
}else{
    //否则就连接到给出节点
    web3=new Web3();
    web3.setProvider(new Web3.providers.HttpProvider("https://goerli.infura.io/v3/<Your-API-Key>"));
    module.exports = web3
}

// 使用检查0号区块判断是否连接成功
web3.eth.getBlock(0, function(error, result){
    if(!error)
        console.log("result", result)
    else
        console.log("something wrong,the connection might be failed");
        console.error("error", error);
})

在cmd里运行node get.js,可得到创世区块的详细信息

在这里插入图片描述

之后修改该文件,继续写入:

var abi = JSON.parse('[ { "constant": false, "inputs": [ { "name": "_num", "type": "uint256" } ], "name": "setNum", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "from", "type": "address" }, { "indexed": false, "name": "to", "type": "address" }, { "indexed": false, "name": "_num", "type": "uint256" } ], "name": "Sent", "type": "event" }, { "constant": true, "inputs": [], "name": "getNum", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "num", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" } ]');
var address = '0xebb7427fe4cdb8908a375b2bf4ce539cbe195cfc';
var contract = new web3.eth.Contract(abi, address)

其中,abi是通过remix获得,address是合约部署后的地址。

在这里插入图片描述

重新运行node get.js,可得到合约的详细内容。

在这里插入图片描述

3.通过truffle方式连接 (不成功)

在truffle-config.js文件里修改

const HDWallet = require('truffle-hdwallet-provider');
const infuraKey = "fj4jll3k.....";

const fs = require('fs');
const mnemonic = fs.readFileSync(".secret").toString().trim();
// Useful for deploying to a public network.
// NB: It's important to wrap the provider as a function.
goerli: {
    provider: () => new HDWalletProvider(mnemonic, `https://goerli.infura.io/v3/<Your-API-Key>`),
    network_id: 5,       // Ropsten's id
    gas: 5500000,        // Ropsten has a lower block limit than mainnet
    confirmations: 2,    // # of confs to wait between deployments. (default: 0)
    timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)
    skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
},
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值