7*24快訊如何使用安...

如何使用安全帽在Etherscan 上驗證智能合約

在很大程度上由於部署到通用區塊鏈的智能合約的不可變性,安全性始終是用戶和企業的首要任務。出於這個原因,在以太坊上開發智能合約的關鍵步驟之一是初始部署後的Etherscan 驗證。 Etherscan 使任何人,從用戶到經驗豐富的開發人員和錯誤獵人,都可以檢查代碼的有效性、正確性和安全性。

在之前的文章中,我們已經學習瞭如何 在Etherscan 上閱讀智能合約 以及如何 使用Remix IDE 在Etherscan 上驗證智能合約. 在本教程中,我們的目標是了解如何使用最常用的智能合約開發框架之一來完成驗證——安全帽.

讓我們開始吧。

讓我們創建一個新的Hardhat 項目。 首先,我們要檢查我們機器上安裝的npm 版本。打開你的終端並輸入:

npm -v

如果您沒有安裝npm,請按照 本指南. 然後,輸入以下命令安裝Hardhat:

npm install --save-dev hardhat

如果您正在使用 代替npm,輸入:

yarn add --dev hardhat

如果您使用的是Windows,強烈建議使用 WSL 2.

要創建示例項目,請在項目文件夾中運行以下命令,然後選擇“創建TypeScript 項目”:

npx hardhat

歡迎使用安全帽的屏幕截圖

如果前面的步驟正常工作,您現在應該能夠看到三個主要的Hardhat 文件夾:“contracts”、“test”和“scripts”。轉到“contracts”文件夾,創建一個新的Solidity 文件,並將其命名為“PriceFeedConsumer.sol”。然後,複製以下源代碼,取自 Chainlink 官方文檔.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract PriceConsumerV3 {

    AggregatorV3Interface internal priceFeed;

    /**
     * Network: Goerli
     * Aggregator: ETH/USD
     * Address: 0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e
     */
    constructor(address priceFeedAddress) {
        priceFeed = AggregatorV3Interface(priceFeedAddress);
    }

    /**
     * Returns the latest price
     */
    function getLatestPrice() public view returns (int) {
        (
            /*uint80 roundID*/,
            int price,
            /*uint startedAt*/,
            /*uint timeStamp*/,
            /*uint80 answeredInRound*/
        ) = priceFeed.latestRoundData();
        return price;
    }
}

現在通過運行下一個命令安裝@chainlink/contracts 包:

npm install --save-dev @chainlink/contracts

之後,通過運行編譯我們的智能合約

npx hardhat compile

使用Hardhat,您可以使用Etherscan 驗證您的智能合約 安全帽-etherscan 插入。

首先,您需要一個Etherscan API 密鑰。要獲得一份,請前往 Etherscan 網站,免費創建一個新帳戶並登錄。之後,單擊“API Keys”選項卡。最後,單擊“添加”按鈕生成新的API 密鑰。

我們將把我們的智能合約部署到Goerli 測試網絡。如果您以前從未這樣做過,您可能想知道,為了從Hardhat 部署智能合約,您必須提供錢包的私鑰和JSON RPC URL。您可以註冊一個 煉金術 鑰匙免費。

你還需要一些測試ETH,你可以很容易地從 鏈環水龍頭.

導航回您的安全帽項目。修改“hardhat.config.ts”文件:

export default {
  // rest of the config
  networks: {
    hardhat: {},
    goerli: {
      url: `https://eth-goerli.alchemyapi.io/v2/${ALCHEMY_API_KEY}`,
      accounts: [GOERLI_PRIVATE_KEY],
    },
  },
  etherscan: {
    apiKey: "ABCDE12345ABCDE12345ABCDE123456789", // Your Etherscan API key
  },
};

在“scripts”文件夾中創建新文件並將其命名為“deployPriceFeedConsumer.ts”。該腳本將部署PriceFeedConsumer.sol 智能合約,出於安全原因等待幾個區塊被包含在鏈中,並嘗試在Etherscan 上對其進行驗證。

import { ethers, network, run } from "hardhat";

async function main() {
  const priceFeedAddress = “0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e”;

  const priceFeedConsumerFactory = await ethers.getContractFactory(“PriceConsumerV3”);
  const priceFeedConsumer = await priceFeedConsumerFactory.deploy(priceFeedAddress);

  const WAIT_BLOCK_CONFIRMATIONS = 6;
  await priceFeedConsumer.deployTransaction.wait(WAIT_BLOCK_CONFIRMATIONS);

  console.log(`Contract deployed to ${priceFeedConsumer.address} on ${network.name}`);

  console.log(`Verifying contract on Etherscan...`);

  await run(`verify:verify`, {
    address: priceFeedConsumer.address,
    constructorArguments: [priceFeedAddress],
  });
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

保存文件並從終端運行下一個命令:

npx hardhat run scripts/deployPriceFeedConsumer.ts --network goerli

您的合約現在應該部署到Goerli 測試網並在Etherscan 瀏覽器上進行驗證。

我們將再次使用 安全帽-etherscan 插件來驗證我們的智能合約。


要開始,請訪問 以太掃描 並註冊一個帳戶。在您的帳戶設置下,找到“API 密鑰”部分。使用免費計劃生成一個API 密鑰。

我們將再次將我們的智能合約部署到Goerli 測試網絡。如果您需要測試令牌,請訪問 鏈環水龍頭.

修改“hardhat.config.ts”文件:

export default {
  // rest of the config
  networks: {
    hardhat: {},
    goerli: {
      url: `https://eth-goerli.alchemyapi.io/v2/${ALCHEMY_API_KEY}`,
      accounts: [GOERLI_PRIVATE_KEY],
    },
  },
  etherscan: {
    apiKey: "ABCDE12345ABCDE12345ABCDE123456789", // Your Etherscan API key
  },
};

在“scripts”文件夾中創建新文件並將其命名為“deployPriceFeedConsumer.ts”。這將部署PriceFeedConsumer.sol 智能合約並出於安全原因等待幾個區塊被包含在鏈中。

import { ethers, network } from "hardhat";

async function main() {
  const priceFeedAddress = “0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e”;

  const priceFeedConsumerFactory = await ethers.getContractFactory(“PriceConsumerV3”);
  const priceFeedConsumer = await priceFeedConsumerFactory.deploy(priceFeedAddress);

  const WAIT_BLOCK_CONFIRMATIONS = 6;
  await priceFeedConsumer.deployTransaction.wait(WAIT_BLOCK_CONFIRMATIONS);

  console.log(`Contract deployed to ${priceFeedConsumer.address} on ${network.name}`);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

使用以下命令部署您的智能合約:

npx hardhat run scripts/deployPriceFeedConsumer.ts --network goerli

我們現在將使用Hardhat 的“驗證”任務從CLI 在Etherscan 上驗證這個智能合約。此命令的一般語法如下所示:

npx hardhat verify --network <network> <contract address> <constructor parameters>

我們將通過以下方式對其進行調整:

npx hardhat verify --network goerli <contract address> 
0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e

您應該能夠在Etherscan 上看到我們合約的公開驗證源代碼的鏈接。如果您收到一條錯誤消息,指出該地址沒有字節碼,這可能意味著Etherscan 尚未索引您的合約。在這種情況下,請稍等片刻,然後重試。

使用Hardhat 進行Etherscan 驗證的第三個選項類似於通過Remix IDE 進行驗證的過程,這在我們的一個 以前的博客文章.

我們再次部署到Goerli 測試網絡,如果您需要測試令牌,請導航到 鏈環水龍頭. 為此,您不需要Etherscan API 密鑰。

您的“hardhat.config.ts”文件應如下所示:

export default {
  // rest of the config
  solidity: "0.8.9",
  networks: {
    hardhat: {},
    goerli: {
      url: `https://eth-goerli.alchemyapi.io/v2/${ALCHEMY_API_KEY}`,
      accounts: [GOERLI_PRIVATE_KEY],
    },
  }
};

我們將重用上一章的部署腳本:

import { ethers, network } from "hardhat";

async function main() {
  const priceFeedAddress = “0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e”;

  const priceFeedConsumerFactory = await ethers.getContractFactory(“PriceConsumerV3”);
  const priceFeedConsumer = await priceFeedConsumerFactory.deploy(priceFeedAddress);

  const WAIT_BLOCK_CONFIRMATIONS = 6;
  await priceFeedConsumer.deployTransaction.wait(WAIT_BLOCK_CONFIRMATIONS);

  console.log(`Contract deployed to ${priceFeedConsumer.address} on ${network.name}`);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

運行部署腳本:

npx hardhat run scripts/deployPriceFeedConsumer.ts --network goerli

如果你在Etherscan 上搜索你的合約地址,當你點擊合約標籤時,你只會看到合約的字節碼。

Etherscan 合約截圖

要開始驗證過程,請單擊“驗證並發布”鏈接。將顯示以下頁面。

Etherscan 截圖

如果默認情況下尚未填充合同地址,請在第一個輸入字段中輸入您的合同地址。

然後,從“編譯器類型”下拉列表中,選擇“Solidity(單個文件)”。

之後,將顯示“編譯器版本”下拉菜單。在這裡,您需要選擇在部署之前用於編譯此智能合約的相同Solidity 編譯器版本。如果您回頭查看“hardhat.config.ts”文件,您會發現在我們的例子中,它是0.8.9 版本。

最後,從“開源許可證類型”下拉列表中,選擇在Solidity 文件開頭指定的許可證為“SPDX-License-Identifier”,在我們的例子中是MIT。點擊“繼續”進入下一頁。

在下一頁上,您應該粘貼智能合約的源代碼。不幸的是,如果您像我們一樣導入了其他合約或接口,您不能在這裡複製粘貼。 Etherscan 還需要知道這些導入合約的源代碼。為此,您需要通過鍵入以下命令來“扁平化”您的智能合約:

npx hardhat flatten

您的智能合約的“扁平化”版本將在終端中打印出來。或者,您可能希望將其保存在單獨的文件中,您可以通過鍵入以下內容來完成:

npx hardhat flatten contracts/PriceFeedConsumer.sol > cotracts/PriceFeedConsumer_flat.sol

現在您可以將合約的源代碼粘貼到“Enter the Solidity Contract Code below”輸入框中。然後,解決驗證碼並單擊藍色的“驗證並發布”按鈕。您應該能夠在“合同”選項卡上看到綠色複選標記。這意味著您已成功驗證您的合同。

在本文中,我們介紹瞭如何使用三種不同的方法從Hardhat 驗證Etherscan 上的智能合約。智能合約驗證是部署過程中的關鍵步驟之一,因為它允許社區在使用之前檢查源代碼。

通過訪問了解有關Chainlink 的更多信息 鏈環 或閱讀docs.chain.link 上的文檔。要討論集成,請聯繫專家。

Source Link

最受歡迎

繼續閱讀

長期持有者持有的比特幣(BTC)供應量達到最高水平

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打...

現在讀

$COOKIE, the Cookie3 Mark...

Tallinn, Estonia, March 26th, 2024...

長期持有者持有的比特幣(BTC)供應量達到最高水平...

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持有者和投機者。 儘管BTC 的價格在過去一個月中保持相對平穩,範圍在約29,000 美元至31,000 美元之間,但人們還是開始瘋狂囤積。 ...

Caldera 宣布與Espresso Syste...

Caldera 開發人員可以利用Espresso Sequence...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打開了大門。對於那些尋求利用Web3 遊戲巨大潛力的人來說,確保先發優勢至關重要。 了解Web3 遊戲生態系統在深入研究Web3 遊戲之前,有...

Taapsee Pannu 推出NFT 平台,介紹...

企業家貢獻者表達的意見是他們自己的。 您正在閱讀《企業家印度》,這是企業家媒體的國際特許經營刊物。 女演員Taapsee Pannu 最近推出了“taapseeclub.com”,這是她自己的非同質代...

比特幣(BTC) 地址休眠超過11 年,轉移310...

經過11 年多的閒置之後,一個包含3100 萬美元BTC 的休眠比特幣地址最近突然活躍起來。 2023年7月22日,地址 轉入 將其全部餘額轉移到新地址。 早期BTC 地址復活 比特幣自2009 年以來就已經存在,因此存在多年來不活躍的休眠地址,其中包含大量BTC。這種加密貨幣的一些早期採用者能夠...

加密貨幣死了嗎?當今加密貨幣的現狀

您之前可能聽說過加密貨幣正在消亡(或比特幣已消亡)。在這篇文章中,我們將研究加密貨幣的狀態,並嘗試回答這個問題:加密貨幣現在已經死了嗎? 在我們開始之前,我們想澄清一下,本文指的是最廣泛意義上的“加密貨幣行業”; 在裡面 網絡3 感覺。該定義包括加密資產市場; 但它還包括其他非財務用例。 隨著近來加...

Chancer 可能成為體育和社交博彩領域的下一個...

加密貨幣 隨著企業財報季節的繼續,本週股市表現好壞參半。在Ne...

以太坊(ETH) 創下兩個月來CEX 流入最高紀錄...

過去一周,以太坊(ETH)流入中心化交易所(CEX)的資金量創下了過去兩個月來的最高水平。這些重大的資產變動表明ETH 的價格可能會下跌。 CoinGecko 數據顯示,第二大加密貨幣的價格一直在小幅下跌,過去一周價值下跌了2.5%。截至撰寫本文時,以太幣易手價格為1,892.65 美元,過去24...

新的DeFi 法案有“不可行的義務”

加密貨幣創新委員會表示,新的反洗錢法案沒有為DeFi 中的非法金融...

幣安大幅削減成本,瑞波幣為美國銀行和加密貨幣風險投...

美國證券交易委員會(SEC)對加密貨幣公司的打擊似乎嚴重影響了幣安的業務。據報導,在過去幾週內,該加密貨幣交易所解雇了1,000 多名員工,並削減了一些福利。 幣安表示,“當前的市場環境和監管環境”導致利潤下降,這表明可能正在進行更多削減。一位發言人告訴Cointelegraph,該公司將考慮縮減“...

Automata 雙週更新:第48 期| 通過自動...

迎接新的季度意味著設定我們的意圖並為團隊規劃下一步的行動。幕後醞釀的一切——合作、產品功能和營銷發布——很難抑制我們的興奮。我們一開始就在1RPC(2 個備受期待的第2 層主網)上添加了對Linea 和Base 的支持。科技載體更新頁腳以顯示界面版本平滑的用戶體驗 USDC CCTP 支持 關於仲裁...