区块链(一)windows 以太坊私有链搭建并转账

环境win10,*64 

所有操作都在D:\work\geth里进行

以太坊客户端会在C:\Users\Administrator\AppData下生成ethash的文件夹用来存放运行时信息。etherum-wallet在C:\Users\Administrator\AppData\Roaming里生成临时文件夹etherum wallet,保存信息,初始化钱包需要删除

废话不多说了,趟过了很多坑,开始以太坊私有链搭建。

一.geth,mist 客户端下载

     1.这里我给大家介绍下,以太坊客户端,以太坊客户端主要分成两类。一个是后台命令行客户端,如:geth(go语言),parity(Rust语言),他们是一个与以太坊网络交互的命令行客户端。

其余的命令行客户还有 ethereumjs-lib(javascript),pyethapp(python),ruby-ethereum(ruby) ....主要 geth 使用的比较普遍,这里我就使用geth作为命令行客户端。

    2.mist 是属于可视化钱包,这么说吧,你在geth 客户端中生成的用户,以太坊币数量可以通过mist 钱包可视化展示。当然mist 不只有这些简单的功能,最重要的是能部署智能合约,发布,调用。其他还有很多轻钱包,如 lightWallet,metamask...

   下面是geth和mist下载地址,这里我使用的是windows系统安装。

https://pan.baidu.com/s/1SksXj4siKj2OgX2Dn4TF7A   密码:4sm6

Geth : 版本:1.8.12 (当时最新版)

Mist :0.11.1

安装完geth,可以打开命令行工具:


下载地址:

二.创建以太坊初始区块文件 genesis.json

{

  "config": {

    "chainId": 101,

    "homesteadBlock": 0,

    "eip155Block": 0,

    "eip158Block": 0

  },

  "alloc": {},

  "coinbase": "0x0000000000000000000000000000000000000000",

  "difficulty": "0x400",

  "extraData": "",

  "gasLimit": "0xffffffff",

  "nonce": "0x0000000000000042",

  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",

  "timestamp": "0x00"

}

chainId : 以太坊区块链网络Id,ethereum主链是1,私有链只用不要与主链冲突即可。此时设置的chainId可以和启动时指定的networdid不一致,以启动时的为主

alloc : 预留账户,一般留空,如下

  "alloc":{

   "0x0000000000000000000000000000000000000001":{"balance":"121312321"},

   "0x0000000000000000000000000000000000000002":{"balance":"121312321"},

  }

Coinbase: 矿工账户

Difficulty: 挖矿难度,0x400,这个是简单。

extraData:相当于备注

gasLimit:最小消耗gas

nonce : 64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊黄皮书中的要求

parentHash : 上一个区块的Hash值,因为是创世块,石头里蹦出来的,没有在它前面的,所以是0

Timestamp : 时间戳

三.初始化区块节点

geth --datadir data0 init genesis.json

data0 是当前文件夹存储节点数据,位于D:\work\geth\下,可以自动创建

出现如下内容就成功了

Successfully wrote genesis state        database=lightchaindatahash=84e71d…97246e

初始化成功后,会在数据目录{dataDir} (d:\work\geth\data0)中生成 geth 和 keystore (存储加密后的账户信息)两个文件夹.


三、启动私有链节点

geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --rpcport "8486" --port "30304" --networkid "29382" console

选择web3接口连接本地私链时,需要在启动私链时添加如下参数  --rpccorsdomain "*" ,不然链接不上。如下:

geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --rpccorsdomain "*" --rpcport "8486" --port "30304" --networkid "29382" console

使用命令 geth -h 可以查看geth 相关的帮助文档。这里我说几个常用的属性。

    --Identity : 节点身份标识,起个名字

    --datadir : 指定节点存在位置,“data0”

    --rpc : 启用http-rpc服务器

    --rpcapi : 基于http-rpc提供的api接口。eth,net,web3,db...

    --rpcaddr : http-rpc服务器接口地址:默认“127.0.0.1”

    --rpcport : http-rpc 端口(多节点时,不要重复)

    --port : 节点端口号(多节点时,不要重复)

    --networkid : 网络标识符 随便指定一个id(确保多节点是统一网络,保持一致)

    下图表示启动成功,进入geth命令行客户端:

注意:如果想将Ubuntu作为永久区块链节点使用,当使用nohup命令时,Geth启动参数console必须去掉,否则Geth会自动停止。

启动完成之后进入控制台,这是一个交互式的 JavaScript 执行环境,在这里面可以执行 JavaScript 代码,其中 > 是命令提示符。在这个环境里也内置了一些用来操作以太坊的 JavaScript 对象,可以直接使用这些对象。这些对象主要包括:

eth:包含一些跟操作区块链相关的方法;

net:包含一些查看p2p网络状态的方法;

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

miner:包含启动&停止挖矿的一些方法;

personal:主要包含一些管理账户的方法;

txpool:包含一些查看交易内存池的方法;

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

>eth.accounts

[]

>

创建账户1:

> personal.newAccount("123456")

"0x1078f82b17790664b3d931b91eb1f17ec109df09"

创建账户2:

> personal.newAccount("654321")

"0x1be3d41d02408d11e13eb5191520f3b2fa002dd1"

>

3、查看账户余额

> eth.getBalance(eth.accounts[0])


0

> eth.getBalance(eth.accounts[1])

0

>


查询余额有多种方式,可以通过创建时的16进制码,也可以通过账户下标查询,下标默认从0开始。

启动&停止挖矿

> miner.start(1)

其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。实际你看到的挖矿速度很快,这是因为我们已经在初始化创世区块时配置为:"nonce": "0x400"。 “0x400”难度能让你在私有测试网链上快速挖以太币。

提示

挖矿时必然有矿工账户,而系统默认使用创建的第一个账号。

停止挖矿

> miner.stop()

挖到一个区块会奖励n个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。只要是能产生区块,就有奖励,即使区块中没有任何有用信息。

交易

假如0账户向1账户转账,需要先把0账户锁定,然后才能进行交易

> personal.unlockAccount(eth.accounts[0])

Unlock account0x6594cc2f72908c0fea54d5c9dd297ce68f735411

Passphrase:

true

>


转账 账户0 –> 账户1

> amount = web3.toWei(5,'ether')"

5000000000000000000"

> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})

INFO [01-18|17:56:14] Submitted transaction                    fullhash=0x065c698cceaf996ab9ab06c6eddc8b035704defbcff0d65227d32c06a5b17637recipient=0x4BD9F7b3c365D35C50757AF4CC7Bdb1307A083C0"0x065c698cceaf996ab9ab06c6eddc8b035704defbcff0d65227d32c06a5b17637

>

此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。

> txpool.status

{

  pending: 1,

  queued: 0

}

查交易和区块

> eth.blockNumber

200

通过交易 Hash 查看交易(Hash 值包含在上面交易返回值中):

>eth.getTransaction("0x65a8278d571d7cf3f2ca36ce721900d61e9d6eadd1ed5f24f39b646c2b194427")

{

  blockHash: "0x0101b5f9e9c50ee45156f0631df18a97176aef5215bde40b3e167195d367ed80",

  blockNumber: 342,

  from: "0x16671cdabbc9b3f0f1b31380d972dcd9725f7d8a",

  gas: 90000,

  gasPrice: 18000000000,

  hash: "0x65a8278d571d7cf3f2ca36ce721900d61e9d6eadd1ed5f24f39b646c2b194427",

  input: "0x",

  nonce: 1,

  r: "0x52b7fce530ebd67527d4fe684cb3b5a4b96909154aeedcc5f371ab27e9e7f1ba",

  s: "0x141268e8fef639b79773f6ab7fb778b958be77bd05944f305dc4f1ec68f21962",

  to: "0x4bd9f7b3c365d35c50757af4cc7bdb1307a083c0",

  transactionIndex: 0,

  v: "0x823",

  value: 5000000000000000000

}

>

通过区块号查看区块:

> eth.getBlock(0)

{

  difficulty: 131072,

  extraData: "0x6d6f7475692d32",

  gasLimit: 4294967295,

  gasUsed: 0,

  hash: "0x5117726df3040cb5cbd6e8d59cdaacaaa1cd8df4a20072d0e8242e96ea5c893f",

  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",

  miner: "0x0000000000000000000000000000000000000000",

  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",

  nonce: "0x0000000000000042",

  number: 0,

  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",

  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",

  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",

  size: 515,

  stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",

  timestamp: 0,

  totalDifficulty: 131072,

  transactions: [],

  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",

  uncles: []

}

>


连接远程控制台

geth attach http://127.0.0.1:8486


==================================================

过创始块预分配账户余额

按照上面的步骤将第一节点启动后,创建一个账户,复制地址

编辑genesis.json,在alloc段,增加如下内容:

    "alloc": {

        "0x81e71d34e8a9e4382c36fd90c3f234549106addd": { "balance": "20000000000000000000" }

    }

这里的地址就是刚才创建的地址,后面的balance就是你想预分配的余额

然后将数据目录下的geth目录删掉,重新创建创始块(keystore目录不要动)

rm -rf /data/testchain/geth

然后再重新执行geth init创建创始块的命令,然后再启动geth,就可以在console中查看到账户被预分配的余额了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,192评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,186评论 1 303
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,844评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,471评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,876评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,891评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,068评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,791评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,539评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,772评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,250评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,577评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,244评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,146评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,949评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,995评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,812评论 2 276