比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > USDT > Info

科普 | 為什么要使用 transaction data?_DATA

Author:

Time:1900/1/1 0:00:00

可能你也注意到了,在跟智能合約交互時,你的事務會自動包含inputdata。在MyCrypto錢包界面,這些數據有個簡單的標簽:“Data”——它是做什么的呢?

這篇文章就是從技術上解釋事務輸入數據是怎么一回事,它實質是什么,又是怎么工作的。

-MyCrypto錢包的高級事務設定-

什么是InputData?

我們先來看看這筆token轉賬交易。某個人發送了0ETH到?0xd26114cd6ee289accf82350c8d8487fedb8a0c07,而且Etherscan網站呈現了這是一筆意圖發送0.19OMGtoken到這個地址的事務。那么,EVM究竟是怎么知道,這個人想要轉賬某個數額的token到另一地址的呢?

你再仔細看Etherscan,就能看到這筆事務帶著inputdata。inputdata是發送者為這筆事務附加的額外數據,既可以是普通的文本,也可以是數字。但在這筆交易中,發送者使用這部分數據來“告訴”合約,讓合約運行特定的函數。智能合約本身是由一系列函數組成的。舉例而言,一個ERC-20token合約使用比如“transfer”來把token從A賬戶轉移到B賬戶,使用“balancerOf”函數來獲得某個地址的余額,等等。在我們研究的這筆交易中,你可以看到它調用了?transfer(address_to,uint256_value)?函數。

民盟中央建議加速元宇宙科普和立法:3月4日消息,民盟中央已起草了《關于“元宇宙”技術發展的提案》,并將提交全國政協十三屆五次會議。在提案中,民盟中央建議,在科普層面需加速知識傳播,法律層面則需加快立法步伐。民盟中央擬提交的提案指出,目前,在新興網絡層面,相關政策法規相對缺失。“元宇宙”在未來將會帶動形成全新的網絡形態,當遇到突發輿情,全虛擬的環境、場景將更難進行源頭追蹤、問題疏導。因此建議應盡早加快立法研究,盡快形成與技術、市場發展相適應的治理模式和法律基礎,全面提升我國社會治理的水平。建議組織相關部門,針對“元宇宙”相關需求、風險進行立法研究,并盡快發布。此前消息,民進中央擬向全國政協十三屆五次會議提交《關于積極穩妥推進元宇宙技術和產業發展的提案》。建議推進元宇宙技術產業發展,建立相關監管治理體系。(華夏時報)[2022/3/4 13:37:12]

這筆事務的輸入數據為0xa9059cbb0000000000000000000000004bbeeb066ed09b7aed07bf39eee0460dfa26152000000000000000000000000000000000000000000000000002a34892d36d6c74。你可以把這一長串的?十六進制?數據分解一下。開頭的0x表示這是一個十六進制數值,緊接著的8個字節是函數標識符,再然后就全部是以32字節為一組的函數參數。所以第一組是?0000000000000000000000004bbeeb066ed09b7aed07bf39eee0460dfa261520?而第二組是?000000000000000000000000000000000000000000000000002a34892d36d6c74。

歐科云鏈集團正式啟動區塊鏈科普行動“星途計劃”:歐科云鏈集團于4月26日,正式宣布啟動了區塊鏈科普行動——“星途計劃”,行動包括將在全國范圍展開系列沙龍,加大力度推進區塊鏈科普進機關、進國企、進校園等,聯合政府部門、行業協會等共同構建起更加完善和有效的區塊鏈科普教育生態,與此同時,直擊區塊鏈科普現存痛點,推出簡單易懂的“秒懂區塊鏈”公益短視頻課。

該計劃旨在全維度推動社會建立對產業更清晰的認知,與“鯤鵬計劃”一道助力數字經濟及區塊鏈產業本身健康發展夯實“人才”和“產業認知”兩大基礎。[2021/4/26 20:59:37]

-InputData分解-

如果你在Etherscan上查看這些數據,你會看到它以下文這個形式呈現:

Function:transfer(address_to,uint256_value)

MethodID:0xa9059cbb

:0000000000000000000000004bbeeb066ed09b7aed07bf39eee0460dfa261520

:00000000000000000000000000000000000000000000000002a34892d36d6c74

十六進制是啥?

十六進制是一種計數系統,就像十進制和二進制一樣;十六進制使用數字0到9和字母A到F,來對應表示十進制的0到15。下面這種圖展現的就是這樣的對應關系。十六進制常常用來更直觀地表示大數字。

人大附中物理老師李永樂科普拜占庭將軍問題和區塊鏈:5月14日,人大附中物理老師、科普視頻網紅李永樂在其公眾號發布視頻《拜占庭將軍問題是什么?區塊鏈如何防范惡意節點?》。李永樂老師在視頻中對拜占庭將軍問題和區塊鏈進行了講解,他表示,拜占庭將軍問題本質上指的是,在分布式計算機網絡中,如果存在故障和惡意節點,是否能夠保持正常節點的網絡一致性問題。在近40年的時間里,人們提出了許多方案解決這一問題,稱為拜占庭容錯法。例如蘭波特自己提出了口頭協議、書面協議法,后來有人提出了實用拜占庭容錯PBFT算法,在2008年,中本聰發明比特幣后,人們又設想了通過區塊鏈的方法解決這一問題。區塊鏈通過算力證明來保持賬本的一致性,也就是必須計算數學題,才能得到記賬的權力,其他人對這個記賬結果進行驗證,如果是對的,就認可你的結果。與拜占庭問題比起來,就增加了叛徒的成本。[2020/5/14]

-十進制數字與對應的十六進制字符-

單個十六進制字符所能表示的最大數值是15,長度是4個比特。多個十六進制字符相連時,你要把每個字符的二進制表示前后拼接在一起,才能得到其十進制數值。舉個例子,0x5C,可以寫成0101(=5)和1100(=C),前后拼接就是01011100,這就是二進制形式的92,所以十六進制數0x5C的數值就是92。

大多數編程語言都使用前綴0x作為絕對標識符,將十六進制數與其他的計數類型區別開來。這個前綴本身沒有任何意義,只是為了清晰。我們這篇文章也會采取一樣的做法,十六進制數都用0x開頭。

聲音 | CNBC主持人:加密貨幣最大的缺點之一就是難以向外行快速科普:CNBC主持人Ran NeuNer近期發推稱,加密貨幣最大的缺點之一就是很難向外行快速解釋。當人們要求我向他們解釋比特幣時,我知道他們至少需要一個小時才能真正理解。[2019/9/10]

講完這些,我們繼續。如果你還是沒能理解十六進制,也不用擔心——對于理解inputdata來說不是必需的。

InputData與智能合約

InputData的首要用途就是與智能合約交互。大部分智能合約都使用?合約ABI規范,使得Etherscan這樣的網站能自動解碼inputdata并顯示事務所調用的具體操作。在我們上面那個例子中,這是一筆有關代幣合約的事務,而且代幣合約遵循ERC-20標準。這也就意味著,我們都知曉所有可能調用的函數,以及它們的?簽名。舉例,用于ERC-20合約的transfer函數的完整簽名總是?transfer(address,uint256),意味著這個函數需要兩個參數,所傳入的第一個參數會被解讀為一個地址,第二個參數會被解讀為一個未簽名的256位的數字。

Solidity語言有多種參數類型。如果你有興趣學習Solidity語言和智能合約,你可以在Solidity文檔頁面了解更多。

函數簽名

如你所見,transfer函數的簽名是?transfer(address,uint256),這個對所有ERC-20合約都是一樣的。如果某個合約給轉賬函數安排不一樣的參數類型,比如一個地址和一個uint128,這個合約就不是“ERC-20兼容”的。

中科院自動化研究所將面向大中小學生開展區塊鏈等主題的科普講座:5月21日,新華網訊,今年,中國科學院自動化研究所將舉辦第十四屆“自動化之光”公眾科學開放日活動。屆時,自動化所將面向大中小學生分別開展《腦與智能》、《區塊鏈技術與平行智能》、《大數據時代的視覺智能》、《動畫真奇妙》等4個主題報告,用實例和生動的演示深入淺出地為大家揭示智能技術的原理和奧妙。[2018/5/21]

要獲得一個函數的簽名的十六進制形式,我們先要獲得這個函數的SHA-3哈希值的前面4個字節。而要想知道一個數據的Keccak-256哈希值,你可以使用JavaSceript語言的web3庫,或者求助于這樣的在線工具。在這個工具頁面填入?transfer(address,uint256),它會顯示?0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b?作為結果。取前8個字符,就是?a9059cbb,恰好跟上述事務的MethodID一致。

另一個例子:ERC-20標準合約的approve函數的函數簽名是?approve(address,uint256),其SHA-3哈希值是?0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba,首8個字符是?095ea7b3,因此,調用許可函數的inputdata開頭就會是0x095ea7b3。這筆發往DAItoken合約的事務就是如此。

地址和數量

每一個參數的長度都是32字節,或者說64個十六進制字符。但以太坊地址只有40個字節長。為了解決這個問題,地址參數要用0來填充。在十六進制里面,0x0000123和0x123是一樣的,因此?0x0000000000000000000000004bbeeb066ed09b7aed07bf39eee0460dfa261520等同于?0x4bbeeb066ed09b7aed07bf39eee0460dfa261520,而且?0x00000000000000000000000000000000000000000000000002a34892d36d6c74?也就等于?0x2a34892d36d6c74。那為什么我們要填充這些0呢?

就像我們上面說到的,Solidity合約可以接受的最大數值是2256?-1,剛好是32字節。使用固定的長度可以讓EVM和其他應用在解碼數據時候更輕松,因為你可以假設每一個參數的長度都是一樣的。

那數組和字符串呢?

如上所述,在inputdata中使用數組和字符串,情形會有些許不同。因為數組本質是多個東西組成的一個列表。舉個例子,1、2、3三個數所組成的列表在大多數編程語言中都可以寫為。要在事務中發送這種數據,列表中的每一個對象都要作為32字節一組的數據發送,列在inputdata的結尾。指明數組長度的指針就作為參數。

假定我們有一個叫做?calledmyFunction?的函數,接收一個地址和數字的數組作為參數,即?myFunction(address,uint256)。該函數的函數簽名是0x4b294170。地址這一項,我們照上面所說的操作。因為我們的數組包含3個對象,數組的長度用十六進制表示為0x3。然后每個對象都要占據恰好32自己的空間,且數組要放在所有其它參數之后,所以數組會從32+32=64字節之后開始。

000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003

-例子:input數據要按照32字節一組來切分-

因為字符串的長度是任意的,它們要按32字節一組來切分,處理方式跟數組相同。

像Etherscan這樣的網站是如何解碼inputdata的?

哈希函數是單向函數,所以如果你只有函數簽名的哈希值,是不可能會恢復出函數簽名的。合約的所有者可以將合約的ABI作為JSON文件上傳,就像這個例子,這可以用來拿到函數簽名的哈希值。

即使合約的所有者不上傳合約的ABI,也能夠解碼input數據。因為,ERC-20合約函數的簽名都是一樣的,因此Etherscan只需使用一個預定義的合約ABI即可服務大部分合約。舉個例子,ERC20合約的轉賬函數的合約ABI如下文所示

如果輸入數據里的簽名與任意一個預定義的函數相匹配,Etherscan都能解碼inputdata。

inputdata的大小有沒有什么限制?

既有,也沒有。以太坊協議沒有為inputdata的長度設固定的上限,但inputdata也消耗gas。單個區塊可用的Gas數量是有上限的,在本文撰寫時是800萬。每一個0字節都要消耗4gas,而非零的字節要消耗68gas。一筆標準的ETH轉賬事務要消耗21000單位gas,所以,如果不考慮調用合約的交易,當前inputdata的最大長度是2MB,或者全部用非零字節的話,就是0.12MB。因為inputdata不會只有零,也不會一個0也沒有,所以實際的大小會在兩者之間。

如果你想看實時的區塊Gas上限,可以看ETHStats.net。

-特定區塊的Gas上限-

只需將鼠標停留在“GasLimit”部分的某個區塊上,就可以看到其Gas上限。

更多信息

合約ABI規范ERC-20Token標準以太坊虛擬機

參考

以太坊黃皮書Solidity文檔

原文鏈接:

https://blog.mycrypto.com/why-do-we-need-transaction-data-/

作者:?MaartenZuidhoorn

翻譯:?阿劍

Tags:PUTDATDATAATAintelligencefogcomputerchainFuture data networkData TransactionMATA價格

USDT
Eth1-Eth2合并開發者測試網再次啟動_BETT

以太坊基金會研究員protolambda在推特上稱,第二次啟動Eth1-Eth2合并開發者測試網Nocturne,與首次Eth1-Eth2合并開發者測試網Steklo相同.

1900/1/1 0:00:00
在華爾街客戶需求激增之際,花旗銀行考慮推出加密貨幣服務_加密貨幣

據報道,花旗銀行正在考慮向其客戶提供加密貨幣相關的服務,以應對不斷增長的需求,特別是來自資產管理公司和對沖基金的需求.

1900/1/1 0:00:00
北京4000萬數字人民幣紅包來了!怎么搶?戳這里_ALI

來源:21財經 作者:邊萬莉 北京第二輪數字人民幣紅包將至。據北京市地方金融監督管理局消息,北京將開啟“京彩奮斗者數字嘉年華”活動,由北京城市副中心、東城區、朝陽區、海淀區、石景山區、延慶區共同.

1900/1/1 0:00:00
中國香港政府財經事務及庫務局局長:制定虛擬貨幣政策要平衡監管及發展的需要_ETF

據官方消息,5月23日,中國香港政府財經事務及庫務局局長表示,虛擬資產變化令人瞠目結舌,除了價格大幅波動,加密貨幣如雨后春筍般出現,亦有NFT出售.

1900/1/1 0:00:00
留給散戶的時間不多了?大規模采用使加密技術走向中心化_PLO

原文標題:《加密技術的大規模采用可能會使加密技術走向中心化》作者|?Jo?lValenzuela 譯者|?Soraya 今年是加密貨幣終于開始成為主流的一年.

1900/1/1 0:00:00
直播預告 | 深腦鏈主網上線發布會·無限擴容的分布式高性能算力網絡_深腦鏈

為慶祝深腦鏈主網順利上線,今日下午14點至16點,深腦鏈走進鏈節點直播間進行深腦鏈主網上線發布會.

1900/1/1 0:00:00
ads