新版以太坊Ethereum库ethersV5.0配合后端Golang1.18实时链接区块链钱包(Metamask/Okc)以及验签操作

这篇具有很好参考价值的文章主要介绍了新版以太坊Ethereum库ethersV5.0配合后端Golang1.18实时链接区块链钱包(Metamask/Okc)以及验签操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

区块链去中心化思想无处不在,比如最近使用个体抗原自检替代大规模的中心化核酸检测,就是去中心化思想的落地实践,避免了大规模聚集导致的交叉感染,提高了检测效率,本次我们使用Ethereum最新的ethersV5.0以上版本链接去中心化区块链钱包,并且通过后端Golang1.18服务进行验签。

在之前的一篇文章:青山不遮,毕竟东流,集成Web3.0身份钱包MetaMask以太坊一键登录(Tornado6+Vue.js3)中,我们使用的是ethersV4.0版本链接Metamask钱包,后端使用基于Python3.10的Tornado6.0框架,为了避免同质化,这里换成Okc钱包,客户端插件安装地址:https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge

前端链接浏览器钱包

首先卸载Vue2.0项目:

npm uninstall vue-cli -g

这里node版本要在8.9以上,npm版本要在6以上;

随后安装Vue3.0以上版本:

npm install -g @vue/cli

然后安装pnpm:

npm install -g pnpm

pnpm解决了传统npm的node_modules依赖困境,主要通过软链接和硬链接的结合使用,最终达到节省磁盘空间,安装速度快,严格高效等目的,这里推荐使用pnpm进行包管理。

接着,在当前项目中安装ethers库:

pnpm install ethers@5.7.2 --save

注意这里版本要求v5.0以上。

根据ethers5.4官方文档所述:https://docs.ethers.io/v5/getting-started/#getting-started–connecting-rpc

ethers5.0版本支持异步async操作,提高了效率,async函数就是使用async关键字声明的函数。它是 AsyncFunction 构造函数的实例,并且其中允许使用 await 关键字。async 和 await 关键字让我们可以用一种更简洁的方式写出基于 Promise 的异步行为,而无需刻意地链式调用 promise。

声明异步链接方法:

//链接逻辑  
    connect:async function(){  
  
  
},

随后请求链接当前的区块链钱包,并且异步获取公钥地址:

const provider = new ethers.providers.Web3Provider(window.ethereum);  
  
const accounts = await provider.send("eth_requestAccounts", []);

打印钱包地址:

console.log(accounts);

如图所示:

golang ethereum import wallet,区块链,golang,开发语言,后端,vue.js

这里已经打印出了okc钱包的公钥地址,随后生成签名:

const signer = provider.getSigner();  
  
  
var rightnow = (Date.now()/1000).toFixed(0)  
  
            console.log(rightnow);  
  
            signer.signMessage("Signing in at "+rightnow)  
              .then((signature) => {      
                        //打印签名和公钥  
                        console.log(accounts[0],signature);  
              });

这里通过provider对象获取签名者对象signer,接着调用signMessage方法来进行签名操作,加签算法采用最简单的字符串+时间戳的形式。

前端返回签名和公钥地址:

0x5cae6c39a56d99d68e7a20c76da0ec387e34249b 
0x1093b6dc7c6ae1340b2ebcf819dac1a7160b69a2abbb14d86a0696bd96d6b36923d5f3f82588f30a9353b327014338f51d4e7a90baa8052791a8017f156b57511c

后端Golang验签

验签的目的很好理解,如果在链接钱包的一瞬间,客户端被监听的其他软件恶意篡改公钥地址,那么很可能会给客户造成不可挽回的经济损失,所以暴露在前端的一切数据都需要后端进行校验,之前我们采用的是Python3.10版本进行验签操作:

from web3.auto import w3  
from eth_account.messages import defunct_hash_message  
import time  
  
public_address = "0x5cae6c39a56d99d68e7a20c76da0ec387e34249b"  
signature = "0xc7b06789e6710652d8540487055e0e75918c9c4366ec47c9e7008760df1dedd6506a908f466e448481afed3fe009bbdbfdfa16c28585eff68be54d600083d4251b"  
  
  
#rightnow = int(time.time())  
  
rightnow = 1670142219  
  
print(rightnow)  
  
     
original_message = 'Signing in at {}'.format(rightnow)  
  
message_hash = defunct_hash_message(text=original_message)  
  
signer = w3.eth.account.recoverHash(message_hash, signature=signature)  
  
print(signer)

程序返回:

1670142219  
0x5cAE6c39A56d99d68e7A20c76da0ec387e34249b

这里通过签名反向解析出了公钥地址,并且和前端获取的地址保持一致。

下面我们采用Golang1.18版本来验签,看看有什么不一样,首先安装Golang1.18,请移步:兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00

随后安装基于Golang的Ethereum库:

go get github.com/storyicon/sigverify

根据官方文档指引:https://github.com/storyicon/sigverify

构建main.go文件:

package main  
  
import (  
	"fmt"  
  
	ethcommon "github.com/ethereum/go-ethereum/common"  
	"github.com/storyicon/sigverify"  
)  
  
func main() {  
	valid, err := sigverify.VerifyEllipticCurveHexSignatureEx(  
		ethcommon.HexToAddress("0x5cae6c39a56d99d68e7a20c76da0ec387e34249b"),  
		[]byte("Signing in at 1670142219"),  
		"0xc7b06789e6710652d8540487055e0e75918c9c4366ec47c9e7008760df1dedd6506a908f466e448481afed3fe009bbdbfdfa16c28585eff68be54d600083d4251b",  
	)  
	fmt.Println(valid, err) // true <nil>  
}

这里sigverify.VerifyEllipticCurveHexSignatureEx方法有三个参数,分别是公钥地址,签名字符集以及前端返回的签名字符串,返回值为valid:

➜  mydemo git:(master) ✗ go run "/Users/liuyue/wodfan/work/mydemo/src/mytest.go"  
true <nil>

如果验签通过会返回布尔值:true。

至此,后端验签流程就结束了。

结语

总体而言,前端Ethers采用了ES7新语法async/await实现了重大改进,它提供了一种使用同步代码样式异步链接钱包对象的方式,而且不会阻塞主线程,而后端Golang作为编译型语言验签流程反而比解释型的Python更加简单方便。文章来源地址https://www.toymoban.com/news/detail-788229.html

到了这里,关于新版以太坊Ethereum库ethersV5.0配合后端Golang1.18实时链接区块链钱包(Metamask/Okc)以及验签操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 11M 以太坊 ethereum OpenZeppelin : 开发智能合约

    • 设置项目 • 第一份合同 • 编译 Solidity • 添加更多合约 • 使用 OpenZeppelin 合约 • OpenZeppelin Tutorials 教程 • Contact 联系方式 创建项目后的第一步是安装开发工具。 以太坊最流行的开发框架是Hardhat,我们用ethers.js介绍了它最常见的用途。下一个最受欢迎的是使用web3.js的

    2024年02月11日
    浏览(43)
  • 11U 以太坊 ethereum OpenZeppelin : 升级智能合约

    • 升级中有什么 • 使用升级插件升级 • 升级如何运作 • 初始化 • 升级 • 测试 • OpenZeppelin Tutorials 教程 • Contact 联系方式 使用OpenZeppelin 升级插件部署的智能合约可以升级以修改其代码,同时保留其地址、状态和余额。这使您可以迭代地向项目添加新功能,或修复您在

    2023年04月08日
    浏览(51)
  • 以太坊go-ethereum源码研读(二)applyTransaction相关

    在前面以太坊go-ethereum源码研读(一)中所讨论的 Process 函数调用了该 applyTransaction 函数来执行交易相关指令,于是进一步对该函数进行分析,以明晰以太坊交易的全过程。 分析过程中一些结构体或函数在以太坊go-ethereum源码研读(一)中已经讨论到,对这些结构体和函数则

    2023年04月25日
    浏览(38)
  • 【区块链 | 智能合约】Ethereum源代码(8)- Ethereum服务和以太坊P2P协议发送广播源码分析

    在“【区块链 | 智能合约】Ethereum源代码(2)- go-ethereum 客户端入口代码和Node分析”一文中,我们提到Ethereum作为一个service,被Node 注册进去。Node start的时候会启动其注册的所有服务,Ethereum service也是一样。 初始化方法

    2024年01月21日
    浏览(54)
  • google bigquery如何查询以太坊ethereum数据 sql怎么写

    文档介绍 https://console.cloud.google.com/marketplace/details/ethereum/crypto-ethereum-blockchain?project=aqueous-tesla-294801 如查询 What are the 10 most popular Ethereum collectibles (ERC721 contracts), by number of transactions? 其它查询方式 https://ethereum-etl.readthedocs.io/en/latest/commands/ kaggle数据格式 Ethereum Blockchain | Kaggl

    2024年02月13日
    浏览(40)
  • 以太坊燃料费用定价机制Ethereum Gas Fee Pricing Mechanism

            以太坊燃料在交易过程中起着重要作用。从以太坊系统的角度,通过燃料费用提高恶意交易的成本减少攻击者的攻击收益,增强了以太坊交易的安全性,也促使合约开发者优化设计减少合约对以太坊算力的消耗;从交易发起者角度,通过设定燃料相关的参数,以尽

    2024年01月15日
    浏览(62)
  • 【区块链 | 智能合约】Ethereum源代码(10)- 以太坊Downloader源码分析

    上一节分析到Fetcher用于同步网络节点的新区块和新的交易数据,如果新区块和本地最新的区块相隔距离较远,说明本地区块数据太旧,Fetcher就不会同步这些区块。这时候就要借助Downloader来同步完整的区块数据。 一,启动Downloader handler 初始化的时候会进行Downloader的初始化:

    2024年02月15日
    浏览(45)
  • 11O 以太坊 ethereum OpenZeppelin : 部署智能合约并与之交互

    • 建立本地区块链 • 部署智能合约 • 从控制台交互 • 以编程方式交互 • 获取合约实例 • 调用合约 • 发送交易 • OpenZeppelin Tutorials 教程 • Contact 联系方式 在开始之前,我们首先需要一个可以部署合约的环境。以太坊区块链(通常称为“主网”,表示“主网络”)需要

    2023年04月08日
    浏览(97)
  • 【区块链 | 智能合约】Ethereum源代码(11)- 以太坊核心BlockChain源码分析

    前面几节都在分析以太坊的通信协议,怎么广播,怎么同步,怎么下载。这一节讲讲以太坊的核心模块BlockChain,也就是以太坊的区块链。 一,BlockChain的初始化 Ethereum服务初始化func init() 的时候会调用core.SetupGenesisBlock来加载创始区块。顾名思义,创始区块就是以太坊区块链中

    2024年02月08日
    浏览(48)
  • 【区块链 | 智能合约】Ethereum源代码(3)- 以太坊RPC通信实例和原理代码分析(上)

    上一节提到,以太坊在node start的时候启动了RPC服务,以太坊通过Rpc服务来实现以太坊相关接口的远程调用。这节我们用个实例来看看以太坊 RPC是如何工作的,以及以太坊RPC的源码的实现 1,RPC启动命令 : go-ethereum的RPC服务默认地址:http://localhost:8545/ 通过以下命令修改默认地

    2024年02月02日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包