如何創建和簽署以太坊交易?

由于所有數字資產都是通過交易創建的,因此簽名在任何區塊鏈中都起著至關重要的作用。在本文中,我們將向大家介紹如何對以太坊交易進行簽名,探索如何使用這些數字來簽署操作數字資產等的操作。

交易-與舊交易,與新交易

區塊鏈交易與銀行交易沒有什么不同?現如今,大多數銀行可以輕松地使用數字化方式將錢匯給某人,將錢存入您的儲蓄帳戶,甚至提取貸款。互聯網時代使我們能夠在線執行大多數此類操作,而無需任何物理交互。

盡管它們易于使用,但對于銀行而言,這些操作絕非易事,同時也不便宜,在幕后,您的銀行業務的清算,驗證和確認涉及多個第三方,而且還要保持對銀行法規的遵守,

金融機構必須采取冗長的措施,以確保您確實是有權操作您的帳戶的個人。所有這些層級都會產生大量成本,諸如Visa或Mastercard之類的付款網關通常會根據交易金額對每次購買收取費用的眾多原因之一。當然,無論何時何地,這些操作都可以凍結,并且在某些情況下也可以還原。

區塊鏈交易的行為遵循不同的規則集

由于公共區塊鏈的分布式和未經許可的性質,任何人都可以簽署交易并將其廣播到網路。根據區塊鏈的不同,您將收取一定費用,以允許“挖掘”交易(即由礦工撿起并包含在區塊鏈中),但該費用通常基于區塊鏈中的用戶需求,而不是基于交易中資產的價值。例如,從一個以太坊賬戶向另一賬戶發送$ 1的費用將與發送$ 100萬相同,礦工可以平等地接受這兩項交易,并將其添加到有效塊中以廣播到區塊鏈。

此外,區塊鏈交易無需任何中央機構的驗證,為了使交易有效,僅需使用與其區塊鏈相對應的數字簽名算法(DSA)使用私鑰對其進行簽名,以太坊和比特幣區塊鏈使用ECDSA算法,而Cardano或Polkadot等其他項目則依賴EdDSA算法,

兩者都依靠橢圓曲線,而后者使用扭曲的愛德華茲曲線,這是對通用數字簽名的改進。盡管可以使用任何私鑰對交易進行簽名,但是只有與用于簽署交易的私鑰相關的帳戶包含足夠的資金時,轉移交易才會成功執行。

一旦一筆交易被簽名,廣播到網路中并被挖掘到網路中成功的區塊中,就無法恢復交易,與銀行業務不同,成功開采的區塊鏈交易無法還原或恢復到先前交易的狀態。大多數公共區塊鏈交易的性質使它們可見,因此,用于這些交易的區塊鏈是這些資產的最終真實來源。

以太坊交易結構

現在我們已經充分了解了區塊鏈交易的本質,我們準備創建我們的第一個基于以太坊的交易。我們將從一個簡單的轉移交易開始:將0.1 ETH轉移到address,

0x17A98d2b11Dfb784e63337d2170e21cf5DD04631

可以使用JavaScript對象表示法(JSON)描述事務,因此在創建該事務時,使用MyEtherWallet(通過send offline登入后使用)如下所示:

{ “nonce”: “0x00”, // 0 in decimal “gasLimit”: “0x5208”, // 21000 in decimal “gasPrice”: “0x3b9aca00”, // 1000000000 in decimal “to”: “0x17A98d2b11Dfb784e63337d2170e21cf5DD04631”, “value”: “0x16345785d8a0000”, // 100000000000000000 in decimal “data”:”0x”, // “empty” value in decimal “chainId”: 1 // Ethereum network id}

隨即跳出幾個值:nonce,gasLimit,gasPrice,data,和chainId。這與我們的交易內容沒關,而是與我們的交易執行方式有關。這是因為在以太坊中發送交易中,您必須定義一些其他參數來告訴礦工如何處理您的交易,我們交易中的兩個屬性涉及“ gas”,這是計算工作量的度量單位,必須將其支付給以太坊礦工才能將交易提交到區塊鏈網路,

一個是gasPrice(以名為Gwei的單位表示,等于1/10是以太坊的本機令牌以太幣),另一個是gasLimit,這是您的交易中允許使用的最大天然氣量。這些值可以從以太坊節點估計,因此通常由錢包提供商自動填寫,

除了gas參數之外,您還必須指定將在哪個特定的以太坊網路上執行該交易。以太坊網路包括帶有chaidId 1的主網路(mainnet),但是由于可以通過在線水龍頭請求或資助testnet ETH,因此可以向您提交交易的其他測試網路(testnet)沒有任何經濟價值的風險,通常,在開發Dapp時,您將首先在本地網路上運行它,然后將其部署到測試網,作為最后一步,然后再進入主網上。

最后但并非最不重要的一點是,我們有data和nonce,如果您需要提交一些其他數據時,您可以將其作為事務的一部分附加,與智能合約進行交互時,數據字段將包含您對該合約的指令。

A nonce(“僅使用一次的數字”)是以太坊網路用于跟蹤交易的數值,有助于避免網路中的雙重支出以及重放攻擊,有時,由于汽油價格低廉,交易會卡在網路中,因此,以較高的價格廣播交易,但同一隨機數會在礦工接手后有效地“替換”網路中的待處理交易(一旦“緩慢”可以看到“”交易,因為它與已批準的交易具有相同的現時數,因此將被拒絕)。

簽署以太坊交易

抓住我們以前的JSON,我們終于可以繼續進行簽名過程了。如我們所述,此過程涉及ECDSA算法。為了與ECDSA簽署交易,我們將使用流行的ethers.js庫,該庫已經包裝了對橢圓曲線包的必要調用,以便將secp256k1曲線與ECDSA算法一起使用,

您可以在Runkit中在線測試此代碼,并使用私鑰將其與MyEtherWallet(MEW)的結果進行匹配。

0x616E6769652E6A6A706572657A616775696E6167612E6574682E6C696E6B0D0A

結果表示您已簽名的交易,可以廣播到以太坊網路。

0xf86b80843b9aca008252089417a98d2b11dfb784e63337d2170e21cf5dd0463188016345785d8a00008025a02e47aa4c37e7003af4d3b7d20265691b6c03baba509c0556d21acaca82876cb4a01b5711b8c801584c7875370ed2e9b60260b390cdb63cf57fa6d77899102279a0

您可以直接使用MEW或Alchemy的在線實用程式Composer,它允許您使用用于與以太坊節點通信eth_sendRawTransaction的RPC API方法將已簽名的交易傳遞到以太坊網路,

立即簽名,稍后再轉

如上所述執行的交易簽名稱為“離線簽名”。由于我們的私鑰處于我們的控制之下,因此我們可以使用以太坊帳戶創建簽名驗證,并在以后將其廣播到以太坊網路,許多在線錢包同時進行簽名和廣播(例如Metamask,Portis),但是,脫機簽名對于諸如狀態通道之類的應用程式特別有用,這些通道是跟蹤兩個帳戶之間余額的智能合約,并且在提交已簽名的交易后就可以轉移資金。

脫機簽名也是去中心化交易所(DEXes)中的一種常見做法,在該交易所中,買賣訂單存儲在鏈外,并且僅在與適合先前簽署的交易的訂單匹配時才在鏈上結算,

使用Portis,您可以簽署交易以與加油站網路(GSN)進行交互。為了與GSN進行互動,Portis訂閱了一個中繼站池,這些中繼站能夠支付您交易的汽油費,這些中繼器訂閱去中心化合同(例如Ropsten測試網中的這一合同),Portis向他們發送請求以中繼您的交易。您仍然需要簽署交易(畢竟,未簽署的簽名是沒有意義的),但是Portis小部件會在后臺執行所有之前的處理,因此即使使用全新的錢包,用戶也可以開始簽署交易并與智能合約進行交互。沒有ETH可以支付汽油費,

0 条回复 A文章作者 M管理員
    暫無討論,說說你的看法吧