以太坊

一、概述

1、比特币区块链的升级版,针对区块链2.0的应用。以太坊内置一种叫做ether的货币,该货币是付合约执行之费用所必须的。以太坊区块链记录的东西叫做合约,所谓合约,就是一种低级二进制码,也是一种图灵完备语言。本质上,合约其实是运行在以太坊系统中各个节点上的程序。这些程序可以存储数据、支付及收取、存储ether 以及执行无穷范围(因此才叫图灵完备)的计算行为,在系统中充当去中心化的自治软件代理。

2、以python为基础的实现主要包括三个部分:Pyethapp是客户端部分;pyethereum是核心库,实现了区块链、以太坊模拟机和挖矿等功能;pydevp2p是点对点网络库,实现了节点发现、合约代码传输、加密签名等功能,这三者组合在一起就是完整的区块链实现,后面两个核心库共同组成了协议层。另外,go-ethereum是go语言的完整实现;Ethereum(J) 是纯Java实现

3、一个区块的产生时间大概17秒(比特币是10分钟)

4、发展阶段 货币-》智能合约(价值传递)-》所有协调和确认(自治社会)

5、智能合约:传统合约是指双方或者多方协议做或不做某事来换取某些东西,每一方必须信任彼此会履行义务。而智能合约无须彼此信任,因为智能合约不仅是由代码进行定义的,也是由代码强制执行的,完全自动且无法干预。

6、特点:避免被篡改、被代替;保密;强制执行;需要这些东西的地方都可以使用区块链。

二、技术

1、以太坊是个平台和编程语言,包括数字货币以太币(Ether)和以太脚本(EtherScript),用来构建和发布分布式应用。以太坊是个基础性的、开放的通用数字货币平台来实现图灵完备虚拟机,可以运用任何货币、协议和区块链。

2、以太坊具备开放通用特性,网络的每一个节点都可以运行以太坊虚拟机来发布分布式智能合约程序。以太坊智能合约,能够调用多个其他区块链、协议、货币。作为与底层区块链和协议无关的通用分布式运用开发平台,具备了成为一个平台级产品的条件。

3、以太坊有自己的分布式系统:包括文件服务Swarm、信息传输Whisper和信誉担保。Swarm是个去中心化文件服务;Whisper是加密通信传输系统;信用担保提供去信任网络中建立信誉和降低发现的系统,可由Crypto Schwartz和TrustDavis等提供。

三、共识机制

1、POW(Proof of Work):工作量证明,谁干得多,谁投入多,运气好,谁就有权记账,并获得挖矿所得。缺点:时间久了,矿机太少,没法交易;可能有51%攻击;通货紧缩;浪费电;收敛慢。 

2、PoS(Proof of stake)是基于矿工们目前拥有的数字货币数量分配,一种根据你持有货币的量和时间进行利息分配的制度,在POS模式下,你的“挖矿”收益与你的币龄成正比,而与电脑的计算性能无关。据Buterin解释,这一共识算法将寻求虚拟复制比特币的挖矿过程,而无需浪费电力。

3、Casper机制:有惩罚机制的pos

四、历史

1、白皮书,协议,基本原理,智能契约的结构。2013年末Vitalik Buterin

2、黄皮书,技术的实现规范。2014年4月

3、测试版,Frontier。2015年7月30日 

4、正式版,Homestead 。2016年2月29日 。

紫皮书 新的共识机制

5、Metropolis 大都会

6、Serenity  宁静(基于casper的共识机制)

五、分布式

1、拜占庭将军问题:拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商,从而赢取战斗?(假设信道是可达的,核心是一致性和正确性。使忠诚的将军可以达成行动协议而不受奸细的挑拨。)

2、CAP理论。

一致性(Consistency):同一个数据在集群中的所有节点,同一时刻是否都是同样的值。

可用性(Availability):集群中一部分节点故障后,集群整体是否还能处理客户端的更新请求。

分区容忍性(Partition tolerance):是否允许数据的分区,分区的意思是指是否允许集群中的节点之间无法通信。内部网络挂了:是否还让访问。

P必须要满足(网络抖动是一定的),一般选择A,一定程度上满足C。

六、客户端使用(go客户端)

1、默认目录 C:\Users\weitm\AppData\Roaming\Ethereum\geth

/root/.ethereum/geth

geth account new

geth account list

geth wallet import 预售钱包文件所在路径

{

  "config": {

        "chainId": 0,

        "homesteadBlock": 0,

        "eip155Block": 0,

        "eip158Block": 0

    },

  "alloc": {

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

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

    "0x0000000000000000000000000000000000000003": {"balance": "333333333"}

    },

  "coinbase"   : "0x0000000000000000000000000000000000000000",

  "difficulty" : "0x20000",

  "extraData"  : "",

  "gasLimit"   : "0x2fefd8",

  "nonce"      : "0x0000000000000142",

  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",

  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

  "timestamp"  : "0x00"

}

2、 ./geth init genesis.json

3、./geth --rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" --unlock '0' --password ./password.txt   --nodiscover --maxpeers '5' --networkid '1234574'  console

4、console内部js的api

web3.fromWei(eth.getBalance(eth.coinbase), "ether")

personal.listAccounts

personal.unlockAccount('0xb35ef67b5f4316d4fa852f9c00aba78bd49d73fb', 'xxx', 3000)

eth.sendTransaction({from: '0xb35ef67b5f4316d4fa852f9c00aba78bd49d73fb', to: '0xb35ef67b5f4316d4fa852f9c00aba78bd49d73fb', value: web3.toWei(1, "ether")})

5、web3是根,核心模块包括:

admin debug eth miner net personal rpc txpool

猜你喜欢

转载自eric-weitm.iteye.com/blog/2391483