[笔记]Mac上搭建区块链属于自己的私有链全过程

导言:

现在的区块链可以分为三类:
公有区块链:公有链是指全世界任何人都可读取、发送交易且交易能获得有效确认的、也可以参与其中共识过程的区块链。公有链一般被认为是“完全去中心化的”。最典型的例子就是比特币。

公有链的特点:

1)保护用户免受开发者的影响。在公有链中程序开发者无权干涉用户,所以区块链可以保护使用他们开发的程序的用户。

2)访问门槛低。任何拥有足够技术能力的人都可以访问,也就是说,只要有一台能够联网的计算机就能够满足访问的条件。

3)所有数据默认公开。尽管所有关联的参与者都隐藏自己的真实身份,这种现象十分的普遍。他们通过他们的公共性来产生自己的安全性,在这里每个参与者可以看到所有的账户余额和其所有的交易活动。[1]

联盟链:只针对某个特定群体的成员和有限的第三方,其内部指定多个预选节点为记账人,每个块的生成由所有的预选节点共同决定。

联盟区块链是指其共识过程受到预选节点控制的区块链;例如,不妨想象一个有15个金融机构组成的共同体,每个机构都运行着一个节点,而且为了使每个区块生效需要获得其中10个机构的确认(2/3确认)。区块链或许允许每个人都可读取,或者只受限于参与者,或走混合型路线,例如区块的根哈希及其API(应用程序接口)对外公开,API可允许外界用来作有限次数的查询和获取区块链状态的信息。这些区块链可视为“部分去中心化”。[2]

私有链:与公有链完全去中心化不同,私有链的进入权限由某个组织进行控制,各个节点参与资格由该组织授权控制。由于参与的各个节点是有限且可控的,私有链往往拥有很快的处理速度,能支持每秒1000以上的数据写入,同时降低内部各个节点的交易成本。节点可以实名参与,因此具有确认身份的金融属性。私有链的价值主要是提供安全、可追溯、不可篡改、自动执行的运算平台,可以同时防范来自内部和外部对数据的安全攻击或篡改,这在传统的系统中是很难做到的。

私有链的应用场景一般在企业内部,如分公司的库存管理,各地数据的汇总统计等,也可以用在政府的预算和执行等可以被公众监督的领域。大型金融集团目前也倾向于使用私有链技术。【3】

今天要介绍的就是搭建私有链

一.环境搭建

1.1安装go语言

brew install go

1.2安装Geth

brew tap ethereum/ethereum 
brew install ethereum

1.3检查是否安装成功

geth --help

如果出现帮助界面则安装成功了。如下图所示
图1.1
到这一步时我们环境配置工作算是正式完成。

二.搭建私有网络

2.1创建创世块
Geth需要使用genesis.json文件生成创世区块,同时需要提供保存区块数据和账户私钥(keystore)的目录。

mkdir myeth
cd myeth
vim genesis.json

这时我们进入了命令模式如下图所示在这里插入图片描述
我们进入编辑模式,把创世块参数代码设置输入后,按esc再输入:wq!保存退出命令模式.还有一种更方便一点的方法连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell

{
  "config": {
        "chainId": 10, 
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x2000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

返回到shell模式后。
各参数的含义如下:
chainId: 指定了独立的区块链网络ID。网络ID在连接到其他节点的时候会用到,以太坊公网的网络ID是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络ID。不同ID网络的节点无法相互连接。
HomesteadBlock: 当设置为0表示使用Homestead发布该链。

在这里插入图片描述
2.1网络初始化

geth init "/Users/jianghuiwen/myeth/genesis.json" --datadir "/Users/jianghuiwen/myeth/chaindata"

【注:】双引号里面更换成自己的文件位置
如果出现下图则说明初始化成功了,运行成功后会在当前目录创建geth和keystore两个文件夹在这里插入图片描述
在这里插入图片描述
geth目录:保存链上的区块数据
keystore目录:保存链上的用户信息
2.2启动私有链

    geth --identity "TestNode" --rpc --rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --rpcport "8545" --dev --dev.period 1 --datadir data  --port "30303" --nodiscover --allow-insecure-unlock console

在这里插入图片描述
出现下图后说明我们已经成功启动了
在这里插入图片描述
enode的信息是节点在网络上的身份标志。如果其他节点准备加入这个网络中,就需要提供自己的enode值。
  RPC访问可以通过http://127.0.0.1:8545或http://localhost:8545,IPC访问可以通过**.\pipe\geth.ipc**命令。

命令是以服务的形式持续运行的,需要再打开一个命令行窗口,输入
【特别注意】–allow-insecure-unlock这一行一定要加 不然后面进行解锁账户会出现
GoError: Error: account unlock with HTTP access is forbidden at web3.js:6347:37(47)报错。解锁账户涉及到后面进行转账!

Geth attach rpc:http://127.0.0.1:8545

这里我们可以设置账户等操作
常用命令:

1. personal.newAccount():创建账户;
2. personal.unlockAccount():解锁账户;
3. eth.accounts:枚举系统中的账户;
4. eth.getBalance():查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1
ether = 10^18 Wei);
5. eth.blockNumber:列出区块总数;
6. eth.getTransaction():获取交易;
7. eth.getBlock():获取区块;
8. miner.start():开始挖矿;
9. miner.stop():停止挖矿;
10. web3.fromWei():Wei 换算成以太币; web3.toWei():以太币换算成 Wei;
11. txpool.status:交易池中的状态;
12. admin.addPeer():连接到其他节点

最后我们启动miner.start()启动挖矿
括号内的内容可以填,比如填8则代表线程数是8。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
3.1转账操作

amount=web3.toWei(5,'ether')
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
查询是否转成功了
number=eth.getBalance(eth.accounts[1])
web3.fromWei(number,'ether')

代码如图:
在这里插入图片描述

需要注意进行转账或者是后面讲的运行一些合约都必须要进行挖矿,比特币也是由于挖矿而变得更加安全
3.2 在自己私有连上部署合约
有两种方法
1.我们可以在本地IDE上选择私有链方式

  1. 启动本地IDE:

Remix-Ide

2 启动后我们打开一个智能合约
编译后,部署的时候我们可以选择编译环境。
Remix在线IDE给了我们3个选择
一个是JaveScript VM也就是虚拟机
一个是Injected web3需要用到钱包插件
还有一个是Web3 Provide也就是我们今天用到的私有链。
在这里插入图片描述
因为我们部署的时候私有链地址是http://localhost:8545点击确定后即可
在这里插入图片描述
我们已经有了3个账户,可以看到账户余额
在这里插入图片描述
其他部署和在虚拟机上一样,这里就不再赘述。
2.也可以利用控制台使用web3进行交互
在这里插入图片描述
在这里插入图片描述
在终端上部署
在这里插入图片描述
在这里插入图片描述

参考资料:
【1】https://www.jianshu.com/p/068b52f17c90
【2】https://www.jianshu.com/p/79db9a35eba0
【3】https://www.jianshu.com/p/10c267d0beb6

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值