Go-Ethereum
如何創建交易並將其廣播延遲到其他節點
我正在創建一個項目,我需要使用我的智能合約將數據添加到儲存中,但以程式延遲的方式:
我在我的nodejs伺服器中使用web3,我想像往常一樣創建事務,使用web3但延遲或停止事務廣播,直到我想發送它。
我的想法是獲取原始交易並將其作為字元串保存在鏈下數據庫中。然後當我想廣播交易時,我可以從數據庫中獲取它並使用 web3 將其作為原始交易發送。
所以首先我想知道我的想法是否可以實現,並且無論如何我可以將事務保存在我的節點中,然後以程式方式發送它們,因為在關係數據庫中保存事務的想法並不是很吸引人並且似乎不安全。
你描述的是可行的。您將讓軟體客戶端形成交易、簽名,然後您的伺服器會將他們簽名的操作記錄在您的數據庫中,以便以後可能送出給網路。
在我看來,您將在應用程序級別有一些額外的考慮。例如,使用者可能會拒絕這個想法,除非事情是按照“直到塊號 n 之前有效”的方式安排明確的到期時間。該到期可能應該在智能合約級別強制執行,以嚴格限制特權伺服器可以執行的操作。
不會出現雙花問題,但肯定存在過度擴展的可能性,在這種情況下交易將失敗。
查看 0x 協議,了解符合這些原則的內容。
希望能幫助到你。
乙太坊不支持您描述的“交易延遲”功能。
但 …
簽署交易並將其(以原始格式)留在鏈外等待送出是一個壞主意。因為一筆交易包括
nonce
欄位,它是一個連續的數字,屬於你的賬戶。這就是為什麼您的第一筆交易將阻止所有後續交易。您將不得不儲存待處理的交易而不對其進行簽名,並且只有當您確實需要執行它們時,您才會簽名並將它們發送到區塊鏈。原始交易可以完全安全地儲存在任何地方,事實上,它們現在儲存在區塊鏈數據庫中,每個人都可以訪問它們,這是公共資訊。