在以下幾節中,我們將安裝和設置Solidity的開發環境:

Visual Studio CodeRemix ExtensionGanacheTruffle

除了本教程,我們還將編寫一個簡單的ERC20項目來演示設置。

Visual Studio Code

VSCode是一個由微軟構建的代碼編輯器,具有智能感知等功能豐富的功能和大量的擴展。它是全球開發者社區最喜愛的開發工具。

如果還沒有安裝VS Code,可以直接從官方網站下載。

然後,我們可以通過安裝由Juan Blanco製作的Solidity擴展來添加Solidity支持。

這個擴展將幫助我們突出Solidity語法以提高可讀性和片段,並加快開發速度。

安裝完成後,我們可以通過創建一個新文件夾來啟動一個新項目,即:example-coin,並在項目中創建一個子文件夾contract。

example-coin |_ contracts

接下來,在合約文件夾名稱下創建一個新合約token.sol。

現在在文件中輸入ERC20。這將通過Solidity擴展觸發一個片段,並為ERC20代幣創建一個模板。為了簡化本教程,將不深入研究代碼。概括地說,代碼基本上是ERC20合約的啟動模板。

如果由於某些原因,我們無法生成代碼片段,或者代碼片段不能工作,我們可以參考GitHub存儲庫。

現在我們有了ERC20代幣代碼,讓我們在下面幾節中嘗試運行它。

Ganache

在測試我們的智能合約之前,我們將需要一個以太坊虛擬機(或EVM)來託管和運行我們的合約。要做到這一點,有兩個選擇,

使用公共測試網,比如Rinkeby, Ropsten自託管私有以太坊區塊鏈

使用公共測試網的優點是它不需要配置。連接到它,我們就可以開始了。

然而,由於它仍然是一個公共網絡,我們將需要測試網faucet來獲得Ether,這是至關重要的,因為我們需要支付gas來部署我們的合約——有時它們可能會停止——我們將不得不等待服務重新上線。但是,在部署到主網之前,我們應該始終部署到公共測試網來測試我們的合約。

對於私有區塊鏈,一切都在我們的控制之下。我們可以控制如何進行挖礦、所需的gas費用以及所有自定義設置。 Ganache是可以為我們啟動私有以太坊區塊鏈的軟件之一。

要安裝Ganache,請訪問Ganache官方網站從Truffle Suite下載軟件。借助清晰的UI,啟動區塊鏈也很容易,您只需啟動應用程序並單擊QUICKSTART 以啟動一個新的私有以太坊區塊鏈,其中10 個帳戶已經準備好進行測試。

啟動時Ganache 中的界面

啟動區塊鏈後在Ganache中的接口

這些測試賬戶最好的一點是,在將任何東西部署到主網之前,我們還可以將它們導入Metamask等流行的加密錢包進行端到端測試。

我們還可以通過區塊、交易、合約、事件和日誌來檢查區塊鏈的狀態,讓自己全面了解自己的測試環境,在這裡可以輕鬆分析自己的智能聯繫人的觸發器,這與在公共測試網中不同的是它充滿了數以千計的其他開發人員的操作。

現在我們已經準備好了區塊鏈,讓我們在它上部署我們的智能合約,並嘗試使用Remix擴展運行。

Remix

Remix 是最受Solidity 開發人員歡迎的IDE,但我們不必因為使用VSCode就放棄它! Remix本身可以幫助我們在區塊鏈上編譯和部署一個合約,並提供一個便於測試的接口,比如一個按鈕來觸發具有不同參數的函數。

即使安裝了Solidity擴展,VS Code本身也不能提供這些功能,但是我們可以通過在VSCode中安裝Ethereum Remix擴展來結合這兩個的優點。這個擴展是由官方以太坊基金會編碼和維護的,所以Remix提供的功能也在這個擴展中。

要下載擴展,只需在擴展選項中搜索Ethereum Remix或從市場下載它。

我們可以使用Remix 擴展來幫助我們運行example-coin我們剛剛編寫的合約:

側邊欄的Remix圖標

單擊Remix擴展選項。單擊Run & Deploy,然後單擊彈出菜單中的Activate。現在回到Ganache,按右上角的棕色設置圖標。在server選項卡中,找到帶有端口號的主機名並複制它

Ganache中的服務器UI

將主機名和端口號粘貼到Remix面板中,格式為http://: ,對我來說,它應該是http://172.17.160.1:7545

確保我們的solidity文件是活動的,然後在Remix擴展按下compile。

兩個面板都在工作區中處於活動狀態

編譯完智能合約後,我們可以使用自定義配置將代幣部署到區塊鏈,然後單擊deploy。

編譯後的UI

現在我們可以通過運行面板輕鬆地與智能合約進行交互。

這裡列出了ABI中包含的函數

這是一種交互式的方式來測試我們的智能合約是否按照預期工作,就像我們在Remix IDE中所期望的那樣。

但是手動測試每個函數是非常耗時的,而且很難為每一個小的更改包含每個用例,所以這只對快速開發有利。從長遠來看,為了節省時間和精力,我們需要一個自動測試解決方案來幫助我們,而Truffle可以幫助我們解決這個問題。

Truffle Suite

Truffle是一個自動測試工具和部署工具,可以幫助我們在提供需求的同時,促進我們的開發和部署過程。

Ganache也是Truffle Suite中的一款軟件,現在我們可以使用其中的另一款產品,也就是Truffle本身。

要安裝Truffle,我們需要先安裝npm。如果我們沒有,我們可以去NPM的網站,按照如何安裝NPM的指南。

用npm安裝Truffle很簡單,只要輸入命令即可。

npm install -g truffle

選項-g將全局啟用Truffle,所以我們可以在系統中的任何地方使用它。

安裝了Truffle之後,我們可以按照下面的步驟開始為我們的代幣編寫測試用例

打開智能合約的根文件夾,運行truffle init當出現以下響應提示時,選擇N,因為我們已經準備好了合約。

contracts already exists in this directory…?Overwrite contracts? (y/N)

現在我們應該有一個如下的文件夾結構:

example-coin |_ contracts |_ token.sol |_ migrations |_ 1_initial_migration.js |_ test |_ .gitkeep |_ truffle-config.js

在test文件夾下創建一個新的文件token.test.js,並將下面的代碼複製到該文件中。

const Standard_Token = artifacts.require("Standard_Token"); contract("Standard_Token", (accounts) => { it("should put 10000 token in the first account", async () => { const token = await Standard_Token.deployed (); const balance = await token.balanceOf(accounts[0]); assert.equal(balance.toNumber(), 10000); }); it("should transfer 100 token from the accounts[0] to accounts[1 ]", async () => { const token = await Standard_Token.deployed(); await token.transfer(accounts[1], 100, { from: accounts[0]}); const balance = await token.balanceOf(accounts [1]); assert.equal(balance.toNumber(), 100); }); });

我在這裡準備了兩個測試,檢查部署合約的地址是否確實收到了10000個代幣,以及100個代幣從一個地址轉移到另一個地址是否成功。

現在我們需要對Truffle進行配置和部署,首先進入Truffle -config.js和networks.development,取消註釋,並將該字段更改為我們的Ganache配置,此時我們可以保持其他設置不變。

networks: { development: { host: "192.168.48.1", // Localhost (default: none) port: 7545, // Standard Ethereum port (default: none) network_id: "*", // Any network (default: none ) } }

接下來,我們將教Truffle應該如何部署我們的合約,複製以下代碼來替換1_initial_migration.js的內容。這段代碼將合約部署到區塊鏈上,並使用我們的參數調用構造函數。

const Standard_Token = artifacts.require("Standard_Token"); module.exports = function (deployer) { deployer.deploy(Standard_Token, 10000, "Example Coin", 1, "EPC"); };

現在我們可以在根目錄運行truffle test,它會自動檢測測試文件夾中的測試並為我們運行它們。我們還應該看到以下結果

Contract: Standard_Token ✓ should put 10000 token in the first account (118ms) ✓ should transfer 100 token from the accounts[0] to accounts[1] (696ms)2 passing (1s)

現在一切都準備好了,我們可以運行truffle migrate來部署鏈上的合約!

結論

這就是我如何在以太坊上建立智能合約的環境,但請注意,沒有兩個開發者是相同的,這只是作為我們的參考,我們應該找到我們覺得最舒服的設置。

Source:https://medium.com/better-programming/how-i-set-up-my-local-solidity-development-environment-with-vscode-remix-and-truffle-suite-addd20ef9c