美文网首页
solidity系列教程<十七>Truffle框架部署智能合约到

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

作者: addin_gao | 来源:发表于2019-04-18 11:02 被阅读0次

    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代币也相应的有减少。。。

    相关文章

      网友评论

          本文标题:solidity系列教程<十七>Truffle框架部署智能合约到

          本文链接:https://www.haomeiwen.com/subject/atqziftx.html