在編寫智能合約時,開發人員只需要了解一種語言,例如 堅固性, 虛擬機, 或者 銹. 但是,選擇一個框架並圍繞該框架學習所有語言可能會很棘手。
學習一個簡約的命令行框架,比如 Dapp工具 消除了這些問題,並使Web3 開發人員的生活變得更加輕鬆。
在本DappTools 教程中,您將學習如何通過DappTools 框架創建、測試和部署您的智能合約。
查看本教程隨附的視頻:
什麼是DappTools?
DappTools 是一個類似於Hardhat 和Brownie 的框架,可幫助智能聯繫人開發人員測試、部署和維護他們的代碼。如果你部署一個合約,你將編譯後的字節碼存儲在哪裡?你如何跟踪它的去向?重新部署新代碼有多容易?所有這些都是通過使用智能合約開發框架解決的問題。
DappTools 最初是用Haskell 編寫的。然而最近,Paradigm 團隊採用了DappTools 並用Rust 重寫了它,稱他們為新創建 鑄造廠. 兩者的工作方式相似,因為它們都以命令行為中心,速度快,並且經常涉及編寫帶有大量模糊測試的Solidity 測試。
DappTools 是許多領先協議的流行選擇。
為什麼使用DappTools?
如果您是喜歡Linux、bash shell 和快速、以命令行為中心的編碼的開發人員,那麼這絕對是您應該嘗試的智能合約框架。此外,如果您不熟悉JavaScript 或Python,這對您也很有用!
我們在學習什麼?
在本教程中,我們將學習如何:
- 使用DappTools
- 部署Chainlink 驅動的 混合智能合約 使用 dapptools-starter-kit
以下是通過此入門工具包使用Chainlink 服務的一些示例:
安裝
要求
首先,我們需要安裝一些東西。
您可能已經安裝了它,但如果沒有,您將需要 make
. 跟隨 這些步驟 檢查您是否安裝了它。
入門
一旦我們安裝了這些工具,我們就可以克隆入門工具包repo 並開始使用它。
sh git clone https://github.com/smartcontractkit/dapptools-starter-kit cd dapptools-starter-kit make # This installs the project's dependencies. make test
現在你有了文件,讓我們來看看所有東西的作用:
Makefile
: 你把你的腳本放在哪裡。 DappTools 是基於命令行的,我們的makefile 幫助我們運行帶有幾個字符的大型命令。lib
:此文件夾用於外部依賴項,例如OpenZeppelin 或ds-test。out
: 你的編譯代碼去哪裡了。類似於Brownie 中的build 文件夾或Hardhat 中的artifacts 文件夾。src
:這是您的智能合約所在的位置。類似於Brownie 和Hardhat 中的contracts 文件夾。
測試
讓我們做一些測試!為了測試我們可以運行 make test
或者 dapp test
.
DappTools 中的所有命令都適用於這個repo,包括 dapp build
, ethsign
, 和 dapp test
.
導入外部依賴
假設我們想使用 OpenZeppelin 標準. 要安裝外部合同或包,我們可以使用 dapp install
命令。我們需要命名GitHub 存儲庫組織和要安裝的存儲庫名稱。
首先,我們需要提交到目前為止的更改。 DappTools 將外部包作為git 子模塊引入,因此我們需要先提交。
跑:
git add . git commit -m ‘initial commit’
然後,我們可以安裝我們的外部包。例如,對於OpenZeppelin,我們將使用:
dapp install OpenZeppelin/openzeppelin-contracts
您現在應該在lib 文件夾中看到一個標有openzeppelin-contracts 的新文件夾,因為它是從GitHub 下載的。這個repo 已經從OpenZeppelin 合約開始,所以有一些重複,但我們仍然需要看看它是如何工作的。
部署
要部署,您首先需要設置您的 ethsign
和你的 .env
文件。
設置您的帳戶/ethsign
要將您的私鑰導入DappTools,您可以使用密鑰庫或 ethsign
. ethsign
附帶安裝 dapptools
. 為了 ethsign
,運行以下命令:
bash ethsign import
現在將提示您輸入私鑰和密碼。您可以從錢包中獲取私鑰,例如 元掩碼. 成功後,將私鑰的地址添加到您的 .env
文件下 ETH_FROM
多變的。見 .env.example
文件為例。
見 Makefile
有關它如何在幕後工作的更多背景信息。
如果您要部署到測試網,請確保您的錢包中有測試網ETH 和LINK。您可以從 鏈環水龍頭.
設置您的 .env
文件
你可以在 .env.example
你的一個例子 .env
應該看起來像(部署到實時網絡)。
ALCHEMY_API_KEY
: 你可以從得到一個 煉金術 帳戶。ETH_FROM
:您要從中發送交易的錢包地址。您必須將要使用的地址的私鑰加載到您的ethsign
,見上文。ETHERSCAN_API_KEY
:用於驗證Etherscan 上的合約(可選)。ETH_RPC_URL
:用於在使用時具有默認部署網絡make deploy
(選修的)。
測試網和主網部署
設置您的 ETH_RPC_URL
或者 ALCHEMY_API_KEY
在你的 .env
文件,然後運行以下命令之一:
計數器(Keeper 兼容合約):
bash make deploy CONTRACT=Counter
價格飼料:
bash make deploy CONTRACT=PriceFeedConsumer
Chainlink VRF 消費者:
bash make deploy CONTRACT=VRFConsumer
您可以在各自的部署參數中更改它們的部署參數 deploy
文件中 scripts
文件夾。所有構造函數參數都在 ./src/helper-config.sh
文件夾。在這裡,您可以跨網絡分配不同的構造函數參數。
本地測試網
# 在一個終端上
dapp 測試網
改變你的 ETH_RPC_URL
到 http://127.0.0.1:8545
然後運行您的部署腳本。
在Etherscan 上進行驗證
部署合約後,您可以使用以下方法在Etherscan 上對其進行驗證:
ETHERSCAN_API_KEY=<api-key> dapp verify-contract <contract_directory>/<contract>:<contract_name> <contract_address>
例如:
ETHERSCAN_API_KEY=123456765 dapp verify-contract ./src/Counter.sol:Counter 0x23456534212536435424
查看 dapp 文檔 了解如何使用DappTools 驗證合約。
與您的合同互動
為了與我們的合約交互,我們使用 seth
命令。假設我們已經部署了我們的 PriceFeedConsumer.sol
到Kovan,現在我們要調用 getLatestPrice
功能。我們如何做到這一點?
ETH_RPC_URL=<YOUR_RPC_URL> seth call <YOUR_CONTRACT_ADDRESS> "getLatestPrice()"
例如:
ETH_RPC_URL=https://alchemy.io/adsfasdf seth call 0xd39F749195Ab1B4772fBB496EDAF56729ee36E55 "getLatestPrice()"
這會給我們一個像 0x0000000000000000000000000000000000000000000000000000004c17b125c0
這是十六進制 326815000000
這是調用交易(不是花費gas)。要更改區塊鏈的狀態(消耗氣體),我們將使用 seth send
. 假設我們有一個 VRFConsumer
合約已部署,我們想調用 getRandomNumber
:
首先,我們需要在Kovan 鏈上向我們的合約發送一些LINK:
ETH_RPC_URL=<YOUR_RPC_URL> ETH_FROM=<YOUR_FROM_ADDRESS> seth send <LINK_TOKEN_ADDRESS> "transfer(address,uint256)" <VRF_CONSUMER_ADDRESS> 1000000000000000000
喜歡:
ETH_RPC_URL=https://alchemy.io/adfasdf ETH_FROM=0x12345 seth send 0xa36085F69e2889c224210F603D836748e7dC0088 "transfer(address,uint256)" 0xa74576956E24a8Fa768723Bd5284BcBE1Ea03adA 100000000000000000
在哪裡 100000000000000000
= 1 鏈接
然後,我們可以調用 getRandomNumber
功能:
ETH_RPC_URL=<YOUR_RPC_URL> ETH_FROM=<YOUR_FROM_ADDRESS> seth send <VRF_CONSUMER_ADDRESS> "getRandomNumber()"
稍作延遲後,讀取結果:
ETH_RPC_URL=<YOUR_RPC_URL> seth call <VRF_CONSUMER_ADDRESS> "randomResult()"
如您所見,將這些腳本編入我們的腳本會很棒 scripts
文件夾。如果您想貢獻,請進行PR!
資源
本教程的一些有用資源:
概括
DappTools 是一個非常強大的應用程序,可以幫助您構建改變遊戲規則的dApp。我們建議您檢查一下,試一試,看看您可以通過利用Chainlink 去中心化服務構建什麼。
通過訪問了解有關Chainlink 的更多信息 鏈環 或閱讀文檔 docs.chain.link. 要討論集成,請聯繫專家。