区块链入门级别认知(blockchain)
区块链入门级别认知(blockchain)
前言:今天参加了迅雷关于区块链的大会,学习和感受总结一下
之前的认知在:几个混迹互联网圈关于区块链 耳熟能详的 热词 “比特币” “区块链” “挖矿” ,知道的是有人从比特币或者相关虚拟货币中暴富。然后相关资源媒体不断炒概念,蹭热度公司出现了区块链项目,甚至还有区块链牙刷“边刷牙边挖矿,获得爱牙币还能兑换成牙刷,牙线等产品或者服务”。。。
通过今天在大会上的学习,首先拎清了几个事实:
(1)没错,会有人从区块链上的虚拟货币有贫穷限制想象的获利。或者“炒币”的相关行为 这是“币圈”。
(2)区块链技术会使各行各业受益,那么这是“链圈”。今天讲的就是“链圈”的事
(3)不会我今天来了一趟,我就牛逼了。。。
以下从区块链技术常识,技术认知,产品认知三方面进一步了解
一 区块链技术常识
(1)为什么使用区块链 why
能够实现:彼此不信任的情况下,不受地区所限制,可以是在世界各地,实现共享数据和传递价值
金融圈里形容这种“信任”是一种“交易对手风险(the counterparty risk)”:另一方不愿意承担交易的风险。
即这种风险就是对方不遵守契约精神的风险
区域链的优势就在于:通过一个革命性的数学、密码学和点对点网络系统彻底消除了“交易对手风险(mathematics, cryptography, and peer-to-peer networking)。
(1.1)历史证明区块链的重要性
在20世纪60年代,出现了第一个计算机化的数据库。随着硬件占据多个房间和互联网几十年,数据自然存在于中央,物理位置。这是一种集中式方法(Centralized ),意味着数据的位置和访问权限由中央权威机构控制。
集中式系统(Centralized systems)可以从内部或外部进行操作,因此我们必须信任这些系统的拥有者有足够的意愿和资源来保持其数据的安全性和完整性。集中式数据库仍然是最常见的今天,供电我们的大多数在线和离线应用程序。
自托管博客(A self-hosted blog )是集中式数据库的一个常见示例。所有者可以潜在地编辑事后或审查用户无追索权的帖子。另外,黑客可以侵入服务器并进行恶意行为。如果没有数据库备份,则逆转损坏是不可能的。
(1.2)共享数据
共享大量数据既昂贵又麻烦。我们可以通过跨多方分发数据来减轻这种负担。读写被组(group)的一个或多个部分控制,因此也会受到与集中式数据库类似的坏数据( corrupt data)影响。
现代共享数据库使用技术来减少这种坏数据。其中一些与区块链重合。根据共享数据库系统,它可能具有以下特点:
不变性( Immutability):与其重写旧数据,不如用保留的旧数据作为历史记录创建新副本。这个记录可以被用来证明在某一时刻存在的一段数据。
一致性(Consensus) :为了共享数据库,各方必须就其内容达成一致。达成一致共识的方法多种多样,其中一项(工作证明)将在下文讨论。
(2)什么是区块链 what
区块链是一个共享的数据库,由事务(交易)(transactions)的分类帐组成。就像一个银行,简单的连锁店的分类账跟踪货币(在这种情况下,加密)所有权。与集中式银行不同,每个人都有一个分类帐的副本,可以核实对方的账户。每个带有副本的设备都被称为“节点”。
区块链通过以下方式消除了影响其他数据库的信任问题:
完全去中心化:(Full decentralization)读取/写入数据库是完全分散和安全的。没有单独的个人或团体控制区块链。
极端容错:( Extreme fault tolerance)容错是系统处理坏数据( corrupt data)的能力。虽然容错并不是区块链特有的,但它将概念带到了逻辑的极端,因为每个共享数据库的帐户都验证了它的变化。
独立验证:( Independent verification)事务可以被任何人验证,而不需要第三方。这有时被称为“去中介化”。
(3)区块链如何工作 how
区块链网络中的帐户之间的交互称为“事务(交易)”(transactions)。它们可以是货币交易,例如在以太币(Ether 代码 ETH)传送中使用的加密货币。它们还可以传输数据,比如评论或用户名。一组事务(交易)(transactions)被称为“block”。
区块链上的每个帐户都有一个惟一的签名,它让每个人都知道是哪个帐户发起了事务(交易)(transactions)。在公共区块链上,任何人都可以读或写数据。读取数据是免费的,但是写入公共块链不是。这种成本,被称为“gas”,定价在以太币(Ether 代码 ETH),有助于阻止垃圾邮件和支付网络安全。
矿业/采矿 Mining
网络上的任何节点都可以通过一个名为“挖掘”的过程来参与保护网络。选择成为矿工的节点竞争解决数学问题,这些问题保护了一个区块的内容。
由于采矿需要计算能力(更不用说电力成本),矿工可以得到补偿。竞赛的获胜者将获得一些加密货币作为奖励。这就激励了节点的工作,以确保网络的安全,防止太多的权力落入任何单个的矿工手里。
哈希Hashing
一旦一个新的区块被开采,其他的矿工就会被通知并开始验证并将这个新的区块添加到他们的链副本中。这是通过加密哈希(或简单的“哈希”)完成的。哈希是一个单向过程,它接收数据并返回一个固定长度的字符串来表示数据。
虽然原始数据不能从其散列中复制,但相同的数据将始终产生相同的散列。因此,未经验证的数据可以用相同的函数进行散列,并与原始数据进行比较。如果它们是相同的,则验证数据。
一旦超过半数的矿工确认了新的区块,网络就已经“达成共识”,这个区块成为区块链永久历史的一部分。现在,所有节点都可以下载该数据,并确保其有效性。
下面是整个过程:
(1) (2)
(3) (4)
(5)
递进层次,专有名词,关于以太坊区块链(Ethereum Blockchain)
(1)以太坊(Ethereum)
Ethereum是一个区块链,允许你在其可信的环境中运行程序。这与比特币区块链(Bitcoin blockchain)形成了鲜明对比,后者只允许你管理加密货币。
为此,Ethereum有一个虚拟机,称为Ethereum虚拟机(EVM)。EVM允许在区块链上验证和执行代码,提供保证它将以相同的方式在每个人的机器上运行。这段代码包含在“智能合约(smart contract)”中。
除了跟踪帐户余额,Ethereum在区块链上维护EVM的状态。所有节点都处理智能合同,以验证契约的完整性和它们的输出。
(2)智能合约(smart contract)
智能合约是在EVM上运行的代码。是以太坊最重要的技术贡献。智能合约可以接受并存储以太币(Ether 代码 ETH)、数据或两者的结合。然后,根据智能合约中的逻辑,它可以将该以太币分配给其他帐户,甚至是其他智能合约。
这里举例Bob和Alice的签订一个智能合约例子。爱丽丝想雇鲍勃为她建一个天井,他们用一个契约合同(一个可以储存钱的地方,直到一个条件得到满足)在最后的交易前储存他们的以以太币(Ether 代码 ETH)。
(1) (2)
(3)
(如果鲍勃不能建造天井,或者他的工作表现不佳,Bob可以向Alice提供抵押金。可以把这个作为条款写在合约代码中)
二 技术层面
(1)智能合约的编程语言:Solidity
Solidity是针对智能合约设计的一⻔高级编程语言,运行环境是EVM(Ethereum Virtual Machine)。语言设计实现中受到了C++/Python/JavaScript的影响。 Solidity是强类型语言,支持继承、多态、接口、抽象、库、自定义数据类型等特 性。Solidity支持汇编指令编程,代码编译为字节码后运行在EVM上。Solidity是 当下最流行的智能合约开发语言,也是迅雷合约平台推荐和支持的语言。
(2)使用truffle 开发合约
truffle 提供了一套完善的开发、调试、编 译、部署、测试的本地环境。 可以使用模板命令unbox根据一些模板快速 生成对应的合约架构。
我们结合solidity的学习,学习使用 truffle 框架 。使用truffle develop在本地区块链环境下运行合约。
Truffle:开始创建一个自己的 dapp ,测试,部署到上链到以太坊网络的最好选择
(3)以太坊网络 Ethereum networks
到目前为止的讲解描述,都是在说以太坊的公共区块链,或者说“MainNet”。在MainNet上,包括账户余额和交易在内的链上的数据是公开的,任何人都可以创建一个节点并开始验证交易。该网络上的以太币(Ether 代码 ETH)具有市场价值,可以兑换其他加密货币或像美元一样的法定货币。
但也有其他的网络。事实上,任何人都可以创建自己的Ethereum网络。
(4)本地测试网络Local test networks
好多以太坊模拟器存在,这里推荐: Ganache 本地开发模拟以太坊区块链上的交易
(5)公测 Public test networks
开发阶段,在最终上线之前的网络测试中使用的以太币都是无价值的(only has no value)
广泛使用的三个公测网:
• Ropsten: The official test network, created by The Ethereum Foundation. Its functionality is similar to the MainNet.
• Kovan: A network that uses a consensus method called "proof-of-authority". This means its transactions are validated by select members, leading to a consistent four second block time. The supply of ether on this testnet is also controlled to mitigate spam attacks.
• Rinkeby: A testnet also using proof-of-authority, created by The Ethereum Foundation.
(6)私人/企业网络Private/enterprise networks
私有的Ethereum网络允许各方共享数据而不使其公开访问。一个私有区块链是一个很好的选择:
• Sharing of sensitive data, such as health care records
• Scaling to handle higher read/write throughput, due to the smaller network size
(7)分布式应用程序(dapps)Distributed applications (dapps)
使用智能合约进行处理的应用程序被称为分布式应用程序或者dapps
这些dapps的用户界面包括熟悉的语言,如HTML、CSS和JavaScript。应用程序本身可以托管在传统的web服务器上,也可以在分散的文件服务(如群集或IPFS)上。
dapps 为各行各业带来好处 :记录,金融,供应链,房地产,市场
迅雷 美女牛人 来鑫也是给大家出题涉猎方向,真是各行各业都能受益。
三.产品
最前面早期看到的区块链牙刷,甚至区块链马桶,是有点典型的蹭个热度。但是区块链现状是什么?迅雷CEO给了答案:
并且在圆桌会议上国家工信部吧电子标准区块链研究院主任 李鸣,说区块链有技术属性,社会属性金融属性,我觉得还有个精神属性,那就是大家说的就是啥也别管相信它就好了,听众都笑了,是的,当前面对的是对标准的制定和对安全的规范特别重要,当前国家的相关部门举措也是刚起步阶段。
接下来看看来鑫介绍的迅雷的技术栈
技术栈里每一个模块都有相对的专业技术组设计处理,简单的介绍背后藏着复杂的人员调度配合。了解这么多,其实一切的新技术都是在现有技术的基础之上的,迅雷之所以跑到行业前列,是因为,他们老早就有成型的体系,成熟的分布式系统,多方共享数据资源,他们一直在做的就是在夯实面临新技术的基本功,以技术驱动公司发展的一只脚早就跨过了门槛。然后还在想办法搜罗人才加入。。。
总结:
到底什么样的人和公司适合做区块链?圆桌会议上,几个大咖都表达了一下自己的看法,基本如下:
(1)技术角度:夯实基本功的开发者,动脑,勤快。区块链和起初的安卓,苹果刚出来没什么大区别。
(2)如果是混过“币圈”的,估计可以快速找到门道,搭出雏形,但是想真正走的长远是要靠区块链技术而不是简单的“币圈”经验
(3)感兴趣,对金融,计算机,管理有相关背景的人
(4)坐得住的人,这个我个理解就是,就是能踏实做事情的人,能够沉得住气,当时清华大学计算机系教授陈文光说,他见过往返于“币圈”和“链圈”的人,不能沉得住气,如果他只在链圈或者在币圈专研,成就一定比他反复转念更突出,影响更大
也许有一天,我们也需要做区块链,嗯,迅雷的CEO说,今天有专门人跑到会场找他,询问如何快速“上链”?他笑了,(我想潜台词应该是:冰冻三尺非一日之寒吧)
其实如果说公司的基础,我们现在做的也是在为以后打基础,我们公司的目标就是以后要成为一个数据服务公司啊,相关技术重叠性也非常强,现阶段我们就是要做好我们该做的就好了,每一步都扎实,在适合时机,做对应的调整。坚定信念不要怀疑。也是一种沉得住气。
参考:
1.http://truffleframework.com/tutorials/ethereum-overview#the-need-to-share-data //区块链入门基础 本博大部分理论来源
2.http://solidity.readthedocs.io/en/v0.4.21/index.html //学习solidity语言(solidityAPI)
3.http://truffleframework.com/ganache/ //本地开发模拟以太坊区块链上的交易
区块链入门级别认知(blockchain)的更多相关文章
- 区块链入门到实战(38)之Solidity – 条件语句
Solidity支持条件语句,让程序可以根据条件执行不同的操作.条件语句包括: if if...else if...else if 语法 if (条件表达式) { 被执行语句(如果条件为真) } 示例 ...
- 区块链入门到实战(37)之Solidity – 循环语句
与其他语言类似,Solidity语言支持循环结构,Solidity提供以下循环语句. while do ... while for 循环控制语句:break.continue. Solidity – ...
- 区块链入门到实战(36)之Solidity – 运算符
Solidity – 算术运算符 Solidity 支持的算术运算符,如下表所示: 假设变量A的值为10,变量B的值为20. 序号 运算符与描述 1 + (加)求和例: A + B = 30 2 – ...
- 安装比特币区块链钱包API(Blockchain Wallet用户发送和接收比特币的简单API)
区块链钱包API提供了一个简单的界面,商家可以用它以编程方式与钱包进行交互. 安装:要使用此API,您需要运行负责管理区块链钱包的小型本地服务. 您的应用程序通过HTTP API调用在本地与此服务进行 ...
- 区块链入门到实战(34)之Solidity – 变量
Solidity 支持三种类型的变量: 状态变量 – 变量值永久保存在合约存储空间中的变量. 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效. 全局变量 – 保存在全局命名空间 ...
- 区块链入门到实战(30)之Solidity – 基础语法
一个 Solidity 源文件可以包含任意数量的合约定义.import指令和pragma指令. 让我们从一个简单的 Solidity 源程序开始.下面是一个 Solidity 源文件的例子: prag ...
- 区块链入门到实战(28)之Solidity – 介绍
Solidity语言是一种面向合约的高级编程语言,用于在以太坊区块链网络上实现智能合约.Solidity语言深受c++.Python和JavaScript的影响,针对以太坊(Ethereum)虚拟机( ...
- 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发
智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...
- 区块链入门到实战(26)之以太坊(Ethereum) – 挖矿
以太坊(Ethereum)与其他公共区块链一样,使用工作量证明机制确保区块链网络正常运行. 矿工进行工作量证明计算,即挖矿,来选择区块,写入区块链,确认交易. 交易过程如下图所示: 从技术角度来看,以 ...
随机推荐
- codeforces #364b Cells Not Under Attack
比赛的时候 long long sum=n*n,计算不出1e10长度到数,没有搞掉. 哎,以后要注意这个地方.这个题其实不难: 统计能被攻击到的个数,然后用总的个数减掉就可以了.注意有些地方重复计算, ...
- nginx 中location和root,你确定真的明白他们关系?
最近公司开发新项目,web server使用nginx,趁周末小小的研究了一下,一不小心踩了个坑吧,一直404 not found!!!!!当时卡在location和root中,但是网上却比较少聊这方 ...
- Doing Homework again(杭电1789)
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- php做推送服务端实现ios消息推送
本文部分内容引用于 http://zxs19861202.iteye.com/blog/1532460 准备工作 1.获取手机注册应用的deviceToken(iphone手机注册应用时返回唯一值de ...
- python字符串连接的N种方式总结
python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2python 新字符串连接语法:str1, str2奇怪的字符串方式:str1 str2 ...
- php 远程调用redis
<?php $redis_conf = array ( "active_code"=>array( "host" => "14.29 ...
- 通知:spark meetup 第六次会议在北京举行
通知: Spark北京Meetup第六次活动(机器学习专题) 将于北京时间3月21日 下午14:00-18:00 在微软亚太研发集团总部大厦1号楼举行,主题包括: Julien Pierre Pr ...
- servelet 连接mysql
package helloworld; import java.io.IOException; import java.io.PrintWriter; import java.sql.*; impor ...
- Spring MVC多动作控制器
以下示例演示如何使用Spring Web MVC框架的多动作控制器. MultiActionController类用于在单个控制器中分别映射多个URL到对应的方法. 所下所示配置 - package ...
- eclipse 遇关键字enum编译问题解决
今天公司系统升级 JDK1.4 到 JDK1.5, 结果工程在eclipse中编译不能通过: Enumeration enum = ………… 但是eclipse报错: Multiple markers ...