使用NodeJ編譯和部署以太坊合約

買賣虛擬貨幣
你每天都讀很多關於區塊鏈的文章對嗎?請你在這類文章的時候多問問自己以下問題。它是如何工作的?區塊鏈如何實際執行業務邏輯?如何編寫在區塊鏈上執行的程式碼?如果您一步一步地閱讀本文,那麼您所有的問題都將得到解答,我相信您一定會非常瞭解如何編寫、編譯和部署您的智慧合約。

在前一篇文章中,我們瞭解瞭如何使用Remix編輯器編譯和部署合約。Remix僅限於使用瀏覽器,所以不能使用Git之類的版本控制來管理原始碼。

無論您想使用Remix或Truffle,還是想編寫定製的編譯和部署指令碼。在核心上,它總是要經歷類似的部署過程。

您可以可靠地編寫智慧合約,並將其傳遞給可靠編譯器,該編譯器將為您生成ABI和合約位元組碼。

位元組碼將實際部署在以太坊網路上。ABI或應用程式二進位制介面將用於查詢和與以太坊網路上部署的互動合約。

所以,不需要講太多的細節,讓我們開始編寫NodeJs程式碼,它將幫助我們編譯和部署在Rinkeby network上的智慧合約。這就是我們要做的。

使用您選擇的編輯器並建立以下結構。我之所以使用VSCode,是因為它具有良好的擴充套件支援和閃電般的速度。

執行以下命令建立包。json檔案。

yarn init

增加了三個重要的依賴項。

1. web3:用於與本地或遠端以太坊網路互動。
2. 它使用ethereumjs模擬完整的客戶端行為,使開發以太坊應用程式更快、更容易、更安全。
3. solc: Solidity編譯器。

yarn add web3 ganache-cli solc

在Inbox.solc檔案中新增web3 ganache-cli solcWrite下面的程式碼。這是一個簡單的智慧合約,我們將使用它在Rinkeby網路上編譯和部署。

現在我們將在compile.js檔案中使用Inbox.solc。您可能認為我們將使用需求('./contracts/Inbox.solc')。如果我們需要它,NodeJs將嘗試執行它並丟擲一個錯誤腳碼,因為它不是一個javascript檔案。

相反,我們將從特定的資料夾位置讀取檔案的內容,並將其傳遞給可靠的編譯器。

從第1行到第3行,我們需要一些模組,這些模組將有助於從檔案系統和健壯編譯器中讀取檔案。

第5行和第6行顯示了我們如何為Inbox.solc檔案提供路徑,並以utf8格式讀取其原始碼。

在第8行,我們使用solc編譯和提取收件箱合約,並匯出它,這樣我們就可以在其他地方使用編譯的合約。在終端中執行以下命令。

node compile.js

如果您在控制檯記錄第8行並執行上面的命令,您將看到許多不可讀的資料,這些資料由彙編程式碼、位元組碼、操作碼等組成。

我們對介面(ABI)和位元組碼更感興趣,它們看起來類似於下面的內容。別擔心,你不必在程式碼中直接使用它。

位元組碼是將在以太坊區塊鏈上部署和執行的實際合約原始碼。

生成的介面或ABI將允許使用它來與部署在乙太網上的合約進行互動。ABI列出了所有不同的函式,以及返回型別和合約上存在的不同值。

現在,我們已經完成了智慧合約的編譯,我們可以看看如何將編譯的合約部署到Rinkeby網路。部署有點複雜,所以最好了解一下在引擎蓋下部署的工作原理。

別擔心,我將帶您瀏覽圖中的每一個小框,並告訴您每個令人困惑的框的作用。

Web3:如上所述,我們將使用Web3例項與Rinkeby以太坊網路進行互動。Web3基本上是Javascript程式碼和以太坊之間的橋樑。

提供者:為了將web3連線到ethereum網路,我們需要一個提供者來告訴web3我們要與哪個網路通訊。在我們的例子中,我們將與Rinkeby網路通訊。

賬戶記憶法:它是字母、單詞和聯想的組合,可以讓你輕鬆記住複雜的資訊。當您註冊一個新的區塊鏈錢包時,將提供助記密碼。我們將在提供商中使用它來連線到Rinkeby網路。

Rinkeby網路:它是執行測試以太坊網路的節點集合。主要用於測試和部署您的智慧合約,然後才將其實際部署到主以太坊網路。

Infura API:它提供了可伸縮的以太坊網路,用於測試和實際的智慧合約部署。我們將使用Infura API,而不是建立本地以太坊網路,這是非常耗時的,需要很多努力才能使其執行。

Infura.io註冊。單擊create new project並提供專案名稱為Rinkeby API。從可用端點下拉選單中,選擇rinkeby並複製url,該url將在下一個部署步驟中使用。

在deploy.js檔案中寫下以下程式碼。請確保新增您的助記短語和您從上一步複製的Infura rinkeby網路url。我們需要多一個依賴項來建立提供者物件。

yarn add truffle-hdwallet-provider

哇…有很多程式碼。放鬆,我將向您介紹整個程式碼,以理解為什麼我們要寫每一行。

在第1行,HDWalletProvider用於指定我們想要解鎖的帳戶,並將其作為以太幣的來源用於部署我們的合約。它還指定要連線到哪個外部API或節點。

在第3行,我們從編譯後的檔案中提取了介面和位元組碼,這是部署編譯後的合約所需要的唯一兩件重要的事情。

從第5行到第8行,從您選擇的錢包中傳遞您的助記憶碼,如元掩碼和我們從Infura儀表板複製到HDWalletProvider的Rinkeby URL。

Rinkeby URL很重要,因為為了部署,我們必須連線到Rinkeby網路上的一個非常特定的節點。然後我們將這個provider物件傳遞給Web3並建立Web3例項。

部署函式就是奇蹟發生的地方。第15行透過我們使用助記符配置的錢包提供程式獲取可用的未鎖定帳戶。

未鎖定的帳戶意味著我們可以在此帳戶上自由傳輸和接收以太幣,而不涉及任何隱私和安全問題。記住,我們需要一些以太幣帳戶部署我們的合同到 Rinkeby 網路。

如前所述,我們需要一些以太幣在我們的帳戶部署合約。如果您沒有元掩碼帳戶,您可以建立一個並在您的帳戶中傳輸測試以太幣。遵循本文的第1點到第9點。

在第18行,我們將呼叫web3例項上的Contract方法,並以json格式傳遞來自編譯檔案的ABI或介面,但我們需要傳遞Javascript物件,所以我們使用json .parse。

第19行將為部署準備物件,該物件將接受我們的位元組碼和我們的合約接受的任何初始訊息。

第20行實際上將在網路上傳送這個事務。第一個引數指定該事務將從哪個帳戶執行。現在,如果你想在區塊鏈上執行任何事情,你需要支付一些GAS,所以將透過100萬GAS執行我們的交易。

最後一步,將我們的合同部署到Rinkeby 網路。

node deploy.js 

執行事務需要一些時間,一旦完成,您將獲得部署合約的地址。但是如何驗證部署了您的合約呢?

你可以訪問https://rinkeby.etherscan.io/網站核實。將您部署的合約地址放在搜尋欄中,您將獲得關於您交易的詳細資訊。

我知道部署合約有很多事情要做,但是如果你自己使用上面提到的步驟,你就可以在以太坊網路上部署任何不同的合約。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;