使用 Truffle 部署合约#

本教程将逐步介绍如何使用 Truffle(以太坊开发框架)在 X Layer 测试网上创建、编译并部署一个简单的智能合约。

什么是 Truffle?#

Truffle 是以太坊开发者最流行的开发工具链。

配置开发环境#

在开始之前,有几项技术要求,请安装以下工具:

Windows 用户注意事项: 如果你在 Windows 上运行 Truffle,可能会遇到一些命名冲突,导致 Truffle 无法正常执行。请参考解决命名冲突的相关章节以获取解决方案。 安装完上述工具后,只需一条命令即可安装 Truffle:

shell
npm install -g truffle

在终端输入 truffle version 验证 Truffle 是否安装成功。如果看到报错,请确保 npm 模块路径已添加到环境变量中。

创建项目#

第一步是创建一个 Truffle 项目。我们以 MegaCoin 为例,该示例允许你创建一个可在账户间转账的代币:

  • 为 Truffle 项目创建一个新目录:
shell
mkdir MegaCoin
cd MegaCoin
  • 初始化项目:
shell
truffle init

完成后,项目将具有以下目录结构:

  • contracts/:存放 Solidity 合约的目录
  • migrations/:存放可脚本化部署文件的目录
  • test/:存放应用和合约测试文件的目录
  • truffle-config.js:Truffle 配置文件

创建合约#

你可以编写自己的智能合约,也可以下载 ERC-20 代币智能合约模板

编译合约#

要编译 Truffle 项目,切换到项目根目录后,在终端输入以下命令:

shell
truffle compile

为 X Layer 配置 Truffle#

  • 打开 truffle-config.js
  • 使用 X Layer 网络凭据更新 truffle-config 配置
javascript
const HDWalletProvider = require('truffle-hdwallet-provider');
const fs = require('fs');
const mnemonic = fs.readFileSync(".secret").toString().trim();

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",     // Localhost (default: none)
      port: 8545,            // Standard X Layer port (default: none)
      network_id: "*",       // Any network (default: none)
    },
    testnet: {
      provider: () => new HDWalletProvider(mnemonic, `https://testrpc.xlayer.tech/terigon`),
      network_id:1952,
      confirmations: 10,
      timeoutBlocks: 200,
      skipDryRun: true
    },
  },

  // Set default mocha options here, use special reporters etc.
  mocha: {
    // timeout: 100000
  },

  // Configure your compilers
  compilers: {
    solc: {
    }
  }
}
Note
Provider 需要传入助记词(mnemonic)。这是你用于部署账户的种子短语(seed phrase)。 在根目录下创建一个新的 .secret 文件,并输入你的 12 个单词的助记词种子短语以开始使用。要从 MetaMask 钱包获取种子短语,可以进入 MetaMask 设置,从菜单中选择安全与隐私,在那里你会看到一个 reveal seedphrase(显示种子短语)按钮。

部署合约#

在项目根目录下运行以下命令:

shell
$ truffle migrate --network testnet

合约将部署到 X Layer Chapel 测试网。部署输出示例如下:

shell
1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0xaf4502198400bde2148eb4274b08d727a17080b685cd2dcd4aee13d8eb954adc
   > Blocks: 3            Seconds: 9
   > contract address:    0x81eCD10b61978D9160428943a0c0Fb31a5460466
   > block number:        3223948
   > block timestamp:     1604049862
   > account:             0x623ac9f6E62A8134bBD5Dc96D9B8b29b4B60e45F
   > balance:             6.24574114
   > gas used:            191943 (0x2edc7)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00383886 ETH

   Pausing for 5 confirmations...
   ------------------------------
   > confirmation number: 2 (block: 3223952)
   > confirmation number: 3 (block: 3223953)
   > confirmation number: 4 (block: 3223954)
   > confirmation number: 6 (block: 3223956)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00383886 ETH


Summary
=======
> Total deployments:   1
> Final cost:          0.00383886 ETH
Note
请注意,你的 addresstransaction_hash 等信息会有所不同。以上输出仅作为结构示例供参考。

恭喜!你已成功部署了智能合约。现在可以与该智能合约进行交互了。