区块链网站|NFTS 以太坊(ETH) 以太坊库ethersV5.0配合后端Go实时链接区块链钱包

以太坊库ethersV5.0配合后端Go实时链接区块链钱包

广告位

以太坊Ethereum库ethersV5.0配合后端Go实时链接区块链钱包验签

区块链分权的思想无处不在。比如最近用个体抗原自测代替大规模集中式核酸检测,就是去中心化的做法,避免了大规模聚集带来的交叉感染,提高了检测效率。这次我们用的是以太坊的最新版本,ethersV5.0或以上,链接去中心化的区块链钱包,通过后端Golang1.18服务进行检查。

上一篇:青山不盖,毕竟东流,集成Web3.0身份钱包MetaMask一键登录以太坊(Tornado6 Vue.js3),我们用ethersV4.0版本链接Metamask钱包,后端用基于Python3.10的Tornado6.0框架,为了避免同质化,换成Okc钱包。客户端插件安装地址:https://chrome . Google . com/web store/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciolgge。

前端链接浏览器钱包首先卸载Vue2.0项目:

Npm卸载vue-cli -g这里node的版本要在8.9以上,npm的版本要在6以上;

然后安装vue版本3.0或以上:

Npm安装-g @vue/cli,然后安装pnpm:

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

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

Ppnpm installethers @ 5.7.2-save注意,这里的版本要求v5.0以上。

根据以太官方文档5.4:https://docs.ethers.io/V5/getting-started/#入门-连接-RPC。

Ethers5.0版支持异步async操作,提高了效率。异步函数是用async关键字声明的函数。它是AsyncFunction构造函数的一个实例,其中允许使用await关键字。Async和await关键字允许我们以一种更简洁的方式编写基于promise的异步行为,而不用特意在chain中调用Promise。

声明异步链接方法:

//链接逻辑connect:async function(){},然后请求链接当前区块链钱包,异步获取公钥地址:

const provider=new ethers . providers . web 3 provider(window . ether eum);const accounts=await provider . send(' eth _ request accounts '[]);打印钱包地址:

console.log(账户);如图所示:

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

const signer=provider . get signer();var rightnow=(Date.now()/1000)。to fixed(0)console . log(right now);Signer.signmessage(“立即在登录”)。然后((签名)={//打印签名和公钥console.log (accounts [0],签名);});这里通过provider对象获取signer对象signer,然后调用signMessage方法进行签名操作。签名算法采用最简单的字符串时间戳形式。

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

0 X5 ca E6 c 39 a 56d 99d 68 e 7 a 20 c 76 da 0 EC 387 e 34249 b0x 1093 b 6 DC 7 c 6 AE 1340 B2 ebcf 819 da C1 a 7160 b 69 a2 abb b14 d 86 a 0696 BD 96d 6 b 36923 D5 F3 f 82588 f 30 a 9353 b 327014338 f 51d 4 e 7 a 91 a 8017 f 156 b 5755如果客户端监控的其他软件在链接钱包的瞬间恶意篡改公钥地址,很可能会给客户造成不可挽回的经济损失,所以所有暴露在前端的数据都需要后端进行验证。以前,我们使用Python3.10进行签名验证:

from web 3 . auto import w3 from eth _ account . messages import defunct _ hash _ message import time public _ address=' 0 x5c E6 c 39 a 56d 99d 68 E7 a 20 c 76 da 0 EC 387 e 34249 b ' si signature='0xc 7b 06789 e 6710652d 8540487055 E0 e 75918 c9c 4366 EC 47 c 9 e 7008760 D1 dedd 6506 a 908 f 466 e 4 e 4format(right now)Message _ hash=default _ hash _ Message(text=original _ Message)signer=w3 . eth . account . recover hash(Message _ hash,signature=signature)print(signer)程序返回:

16701422190 X5 CAE 6 c 39 a 56d 9d 68 e 7 c 20 76 da 0 EC 387 e 34249 b这里的公钥地址是通过反向签名解析的,与前端获取的地址一致。

我们用GOLANG版本来检查一下,看看有什么不同。一、安装Golang1.18,请动:全程被兔子覆盖,Golang1.18是入门精炼课程。丁白入驻鸿儒,全平台(Sublime 4)Go lang开发环境打造EP00。

然后安装基于Golang的以太坊库:

戈吉特github.com/storyicon/sigverify由官方文件指导:https://github.com/storyicon/sigverify

构建main.go文件:

package main import(' fmt ' ethcommon ' github . com/ether eum/go-ether eum/common ' ' github . com/story icon/SIG verify ')func main(){ valid,err :=sigverify。verifyellipticurvehexsignatureex(ethcommon。hexto address(' 0 X5 ca E6 c 39 a 56d 99d 68 e 7 a 20 c 76 da 0 EC 387 e 34249 b '),[]byte('签到1670142219 '),' 0 xc7 b 06789 e 6710652d 8540487055 E0 e 75918 c 9 c 4366 EC 47 c 9 e 7008760 df 1 dedd 6506 a 908 f 466 e 48481 a fed 3

mydemogit:(master)gorun '/users/刘悦/wod fan/work/my demo/src/mytest . go '如果验证通过,truenil将返回布尔值true。

至此,后端签名流程结束。

结论总体来说,前端Ethers采用ES7新语法async/await实现了显著的改进。它提供了一种使用同步代码风格异步链接wallet对象的方法,并且它不会阻塞主线程,而后端Golang作为编译语言验证过程比解释Python更简单、更方便。

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/jzb/ytf/55441.html
上一篇
下一篇

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

返回顶部