Your location: Home > News > Details

有了ChainLink,以太坊layer 2能为Filecoin引流吗?(下)

2021-05-31 14:16

本文的上篇《有了ChainLink,以太坊layer 2能为Filecoin引流吗?(上)》分析了提高以太坊可扩展性的关键点——交易记录中的数据项,而单笔合约创建交易代码体积超过所在区块整体体积一半大小,极大地影响了网络可扩展性。通过把IPFS作为以太坊的存储Layer 2,托管合约代码,只保留代码哈希(-99.9%),降低区块大小。将更多交易打包进区块,增加可扩展性。那么究竟该如何实现呢? Filecoin+ChainLink IPFS网络节点或Filecoin的检索矿工可以作为ChainLink节点提供高效、安全、稳定的外部数据服务,并获得相应奖励。通过将合约数据托管到一个去中心化的预言机网络连接的存储网络,在降低合约交易的数据量,提高以太坊可扩展性的同时,还能保证和以太坊相同的安全性。

 一、切入

一般的合约交易的目的都是调用(call)目标合约账户中合约代码的函数(Function),而我们这次讨论的切入点点一类特殊的交易——合约创建交易。(如果对细节不感兴趣的同学这部分可以先跳过)

在一个合约被调用前,首先应该通过发送一笔交易被创建出来。这类交易与普通交易存在两点不同:

  1. 接收人。创建合约交易的接收方地址为固定的零地址——0x0;

  2. 合约代码。交易的“数据”项中的代码并不是合约代码,而是需要经过EVM执行计算后的结果。

文章的上半部分给出了一笔以太坊交易的数据结构,下面我们来具体解刨一下合约创建交易中的数据项:

{“data”: DeployCode+ ContractCode + auxdata}

  • Deploy code只在合约的初始化和部署时被执行,具体来说它的作用分为两点:

  1. 运行构造函数(可以分为constructorCode和constructorData),并设置初始存储变量(如contract owner);

  2. 将ContractCode部分复制并放入内存 ,将其返回给EVM作为合约代码。

  • ContractCode就是合约被创建部署后会被调用的合约代码;

  • Auxdata是加密指纹的源代码,用于验证。

注:Deploy code虽然只使用一次便被搁置了,但是由于区块中交易树的根哈希形成了存储在块头的一部分,因此有必要将合约创建数据保留作为交易的一部分。 为了更加直观的展示,我们创建了一个空合约C:

并将它部署在以太坊测试网:

// Deploy code(只使用一次,用于初始化)60606040523415600e57600080fd5b5b603680601c6000396000f300// Contract code(被调用)60606040525b600080fd00 注意,在区块链的一笔交易记录中,代码就是数据。而在合约执行或被调用时,数据就是代码。 二、合约代码体积

然而,一个正式部署在以太坊主网的合约是这个样子的……

来源链接:https://etherscan.io/tx/0x0c8bf04e67d62923f8c8ecc1409b68d42adfd6e2cf102f7d7c9141a1472e408e 这笔合约创建交易的代码部分共计28,224字节,而包含这笔交易的区块大小36,405字节,占比77.5%。

很显然,一笔合约创建交易占用了过多的区块空间,使得单个区块包含的交易数下降,很大程度上影响了以太坊的可扩展性! 三、IPFS来了

由此,我们想到可以把交易数据项中的代码存储在IPFS网络中,在数据项中只保留代码的哈希值。

如此一来,在上面的例子中代码被代码哈希取代,由36,405字节缩减为32字节,体积仅为原来的0.088%。可以为原来区块让出更多交易空间。

注:只要代码大于32字节,就可以把它替换成它哈希

然而,由于IPFS网络节点目前并不稳定,并且以太坊源码中并不包含托管合约的代码。因此,为了实现合约代码在链下高效、安全、稳定的托管。

四、Chainlink来了

IPFS网络节点或Filecoin的检索矿工可以作为ChainLink节点提供外部数据服务,并获得相应奖励。通过将合约数据托管到一个去中心化的预言机网络连接的存储网络,在降低合约交易的数据量、提高以太坊可扩展性的同时,还能保证和以太坊相同的安全性。

Chainlink工作流 结合Chainlink工作流,代码的托管流程流程如下:

  1. 合约的创建者将代码托管在IPFS网络中,并在User-SC合约中发布托管需求;

  2. Chainlink网络节点中的预言机拍下托管需求,并作为IPFS或Filecoin节点存储代码或代码碎片;

  3. 所有Chainlink节点互相验证代码是否被保存在,如果验证通过则返回Yes代表代码被成功托管。否则失败节点罚没保证金;

  4. 发放代码托管奖励给Chainlink节点,保持代码托管的稳定和高效;

  5. 将代码哈希值放入交易的数据项,并提交至区块等待被矿工打包。

矿工打包时,只打包哈希值。由于存档节点仍然保存全部完整交易、状态和收据,随时可以验证。虽然在IPFS网络检索的时间会降低单个交易被打包进区块链的时间会增加,但是由于区块体积的下降,单个区块可以打包更多的交易,降低网络的拥挤。代码托管扩展了更大的存储和检索网络,结合哈希寻址的特性,帮助节点更快同步数据。 相应地,代码调用流程:

根据合约账户中代码的哈希在IPFS或Filecoin网络中检索相应代码。其中,deploy code不用下载,只用验证哈希。Contract code需要被下载至EVM,计算后返回状态。 

综上,面对每月百万级的合约创建量,和占据区块大小过半的合约代码。通过将以太坊区块中体积较大的合约代码托管至链下,链上交易数据可以只保留代码哈希的方法给交易瘦身(99.9%)。托管工作由IPFS/Filecoin和Chainlink共同负责的,前者负责代码的存储和检索,后者(去中心化预言机)负责前者和以太坊区块链的交互,以及对存储网络节点发放奖励保持代码托管的高效和稳定。最终,达到增加单块的交易数,提高以太坊的可扩展性的目的。 

引用:

https://github.com/ethereumbook/ethereumbook/blob/develop/06transactions.asciidoc

https://fullstacks.org/materials/ethereumbook/14_evm.html

https://ethereum.org/en/developers/docs/blocks/

https://ethereum.org/en/developers/docs/nodes-and-clients/

https://medium.com/@hayeah/diving-into-the-ethereum-vm-part-5-the-smart-contract-creation-process-cb7b6133b855

https://medium.com/paradigm-fund/chainlink-detailed-review-on-the-project-9dbd5e050974

New fund password
Confirm new password
Email Verification Code

Please upgrade your browser version

You are using an old version of the browser. Please upgrade your browser for a better experience.

Notice of Legal Statements and Policy Limitations

Dear users, due to policy restrictions, mainland China IP addresses will be forbidden to access this website, registration and use are prohibited. If you are a mainland China user, please exit safely, if you continue to use the risks caused The responsibility and responsibility will be solely borne by you. At the same time, the platform has the right to refuse to provide services. Thank you for your understanding, please accept and agree!