用有趣的方式
链接未来新趋势

系统的学习区块链

ailin阅读(131)

学习区块链

前言(很重要)

基础篇

1.什么是区块链? 

2.区块链用到了哪些技术原理 

3.详解钱包、代币、“双花”问题和工作量证明

4.详解交易原理和找零机制

5.相关名词解释

技术进阶

1.有哪些共识机制?

2.开发平台的选择

3.比特币区块链的开发

4.以太坊区块链的开发

5.小蚁区块链的开发

 

高级开发

1.密码学

2.分布式系统

3.系统架构

4.编程语言

前言/*很重要*/

ailin阅读(52)

 

我建议小白用“树状学习法”来学习区块链,即先心中大概知道其重点,对区块链整体有一个概念,然后再细化学习分支,从而系统的学习区块链。最好的状态是学习完之后,能给别人以树状结构将区块链讲出来。

真想学习区块链技术,必须要有两样东西,一是对区块链的兴趣,兴趣可能来自对其前景的看好或者对其原理的喜爱,一时兴趣就算了罢。二是时间,你要准备好用足够的时间积累来学习,甚至很长一段时间都在嚼着难懂的概念读着没有趣味的书。

说有几天或者半个月就学会了的,不否认,但那是名师教导而且目的就是让你略懂皮毛,能做出一些简单基础的东西就够了,这样的学习确实对一些业余爱好者或者某些行业用处很大,如果你想学这样的,可以去报名此类课程,找不到可以联系我,我帮你留意。

我认为区块链技术固然好,但并不是每个人都要去吃透它,现在应用互联网的行业越来越多,却大多数使用者不懂互联网的原理,知道他是做什么的就够了。所以,如果你觉得自己没有时间去学习的话,不用苦恼,看看区块链的基本概念,然后做你的工作就好,要相信有一天区块链会应用到你们行业的,当区块链的浪潮真的到来时,每个人能做好本职对其生态发展就是一件大事了。所以根据需求不同我大致分了三类学习者:一是对开发兴趣不大,了解概念即可;

二是基于已有平台进行开发应用,按现在的趋势来说就是智能合约的开发,需要掌握一门智能合约语言,能熟悉一个平台的操作;

三是区块链核心应用和核心平台的开发,这一类需要学习的东西最多,基础的编程语言有一门熟练的就可以,但对区块链各技术原理都要懂,尤其是密码学,它基本决定了一个区块链技术人员开发的天花板。

要根据自己需求进行不同目标的学习。

方式:

以下列出一些学习的方式,收费和免费都有,可以选择一种或几种进行学习。

图书

1.《精通比特币》原版名《Mastering Bitcoin》,了解比特币的最佳之选。

2.《区块链——从数字货币到信用社会》 了解区块链概念的不错的一本书,多位行业大咖倾力合作而成。

3.《深入浅出以太坊》  对以太坊研究较深的汪晓明所做,可以系统了解和学习以太坊。

4.《区块链开发者指南(待出版)》 期待已久,由申屠青春和汪晓明两位行业大牛主编,可以盯着,出版买一本学习学习。

当然还有一些好书,暂先推荐这几本。

视频

1.火币网李林的区块链是什么

2.比特币原理概要–非技术版

3.比特币底层原理

4.以太坊技术视频系列(汪晓明)

5.小蚁的价值体现在哪里

学院

技术出身的可以去小蚁开发学院

还有老蘑菇独撑的朵朵学院,在淘宝可以买到系列教程。

还有一种方式就是直接付费找人教,这个的话希望大家能找一些圈里出名的人,小心被骗。

最后是我整理的网络教程:http://ailin.ml/archives/34

如有侵权等问题请联系我  微信:951830238

 

以太坊项目介绍和常用网址

ailin阅读(39)

原文链接:http://m.blog.csdn.net/article/details?id=52351415

一、 以太坊和区块链的关系

从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取了技术架构和体系,称之为区块链技术。从比特币提取的区块链技术称之为区块链1.0时代,那个时候的应用主要以电子货币和去中心化交易为主,比如各种山寨币。而以太坊将区块链带入了2.0的时代,区块链2.0不是推翻了1.0,而是在1.0的基础上实现了区块知晓、价值知晓、图灵完备,并进行了细节优化,从而形成了以智能合约为特色的区块链2.0。比特币定位于一个应用,而以太坊定位于平台,你可以在这个平台上利用智能合约做各种应用。

 

所以,学习区块链,直接学习以太坊就好了

 

二、 以太坊入门的方法

对于没有接触过区块链的人,建议先参会以太坊的日常应用。

 

1、 使用客户端

 

这里的教程很多,推荐一个以太坊钱包教程

 

2、 挖矿

 

挖矿的教程很多,一般分布在各个矿池,这里推荐一个国内矿池的教程,并且可以加入各个矿池的群去交流一下。国内的矿池有www.f2pool.com,www.bw.com 等几大矿池。

 

http://pan.baidu.com/s/1c27DOCo

 

3、 浏览公有链的区块信息

 

在经历以上事情后,可以通过区块链浏览器去查看自己的账户和交易,更直观感受。

 

通过以上的操作,基本可以算对区块链有了一个初步的了解和感知。

 

三、 以太坊各个项目说明

以太坊发布以后,有 多个客户端,同时也支持多个平台,初学者往往被各种各样的客户端弄迷糊,本文进行了详细的总结。

 

以太坊客户端以语言进行分类,在github上分成了不同项目,源代码地址:https://github.com/ethereum/,虽然以太坊客户端众多,但是有两个共同特点:

 

1、同一语言的客户端在不同平台上的使用是完全相同的

 

2、不同语言的客户端(mist、geth、eth等等)之间在同一个平台(linux、windows或OSX)上共用一样的应用配置,同时其命令行可使用的参数也是一致。

 

下面就以github上的项目为分类说明各个客户端的用途和特点:

 

(一)go-ethereum项目

 

开发语言:go语言

 

客户端文件:Geth

 

界面:命令行

 

适用平台:windows、linux和OSX

 

功能和特点:该项目是使用最广泛的以太坊客户端,大部分节点都是运行的该客户端,教程和例子也最多,推荐使用,可用于挖矿,组建私有链,管理账号,部署智能合约等常用功能,不可以编译智能合约。

 

(二)webthree-umbrella项目

 

此项目包含3个客户端

 

开发语言:c++

 

客户端文件:AlethZero、Mix和Eth

 

使用平台:windows、linux和OSX

 

界面:图形化界面

 

功能和特点:该项目严格来说是cpp-ethereum 项目的一个shell,是以太坊基金会的前CTO,Gavin Wood主持编写的,所以人气也很高,易用性也很好。AlethZero是图形化的钱包客户端,对应的是Geth的功能,不过是全图形化的。但是随着后续以太坊基金会主推的图形化钱包Mist的推出,渐渐没落。Mix 是智能合约(以太坊称为DAPP)的开发IDE,可以支持智能合约(DAPP)的编写、调试,部署,全图形化界面,但是目前已经停止开发了,开发组转向了Remix。Eth是C++编写的命令行客户端功能和Geth一样。

 

(三)Mist项目

 

开发语言:JavaScript

 

客户端文件:Mist(目前使用Ethereum-Wallet的名称)

 

使用平台:windows、linux和OSX

 

界面:图形化界面

 

功能和特点:该项目是以太坊基金会主推的项目,Mist定位不只是一个钱包,而是将来DAPP(智能合约的应用APP)市场,类似于苹果市场,在这里可以有你的账号,可以浏览、发布和买卖以太坊的DAPP应用。目前因为开发还不够全面,名称暂时显示为Ethereum-Wallet,作用也很简单,就是一个钱包的功能。强烈推荐,未来的主流客户端。

 

(四)solidity项目

 

开发语言:C++

 

客户端文件:solc

 

使用平台:windows、linux和OSX

 

界面:命令行界面

 

功能和特点:该项目是以太坊智能合约(DAPP)的编程语言,使用solc作为编译程序,该项目主要用于编译,严格来说是一个基本的编译平台,一般开发可用MIX替代。

 

(五)browser-solidity项目

 

开发语言:C++

 

客户端文件:浏览器中显示

 

使用平台:windows、linux和OSX

 

界面:浏览器界面

 

功能和特点:该项目是智能合约浏览器版本的开发环境,可以支持在浏览器中直接开发、调试和编译,对于初学者来说,可以快速上手,不需要安装,非常方便,直接访问地址使用:https://ethereum.github.io/browser-solidity/

 

(六)pyethereum项目和ethereumj项目

 

pyethereum项目是用python语言编写的以太坊客户端,ethereumj项目是用JAVA语言编写的以太坊客户端,只是语言不同,和前面GO语言编写的客户端Geth的功能完全相同。

 

(七)etheminer项目

 

开发语言:C++

 

客户端文件:ethminer

 

使用平台:windows、linux和OSX

 

界面:命令行

 

功能和特点:该项目是cpp-ethereum项目的一部分,用于和Geth配合进行GPU挖矿,比CPU挖矿效率高100多倍,也可以用于矿池挖矿

 

四、 以太坊常用网址(含智能合约)

以太坊有很多有用的网站都分布在国外,找起来很费劲,这里总结一下

 

1、以太坊官方网站:https://ethereum.org/

 

该网站为以太坊的官方网站,有详细的以太坊介绍和各种连接地址,推荐详细看一看

 

2、以太坊所有源码地址(官方):https://github.com/ethereum/

 

该github为以太坊所有项目的源码地址,以及更新和发布。

 

3、以太坊Homestead文档地址(官方):http://www.ethdocs.org/en/latest/index.html

 

该网站为以太坊的详细介绍文档,基本包括了以太坊的方方面面,如果有什么不清楚的原理和应用,基本都可以在这里找到答案和线索。

 

4、以太坊网络状态地址(官方):https://ethstats.net/

 

该网站能全面的显示网络状态,包括节点、难度、算力等等,非常直观

 

5、以太坊资源网站(官方):http://ether.fund/

 

该网站提供了以太坊很多应用资源,比如市场情况、合约辅助工具、已发布的智能合约、以太坊网络、DAAP等,方便开发和发布。

 

6、Solidity编程文档(官方):http://solidity.readthedocs.io/en/latest/

 

该网站提供了以太坊Solidity语言的全面参考手册,学习Solidity语言必备。

 

7、以太坊网络扫描(官方):http://etherscan.io/

 

该网站提供了以太坊网络的各种状态,比如帐号的详情、TOKEN详情,难度详情、区块详情,非常方便和直观。

 

8、以太坊官方博客:https://blog.ethereum.org/

 

9、以太坊wiki百科地址:https://github.com/ethereum/wiki/wiki

 

在这里有白皮书、黄皮书以及开发指南,比较全面。

 

10、以太坊中文爱好者网站:http://ethfans.org/

 

该网站为国内以太坊爱好者自发建立的网站,内容比较全,信息更新很快。

 

11、以太坊的gitter的实时交流网站:https://gitter.im/orgs/ethereum/rooms

 

该网站是以太坊的gitter chart的网站,根据项目分了很多房间,只要你提问题,大部分有人回答,很不错,不过只能英语交流。

 

12、以太坊的官方论坛:https://forum.ethereum.org/

 

官方论坛,没什么好说的,我遇到的几个问题,都是在这里找到的答案

 

13、以太坊第三方强大的IDE:https://live.ether.camp/

 

这个是第三方发布的Solidity IDE,我看了一下,很强大,强大到还不太会用,他的目标是企业级IDE,老外用的较多。

 

14、以太坊开发框架Truffle说明书:http://truffle.readthedocs.io/en/latest/

 

以太坊目前很流行的开发框架Truffle的说明书,这个框架比较流行。

 

15、以太坊开发框架dapple说明书:http://dapple.readthedocs.io/en/master/

 

这个开发框架是在gitter chart上看到的,感觉用的人不多,先观察

 

16、以太坊官方推荐开发框架Meteor说明书:https://github.com/ethereum/wiki/wiki/Dapp-using-Meteor

 

这个开发框架是以太坊官方推荐的,写进了以太坊的官方wiki,值得学习,当然,以太坊官方经常转换方向,以后换别的也没准。

4.Nodejs下载&安装

ailin阅读(53)

原文:http://blog.csdn.net/wo541075754/article/details/53125593

以太坊框架truffle的安装需要依赖nodejs中的npm命令,本篇博客我们就简单介绍一下node的安装过程。操作系统基于ubuntu 16.04版本。

下载地址

nodejs官网http://www.nodejs.org/

下图为官网截图,自行选择需要的版本。获得下载链接地址之后,可以使用wget命令下载。

这里写图片描述

由于网络原因,可采用https://npm.taobao.org/镜像安装。本教程采用最新版本:node-v6.9.1-Linux-x64.tar.xz。

安装步骤

依赖安装

安装nodeJS之前,如果没有安装g++及 libssl-dev,则先要安装好,安装方法如下:

$ sudo apt-get install g++
$ sudo apt-get install libssl-dev

nodejs安装

第一步,解压:

tar -xvf node-v6.9.1-linux-x64.tar.xz

第二步:为node和npm建立两个软连接,使之可以全局运行:
(PS:第一个路径为安装程序所在路径)

ln -s /home/zhuzs/app/nodejs/node-v6.9.1/bin/node/usr/local/bin/node 

ln -s /home/zhuzs/app/nodejs/node-v6.9.1/bin/npm /usr/local/bin/npm 

第三步,验证。
输入:

node -v

输出:

v6.9.1

至此,nodejs安装完成。
后面可以通过node命令,执行其他操作。

退出命令行可连续使用两次Ctr+C或输入:

.exit

npm命令

npm随着nodejs的工具包一起安装。

验证,输入:

npm -v

我这里输出的版本为:

3.10.8

3.以太坊客户端命令行选项汇总

ailin阅读(35)

原文:http://blog.csdn.net/wo541075754/article/details/53096808

 

本篇博客的内容可通过以下命令在客户端中进行查看:

geth --help
  • 1
  • 1

也可以访问github上的wiki文档查看,地址为:

https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
  • 1
  • 1

具体内容

NAME:
   geth - go-ethereum命令行接口

USAGE:
   geth [options] command [command options] [arguments...]

VERSION:
   1.4.11-stable

COMMANDS:
   import   引入一个区块链文件
   export   导出区块链到文件
   upgradedb    更新区块链数据库
   removedb 移除区块链和正式数据库
   dump     dump a specific block from storage
   monitor  Geth Monitor: node metrics monitoring and visualization
   account  管理账户
   wallet   ethereum presale wallet
   console  Geth控制台: JavaScript交互环境
   attach   Geth控制台: JavaScript交互环境(连接node)
   js       在Geth JavaScript VM执行JavaScript文件
   makedag  generate ethash dag (for testing)
   gpuinfo  gpuinfo
   gpubench benchmark GPU
   version  打印ethereum版本号
   init     引导初始化一个创世块(JSON)
   help, h  显示命令列表或一个命令的帮助

ETHEREUM OPTIONS:
  --datadir "/home/karalabe/.ethereum"  数据库和keystore的文件目录
  --keystore        keystore的文件目录 (default = inside the datadir)
  --networkid value         Network identifier (integer, 0=Olympic, 1=Frontier, 2=Morden) (default: 1)
  --olympic             Olympic network: pre-configured pre-release test network
  --testnet             Morden network: pre-configured test network with modified starting nonces (replay protection)
  --dev                 Developer mode: pre-configured private network with several debugging flags
  --identity value          Custom node name
  --fast                Enable fast syncing through state downloads
  --lightkdf                Reduce key-derivation RAM & CPU usage at some expense of KDF strength
  --cache value             Megabytes of memory allocated to internal caching (min 16MB / database forced) (default: 128)
  --blockchainversion value     Blockchain version (integer) (default: 3)

账户选项:
  --unlock value    通过逗号分隔一个列表账户来进行解锁
  --password value  Password file to use for non-inteactive password input

API AND CONSOLE OPTIONS:
  --rpc             支持HTTP-RPC服务
  --rpcaddr value   HTTP-RPC服务监听地址(默认: "localhost")
  --rpcport value   HTTP-RPC服务监听端口(默认: 8545)
  --rpcapi value    HTTP-RPC提供的API支持(默认: "eth,net,web3")
  --ws          Enable the WS-RPC server
  --wsaddr value    WS-RPC server listening interface (default: "localhost")
  --wsport value    WS-RPC server listening port (default: 8546)
  --wsapi value     API's offered over the WS-RPC interface (default: "eth,net,web3")
  --wsorigins value Origins from which to accept websockets requests
  --ipcdisable      Disable the IPC-RPC server
  --ipcapi value    API's offered over the IPC-RPC interface (default: "admin,debug,eth,miner,net,personal,shh,txpool,web3")
  --ipcpath "geth.ipc"  Filename for IPC socket/pipe within the datadir (explicit paths escape it)
  --rpccorsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced)
  --jspath loadScript   JavaScript root path for loadScript and document root for `admin.httpGet` (default: ".")
  --exec value      Execute JavaScript statement (only in combination with console/attach)
  --preload value   Comma separated list of JavaScript files to preload into the console

NETWORKING OPTIONS:
  --bootnodes value Comma separated enode URLs for P2P discovery bootstrap
  --port value      Network listening port (default: 30303)
  --maxpeers value  Maximum number of network peers (network disabled if set to 0) (default: 25)
  --maxpendpeers value  Maximum number of pending connection attempts (defaults used if set to 0) (default: 0)
  --nat value       NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>) (default: "any")
  --nodiscover      Disables the peer discovery mechanism (manual peer addition)
  --nodekey value   P2P node key file
  --nodekeyhex value    P2P node key as hex (for testing)

MINER OPTIONS:
  --mine            Enable mining
  --minerthreads value      Number of CPU threads to use for mining (default: 8)
  --minergpus value     List of GPUs to use for mining (e.g. '0,1' will use the first two GPUs found)
  --autodag         Enable automatic DAG pregeneration
  --etherbase value     Public address for block mining rewards (default = first account created) (default: "0")
  --targetgaslimit value    Target gas limit sets the artificial target gas floor for the blocks to mine (default: "4712388")
  --gasprice value      Minimal gas price to accept for mining a transactions (default: "20000000000")
  --extradata value     Block extra data set by the miner (default = client version)

GAS PRICE ORACLE OPTIONS:
  --gpomin value    Minimum suggested gas price (default: "20000000000")
  --gpomax value    Maximum suggested gas price (default: "500000000000")
  --gpofull value   Full block threshold for gas price calculation (%) (default: 80)
  --gpobasedown value   Suggested gas price base step down ratio (1/1000) (default: 10)
  --gpobaseup value Suggested gas price base step up ratio (1/1000) (default: 100)
  --gpobasecf value Suggested gas price base correction factor (%) (default: 110)

VIRTUAL MACHINE OPTIONS:
  --jitvm       Enable the JIT VM
  --forcejit        Force the JIT VM to take precedence
  --jitcache value  Amount of cached JIT VM programs (default: 64)

LOGGING AND DEBUGGING OPTIONS:
  --metrics         Enable metrics collection and reporting
  --fakepow         Disables proof-of-work verification
  --verbosity value     Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=core, 5=debug, 6=detail (default: 3)
  --vmodule value       Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=6,p2p=5)
  --backtrace value     Request a stack trace at a specific logging statement (e.g. "block.go:271") (default: :0)
  --pprof           Enable the pprof HTTP server
  --pprofport value     pprof HTTP server listening port (default: 6060)
  --memprofilerate value    Turn on memory profiling with the given rate (default: 524288)
  --blockprofilerate value  Turn on block profiling with the given rate (default: 0)
  --cpuprofile value        Write CPU profile to the given file
  --trace value         Write execution trace to the given file

EXPERIMENTAL OPTIONS:
  --shh     Enable Whisper
  --natspec Enable NatSpec confirmation notice

MISCELLANEOUS OPTIONS:
  --solc value      Solidity compiler command to be used (default: "solc")
  --support-dao-fork    Updates the chain rules to support the DAO hard-fork
  --oppose-dao-fork Updates the chain rules to oppose the DAO hard-fork
  --help, -h        显示帮助

2.以太坊客户端基本操作命令

ailin阅读(36)

原文:http://blog.csdn.net/wo541075754/article/details/53073799

启动命令

重复上篇博客步骤,先将区块链客户端启动,命令如下:

geth --identity "secbro etherum" --rpc --rpccorsdomain "*" --datadir "/home/zhuzs/eth/chain" --port "30303" --rpcapi "db,eth,net,web3" -- networkid 95518 console --dev
  • 1
  • 1

看到启动页面之后,新开启一个终端,并执行一下命令,并把日志输出到文本文件当中:

geth --dev console 2>> file_to_log_output
  • 1
  • 1

这些需要注意的是,在启动客户端时添加了参数–dev,开发模式,执行结果如下:
这里写图片描述

在这里可以继续执行具体的操作命令。

查看账户

eth.accounts
  • 1
  • 1

创建用户:

personal.newAccount("111111")
  • 1
  • 1

其中参数为此账户的密码。
也可以先创建账户,然后输入密码:

personal.newAccount()
  • 1
  • 1

查看区块数据

eth.blockNumber
  • 1
  • 1

启动挖矿

miner.start()
  • 1
  • 1

返回结果为true则启动成功,具体执行情况可查看日志。

停止挖矿

miner.stop()
  • 1
  • 1

当在执行挖矿时日志会不停刷屏,不用管,只要命令输入全,执行即可停止挖矿。

查看账户余额

其中参数为区块链地址

eth.getBalance("0x7d1f7be4112ce63b9de04a0bf95c1e87e430bd1b")
  • 1
  • 1

转账

从账户0x7d1f7be4112ce63b9de04a0bf95c1e87e430bd1b转账3个以太币到0x587e57a516730381958f86703b1f8e970ff445d9。

eth.sendTransaction({from:"0x7d1f7be4112ce63b9de04a0bf95c1e87e430bd1b",to:"0x587e57a516730381958f86703b1f8e970ff445d9",value:web3.toWei(3,"ether")})
  • 1
  • 1

当直接执行此方法时会抛出异常:

account is locked
    at web3.js:3119:20
    at web3.js:6023:15
    at web3.js:4995:36
    at <anonymous>:1:1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

很明显,账户被锁。

解锁转出账户

其中第一个参数为转出账户,第二个参数为密码。也可以直填写第一个参数,然后通过命令行提示再输入密码。

personal.unlockAccount("0x7d1f7be4112ce63b9de04a0bf95c1e87e430bd1b","111111")
  • 1
  • 1

解锁完成之后,即可执行转账操作。但此时查看时会发现接收账户依旧为原来数值。此时需要执行挖矿命令,才会把转账真正完成。

1.搭建基于以太坊go-ethereum的私有链环境

ailin阅读(58)

转载,原文地址:http://blog.csdn.net/wo541075754/article/details/53064877

通过各方资料了解学习之后,决定自己开始搭建基于以太坊Go-ethereum的私有链环境。由于本人的电脑系统为win8,为避免window环境出现过多莫名其妙的问题,特意通过vm搭建了一台ubuntu16.04版本的虚拟系统。以下内容均基于ubuntu16.04系统。

go-ethereum客户端

下载地址&参考手册

首先,可以查看一下go-ethereum项目在Git上的地址:
https://github.com/ethereum/Go-ethereum

可以在点击项目上的wiki标签,也可以通过一下地址访问wiki:
https://github.com/ethereum/Go-ethereum/wiki/Building-Ethereum

在wiki页面选择ubuntu系统的安装说明,也可以直接访问下面链接:
https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu

ubuntu下安装命令

打开命令行窗口,或通过快捷键CTL+ALT+T,依次输入以下命令,即可安装成功:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

PS:如果安装过程中需要依赖其他组件,则先安装其他组件。另外,在ubuntu16.04版本,sudo apt-get install命令可精简为sudo apt install。

安装测试

安装完成之后在命令行输入:

geth --help
  • 1
  • 1

如果现实出命令行各种参数提示信息,则说明安装成功。

创世块

在以上安装成功之后,直接启动,即可连接公有链。现在通过配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。

创建一个eth的根目录,在根目录下新建创世块json文件piccgenesis.json。内容如下:

{
 "nonce":"0x0000000000000042",
 "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
 "difficulty": "0x4000",
 "alloc": {},
 "coinbase":"0x0000000000000000000000000000000000000000",
 "timestamp": "0x00",
 "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
 "extraData": "SecBroBlock",
 "gasLimit":"0x0000ffff"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

参数解释:

参数名称 参数描述
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
nonce nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase 矿工的账号,随便填
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash值,因为是创世块,所以这个值是0
extraData 附加信息,随便填,可以填你的个性信息
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

启动私有链节点

启动私有节点所需参数

参数名称 参数描述
identity 区块链的标示,随便填写,用于标示目前网络的名字
init 指定创世块文件的位置,并创建初始块
datadir 设置当前区块链网络数据存放的位置
port 网络监听端口
rpc 启动rpc通信,可以进行智能合约的部署和调试
rpcapi 设置允许连接的rpc的客户端,一般为db,eth,net,web3
networkid 设置当前区块链的网络ID,用于区分不同的网络,是一个数字
console 启动命令行模式,可以在Geth中执行命令

初始化&启动

本人启动eth所在目录为:

/home/zhuzs/eth
  • 1
  • 1

此目录下放置刚才配置好的创世块json文件:piccgenesis.json

初始化

初始化创世块有两种方法:
方法一:执行命令先进行初始化(注意需要在你准备防止eth的根目录下执行)

$ geth init /path/to/genesis.json
  • 1
  • 1

方法二:在执行启动命令的参数中添加以下参数

--genesis /path/to/genesis.json
  • 1
  • 1

以上两种方案注意path路径进行对应的替换;

启动

因此直接执行如下命令:

geth --identity "secbro etherum" --rpc --rpccorsdomain "*" --datadir "/home/zhuzs/eth/chain" --port "30303" --rpcapi "db,eth,net,web3" -- networkid 95518 console --dev 
  • 1
  • 1

PS:根据自己的环境进行对应的替换。注意,最后添加了–dev,以开发模式启动。

看到一下输出说明启动成功,并且是使用的私有链:
这里写图片描述

以太坊是什么?

ailin阅读(36)

作者:汪晓明

原文链接:http://www.8btc.com/ethereum-part-1

以太坊是什么?

以太坊是一个全新开放的区块链平台,它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。就像比特币一样,以太坊不受任何人控制,也不归任何人所有——它是一个开放源代码项目,由全球范围内的很多人共同创建。和比特币协议有所不同的是,以太坊的设计十分灵活,极具适应性。在以太坊平台上创立新的应用十分简便,随着Homestead的发布,任何人都可以安全地使用该平台上的应用。

Ethereum

 

下一代区块链

 

区块链技术是比特币的底层技术,这一技术第一次被描述是在中本聪2008年发表的白皮书“比特币:点对点电子现金系统”中。区块链技术更多的一般性用途在原书中已经有所讨论,但直到几年后,区块链技术才作为通用术语出现。一个区块链是一个分布式计算架构,里面的每个网络节点执行并记录相同的交易,交易被分组为区块。一次只能增加一个区块,每个区块有一个数学证明来保证新的区块与之前的区块保持先后顺序。这样一来,区块链的“分布式数据库”就能和整个网络保持一致。个体用户与总账的互动(交易)受到安全的密码保护。由数学执行并编码到协议中的经济激励因素刺激着维持和验证网络的节点。

在比特币中,分布式数据库被设想为一个账户余额表,一个总账,交易就是通过比特币的转移以实现个体之间无需信任基础的金融活动。但是随着比特币吸引了越来越多开发者和技术专家的注意,新的项目开始将比特币网络用于有价代币转移之外的其他用途。其中很多都采用了“代币”的形式——以原始比特币协议为基础,增加了新的特征或功能,采用各自加密货币的独立区块链。在2013年末,以太坊的发明者Vitalik Buterin建议能够通过程序重组来运行任意复杂运算的单个区块链应该包含其他的程序。

2014年,以太坊的创始人Vitalik Buterin, Gavin Wood和Jeffrey Wilcke开始研究新一代区块链,试图实现一个总体上完全无需信任基础的智能合约平台。

 

以太坊虚拟机

 

以太坊是可编程的区块链。它并不是给用户一系列预先设定好的操作(例如比特币交易),而是允许用户按照自己的意愿创建复杂的操作。这样一来,它就可以作为多种类型去中心化区块链应用的平台,包括加密货币在内但并不仅限于此。

以太坊狭义上是指一系列定义去中心化应用平台的协议,它的核心是以太坊虚拟机(“EVM”),可以执行任意复杂算法的编码。在计算机科学术语中,以太坊是“图灵完备的”。开发者能够使用现有的JavaScript和Python等语言为模型的其他友好的编程语言,创建出在以太坊模拟机上运行的应用。

和其他区块链一样,以太坊也有一个点对点网络协议。以太坊区块链数据库由众多连接到网络的节点来维护和更新。每个网络节点都运行着以太坊模拟机并执行相同的指令。因此,人们有时形象地称以太坊为“世界电脑”。

这个贯穿整个以太坊网络的大规模并行运算并不是为了使运算更高效。实际上,这个过程使得在以太坊上的运算比在传统“电脑”上更慢更昂贵。然而,每个以太坊节点都运行着以太坊虚拟机是为了保持整个区块链的一致性。去中心化的一致使以太坊有极高的故障容错性,保证零停机,而且可以使存储在区块链上的数据保持永远不变且抗审查。

以太坊平台本身没有特点,没有价值性。和编程语言相似,它由企业家和开发者决定其用途。不过很明显,某些应用类型较之其他更能从以太坊的功能中获益。以太坊尤其适合那些在点与点之间自动进行直接交互或者跨网络促进小组协调活动的应用。例如,协调点对点市场的应用,或是复杂财务合同的自动化。比特币使个体能够不借助金融机构、银行或政府等其他中介来进行货币交换。以太坊的影响可能更为深远。理论上,任何复杂的金融活动或交易都能在以太坊上用编码自动且可靠地进行。除金融类应用外,任何对信任、安全和持久性要求较高的应用场景——比如资产注册、投票、管理和物联网——都会大规模地受到以太坊平台影响。

 

以太坊如何工作?

 

以太坊合并了很多对比特币用户来说十分熟悉的特征和技术,同时自己也进行了很多修正和创新。比特币区块链纯粹是一个关于交易的列表,而以太坊的基础单元是账户。以太坊区块链跟踪每个账户的状态,所有以太坊区块链上的状态转换都是账户之间价值和信息的转移。账户分为两类:

 

  1. 外有账户(EOA),由私人密码控制
  2. 合同账户,由它们的合同编码控制,只能由外有账户“激活”

对于大部分用户来说,两者基本的区别在于外有账户是由人类用户掌控——因为他们能够控制私钥,进而控制外有账户。而合同账户则是由内部编码管控。如果他们是被人类用户“控制”的,那也是因为程序设定它们被具有特定地址的外有账户控制,进而被持有私钥控制外有账户的人控制着。“智能合约”这个流行的术语指的是在合同账户中编码——交易被发送给该账户时所运行的程序。用户可以通过在区块链中部署编码来创建新的合约。

只有当外有账户发出指令时,合同账户才会执行相应的操作。所以合约账户不可能自发地执行诸如任意数码生成或应用程序界面调用等操作–只有受外有账户提示时,它才会做这些事。这是因为以太坊要求节点能够与运算结果保持一致,这就要求保证严格确定执行。

和比特币一样,以太坊用户必须向网络支付少量交易费用。这可以使以太坊区块链免受无关紧要或恶意的运算任务干扰,比如分布式拒绝服务(DDoS)攻击或无限循环 。交易的发送者必须在激活的“程序”每一步付款,包括运算和记忆储存。费用通过以太坊自有的有价代币,以太币的形式支付。

交易费用由节点收集,节点使网络生效。这些“矿工”就是以太坊网络中收集、传播、确认和执行交易的节点。矿工们将交易分组——包括许多以太坊区块链中账户“状态”的更新——分成的组被称为“区块”,矿工们会互相竞争,以使他们的区块可以添加到下一个区块链上。矿工们每挖到一个成功的区块就会得到以太币奖励。这就为人们带来了经济激励,促使人们为以太坊网络贡献硬件和电力。

和比特币网络一样,矿工们有解决复杂数学问题的任务以便成功地“挖”到区块。这被称为“工作量证明”。一个运算问题,如果在算法上解决,比验证解决方法需要更多数量级的资源,那么它就是工作证明的极佳选择。为防止比特币网络中已经发生的,专门硬件(例如特定用途集成电路)造成的中心化现象,以太坊选择了难以存储的运算问题。如果问题需要存储器和CPU,事实上理想的硬件是普通的电脑。这就使以太坊的工作量证明具有抗特定用途集成电路性,和比特币这种由专门硬件控制挖矿的区块链相比,能够带来更加去中心化的安全分布。