以太坊交易:您需要了解的 101 件事

胡家維 Hu Kenneth
My blockchain development Journey
16 min readJul 13, 2023

source : https://medium.com/@sergiomazariego/ethereum-transactions-101-things-you-need-to-know-d2e39cc1b10 by Sergio Mazariego

介紹

在這篇博文中,您將找到對以太坊交易所涉及的基本概念、術語和技術細節的解釋,從交易的剖析到汽油費,您將學習導航以太坊交易世界的基本信息。

筆記

我目前正在努力改進此信息的格式,重新排序以增強可讀性並使用基於每個主題的參考資料,非常感謝您的反饋,您可以通過我的 Twitter @s3rgiomazari3go 與我聯繫,或者關注我以了解有關 Web 3.0 的更多信息,希望您覺得這篇文章有用。

內容

1. 交易是外部世界與以太坊網絡交互以修改或更新以太坊網絡中存儲的狀態的方式。

2. 以太坊是一種基於賬戶的區塊鏈實現,有兩種類型的賬戶:外部擁有賬戶(EOA)和合約賬戶。

3. 外部擁有賬戶是外部世界的個人用戶,由一個 20 字節的地址表示,該地址源自私鑰,該私鑰保存一定數量的以太幣作為其狀態。當 EOA 發起交易時,會指定 Gas,然後在以太坊網絡中花費。

4. 合約是以太坊網絡中的“智能合約”能力,業務邏輯在其中實現,合約賬戶是與部署的合約對應創建的,並由合約地址(我們與之交互的20字節地址)來標識當我們想要與此部署的帳戶交互時。

5. 交易結構由代表發起交易的賬戶的“From”地址、代表交易接收者的“To”地址、代表要轉移的wei資金量的“Value”、包含的“Data”組成。編碼參數,以及與處理此交易的成本相關的“Gas Price”和“Gas Limit”。

6. Gas Limit 計算:Gas Limit 是根據交易的複雜性以及處理該交易所需的計算資源量來計算的。

7. Gas 價格估算:Gas 價格可以使用各種工具進行估算,例如 Gas 價格跟踪器和 Gas 價格預測模型,這些工具提供了在一定時間內處理交易所需的 Gas 價格的粗略估算。

8. 簽署交易涉及使用交易發送者的私鑰在交易對像上生成簽名,並且可以使用 eth_sendTransaction 和 eth_sendRawTransaction 通過 RPC 來完成發送交易。

9. Nonce:每筆交易必須有一個唯一的Nonce,它是分配給賬戶發起的每筆交易的序列號,用於防止雙花並確保交易以正確的順序處理。

10. 交易收據:一旦交易被處理並包含在區塊中,就會生成交易收據,其中包含有關交易的信息,例如使用的氣體、狀態以及交易生成的任何日誌。

11. 待處理交易:已廣播到網絡但尚未處理的交易稱為待處理交易,它們可以在以太坊區塊瀏覽器上查看,並且可以使用交易哈希檢查其狀態。

12. Whisper:為了確保交易快速可靠地傳播,以太坊網絡使用了一種名為“Whisper”的八卦協議,它允許節點以點對點的方式共享有關新交易和區塊的信息,這有助於快速傳播信息並減少網絡擁塞。

13. 交易確認:當一筆交易被包含在一個區塊中時,就被認為是已確認的,一筆交易的確認數是指包含該交易的區塊之上已被開采​​的後續區塊的數量。

14. 交易池:交易池是等待驗證者處理的所有待處理交易的集合,驗證者根據 Gas 價格和交易隨機數等因素從池中選擇交易。

15. Gas 費計算:一筆交易的 Gas 費是通過 Gas 價格乘以 Gas 限額來計算的,Gas 價格由用戶設定,而 Gas 限額由網絡設定,以防止濫用。

16. Gas 退款:如果交易失敗(恢復),任何未使用的 Gas 都會退還給發送者。

17. Gas 價格波動:Gas 價格可能會根據網絡擁堵和需求而變化很大,在擁堵嚴重時,Gas 價格可能會飆升,從而使交易更加昂貴。

18. 智能合約交互:交易可以通過調用智能合約的函數並傳入所需的參數來與智能合約進行交互,交易的數據字段包含函數簽名和編碼參數。

19. 交易鏈:通過將一項交易的輸出作為另一項交易的輸入,可以將交易鏈接在一起,這稱為交易鏈,可用於創建具有多個輸入和輸出的複雜交易。

20. Gas Limit調整:Gas Limit可以由用戶在發起交易時調整,提高Gas Limit可以增加交易被處理的機會,但也會增加交易成本。

21. Gas 優化技術:開發人員可以通過減少存儲使用、最小化交易數量、重用之前部署的合約或優化 Gas 代碼等技術來優化 Gas 使用。

22. 交易跟踪:交易跟踪是一種用於調試和分析交易的工具,通過提供整個交易生命週期的詳細視圖,包括gas使用情況、輸入/輸出值和合約執行細節。

23. 部署合約交易:部署合約交易是發起創建新智能合約的一次性交易,包括正在部署的智能合約的代碼,以及任何必要的元數據和初始化數據,該交易具有作為接收者(“收件人”字段)“零地址”。

24. 交易序列化:交易以RLP(遞歸長度前綴)格式序列化,這是一種用於對複雜數據結構進行編碼的二進制編碼方案。

25. 交易最終性:權益證明以太坊使用“檢查點”區塊確保交易“最終性”,驗證者投票選出有效的檢查點對,如果投票達到至少質押 ETH 總數的三分之二,檢查點就會升級,最近的檢查點變為“合理”,較早的檢查點升級為“最終確定”。

26. 交易廣播:交易可以通過 API、錢包、dApp 等多種方式廣播到網絡。

27. 交易時間戳:每個交易都包含一個時間戳,指示其發起的時間。

28. 交易確認時間:交易的確認時間可能會根據網絡擁塞情況和 Gas Price 的不同而有所不同,有些交易只需幾秒鐘即可確認,而另一些交易可能需要幾分鐘甚至幾小時。

29. 交易 Gas Limit 錯誤:由於 Gas Limit 限制,交易處理過程中可能會出現錯誤,這可能會導致交易失敗或被還原。

30. 交易 Gas 價格錯誤:由於 Gas 價格限制,也可能會發生錯誤,這可能導致交易長時間處於待處理狀態。

31. 交易優先級:驗證者會優先考慮 Gas 價格較高的交易,因為它們為驗證者將其包含在下一個區塊中提供了更高的激勵。

32. 交易費用市場:交易費用市場是一種市場驅動的機制,用戶通過競價交易費用來激勵驗證者將其交易納入下一個區塊。

33. 交易簽名驗證:交易使用橢圓曲線密碼學進行驗證,其中涉及驗證交易發送者的私鑰生成的簽名。

34. 交易隨機數同步:交易隨機數的同步對於防止雙花非常重要,因為它確保每個交易都有唯一且連續的隨機數。

35.交易調用堆棧:交易與智能合約交互時可以創建調用堆棧,可用於跟踪交易的執行路徑並識別潛在問題。

36. Gas 價格 Gwei:Gas 價格通常以 Gwei 來衡量,Gwei 是以太幣的一個子單位。1 Gwei 相當於 0.000000001 ETH。

37. Gas Price Bidding:在網絡擁堵的時候,用戶可以出價更高的 Gas 價格來讓他們的交易處理得更快,這可能會導致競價戰,用戶願意支付更高的費用來讓他們的交易包含在下一個交易中。堵塞。

38. Gas優化:開發者可以通過使用高效的算法、減少存儲操作的數量以及最小化完成特定任務所需的計算步驟的數量來優化他們的智能合約以使用更少的Gas。

39. 交易內存池:交易內存池是節點上的存儲區域,其中存儲待處理的交易,然後將其包含在塊中。

40.以太坊Gas Tracker:https://etherscan.io/gastracker是一個提供實時Gas價格估算和優化工具以幫助用戶節省交易費用的網站。

41. 元交易:元交易是用戶無需支付 Gas 費即可與以太坊網絡交互的一種方式,其工作原理是讓第三方代表用戶支付 Gas 費,以換取一定的費用或交易的百分比價值。

42. 交易哈希:交易哈希是每筆交易的唯一標識符,用於跟踪交易的狀態,並可用於在以太坊區塊瀏覽器上查看交易詳細信息。

43. Gas Limit Estimation:Gas limit估計是確定快速且經濟高效地處理交易的最佳Gas limit的過程,這可以使用前面提到的Gas Tracker等工具來完成。

44. 交易廣播:交易通過將其發送到節點來廣播到網絡,然後該節點將交易轉發給其他節點,最終,交易被驗證器包含在塊中。

45. 交易拒絕:如果交易不符合某些標準,例如 Gas 限額不足或 Gas 價格低於網絡接受的最低價格,則交易可能會被網絡拒絕。

46. 交易隱私:以太坊網絡上的交易本質上並不私密,但可以使用環簽名和零知識證明等技術來增強交易隱私。

47. 交易完成時間:在以太坊網絡上完成交易所需的時間可能會有所不同,具體取決於網絡擁塞、汽油價格和所需確認數量等因素。

48. 交易原子性:以太坊網絡上的交易是原子的,這意味著它們要么完全成功,要么完全失敗,部分執行的交易是不可能的,這有助於確保網絡的完整性。

49. 交易批處理:交易批處理是一種通過在單個捆綁包中發送多個交易來降低交易成本的技術,這有助於減少處理交易所需的天然氣量。

50. 交易驗證:驗證器使用稱為共識的過程來驗證交易,該過程涉及在將交易數據和簽名包含在塊中之前對其進行驗證。

51. 交易優先級隊列:交易優先級隊列用於根據 Gas 價格和交易隨機數等因素對交易進行優先級排序,這有助於確保 Gas 價格較高的交易首先被處理。

52. 交易費用:交易費用支付給驗證者處理交易,並由交易中指定的 Gas 價格和 Gas 限額決定。

53. 交易量:交易量可能會因網絡擁塞和需求而有很大差異,在需求高的時期,交易費用可能會大幅增加。

54. 交易加速:交易加速服務提供了一種通過支付優先處理費用來更快地處理交易的方法。

55. 事務複製:事務複製是一種通過在網絡中的多個節點之間複製事務來提高事務吞吐量的技術,它可以提高事務被驗證和確認的速度,提高網絡的可擴展性,使其更適合用於需要高交易量的應用程序。

56. 交易池管理:交易池管理涉及在等待處理的交易數量與可用網絡資源之間保持最佳平衡,這是通過多種技術實現的,例如:根據 Gas 價格對交易進行優先級排序,丟棄舊的或低的交易- 優先交易並限制交易池的大小。

57. 交易延遲:交易延遲是處理交易並將其包含在塊中所需的時間。

58. 垃圾交易:垃圾交易是一種攻擊,攻擊者以較低的 Gas 價格發送大量交易,以堵塞網絡並阻止其他交易被處理。

59. 交易大小:以太坊網絡上的交易大小取決於數據量和處理數據所需的計算量。

60. 交易重新排序:在以太坊中,礦工可以在他們創建的區塊中對交易進行重新排序,這可能會導致依賴於特定交易排序的智能合約出現問題。

61. 交易包含策略:驗證者可以選擇將哪些交易包含在他們創建的區塊中,因此用戶需要使用某些策略來確保他們的交易及時包含在內,這些策略可能包括設置更高的汽油費或使用交易加速器。

62. 交易中繼:中繼的主要目標是促進比特幣和以太坊等不同區塊鏈之間的信息傳輸,為了實現這一目標,中繼密切關注區塊鏈“狀態”(數據的技術術語)的某些部分。它們連接到的區塊鏈,這有助於驗證鏈之間交易的發生,此外,中繼可能被授予對鏈接區塊鏈上存在的資產的有限權限。

63. 交易模擬:這是指在以太坊網絡上執行交易之前對其進行模擬,這可以幫助開發人員在部署智能合約之前測試其智能合約並確保其功能正常,此外,在生產時,用戶可以模擬交易來驗證是否由此產生的輸出與其預期結果一致,這種方法可以幫助個人避免欺詐活動。

64. 交易生命週期:這是指交易從創建到被確認並添加到區塊鏈所經歷的不同階段,了解交易生命週期對於開發人員和用戶確保其交易得到正確處理非常重要。

65. 交易雙重支出:雙重支出是加密貨幣交易的一個潛在問題,即相同的資金被花費兩次,以太坊具有防止雙重支出的機制,例如交易中的隨機數字段。

66. 交易最終性小工具(TFG):TFG 是一種提議的機制,用於在以太坊中實現更快的交易最終性,從而縮短確認時間並降低雙重支出的風險。

67. 交易速率限制:這涉及對在一定時間範圍內可以處理的交易數量設置限制,有助於防止網絡擁塞和延遲,這可以在智能合約邏輯中實現。

68. 交易替換:這允許用戶用包含更高汽油費的新交易替換待處理的交易,確保他們的交易處理得更快或使用不同的輸入(數據)。

69. 交易取消:如果交易處理時間過長,用戶可以選擇取消交易以釋放資金和 Gas 限額。

70. 交易執行模型:交易執行模型是在以太坊網絡上執行交易的過程,它涉及幾個步驟,包括驗證、gas計算、狀態改變和驗證。

71. 交易狀態轉換:交易狀態轉換是指在執行交易後更新以太坊區塊鏈狀態的過程,例如,這涉及更新受交易影響的賬戶餘額或合約狀態。

72. 交易池容量:是以太坊網絡上等待處理的未確認交易的集合,交易池容量是指在任何給定時間一個區塊中可以包含的最大交易數量,當池滿時,交易被延遲,直到下一個塊中有空間可用。

73. 交易抽象層:交易抽象層是抽像出底層區塊鏈操作複雜性的軟件接口,允許開發人員以更用戶友好的方式與區塊鏈交互,在以太坊中,有幾個抽象層,包括Web3 .js 和以太坊 JSON-RPC API。

74. 交易元數據標準:交易元數據標準是指用於構建和解釋與交易相關的數據的約定和協議,其中包括發送者和接收者地址、轉賬金額以及任何其他相關數據等信息。

75. 交易壓縮技術:交易壓縮技術用於減少以太坊網絡上交易的大小,使處理更快、更高效,這可以包括塊壓縮和數據壓縮等技術。

76. 交易歷史和存檔節點:交易歷史和存檔節點是以太坊網絡上的節點,存儲區塊鏈上所有交易的完整歷史記錄,這些節點對於研究和分析區塊鏈數據非常重要,可用於驗證完整性區塊鏈的。

77. 交易區塊大小:這是指以太坊區塊鏈中區塊的最大大小,它決定了單個區塊中可以包含的交易數量,目前以太坊的最大區塊大小為3000萬個gas。

78. 交易塊同步:這是指以太坊網絡中的所有節點就區塊鏈當前狀態達成一致的過程,這涉及同步所有節點上的所有交易和塊的狀態,以確保它們都具有相同的版本區塊鏈的。

79. 交易區塊頭:指與區塊相關的元數據,包括區塊號、時間戳、前一個區塊的哈希值以及區塊中所有交易的 Merkle 根。

80. 交易區塊索引:這是在以太坊區塊鏈上對區塊進行索引的過程,以實現更快、更高效的數據查詢,索引通常是通過創建區塊鏈上所有區塊的可搜索數據庫來完成的。

81. 交易區塊瀏覽器:這是一個允許用戶查看和探索以太坊區塊鏈上的區塊內容的工具,它可用於搜索特定交易、查看交易歷史並跟踪以太坊代幣的動向。

82. 交易Merkle root:是以太坊區塊鏈中某個區塊中包含的所有交易的加密哈希,用於驗證該區塊中交易的完整性並將當前區塊與區塊鏈中的前一個區塊連接起來。

83. Merkle 樹是一種數據結構,其中葉節點包含數據塊的哈希值,非葉節點包含其子節點的哈希值。

84. 對底層數據的任何更改都會導致引用該數據的節點的哈希值發生更改,從而導致父節點一直到根節點發生更改,因此,對葉節點處的數據進行任何更改都會導致要更改的根節點哈希。

85. 代表以太坊區塊鏈中某個區塊的 Merkle 樹的根哈希可以代表該時間點的數據,因此只需將根哈希存儲在區塊鏈中即可保持數據不可變。

86. 以太坊中的每筆交易都由一個交易對象表示,其中包括發送者、接收者、價值、數據或傳輸的以太幣數量等數據。

87. 交易對像被散列並與塊中包含的其他交易一起添加到 Merkle 樹中。

88. 合約字節碼交易:交易中的“data”字段用於指定交易的輸入數據,對於合約部署,該數據字段將包含智能合約的字節碼以及初始化所需的任何參數,該字節碼是用 Solidity 或 Vyper 等高級編程語言編寫的智能合約代碼的編譯形式。

89. 創建簽名的簡化過程包括計算要簽名的消息的哈希值、生成 k 的安全隨機值、計算橢圓曲線上的點以及計算 r 和 s。

90. 由於 k 使用隨機值,因此簽名輸出每次都不同。

91. 要驗證消息,我們需要原始消息、簽名私鑰的地址以及簽名 {r, s, v} 本身。

92. ECDSA 簽名由兩個數字(整數)組成:r 和 s,以太坊還使用了一個額外的 v(恢復標識符)變量,簽名可以表示為 {r, s, v}。

93. “r”表示簽名所基於的橢圓曲線上點的 x 坐標,它本質上是為每個簽名生成的隨機數。

94. “s”表示應用於正在簽名的消息和簽名者的私鑰的簽名生成算法的輸出,它也是一個隨機數,但取決於消息和簽名者的私鑰。

95. “v”是以太坊用來確定簽名對應哪個公鑰的恢復標識符,它是根據交易中“chain ID”參數的值以及簽名是否為“奇數”來計算的”或“偶數”,v 的值用於從簽名中導出公鑰。

96. 搶先交易是指提交與現有交易相同但 Gas 價格更高的交易,有效地搶先交易並從價差中獲利的做法。

97. 三明治攻擊是搶先交易的一種,礦工先放置一筆買入交易,等待賣出交易進入內存池,然後在其前面放置第二筆買入交易,從價差中獲利。

98. “調用”是一種與以太坊網絡交互的方式,它根本不修改狀態,這是當合約中存在視圖或純函數時,這意味著它只從區塊鏈讀取數據並執行不修改任何狀態,這些類型的函數也稱為“只讀”函數,在以太坊客戶端本地執行,而不廣播到網絡或添加到塊中(沒有交易哈希)。

99. 在以太坊中,調用智能合約函數的交易由一個 4 字節的函數選擇器來標識,該函數選擇器是函數簽名的 keccak-256 哈希的前 4 個字節,他的函數選擇器用於標識智能合約中的哪個函數合同應當執行。

100. 當向智能合約發送交易時,函數選擇器包含在交易的數據字段中,數據字段中的剩餘字節包含函數調用的參數,根據函數的 ABI 進行編碼。

101. 要成為驗證者,用戶需要在合約中存入 32 ETH 並運行三個軟件:執行客戶端、共識客戶端和驗證者,驗證者在存入 ETH 後加入激活隊列,激活後,他們會收到來自對等方的區塊並重新執行交易並驗證該區塊的簽名,然後,他們投票支持該區塊,稱為證明。

參考:

--

--

胡家維 Hu Kenneth
My blockchain development Journey

撰寫任何事情,O型水瓶混魔羯,咖啡愛好者,Full stack/blockchain Web3 developer,Founder of Blockchain&Dapps meetup ,Udemy teacher。 My Linktree: https://linktr.ee/kennethhutw