ethereumj教程

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替换成新语言“Solidity”)
  • 数据层(mysql替换成区块链)

而java,充当了类似操作系统的区块链架构平台,一个可以执行代码的超级系统,并且这个操作系统已经默认帮你准备好了一个不可篡改的区块链数据库。也就是说,你用Solidity写好你的逻辑,提交到java里面,然后java解析你的Solidity语法,进行逻辑处理,之前写mysql的数据默认会保存到区块链上,从而使得你写的程序,天然就具有不可篡改性。

也就是说,以后所有的程序员,都只需要写逻辑和界面,区块链超级系统已经给你准备好了一个可执行合约代码的操作系统了,底层默认是不可篡改、可追溯的分布式数据库了。

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

区块链3.0

区块链2.0的问题:

1、并发(并发很低,无法大规模使用。)
2、存储(每个人的账本都是一模一样的,随着时间的推移,账本越来越大。个人电脑的存储是不够用的)

解决以上问题,就是区块链3.0

为什么现在只有金融行业最广泛,也是因为存储,你只能存储交易数据,其他的海量数据无法存储。个人电脑的硬盘一般都是500G,少数1T,那分分钟就写满了。

所有,海量信息无法接入到链上去。

当解决了存储和并发问题,那么万物互链的时代就到来了,任何信息都是可追溯的,任何信息都是可靠的。说到这里,有人问了,如果我源头信息就是错误的,那区块链里面存储的信息就是假的了,是的,但是你造假的时候掂量一下,这些假信息一旦写上去,不像数据库删除就行了,但是区块链就永远删除不掉了,秋后算账,你不得掂量掂量,慌不慌?







发表于: 7月前   最后更新时间: 1月前   游览量:3504
上一条:
下一条: 运行 Ethereum-Harmony

评论…


  • 评论…
    • in this conversation