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

继上次学习了一些基本的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


    以太坊部署智能合约简单示例_第1张图片
    develop.png

    以太坊部署智能合约简单示例_第2张图片
    compile.png
以太坊部署智能合约简单示例_第3张图片
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中获取助记词,链接到测试网络


  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测试网络,


    以太坊部署智能合约简单示例_第5张图片

    ContractCreation.png

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


以太坊部署智能合约简单示例_第6张图片

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

你可能感兴趣的:(以太坊部署智能合约简单示例)