您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何編譯部署測試TNS代幣”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“如何編譯部署測試TNS代幣”文章能幫助大家解決問題。
此時我們有一個包含一些Solidity代碼的文件。但為了使以太坊虛擬機能夠理解它,我們需要將其轉化為機器代碼。另外,為了從Web應用程序與它進行通信,我們需要一個ABI(應用程序二進制接口),它是對某個智能合約中存在的函數的通用可讀描述——無論是代幣還是更復雜的東西。我們可以使用Truffle的編譯器立即為EVM和ABI創建機器代碼。
在項目文件夾中,運行:
truffle compile
此命令將查看contracts
子文件夾內部,將它們全部編譯并將其編譯后的版本放入build
子文件夾中。請注意,如果你使用了上一部分的替代開發流程,那么我們的TNSToken合約繼承功能的所有父合約也將在其自己的文件中逐個編譯。
隨意檢查生成的JSON文件的內容。我們的TNSToken應該有超過10000行的JSON代碼。
現在讓我們看看是否可以將它部署到我們的仿真模擬器Ganache區塊鏈中。如果Ganache尚未在終端的選項卡中或操作系統的應用程序中運行,請運行以下命令:
ganache-cli
或運行應用程序以獲得這樣的屏幕:
然后,回到我們剛剛編譯合約的文件夾中,我們必須添加一個migration遷移。創建文件migrations/2_deploy_tnstoken.js
。如果你不熟悉Truffle生態系統中的遷移,請參閱本指南。
我們將以下內容放入該文件中:
var Migrations = artifacts.require("./Migrations.sol"); var TNSToken = artifacts.require("./TNSToken.sol"); module.exports = function(deployer, network, accounts) { deployer.deploy(TNSToken, {from: accounts[0]}); };
首先,通過請求Migrations.sol
進行完整的導入。每次遷移都需要這樣做。接下來,部署代幣意味著我們需要導入其Solidity代碼,我們通過TNSToken.sol
(我們在前一部分中編寫的代碼)來完成此操作。最后,只是遷移function(deployer, network, accounts) {and the last}
之間改變的部分。
在這種情況下,我們告訴部署者部署TNSToken并傳入from
參數以設置初始代幣持有者。這里使用的地址是由Ganache生成的隨機地址,但是通過使用自動發送給部署者的accounts
數組,我們確保可以訪問運行節點中存在的帳戶列表(無論是實時Geth節點還是Ganache)。在我的特定示例中,account[0]
地址為0xdFb659D556d926dd3585d0f18d4F8eD7939E8061
,在上面的屏幕截圖中也很明顯。
我們也不要忘記在truffle.js
配置開發環境:
module.exports = { networks: { development: { host: "127.0.0.1", port: 7545, network_id: "*" } } };
注意:照顧端口和IP; 你的可能會有所不同!
最后,在項目文件夾中,運行truffle migrate
。你應該看到這樣的東西:
注意TNStoken旁邊的以太坊地址:0x3134bcded93e810e1025ee814e87eff252cff422
。這是我們的代幣部署的地方。現在讓我們看看它的實際效果。
在這種情況下,不需要自動測試。代幣合約是高度標準化和戰斗測試。如果我們使用的某些功能超出了傳統代幣的范圍,那么自動化測試就會派上用場。但是,通過將它發送到地址和從地址發送來測試它已經足夠了。
打開像MyEtherWallet這樣的錢包UI,在右上角的菜單中選擇一個自定義網絡。在對話框中,輸入你的私有區塊鏈給你的信息——Ganache或實際的PoA區塊鏈,根據本教程系列的第1部分,你可以運行的任何一個。在我的例子中,地址為127.0.0.1
,端口為7545
。
打開你在部署腳本中設置為from
值的錢包。如果你正在使用Ganache,你會看到它的私鑰打印在Ganache UI的屏幕上或終端的ganache輸出中。
最后,需要告知MEW該代幣存在。我們通過添加自定義代幣來完成此操作。
添加代幣后,你會立即注意到該帳戶現在有1億的余額,并且能夠在貨幣下拉選擇菜單中發送它們。我們試著將一些發送到另一個地址。
繼續發送,然后再將原始帳戶恢復到1億。我們剛剛確保代幣的基本功能按預期工作。
如果不將其部署在實時網絡上,這將不是真正的代幣測試。但是,我們不要使用主網絡,而是像Rinkeby這樣的測試網。
在truffle.js
,讓我們添加一個新的網絡rinkeby
,這樣我們的文件看起來像這樣:
require('dotenv').config(); const WalletProvider = require("truffle-wallet-provider"); const Wallet = require('ethereumjs-wallet'); const Web3 = require("web3"); const w3 = new Web3(); const PRIVKEY = process.env["PRIVKEY"]; const INFURAKEY = process.env["INFURAKEY"]; module.exports = { networks: { development: { host: "127.0.0.1", port: 7545, network_id: "*" }, rinkeby: { provider: function() { return new WalletProvider( Wallet.fromPrivateKey( Buffer.from(PRIVKEY, "hex")), "https://rinkeby.infura.io/"+INFURAKEY ); }, gas: 4600000, gasPrice: w3.utils.toWei("50", "gwei"), network_id: "3", }, } };
哎呀!這都是什么?
讓我們逐行梳理它。
前幾行導入一些節點模塊,因此我們可以使用下面的函數。如果你得到任何一個缺少的模塊消息,只需運行npm install web3-wallet-provider truffle-wallet-provider web3 dotenv --save
應該可以解決問題。
接下來,我們從根目錄中的.env
文件中加載我們正在運行合約錢包的私鑰(所以錢包將獲得1億個代幣;我們不能在這里使用from
值)項目文件夾。如果它不存在,請創建它。該文件還有一個Infura.io
訪問密鑰,這是一個托管以太坊節點并允許應用程序連接到它們的網站,因此開發人員無需在其計算機上運行完整的以太坊節點。
.env
文件默認是隱藏的,可以在.gitignore
忽略,這樣就不會有私鑰泄漏的危險——這是一個非常重要的預防措施!這是文件包含的內容:
PRIVKEY="YOUR_PRIVATE_KEY"; INFURAKEY="YOUR_INFURA_ACCESS_KEY";
你可以在此處注冊獲取Infura密鑰。如果你只是安裝Metamask,將其切換到Rinkeby,然后轉到導出私鑰,則可以輕松獲取私鑰。但是,任何方法都可行,所以選擇你喜歡的任何方法。你也可以使用Ganache的私鑰。一個私鑰可以在所有以太坊網絡上解鎖相同的錢包——testnet
,rinkeby
,mainnet
,你可以命名它。
回到我們的配置文件。我們有一個新的network
入口:rinkeby。這是我們將要部署的以太坊測試網的名稱,提供商內部的代碼基本上是千篇一律的復制粘貼,告訴Truffle“抓住我的私鑰,對其進行十六進制編碼,使其成為一個未鎖定的錢包,然后再通過它來和Infura交互“。
最后,我們定義了我們希望在執行此合約時要花費的gas限制(460萬就夠了,如果需要可以更改),gas需要多少(50 Gwei實際上相當昂貴,但我們正在玩的以太網是模擬的,所以沒關系),并且將網絡ID設置為4,因為這是Rinkeby testnet的標簽。
還有一件事我們需要做。我們之前寫的遷移文件是針對起始地址,但Rinkeby的地址不同。這是否意味著我們需要根據網絡更改部署腳本?當然不是!讓我們將2_deploy_tnstoken.js
文件更改為如下所示:
var Migrations = artifacts.require("./Migrations.sol"); var TNSToken = artifacts.require("./TNSToken.sol"); module.exports = function(deployer, network, accounts) { if (network == "development") { deployer.deploy(TNSToken, {from: accounts[0}); } else { deployer.deploy(TNSToken); } };
正如你所看到的,部署腳本是簡單的JavaScript,并且為部署者提供的第二個參數始終是網絡的名稱——我們可以使用它來區分它們。
如果我們現在嘗試使用truffle migrate --network rinkeby
運行遷移,如果我們使用的地址是新的,它將失敗:
這是因為該地址在部署合約時無需花費以太。但這很容易解決。只需前往Rinkeby Faucet免費獲取一些。
現在重新運行遷移,代幣合約將在Rinkeby網絡上實時部署。它可以像上面的Ganache用例一樣進行測試。一切都應該完全一樣,只有現在你也可以和你的朋友和同事一起測試。很有進展!
對于額外的信任點,建議你在Etherscan上驗證代幣并為其注冊ENS域。
驗證意味著將代幣的源代碼提交給Etherscan,以便將其與網絡上部署的內容進行比較,從而將其驗證為無后門。這是在代幣地址的“代碼”選項卡上完成的。由于我們的代幣使用了一些第三方代碼,并且無法輕松將這些代碼拉入驗證屏幕的代碼窗口,因此我們需要修改合約。為此,我們將使用一個名為truffle-flattener
的工具:
npm install --global truffle-flattener
該工具將所有依賴項和代幣的源代碼復制到一個文件中。我們可以像這樣運行它:
truffle-flattener contracts/TNSToken.sol >> ./contracts/TNSTokenFlat.sol
現在,contracts
文件夾中應該存在一個新文件,幾乎與我們的源代碼相同,但粘貼了依賴代碼(例如,SafeMath.sol
將粘貼在文件的頂部)。
將該新文件的內容粘貼到Verify
屏幕的代碼窗口中,將編譯器設置為通過運行truffle version
獲得的truffle版本,并將Optimization
設置為No
。單擊“驗證并發布”,一旦該過程完成,你的代幣的地址屏幕將顯示新選項卡:“讀取合約”和“寫入合約”,“ 代碼”選項卡將具有綠色復選標記,表示代碼已經過驗證。這為社區提供了額外的信任點。
ENS是以太坊名稱系統。它用于為以太坊提供人類可讀的名稱,因此你不必記住0xmumbojumbo
字符串,而是可以記住像bitfalls.eth
這樣的。然后,你甚至可以注冊像token.bitfalls.eth
這樣的子域名。注冊ENS域的過程并不簡單,需要時間,因此如果你愿意這樣做,我建議你閱讀本指南并按照此處的說明進行操作。
關于“如何編譯部署測試TNS代幣”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。