譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny熊
在合約內啟用元交易是一個強大的補充。要求用戶持有ETH來支付Gas一直以來都是而且仍然是新用戶進入的最大挑戰之一。如果只是簡單的點擊,誰知道現在會有多少人在使用以太坊?
但有時,解決方案可以在你的合約中加入元交易能力。實現起來可能比你想象的要容易。
MetaXKCD
什么是元交易?
元交易是一個普通的以太坊交易,它包含另一個交易,即實際交易。實際交易由用戶簽署,然后發送給運營商,用戶不需要Gas和區塊鏈交互。而是由運營商支付費用簽署交易,提交給區塊鏈。
合約確保在實際交易上有一個有效的簽名,然后執行它。
概述
如果我們想在合約中支持廣義的元交易,可以通過幾個簡單的步驟完成。從高層次上講,有兩個步驟:
第1步:驗證元交易的簽名。按照EIP-712標準和ecrecover創建一個哈希值來完成:
JPEG'd正在就如何分配Curve漏洞資金進行投票:金色財經報道,NFT支持的貸款協議JPEG'd 在最近的Curve漏洞中損失了近1200萬美元的加密貨幣,然后支付了100萬美元的賞金以收回90%的資金(5,495.4 WETH),用于將恢復的WETH支付到所有因Curve漏洞而遭受損失的地址,現在其DAO正在就如何分配漏洞資金進行投票,共六項提案,投票截至日期為周六。解決這種情況需要發行新的pETH代幣,該代幣將以1 pETH : 1 ETH的價格空投到漏洞利用前持有pETH的錢包。[2023/8/19 18:09:44]
boolisValidSignature=ecrecover(hash(transaction),v,r,s)==transaction
結構化交易哈希
我們還需要在所有這些數據上計算一個哈希值。這將用于簽名schema和防止同一交易的重復執行。關于這方面的細節,請看最后的簽名解釋。
這是交易schema的哈希值:
EIP712_TRANSACTION_SCHEMA_HASH=keccak256(abi
海德薇格:我很期待看到 數字貨幣將如何改變人民幣支付市場:第十七屆中國國際金融論壇于2020年12月17日-18日在上海舉行。主題為“數字經濟時代的金融服務”。國際銀行業聯合會(IBFed)總裁海德薇格?挪倫斯視頻參會并致辭時指出:金融穩定委員會正在監測大科技公司的創新和金融穩定風險,并且已經發表了很多關于該主旨的文章,例如在2020年10月13日發表的一篇文章中,就提出了關于全球穩定幣的10個高層建議。考慮到創新的規模之大,監管機構和監督機構都需要拓寬自己的視野,并且彼此之間開展更多合作。
中國監管機構一直在積極加強監管,以便隨時應對大科技公司所引起的市場變化。例如,去年,中國人民銀行就起草了相關規則,要求將銀行和金融服務與金融控股公司旗下的科技公司分離,并對這些科技公司進行監管。 現在,要求支付公司必須有100%的存款準備金。
中國還率先推出了由國家信用支持的數字貨幣。我很期待看到這些數字貨幣將如何改變中國國內和境外的人民幣支付市場。(新浪財經)[2020/12/17 15:29:42]
通過hash所有相關的值,我們可以確保只有原用戶簽名的交易才會成功執行。例如,即使運營商只是改變了expirationTimeSeconds中的1秒,它也不能成功執行。
神魚:準備寫耕田日記介紹如何5天挖回500萬U:F2Pool聯合創始人神魚在微博表示,準備寫個耕田日記,如何5天挖回500萬U。 ????神魚補充說,沒仔細算,本金大概500萬U。[2020/9/2]
這只是哈希值的第一部分,要了解包括安全簽名要求在內的全部細節,請閱讀下面關于簽名的部分。
設置正確的msg
function_getCurrentContextAddress()privateviewreturns(address){returncurrentContextAddress==address(0)?msg
你在合約中使用msg
將額外的信息放入我們的哈希值中,因此,一個已簽署的交易只能準確地用于該合約與給定的鏈Id。所有的細節,請查看EIP或我之前關于ERC20-Permit的文章。
好了,現在我們有了完整的交易哈希值和用戶的簽名。我們可以通過一個輔助工具提取byte32值來獲得三個值r、s、v,這三個值是簽名中的橢圓曲線簽名值。uint8的v值只需要一個簡單的轉換。
聲音 | 北京工商大學顏蘇:區塊鏈行業如何與公檢法司形成有效的聯動機制,是值得研究的:據新華網消息,本月在上海法學會會議上,北京工商大學法學院副教授顏蘇表示,區塊鏈行業從業者應用自身掌握的區塊鏈這一新興技術,助力公檢法司進行區塊鏈領域的反詐騙,在這個方向上,行業如何能與公檢法司形成有效的聯動機制,是值得關注的研究主題。[2019/7/28]
使用ecrecover與給定的簽名和交易哈希,可計算出一個簽名者地址。如果這個地址與transaction
function_readBytes32(bytesmemoryb,uint256index)privatepurereturns(bytes32result){require(b
這就是常規的簽名方案。如果你需要用戶簽署他自己的交易,它就能完美地工作。
但如果你想讓智能合約創建有效的簽名呢?
高級簽名方案
一個更高級的使用場景是讓智能合約簽署元交易,但想象一下,用戶把他的資金放在一個多簽名的智能合約里面。這對于某些錢包來說已經很常見了。這個用戶不能用EIP-712方案簽署交易來創建一個有效的v、r、s簽名。
美國銀行分析師解釋比特幣如何像常規貨幣:據CCN報道,美國圣路易斯聯邦儲備銀行內容策略師Christine Smith認為,比特幣不像人們想象的那樣異乎尋常,比特幣的兩個用例是作為價值和貨幣存儲的,史密斯論證比特幣與普通貨幣沒有區別的三大理由:
1.比特幣和美元都沒有實物資產支持;
2.“稀缺”是美聯儲貨幣體系穩定戰略的核心,因為“為了保持其價值,貨幣必須供應有限”,而比特幣的數量也是有限的。
3.比特幣“純粹的電子現金對等版本可以讓在線支付從一方直接發送到另一方,而無需通過金融機構”,這與現金花費方式有相似性,即“不需要中間人處理交易”。[2018/5/1]
這就是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.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
巨鯨的資金涌向哪里,哪里就是熱點!
尊敬的用戶: WBF將在開放區上線BFS/USDT交易對,具體上線時間如下:充值時間:2021/7/1512:00提幣時間:2021/7/1514:00交易時間:2021/7/1514:00項目.
1900/1/1 0:00:00尊敬的用戶: WBF即將在開放區上線CEC/USDT交易對,具體上線時間請關注官方公告。項目介紹:CEC基于蓮蕊生態發行的價值數字資產,維護生態內部資產價值的運轉穩定.
1900/1/1 0:00:001.“礦工”簡而言之就是挖礦的。黃金是從金礦里挖出來的,比特幣是從數字里面挖出來的。并且,由于比特幣沒有中心化的發行機構,而是由全網礦工通過挖礦競爭,共同發行的.
1900/1/1 0:00:00要預防這種區塊鏈平臺跑路造成用戶權益損害情況,除了寄望相關部門提升管控力度和精度以外,用戶自己也該提高警惕。總的來看,應當注意以下幾點:第一、貪婪招損.
1900/1/1 0:00:00Gate.ioPNG空投福利活動已圓滿結束,根據活動規則,我們已為符合規則的用戶發放了活動獎勵。用戶可進入“錢包—賬單明細”查詢獎勵發放情況.
1900/1/1 0:00:00地球賦予了人類星球獨特的美麗,浩瀚的地球中,涌動著難以計數的生命,人類是生存在地球上的物種之一,我們在愛自己同類的同時,也應該尊重其他生命,善待和愛護我們身邊的小動物.
1900/1/1 0:00:00