Transactions
多個錢包進行同一筆交易時,合約如何結算?
我將以 DApp、CryptoKitties 為例:
假設一些可愛的數字貓發布了一個帶有“立即購買”按鈕的 1 個乙太坊,並且 3 個人通過 MetaMask 進行交易。所有 3 筆交易都開始掛起。
- A 人在 09:04:01 發送交易,gas 價格為 2 Gwei
- B 人在 09:04:21 發送交易,gas 價格為 20 Gwei
- C 人在 09:04:51 發送交易,gas 價格為 100 Gwei
如果 A 的交易需要 5 分鐘驗證,B 需要 40 秒,C 需要 10 秒,那麼:
- 誰的交易獲得優先權並被添加到區塊中?(只有一個會通過,而其他的會被退還減去用於計算的氣體)
- 發起事務的時間戳對優先級有影響嗎?
非常感謝您提供詳細/技術性的答案。謝謝!
誰的交易獲得優先權並被添加到區塊中?(只有一個會通過,而其他的會被退還減去用於計算的氣體)
找到該區塊的礦工選擇了 3 筆交易中的哪一筆。礦工可以選擇他們喜歡的任何交易,只要它們允許有效的狀態更改。(他們可以通過編寫自己的探勘程式碼或調整普通客戶端程式碼來滿足他們的需求來做到這一點。)
對於那些執行 Geth 客戶端的礦工,他們會根據價格和 nonce 選擇交易,價格最高的優先。有關詳細說明,請參閱此先前的答案:採礦期間交易的預設順序是什麼,例如 geth?(同樣的情況很可能適用於 Parity 客戶端,儘管我沒有查看程式碼。)
發起事務的時間戳對優先級有影響嗎?
不,如果它們同時都在交易池中,那麼我上面提到的排序將成立。(香草客戶端程式碼中沒有考慮時間戳。)