如何創建和簽署以太坊交易 | 區塊鏈研究實驗室

火幣網(huobi.com)最新可用網址(點擊下圖直達註冊!)


火必交易所,曾经的火币交易所!

欧易OKX三大交易所,稳定好用!

币安全球第一大交易所!安全!


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

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

區塊鏈交易與銀行交易沒有什麼不同?現如今,大多數銀行可以輕松地使用數字化方式將錢匯給某人,將錢存入您的儲蓄帳戶,甚至提取貸款。互聯網時代使我們能夠在線執行大多數此類操作,而無需任何物理交互。
盡管它們易於使用,但對於銀行而言,這些操作絕非易事,同時也不便宜。在幕後,您的銀行業務的清算,驗證和確認涉及多個第三方,而且還要保持對銀行法規的遵守。
金融機構必須采取冗長的措施,以確保您確實是有權操作您的帳戶的個人。所有這些層級都會產生大量成本,諸如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算法一起使用。

const ethers = require("ethers")const signer = new ethers.Wallet('0x007120583af460144032f1f0c6cfde5a5fd58ee8e7702f5b7d324421715dd695')signer.signTransaction({  "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}).then(console.log);


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



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


0xf86b80843b9aca008252089417a98d2b11dfb784e63337d2170e21cf5dd0463188016345785d8a00008025a02e47aa4c37e7003af4d3b7d20265691b6c03baba509c0556d21acaca82876cb4a01b5711b8c801584c7875370ed2e9b60260b390cdb63cf57fa6d77899102279a0


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

立即簽名,稍後再轉

如上所述執行的交易簽名稱為“離線簽名”。由於我們的私鑰處於我們的控制之下,因此我們可以使用以太坊帳戶創建簽名驗證,並在以後將其廣播到以太坊網絡。許多在線錢包同時進行簽名和廣播(例如Metamask,Portis)。但是,脫機簽名對於諸如狀態通道之類的應用程序特別有用,這些通道是跟蹤兩個帳戶之間餘額的智能合約,並且在提交已簽名的交易後就可以轉移資金。
脫機簽名也是去中心化交易所(DEXes)中的一種常見做法,在該交易所中,買賣訂單存儲在鏈外,並且僅在與適合先前簽署的交易的訂單匹配時才在鏈上結算。
使用Portis,您可以簽署交易以與加油站網絡(GSN)進行交互。為瞭與GSN進行互動,Portis訂閱瞭一個中繼站池,這些中繼站能夠支付您交易的汽油費。這些中繼器訂閱去中心化合同(例如Ropsten測試網中的這一合同),Portis向他們發送請求以中繼您的交易。您仍然需要簽署交易(畢竟,未簽署的簽名是沒有意義的),但是Portis小部件會在後臺執行所有之前的處理,因此即使使用全新的錢包,用戶也可以開始簽署交易並與智能合約進行交互。沒有ETH可以支付汽油費。

作者:鏈三豐,來源:區塊鏈研究實驗室



返回列表页>>> 比特幣最新新聞