譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny熊
在合約內啟用元交易是一個強大的補充。要求用戶持有ETH來支付Gas一直以來都是而且仍然是新用戶進入的最大挑戰之一。如果只是簡單的點擊,誰知道現在會有多少人在使用以太坊?
但有時,解決方案可以在你的合約中加入元交易能力。實現起來可能比你想象的要容易。
MetaXKCD
什么是元交易?
元交易是一個普通的以太坊交易,它包含另一個交易,即實際交易。實際交易由用戶簽署,然后發送給運營商,用戶不需要Gas和區塊鏈交互。而是由運營商支付費用簽署交易,提交給區塊鏈。
合約確保在實際交易上有一個有效的簽名,然后執行它。
概述
如果我們想在合約中支持廣義的元交易,可以通過幾個簡單的步驟完成。從高層次上講,有兩個步驟:
第1步:驗證元交易的簽名。按照EIP-712標準和ecrecover創建一個哈希值來完成:
谷歌搜索趨勢:如何購買黃金和比特幣的搜索量激增:金色財經報道,在美國銀行業動蕩期間,谷歌趨勢顯示與黃金收購相關的搜索量顯著激增,搜索查詢在 2023 年 4 月的第一周達到滿分 100。同樣,搜索兩周前,即 2023 年 3 月 20 日,術語“如何購買比特幣”達到了相同的分數。除了黃金,谷歌趨勢數據還顯示,人們對黃金的興趣在搜索詞“如何購買比特幣”中的排名也有所上升,根據 90 天的統計數據,在 2023 年 3 月 20 日達到了 100 的高分。Bitcoin.com News數據顯示,從 3 月中旬到 4 月,搜索查詢“比特幣”也在增加。[2023/4/28 14:32:37]
boolisValidSignature=ecrecover(hash(transaction),v,r,s)==transaction
結構化交易哈希
我們還需要在所有這些數據上計算一個哈希值。這將用于簽名schema和防止同一交易的重復執行。關于這方面的細節,請看最后的簽名解釋。
這是交易schema的哈希值:
Digital Insights Ventures 創始人:為了使Web3成功,人們需要了解輔助系統將如何蓬勃發展:金色財經現場報道,在Coinlive舉辦的峰會上,新加坡區塊鏈協會 (BAS) 可持續發展與影響小組委員會創始主席兼Digital Insights Ventures 創始人 Krishna Ramachandra 以主題演講“Web3 和人工智能 (AI):助力去中心化技術的代幣化和可持續性。”他分享了 Digital Insights 采用的核心見解:交互、互操作性、集成和互連。
此外,他還談到了網絡的語義,并解釋說Web3,當你分解它時,它只是指你對數據使用方式的控制。他解釋說,為了使Web3成功,人們需要了解輔助系統將如何蓬勃發展。他在演講結束時說,如果有影響力或權力的人不幫助可持續發展的敘述,我們將永遠不會看到Web3的全部力量。[2022/12/22 22:00:35]
EIP712_TRANSACTION_SCHEMA_HASH=keccak256(abi
通過hash所有相關的值,我們可以確保只有原用戶簽名的交易才會成功執行。例如,即使運營商只是改變了expirationTimeSeconds中的1秒,它也不能成功執行。
大咖零距離 | BTC價格劇烈波動 如何保持長期盈利:4月1日16:00,金色盤面邀請撈針選手泰迪幫主做客金色財經《大咖零距離》直播間,將分享《BTC價格劇烈波動,如何保持長期盈利》,敬請關注,欲進群觀看直播掃描海報二維碼報名即可。[2020/4/1]
這只是哈希值的第一部分,要了解包括安全簽名要求在內的全部細節,請閱讀下面關于簽名的部分。
設置正確的msg
function_getCurrentContextAddress()privateviewreturns(address){returncurrentContextAddress==address(0)?msg
你在合約中使用msg
將額外的信息放入我們的哈希值中,因此,一個已簽署的交易只能準確地用于該合約與給定的鏈Id。所有的細節,請查看EIP或我之前關于ERC20-Permit的文章。
好了,現在我們有了完整的交易哈希值和用戶的簽名。我們可以通過一個輔助工具提取byte32值來獲得三個值r、s、v,這三個值是簽名中的橢圓曲線簽名值。uint8的v值只需要一個簡單的轉換。
聲音 | Galaxy Digital創始人:山寨幣需要向比特幣學習如何逐步吸引用戶建立生態系統:加密公司Galaxy Digital創始人Mike Novogratz認為,并不是所有的山寨幣都會成功,但是一些具有潛力和價值的必須尋求建立渠道,以使人們和機構更容易購買它們。他表示:”有很多垃圾籌集了很多資金,但沒有可持續性。他們承諾要建立許多協議和生態系統,然后吸引用戶使用該生態系統,使之成為投機資產。為了保持投機市場的活力,需要時不時以新聞和更新的形式加油。我們必須將這些代幣視為風險投資。”同時他補充說,這些山寨幣之所以失敗,是因為它們在如何將人們引入其生態系統方面沒有發揮作用。他強調這樣的山寨幣必須仰賴比特幣,并觀察該生態系統如何為逐步采用奠定基礎。(AMBCrypto)[2019/10/7]
使用ecrecover與給定的簽名和交易哈希,可計算出一個簽名者地址。如果這個地址與transaction
function_readBytes32(bytesmemoryb,uint256index)privatepurereturns(bytes32result){require(b
聲音 | Circle首席執行官:加密和區塊鏈產業是對公民社會最終如何運作基礎的再設計:據Cointelegraph消息,Circle首席執行官Jeremy Allaire在世界銀行集團和國際貨幣基金組織(IMF)2019年春季會議上表示,加密和區塊鏈產業是對公民社會最終如何運作的基礎根本性的重新設計。Allaire認為,加密和區塊鏈產業不僅關乎數字支付,還關乎一種新的基礎設施,用于記錄重要信息,并為構建解決方案提供一個更加去中心化、更具彈性的基礎。[2019/4/12]
這就是常規的簽名方案。如果你需要用戶簽署他自己的交易,它就能完美地工作。
但如果你想讓智能合約創建有效的簽名呢?
高級簽名方案
一個更高級的使用場景是讓智能合約簽署元交易,但想象一下,用戶把他的資金放在一個多簽名的智能合約里面。這對于某些錢包來說已經很常見了。這個用戶不能用EIP-712方案簽署交易來創建一個有效的v、r、s簽名。
這就是EIP-1271的作用,它允許智能合約來驗證簽名。標準本身沒有說明合約如何做到這一點。唯一的定義是函數簽名,其定義是:
functionisValidSignature(bytes32hash,bytesmemorysignature)publicviewreturns(bytes4);
其中有效簽名的返回值為0x1626ba7e。如何實現簽名邏輯則取決于智能合約開發者。
那么,我們怎樣才能驗證這樣的簽名呢?
你可以在下邊看到一個實現的例子。使用staticcall,我們可以確保在調用過程中沒有進一步的狀態修改發生。如果結果成功并且有一個有效的returnData長度,我們可以檢查返回值是否符合0x1626ba7e。
function_staticCallEIP1271Wallet(addressverifyingContractAddress,bytesmemorydata,bytesmemorysignature)privateviewreturns(bool){bytesmemorycallData=abi
你可能想允許更多的簽名方法,比如預簽名或擁有可以代表用戶簽名的運營商。請看0x這里中的現有類型,以獲得一些靈感。
自己實現
到目前為止,我們已經看到了所有實現的關鍵部分,這應該讓你對如何實現它有一個好的啟發。我還建議你看一下:
0x元交易的實現
OpenzeppelinEIP-712支持
實現簽名部分的npmeip-712庫
OpenzeppelinEIP-712庫仍然是一個草案,但對鏈ID可能改變的分叉情況有額外支持。也可以看看0x代碼,本博文中的很多實現都來自于此。
本翻譯由CellNetwork贊助支持。
來源:https://soliditydeveloper.com/meta-transactions
參考資料
登鏈翻譯計劃:https://github.com/lbc-team/Pioneer
翻譯小組:https://learnblockchain.cn/people/412
Tiny熊:https://learnblockchain.cn/people/15
EIP-712:https://eips.ethereum.org/EIPS/eip-712
EIP-712:https://eips.ethereum.org/EIPS/eip-712
ERC20-Permit:https://learnblockchain.cn/article/1790
EIP-1271:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1271.md
這是非常關鍵的,見之前的0xbug:https://samczsun.com/the-0x-vulnerability-explained/
這里:https://0x.org/docs/guides/v3-specification#signature-types
0x元交易的實現:https://github.com/0xProject/0x-monorepo/blob/development/contracts/exchange/contracts/hide/MixinTransactions.sol
OpenzeppelinEIP-712支持:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/drafts/EIP712.sol
eip-712庫:https://github.com/Mrtenz/eip-712
CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain
免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。
本文來源于非小號媒體平臺:
登鏈社區
現已在非小號資訊平臺發布105篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/10155700.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
巨鯨的資金涌向哪里,哪里就是熱點!
秘寶是公鏈Nervos的生態團隊NervinaLabs推出的面向NFT玩家的項目。用戶可以在秘寶中探索各種有意思的NFT,對自己喜愛的NFT進行轉讓和收藏等操作.
1900/1/1 0:00:00尊敬的ZT用戶: ZT挖礦寶將于近期上線“ZTB/TF/DED/BONBON?-OMEGA”挖礦活動.
1900/1/1 0:00:00作者?|陳麗姍?編審?|照生?排版?|?王紀瓏琰“在人類的面前有兩條路:一條向外,通往星辰大海,一條對內,通往虛擬現實.
1900/1/1 0:00:00尊敬的用戶: WBF將在開放區掘金板塊上線ANY/USDT交易對,具體上線時間如下:暫不開啟充幣.
1900/1/1 0:00:00親愛的PandaFe熊貓用戶:針對近期部分用戶錯誤理解“預估強平價”和“強制平倉”的情況有所增多,平臺在此作出說明:在USDT永續合約中,預估強平價為當用戶的風險率=50%時的預估價格.
1900/1/1 0:00:00從今年3月份開始關注BZZ并參加測試網測試,再到主網上線前的跳票,這小半年時間礦工可以說被SWARM項目方按在地上摩擦玩弄,但最近在Youtube和一些圈內渠道發現.
1900/1/1 0:00:00