zoukankan      html  css  js  c++  java
  • 以太坊私链建立和geth的使用

    环境部署

    1.  brewMacOs包管理器   

    下载 brewMacOs包管理器    

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    

     2.go语言安装

    brew install go

    3 . geth 运行以太坊节点 

    http://blog.csdn.net/ethchinese/article/details/62220817

    4 安装Solidity语言包

    brew install solidity 时间长 多等等

    二 

    创建文件夹来存储以太坊私链数据

    ifconfig 命令 查看自己的ip 

    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384

    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>

    inet 127.0.0.1 netmask 0xff000000  // 127.0.0.1 为你电脑的ip 

    geth --networkid 123 --dev --datadir data1 --rpc --rpcaddr 127.0.0.1  --rpcport 8989 --port 3000 //  127.0.0.1  替换你电脑的ip   加载

    在创建好自己的文件夹中打开新的终端。  

    geth attach ipc:geth.ipc 打开控制台。 这是一个交互式的JavaScript执行环境,在这里面可以执行js代码。 环境里面内置了一下用来操作以太坊的js对象。可以直接使用这些对象。

    eth : 包含一些跟区块链相关的方法。

    net: 包含一些p2p网络状态的方法。

    admin: 包含一些与管理节点相关的方法。

    miner:包含启动和停止挖矿的方法。 新的版本没有交易不能挖矿。

    personal : 包含管理账号的方法。

    txpool:查看交易内存池的方法。

    web3 :包含以上对象,还包括一些单位换算的方法。

    练习命令。 

     1.personal.listAccounts 查看当前帐户。

      0x2e4a38eac1233ecd283c55d2250fe88ba86235ac

    2.personal.newAccount("123456");为创建新账户并设置密码。

      0x925e1ec575ff586b3e70743b077a5a801cbabd28

    3. web3.eth.coinbase  获取账户的第0个帐号。 相当于personal.listAccounts[0]

    4.第0个账户没有密码。 创建第2个帐号。 如果有密码的帐号向别人转账先需要解锁帐号。

       personal.unlockAccount(personal.listAccounts[1]) 

       然后输入密码 返回true 表示解锁成功。

     5. eth.getBalance("0x2e4a38eac1233ecd283c55d2250fe88ba86235ac") 查看我账户的余额  默认的帐号是有余额的 新创建的帐号没有余额。

    6. miner.start(); 开始挖矿 miner.stop();停止挖矿。 新版本 这两个命令实效。 没有交易没办法挖矿。。。 有交易自动挖矿。

    7. web3.toWei
      把以太坊单位(包含代币单位)转为 wei.  ether表示(以太币)

    8. amount =web3.toWei(5,'ether');

    9.  web3.fromWei(web3.eth.getBalance(personal.listAccounts[2]),"ether") 查看第二个账户有多少个以太币。

    10. eth.sendTransaction({from:personal.listAccounts[0],to:personal.listAccounts[1],value:amount}) 从第0个帐户转给第一个帐号

     value:amount. amount 表示多少位。

    11.   txpool.status

    {

      pending: 0,  等于0 表示没有待交易的内容。 等于1 表示有待交易的内容 需要挖矿 miner.start();

      queued: 0

    }

     eth.getTransaction("0xc7364cfea18836df90cf99cccbd4d11e4b93d6b376190c2403a2376069dfaea5") 

    0xc7364cfea18836df90cf99cccbd4d11e4b93d6b376190c2403a2376069dfaea5  这个是交易的哈希值。

     eth.getTransaction可以查询到交易详情

     例如

     

    1 1.eth.getBlock("pending",true); 查看 pending 的详细数据。

    12  eth.blockNumber  查看交易区块 eth.getBlock(2); 通过区块号查询数据。

    创建简单合约。 


    pragma solidity ^0.4.18;

    contract test {
    function multiply( uint a) public pure returns (uint d) {

    return a*7;
    }

    }

    需要将写好的合约代码放到remix.ethereum上 获得质检码data 和abi

    如果格式不对 ,需要将data 和 abi 放到bejson 上格式化。

    将 adta 和abi 保存

    例如:

     var bin ="0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820502084cafe4255cb2852fbd5e681cde601e64848e08ca2978f2a69aff6ed6ba30029"

     var abi = [{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}]

    在保证帐号 有足够以太币的情况下 用密码授权。

    检测智能合约 需要多少手续费。 web3.eth.estimateGas({data:bin})

     eth.sendTransaction({from:personal.listAccounts[1],data:bin,gas:1000000}); // 有eth.sendTransaction 提交易才会自动挖矿!

    miner.setEtherbase(eth.coinbase) // 设置矿工地址

    contract.address  // 挖矿奖励: 查看矿工地址

     eth.getCode(contract.address) // 获取交易质检码 data

     txpool.status

    {

      pending: 0,

      queued: 0

    }

     contract.multiply.(6); // 调用合约中的方法 获得正确的值。

    42

  • 相关阅读:
    Android 5.0以上手机出现找不到so文件
    面向对象:析构方法-__del__
    面向对象:类中的反射及其应用
    面向对象:内置方法call、len、new、str
    面向对象-内置函数isinstance()和issubclass()
    面向对象:类方法(classmethod),静态方法(staticmethod)
    面向对象:属性-装饰器函数@property
    面向对象的三大特性: 封装
    面向对象:接口类、抽象类
    面向对象的三大特性: 多态
  • 原文地址:https://www.cnblogs.com/panfeng1104/p/8527071.html
Copyright © 2011-2022 走看看