区块链常见概念
Key pool
钱包预先生成 100 个密钥,保存在 key pool。新建地址的时候,使用这里面的未使用密钥创建。
主要用途是减少备份次数,同时防止硬盘损坏时,碰巧使用了新建的地址,导致备份时没有备份到。
旧版默认生成 100 个密钥,可以通过 -keekpool 参数来设置。新版扩充到了 1000 个。
Dapp
Dapp(decentralized application) 应用的后端代码运行在去中心化的 peer-to-peer 网络中。
和运行在中心化服务的 app 相比,一个 Dapp 有前端代码和界面,可以调用后端代码,而且前端可以部署在去中心化的存储中例如 Swarm or IPFS
如果 App = frontend + server,那么 Ethereum 的合约是运行在 Ethereum 的全球 p2p 网络中的
那么 DApp = frontend + contracts
Contracts: 去中心化的逻辑处理,运行在 Ethereum Virtual Machine (EVM)
Swarm: 去中心化的存储,作为记账协议而设计的,不依赖于物理存储系统,可以是 IPFS, BitTorrent 或将来发明的存储技术
Whisper: 去中心化的消息处理
下面是使用区块链 + 智能合约 + swarm + whisper
分叉 soft fork
软分叉是把之前的有效区块,认为是无效的,旧节点认为新区块是有效的,新节点区块保持向后兼容性,当新规则启用时作为临时分叉,未升级节点也可以接受已升级节点的区块,同时分叉的新链只接受已升级节点的区块。
一旦启用软分叉之后,就取决于已升级节点能否尽快取得绝对性的大多数份额,否则软分叉将会失败,旧链没有任何影响。
旧版本在新版本拒绝区块时会发现有新版本需要升级,然后完成升级过程。
当大多数矿工完成升级后正式启用新规则,称作 miner-activated softfork (MASF)
当大多数节点协同一致支持新规则,不需要矿工支持时,称作 user-activated softfork (UASF)
硬分叉是一种快速,高优先级,不向后兼容的改变,定义为当实现时产生永久的改变。
新链和旧链是相互平行的,各自应用不同的规则,两条链之间不能互相转移资产
随之而来的是两份资产的问题,用户分别在两条链上同时拥有相同的资产,比如在硬分叉前,旧链中有100个币,那么分叉后,在旧链和新链将同时有100个币,
当然两个链中币的价值也是不同的,因为无法相互转移。
交易即挖矿
“交易即挖矿”实际上就是一种基于平台币的个人交易手续费返还机制
FCoin的“交易即挖矿”则进行了重新包装,仿照比特币挖矿的分配规则,拿出51%比例的平台币FT作为挖矿奖池,通过“挖矿(在FCoin上交易)”逐渐解锁FT,一旦51%的FT全部回馈完成,“挖矿”即自动终止。
FCoin交易即挖矿每天(GMT+8)0点开始,每小时都会将用户所产生交易手续费,100%折算成FT进行累积,折算价格按该小时FT的均价计算(均价计算方式为总成交金额/总成交量)。
DHT 分布式哈希表(Distributed Hash Table)
DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法,一类可由键值来唯一标示的信息按照某种约定/协议被分散地存储在多个节点上,这样也可以有效地避免“中央集权式”的服务器(比如:tracker)的单一故障而带来的整个网络瘫痪。
Sybil attack 女巫攻击
大规模的p2p系统面临着有问题的和敌对的节点的威胁,为了应付这种威胁,很多系统采用了冗余。然而,如果一个有恶意的实体模仿了多个身份,他就可以控制系统的很大一部分,破坏了系统的冗余策略。我们把这种模仿多个身份的攻击定义为女巫攻击(Sybil Attack)。
一个节点伪造多个节点id,当对数据进行冗余备份时,有可能这个数据的多个备份都存储在了Sybil节点上,从而削弱了系统的冗余性。
2002年,Douceur提出抵御Sybil攻击的唯一方法是使用可信的CA机构对身份进行认证。该方案使用集中式的CA为每一个加入系统的节点颁发证书。证书中包含该节点的id、IP地址、公钥,并用CA的私钥对证书进行签名。其中节点id是由CA从id空间中随机选择分配的,防止节点自己选择id,从而进行有目的的攻击。
2006年,Dinger提出了一种针对Chord网络的自注册机制来防御sybil攻击。在该方案中,与CA机制不同的是节点id是分布式分配的。要加入网络的节点首先计算自己的节点id,节点id是IP和端口号异或后的哈希值;然后该节点在chord环中的r个节点中进行注册,这r个节点用该节点的IP地址和j(1=<j<=r)计算出来的。每个节点为每一个IP地址维护着一张注册节点表,如果在该节点中注册的IP地址数超过了系统常数a,将拒绝该节点注册。
2006年,Bazzil提出了一种防御sybil攻击的安全路由协议。网络中每个节点都有一个公私钥对,公钥作为其身份。网络中的节点分为两种,超级节点和普通节点。超级节点的公钥是公开的,而普通节点的公钥是不公开的。可以直接进行通信的节点我们称之为邻居。
预言机 oracle
先说答案: oracle就是为区块链智能合约提供可信链外数据以触发智能合约顺利执行的数据源。
为什么叫oracle?
oracle是智能合约的重要基础。而智能合约是以以太坊为代表的区块链2.0的标志性技术,是区块链技术走向商业化的一块重要基石。
需要引入一种机制保障输入智能合约的数据都是可信的,这就是oracle。Oracle是连接现实世界和区块链系统的桥梁。
举一个更复杂也更具有商业化前景的案例,2018世界杯即将开赛,球迷可用智能合约来实现对赌,比如有球迷A预测巴西队会夺冠,另有球迷B预测德国队夺冠。这样可以开设一个赌局,巴西队夺冠,则B的赌注判给A,反之亦然,如果两队都没有夺冠,则赌约自动解除。
赌约的规则很简单,但在区块链去中心化体系下存在一个关键问题是,如何将比赛结果放进这个赌约当中去?也就是说如何扣动扳机,让这个智能合约运转起来?
在去中心化的区块链体系中,赌局双方是意见不同的球迷,没有了第三方中介机构,也就取消了裁判,由此产生了谁来宣布赌局胜负的问题。这就需要第三方信息的介入,这个功能就是预言机oracle发挥作用的地方。
oracle设计有两大障碍:
- 是安全性不够,被骗的可能比在现实世界中被骗的可能仍然大很多;
- 是成本高,智能合约使用oracle花费的时间和投入,比在现实世界中获取信息要高得多。
零知识证明
ZK-SNARK(Zero Knowledge succinct non-interactive arguments of knowledge) 算法
也就是我们常说的零知识证明,具有简洁性、非交互性、计算完好性(验证者只能抵抗计算能力有限的证明者的攻击)
简单来说,零知识证明能够让用户不泄漏隐私信息,证明自己的某个属性,如钱包有多少钱等。在Zcash上,交易的发送者、接受者和数额等能够通过加密进行隐藏。
但是,了解Zcash的人都知道,这个算法的设计,让Zcash需要一个可信的第三方,这违背了区块链的去中心化,而去中心化正是区块链美妙的地方。
当然为了解决隐私问题,还有很多的尝试如交易混合机制等,但都没有彻底解决问题。
ZK-STARK简介
最近出来一个项目,对零知识证明算法提出了改进,它就是Starkware。
它运用新一代的零知识证明算法ZK-STARK(Scalable Transparent Argument of Knowledge),提高区块链的可拓展性和隐私性。别看只是隐私这样一个小问题,如果这个隐私问题能够解决的话,并且还不需要一个可信的第三方的话,加密数字货币能够有机会成为通用、普及的货币。
另外,算法的设计能够抵抗量子计算的攻击,这也是一个亮点所在。
但是项目还是存在两个问题,一个是在这个新的算法,一次零知识证明的存储大小增加了千倍(ZK-SNARK的288B增加到了几百KB),对存储要求大幅度增加。另外也没有项目使用这个算法,可行性并没有得到验证。
共识算法
目前存在的共识算法。
PoW:Proof of Work,工作量证明
PoS:Proof of Stake,权益证明
DPoS:Delegated Proof of Stake,委托权益证明
PBFT:Practical Byzantine Fault Tolerance,实用拜占庭容错算法
PoSpace/PoC:Proof-of-space/Proof-of-Capacity,容量证明
PoA:Proof of activity,活动证明
PoB:Proof of burn,销毁证明
PoET:Proof of elapsed time,运行时间证明
Casper:Ethereum 提出
What exactly is the Nothing-At-Stake problem?
跨链技术
早期跨链技术包括以Blockstream为代表的侧链技术(Sidechain)和以BTC-Relay为代表的中继技术(Relay)。早期的跨链技术更多关注的是资产转移,现有项目更多关注的是链状态的转移。
Interledger
Ripple 开发了“InterLedger”协议,可以说这是一个更实际的办法——将所有我们目前正在使用的记账系统连接在一起。
Interledger协议创建了一个这样的系统,在这个系统中,两个不同的记账系统可以通过第三方“连接器”或“验证”机器来互相自由地传输货币。记账系统无需去信任“连接器”,因为该协议采用密码算法为这两个记账系统和连接器创建资金托管,当所有参与方对资金量达成共识时,便可相互交易。并且只有参与交易的记账系统才可以跟踪交易,交易的详情可隐藏起来,“验证器”是通过加密算法来运行,因此不会直接看到交易的详情。
理论上,Interledger可以兼容任何在线记账系统,而银行现有的记账系统只需小小的改变就能使用该协议。
Polkadot
如果你熟悉以太坊,就一定知道以太坊客户端的开发者Ethcore,Polkadot项目便是Ethcore公司在跨链通信领域的一个崭新尝试。它被称为第三代公开无需授权的区块链科技,设计核心理念为解决当今两大阻止区块链技术传播和接受的难题:即时拓展性和延伸性。
Polkadot目前还是以以太坊为主,实现其与私链的互连,并以其他公有链网络为升级目标,最终让以太坊直接与任何链进行通讯。
Melonport 开发的软件Melon将是运行于多链网络(multi-chain network)Polkadot之上的第一款Dapp。Melon的定位是成为跨链框架上的数字资产管理平台,现有数字代币或资产达700 多种,分布于多个互不相连的平台,其数字资产市场价值约150亿美元,并在持续增长中。
Aeternity
计算机科学家Yanislav Malahov和风险资本家Andreas Kohl于去年创建了一家名为Aeternity的软件公司,Malahov 称自己为以太坊的“教父”。 Aternity项目是一种以太坊智能合约在侧链运行的一种实现,致力于重塑当今智能合约的基础。Aeternity的白皮书发布于2016年12月。
以太坊的智能合约刚问世的时候,的确给人以一种焕然一新的感觉。然而,随着各方试图将以太坊运用到实际商业应用中,智能合约诸如效率低下、功能缺失,特别是过于封闭不易与外部世界通信的弊端渐渐显露。
Aeternity呈现了一个高度可扩容的区块链架构,以及一个可以被用来检视预言机(oracle)的共识机制。这将使得预言机变得非常高效且廉价,因为它将避免共识机制重叠使用的情况。状态通道将得到整合,从而提升隐私性和可扩容性。通道中的代币可以用完全可靠的、可以访问预言机答案的智能合约来进行传输。合约代码或状态将不会在链上储存,使智能合约更容易分析,处理速度加快,而实际功能性并不会遭受显著损失,由此可以高效地在全球规模上进行部署自创资产和预测市场这样的应用。
AnLink
众安科技同样看到了单一区块链在许多应用场景中无法解决复杂问题以及在性能上相对于传统中心化系统所呈现的瓶颈,由此提出并发展了称为“安链-链路由”的区块链网络拓扑结构。
在AnLink区块链网络中,“母链”构成了信息主干道,不同的母链之间通过链路由协议交换信息。同时,一个母链上承载着不同的子链,这些子链可以是以太坊,可以是比特币,事实上也可以是任何一种分布式账本实现,子链间的通信则由跨链通信协议(CBCP)负责。这种类互联网的分层协议实现,借鉴了已有的技术实现,以解决区块链系统的扩展性问题。
重复消费(double spending)
双重支出指的是一笔钱花两次
UTXO
Unspent Transaction Output
可以用来消费的金额
哈希算力
算力,在通过「挖矿」得到比特币的过程中,一个节点每秒钟能做多少次计算,就是其「算力」的代表
单位写成 hash/s, 简写为 h/s。1 h/s 表示 1 秒钟能做 1 次 hash 碰撞
H=1次
1000H = 1K
1000K = 1G
1000G = 1T
1000T = 1P
1000P=1E
比特币是sha256算法,莱特币是scrypt算法, 以太坊是Ethash算法,
盲签名(Blind Signature)
是一种数字签名的方式,在消息内容被签名之前,对于签名者来说消息内容是不可见的.
类比例子:对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
它除了满足一般的数字签名条件外,还必须满足下面的两条性质:
- 签名者对其所签署的消息是不可见的,即签名者不知道他所签署消息的具体内容。
- 签名消息不可追踪,即当签名消息被公布后,签名者无法知道这是他哪次的签署的。
盲签名(Blind Signature)模型
- 接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。
- 经签名者签名后再发给接收者。
- 接收者对签名再作去盲变换,得出的便是签名者对原数据的盲签名。
- 这样便满足了条件①。要满足条件②,必须使签名者事后看到盲签名时不能与盲数据联系起来,这通常是依靠某种协议来实现的。
陷门单向函数(trapdoor one-way function)
单向函数(one-way function)
单向函数顺向计算起来非常的容易,但求逆却非常的困难。也就是说,已知x,我们很容易计算出f(x)。但已知f(x),却很难计算出x。
打碎碗碟是一个很好的单向函数的例子,我们将碗碟打碎成数千片的碎片是一件很容易的事情,但要把这些碎片再拼成一个完整无缺的碗碟,却是一件非常困难的事情。
单向陷门函数trapdoor one-way function)是一类特殊的单向函数,其存在一个陷门。
单向陷门函数包含两个明显特征:
1)一是单向性。
2)二是存在陷门。也就是后门
比如函数f(x),若已知x计算出f(x)很容易,而已知f(x),逆向求x则很困难。但若存在一个k,使得知道要是知道k,则可以很容易地计算出f(x)的逆;而不知道k,则无法计算出函数f(x)的逆,那么我们就称函数f(x)为单向陷门函数,而k称为陷门。
拆开表是一个很好的陷门单向函数的例子,我们将表拆成数百片小片非常容易,而把这些小片重新组装成能够工作的表则非常的困难,但我们如果通过秘密消息(表的装配指令),就可以很容易将表复原。这里的“表的装配指令”就是上述的陷门k。
一个ScriptPubKey是什么?解释如何使用P2SH地址就可以了。
scriptPubKey定义了如果Bob想要花费这1BTC,应该满足什么条件。
用于验证交易是否通过的脚本由两部分组成:
解锁脚本:本次交易的 input 中的 scriptSig
锁定脚本:上次交易的 output 中的 scriptPubKey
支付给脚本哈希(P2SH):
支付给脚本哈希(P2SH)交易标准是通过BIP16建立的,允许交易被发送到一个脚本哈希(地址以3开头),而不是一个公钥哈希(地址以1开头)。经P2SH发出的比特币,收款人必须提供一个脚本来与脚本哈希匹配,使得脚本的值为真。
IPFS(The InterPlanetary File System)星际文件存储系统
http://ipfs.io/
是一种点到点的分布式文件系统,它连接的计算设备都拥有相同的文件管理模式。
IPFS的做法则是不再关心中心服务器的位置,也不考虑文件的名字和路径,只关注文件中可能出现的内容。我把刚才的文件helloworld.js放到IPFS节点,它会得到一个新名字QmXGTaGWTT1uUtfSb2sBAvArMEVLK4rQEcQg5bv7wwdzwU(看到这个是不是有点熟悉:)对头就是象比特币或以太坊的地址),是一个由文件内容计算出的加密哈希值。哈希值直接反映文件的内容,哪怕只修改1比特,哈希值也会完全不同。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。。
智能合约
运行在沙箱里面的一个程序。
智能合约使很多不同类型的程序和操作得以自动化,最明显的体现之处在于支付环节及付款时的步骤操作。
一段代码 (智能合约),被部署在分享的、复制的账本上,它可以维持自己的状态,控制自己的资产和对接收到的外界信息或者资产进行回应。或者可以这样简单的概括:它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。
基于区块链的智能合约的构建及执行分为如下步骤:
- 智能合约的构建:由区块链内的多个用户共同参与制定一份智能合约;
- 智能合约的存储:智能合约通过P2P网络扩散到每个节点,并存入区块链;
- 智能合约的执行:智能合约定期进行自动机状态检查,将满足条件的事务进行验证,达成共识后自动执行并通知用户。