加载中 ...

刺猬文│web前端产生以太坊交易的流程

2019-11-04 22:46 编辑:btc268.com 来源:区块链资讯

  

  (图片出自网络,版权归原作者所有)

一个朋友问了我一个关于以太坊的问题:如果对于交易结构进行了修改,怎么才能在web前端来发起交易?交易的流程是怎么样的?

我刚好在前段时间给播客链中增加了这个功能,所以能够详细解答。

我是这么给他分析的:

首先,以太坊在Web前端产生交易的时候,需要两个js文件,一个是web3.js,这个js文件可以在以太坊的代码中找到(internal\jsre\deps目录下);另一个是ethereumjs-tx-1.3.3.min.js,这个js文件在以太坊代码中是不存在的。不过我们可以在Github上找到(https://github.com/ethereumjs/ethereumjs-tx)。在前端产生交易并对交易进行签名的实现主要在第二个js文件中。

现在我们来假设我们的交易结构修改为如下:

  

可以看出在原始的交易结构中增加了Major、Minor、Name、Enctytion、Extra、Ip等字段。

我们知道对于一个交易来说,交易的Hash非常重要,这个交易Hash是通过交易结构中的字段内容计算出来的。哪些字段参与了计算呢?它们的顺序是怎么样的呢?

在以太坊代码中的交易计算,Hash函数实现代码在transaction_signing.go文件中(core\types目录下)。以太坊对于不同的版本用来计算的Hash函数是不一样的。例如播客链就采用的是Homestead版本的Hash函数,其实现为:

  

从截图可以非常清楚的看到求Hash函数的字段以及它们的顺序。

有了以上的知识,我们来了解web前端产生交易、交易签名,以及交易流程就比较好理解了。

Web前端要产生交易,js中所定义的交易的结构就必须是和以太坊中定义的一致。js定义结构是在ethereumjs-tx-1.3.3.min.js文件中:

  

这段代码,我们只要按照go语言中定义的格式以及顺序定义js中Transaction就可以了。

定义完了结构,我们再来看看js求hash的部分如何进行修改。

在js中求hash的代码在:

  

注意这个函数中的raw.slice(0,13),这个说明计算hash一共使用了13个字段,这13个字段是从字段0开始的。

了解了这个过程,我们来看看如何用web前端来产生一个交易:

  

这段代码是一个例子,是使用web前端产生一个交易,并使用私钥对这个交易进行签名。

好了,现在交易我们产生了。那web产生交易后,流程是如何的呢?

交易产生以后,web调用SendRawTransaction函数会对交易进行编码,并将编码后的交易信息发送给以太坊节点,以太坊节点首先接收到这些信息的代码在api.go文件中(internal\ethapi目录):

  

从代码中可以看出,以太坊节点收到信息后,先进行解码,然后对将解码后的交易进行提交:

  

之后的过程,大家应该是非常清楚的我就不在此赘述了。

以上就是如何在web前端产生一个交易、交易签名,以及将交易发送给节点的流程。

关键词:比特币新闻 币牛牛

转载自比特币新闻网(www.btc268.com),提供比特币行情走势分析与数字货币投资炒币最新消息。

原文标题:刺猬文│web前端产生以太坊交易的流程

原文地址:http://www.btc268.com/ytf/xw/16813.html

本文来源:区块链资讯编辑:btc268.com

本文仅代表作者个人观点,与本网站立场无关。

本网站转载信息目的在于传递更多信息。请读者仅作参考,投资有风险,入市须谨慎!

'); })();