<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3186字,需瀏覽 7分鐘

           ·

          2021-04-06 13:17

          IPFS原力區(qū)原作

          本文的上篇《有了ChainLink,以太坊layer 2能為Filecoin引流嗎?(上)》分析了提高以太坊可擴(kuò)展性的關(guān)鍵點(diǎn)——交易記錄中的數(shù)據(jù)項(xiàng),而單筆合約創(chuàng)建交易代碼體積超過(guò)所在區(qū)塊整體體積一半大小,極大地影響了網(wǎng)絡(luò)可擴(kuò)展性。通過(guò)把IPFS作為以太坊的存儲(chǔ)Layer 2,托管合約代碼,只保留代碼哈希(-99.9%),降低區(qū)塊大小。將更多交易打包進(jìn)區(qū)塊,增加可擴(kuò)展性。那么究竟該如何實(shí)現(xiàn)呢?
           
          Filecoin+ChainLink
           
          IPFS網(wǎng)絡(luò)節(jié)點(diǎn)或Filecoin的檢索礦工可以作為ChainLink節(jié)點(diǎn)提供高效、安全、穩(wěn)定的外部數(shù)據(jù)服務(wù),并獲得相應(yīng)獎(jiǎng)勵(lì)。通過(guò)將合約數(shù)據(jù)托管到一個(gè)去中心化的預(yù)言機(jī)網(wǎng)絡(luò)連接的存儲(chǔ)網(wǎng)絡(luò),在降低合約交易的數(shù)據(jù)量,提高以太坊可擴(kuò)展性的同時(shí),還能保證和以太坊相同的安全性。
           
          一、切入

          一般的合約交易的目的都是調(diào)用(call)目標(biāo)合約賬戶中合約代碼的函數(shù)(Function),而我們這次討論的切入點(diǎn)點(diǎn)一類特殊的交易——合約創(chuàng)建交易。(如果對(duì)細(xì)節(jié)不感興趣的同學(xué)這部分可以先跳過(guò))

          在一個(gè)合約被調(diào)用前,首先應(yīng)該通過(guò)發(fā)送一筆交易被創(chuàng)建出來(lái)。這類交易與普通交易存在兩點(diǎn)不同:
          1. 接收人。創(chuàng)建合約交易的接收方地址為固定的零地址——0x0;

          2. 合約代碼。交易的“數(shù)據(jù)”項(xiàng)中的代碼并不是合約代碼,而是需要經(jīng)過(guò)EVM執(zhí)行計(jì)算后的結(jié)果。


          文章的上半部分給出了一筆以太坊交易的數(shù)據(jù)結(jié)構(gòu),下面我們來(lái)具體解刨一下合約創(chuàng)建交易中的數(shù)據(jù)項(xiàng):

          {
          “data”: DeployCode+ ContractCode + auxdata
          }

          • Deploy code只在合約的初始化和部署時(shí)被執(zhí)行,具體來(lái)說(shuō)它的作用分為兩點(diǎn):

          1. 運(yùn)行構(gòu)造函數(shù)(可以分為constructorCode和constructorData),并設(shè)置初始存儲(chǔ)變量(如contract owner);

          2. 將ContractCode部分復(fù)制并放入內(nèi)存 ,將其返回給EVM作為合約代碼。

          • ContractCode就是合約被創(chuàng)建部署后會(huì)被調(diào)用的合約代碼;

          • Auxdata是加密指紋的源代碼,用于驗(yàn)證。


          注:
          Deploy code雖然只使用一次便被擱置了,但是由于區(qū)塊中交易樹(shù)的根哈希形成了存儲(chǔ)在塊頭的一部分,因此有必要將合約創(chuàng)建數(shù)據(jù)保留作為交易的一部分。
           
          為了更加直觀的展示,我們創(chuàng)建了一個(gè)空合約C:


          并將它部署在以太坊測(cè)試網(wǎng):


          // Deploy code(只使用一次,用于初始化)
          60606040523415600e57600080fd5b5b603680601c6000396000f300
          // Contract code(被調(diào)用)
          60606040525b600080fd00
           
          注意,在區(qū)塊鏈的一筆交易記錄中,代碼就是數(shù)據(jù)。而在合約執(zhí)行或被調(diào)用時(shí),數(shù)據(jù)就是代碼。
           
          二、合約代碼體積

          然而,一個(gè)正式部署在以太坊主網(wǎng)的合約是這個(gè)樣子的……


          來(lái)源鏈接:https://etherscan.io/tx/0x0c8bf04e67d62923f8c8ecc1409b68d42adfd6e2cf102f7d7c9141a1472e408e
           
          這筆合約創(chuàng)建交易的代碼部分共計(jì)28,224字節(jié),而包含這筆交易的區(qū)塊大小36,405字節(jié),占比77.5%。

          很顯然,一筆合約創(chuàng)建交易占用了過(guò)多的區(qū)塊空間,使得單個(gè)區(qū)塊包含的交易數(shù)下降,很大程度上影響了以太坊的可擴(kuò)展性!
           
          三、IPFS來(lái)了

          由此,我們想到可以把交易數(shù)據(jù)項(xiàng)中的代碼存儲(chǔ)在IPFS網(wǎng)絡(luò)中,在數(shù)據(jù)項(xiàng)中只保留代碼的哈希值。

          如此一來(lái),在上面的例子中代碼被代碼哈希取代,由36,405字節(jié)縮減為32字節(jié),體積僅為原來(lái)的0.088%。可以為原來(lái)區(qū)塊讓出更多交易空間。
          注:只要代碼大于32字節(jié),就可以把它替換成它哈希
           
          然而,由于IPFS網(wǎng)絡(luò)節(jié)點(diǎn)目前并不穩(wěn)定,并且以太坊源碼中并不包含托管合約的代碼。因此,為了實(shí)現(xiàn)合約代碼在鏈下高效、安全、穩(wěn)定的托管。

          四、Chainlink來(lái)了

          IPFS網(wǎng)絡(luò)節(jié)點(diǎn)或Filecoin的檢索礦工可以作為ChainLink節(jié)點(diǎn)提供外部數(shù)據(jù)服務(wù),并獲得相應(yīng)獎(jiǎng)勵(lì)。通過(guò)將合約數(shù)據(jù)托管到一個(gè)去中心化的預(yù)言機(jī)網(wǎng)絡(luò)連接的存儲(chǔ)網(wǎng)絡(luò),在降低合約交易的數(shù)據(jù)量、提高以太坊可擴(kuò)展性的同時(shí),還能保證和以太坊相同的安全性。

          Chainlink工作流
           
          結(jié)合Chainlink工作流,代碼的托管流程流程如下:



          1. 合約的創(chuàng)建者將代碼托管在IPFS網(wǎng)絡(luò)中,并在User-SC合約中發(fā)布托管需求;

          2. Chainlink網(wǎng)絡(luò)節(jié)點(diǎn)中的預(yù)言機(jī)拍下托管需求,并作為IPFS或Filecoin節(jié)點(diǎn)存儲(chǔ)代碼或代碼碎片;

          3. 所有Chainlink節(jié)點(diǎn)互相驗(yàn)證代碼是否被保存在,如果驗(yàn)證通過(guò)則返回Yes代表代碼被成功托管。否則失敗節(jié)點(diǎn)罰沒(méi)保證金;

          4. 發(fā)放代碼托管獎(jiǎng)勵(lì)給Chainlink節(jié)點(diǎn),保持代碼托管的穩(wěn)定和高效;

          5. 將代碼哈希值放入交易的數(shù)據(jù)項(xiàng),并提交至區(qū)塊等待被礦工打包。

           
          礦工打包時(shí),只打包哈希值。由于存檔節(jié)點(diǎn)仍然保存全部完整交易、狀態(tài)和收據(jù),隨時(shí)可以驗(yàn)證。雖然在IPFS網(wǎng)絡(luò)檢索的時(shí)間會(huì)降低單個(gè)交易被打包進(jìn)區(qū)塊鏈的時(shí)間會(huì)增加,但是由于區(qū)塊體積的下降,單個(gè)區(qū)塊可以打包更多的交易,降低網(wǎng)絡(luò)的擁擠。代碼托管擴(kuò)展了更大的存儲(chǔ)和檢索網(wǎng)絡(luò),結(jié)合哈希尋址的特性,幫助節(jié)點(diǎn)更快同步數(shù)據(jù)。
           
          相應(yīng)地,代碼調(diào)用流程:

          根據(jù)合約賬戶中代碼的哈希在IPFS或Filecoin網(wǎng)絡(luò)中檢索相應(yīng)代碼。其中,deploy code不用下載,只用驗(yàn)證哈希。Contract code需要被下載至EVM,計(jì)算后返回狀態(tài)。
           


          綜上,面對(duì)每月百萬(wàn)級(jí)的合約創(chuàng)建量,和占據(jù)區(qū)塊大小過(guò)半的合約代碼。通過(guò)將以太坊區(qū)塊中體積較大的合約代碼托管至鏈下,鏈上交易數(shù)據(jù)可以只保留代碼哈希的方法給交易瘦身(99.9%)。托管工作由IPFS/Filecoin和Chainlink共同負(fù)責(zé)的,前者負(fù)責(zé)代碼的存儲(chǔ)和檢索,后者(去中心化預(yù)言機(jī))負(fù)責(zé)前者和以太坊區(qū)塊鏈的交互,以及對(duì)存儲(chǔ)網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)放獎(jiǎng)勵(lì)保持代碼托管的高效和穩(wěn)定。最終,達(dá)到增加單塊的交易數(shù),提高以太坊的可擴(kuò)展性的目的。
           
          引用:
          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

          /End.
          聲明:本文系IPFS原力區(qū)原創(chuàng)稿件,版權(quán)屬I(mǎi)PFS原力區(qū)所有,未經(jīng)授權(quán)不得轉(zhuǎn)載,違者將依法追究責(zé)任。
          提示:投資有風(fēng)險(xiǎn),入市須謹(jǐn)慎。本文不作為投資理財(cái)?shù)慕ㄗh。

          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲AV无码精品色午夜红一片 | 午夜福利淫秽视频 | 在线免费观看黄色网页 | 性爱日记林雅儿 | 天天操天天干天天日 |