最近看了些以太坊的论文、书籍和代码,做个小小的总结。
任何技术的演进和要解决的问题都是相辅相成的,了解其背后的实际需求和设计理念,可以极大地帮助我们把握好其发展脉络。
那么,以太坊是为何而生呢?简单的说就是在比特币作为一种去中心化的加密货币流行后,除了进行转账交易,大家希望利把比特币背后的区块链技术应用到更多更复杂的领域,比如去中心化域名系统、存储系统、拍卖系统等,一些人尝试在比特币代码的基础上做修改,但是成本很高,又很容易破坏比特币原有的安全设计,为了解决这些需求,一个叫 Vitalik Buterin 的年轻人写了一篇以太坊白皮书,以太坊就此诞生。
有了明确的需求,然后是模型抽象,在以太坊白皮书中指出,以太坊各节点各自平等地传递匿名消息,共同维护一个状态集合,从这句话中我们提炼出几个关键词,平等(去中心化),匿名,共同,状态。
首先说说状态,简单说就是 Key-Value 集合,比如在比特币中 Key 是地址,Value 是余额,拓展开来,一个账户有个某个域名的使用权,一个账户拥有某个文件,一个账户拥有某个某家公司的股票,这些都可以抽象成 Key-Value模型,更进一步,程序本身也可以作为一种独立个体拥有某些状态,例如一个由构建的银行。接着问题来了,这个每个账户的状态由谁来负责维护呢,谁来写谁来读谁来存储呢?下面我们来介绍第二个关键词:平等(去中心化)。
我们在使用支付宝或者网盘软件的时候,数据存在他们的服务器上,我们所有的操作都通过他们的服务器处理。在以太坊的世界里,每个参与节点都是平等的,不存在中心节点,所以每个节点都可以存一份整体状态记录,即每个参与节点都可以看到其他节点的状态值,这听起来好像不太好,毕竟个人的账户余额是很私密的,那么如何让保护个人隐私呢,接下来我们聊聊第三个关键词:匿名。
在以太坊网络里,参与节点将转账、余额查询这些操作消息广播给附近的节点,收到消息的节点验证没有问题后再将该消息扩散给其他节点,直至整个网络都知道了这个消息,更新了他们自己本机的那份状态记录,这里涉及到两个问题,如何保证只有你才能将你的钱转给给别人和如何保证你的消息在传递的过程中没有被篡改,这里采用非对称加密算法,即每个参与者用私钥加密自己的操作信息和其哈希摘要,用公钥生成账户地址,这样每个接受信息的节点都会用公钥反解你加密后的操作信息和摘要,用摘要来验证操作信息没有被篡改,由于大家假设你的私钥是你私有保存的,所以只有你能加密操作,从而保证了只有你才能动你的钱,且由于公钥都是随机生成的,所以在可以很大程度上保证账户的匿名性。聊到这里,我们会想,如果我们用支付宝,他们会收各种手续费(发广告),他们有利可图所以会帮我们管理资金还要承担资产安全责任,那么在以太坊的网络里,大家都是平等节点,不会发什么广告,也不能随便收手续费,自然无利可图,没有利益,不会有节点愿意参与进来,费电费机器地处理其他节点的消息,况且没有中间节点,任何一个节点都有可能出现作恶或者软硬件故障,要推动大家都积极且诚信地参与进来,需要合理的奖惩机制,下面我们看看第四个关键词:共同。
正所谓 “天下熙熙皆为利来,天下攘攘皆为利往”,基于所有节点都只为自己的利益着想的假设,要推动所有参与节点积极且诚信地处理其他节点的操作消息,我们需要建立一种机制使得作恶的代价足够大,远比诚信的收益大,或者说诚信的收益足够大,大到不值得去作恶。首先,每一个参与处理其他节点操作消息的节点都可以在打包一个区块,有机会获得一笔资金奖励,由于可以自由选择要打包的操作消息,所以可以不打包那些想吃白食的即不付手续费的操作消息,这样一来发消息的节点就会按照市场价给点手续费,刺激一些节点积极参与处理操作消息即打包区块,修改状态记录。现在参与的积极性是有了,那么诚信如何保证呢,简单说就是让作恶的代价非常大,由于区块链每个新区块都要将前一个区块的摘要信息包含进去,所以只要控制好每个区块打包的难度,要想修改前面某个区块的内容,后面每个区块都得重新再算一次,且难度呈指数级上升,有人可能就问了,我要改了老的区块,后面的不要了不就好了,不行,在区块链的世界里,长度代表了付出的代价最多,所以大家只认可最长的那条链。由于修改某个区块无非就是把自己花钱记录给删了,并不能把别人的钱转到自己账户里,所以作恶的收益有限,但代价(算力)却是很大的,所以这个制度基本达到了我们的需求。
网友评论