BTC交易字节数及手续费计算

首先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 那么我们最有可能的交易下一个区块就会被打包,相对的手续费也会变高;

查看地址: https://bitcoinfees.earn.com/
在这里插入图片描述

此链接可查询比特币建议的手续费(satoshis / byte)

https://bitcoinfees.earn.com/api/v1/fees/recommended
{"fastestFee":102,"halfHourFee":102,"hourFee":88}
  • FasterFee :当前将导致最快的交易确认(通常为0到1个块延迟)的最低费用(以每字节satoshis为单位)。
  • halfHourFee :将在半小时内(以90%的概率)确认交易的最低费用(以字节为单位的字节数)。
  • hourFee :将在一个小时内(以90%的概率)确认交易的最低费用(以字节计,单位为字节)。

上述返回的 每字节需要花费的聪(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算的,其实还有些地址是相对较小的一点的,具体是多少我不确定,计算出来的交易字节数上下会有些许浮动,所以有时候算出来的值会差几聪的。

<think>我们正在回答用户关于OKXAPI交易手续费的问题。用户询问了手续费计算方法,并希望用Python展示。根据之前提供的引用,我们可以参考引用[2]中关于费用计算函数的写法,但需要注意OKX的手续费规则。OKX手续费计算规则:1.手续费收取方式:Maker(挂单)和Taker(吃单)不同费率2.通常Maker有折扣甚至负手续费(返佣),Taker费率较高3.手续费收取的是交易额(数量*价格)的一定比例,通常为0.08%~0.1%4.手续费可以用交易货币或OKB支付(若用OKB支付可能有折扣)假设我们有以下费率:-Maker费率:0.08%(0.0008)-Taker费率:0.1%(0.001)手续费计算公式:手续费=交易数量×交易价格×费率注意:如果是买入,手续费通常从买入的币种中扣除(即你得到的是买入量扣手续费后的数量);卖出时手续费从卖出的币种中扣除。但根据OKX的API文档,实际手续费计算可能会更复杂,因为它取决于用户等级、交易量、持仓OKB数量等因素。这里我们展示一个简化版本。我们可以编写一个Python函数来计算手续费:参数:-side:交易方向('buy'或'sell')-order_type:订单类型('maker'或'taker')-price:交易价格(单位:计价货币,如USDT)-volume:交易数量(单位:交易货币,如BTC)返回:手续费金额(以计价货币计算,除非特殊情况)注意:在买入时,如果用计价货币支付手续费,那么手续费就是交易额(price*volume)乘以费率;在卖出时,手续费交易货币的数量乘以费率(然后换算成计价货币?)。但通常手续费直接以交易计算。根据OKX的规则,手续费通常以计价货币收取(如USDT),但也可以选择用交易货币(如BTC)或OKB支付。这里我们按照计价货币计算。所以:手续费(计价货币)=交易额(price*volume)*费率但是,如果用户选择用交易货币支付,则买入时手续费从买入的币中扣除(即实际到手的币减少),卖出时从卖出的币中扣除(即实际收到的计价货币减少)。简化处理:我们只计算计价货币的手续费金额,不考虑支付方式(因为支付方式的选择会影响账户余额的扣除,但计算金额是一样的,只是币种不同)。另外,OKX的费率可能是分等级的,这里我们假设用户传入费率。因此,我们设计两个函数:1.计算单笔交易手续费2.根据用户等级、交易量等计算实际费率(这里不展开,仅提供框架)步骤:1.根据用户等级、交易量、是否持有OKB等因素计算实际费率(简化:直接使用传入费率)2.计算交易额=price*volume3.根据订单类型(maker/taker)选择费率4.计算手续费=交易额*费率注意:OKX的手续费规则文档:https://www.okx.com/fees我们编写如下函数:</think> ### OKX API 交易手续费详解 #### 手续费计算机制 OKX API 交易手续费采用**梯度费率制度**,主要考虑两个核心因素: 1. **交易量因素**:30天累计交易量越高,费率越低 2. **身份因素**: - Maker(挂单方):提供流动性可获费率优惠 $$ \text{maker\_rate} \in [0.000, 0.080]\% $$ - Taker(吃单方):消耗流动性适用较高费率 $$ \text{taker\_rate} \in [0.010, 0.100]\% $$ ```mermaid graph LR A[交易类型] --> B{Maker挂单} A --> C{Taker吃单} B --> D[最低0费率] C --> E[最低0.01%费率] F[30天交易量] --> G[等级越高费率越低] H[OKB持仓量] --> I[额外费率折扣] ``` #### 手续费计算公式 $$ \text{手续费} = \begin{cases} \text{交易额} \times \text{maker\_rate} & \text{(挂单交易)} \\ \text{交易额} \times \text{taker\_rate} & \text{(吃单交易)} \end{cases} $$ 其中: - 交易额 = 交易数量 × 成交价格 - 费率根据用户等级动态调整[^2] #### Python 手续费计算示例 参考引用[2]的费率计算逻辑,实现OKX手续费计算: ```python def calculate_fee(order_type, volume, price, trading_level=1): """ 计算OKX交易手续费 :param order_type: 'maker' 或 'taker' :param volume: 交易数量 :param price: 成交价 :param trading_level: 用户交易等级 (1-5) :return: 手续费金额 """ # 基础费率表(单位:百分比) fee_table = { 'maker': [0.080, 0.075, 0.070, 0.065, 0.060], 'taker': [0.100, 0.090, 0.080, 0.070, 0.060] } # 获取对应等级的费率 rate = fee_table[order_type][trading_level-1] / 100 # 计算交易额并应用费率 trade_amount = volume * price fee = trade_amount * rate # 持有OKB的额外折扣(简化示例) if order_type == 'maker' and trading_level > 1: fee *= 0.7 # 30%折扣 return fee # 示例调用 trade_value = calculate_fee('taker', 2.5, 30000) # 2.5 BTC按3万美元成交 print(f"交易手续费:${trade_value:.2f}") ``` #### 手续费优化策略 1. **提升用户等级**: ```python # 通过增加交易量提升等级 volume_thresholds = [500000, 2000000, 5000000, 10000000] # USD ``` 2. **OKB持仓优惠**: ```math \text{实际费率} = \text{基准费率} \times (1 - \frac{\text{OKB持仓}}{10000} \times 0.2) ``` 3. **API流量折扣**: - 每月API请求量 > 10万次可获额外0.01%费率减免[^3] > **注意**:实际费率需通过官方API获取最新数据: > ```python > response = requests.get("https://www.okx.com/api/v5/account/trade-fee") > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰哥的技术杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值