这篇文章通过是我自身对区块链,对EOS的理解写的,当然很多观点并不能保证其准确性。本文的目的就是给大家一个高屋建瓴的看法。不妥之处,欢迎指正。
区块链 & EOS的宏观认识
其实还有很多的问题,我写这篇文章,为的是让一个对区块链不了解的开发者也能对EOS有一个宏观的概念。
可以把区块链理解为一个分布式的"数据库",这里分布的意思是区块链网络里的每个节点(运行区块链程序的计算机)。区块链里的数据按块(块只是表述一种数据结构)存储着,一块连着一块,块与块之间都有着一些联系。至于为何要把数据按块保存,这个这里不做赘述,可以简单认为这是最佳选择。区块链的可信性有几点原因: 一方面 公众都可以运行这个“数据库”程序,保存这和其它节点一样的数据;每个节点都可以参与验证数据的正确性:如某某账号有多少钱;每次有一个节点被选中进行新数据块的打包,而被选中是有一定的代价的,这个代价很难被伪造。好了,基于以上的几点原因,再加上多节点之间的一些魔法般的共识算法,保证了每个节点都维护着一份可信的交易记录。这也就是区块链主要做的事吧。试想一下,你想伪造某个账号里面突然多了很多钱,传统的中心化的计算机中,你只要攻破中心服务器就行了,但是现在你攻破几个节点是没用的,因为大部分的节点还是正确的。
我们知道,通常的数据库软件,都有一个client,就是控制台连接;还有,很多数据库可以在其上执行一些脚本语言。比如mongodb的控制台就可以执行javascript;MySQL可以执行SQL语句。区块链上也可以。具体的细节我还不太确定。但可以肯定的是,EOS的node节点可以安装一些智能合约,符合权限的用户可以调用这些智能合约执行,然后改写区块链上面的数据。这里的智能合约就类似于SQL逻辑语句。 所不同的是,SQL逻辑只能改写它连接的那一个数据库,可是智能合约会改写网络上所有等价节点的相关记录。当然,每次这样的改写都是需要一些身份验证的,就像MySQL登录也需要密码一样。 在EOS的文档里,高大上的说,EOS系统可以看做是一个操作系统: This is achieved through an operating system-like construct upon which applications can be built. The software provides accounts, authentication, databases, asynchronous communication, and the scheduling of applications across multiple CPU cores and/or clusters. 好吧,其实也算是吧。 *为了简单,但不保证准确性的说*:EOS和传统的数据库,从宏观的角度说,区别在于EOS的‘SQL’语句虽然只运行在一台计算机(一个节点)上,但是它的改动通过验证后会同步到所有节点。也正是由于这个最大的不同,工程师们在保证数据准确性、安全性等基础上创造了很多高深的,至少是新的概念。
细枝末节
我也基本把区块链、EOS的宏观视角给接受清楚了,虽然吧,如果去看官方文档,不花点时间会觉得挺难理解的,但其实也就是那么回事。现在,稍微想象一下,这个EOS的宏观是怎么样的呢?你应该能看到一个多节点的网络结构,每个节点可以是一台计算机,当然如果一个计算机上面运行多个这个EOS的节点程序也可以的。这个网络上每个节点都互相连接着。此时有n个账户分别向不同的节点提交了一些提前通过验证的‘SQL语句组合’(智能合约)执行请求;然后就是多节点验证、通过、各种安排运行、节点之间同步数据。整个网络,一定的时间段内都有一个领导者,做着较为重要的工作——太具体我还懵逼中。
在EOS中,有三个东西常被涉及到,nodeos、cleos、keosd。nodeos就是数据库的server, cleos就是数据库的client,keosd是干啥的呢?在nodeos的账号中,需要两对公私密钥对。这是很麻烦的,也不好记的。所以就有了keosd这个东西,专门保存公私密钥对的。EOS里还有一个钱包的概念……所谓的钱包/钱包名,就是你某个账户的公私钥保存在keosd中的“位置”。想通过cleos连接nodeos进行一些数据操作,你需要的是一个注册好的账号。其实主要就是合适的公私密钥对。前面说了,公私钥保存在你设的钱包名那里。所以你只要用你的钱包密码解锁那个位置,cleos就自动的帮你把nodeos给连接上去了。这样就能做操作了,也不用你再去管理自己的公私钥。虽然我不确定,但是我想应该就是这样的,假如在某个钱包里,一般是default,保存上千个不同的公私钥对,然后用于多个多个账户。然后……其实就是一个钱包密码掌控了上千个账户。
上面的一段基本说清楚了EOS很多很多基础的东西,具体的操作还需要自行实现。在传统的数据库中,还有一个东西是必须的,就是开发语言的SDK。也就是直接用编程语言连接到nodeos,不要控制台的client cleos,keosd作为cleos衍生出来的产品,当然也不需要了,完全可以自己做好密钥对的管理。还真有,到nodeos的连接是通过restful实现的,简单说就是发送post、get请求。于是乎,我就有了一个小想法:写一个web服务,自己有一个传统数据库保存各种账号密码信息,eos的账号注册、账号余额展示、转账等等功能。每当一个用户登录到web,它可以进行转账等操作。具体的实现是:web在传统数据库找到客户的eos账号,然后web登录到eos,发送交易请求到nodeos,再返回结果。这样web的客户端就完全是传统意义上的“钱包”了。并且这个web可以帮助管理成千上万的客户。不知道能不能实现吧?
还有一个就是智能合约。eos的智能合约是通过wasm。wasm是一种可以在通用浏览器上面执行的一种预编译的代码。可以认为是一种语言吧,只是人是很难看懂的,直接可以在一些解释器,特别是浏览器上面执行。它的效率一般的会比js快。可以编译到wasm的语言目前有C++、 go、类似typescript的一个、kotlin? 总之,强类型的语言理论上都可以编译到wasm。以后会不会java、c#也来? 可以这么说,mysql上面有一个SQL的解释执行器,nodeos上有一个wasm的解释执行器。想要开发智能合约?官方推荐是C++。
我把区块链、EOS说的那么简单,会不会被打?