溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何編譯部署測(cè)試TNS代幣

發(fā)布時(shí)間:2022-01-15 14:33:30 來(lái)源:億速云 閱讀:152 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“如何編譯部署測(cè)試TNS代幣”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“如何編譯部署測(cè)試TNS代幣”文章能幫助大家解決問(wèn)題。

編譯

此時(shí)我們有一個(gè)包含一些Solidity代碼的文件。但為了使以太坊虛擬機(jī)能夠理解它,我們需要將其轉(zhuǎn)化為機(jī)器代碼。另外,為了從Web應(yīng)用程序與它進(jìn)行通信,我們需要一個(gè)ABI(應(yīng)用程序二進(jìn)制接口),它是對(duì)某個(gè)智能合約中存在的函數(shù)的通用可讀描述——無(wú)論是代幣還是更復(fù)雜的東西。我們可以使用Truffle的編譯器立即為EVM和ABI創(chuàng)建機(jī)器代碼。

在項(xiàng)目文件夾中,運(yùn)行:

truffle compile

此命令將查看contracts子文件夾內(nèi)部,將它們?nèi)烤幾g并將其編譯后的版本放入build子文件夾中。請(qǐng)注意,如果你使用了上一部分的替代開(kāi)發(fā)流程,那么我們的TNSToken合約繼承功能的所有父合約也將在其自己的文件中逐個(gè)編譯。

如何編譯部署測(cè)試TNS代幣

隨意檢查生成的JSON文件的內(nèi)容。我們的TNSToken應(yīng)該有超過(guò)10000行的JSON代碼。

部署到Ganache

現(xiàn)在讓我們看看是否可以將它部署到我們的仿真模擬器Ganache區(qū)塊鏈中。如果Ganache尚未在終端的選項(xiàng)卡中或操作系統(tǒng)的應(yīng)用程序中運(yùn)行,請(qǐng)運(yùn)行以下命令:

ganache-cli

或運(yùn)行應(yīng)用程序以獲得這樣的屏幕:

如何編譯部署測(cè)試TNS代幣

然后,回到我們剛剛編譯合約的文件夾中,我們必須添加一個(gè)migration遷移。創(chuàng)建文件migrations/2_deploy_tnstoken.js。如果你不熟悉Truffle生態(tài)系統(tǒng)中的遷移,請(qǐng)參閱本指南。

我們將以下內(nèi)容放入該文件中:

var Migrations = artifacts.require("./Migrations.sol");
var TNSToken = artifacts.require("./TNSToken.sol");

module.exports = function(deployer, network, accounts) {
  deployer.deploy(TNSToken, {from: accounts[0]});
};

首先,通過(guò)請(qǐng)求Migrations.sol進(jìn)行完整的導(dǎo)入。每次遷移都需要這樣做。接下來(lái),部署代幣意味著我們需要導(dǎo)入其Solidity代碼,我們通過(guò)TNSToken.sol(我們?cè)谇耙徊糠种芯帉?xiě)的代碼)來(lái)完成此操作。最后,只是遷移function(deployer, network, accounts) {and the last}之間改變的部分。

在這種情況下,我們告訴部署者部署TNSToken并傳入from參數(shù)以設(shè)置初始代幣持有者。這里使用的地址是由Ganache生成的隨機(jī)地址,但是通過(guò)使用自動(dòng)發(fā)送給部署者的accounts數(shù)組,我們確??梢栽L問(wèn)運(yùn)行節(jié)點(diǎn)中存在的帳戶列表(無(wú)論是實(shí)時(shí)Geth節(jié)點(diǎn)還是Ganache)。在我的特定示例中,account[0]地址為0xdFb659D556d926dd3585d0f18d4F8eD7939E8061,在上面的屏幕截圖中也很明顯。

我們也不要忘記在truffle.js配置開(kāi)發(fā)環(huán)境:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    }
  }
};

注意:照顧端口和IP; 你的可能會(huì)有所不同!

最后,在項(xiàng)目文件夾中,運(yùn)行truffle migrate。你應(yīng)該看到這樣的東西:

如何編譯部署測(cè)試TNS代幣

注意TNStoken旁邊的以太坊地址:0x3134bcded93e810e1025ee814e87eff252cff422。這是我們的代幣部署的地方。現(xiàn)在讓我們看看它的實(shí)際效果。

測(cè)試代幣

在這種情況下,不需要自動(dòng)測(cè)試。代幣合約是高度標(biāo)準(zhǔn)化和戰(zhàn)斗測(cè)試。如果我們使用的某些功能超出了傳統(tǒng)代幣的范圍,那么自動(dòng)化測(cè)試就會(huì)派上用場(chǎng)。但是,通過(guò)將它發(fā)送到地址和從地址發(fā)送來(lái)測(cè)試它已經(jīng)足夠了。

打開(kāi)像MyEtherWallet這樣的錢包UI,在右上角的菜單中選擇一個(gè)自定義網(wǎng)絡(luò)。在對(duì)話框中,輸入你的私有區(qū)塊鏈給你的信息——Ganache或?qū)嶋H的PoA區(qū)塊鏈,根據(jù)本教程系列的第1部分,你可以運(yùn)行的任何一個(gè)。在我的例子中,地址為127.0.0.1,端口為7545。

如何編譯部署測(cè)試TNS代幣

在MEW中配置網(wǎng)絡(luò)

打開(kāi)你在部署腳本中設(shè)置為from值的錢包。如果你正在使用Ganache,你會(huì)看到它的私鑰打印在Ganache UI的屏幕上或終端的ganache輸出中。

如何編譯部署測(cè)試TNS代幣

最后,需要告知MEW該代幣存在。我們通過(guò)添加自定義代幣來(lái)完成此操作。

如何編譯部署測(cè)試TNS代幣

在MEW中添加自定義代幣

添加代幣后,你會(huì)立即注意到該帳戶現(xiàn)在有1億的余額,并且能夠在貨幣下拉選擇菜單中發(fā)送它們。我們?cè)囍鴮⒁恍┌l(fā)送到另一個(gè)地址。

如何編譯部署測(cè)試TNS代幣

如何編譯部署測(cè)試TNS代幣

如何編譯部署測(cè)試TNS代幣

繼續(xù)發(fā)送,然后再將原始帳戶恢復(fù)到1億。我們剛剛確保代幣的基本功能按預(yù)期工作。

部署到實(shí)時(shí)網(wǎng)絡(luò)

如果不將其部署在實(shí)時(shí)網(wǎng)絡(luò)上,這將不是真正的代幣測(cè)試。但是,我們不要使用主網(wǎng)絡(luò),而是像Rinkeby這樣的測(cè)試網(wǎng)。

truffle.js,讓我們添加一個(gè)新的網(wǎng)絡(luò)rinkeby,這樣我們的文件看起來(lái)像這樣:

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",
    },
  }
};

哎呀!這都是什么?

讓我們逐行梳理它。

前幾行導(dǎo)入一些節(jié)點(diǎn)模塊,因此我們可以使用下面的函數(shù)。如果你得到任何一個(gè)缺少的模塊消息,只需運(yùn)行npm install web3-wallet-provider truffle-wallet-provider web3 dotenv --save應(yīng)該可以解決問(wèn)題。

接下來(lái),我們從根目錄中的.env文件中加載我們正在運(yùn)行合約錢包的私鑰(所以錢包將獲得1億個(gè)代幣;我們不能在這里使用from值)項(xiàng)目文件夾。如果它不存在,請(qǐng)創(chuàng)建它。該文件還有一個(gè)Infura.io訪問(wèn)密鑰,這是一個(gè)托管以太坊節(jié)點(diǎn)并允許應(yīng)用程序連接到它們的網(wǎng)站,因此開(kāi)發(fā)人員無(wú)需在其計(jì)算機(jī)上運(yùn)行完整的以太坊節(jié)點(diǎn)。

.env文件默認(rèn)是隱藏的,可以在.gitignore忽略,這樣就不會(huì)有私鑰泄漏的危險(xiǎn)——這是一個(gè)非常重要的預(yù)防措施!這是文件包含的內(nèi)容:

PRIVKEY="YOUR_PRIVATE_KEY";
INFURAKEY="YOUR_INFURA_ACCESS_KEY";

你可以在此處注冊(cè)獲取Infura密鑰。如果你只是安裝Metamask,將其切換到Rinkeby,然后轉(zhuǎn)到導(dǎo)出私鑰,則可以輕松獲取私鑰。但是,任何方法都可行,所以選擇你喜歡的任何方法。你也可以使用Ganache的私鑰。一個(gè)私鑰可以在所有以太坊網(wǎng)絡(luò)上解鎖相同的錢包——testnet,rinkeby,mainnet,你可以命名它。

回到我們的配置文件。我們有一個(gè)新的network入口:rinkeby。這是我們將要部署的以太坊測(cè)試網(wǎng)的名稱,提供商內(nèi)部的代碼基本上是千篇一律的復(fù)制粘貼,告訴Truffle“抓住我的私鑰,對(duì)其進(jìn)行十六進(jìn)制編碼,使其成為一個(gè)未鎖定的錢包,然后再通過(guò)它來(lái)和Infura交互“。

最后,我們定義了我們希望在執(zhí)行此合約時(shí)要花費(fèi)的gas限制(460萬(wàn)就夠了,如果需要可以更改),gas需要多少(50 Gwei實(shí)際上相當(dāng)昂貴,但我們正在玩的以太網(wǎng)是模擬的,所以沒(méi)關(guān)系),并且將網(wǎng)絡(luò)ID設(shè)置為4,因?yàn)檫@是Rinkeby testnet的標(biāo)簽。

還有一件事我們需要做。我們之前寫(xiě)的遷移文件是針對(duì)起始地址,但Rinkeby的地址不同。這是否意味著我們需要根據(jù)網(wǎng)絡(luò)更改部署腳本?當(dāng)然不是!讓我們將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);
  }
};

正如你所看到的,部署腳本是簡(jiǎn)單的JavaScript,并且為部署者提供的第二個(gè)參數(shù)始終是網(wǎng)絡(luò)的名稱——我們可以使用它來(lái)區(qū)分它們。

如果我們現(xiàn)在嘗試使用truffle migrate --network rinkeby運(yùn)行遷移,如果我們使用的地址是新的,它將失敗:

如何編譯部署測(cè)試TNS代幣

這是因?yàn)樵摰刂吩诓渴鸷霞s時(shí)無(wú)需花費(fèi)以太。但這很容易解決。只需前往Rinkeby Faucet免費(fèi)獲取一些。

如何編譯部署測(cè)試TNS代幣

現(xiàn)在重新運(yùn)行遷移,代幣合約將在Rinkeby網(wǎng)絡(luò)上實(shí)時(shí)部署。它可以像上面的Ganache用例一樣進(jìn)行測(cè)試。一切都應(yīng)該完全一樣,只有現(xiàn)在你也可以和你的朋友和同事一起測(cè)試。很有進(jìn)展!

獎(jiǎng)勵(lì):驗(yàn)證和ENS

對(duì)于額外的信任點(diǎn),建議你在Etherscan上驗(yàn)證代幣并為其注冊(cè)ENS域。

驗(yàn)證

驗(yàn)證意味著將代幣的源代碼提交給Etherscan,以便將其與網(wǎng)絡(luò)上部署的內(nèi)容進(jìn)行比較,從而將其驗(yàn)證為無(wú)后門。這是在代幣地址的“代碼”選項(xiàng)卡上完成的。由于我們的代幣使用了一些第三方代碼,并且無(wú)法輕松將這些代碼拉入驗(yàn)證屏幕的代碼窗口,因此我們需要修改合約。為此,我們將使用一個(gè)名為truffle-flattener的工具:

npm install --global truffle-flattener

該工具將所有依賴項(xiàng)和代幣的源代碼復(fù)制到一個(gè)文件中。我們可以像這樣運(yùn)行它:

truffle-flattener contracts/TNSToken.sol >> ./contracts/TNSTokenFlat.sol

現(xiàn)在,contracts文件夾中應(yīng)該存在一個(gè)新文件,幾乎與我們的源代碼相同,但粘貼了依賴代碼(例如,SafeMath.sol將粘貼在文件的頂部)。

將該新文件的內(nèi)容粘貼到Verify屏幕的代碼窗口中,將編譯器設(shè)置為通過(guò)運(yùn)行truffle version獲得的truffle版本,并將Optimization設(shè)置為No。單擊“驗(yàn)證并發(fā)布”,一旦該過(guò)程完成,你的代幣的地址屏幕將顯示新選項(xiàng)卡:“讀取合約”和“寫(xiě)入合約”,“ 代碼”選項(xiàng)卡將具有綠色復(fù)選標(biāo)記,表示代碼已經(jīng)過(guò)驗(yàn)證。這為社區(qū)提供了額外的信任點(diǎn)。

如何編譯部署測(cè)試TNS代幣

ENS

ENS是以太坊名稱系統(tǒng)。它用于為以太坊提供人類可讀的名稱,因此你不必記住0xmumbojumbo字符串,而是可以記住像bitfalls.eth這樣的。然后,你甚至可以注冊(cè)像token.bitfalls.eth這樣的子域名。注冊(cè)ENS域的過(guò)程并不簡(jiǎn)單,需要時(shí)間,因此如果你愿意這樣做,我建議你閱讀本指南并按照此處的說(shuō)明進(jìn)行操作。

關(guān)于“如何編譯部署測(cè)試TNS代幣”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

tns
AI