美文网首页
以太坊部署智能合约简单示例

以太坊部署智能合约简单示例

作者: 歌白梨 | 来源:发表于2018-08-20 02:17 被阅读109次

    继上次学习了一些基本的IPFS操作命令之后,在IPFS网络创建应用已经变得可行。
    本文主要学习通过truffle来创建一个测试网络上的智能合约。

    truffle

    Dapp框架,可以让你快速进入写代码-编译-部署-测试-打包Dapp这个流程。而无须处理大量无光紧要的事情。

    实践

    主要分5个步骤:
    a.安装truffle
    b.初始化truffle工程
    c.创建智能合约
    d.部署智能合约
    e.将智能合约部署到测试网络

    a.安装truffle

    安装truffle:npm install -g truffle

    b. 创建项目框架:

    1. 输入truffle list来验证安装是否成功:truffle list
    2. 切换到你想要创建的目录,创建一个项目目录:truffle init
    3. 初始化npm:npm init.
    4. 导入zeppelin开发库: npm install zeppelin-solidity

    c. 创建合约:

    1. 在contracts目录下创建合约:contractName.sol
    pragma solidity ^0.4.16;
    
    import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
    
    contract contractName is StandardToken {
        address public owner;                     // 所有人
        string public name = "ContractName";      // 代币名称
        string public symbol = "CNT";           // 代币符号
        uint8 public decimals = 18;               // 代币精度
        uint256 public INITIAL_SUPPLY = 1000000000000000000000000000; // 总量10亿
    
        constructor() public {
            totalSupply_ = INITIAL_SUPPLY;
            balances[msg.sender] = INITIAL_SUPPLY;
            owner = msg.sender;
        }
    }
    
    1. 在migrations目录下添加migration文件:deploy_migration.js
    var ContractName = artifacts.require("./contractName.sol");
    
    module.exports = function (deployer) {
        deployer.deploy(ContractName);
    };
    

    d.部署智能合约

    1. 调试部署:truffle develop/compile/migrate


      develop.png
      compile.png
    migrate.png
    1. 验证合约是否已经部署:ERC20_A.deployed().then(instance => contract = instance)
    2. 部署成功,即可在之前的10个账户之间互相打币,也可以看到每个账户的余额。也就是可以开干了。而且还可以在develop模式下,调试所有的web3.js命令

    e.将智能合约部署到测试网络

    1. 接下来将合约部署到ropsten测试网络当中:

    2. 注册infura账号,通过infura来部署,创建项目,获取infura的API KEY;

    3. 下载metamask钱包插件,安装进chrome浏览器,注册账号,去水龙头网站获取ETH,在setting中获取助记词,链接到测试网络


      WX20180818-145540@2x.png
    4. 安装truffle-hdwallet-provider模块:npm install truffle-hdwallet-provider --save

    5. 修改ruffle.js文件,将代码写入文件

    var HDWalletProvider = require("truffle-hdwallet-provider");
    
    var infura_apikey = "api_key";
    var mnemonic = "metaMask助记词";
    
    module.exports = {
        networks: {
            development: {
                host: "127.0.0.1",
                port: 8545,
                network_id: "*", // Match any network id
                gas: 1828127,
                gasPrice: 10000000000,
            },
            opsten: {
                provider:function() {
                     return  new HDWalletProvider(mnemonic, "https://ropsten.infura.io/" + infura_apikey);
                    },
                    network_id: 3
            }
        }
    };
    
    1. truffle migrate --network ropsten,即可部署到ropsten测试网络,



      ContractCreation.png

    PS:
    1.migrate 出现出现找不到地址错误,可以先migrate --reset ,再migrate;
    2.truffle migrate --network ropsten时,出现 Error encountered, bailing. Network state unknown错误


    此时需要查看truffle.js文件下的Gas是否设置在GasLimit下,
    Gas for View:
    https://user-images.githubusercontent.com/29991644/37694874-06c21628-2ca1-11e8-9c5f-1f43c60c0371.png

    相关文章

      网友评论

          本文标题:以太坊部署智能合约简单示例

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