ethereumj教程

半兽人 发表于: 2018-03-14   最后更新时间: 2018-08-16  
  •   0 订阅,1680 游览

Ethereumj是以太坊社区提供的Java版,本教程带领大家学习ethereumj。

用人类的语言讲什么是区块链、挖矿、智能合约

在开始学习之前,我先来带领大家认清区块链,网上讲区块链的文章很多,但是我觉得讲的太松散,不能瞄准核心。各位先别用技术的角度思考下列问题,技术是现实的映射,我会一一解释和映射,先从区块链1.0开始讲。

信任问题

  1. 银行是可信吗?
  2. 委内瑞拉政府是可信的吗?

中心化账本(银行)

账本存储在银行的中心数据库,上面写着:张三的A账号余额3000元,李四的B账号余额2000元。当张三想要通过A账号转账1000元给李四的B账号时:

  1. 张三到银行,向银行提交转账要求。
  2. 银行通过银行卡密码等方式确认张三身份,并检查张三的A账号是否有足够余额。
  3. 检查通过后,银行增加一条转账记录:A账号向B账号转账1000元,并修改余额:A账号余额=3000-1000=2000元,B账号余额=2000+1000=3000元

去中心化账本

假设有这样的一个小村庄,大家不是靠银行,而是自己用账本来记录谁有多少钱,每个人的账本上都写着:张三的A账号余额3000元,李四的B账号余额2000元。当张三想要通过A账号转账1000元给李四的B账号时

  1. 张三大吼一声:大家注意啦,我用A账号给李四的B账号转1000块钱。
  2. 张三附近的村民听了确实是张三的声音,并且检查张三的A账号是否有足够余额。
  3. 检查通过后,村民往自己的账本上写:A账号向B账号转账1000元,并修改余额:A账号余额=3000-1000=2000元,B账号余额=2000+1000=3000元。
  4. 张三附近的村民把转账告诉较远村民,一传十十传百,直到所有人都知道这笔转账,以此保证所有人账本的一致性。

中心化的问题

中心化的问题很多,最近的土耳其经济崩盘,还有委内瑞拉之前被美国制裁之后,不需要经过你的同意,就可以无穷无尽地印钞票,掠夺你的财富;你在银行的钱,实际上不是你的钱,而是银行对你的负债。你并不总能从银行里取出你的钱,银行有可能一天只允许你取60欧元(《希腊银行周一恢复营业 每人每天60欧元仍只能取60欧元》),甚至有可能强制没收你的存款(《塞浦路斯国家公然“抢劫" 大额存款部分或没收》)。

虽说私有财产神圣不可侵犯,但人们对此毫无办法。在区块链中这些劣行将不复存在,区块链是一个完全脱离银行,只依靠互联网运行的系统,即使是委内瑞拉政府执法部门,也无法查封或没收你的钱;除非彻底关停互联网,否则也无法封杀区块链网络。在区块链系统里,你能真正掌握你的钱,而不是通过银行间接掌握你的钱,区块链在人类历史上第一次用技术手段保证了私有财产神圣不可侵犯

重点:区块链最终解决的是“信任”问题。

区块链

区块链在现实场景中的解决方案,假设你是一个村民,你有一个本子,无论这一页是否写满,一天翻一页。

  • 第一天,第一页,张三2000元,李四3000元。 (一天过后,把第一页所有记账明细,通过某个数学公式,把所有明细加密,生成一个加密串“AAA”
  • 第二天:第二页,发生交易,张三1000元,李四4000元 (把第二页的所有明细,加上昨天的加密串"AAA",一起加密生成“BBB”
  • 第三天:第三页,同上

大家可以看到,第二天加密串需要依靠第一天生成的加密串一起得出来的,这样看,第三页依靠第二页,第二页依靠第一页。像不像个链。这种形式,就是区块链了,看起来像这样:
screenshot

因为这样的依赖关系,能做到什么?

  1. 如果某天,有个人想篡改之前的记录,那么就会导致整个验证都是失败的。
  2. 之前的记录都可以追溯。(我可以从第一页开始,看一个账户的整个资金变化)

定义

  • 广义:

     区块链是分布式数据存储,点对点传输,共识机制,加密算法等计算机技术的新型应用模式。
    
  • 狭义:

     区块链是数据库的一种。他拥有大量的记录,并将这些记录全部存放在区块内,每个区块通过加密签名,链接到下一个区块。人们可以像使用账本一样使用区块链,可以共享,也可以被拥有适当权限的人查阅,通俗的说,区块链其实就是公开的分布式账簿系统。
    

除了记资金,还能记任何信息,所以,区块链是一个防篡改、可追溯、可核验。一个任何人(包括创造者本身)和组织都无法篡改的分布式数据库

挖矿

村民实际就是个人电脑,那么我们凭什么开着电脑,花费着电费帮你记账?

奖励

一道穷举算力题,谁的算力高,谁解开的几率就大,这个奖励就给谁。

用上面的例子说法就是:参与记账的每个村民,每天翻一页之前,谁先算出这个答案,那么这天的所有交易的手续费和固定奖励都给这个村民。

这就是挖矿了。

智能合约

现在就涉及到技术了。如果你个程序员,那么,一般你都会用MVC设计模式,这样,你的程序分为3层。

  • 显示层
  • 逻辑层
  • 数据层(持久层,如mysql)

假设:你使用的是java语言,显示层用nodejs调用程序接口,进行展示和传参;持久层用mysql;逻辑层是java来验证和控制存储逻辑。

那么,智能合约 = 传统程序

假设, 你用java语言,创造了一个新的语言“Solidity”,你的java程序能解析Solidity的语法,进行逻辑处理。
那么,显示层用nodejs调用程序接口,进行展示和传参;持久层默认区块链(替换mysql了);用Solidity语言逻辑层来验证和控制存储逻辑。

  • 显示层
  • 逻辑层
  • 数据层(区块链,不可篡改)

java,充当了类似操作系统的区块链架构平台,一个可以执行代码的超级系统。

不好理解吗?我在详细解释一下。

比如游览器和js的关系,js可以在游览器中执行,假设,我们把游览器的能力提高一点,游览器帮你提供了缓存和存储能力,你写js代码的时候只需要关心逻辑就可以了,不用关心数据写到哪里去(平常你要存到mysql中)。你写好逻辑之后,直接提交就可以了,你的js代码会分发给全世界的游览器上,自动帮你执行你的代码。

那么,智能合约等于js,游览器就是你用java把区块链封装成默认数据库,并可以执行智能合约逻辑的图灵系统。

也就是说,以后所有的程序员,都只需要写逻辑和界面展示了,区块链超级系统已经给你准备好了一个不可篡改、可追溯的分布式数据库了。

这个就是令人激动的区块链2.0时代,这个技术创造让互联网迎来了信任时代。

未完待续







发表于: 5月前   最后更新时间: 3天前   游览量:1680
上一条: ECKey类源码分析 - ethereumj
下一条: Genesis类源码分析 - ethereumj

评论…


  • 评论…
    • in this conversation
      提问