将quorum区块联盟链中 input字段转为中文的方法(包含隐私交易)

将quorum区块联盟链中 input字段转为中文的方法(包含隐私交易)

本文基于web3,通过RPC窗口调用quorum区块联盟链(基于以太坊)的数据。

一、DApp调用以太坊数据存在的问题

在quorum中,sendTransaction支持数据的传送,其中有data字段用来存放数据。但是data字段只支持hex格式的数据,因此我们可以利用web3.toHex将任意数据转化为Hex格式数据,这样我们可以通过web3.toHex这个命令传送任意字段。

但是这样存在两个问题:
一、我们getTransaction得到是一个Hex格式的数,但是我们想要的中文。在web3 1.0版本中有web3.HextoUtf8命令可以转化,但是geth版本目前还是web3 0.20.7,无法使用该命令,我们需要自己编函数将Hex格式数转为中文。
二、quorum是有私有交易功能的,私有交易的过程比公开交易多了一步,在将input写入tx中时,会先将input在enclave中通过双方公钥转化一次(具体流程自己谷歌 quorum private transaction),我们最后得到的input已经不是原始的input,通过对交易的input转码,只能得到一堆乱码,我们必须先对私有交易的input预处理,才能得到我们想要的总问。

二、公有交易Input转码

直接写代码,可以将hex格式转为UTF8/中文,这是站内一个大神写的,原文章链接在后面参考资料里面。愿文章没得现成的代码,我将代码贴出。这个直接用在js或html文件里面。

encodeUtf8: function (str) {
     var tempstr = ''
     try{
       tempstr = decodeURIComponent(str.replace(/\s+/g, '').replace(/[0-9a-f]{2}/g, '%$&'));
     }
     catch(err){
       for (b = 0; b<str.length; b = b+2){
         tempstr = tempstr +String.fromCharCode(parseInt(str.substr(b, 2),16));
       }
     }
     return tempstr
   },

三、私有交易Input转码

Quorum中私有交易多转化了一次,导致我们解决,我们需要将tx中的input预处理转为原来的Input,我找了一段时间,发现官方有一个命令可以解决eth.getQuorumPayload(string),string为交易中的input值,返回结果为原有的Input值。在quorum命令行中可以实现这个功能。

但是当我在前台利用web3.eth.getQuorumPayload()进行调用时,提示我getQuorumPayload not defined。根据字面意思,就是这个变量未被定义,原来我js功底差,不知道怎么调,搜索了一下,关于这个东西的介绍的很少,只有几个网页,介绍的方法也不行。

我估摸就是web3里面没得这个东西,这个是quorum自己加的一个东西,我在web3 0.20*和web3 1.0 版本说明中都没看到这个命令,查看web3.eth也没看到这个命令。我就想着看看其它命令是怎么实现的。

然后在网页控制台搜了一下,发现在web3.js文件和eth.js文件对这些变量进行了定义,而且定义的很简单。我就去DApp的文件里面找到了web3的包,Dapp这个文件夹名字为node_modules,这是node.js在npm后产生的。在里面找到web3的包,找到web3.js、eth.js里面的var methods = function (){}里面把getQuorumPayload()定义上即可(只需改一个即可,建议改eth,在web3.js里面改,命令需要改成web3.getQuorumPayload())。定义代码如下:

  var getQuorumPayload = new Method({
        name: 'getQuorumPayload',
        call: 'eth_getQuorumPayload',
        params: 1,
        inputFormatter: [utils.toHex],
        outputFormatter: utils.toHex
    });

再在return那里加上getQuorumPayload即可,注意这里需要一一对应。改完之后保存,再次在js文件里面运行web3.eth.getQuorumPayload()就可以正常使用了。

参考资料:
1、[https://docs.goquorum.com/en/latest/Getting%20Started/api/]
2、https://blog.csdn.net/CHENYUFENG1991/article/details/81259248

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值