買以太坊 買以太坊
Ctrl+D 買以太坊
ads

TPS:如何實現廣義的元交易(Meta Transaction)_https://etherscan.io

Author:

Time:1900/1/1 0:00:00

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

在合約內啟用元交易是一個強大的補充。要求用戶持有ETH來支付Gas一直以來都是而且仍然是新用戶進入的最大挑戰之一。如果只是簡單的點擊,誰知道現在會有多少人在使用以太坊?

但有時,解決方案可以在你的合約中加入元交易能力。實現起來可能比你想象的要容易。

MetaXKCD

什么是元交易?

元交易是一個普通的以太坊交易,它包含另一個交易,即實際交易。實際交易由用戶簽署,然后發送給運營商,用戶不需要Gas和區塊鏈交互。而是由運營商支付費用簽署交易,提交給區塊鏈。

合約確保在實際交易上有一個有效的簽名,然后執行它。

概述

如果我們想在合約中支持廣義的元交易,可以通過幾個簡單的步驟完成。從高層次上講,有兩個步驟:

第1步:驗證元交易的簽名。按照EIP-712標準和ecrecover創建一個哈希值來完成:

直播|小琬 > 挖礦小白如何區分Filecoin眾多礦商的優劣:金色財經 · 直播主辦的《 幣圈 “后浪” 仙女直播周》第9期15:00正在直播中,本期“后浪”仙女Blocklike CEO 小琬將在直播間聊聊“挖礦小白如何區分Filecoin眾多礦商的優劣”,感興趣的朋友掃碼移步收聽。[2020/7/15]

boolisValidSignature=ecrecover(hash(transaction),v,r,s)==transaction

結構化交易哈希

我們還需要在所有這些數據上計算一個哈希值。這將用于簽名schema和防止同一交易的重復執行。關于這方面的細節,請看最后的簽名解釋。

這是交易schema的哈希值:

EIP712_TRANSACTION_SCHEMA_HASH=keccak256(abi

通過hash所有相關的值,我們可以確保只有原用戶簽名的交易才會成功執行。例如,即使運營商只是改變了expirationTimeSeconds中的1秒,它也不能成功執行。

掌柜調查署 | Matrixport如何實現0息借貸:4月23日18:00,金色財經將邀請Matrixport高級副總裁林榕做客「掌柜調查署」。本期調查署將針對Matrixport推出的“0息借貸”進行深入“拷問”,帶大家一起了解Matrixport如何做到0息借貸惠澤大眾。詳情見原文鏈接。[2020/4/23]

這只是哈希值的第一部分,要了解包括安全簽名要求在內的全部細節,請閱讀下面關于簽名的部分。

設置正確的msg

function_getCurrentContextAddress()privateviewreturns(address){returncurrentContextAddress==address(0)?msg

你在合約中使用msg

將額外的信息放入我們的哈希值中,因此,一個已簽署的交易只能準確地用于該合約與給定的鏈Id。所有的細節,請查看EIP或我之前關于ERC20-Permit的文章。

好了,現在我們有了完整的交易哈希值和用戶的簽名。我們可以通過一個輔助工具提取byte32值來獲得三個值r、s、v,這三個值是簽名中的橢圓曲線簽名值。uint8的v值只需要一個簡單的轉換。

聲音 | 中國市場學會理事張銳:無論Libra命運如何 Facebook都是大贏家:7月18日,中國市場學會理事、經濟學教授張銳發表文章《無論Libra命運如何,Facebook都是大贏家》。文章指出,由于Libra錨定了銀行存款、政府債券以及一籃子貨幣,完全可以量度商品的價值,同時可以充當商品交換的媒介,并作為標的進入公眾財富的儲藏范疇。因此,即便是Libra不能獲得全球性法定貨幣的身份,但它完全能夠以數字貨幣的身份像比特幣那樣在商品與服務流通領域長袖善舞,而且龐大的用戶群體為其創造的價值空間一定比任何一種數字貨幣要廣闊寬泛得多。不僅如此,Libra還可像微信和支付寶那樣打開數字金融與數字社會的入口,從而將Facebook帶入新的商業模式。[2019/7/18]

使用ecrecover與給定的簽名和交易哈希,可計算出一個簽名者地址。如果這個地址與transaction

function_readBytes32(bytesmemoryb,uint256index)privatepurereturns(bytes32result){require(b

聲音 | BB:監管者不知道如何利用區塊鏈應對非傳統領域價值儲存的需求:Blcok.one的CEO BB發推文表示,監管者雖然知道區塊鏈,但他們不知道如何利用區塊鏈技術來應對主流市場對在非傳統領域價值儲存的快速增長需求,而這些非傳統領域更符合個人的信仰體系。[2019/4/21]

這就是常規的簽名方案。如果你需要用戶簽署他自己的交易,它就能完美地工作。

但如果你想讓智能合約創建有效的簽名呢?

高級簽名方案

一個更高級的使用場景是讓智能合約簽署元交易,但想象一下,用戶把他的資金放在一個多簽名的智能合約里面。這對于某些錢包來說已經很常見了。這個用戶不能用EIP-712方案簽署交易來創建一個有效的v、r、s簽名。

這就是EIP-1271的作用,它允許智能合約來驗證簽名。標準本身沒有說明合約如何做到這一點。唯一的定義是函數簽名,其定義是:

functionisValidSignature(bytes32hash,bytesmemorysignature)publicviewreturns(bytes4);

動態 | Coinbase試驗如何讓用戶更好地控制個人信息:據coindesk消息,Coinbase正在試驗如何讓用戶更好地控制他們的個人信息。Coinbase身份團隊的產品經理B Byrne表示:“正在創建依賴于Coinbase產品(如其移動錢包)與dapp資源管理器之間的橋梁。我正在觀察dapps,哪些客戶正在使用哪些dapps。這可能是一個很好的指標,表明我們的客戶希望在鏈上開展哪些類型的活動。”[2018/12/6]

其中有效簽名的返回值為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.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

巨鯨的資金涌向哪里,哪里就是熱點!

Tags:HTTTPSIONACThttps://etherscan.ioANATION幣factr幣在哪里買

中幣交易所
APE:關于WBF上線CEC的公告_HTT

尊敬的用戶: WBF即將在開放區上線CEC/USDT交易對,具體時間如下:充值時間:2021/7/1510:00提幣時間:2021/7/1510:00交易時間:2021/7/1510:00注意:.

1900/1/1 0:00:00
數字資產:AAX 視頻創作者召集!參加 2021 AAX 視頻創作大賽,分享 15K USDT 獎池!_AAB

AAX視頻創作者召集!參加2021AAX視頻創作大賽,分享15KUSDT獎池!作者AAXManager過去1小時內已更新簡介為慶祝我們2021年的業務增長,AAX將舉辦視頻創作大賽,瓜分15.

1900/1/1 0:00:00
SPR:關于ZT創新板即將上線TYB的公告_Prosper

尊敬的ZT用戶: ZT創新板即將上線TYB,并開啟TYB/USDT交易對。具體上線時間如下:充值:2021年7月9日16:00;交易:2021年7月10日15:00; TYB 項目簡介:為了區塊.

1900/1/1 0:00:00
DOGEFOOD:Dogefoodcoin技術與時代碰撞,讓每只狗狗都不再流浪_DOG

地球賦予了人類星球獨特的美麗,浩瀚的地球中,涌動著難以計數的生命,人類是生存在地球上的物種之一,我們在愛自己同類的同時,也應該尊重其他生命,善待和愛護我們身邊的小動物.

1900/1/1 0:00:00
GAT:Gate.io 已發PNG空投福利活動獎勵公告_Gate.io

Gate.ioPNG空投福利活動已圓滿結束,根據活動規則,我們已為符合規則的用戶發放了活動獎勵。用戶可進入“錢包—賬單明細”查詢獎勵發放情況.

1900/1/1 0:00:00
FIL:IPFS/Filecoin到底是否具備價值投資,會不會被收割_COIN

5G全面普及1年互聯網上產生的新數據等于傳統互聯網30年累計所有數據的總和將直接導致存儲市場到達萬億級別龐大數據的存儲傳輸需求現目前HTTP網絡中心化等問題急需尋求一個全新可靠的技術解決.

1900/1/1 0:00:00
ads