區塊鏈上的鏈下交易:引入基於簽名的工作流程

  • 鏈下交易
  • 懶惰鑄幣
  • OpenSea 上的無氣上市

聽說過這些術語嗎? 有沒有想過他們是如何在引擎蓋下工作的? 本文將解釋這些在區塊鏈領域節省大量能源的操作背後的概念。 我將在以太坊區塊鏈的背景下進行解釋。

在開始之前,您必須了解區塊鍊和智能合約中的交易。 鏈上交易發生在區塊鏈本身。 每筆此類交易都需要支付一些汽油費才能執行,並且需要幾秒鐘才能將其放入新區塊。

現在,什麼是鏈下“交易”

  • 從技術上講,它們不是區塊鏈交易。
  • 簡而言之,只有一條信息,您需要簽名。 這會生成一個簽名。 這個過程被稱為鏈下交易。
  • 信息和簽名一起存儲在某個地方,以便稍後在鏈上交易中用於驗證。

基於簽名的工作流程

鏈下交易和鏈上交易結合在一起,創建了一個“基於簽名的工作流程”,許多現代區塊鏈項目都在使用它,比如 OpenSea。

優點:

  • 減少區塊鏈上的負載。 從而降低功耗。
  • 鏈下交易沒有汽油費要求。
  • 鏈下交易的即時執行。

基於簽名的工作流的工作

假設您有一條消息,將來會用於執行重要操作。 您需要保護您的消息不被更改。 所以你會怎麼做? 你在消息上簽名。 稍後需要執行操作時,將驗證您的簽名,這將證明消息中包含的信息的真實性。

與區塊鏈的上下文類似,您使用私鑰對消息進行簽名。 它生成一個簽名

稍後根據消息中給出的指南執行所需的操作時,首先需要驗證消息。 簽名和消息被發送到恢復功能,該功能生成公鑰。 如果您的實際公鑰和生成的公鑰匹配,則消息是正確的。

如果消息或簽名稍有改動,生成的公鑰將與您的公鑰不匹配,這意味著該消息無效。

下圖顯示了基於簽名的高級操作:

Signature based workflow

步驟:

  1. 首先,您有自己的私鑰、公鑰和消息。
  2. 你使用你的錢包來簽署消息。 您還可以在要簽名的消息中包含您的公鑰。 它生成一個簽名。
  3. 然後可以通過調用 POST API 將此消息和簽名(以及您的公鑰,如果未嵌入消息中)存儲在後端數據庫(如 MongoDB)中。
  4. 稍後當需要通過在區塊鏈上運行的智能合約執行鏈上交易時,存儲的簽名、消息、公鑰作為參數發送到將被調用和執行的合約函數。
  5. 智能合約的功能運行一個恢復功能來驗證消息。 恢復函數將消息和簽名作為輸入並吐出一個公鑰。 如果它與預期的公鑰(您的公鑰,可以作為單獨的參數發送或在消息本身內發送)匹配,則執行繼續,否則交易失敗並被還原。

消息簽名的良好做法

  • 過期時間:消息中應該有一個參數,表示基於該消息可以執行鏈上交易的時間。 在智能合約的功能中,在執行主要語句之前,還應該進行檢查以驗證到期時間。 如果時間已過,交易應該失敗。
  • 鏈上取消消息:假設你簽署了一條消息,然後想取消它。 簡單地從數據庫(MongoDB 或任何其他數據庫)中刪除它並不是最好的主意。 從技術上講,有人可以獲取您的信息和簽名(在您刪除它們之前),並將它們發送到智能合約的功能……並且該功能將成功執行(即使您通過從中刪除它來“取消”它) 鏈下數據庫)。 取消簽名消息的安全方法是將其發送到鏈上的取消功能。 對於所有基於消息簽名執行的函數,應該檢查簽名的消息是否已經被取消,如果取消已經完成,它們應該失敗。

Important links

Lazy minting tutorial by NFT school

Listing NFTs for sale on OpenSea

OpenSea — Inactive listings

Let’s connect on LinkedIn

https://www.linkedin.com/in/dharmveer-bharti-55b7231a7/

--

--

胡家維 Hu Kenneth
My blockchain development Journey

撰寫任何事情,O型水瓶混魔羯,咖啡愛好者,Full stack/blockchain Web3 developer,Founder of Blockchain&Dapps meetup ,Udemy teacher。 My Linktree: https://linktr.ee/kennethhutw