首頁 科技週邊 IT業界 松露遷移解釋了

松露遷移解釋了

Feb 16, 2025 am 10:47 AM

Truffle Migrations Explained

Truffle 遷移:自動化部署智能合約的利器

遷移(Migrations)是開發者自動化部署數據及其支持結構的一種方法。它們在管理新軟件版本的部署方面非常有用,並不局限於區塊鏈開發。

Truffle 遷移使我們能夠將智能合約“推送”到以太坊區塊鏈(本地、測試網或主網),並設置必要的步驟來連接合約以及填充合約的初始數據。

Truffle 遷移的真正優勢在於管理區塊鏈上的合約地址。這個通常很繁瑣的工作通過 Truffle 幾乎完全被抽象掉了。

關鍵要點

  • Truffle 遷移對於自動化將智能合約部署到以太坊區塊鏈至關重要,它允許開發人員高效地管理合約地址和交互。
  • 此過程涉及使用 JavaScript 創建遷移腳本,這有助於順利部署合約和處理它們的依賴關係。
  • 在運行遷移之前,使用 truffle compile 編譯合約以生成有助於合約與區塊鏈之間交互的工件至關重要。
  • 開發人員可以使用單個命令管理多個合約及其相互依賴關係,從而提高區塊鏈應用程序的可擴展性和可維護性。

前提條件

確保已安裝 Truffle 框架和 Ganache CLI。

入門

首先,選擇一個項目文件夾,然後運行 truffle init。你應該得到類似這樣的輸出:

<code>Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

  Compile:        truffle compile
  Migrate:        truffle migrate
  Test contracts: truffle test</code>
登入後複製
登入後複製

此命令在您所在目錄中創建一個基本的 Truffle 項目。目錄結構如下所示:

<code>.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js</code>
登入後複製
登入後複製

首先,在 contracts 目錄中,創建一個名為 Storage.sol 的新文件,內容如下:

pragma solidity ^0.4.21;

contract Storage {

    mapping (string => string) private _store;

    function addData(string key, string value) public {
        require(bytes(_store[key]).length == 0);
        _store[key] = value;
    }

    function removeData(string key) public returns (string) {
        require(bytes(_store[key]).length != 0);
        string prev = _store[key];
        delete _store[key];
        return prev;
    }

    function changeData(string key, string newValue) public {
        require(bytes(_store[key]).length != 0);
        _store[key] = newValue;
    }

}
登入後複製
登入後複製

初始遷移

你可能已經註意到,運行 truffle init 時會創建兩個文件:Migrations.sol1_initial_migration.js

初始遷移文件很少需要更改。它們的作用本質上是跟踪區塊鏈上的地址。

Migrations.sol 文件可以按照你想要的方式編寫,但它必須符合 truffle init 命令創建的固定接口。你可以在這些文件中進行一些高級的遷移操作,但正如我所說,這很少需要。

1_initial_migration.js 文件也是如此。它的作用只是將 Migrations.sol 文件推送到目標區塊鏈。

遷移數據

為了將智能合約部署到以太坊區塊鏈,你必須首先編寫遷移文件。首先,在你的 migrations 目錄中,創建一個名為 2_deploy_contracts.js 的文件。你的項目結構現在應該如下所示:

<code>Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

  Compile:        truffle compile
  Migrate:        truffle migrate
  Test contracts: truffle test</code>
登入後複製
登入後複製

為了使用遷移部署智能合約,我們首先需要訪問它們的 工件。這些文件描述了合約地址、已部署合約的網絡以及合約具有的函數。

那麼所有這些數據從哪裡來呢?

在你的項目目錄中,運行 truffle compile。如果一切順利,你應該得到類似這樣的輸出:

<code>.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js</code>
登入後複製
登入後複製

根據編譯器版本,你可能會收到一些警告,但只要沒有錯誤,你就可以繼續了。

現在再次檢查你的項目目錄結構:

pragma solidity ^0.4.21;

contract Storage {

    mapping (string => string) private _store;

    function addData(string key, string value) public {
        require(bytes(_store[key]).length == 0);
        _store[key] = value;
    }

    function removeData(string key) public returns (string) {
        require(bytes(_store[key]).length != 0);
        string prev = _store[key];
        delete _store[key];
        return prev;
    }

    function changeData(string key, string newValue) public {
        require(bytes(_store[key]).length != 0);
        _store[key] = newValue;
    }

}
登入後複製
登入後複製

請注意,現在有一個 build 文件夾,其中包含兩個文件——Migrations.jsonStorage.json——它們與 contracts 目錄中的智能合約文件相匹配。

這些 *.json 文件包含它們各自智能合約的描述。描述包括:

  • 合約名稱
  • 合約 ABI(應用程序二進制接口——所有智能合約函數的列表,以及它們的參數和返回值)
  • 合約字節碼(已編譯的合約數據)
  • 合約已部署字節碼(已部署到區塊鏈的字節碼的最新版本)
  • 編譯合約的編譯器版本
  • 已部署合約的網絡列表以及每個網絡上合約的地址。

此文件使 Truffle 能夠創建用於與智能合約通信的 JavaScript 包裝器。例如,當你在 JavaScript 代碼中調用 contract.address 時,Truffle 框架會從 *.json 文件中讀取地址,並實現合約版本和網絡之間的輕鬆轉換。

編寫遷移文件

有了這些知識,讓我們編寫第一個遷移文件。在 2_deploy_contracts.js 文件中,寫入以下內容:

<code>.
├── contracts
│   ├── Migrations.sol
│   └── Storage.sol
├── migrations
│   ├── 1_initial_migration.js
│   └── 2_deploy_contracts.js
├── test
├── truffle-config.js
└── truffle.js</code>
登入後複製

編寫遷移文件就這麼簡單。為了運行遷移腳本,在終端中運行以下命令:

<code>Compiling ./contracts/Migrations.sol...
Compiling ./contracts/Storage.sol...

Writing artifacts to ./build/contracts</code>
登入後複製

你應該會收到一條錯誤消息:

<code>.
├── build
│   └── contracts
│       ├── Migrations.json
│       └── Storage.json
├── contracts
│   ├── Migrations.sol
│   └── Storage.sol
├── migrations
│   ├── 1_initial_migration.js
│   └── 2_deploy_contracts.js
├── test
├── truffle-config.js
└── truffle.js</code>
登入後複製

這意味著 Truffle 找不到你想要部署到的網絡。

為了使用模擬的以太坊區塊鏈,在新終端標籤頁中運行 ganache-cli。你應該得到類似這樣的輸出:(輸出略,與原文相同)

這意味著你已經啟動了一個私有區塊鏈,它正在 localhost:8545 上運行。現在讓我們設置 Truffle 以部署到該網絡。

將以下內容放入 truffle.js 文件中:

// 从 Storage.json 文件中获取 Storage 合约数据
var Storage = artifacts.require("./Storage.sol");

// JavaScript 导出
module.exports = function(deployer) {
    // deployer 是 Truffle 用于将合约部署到网络的包装器

    // 将合约部署到网络
    deployer.deploy(Storage);
}
登入後複製

這僅僅意味著你正在將你的合約部署到在 localhost:8545 上運行的網絡。

現在運行 truffle migrate。你應該得到類似這樣的輸出:(輸出略,與原文相同)

Truffle 將你的合約遷移到網絡並保存了工件。在 build 目錄中,在 Storage.json 文件中,通過檢查 networks 對象來驗證這是正確的。你應該看到類似這樣的內容:(內容略,與原文相同)

...(後續內容與原文相同,包括多個合約,網絡,賬戶,庫的處理,以及最後的總結和FAQ,這裡不再重複。)

以上是松露遷移解釋了的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1662
14
CakePHP 教程
1418
52
Laravel 教程
1311
25
PHP教程
1261
29
C# 教程
1234
24
CNCF ARM64飛行員:影響和見解 CNCF ARM64飛行員:影響和見解 Apr 15, 2025 am 08:27 AM

該試點程序是CNCF(雲本機計算基礎),安培計算,Equinix金屬和驅動的合作,簡化了CNCF GitHub項目的ARM64 CI/CD。 該計劃解決了安全問題和績效

使用AWS ECS和LAMBDA的無服務器圖像處理管道 使用AWS ECS和LAMBDA的無服務器圖像處理管道 Apr 18, 2025 am 08:28 AM

該教程通過使用AWS服務來指導您通過構建無服務器圖像處理管道。 我們將創建一個部署在ECS Fargate群集上的next.js前端,與API網關,Lambda函數,S3桶和DynamoDB進行交互。 Th

21個開發人員新聞通訊將在2025年訂閱 21個開發人員新聞通訊將在2025年訂閱 Apr 24, 2025 am 08:28 AM

與這些頂級開發人員新聞通訊有關最新技術趨勢的了解! 這個精選的清單為每個人提供了一些東西,從AI愛好者到經驗豐富的後端和前端開發人員。 選擇您的收藏夾並節省時間搜索REL

See all articles