zoukankan      html  css  js  c++  java
  • Windows平台下以太坊私有链搭建及钱包部署和运行

    【安装环境准备】

    一、安装Ethereum-Wallet

    (1)在E盘新建文件夹Eth,专门放置以太坊开发环境

    (2)把下载的Ethereum-Wallet-win64-0-11-1.zip压缩包win-unpacked解压到C:Eth目录下

    二、安装geth

    (1)geth下载:https://ethereum.github.io/go-ethereum/downloads/

    (2)安装geth,安装在C:Eth 目录下

     

    (3)在C:Eth目录下创建privatechain文件,用以存放区块链数据。

     接下来就可以看到Eth文件夹下的我们放的所有东西

    【以太坊私有链搭建】

    一、创建第一个节点

    1)在E:Eth 目录下创建创世块文件genesis.json,文件内容如下:

    {
      "nonce": "0x0000000000000042",
      "difficulty": "0x40000",
      "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "coinbase": "0x0000000000000000000000000000000000000000",
      "timestamp": "0x00",
      "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
      "gasLimit": "0xffffffff",
      "alloc": {
        "3282791d6fd713f1e94f4bfd565eaa78b3a0599d": {
          "balance": "1337000000000000000000"
        },
        "17961d633bcf20a7b029a7d94b7df4da2ec5427f": {
          "balance": "229427000000000000000"
        }
      },
      "config": {
            "chainId": 15,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        }
    }

    (2)打开cmd,进入C:Eth 目录下(该目录下有geth.exe和genesis.json文件,便于运行geth命令),创世块文件初始化命令如下:

    geth -datadir "%cd%privatechain
    ode1" init genesis.json

    执行该命令后会在C:Ethprivatechain下自动新建node1文件夹,并在node1下生成geth和keystore两个文件夹。其中geth存放的是区块信息,keystore中存放的是账户信息。

    初始化完成以后你就拥有一条自己的私有链了,之后就可以启动自己的私有链进行一些操作。

    (3)打开geth控制台:

    geth -datadir "%cd%chain" console

    (4)创建新账户,密码为liuxixi1,用以下代码来启动私有链的挖矿:

    personal.newAccount('liuxixi1')

    此时会返回一个账户地址

     (5) 输入exit,退出控制台

     (6)重新启动私有链节点

    geth --targetgaslimit 4294967295 --rpc --rpcport "8101" --port "30301" --rpcapi "eth,web3,personal" --networkid 2020 --identity 2020 --nodiscover --maxpeers 5 --datadir "%cd%privatechain
    ode1" --unlock 0 --rpccorsdomain "*" console
    注释:

    --targetgaslimit:每个块的gas上限,这里可以暂时理解为容量

    --rpc:启动rpc通信,可以进行智能合约的部署和调试

    --rpcaddr:rpc接口的地址

    --rpcport:rpc接口的端口号

    --port:网络监听端口,用于节点之间通信

    --rpcapi:设置rpc的范围,暂时开启eth,web3,personal足够

    --networkid:设置当前区块链的网络ID,是一个数字,可以随便写

    --identity:区块链的标示,随便填写,用于标示目前网络的名字

    --nodiscover:禁止被网络中其它节点发现,需要手动添加该节点到网络

    --maxpeers:最大节点数量

    --datadir:设置当前区块链网络数据存放的位置

    --unlock:解锁某用户(此处用用户坐标来控制,解锁后的用户调用接口发起交易时,不要需要提供密码),0代表存储在账号数组中的第一个账号,如果一开始没有创建账号,改参数可以去掉,不然会报错,找不到该账号。

    --rpccorsdomain:限制rpc访问源的ip,代表不限制

    --mine:允许挖矿

    --console:启动命令行模式,可以在Geth中执行命令*

    192.xx.xx:要改为自己的IP

      

      该命令的主体是geth consoal,表示启动该节点并进入交互控制台。其中--networkid 2020 表示私有链的网络id。网络id在连接到其他接点时也会用到。以太坊公网的id是1,为了不产生冲突,这里要指定自己的网络id。

     然后输入刚建的账户密码:liuxixi1

     (7)进入C:Ethwin-unpacked ,运行Ethereum Wallet.exe ,若果出现版本更新窗口,不用理它,关掉就行了

    点击启动

     

     可以看到上面都显示的0,因为还没有开始挖矿,是没有以太币的。

    创建两个账号

      点击”ADD ACCOUNT” 按钮,添加一个钱包,程序会弹出一个对话框,提示输入两遍密码,输入完密码后,账号即创建成功。创建其他的账号,一样的操作,从上面的截图可以看到,有三个账号,一个是MAIN ACCOUNT,一个是ACCOUNT2,一个是ACCOUNT3

     

     

    挖矿获取一些以太币

    账号创建后,还没有以太币,需要在私有链上挖矿,切换到Geth界面,输入

    miner.start(1)

    miner命令括号中的1表示用一个线程进行挖矿,如果不配置,就会让CPU全速运行,影响计算机的使用。

     

    运行一会后,主账号就会获取很多以太币,这个时候屏幕会快速刷屏,不用管,输入命令miner.stop()停止挖矿。

     这里就可以看Aain account已经有余额了

    将一个用户的以太币转给另一个用户

    先点击ACCOUNT2账号,进入账号详情的界面,点击右侧的“COPY address”,把ACCOUNT2的地址拷贝下来,系统会提示你现在你处在一个测试网络,不要转入真正的以太币到这个账号。

     Account 2地址:0xd4B8b428aA6D0135Ae0E70AF6805004acace9114

    点击钱包中“SEND”按钮,从MAINACCOUNT给ACCOUNT2转入一定以太币,同时可以看到执行这笔交易的费用是0.000378个以太币。

     

     点击发送后会提示如输入密码,但这时还没有发送成功,根据区块链的交易规则,需要矿工的确认,并且每笔交易需要确认12个块,一个块是16秒的生成时间。切换到Geth程序,输入挖矿命令,直到ACCOUNT2上显示100个以太币,然后停止挖矿。

     如下图看到账户2还未有以太币

    输入挖矿命令进行挖矿

     由上图看到账户2已经有以太币了 说明转账成功!然后停止挖矿

    部署智能合约

     点“CONTRACTS”,进入智能合约管理界面,点击“DEPOLY NEW CONTRACT”,开始部署智能合约,

     选择部署智能合约的账号,并输入智能合约的代码后,如下图

    pragma solidity ^0.4.18;
    contract SimpleStorage {
    uint storedData;
    function set(uint x)public {
    storedData= x;
     }
    function get() public constant returns (uint) {
    return storedData;
    }
    }

     

    输入完毕后点击“DEPLOY”,系统会提示输入账号密码,因为部署智能合约是需要费用的。

     这个时候是看不到部署的智能合约的,切换到Geth界面,进行挖矿,在12个块后,智能合约就能确认并显示出来。

    运行智能合约

    点击DEPLOY NEW CONTRACT,部署合约

    选择智能合约发起账户,这里选择Main account, 合约以太币数量填0,其他智能合约的运行也是一样,无非就是函数多点,输入多点。

    复制solidity语言编写的智能合约代码,选择需要部署的智能合约。

    pragma solidity ^0.4.18;
    contract MyToken{
        /*在合约中使用public关键字定义所有能被别的合约访问的变量*/
        string public name;
        string public symbol;
        uint8 public decimals;

        /*建立一个数组存储账户的余额*/
        mapping (address => uint256) public balanceOf;

        /*建立一个公共的事件用于用户通知*/
        event Transfer(address indexed from, address indexed to, uint256 value);

        /*初始化合约,当合约内的函数名和合约名相同时(MyToken),则该函数是合约的构造函数*/
        function MyToken(uint256 _supply, string _name, string _symbol, uint8 _decimals) public 
        {
            /*默认将股份分为10000份,即股权的最小单位是0.01%*/
            if (_supply == 0) _supply = 1000000;

            /*可自定义股权数量和最小单位*/
            balanceOf[msg.sender] = _supply;

            /*定义股权名称*/
            name = _name;

            /*设定股权所使用的单位符号,例如%*/
            symbol = _symbol;

            /*设定小数位数*/
            decimals = _decimals;
        }

        /*创建股权转移函数*/
        function transfer(address _to, uint256 _value) public {
            /*检验是否有足够的股权*/
            if (balanceOf[msg.sender] < _value) require(balanceOf[msg.sender] > _value);
            if (balanceOf[_to] + _value < balanceOf[_to]) require(balanceOf[_to] + _value > balanceOf[_to]);

            /*更新股权转让信息*/
            balanceOf[msg.sender] -= _value;
            balanceOf[_to] += _value;

            /*通知用户股权转让成功,并将数据写入区块链*/
            Transfer(msg.sender, _to, _value);
        }

     

     

     输入账户密码确认,然后部署

    当智能合约得到区块确认,说明智能合约被保存到区块中,部署智能合约成功

    调用智能合约

    回到主页面,点击CONTRACTS,

    点击进入智能合约,点击进入刚才部署的智能合约 

    智能合约页面的函数以及函数参数,以及执行

    main account地址:0x7A280bEf63e47a18c129E4676929E92Dc06897CA

    ACCOUNT2地址:0xd4B8b428aA6D0135Ae0E70AF6805004acace9114

     点击EXECUTE执行,发送交易输入密码进行确认

    挖矿后,Main account的股权占比变为90%,ACCOUNT2的股权占比变为10%

     

  • 相关阅读:
    ASP.NET MVC 音乐商店 目录
    ASP.NET MVC 音乐商店 9. 注册和结账
    SQL查询入门(下篇)
    【译】Asp.net MVC并不仅仅只是Linq to SQL
    SQL查询入门(中篇)
    【译】利用.LESS来提高CSS
    Silverlight 入门学习笔记(1)Silverlight是什么
    【译】详解Asp.net MVC DropDownLists
    Asp.net缓存简介
    SQL查询入门(上篇)
  • 原文地址:https://www.cnblogs.com/xixi3/p/12604405.html
Copyright © 2011-2022 走看看