使用 Web3.js 进行 Matic 测试网上链操作_matic测试网chainid-程序员宅基地

技术标签: 区块链  web3  js  

1. geth 的安装

1. apt-get方式在线安装

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
1.1 查看版本

geth version

2. 在geth目录创建 genesis.json 文件

{
    
    "nonce":"0x0000000000000042", 
    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000", 
    "difficulty": "0x4000", 
    "alloc": {
    }, 
    "coinbase":"0x0000000000000000000000000000000000000000", 
    "timestamp": "0x00", 
    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", 
    "extraData": "0x00000000", 
    "gasLimit":"0xffffffff",	
	"config":{
    
		"chainId": 666,
		"homesteadBlock": 0
	}
}
  • 初始化
geth --datadir "chain" init genesis.json
  • 启动
geth --datadir "./chain" --networkid 666 --port 30303 --http --http.addr "0.0.0.0" --http.port 8545 --http.api 'db,net,eth,web3,personal' --allow-insecure-unlock --http.corsdomain '*' console 2>> geth.log

3. console 下的操作

1.1 用户列表
	eth.accounts
1.2 添加用户
	personal.newAccount("password")
1.3 挖矿、停止
	miner.start()
	miner.stop()
1.4 查看余额
	eth.getBalance(eth.accounts[0])
1.5 获取节点信息
	admin.nodeInfo
  admin.nodeInfo.enode
  admin.nodeInfo.id
  admin.nodeInfo.ports.listener

2. ganache 的安装

2.1 npm 安装
npm install -g ganache-cli

启动
ganache-cli
2.2 搭建 ganache 交互
mkdir ganache
npm install web3 -save
const Web3 = require("web3")
console.log("判断浏览器是否启用Metamask插件的对象Web3.givenProvider结果为:",Web3.givenProvider);
const web3 = new Web3(Web3.givenProvider || new Web3.providers.HttpProvider('http://localhost:8545'));
console.log(web3.version)
web3.eth.getAccounts().then(console.log)

3. web3.js 与区块链交互

npm install -g express-generator  
npm install express -g
express -e myapp

npm install
npm start
	172.16.13.17:3000
3.1 routes/index.js
const express = require('express');
const router = express.Router();
const Web3 = require("web3")
const web3 = new Web3(Web3.givenProvider || new Web3.providers.HttpProvider('http://localhost:8545'));
web3.eth.getAccounts().then(console.log)

/* GET home page. */
router.get('/', function(req, res, next) {
    
  web3.eth.getAccounts().then(accounts=>{
    
    const account = accounts[0];
    web3.eth.getBalance(account).then(balance=>{
    
      const amount = web3.utils.fromWei(balance, 'ether');
      res.render('index',{
    account: accounts, balance: amount})
    })
  })
});

module.exports = router;
3.2 app.js
var app = express();

var ejs = require('ejs')
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('.html',ejs.__express);
app.set('view engine', 'html');
3.3 views/index.html
<!DOCTYPE html>
<html>
	<head>
		<title>账户余额</title>
		<link rel='stylesheet' href='/stylesheets/style.css' />
	</head>
	<body>
		<h1>账户是:<%= account %> </h1>
		<h1>余额是:<%= balance %> </h1>
	</body>
</html>
  • MetaMask/外部账户导入到Geth私链

    https://www.cnblogs.com/shizhe99/p/15087068.html

2. web3.js的使用(上链操作)

1. 测试Demo

const Web3 = require("web3")
// ABI
const ERC721V1ABI = require("../config/erc721_v1.json");

// 连接测试链:https://rpc-mumbai.maticvigil.com
const web3 = new Web3("https://rpc-mumbai.maticvigil.com");

// 通过私钥获取账户信息
const key_account = web3.eth.accounts.privateKeyToAccount("0xe6c68097bd7e6377c10a9010ba8362e014bbfb57b50202481671d4a4ae9fca18")

// 只有添加到wallet 才能交易
web3.eth.accounts.wallet.add(key_account);

const encodedParams =
        "0x485f0f700000000000000000000000000000000000000000000000000000000000ad253b0000000000000000000000\
    00000000000000000000000000000000000013081b00000000000000000000000000000000000000000000000000000000000000600000000000000\
      000000000000000000000000000000000000000000000000008676976656e55524c000000000000000000000000000000000000000000000000";

class FirstContractWeb3 {
    
    constructor() {
    
        // this.initContract1155()
        // this.initContract721()
        this.getAccountBalance()
        // this.createAccount()
    }

		// 创建钱包
    createAccount(){
    
        // address: '0x1afF0Db20192Bd4c040e8e284943566bb4e66F0C',
        // privateKey: '0xe6c68097bd7e6377c10a9010ba8362e014bbfb57b50202481671d4a4ae9fca18',
        // console.log(web3.eth.accounts.wallet.create(1));

        // address: '0x1A72dd6735bDA5Ad219D3ffB6Dd544E3dcda57e8',
        // privateKey: '0xbf249f4d9602ee6e40f852b161e38c9b0e8590296af739d7206e293023ea0090',
        //console.log(web3.eth.accounts.create(1));
      	const key_account1 = web3.eth.accounts.privateKeyToAccount("0xe6c68097bd7e6377c10a9010ba8362e014bbfb57b50202481671d4a4ae9fca18")
       	const key_account2 = web3.eth.accounts.privateKeyToAccount("0xbf249f4d9602ee6e40f852b161e38c9b0e8590296af739d7206e293023ea0090")

        web3.eth.accounts.wallet.add(key_account1);
      	web3.eth.accounts.wallet.add(key_account2);
      	transaction(key_account2,key_account2)
    }


  	// 基于 721 协议
    initContract721() {
    
        // 基于 web3.eth.Contract 对象来创建合约(调用合约的方法)
        const ERC721_v1 = new web3.eth.Contract(
                ERC721V1ABI,
                "0x72B6Dc1003E154ac71c76D3795A3829CfD5e33b9"
        );
        const uri = 'http://127.0.0.1:5200/ipfs/QmSTGeo63NHDxgwtKsvbz81gWmVupftzcarZw58h5Hn3kE'
        ERC721_v1.methods.mintToCaller(key_account.address, uri).send({
    from: key_account.address, gas: 500000})
            .then(r => console.log("result721: ", r))
            .catch(console.error);

        web3.eth.getBalance(key_account.address)
        .then(result => {
    console.log("balance: " + result)})
    }

    
    // 转账
    transaction(key_account1,key_account2){
    
       web3.eth.sendTransaction({
    
           from: key_accoun1t.address,
           to: key_account2.address,
           gasPrice: "20000000000",
           gas: "21000",
           value: 1000000000
        }).then(console.log)
    }
}

// 执行程序
let first_contract = new FirstContractWeb3();
// console.log(Web3.modules)

image-20211014171521811

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aasdtr/article/details/120769049

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签