调用Eosjs进行cloudwallet与anchorwallet双重签名实现步骤

感谢@encoderlee 分享的两篇文章,作为我学习EOS签名的基础

【WAX链游】EOS网络第三方代付CPU资源【原理】_encoderlee的博客-CSDN博客

​​​​​​【WAX云钱包】解决Cloudflare通过SSL指纹识别实现的反爬虫机制_encoderlee的博客-CSDN博客_cloudflare 爬虫其中,反爬机制我使用了cloudscraper库在进行connect的时候没有加入指纹信息,导致无法通过cloudflare验证。后来改用作者提供的方法一代码顺利通过。

我在使用python36版本时,无论是使用反扒库还是直接用代码更改指纹,都会有报错,应该是培养python36自带的ssl版本库不兼容问题。没有花太多时间去分析,直接使用python37  ok。

在脱离浏览器的过程中,遇到以下问题(由于本人之前没有学习过JavaScript,因此很多问题可能是一些基础性错误,本文仅按照本人的实践步骤排序):

1.将wax签名与eos签名分为两个步骤,封装至js代码的两个函数中,js代码直接在html页面中调用正常,可顺利完成交易操作。

2.但此时任然需要一个浏览器的壳子来执行js代码。因此采用PyExecJS库来执行js代码。执行过程中报错很多,且错误不明确。

3.直接在node中运行js文件,js文件中全局执行封装的函数,参数写死在js文件中。

4.html中引用的js代码可以用src=xxx  的格式导入,但纯js则不行(在此过程中还试图使用dom模拟一个页面出来,没走通,暂且不提)

5.js引用模块有 import 与 require 两种模式,而且两种模式视乎不能兼容存在。由于EOSJS github中的给出的示例是import模式,但fetch模块又用的是require,这个地方耽误了大量时间。

6.经反复验证,确认采用import模式导入eosjs模块才是正解,但在node运行时报错。原因时需要在js文件所在目录创建一个package.json文件,设置其中的"type": "module" 。该文件可以通过

npm init 指令创建。

7.最开始 eosjs JsonRpc对象初始化时没有设置 fetch的,中间一直报错,后来直接定位到报错文件,加入日志后发现JsonRpc对象中的fetch为空。这个对象我理解是请求数据之类的。在html中不报错是因为浏览器有一个全局对象。这个参数要用键值对的字典形式传递。

8.ok,至此,node中可成功调用包装的js库。但在使用 PyExecJS执行的时候仍然出现报错,大意还是require和import导入模式的问题。但这方面相关资料实在太少,另外我看到了一些文章说PyExecJS库将不再维护。

9.后来尝试用popen来执行这部分代码,可执行成功,但使用readlines获取结果的时候报错,并且传参很难受。因此调整思路,在js代码中建立一个轻型http服务。用于和python代码交互,服务的基本思路就是通过url参数判断是调用哪个函数,body中传入json格式数据,解析数据后调用js内函数执行交易。

一些小的问题:

1.npm安装包时用的不是全局安装模式,所有依赖包安装在我的js项目下。

2.一定要接收eosjs交易的异常,并进行转换(不知道怎么将http异常直接转换为http的request返回,这里面还调整了不少代码) 用selenium执行脚本的时候,异常会直接返回给python程序。自己写服务的话就要自己处理异常。

3.中途觉得调用js整个代码太复杂了,其实就是需要获取一个序列化的交易数据。但序列化的方法是从区块链服务器中返回的ABI构建的,由于本人一方面不属性JavaScript,另一方面对EOS的ABI又是已知半解,并且核对返回的序列化数据和eospy模块里返回结果存在差异(也有可能是我分析有问题,但实在是没有精力去搞了)

4.cloudwallet的http请求发送其实很简单,把cloudscraper搞定之后基本可以当作明文数据来看。先发送一个登录请求获取一个cookie。然后添加cookie再发送一个请求获取到token,之后所有的签名请求都使用这个token验证即可。

虽然cloudwallet有一个谷歌的reCapture验证,但、这个好像只会在前端生效,发送请求时这个参数传空也没有问题。

2022-04-13补充:

今天js的http服务挂掉了2次,没有抛出异常,没分析出原因。

花了一些时间,研究了eospy库中序列化的格式,发现和eosjs序列化结果基本一致,至此,已能完全脱离浏览器、js代码,在纯python代码中运行。收工。

猜你喜欢

转载自blog.csdn.net/zlq1233217/article/details/124146057
今日推荐