比特币和以太坊的记账方式 UTXO和账户余额
第0章 引言
本文介绍比特币的核心概念UTXO,以及拿以太坊为实现相同的记账功能的账户制对比。
虽然这两个概念有很多文章介绍了,我希望描述的更易于理解。
第1章 银行账号的账户余额
你去银行里存钱,银行会给你建一个账户。银行账户在用户层面上呈现出来的是一个银行卡账号和用户的姓名,有了账户就可以记录用户存了多少钱。
在银行里账户的“物理实体”是这样的:用户的账户和余额使用一个数据库来存储,最简单的就是一张Excel表,比如:第一列是用户名,第二列卡号,第三列是存款金额……
用户账户上的余额调整实际发生的过程就是对数据库的更改。
很多科普比特币的文章就用银行账户来做类比,说比特币的地址就类似于银行账户,比特币地址后面的余额就相当于银行账户里的存款金额。这样理解是可以的,但涉及到比特币的底层设计时,就不是这样了。
第2章 比特币的UTXO
比特币本质上不是和银行的账户那样设计的。为了理解UTXO,我先讲一个故事。
在古代的欧洲,如果A要给B寄一个东西,又不想让邮递员偷看,就按下面的流程走。
第一步,A把要寄的东西放进一个箱子,并且加一把锁a。然后寄给B。因为加锁了,邮递员就不可能看到了。
第二步,B收到箱子后,又给箱子加了把锁b。再寄回给A。
第三步,A收到后,把锁a解开,然后再把带锁b的箱子寄回给B。这样B收到后就可以打开箱子了。
这就是古代的加密通信。
这个加密通信的过程总结来说是这样的:A给要寄的东西设置一个打开障碍,让这个障碍只有B的钥匙才能解开。
现在我们将上述过程全部电子化,搬到互联网上。因为在互联网上,B可以直接将自己的那把锁广播给A,可以省掉上述第一步。
A有一个电子文档要发给B,就可以这样干:
第一步,B直接通过网络将自己的电子锁发送给A。请注意,因为这一步没有加密,所以B的电子锁是所有在网络上的人都能看到的。
第二步,A拿到电子锁将文档锁起来,发给了B。因为文档加密了,所以虽然网络上的人都能看到加密后的文档,但无法解密。
第三步,B使用自己的电子钥匙解开加密文档,读到了明文。
电子加密通信结束。
这个电子加密通信的过程总结来说是这样的:A给通信内容设置一个查看障碍,让这个障碍只有B才能解开。
现在我们将上述电子加密通信改造成发送比特币。
A要发1个比特币给B,就可以这样干:
第一步,B直接将自己的比特币地址发送给A。请注意,发送过程是全网公开的,所有人都能看到B的比特币地址。实际上这个地址就是一把电子锁
第二步,A将B的地址当成电子锁,把自己的1个比特币,使用这把锁锁进去,然后将加密后的这个比特币发到互联网上去。请注意,全网所有人都是可以看到这个加密后的比特币的,但只有B有私钥(钥匙),所以只有B才能再次解开这个比特币,并且再次加密到别人的地址上。
A就这样完成了1个比特币的发送给B。
另外,在第二步中,A首先也是要用自己的私钥(钥匙)先将自己这1个比特币进行解密(这是上一个人发给A的加密过程)然后才能结合B的地址进行再加密。
A发送比特币给的过程总结来说是这样的:A给这个比特币设置一个解锁障碍,让这个障碍只有B(的私钥)才能解开。
所谓的UTXO就是只有B的私钥才能解开的这个东西,只B解开之前,这玩意就是未解锁状态,未解锁状态就是一个“未花费的钱”,比特币学术话语叫“未花费的交易输出”,英文叫unspend transaction output。
你有多少比特币,本质上就是你拥有多少UTXO。
第3章 UTXO的“物理实体”
上述是为了理解比特币UTXO的概念表述的过程,那UTXO具体的“物理实体”是啥样子呢?
UTXO具体是以数据的形式存在的,数据是存在比特币客户端里,任何一个比特币客户端都可以保存比特币网络上所有的UTXO,也就是所有人的比特币都是存在任意一个比特币客户端的。
一笔具体的UTXO,比如你的一个比特币,存储的数据主要代表了以下两个含义:
1一个数字,被命名为“聪”,这就是比特币的数量,1BTC=1亿聪。
2一个锁定脚本,就是第2章里描述的“解锁障碍”,如果谁想花这笔UTXO,就必须提供一个被满足“解锁条件”的数据,这个数据一般又叫着签名。
总结一句话,一笔UTXO就是“一个数字加一个锁定脚本。”
更具体一点,一笔UTXO在电脑里存的主要数据是以下四个部分:
1生成这笔UTXO的交易的txid;
2生成这笔UTXO的交易的输出序列号sequence。因为大部分交易是一个或多个输入,多个输出,第一个输入序列号是0,第二个是1。
3锁定脚本lockscript。
4是金额value
第4章 UTXO的好处
第一个好处是极端的安全。发送比特币就是一个先用私钥解密,再加密到目标公钥的过程,而接收比特币只需要提供一个地址。除非这套加密和解密的加密算法被破解了,否则不会出问题。这种加密算法是极端的安全的,如果加密算法被破解了,那全世界的银行什么的更加完蛋了,这种事发生的可能性是几乎不可能的。
第二个好处就是隐私。用户要是每笔交易都使用一个地址,那用户的资金是很难被追踪的。
第三个好处是非常大的可扩展性,这个要结合SPV验证、UTXO证明和UTXO分片这些理论来讲。这些内容目前的比特币(BTC和BCH)都是没有彻底解决掉的,如果解决掉了,比特币(BTC或BCH)是可以扩展到无限tps的。
第5章 以太坊的账户
相对于比特币的UTXO,以太坊的账户余额制就好理解太多了,你可以直接使用银行的账户来类比,非常准确。
以太坊的账户制就是一个代表特定用户的“地址”,可理解为银行卡号和用户名。当然这个“地址”是不计名的,不需要身份证的。这个“地址”后面就可以建一个值来充值以太坊的余额,地址还可以添加一些字段来充当“token的余额”,这就是为一个以太坊地址可以收非常多的各种币。
以太坊账户要发送ETH的过程是和比特币不一样的。以太坊这个系统是部署好一个“sent”函数,任何账户发送ETH都是向系统调用这个函数来完成。这就类似于银行改用户的余额就是使用数据的修改函数一样。以太坊系统验证账户发送ETH的过程是验证这笔交易是否是这个账户发出去的,用户使用“签名”的方式来证明是账户拥有者发送的交易。
第6章 账户制的好处
账户制比UTXO的好处很明显,可以节省大量的交易字节空间。账户制每笔交易都是只需要一个输入、一个输出和一个签名。UTXO是可能需要多个输入的,每个输入都需要单独签名,也可能需要多个输出,每个输出都需要锁定脚本。这样会大大增加交易的字节数量。
因为发送以太币是调用系统的sent函数,所以不需要在交易里留下“解锁脚本”和“锁定脚本”,而UTXO制相当于每笔交易都要写一遍“sent函数”,即在比特币系统里“sent函数”的代码是被重复填写无数遍的,这些全部是要记录在区块链里。而以太坊的sent函数的代码只需要部署到一个区块里,然后每一次发送交易,就去调用就好了,不需要重写代码。
账户制的另一个大好处就是可以编写复杂状态。
UTXO制的余额只有两种状态——花费或未花费。不存在50%花费这种概念。但以太坊的账户制就可以编写出花费条件,比如可以重写一个sent函数,让输入达到什么条件就发送多少币给输出,这样就可以实现各种状态。这就是有状态的智能合约的概念。你看EOS的ICO智能合约,实现了每隔23小时就可以向投ICO的地址发相应的代币,就知道以太坊的发送币可以编写出多少种可能性了。
比特币(BTC和BCH都一样)的脚本系统是无法编写出有状态的合约的,但以太坊就可以轻松编写出来。
第7章 结束语
比特币能够成功成为一种世界货币,UTXO居功至伟。
제니시스 CEO "공매도, BTC 하락 원인 아니다"
제니시스 CEO "공매도, BTC 하락 원인 아니다"암호화폐 전문 미디어 AMB크립토(AMBCrypto)에 따르면, 글로벌 최대 암호화폐 장외거래(OTC) 시장 중 하나인 제네시스...
블록체인 미디어 블록인프레스, BTC Media와 지분스왑 글로벌 미디어 기업과 파트너십 체결 - 신생 미디어 스타트업과 글로벌 미디어 기업간 이례적 파트너십 - 블록인프레스, 한국 시장 넘어 글로벌 진출 계기 마련
국내 블록체인 전문 미디어 블록인프레스와 세계적인 블록체인 미디어 BTC Media가 손을 잡는다. 양사는 14일 지분 교환(스와프)을 통해 파트너십을 맺고 국내외 독자들에게 블록...
중국 암호화지수에서 비트코인(BTC)이 17위로 추락한 이유는?
암호화폐 매체인 크립토베스트(Cryptovest)는 중국의 블록체인 평가단 리더와 만나 비트코인(BTC)의 순위가 왜 그렇게 낮은 순위에 있으며, 이오스(EOS)가 갑자기 30개의...