作者:比特里裡

X/推:@lilyanna_btc

常見問題解釋解釋

1.為什麼有的塊打包四千多筆交易,而有的塊只打包幾百筆?

每個區塊打包交易的上限是由size 決定的,不是交易的數量決定的,簡單說就是,交易小,一個區塊能打包的筆數就多,交易太大,一個區塊能打包的筆數就少了。如果區塊裡大多數都是轉帳或是普通的mint 交易,大概可以打包四千多筆。

符文知識科普:出塊時間、費率選擇及其相關原理

但如果遇到帶千個input 的錢包歸集交易、圖片檔案非常大的銘文銘刻等size 非常大的交易,那麼可能幾百筆交易就會填滿這個區塊。

2.我打銘文/符文的時候明明選擇了推薦費率裡最高的那檔,為什麼還是上不了鏈?

建議費率通常是按照當時內存池裡交易的費率情況給出的,但內存池是動態的,沒有人能完美預測最終區塊打包時的費率。交易依照費率從高到低排,在區塊大小限制內打包交易,費率足夠高的可以在最新的區塊上鏈,費率不夠高的則被排到後面的區塊。所謂的最高檔只是當時的「最高」,如果區塊遲遲沒有被打包,持續有新的交易被提交進內存池,費率比你高的交易會排在你前面,尤其是卡塊或者有熱門項目在進行時,你的交易就很有很大風險被擠出當前區塊。而連續爆塊(例如10 分鐘出3 個區塊)時費率會降下來,也是因為出區塊間隔太短,沒有太多的新交易「插隊」,連續打包交易會讓內存池裡等待的交易費率整體降低。

3.為什麼錢包裡明明有餘額,但是轉不走?為什麼費率明明不高,我付的時候網路費卻異常的高?

網路費(network fee,也叫礦工費)= 費率(fee rate)* 交易size(virtual size)而size 和input 數量成正相關,如果你的付款交易中,用到了很多個input,網絡費就會很高。皮夾一般優先使用你的大額UTXO,大額的不夠支付了,才會拼稀碎的小UTXO 來用。那這種情況要怎麼解決?稀碎的UTXO 可以不管它,再往裡轉一些新的BTC 用;或者等鏈上費率特別特別低的時候,可以適當進行合併。也是由於同樣的原理,大部分錢包裡最後一點餘額是花不掉的,都是600 聰、1200 聰這種小UTXO,錢包算了算,把它們付出去花的網費比它們自己都高,你又沒有足夠的其他UTXO 來進行補貼,這個交易就沒辦法提交啦。

4.卡塊半小時,是不是礦工的陰謀?卡塊以後連續爆塊,是不是都是礦工前面存好的?

礦工陰謀不了,如果部分礦工算出哈希惡意卡著不廣播,其他礦工算出來並提交,他就虧大發了。直接提交拿至少3.125 BTC的出塊獎勵,卡著為了拉那點費率,沒必要。至於爆塊,在上一個區塊哈希廣播前,礦工是無法事先計算下個區塊的,存不了,真的存不了。整體的出塊時間符合泊松分佈,是真隨機的。具體可以去看mempool space 開發大哥的推特。

推特連結:

https://x.com/mononautical/status/1789485036812501319

5.為什麼會出空塊?

礦池會先給礦工發一個空模板,請他們拿空模板先挖著。再給發一個正經的帶著待打包交易的範本。但是因為後面這個模板資料比較大,所以會多花一點點時間。如果正好有礦工打到這個時間差,不小心在收到正經模板之前挖出來了,他就帶著空模板提交了下圖中紅色的是空塊,橫坐標是出塊時間間隔,縱坐標是出現頻次。可以看到大多數空塊都是在出塊時間非常短的時候出現的。

符文知識科普:出塊時間、費率選擇及其相關原理

那麼空塊裡是不是沒有交易呢?不是的,有一個0 號coinbase 交易,就是礦工獲得出塊獎勵的那一筆。不信你去找個空塊看看~

6.前後都是將近20 的費率,為什麼這個區塊的最低費率是1? 為什麼這個區塊的費率是1,我的交易費率是8,比它高,還沒被打包?

大多數時候,都是費率高的交易優先被打包,但礦池有權利提交自己指定的交易,你看到的最低費率為1 的區塊,大概率是有這類交易存在。剩下的交易還是按照從高到低的費率來排,所以你的8 費率的交易低於其他正常競爭的交易,沒被打包是符合預期的。

基礎原理

1、區塊打包的原理

比特幣挖礦的過程就是礦工咔咔計算來找到符合難度目標的哈希值的過程。誰先算出來第一個廣播出去就能拿到這個區塊的出塊獎勵和交易費用。而區塊的打包時間(請近似理解為每個區塊花多久能算出來那個哈希值)宏觀上由網路算力(Hashrate)和難度(Difficulty)決定,但存在較大隨機性和波動,因此會出現「爆塊」和「卡塊」現象。網路算力:可以理解為所有礦工集合的運算能力,總算力越高,找到有效區塊哈希值的速度越快(也就是出塊時間越短的意思)。就是算的人越多,好用的腦子越多,有人算出來第一個正確答案的時間就越短,這個應該好懂。難度目標:這個難度目標是動態調整的,每2016 個區塊(約兩週)調整一次挖礦難度,來保持平均出塊時間在10 分鐘。就是每2 週復盤一下,過去兩周平均出塊時間小於10 分鐘了,題出太簡單了難不住這些礦工大哥了,就加點難度,讓接下來兩週的出塊時間能稍微長點,回到10 分鐘的標準水準;如果兩週出塊平均時間大於10 分鐘,難度就稍微降降。 (這裡為了好理解講得形像一點,其實是演算法自動調整的,不涉及任何人工幹預)實際挖礦過程中,比特幣價格、出塊獎勵(例如前段時間的減半)、電費成本波動等等外在因素,可能導致礦池調整策略(增減運轉礦機等等),間接影響網路算力。但由於難度目標調整演算法的存在,保證了比特幣整體的出塊時間均值約在10 分鐘左右上下浮動,不會太離譜。

2、關於打包交易的數量和順序

①區塊有大小限制,每個區塊只能打包這麼大空間的交易,滿了就只能排到下個區塊,注意不是交易的數量,而是大小(可以近似理解為size)

②續費都是給礦工/礦池的,所以礦工的打包策略會盡量優先打包手續費高的交易。

③部分礦池有加速交易和客製化區塊的服務(例如MARA),礦池是可以提交自己指定的交易的,即使費率低於記憶體池裡其他的交易。 (所以礦工無法控制出塊時間,但其實是可以控制交易上鍊順序的。但這種行為不常見,畢竟大多時候還是打包費率高的交易更賺錢)