solidity系列教程<十七>Truffle框架部署智能合约到

2019-04-18  本文已影响0人  addin_gao

1、注册infura获取API-KEY

网址: https://infura.io/

我们为什么要使用infura?

我们使用truffle部署只能部署到我们本地运行的网络,不管是测试网络,还是你运行ETH主网,都需要部署到本地运行的节点上。因为Infura是一个托管的以太坊节点集群,可以将你开发的以太坊智能合约部署到infura提供的节点上,而无需搭建自己的以太坊节点。可能你还不了解Infura,但如果你使用过MetaMask,那么就已经接触过Infura了,因为它是MetaMask背后的以太坊供应商。

注册登陆后步骤如下:


infura1.png

我们新建一个项目,起名为TEST,然后会自动生成API key和秘钥,以及网络地址,这些在truffle.js 里需要配置的。


infura2.png

在这个例子中,我们将迁移到Ropsten测试网络,所以我们要把ENDPOINT 选项中选择ROPSTEN网络。

2、truffle 部分

新建文件加truffle,然后cd 到这个文件夹内,在命令行窗口输入命令truffle init初始化项目,就能看到turffle文件夹内出现了一些文件和文件夹,详情请看教程十六,上有截图

我们还是通过那个简单的HelloWorld合约,来熟悉Truffle框架的合约网络部署

1、在contracts文件夹内新建一个HelloWrold.sol合约,合约内容如下

pragma solidity ^0.4.24;
contract HelloWorld{    
    uint i = 8;   
    function getI ()public view returns(uint){      
       return i;   
    }    
    function addI (uint s)public view returns(uint){    
       return (i+s);   
    }
}

2、编辑你的truffle.js文件来启用HDWalletProvider并为部署到Ropsten进行必要的配置,我们需要下载HDWalletProvider 插件
在控制台中使用命令npm install truffle-hdwallet-provider 下载完成后truffle文件夹内会出现一个 node_modules 文件夹,里面就是我们下载的插件

3、修改tuffle.js文件,这里我们就要用到infura 注册后创建新项目得到的那些。

var HDWalletProvider = require("truffle-hdwallet-provider");

// infura 注册后获取的api-key
// var infura_apikey = "306de3600a284848a8d211bda70b9d5b";

// 接下来,提供助记词(mnemonic)来生成你的账户。 進入 MetaMask -> Settings -> reveal seed words 复制到这里
//警告 :在此过程中,我们强烈建议将助记符存储在另一个(秘密)文件中,以降低助记符泄漏风险。 如果有人知道你的助记符,他们将拥有你所有的地址和私钥!我这个地址是测试地址,没有主网的ETH代币,所以无所谓!

var mnemonic = "section achieve bright crowd garage similar couple plate check fury okay utility";

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    },
    private: {
      host: "localhost",
      port: 8545,
      network_id: "*" // Match any network id
    },
    ropsten: {
      provider: new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/306de3600a284848a8d211bda70b9d5b"),
      network_id: 3,
      gas: 3012388,
      gasPrice: 30000000000
    },
    main: {
      provider: new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/306de3600a284848a8d211bda70b9d5b"),
      network_id: 3,
      gas: 3012388,
      gasPrice: 1000000000
    }
  }
};

4、开始编译我们写的合约 通过命令 truffle compile 编译合约,编译完成后生成一个build文件夹,编译好的文件在这个文件夹里

编译.png

5、在migrations 文件夹内新建一个文件2_initial_helloworl.js ,内容如下

var HelloWorld = artifacts.require("./HelloWorld.sol");
module.exports = function(deployer) {
  deployer.deploy(HelloWorld);
};

目前我们的目录结构如下


目录结构.png

6、迁徙合约到Ropsten网络 truffle migrate --network ropsten,若显示 Network up to date. 则需要用truffle migrate --reset --network ropsten命令

合约部署.png

我们可以将上面的txHash :0xb600ae8ffb76cc2dee81db89d54027c697c94310bc1c383a29a1af13a4acf6c1 放到Ropsten查看。
https://ropsten.etherscan.io/tx/0xb600ae8ffb76cc2dee81db89d54027c697c94310bc1c383a29a1af13a4acf6c1
可以看到,我们浏览器中的合约地址和命令行中的地址是一样的

txHash.png
现在我们就将我们的合约通过truffle 部署到以太坊的Ropsten测试网络上了。而我们在本地并没有运行Ropsten的节点,同时可以看到我们的部署合约的账户上的Ropsten代币也相应的有减少。。。
上一篇下一篇

猜你喜欢

热点阅读