BTC交易位元組數及手續費計算

2021-10-19 13:03:03 字數 2455 閱讀 9888

首先btc的交易手續費和交易金額是沒有關係的。不要誤認為交易的金額越大手續費越高;

btc的手續費每個時間段是不一樣的,它取決於你交易產生的位元組數大小和你設定的手續費率;

位元組數,位元組數代表著你這筆交易打包的大小,單位是byte

位元組數的計算公式是:

btc交易:input*148+34*out+10

omni_usdt交易:input*144+34*out+10

以下

input的就是輸入的位址數量為交易輸入  input=1

out就是輸出的位址數量為交易輸出 out=3

位元組數大小就是黑色的部分 也就是計算公式 : 1*144+34*3+10=256

注:input數量是根據utxo進行計算的,某筆交易的輸入必須是另一筆交易未被使用的輸出

148位元組**(交易輸入大小)

(32 位元組)交易id

(4 位元組)輸出索引,用於反推本次交易**與之間的哪個交易輸出

(1 位元組)解鎖指令碼大小,1 ~ 9 位元組,使用時選擇 1。

(107 位元組)scriptsig的長度為139個位元組,或十六進製制為8b

- (1 位元組)der 格式簽名長度

- (72 位元組)der 格式簽名

- (1 位元組)公鑰長度

- (33 位元組)公鑰

(4 位元組)序列號

總共:148 位元組

34位元組**(交易輸出大小)

(8 位元組)交易金額

(1 位元組)鎖定指令碼大小,1 ~ 9 位元組,計算式選擇最小值 1

(25 位元組)鎖定指令碼:25 位元組

- (4 位元組)4 個操作碼,每個 1 位元組

- (1 位元組)公鑰長度

- (20 位元組)收款方公鑰

總共:34 位元組

10位元組 **

(4 位元組)版本號

(4 位元組)鎖定時間

(1 位元組)輸入數量,1-9 位元組可變長整型,用來顯示交易輸入數量。

(1 位元組)輸出數量,1-9 位元組可變長整型,用來顯示交易輸出數量。

總共:10 位元組

以上我們已經將位元組數計算出來了,那麼如何計算手續費呢?

手續費=位元組數*  x satoshis / byte
x的取值是我們自己設定的,那到底設定多少合適呢?

這個要根據當時交易池內的交易數量來定了,礦工優先打包位元組費給的高的因此我們只要獲取當時satoshis / byte是被優先打包的就可以;

下圖為例:紅色部分代表satoshis / byte 和多少時間內被確認,我們選擇最優的13satoshis / byte 那麼我們最有可能的交易下乙個區塊就會被打包,相對的手續費也會變高;

此鏈結可查詢位元幣建議的手續費(satoshis / byte)

上述返回的 每位元組需要花費的聰(in satoshis per byte) ,而 settxfee設定的單位是每千節點需要花費的聰(feeperkb),

所以settxfee需要計算的是 每千字節需要花費的btc,即為 satoperbyte / 100,000

通常我們在設定btc交易手續費率時,是以btc為單位,以下我們進行詳解:

btc單位:

1位元幣(btc)  

0.01位元分(cbtc)

0.001毫位元(mbtc)

0.000001微位元(ubtc)

0.00000001聰(satoshi)(基本單位)

1 (btc) = 1000 (mbtc) = 1000000 (ubtc) = 100000000 (聰)

即:1 (btc) = 100000000 (聰)

btc 手續費公式: (in*148+34 out + 10) x satoshis / byte

例如:我們設定的手續費率為:0.0008 btc/ kvb ;含義為:每0.0008btc可交易1000 位元組

目前有一筆256位元組的交易,計算方式如下:

每位元組(0.0008 * 100000000 / 1000)satoshis  = 80 satoshis / byte

256位元組即:80 * 256 / 100000000 = 0.0002048 btc

當然計算出來的手續費有時候比實際的差幾聰原因應該是有些幣幣齡比較大,輸入的時候我們按照148算的,其實還有些位址是相對較小的一點的,具體是多少我不確定,計算出來的交易位元組數上下會有些許浮動,所以有時候算出來的值會差幾聰的。

各變數位元組數

win64,也就是x64編譯配置下 char 1位元組 short 2位元組 int 4位元組 long 4位元組 long long 8位元組 float 4位元組 double 8位元組 long double 8位元組 wchar t 2位元組 bool 1位元組 指標都是8位元組 char ...

unity AssetBundle位元組陣列加密

1.加密 對assetbundle的位元組陣列每位進行與key的異或處理 相同為0,不同為1 using system using system.collections.generic using system.io using system.linq using system.text names...

位元組陣列bytearray()

序列 常見的序列有 list,tuple,str,bytes,bytearray 位元組串 bytes,位元組陣列bytearray是二進位制資料組成的序列,其中每個元素8bit二進位制組成 位元組陣列bytearray 可變的位元組序列,相當於bytes的可變版本 建立bytearray物件的方法...