日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

How to save your Ethereum Dapp users from paying gas for transactions

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 How to save your Ethereum Dapp users from paying gas for transactions 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以太坊dapp采用的一個摩擦點是用戶必須支付一筆支付天然氣(交易(txn)費)才能讓他們的交易記錄在區塊鏈上。 例如,我有一個簡單的投票dapp ,讓任何人都可以為候選人投票,并將選票存儲在區塊鏈中。 想要在區塊鏈上記錄投票的用戶必須支付交易/燃氣費。 這并不理想,因為作為一個dapp所有者,您希望您的應用程序用戶擁有以太網來支付燃氣費用,因為他們所要做的只是執行與轉賬無關的簡單操作。 但是如果交易需要在區塊鏈上執行,除了支付費用之外別無選擇。 如果用戶有安全地執行交易的方式(如我們的例子中為候選人投票),并讓其他人(可能是合同擁有者)在區塊鏈上記錄交易并自行付款?

感謝John Backus發來的這條推文,我只有足夠的信息來幫助我為我的投票dapp實現這樣的解決方案。

我想分享有關我如何為我的簡單dapp實施此解決方案的詳細信息,以便更多人可以在他們自己的dapps中采用這種技術,并且可以有所改進。 這篇文章涵蓋以下內容:

  • 公鑰密碼學和數字簽名的高級概述,這是理解這個解決方案的關鍵。
  • 解決方案細節和新的應用程序流程。
  • 實施細節(前端js和Solidity合同代碼)。
  • 討論潛在的問題和增強。
  • 數字簽名

    要使這個解決方案合理化,您需要對數字簽名如何在加密中起作用有一個基本的了解。 如果您知道公鑰密碼術,請隨意跳過本節。 我將盡力在非常高的層次上解釋公鑰/私鑰和數字簽名的概念,但我強烈建議詳細學習 - 維基百科是一個很好的開始 。

    公鑰密碼術是一個密碼系統,你有兩個密鑰 - 公鑰(Pu)和私鑰(Pr)。 你把你的公鑰交給整個世界,把私鑰留給自己。 例如:您的以太坊地址是一個公鑰(它實際上是從公鑰導出的,但是對于這個練習,我們只是將其視為公鑰),并將您的私鑰存儲在瀏覽器或手機/計算機上。 如你所知,有人向你發送以太網,他們只需要知道你的公共(帳戶)地址。 但是,只有您可以訪問您擁有的資金,因為您是唯一知道您私鑰的人。

    公鑰加密算法具有算法,可讓您使用一對密鑰對消息進行加密,解密,簽名和驗證。

    讓我們通過一個例子來看看簽名和驗證消息的含義。 假設用戶Kim有一對公鑰/私鑰

    Pu =“0x44ac12c1e3dfd8edaf83b6f65918229d5279a6f5”

    Pr =“dbc226043e390cf39280e5edfd418d7ad61931c76509270867d300f110c46506”

    為了簽署消息,Kim執行輸出字母數字字符串的功能符號(“投票給愛麗絲”,Pr)

    簽名= 0x9127112de0033555c7f6508d963d484965a953844dfcff092712102c236467a25af57edc53b63880ea39af8ce7334f6d77a8206e805305e7c6ad919d12bfae5c1b

    這是Kim用她的私人密鑰Pr簽名的消息“投票給愛麗絲”的數字簽名。

    現在,任何人都可以通過執行驗證功能驗證該消息“投票給愛麗絲”,由Kim執行驗證(“投票給愛麗絲”,簽名),其輸出“0x44ac12c1e3dfd8edaf83b6f65918229d5279a6f5”。 如果你注意到,那輸出是Kim的公鑰Pu(記住,每個人都知道它是Kim的公鑰),這意味著這個消息肯定是由Kim簽署的。 如果篡改簽名或消息(通過更改一個字符),驗證算法會輸出完全不同的公鑰,并且您將知道該消息被篡改,因為公鑰與Pu不同。

    解決方案詳情

    如果你理解數字簽名,解決方案是非常微不足道的。 讓我們看看如何在我們的投票應用程序中使用它,以免用戶在不損害投票的情況下支付燃氣費。 您可以在下面看到dapp的所有用戶以及他們執行的操作。

  • 選民表示他們打算通過使用他們的私鑰簽署消息來投票給候選人。 他們不會將他們的交易提交給區塊鏈,所以不會支付任何費用。 上圖中的消息隊列只是存儲所有投票詳情的脫鏈位置。
  • 任何愿意支付txn費用的人(通常是合同所有者)都需要簽名,候選人姓名和選民的賬戶地址,并將其提交至區塊鏈。
  • 智能合約使用驗證功能基于候選人姓名和簽名來派生公鑰(以太坊賬戶地址)。 如果派生的公鑰與簽名該消息的用戶的地址相匹配,則它記錄投票或否則交易失敗。
  • 實施細節

    現在讓我們來看看實際的實現以及所有部分如何組合在一起。

    第1步:簽署消息

    第一步是以選民的身份簽署消息。 我們將使用eth_signTypedData函數來簽署我們的消息。 這個功能已經在Metamask中實現,這使得簽名消息變得非常簡單。 你可以在這里找到關于這個建議的更多細節和討論: https : //github.com/ethereum/EIPs/pull/712 。 您可以在下面找到代碼以簽署消息。

    一個非常重要的要注意的是,內部eth_signTypedData散列消息,散列消息是簽名。 您可以在這里參考typedSignatureHash函數以獲取有關散列的更多細節。

    第2步:將已簽署的投票提交給區塊鏈

    由于這只是一個演示應用程序,因此我們不會在任何地方存儲簽名和其他細節。 它在消息簽名后直接顯示在頁面上。 任何人都可以采取這些細節并提交給區塊鏈。 以下是向區塊鏈提交投票的代碼:

    第3步:驗證智能合約中的投票詳情

    我們現在在智能合約中驗證提交的投票信息是否有效,然后記錄投票結果。

    Zeppelin有一個名為ECRecovery的方便庫,我們可以使用它來驗證簽名的消息。 voteForCandidate函數驗證簽名的消息(恢復功能),并在驗證成功時更新投票計數。

    如果你還記得,我剛才提到eth_signTypedData在簽名之前散列消息(“為Alice投票”)? solidity recover函數沒有關于eth_signTypedData中使用的散列函數的任何知識,因此它不能驗證消息“為Alice投票”。 它必須生成消息“投票給愛麗絲”的散列,然后驗證它。 我們不是在合約內部生成哈希,而是事先對所有消息進行哈希處理,并在構造函數中傳遞它,這樣在驗證時很容易查找。 生成哈希的代碼位于下面的遷移文件中

    這就是獲得新應用程序所需的所有代碼!

    我創建了一個快速演示來展示這個應用程序如何工作

    整個工作代碼在這里: https : //github.com/maheshmurthy/ethereum_voting_dapp/tree/master/chapter4

    演示應用程序位于: https : //www.zastrin.com/voting-dapp-without-paying-gas.html

    可能需要解決的問題

    使用這種技術構建真正的dapp時需要考慮幾個問題。 其中一些列在下面:

  • 簽名郵件存儲在哪里? 您可以使用某種排隊系統來存儲這些消息。
  • 什么是保證簽名的信息最終被提交給區塊鏈?
  • 將所有消息的散列存儲在區塊鏈中并不理想,那么最好的解決方案是什么?
  • 如果您對如何解決這些問題有所想法,或者如果您發現此解決方案中存在任何缺陷,請發表評論!

    注意:顯然,eth_signTypedData API仍然不穩定,只能通過metamask實現。 如果您打算在mainnet / production中使用這種技術,請小心這一點。

    進一步閱讀

    https://en.wikipedia.org/wiki/Public-key_cryptography

    https://en.wikipedia.org/wiki/Digital_signature

    https://github.com/danfinlay/js-eth-personal-sign-examples/

    https://danfinlay.github.io/js-eth-personal-sign-examples/

    https://github.com/ethereum/EIPs/pull/712

    感謝Chris Whinfrey和Febin John James審閱本文的草稿。


    https://medium.com/blockchannel/how-to-save-your-ethereum-dapp-users-from-paying-gas-for-transactions-cfc665891ab4

    總結

    以上是生活随笔為你收集整理的How to save your Ethereum Dapp users from paying gas for transactions的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中文字幕av专区dvd | 91网在线| 妹子干综合| 国产精品自产拍 | 日韩av色图| 四虎影视永久免费 | 九九99精品| 欧美aaa在线观看 | 曰批女人视频在线观看 | 久久久久99人妻一区二区三区 | 扒开美女内裤狂揉下部 | 欧美黑人狂野猛交老妇 | 精品一区二区三区免费 | 熟女一区二区三区视频 | 日韩福利视频一区 | 91欧美一区二区 | 久草精品在线观看视频 | 欧美黄色大片免费看 | 夜夜操操 | 色欧美片视频在线观看 | 好吊色网站| 精品人妻一区二区三区浪潮在线 | 免费成人av片 | 久久久综合久久 | 人妻丰满熟妇av无码区 | 成人一区二区精品 | 天堂中文在线官网 | av成人在线网站 | 综合色88 | 国产一二三区在线 | 久久av一区二区三区亚洲 | 中文字幕第28页 | 欧美videossex极品 | 制服 丝袜 综合 日韩 欧美 | 日本少妇喷水 | 在线播放一区二区三区 | 三级黄色生活片 | 日本免费一区二区三区 | 婷婷一级片 | 999这里有精品 | 国产成人精品二区三区亚瑟 | 亚洲综合一 | 免费看亚洲 | 日韩电影在线观看一区二区 | 视频二区 | 亚洲国产无码精品 | 色黄视频在线观看 | 黑人巨大精品欧美黑寡妇 | 伊人久操 | 黄色免费大片 | 日本黄色片 | 免费亚洲精品 | 精品无码黑人又粗又大又长 | 97成人免费 | 美女隐私免费 | 69色综合| 五月天色网站 | 国产一级片 | 在线欧美一区二区 | 日韩七区| 琪琪色av | 日本护士取精xxxxxhd | 福利资源在线观看 | 午夜激情影院 | 女女百合高h喷汁呻吟玩具 www.亚洲一区 | 天堂av免费在线 | 女人的洗澡毛片毛多 | 91麻豆成人精品国产免费网站 | 五月婷婷综合色 | a级片在线免费看 | 天天射天天 | 九色丨蝌蚪丨成人 | 日本精品一区二区在线观看 | 99热在| 丁香六月色| 三级男人添奶爽爽爽视频 | 在线观看欧美国产 | 丰满女人又爽又紧又丰满 | 88久久精品无码一区二区毛片 | 草草影院在线观看视频 | 天堂网视频 | 亚洲欧美一区二区视频 | www.狠狠撸.com | 妖精视频在线观看免费 | 亚洲精品中文字幕在线观看 | 日韩欧美123 | 国产成人啪免费观看软件 | 国产奶水涨喷在线播放 | 亚洲情网 | 国产欧美日韩精品区一区二污污污 | 国产亚洲性欧美日韩在线观看软件 | 懂色中文一区二区在线播放 | 我爱我色成人网 | 国产成人精品女人久久久 | 激情综合亚洲 | 精品久久久99 | 免费a视频 | 黑人一区 | 国产精品入口日韩视频大尺度 |