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.sol
和 1_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.json
和 Storage.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中文網其他相關文章!

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1
好用且免費的程式碼編輯器