使用 Truffle 在测试/主网络上部署智能合约
智能合约是一种在特定条件下直接自动控制各方之间数字资产转移的计算机程序。智能合约的工作方式与传统合约相同,同时也会自动执行合约。智能合约是完全按照创建者设置(编码、编程)的方式执行的程序。就像传统合同可以通过法律强制执行一样,智能合约也可以通过代码强制执行。
到目前为止,我们的智能合约编写和编译没有任何错误。让我们看看如何在rinkeby 测试网络上部署我们的智能合约。在主区块链上部署合约需要花钱(以加密货币的形式),因此我们有测试网络来开发和测试我们的智能合约。在测试网络中,我们的钱包中添加了假以太币以促进交易。以太坊提供的一个这样的网络是 Rinkeby。
安装 MetaMask
MetaMask 提供浏览器支持以与区块链网络进行通信。我们可以添加一个帐户,将以太币添加到我们的帐户或将交易发送到另一个帐户。它就像一个钱包,我们可以在那里使用我们的加密货币。要安装元掩码,
- 转到https://metamask.io/
- 将其下载到您的浏览器。
第一次启动时,设置你的钱包 MetaMask 会给你一个 12 个词的种子短语。此短语是独一无二的,可用于在您忘记密码的情况下恢复您的帐户。
获取测试以太
在测试网络上部署合约需要一些测试以太币,这显然没有任何实际价值。在区块链中,每次与合约的交互都会花费一些费用(gas) ,这种交互被称为交易。由于在 rinkeby 上部署我们的合约也是一项交易,我们需要一些测试以太币来促进交易。为了获得测试以太,我们将使用水龙头。转到https://faucet.metamask.io/并执行要求获得一些免费测试以太币的简单任务。
创建 Infura 端点
我们需要一个 API,通过它我们可以访问 rinkeby 网络。 Infura 使访问测试/主网络并在其上部署我们的合约变得非常容易。在 rinkeby 网络上创建一个 infura 端点。
- 前往 infura.io 如果您没有帐户,请注册一个帐户。
- 单击左侧面板上的以太坊。
- 写下您的项目名称,然后单击以创建项目。
- 这应该为您的项目创建一个端点,它应该看起来有点类似于下面。
现在我们需要一个 npm 包HDWalletProvider ,它对我们的交易进行签名并减少部署过程的痛苦。
npm install @truffle/hdwallet-provider
配置 truffle-config.js 并部署到 Rinkeby
现在,我们在节点模块中拥有 truffle hdWallet-provider,来自 infura 帐户的端点,以及我们在 MetaMask 安装期间使用的种子短语。
让我们配置我们的truffle-config.js。打开 truffle-config.js 并在顶部导入 truffle hdWallet provider。
const HDWalletProvider = require('truffle-hdwallet-provider');
要配置网络,我们将编辑 truffle-config.js 的网络部分。这应该看起来有点像这样。
const HDWalletProvider = require('truffle-hdwallet-provider'); // Useful for deploying to a public network.
// NB: It's important to wrap the provider as a function.
// ropsten: {
// provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/YOUR-PROJECT-ID`),
// network_id: 3, // Ropsten's id
// gas: 5500000, // Ropsten has a lower block limit than mainnet
// confirmations: 2, // # of confs to wait between deployments. (default: 0)
// timeoutBlocks: 200, // # of blocks before a deployment times out (minimum/default: 50)
// skipDryRun: true // Skip dry run before migrations? (default: false for public nets )
// },
- 用 rinkeby 替换ropsten。
- 带有种子短语的助记符(从 MetaMask 获得)。
- https://ropsten.infura.io/v3/YOUR-PROJECT-ID 带有您为项目创建的 infura 端点。
- network_id:4,
完成这些更改后,您的部分应如下所示。
rinkeby: {
provider: () => new HDWalletProvider(`YOUR_SEED_PHRASE`, `https://rinkeby.infura.io/v3/b63bffeec2e545f2a3e9b3e9423d6180`),
network_id: 4, // Ropsten's id
gas: 5500000, // Ropsten has a lower block limit than mainnet
confirmations: 2, // # of confs to wait between deployments. (default: 0)
timeoutBlocks: 200, // # of blocks before a deployment times out (minimum/default: 50)
skipDryRun: true // Skip dry run before migrations? (default: false for public nets )
},
保存文件,然后打开 truffle 控制台,然后在 rinkeby 网络上迁移。
truffle migrate --network rinkeby
这一切都完成了。一旦您的合约部署在 rinkeby 上,您就可以在 etherscan 上查看交易详情。转到链接并复制并粘贴您部署的合约地址以获取有关您的交易的详细信息。
笔记:
- 要部署在主网络上,请获取主网络的 infura 端点,并配置配置文件。
- 用 main 替换 rinkeby,用 1 替换 network id。
- 然后truffle migrate –network main。