如何節省礦工費?給中心化加密貨幣交易平台的建議

發佈於 Jul 28, 2021 | 部落格

Save-gas-fee

中心化加密貨幣交易平台通常用什麼方式如何吸引用戶?廣告文宣、活動社群、折扣優惠都是選擇,但很多平台在最初的選擇通常都是用免手續費——免去用戶掛單買賣時的手續費、免去用戶的提領手續費等,這個方式的效果毋庸置疑,放眼望去幾乎所有新上線的平台,都會有幾週甚至幾個月的手續費優惠期間,足見這個方法的效益。

這方法吸引人的的原因很簡單,不管對進行量化交易或一般交易的用戶來說,交易手續費會吃掉他們的利潤空間,因此手續費高低就成為他們選擇平台的一項重要考量,較低的手續費不管是在加密貨幣交易所、傳統金融的銀行、證券交易所,都是一項吸引人的存在。

那交易平台為什麼一定要收手續費呢?手續費作為交易平台一項重要收入來源,這個收入除了用來支付伺服器、工資這些費用外,當用戶從交易平台提幣時,由於加密貨幣會從交易平台轉移到外部地址,這個過程必須要上鏈,因此必須支付礦工費,這個費用就是從交易平台跟用戶收取的手續費中支付的。假使我們無法降低伺服器、工資等開銷,我們有可能在不影響交易打包上鏈速度的情況下,減少礦工費的支出,讓交易所能一直提供較低的手續費,吸引客戶嗎?

答案是可以的。

首先,我們必須對交易平台內部流程有些了解。有交易平台錢包系統開發經驗的工程師或有經驗的幣圈玩家都知道,交易平台跟銀行類似,一開始會產生大量的地址,給每個用戶配發不同的地址供用戶充值入金,其目的就是要辨認出這次的充值入金,是哪個用戶進行的行為,才能給對應的用戶顯示充值入金的結果。

當成功充值後,如果用戶利用區塊鏈瀏覽器仔細觀察那個充值地址,常常可以發現那個地址的入金在一段時間後會被轉移到另一個地址,這是交易所常有的行為 –「歸集」,把零散的幣歸集到一個大水庫,供用戶後續提幣或資金調度使用。等到用戶真的要提幣時,才從大水庫或者叫提幣錢包或熱提錢包,將幣轉到用戶指定地址,這個行為稱為提領。

歸集跟提領這兩個行為其實都會上鏈,也就是都需要花費礦工費,如果降低提領時的礦工費,就會造成打包速度變慢,因此我們從歸集上做些手腳,盡可能省下歸集所需的礦工費。接下來我們將針對各不同區塊鏈幣種的特性,介紹一些降低歸集所需礦工費的方法:

方法 1. ETH 由充值的人支付歸集礦工費,交易平台完全不用花礦工費

如圖一的簡圖,藉由智能合約中的 fallback 功能,讓所有充值到合約地址上的 ETH 自動轉移到指定地址,也就是由充值的客戶來支付礦工費的意思,在這個方法中,我們需要給每個用戶部署一個智能合約,智能合約地址就是用戶的充值地址,所有打進這個地址的交易,都會自動觸發轉帳到另一個錢包。由於充值跟歸帳的行為是在一次交易中發生的,因此在一筆交易中,我們就完成了充值跟歸集,礦工費會由發起充值交易的對象來支付。

圖一

圖一

像這筆交易是由用戶轉進 0x510f3b51c08e169289379129001a1695c7dd1b33 合約地址的 ETH,會在本筆交易直接被轉入 0x1019B191ee5C98Bd88751Dc6Ee1D66Bb08954D52 的歸集地址。

這個方法需要幫每個用戶部署一個智能合約,但正常每一筆歸集交易會花費 21,000 gaslimit,先不算 gas price,基本上只要這個用戶充值並歸集超過一定次數,對交易平台來說就絕對值得幫他部署一個合約,交易平台甚至可以事先做個簡單的檢測,只有充值頻繁的客戶才幫他換成這種合約地址。

這個方法下的歸集礦工費,將會從「21000 gas limit x 時價 gas price」變成「0」,以 1 ETH = USD 2,000 的價格以及 80 gwei 的 gas price 來計算,一筆充值就可以幫你省下 USD 3.36,交易平台們只要透過簡單的計算,就可以明白用這個方法,在每個月成千上萬次的 ETH 充值下,可以幫你省下多少錢!

方法 2. ERC20 代幣合約中提供 ABI,讓呼叫者支付歸帳礦工費,節省水池打燃料給充值地址的礦工費,同時避免小額燃料費殘留問題

ETH 代幣中最知名的 ERC20 代幣當屬 USDT,參考 USDT-ERC20 合約地址可以看到 USDT-ERC20 的所有交易,由於 USDT 的交易其實是對發行 USDT 的合約進行交易,在交易中會讓 USDT 合約把登記在合約中 A 地址的 USDT 轉移登記到 B 地址底下,這是合約裡的固定行為,在無法修改合約內容的情況下,我們無法像第一個方法中,讓充值的人支付歸集礦工費。

那麼一般 ERC20 代幣的充值入金是怎麼歸集的呢?如圖二中,用戶入金 USDT-ERC20 到某個地址以後,你通常可以看到會從其它地方轉一筆 ETH 進來,接著就可以看到這個地址的 USDT-ERC20,利用轉進來的這筆 ETH 當燃料費把 USDT-ERC20 轉走。這就是在歸集的過程,會先由特定地址(該地址通常被稱為燃料水池)轉進燃料費,然後再把 USDT-ERC20 轉走。所以交易平台在歸帳 USDT-ERC20 時,總共會花費「21000 gas limit x 時價 gas price」 + 「60000~90000 gas limit x 時價 gas price」,第一筆的 21000 gaslimt 是燃料水池把 ETH 轉到充值地址的礦工費,第二筆的 60000~90000 gaslimit 是充值地址把 USDT-ERC20 歸帳的礦工費,由於合約交易要花費的礦工費是不固定的,通常都會轉進一個稍高的值,如果當次歸帳沒有花完,就留在地址當中,下次歸帳繼續使用。

圖二

圖二

對此我們建議客戶進行如下修改,如圖三中,USDT-ERC20 充值地址依然是個智能合約,當用戶把 USDT-ERC20 轉進該地址以後,合約部署者可以呼叫一個 flushtoken ABI,ABI 中會把該地址的 USDT-ERC20 轉到歸帳錢包上,這個交易一次就可以達到 「燃料水池把礦工費轉給充值地址」+「充值地址把 USDT-ERC20 轉給歸帳錢包」的效果。

這個方法就如同這筆交易,也需要幫每個用戶部署一個智能合約,但可以跟之前的 ETH 智能合約同地址,也就是用戶不管充值 ETH 或 USDT-ERC20 都是充值到同樣的地址,當用戶充值 USDT-ERC20 時,由合約部署者呼叫 ABI 來進行 USDT-ERC20 轉移,歸帳礦工費將會從圖二的「21000 gaslimit x 時價 gasprice」 + 「60000~90000 gaslimit x 時價 gasprice」降至約「50000 gaslimit x 時價 gasprice」。

圖三

圖三

因為交易無需預估轉帳 USDT-ERC20 需要的 gaslimit,也不會有殘留問題,對於礦工費將有極大的節省。同樣的,這個合約可以針對頻繁交易的用戶才幫其部署使用,以求最大效益。

方法 3. ETH 或 ERC20 代幣可自動化設定礦工費低點進行歸帳

由於不是每個人都知道怎麼撰寫智能合約,同時部署智能合約也需要成本,因此針對 ETH 原生地址,你也可以使用一些方法來節省礦工費,如果將 ETH 礦工費歷史紀錄翻開,可以發現即便是礦工費最高 (500-600 gwei) 的那段時間,每天或每週都會有一兩個時段,礦工費會維持低檔一段時間,因為交易畢竟是人在進行的,很多時候進入休息時段,交易沒這麼熱絡就會出現礦工費降低的空擋,因此設定好你的礦工費上限,超過上限就暫時不要交易,當礦工費低於上限一段時間就趕緊歸帳吧!

方法 4. 利用 ERC20 合約標準接口的 approve 跟 transferFrom ABI,節省水池打燃料給充值地址的礦工費,同時避免小額燃料費殘留問題

由於 ERC20 合約都提供有 approve 及 tansferFrom 兩個 ABI,善用這兩個 ABI 就能夠讓每次歸集 ERC20 代幣時,免去從水池打礦工費給歸帳地址的那筆交易費用,直接呼叫 transferFrom 進行歸帳,也免去會有小額燃料費沒有用完又不想回收的問題。

方法 5. BTC/LTC 等 UTXO 類型的幣種,可以將充值跟提幣錢包合併,不做歸集,直接使用用戶充值的多個 UTXO 組合,滿足客戶的提幣請求

對於 UTXO 類型的幣種如 BTC / LTC / BCH / BSV / DASH / DOGE 等幣種,由於幣種本身支援 multi-in & multi-out,客戶充值在不同地址的資產就能夠合併使用,比如有三個客戶分別充值了 0.1、0.3、0.06 BTC,當你需要進行一筆提幣金額是 0.35 BTC,系統就可以直接拿出 0.1 跟 0.3 BTC 組合成一筆交易提出,省掉了歸集的過程,當然,因為提幣錢包跟充值錢包合併了,資安風險自然會增加,用戶在創建這種類型的錢包時務必要注意安全風險,進行風控降低風險係數。

方法 6. USDT-Omni 由歸帳地址支付礦工費,節省水池打燃料給充值地址的礦工費,同時還可以用上 USDT-Omni 交易中小額的 Dust

最後則是 USDT-Omni 歸帳的方式,由於 USDT-Omni 交易時,交易中都會帶上一個0.00000546 或 0.0000054 BTC 的 Dust,這筆如灰塵般的 BTC 實在讓人想收下也不是,不收下一直放在那也礙眼,此外當要歸集 USDT-Omni 時,也必須打一筆礦工費進到這個地址才能進行歸帳,在 Omni 的協議中其實是允許對方幫他付款的,因此利用 Omni 協議中的這項功能,就不用先把礦工費打給歸帳地址,而是可以直接進行歸帳,由歸帳地址直接支付礦工費,同時把 USDT-Omni 當初充值時小額的 Dust 作為 Input 來產生一筆 Dust 的 Output。

總結

以上是一些節省礦工費的方式,這邊同時要提醒各位交易平台,在進行上述節省礦工費的操作時,對於系統的安全性跟穩定性也要注意,如果沒有十分把握可以完整實現上述功能,可以與 CYBAVO 聯繫,CYBAVO 的錢包系統特別針對交易的安全、穩定、節省礦工費、偵測假充值、合規反洗錢等各方面都進行了深度挖掘及設計,也已經被多家大型加密貨幣交易所採用,提供的方案適合多種中心化平台使用,可以快速部署上線,如果有任何需要可以聯繫 info@cybavo.com 或到 CYBAVO 官網查詢更多訊息!