如何在沒有ETH的情況下用BTC支付gas費用
如果你像我一樣,你會被一種純粹的開採貨幣執行的想法所吸引,這種貨幣執行在(以及?)乙太網之上,並且具有超過10TH/s的SHA3工作證明功能。然而,你還需要ETH來支付gas的事實令人討厭。為什麼不使用0xBTC支付gas?畢竟它是一種數字貨幣。
目前,處理以太坊交易的以太坊礦工不接受ERC20代幣作為包含新tx的想法。這是另一個故事。那麼如果我們只是設定使用ETH為我們提交TX的中間人中繼伺服器,並接受ERC20代幣作為其工作的付款呢?
為了trustlessly地執行此操作,我們只需要能夠驗證Solidity中的offchain簽名。幸運的是,使用 ECRecover 和 EIP712 ,這很容易做到!Metamask甚至支援簽名型別資料以增加使用者友好性。
Lava協議是用於簽署型別化資料的新標準,其描述了具有代幣支付費用的ERC20代幣交易。這與現實生活中的“簽名支票”非常相似,也被稱為“Lava包”。不同的是,它是加密安全的,任何人都可以將其提交給以太坊網路,以獲得在ERC20令牌中支付的獎勵!
使這成為可能的Solidity合約稱為 Lava Token contract 。在這種情況下,它是0xBTC的1:1代理token,帶有一個名為 transferTokensWithSignature
的額外方法,它接受簽名lava包的以下輸入引數:
string methodName; //approve, transfer, or a custom data byte32 for ApproveAndCall() address relayAuthority; //address that is allowed to be msg.sender, use 0 for ANY address from; //the packet origin and signer address to; //the recipient of tokens address wallet; //this contract address uint256 tokens; //the amount of tokens to give to the recipient uint256 relayerRewardTokens; //the amount of tokens to give to msg.sender uint256 expires; //the eth block number this packet expires at uint256 nonce; //a random number to ensure that packet hashes are always unique bytes signature; //a signature that can only be created with the pKey of ‘from’
使用ECRecover,合約驗證token所有者(來自)確實為所有這些資料的雜湊生成了簽名。如果是這樣,合約進行交易! 以下是 http://relay.0xbtc.io 在實踐中的表現:
- 1.原子交換0xBTC到LAVA代理token,1:1(你可以隨時互換):
https://etherscan.io/tx/0xacff03194343462e8b6a11b7a9dd4de485ca73a09d39c9fb20b051da81ab8e90
- 2.使用支援Metamask等EIP712的軟體為新的LAVA交易生成一個offchain簽名:
- 3.將此lava包(10個輸入引數+簽名)提供給任何lava中繼節點( https://github.com/admazzola/lava-relay-node ),它將處理交易,支付ETH費用並宣告’Relay Reward’(代幣)作為付款。
一旦Lava Relayer獲得這些資料,他們將檢查費用,看它是否足夠高。如果是這樣,他們會將交易提交給以太坊主網,如下所示:
Ethereum Transaction 0x84274c1b3a91bcb4af0437f1bbc8bb388e1bdd8dccf59e6664c4f9c9751e2366 Ethereum (ETH) detailed transaction info for 0x84274c1b3a91bcb4af0437f1bbc8bb388e1bdd8dccf59e6664c4f9c9751e2366 etherscan.io
- 4.一旦交易完成,收件人即使你沒有花費ETH作為tx,也會收到ERC20代幣!這一切都是trustlessly完成的,並且使用了與以太坊TX本身相同的橢圓曲線簽名演算法,只是在solidity中處理。如果需要,你和收件人可以使用鏈式方法將LAVA代理token轉換回0xBTC。
總結:通過利用 ApproveAndCallWithSignature
功能,你可以通過使用中間人 Fire Contract
實際將LAVA轉換回沒有ETH的0xBTC,這樣的合約:
https://etherscan.io/address/0x16118cfdbf415e06291e79b72e3b793647fe2dd6#code
======================================================================
分享一些以太坊、EOS、比特幣等區塊鏈相關的互動式線上程式設計實戰教程:
- java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
- php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- ERC721以太坊通證實戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、標準與開發方案。內容包含ERC-721標準的自主實現,講解OpenZeppelin合約程式碼庫二次開發,實戰專案採用Truffle,IPFS,實現了通證以及去中心化的通證交易所。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
- EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
- 深入淺出玩轉EOS錢包開發 ,本課程以手機EOS錢包的完整開發過程為主線,深入學習EOS區塊鏈應用開發,課程內容即涵蓋賬戶、計算資源、智慧合約、動作與交易等EOS區塊鏈的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包訪問EOS區塊鏈,以及如何在React前端應用中整合對EOS區塊鏈的支援。課程內容深入淺出,非常適合前端工程師深入學習EOS區塊鏈應用開發。
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- c#比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在C#程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是C#工程師不可多得的比特幣開發學習課程。
- tendermint區塊鏈開發詳解 ,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裡是 如何在沒有ETH的情況下用BTC支付gas費用