新版以太坊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);

如图所示:

这里已经打印出了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更加简单方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16224.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以太坊Geth Trie源码解析

引言 Merkle Patricia Trie 是一种经过改良的、融合了默克尔树&#xff08;Merkle Trie&#xff09;和前缀树&#xff08;Patricia Trie&#xff09;两种树结构优点的数据结构&#xff0c;是以太坊中用来存储键值数据对&#xff08;Key, Value&#xff09;的重要树形数据结构。…

以太坊编程-Geth

前提&#xff1a;开发环境为Windows版本 一、下载安装 geth安装官网地址&#xff1a;https://geth.ethereum.org/downloads/ 安装时&#xff0c;根据提示一步一步安装即可 安装完成之后&#xff0c;需要进行配置环境变量 二、创世区块部署 新建.json文件&#xff1a;新建记事…

国华小状元1号年金险怎么样?好不好?

很多家长开始为孩子做好未来的教育准备&#xff0c;有一些家长过来私信学姐&#xff0c;少儿年金险有没有必要给孩子买一个&#xff1f; 正巧&#xff0c;学姐测评了一款少儿年金险&#xff0c;是国华人寿旗下的——国华小状元1号少儿年金保险。 听说保障内容不错&#xff1f…

风电场运营实践 | 麒麟信安助力国华投资山东公司集控中心实现安全智慧化运营

国华能源投资有限公司旗下山东分公司&#xff08;简称&#xff1a;国华投资山东公司&#xff09;的集控中心是山东省覆盖风电场装机规模最大的集控中心。日前&#xff0c;依托于部署的麒麟信安操作系统、麒麟信安服务器虚拟化等产品&#xff0c;国华投资山东公司智慧新能源集控…

约瑟夫环问题——数据结构p76页(耿国华主编)

约瑟夫环问题 题目&#xff1a; 约瑟夫问题的一种描述是&#xff1a;编号为1&#xff0c;2&#xff0c;……&#xff0c;n的n个人按顺序顺时针方向围坐一圈&#xff0c;每人持有一个密码&#xff08;正整数&#xff09;。开始时任选一个整数作为报数上限m&#xff0c;从第一个人…

数据结构用c语言描述第二版高等教育出版社,耿国华《数据结构-C语言描述(第2版)》,高等教育出版社...

《数据结构用C语言描述(第2版)》根据教育部计算机类专业教学指导委员会制定的“数据结构与算法”课程大纲和《全国硕士研究生入学统一考试计算机专业基础综合考试大纲》的要求而编写,跟踪技术发展需要,教材体系科学,内容简洁实用。《数据结构用C语言描述(第2版)》共10章。内…

oracle xe gentoo,Oracle在gentoo下安装

补充: 解决ORACLE10G安装界面中文乱码问题&#xff0c;修改以下变量使安装界面为英文。 export LC_CTYPEen_US.UTF-8 以下为原文 1.OS:Gentoo-linux-2.6.23-rc5 Oracle:Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86 下载地址&#xff1a; 2.使用管理员账户建立Or…

童国华正式执掌大唐电信集团

近日&#xff0c;国资委在其官方网站发布公告&#xff0c;对电信科学技术研究院&#xff08;也就是业内熟知的“大唐电信科技产业集团”&#xff09;进行了人事任免。 经研究&#xff0c;任命童国华为电信科学技术研究院党组院长&#xff0c;免去真才基的电信科学技术研究院院长…

计算机导论与c语言耿国华pdf,计算机导论与C语言

计算机导论与C语言 耿国华 电子工业出版社 出版时间&#xff1a; 2005-9 出版社&#xff1a; 电子工业出版社 作者&#xff1a; 耿国华 Tag标签&#xff1a; 无 内容概要 全书共16章&#xff0c;内容分为两大部分。第一部分为计算机导论部分&#xff0c;包括计算机的基本概念、…

数据结构-用C语言描述耿国华版总结笔记(上篇)

数据结构-----用C语言描述 两年前的考研笔记了&#xff0c;再回首&#xff0c;不忍唏嘘&#xff0c;时间过得真快。 下篇&#xff1a;https://blog.csdn.net/weixin_38244174/article/details/90707831 第一章绪论 &#xff08;1&#xff09;数据结构&#xff1a;相…

数据结构 耿国华 第三版

前言&#xff1a;本人在各大网站都查过答案&#xff0c;但是答案版本和第三版都不一样&#xff0c;只是有个别大题重复&#xff0c;在以下整理的答案为自己所做&#xff0c;如有不对之处&#xff0c;不承担任何后果。 第三章 B 考察队列的应用C C C 取一个n和i 自己试试就行了…

数据结构-用C语言描述耿国华版总结笔记(下篇)

第六章 树与二叉树 &#xff08;一&#xff09;二叉树 1.1树相关术语&#xff1a; 度&#xff08;一个结点的子树个数&#xff09;&#xff1b;结点的层次&#xff08;从该结点开始往下有多少层&#xff09;&#xff1b;树的度&#xff08;树中所有结点的度的最大值&a…

c语言程序设计答案 耿国华,数据结构---C语言描述-(耿国华)-课后习题答案

数据结构---C语言描述-(耿国华)-课后习题答案 第一章 习题答案2、√3、 (1)包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3)数据对象、对象间的关系、一组处理数据的操作(4)指针类型(5)集合结构、线性结构、树形结构、图状结构(6)顺序存储、非顺序存储(7)一对一、一对多、多…

数据结构c语言描述耿国华,数据结构c语言描述耿国华习题及答案

数据结构c语言描述耿国华习题及答案 第一章 习题答案 2、 √ 3、 (1 )包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3 )数据对象、对象间的关系、一组处理数据的操作(4 )指针类型(5 )集合结构、线性结构、树形结构、图状结构(6 )顺序存储、非顺序存储(7 )一对一、一对多、多…

《人人都能玩赚ChatGPT》:一份简明易懂的ChatGPT技术指南

在科技日新月异的时代&#xff0c;人工智能无疑成为了当之无愧的热点话题。对于许多对前沿技术感兴趣的人来说&#xff0c;掌握聊天机器人技术似乎是一个遥不可及的梦想。然而&#xff0c;一本名为《人人都能玩赚ChatGPT》的书籍正在改变这一现状。本书由黄小刀和刘楚宾两位老师…

手把手教你向国际知名翻译公司Transperfect投递简历

手把手教你向国际知名翻译公司Transperfect投递简历 之前已经跟大家聊过为什么要向国外翻译公司投递简历&#xff0c;其实核心就一点&#xff0c;就是想要真正翻倍儿地提高单价收入&#xff0c;只能往国外走一走。 那么现在我们以Transperfect为例介绍下如何操作&#xff0c;其…

3名离职员工窃取公司源码,半年狂赚 1.5 亿元;苹果成全球首家市值超 3 万亿美元公司;《孤岛惊魂》源码被公开|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

野心藏住不住了!OpenAI或在悄悄聘请国际承包商,以培训其软件工程方面的人工智能。

OpenAI或在悄悄聘请国际承包商&#xff0c;以培训其软件工程方面的人工智能。本文将通过一场针对敏捷专家职位的ChatGPT工作面试指导中抽取的七个问题揭晓ChatGPT的真实水平。 外媒Semafor的一份报告显示&#xff0c;OpenAI已悄悄聘请了数百名国际承包商&#xff0c;以培训其…

替家长向ChatGPT问了10个问题,个个问到了心坎上!

长江日报 多地中小学校陆续开学 孩子们重返校园 不少家长表示&#xff1a; 有期待、有烦扰、有开心…… 有些家长开玩笑地问道&#xff1a; 孩子开学了 作为家长&#xff0c;我该如何为自己庆祝一下&#xff1f; 新学期&#xff0c;想让孩子考进班里前三 有什么诀窍吗&#xff…

全新创富机遇来临,ChatGPT将带来3大赚钱方向,未来20年都是趋势

ChatGPT绝不是一个单纯的聊天软件&#xff0c;它的出现即将改变世界&#xff0c;未来20年将带来3大创富方向。 1、乔布斯与ChatGPT的关系 2、GPT智能化商业时代来临 3、每个普通人都能做的项目 一 ChatGPT到底是什么&#xff1f;在大多数人的认知里都觉得它是一个智能聊天软…