区块链知识
以太坊上的矿工费 (gas)
矿工费的由来
在一个公有链上, 任何人都可以读写数据。读取数据是免费的, 但是向公有链中写数据时需要花费一定费用的, 这种开销有助于阻止垃圾内容, 并通过支付保护其安全性。网络上的任何节点(每个包含账本拷贝的连接设备被称作节点) 都可以参与称作挖矿的方式来保护网络。由于挖矿需要计算能力和电费, 所以矿工们的服务需要得到一定的报酬, 这也是矿工费的由来。
什么是 gas
以太坊和比特币的不同之处,以太坊引入了 gas 的概念,gas的目的是限制执行交易所需的工作量,同时为执行支付费用。gas 用来衡量你的这笔交易(或者合约代码调用)所消耗的资源(包括计算量,存储,带宽等)。一笔交易所产生的转账费用会奖励给打包包含这笔交易的区块的矿工。区块不是哪个矿工产生的,所有的矿工都会竞争下一个区块的打包权,胜出者可以打包下一个区块。交易不一定会存在一个区块,它交易被广播出去后,在数秒内全网所有的节点都会接收到这笔交易。矿工会优先打包 gas 合理,gas price 高的交易。如果用户交易时所支付的矿工费非常低(out of gas), 那么这笔交易可能不会被矿工打包, 从而造成交易失败。
以太坊的交易费用= gas 数量 * gas price (gas 单价, 以太币计价)
什么是 DApp
以太坊社区把基于智能合约的应用称为去中心化的应用程序 (Decentralized App)。DApp 的目标是让你的智能合约有一个友好的界面,外加一些额外的东西,例如 IPFS(可以存储和读取数据的去中心化网络,不是出自以太坊团队但有类似的精神)。
DApp 可以跑在一台能与以太坊节点交互的中心化服务器上,也可以跑在任意一个以太坊平等节点上。与一般的网站不同,DApp不能跑在普通的服务器上。他们需要提交交易到区块链并且从区块链而不是中心化数据库读取重要数据。
什么是智能合约
智能合约是 1990s 年代由尼克萨博提出的理念:“一个智能合约是一套以数字形式定义的约定,包括合约参与方可以在上面执行这些约定的协议。”
但是由于缺少可信的执行环境,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先看到了区块链和智能合约的契合,发布了白皮书《以太坊:下一代智能合约和去中心化应用平台》,并一直致力于将以太坊打造成最佳智能合约平台,所以比特币引领区块链,以太坊复活智能合约。
智能合约程序不只是一个可以自动执行的计算机程序:它自己就是一个系统参与者。它对接收到的信息进行回应,它可以接收和储存价值,也可以向外发送信息和价值。这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。
智能合约模型:它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。
以下是一个简单的智能合约的金融应用:
假设Alice想确保她的资金安全,但她担心丢失或者被黑客盗走私钥。她把以太币放到和Bob签订的一个合约里,如下所示,这合同是一个银行:
Alice单独每天最多可提取1%的资金。
Bob单独每天最多可提取1%的资金,但Alice可以用她的私钥创建一个交易取消Bob的提现权限。
Alice 和 Bob 一起可以任意提取资金。
一般来讲,每天1%对Alice足够了,如果Alice想提现更多她可以联系Bob寻求帮助。如果Alice的私钥被盗,她可以立即找到Bob把她 的资金转移到一个新合同里。如果她弄丢了她的私钥,Bob可以慢慢地把钱提出。如果Bob表现出了恶意,她可以关掉他的提现权限。
什么是以太坊
以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin受比特币启发后提出,大意为“下一代加密货币与去中心化应用平台”,在2014年通过ICO众筹得以开始发展。
以太坊不仅是一个数据库,它还允许你在区块链的可信环境中运行程序。以太坊在区块链上搭建了一个名为 EVM(Ethereum Virtual Machine,以太坊虚拟机)的虚拟机。EVM 允许在区块链上验证和执行代码,为代码在每个人的机器上以相同方式运行提供保障。这些代码包含在智能合约中。除了追踪账户余额,以太坊使用相同方法将 EVM 的状态保存在区块链上。所有节点处理智能合约,来验证合约本身及其输出的完整性。
钱包地址和交易密码
钱包地址:
用钱包地址就是由私钥通过椭圆曲线加密生成公钥, 进而生成地址, 用户在进行转转账交易时, 需要将地址出示给转币方。需要用户知道的是, 私钥可以推导出地址, 但是地址不能推导出私钥。
交易密码:
在创建钱包时会提示你设置密码,这个密码就是你的交易密码。同时这个密码会加密钱包私钥产生你钱包的 Keystore。如果你想修改交易密码或找回交易密码, 只能通过你之前备份的相应助记词或者是明文私钥, imToken 是去中心化钱包, 无法提供密码找回业务。
区块链基本特性
区块链具有去中心化、不可篡改、不可逆、匿名等特性。
去中心化:因为整个网络没有中心统治者。系统依靠的是网络上多个参与者的公平约束,所以任意每几个节点的权利和义务都是均等的,而且每一个节点都会储存这个区块链上所有数据。即使该节点被损坏或遭受攻击,仍然不会对账簿造成任何威胁。
不可篡改:确保信息或合约无法伪造。账簿在某个人或某几人手上,造假的可能性就非常高,但每个人手里都有一本账簿,除非整个游戏里超过 51% 的人都更改某一笔账目,否则任何的篡改都是无效的,这也是集体维护和监督的优越性。
不可逆:区块链上的信息必须不可撤销,不能随意销毁。系统是开源的,整个系统都必须是公开透明的,因此某笔交易被全网广播以后,达到 6 个确认以上就成功记录在案了,且不可逆转不可撤销。注: imToken 是 12 个区块确认。
匿名性:各区块节点的身份信息不需要公告或验证, 信息传递可以匿名进行。举个简单的例子, 就是你在区块链上向一个钱包地址发起交易, 但是却无法知道这个地址背后确切对应的是那一个人, 或者你的私钥被某一个黑客盗窃了, 无法从一个钱包地址中得知黑客是谁。
什么是助记词
助记词是明文私钥的另一种表现形式,最早是由 BIP39 提案提出,其目的是为了帮助用户记忆复杂的私钥。助记词一般由12、15、18、21个单词构成,这些单词都取自一个固定词库,其生成顺序也是按照一定算法而来,所以用户没必要担心随便输入 12 个单词就会生成一个地址。任何人得到了你的助记词,可以不费吹灰之力的夺走你的资产。所以在用户在备份助记词之后,一定要注意三点:
-
尽可能采用物理介质备份,例如用笔抄在纸上等,尽可能不要采用截屏或者拍照之后放在联网的设备里,以防被黑客窃取;
-
多次验证备份的助记词是否正确,一旦抄错一两个单词,那么将对后续找回正确的助记词带来巨大的困难;
-
将备份后的助记词妥善保管,做好防盗防丢措施。
什么是 Keystore
Keystore 文件是以太坊钱包存储私钥的一种文件格式 (JSON)。它使用用户自定义密码加密,以起到一定程度上的保护作用,而保护的程度取决于用户加密该钱包的密码强度,如果类似于 123456 这样的密码,是极为不安全的。
在使用 Keystore 时有两点需要注意:
-
使用不常用,并且尽可能复杂的密码加密 Keystore 文件;
-
一定要记住加密 Keystore 的密码,一旦忘记密码,那么你就失去了 Keystore 的使用权,并且 imToken 无法帮你找回密码,所以一定要妥善保管好 Keystore 以及密码。
Keystore 的样式
什么是区块链
区块链(Blockchain)是由节点参与的分布式数据库系统,起源于比特币,最早在2008年中本聪提出。区块链是由一串使用密码学方法产生的数据块组成的,每一个区块都包含了上一个区块的哈希值,从创始区块开始连接到当前区块,形成一条区块链。每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希值是未知的。这些特征使得比特币的双花非常困难。
区块链分为公有链、联盟链和私有链。
公有链:全世界任何人都可以读取、发送交易进行有效确认、任何人都能参与其共识过程的区块链, 典型应用包括比特币、以太坊等。
联盟链:指参与区块链的节点是事先选择好的, 节点间通常有良好的网络连接等合作关系, 区块链上的数据可以是公开的也可以是内部的, 为部分意义上的分布式,可视为” 多中心化 ”。典型应用包括 Hyperledger、R3 和 EEA 等。
私有链:参与节点只有有限的范围,比如特定机构的自身用户等,数据的访问及使用有严格的权限管理。
在区块链发展的早期,基础协议就是为了实现单一的支付功能。随着以太坊平台的出现,区块链进入2.0 时代,完备的底层协议和智能合约的概念,开发者无需深入区块链的底层协议,也可以开发各式各样的去中心化应用 (Dapps)。
区块链共识机制
什么是 PoW?
PoW:工作量证明 (Proof of Work,简称 PoW ) ,简单的解释就是一份证明,用来确认你做过一定量的工作。因为监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,都是通过检验结果的方式所取得的证明。这就是说,你获得多少币,取决于你对挖矿贡献的有效工作。简单的理解,你电脑性能越好,你获得的收益就会越多,这就是根据你的工作量来执行币的分配。大部分的数字货币,比如比特币、莱特币等等,都是基于 PoW 模式的虚拟货币(算力越高、挖矿时间越长,你获得的币就越多)。
什么是PoS?
PoS:PoS 是一种在公链中的共识算法,可作为 PoW 算法的一种替换。PoW是保证比特币、当前以太坊和许多其它区块链安全的一种机制,但是 PoW 算法在挖矿过程中因破坏环境和浪费电力而受到指责。PoS 试图通过以一种不同的机制取代挖矿的概念,从而解决这些问题。
PoS 机制可以被描述成一种虚拟挖矿。PoS 主要依赖于区块链自身里的代币。在PoW 中,一个用户可能拿 1000 美元来买计算机,加入网络来挖矿产生新区块,从而得到奖励。而在 PoS 中,用户可以拿 1000 美元购买等价值的代币,把这些代币当作押金放入 PoS 机制中,这样用户就有机会产生新块而得到奖励。在 PoW 中,如果用户花费 2000 美元购买硬件设备,当然会获得两倍算力来挖矿,从而获得两倍奖励。同样,在 PoS 机制中投入两倍的代币作为押金,就有两倍大的机会获得产生新区块的权利。
什么是 BTC?
比特币(BitCoin)的概念最初由中本聪在 2009 年提出,根据中本聪的思路设计发布的开源软件以及建构其上的 P2P 网络。比特币是一种 P2P 形式的数字货币。点对点的传输意味着一个去中心化的支付系统。
比特币不依靠特定机构发行,它依据特定算法,通过大量的计算产生,比特币使用整个 P2P 网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保各个环节安全性。P2P 的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。基于密码学的设计可以使比特币只能被真实的拥有者转移或支付。这同样确保了比特币所有权与流通交易的安全性。比特币总数量有限,被永久限制在 2100 万个。
比特币挖矿及矿工费
比特币挖矿是增加比特币供应的一个过程。挖矿同时还保护着比特币系统的安全,防止欺诈交易,避免“双重支付”,“双重支付”是指多次花费同一笔比特币。矿工们可以通过为比特币网络提供算力来换取获得比特币奖励的机会。
矿工们在挖矿过程中会获得两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费。为了得到这些奖励,矿工们争相完成一种基于加密哈希算法的数学难题,这些难题的答案包含在新区块中,作为矿工的计算工作量的证明,被称为“工作量证明”。该算法的竞争的机制以及获胜者有权在区块链上进行交易记录的机制,这二者是比特币网络安全的基石。
矿工们同时也会获取交易费。每笔交易都可能包含一笔交易费,交易费是每笔交易记录的输入和输出的差额。在挖矿过程中“挖出”新区块的矿工获胜者可以得到该区块中包含的所有交易“小费”。目前,这笔费用占矿工收入的 0.5% 或更少,大部分收益仍来自挖矿所得的比特币奖励。然而随着挖矿奖励的递减,以及每个区块中包含的交易数增加,交易费在矿工收益中所占的比重将会逐渐增加。在 2140 年后,所有矿工的收益将由交易费构成。
比特币的秘钥、地址和钱包
比特币的所有权是通过数字密钥、比特币地址和数字签名来确立的。数字密钥实际上并不是存储在网络中,而是由用户生成并存储在一个文件或者一个简单的数据库中,称为钱包。存储在用户钱包中的数字密钥完全独立于比特币协议,可由用户的钱包软件生成并管理,而无需区块链或者网络连接。密钥实现了比特币的许多有趣特性,包括去中心话的信任和机制、所有权认证和基于密码学的安全模型。
每笔比特币交易都需要一个有效的签名才能被存储在区块链。只有有效的数字密钥才能产生有效的数字签名,因此拥有了比特币的密钥副本就相当于拥有了该账户比特币的控制权。一个比特币钱包中包含一系列的密钥对,每个密钥对包含一个私钥和一个公钥。公钥就像银行的账号。而私钥就像控制账户的PIN码或支票的签名。比特币的用户很少会直接看到数字密钥。一般情况下,他们被存储在钱包文件内,由比特币钱包软件进行管理。
什么是 BTC 私钥?
私钥是一个数字,通常是随机选出的。一个比特币地址中的所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币所必需的签名以证明资金的所有权。私钥必须始终保持机密,因为一旦泄露给第三方,相当于该私钥保护之下的比特币也拱手相让了。私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远消失。
什么是 BTC 地址?
有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数产生一个公钥,这是个不可逆转的过程。有了公钥,我们就可以使用一个单向加密哈希函数生成比特币地址。
一般情况下,比特币地址由一个公钥生成并对应这个公钥。比特币地址就像支票上的支付对象的名字(即“收款方”),这样一来,比特币地址把收款方抽象起来了,使交易的目的地更灵活,就像支票一样。比特币地址是用户经常看到的密钥的唯一代表,他们只需要把比特币地址告诉其他人即可。
什么是钱包?
钱包是私钥的容器,通常通过有序文件或者简单的数据库实现。比特币钱包只包含私钥而不是比特币。每一个用户有一个包含多个私钥的钱包。钱包中包含成对的私钥和公钥。用户用这些私钥来签名交易,从而证明他们拥有交易的输出(也就是其中的比特币)。比特币是以交易输出的形式来存储在区块链中。
隔离见证 SegWit
什么是隔离见证?
隔离见证, 英文全称 (Segregated Witness, 简称: Segwit), 最早由比特币核心开发者 Pieter Wuille 在 2015 年提出。它是目前比特币应对扩容比较好的解决方案。支持隔离验证的钱包地址统一以数字 “3” 开头, 与多重签名钱包保持一致。
隔离见证的好处
- 更好的安全性。
- 可以增大区块容量。
- 检查交易更快速。
- 交易手续费会比普通地址类型 (以 1 开头的地址) 更便宜。