君伟帆 发表于 2016-4-2 23:23:16

程序猿眼中的区块链技术

本帖最后由 君伟帆 于 2016-4-12 21:32 编辑

俺是个搞大数据分析的码农,最近一段时间朋友圈子里面聊到了区块链技术,也从JD上买了《区块链-新经济蓝图及导读》、《数字货币》等著作,但自己一直没搞懂区块链是啥,乘着这几天假期打算好好看看这东西,这个帖子就算是俺这三天的学习笔记吧,俺不太会关注宏观的东东,例如“去中心化”、“透明”、“信任”,俺就关注:区块链是什么,怎么运作的。本人属于新手上路,所以说的有啥不对的地方,欢迎拍砖。

比特币的知名度要远比区块链高,但比特币仅仅是区块链的一个应用,而且是第一个应用。为了搞清区块链,最好还是从已经稳定运行了6年多的比特币开始。比特币包含了两条链,一个就是区块链(blockchain),是实际存在的,另一个就是交易链(transaction chain),从某种程度上说是抽象存在的。可以说区块链是交易链的载体,下面俺先讲清楚区块链上跑的是啥信息。
和交易链有关的技术名词包括:私钥、公钥、数字签名、散列、输入、输出。
数字签名通过公钥和私钥来起作用,私钥用来创建数字签名,公钥用来进行验证。可以把私钥当成密码,把数字签名当成一个证明某人拥有这个密码的中介,使用数字签名就不需要密码持有人公布密码内容。公钥是公开的,是验证数字签名的工具。

在比特币交易中,公钥就是用户的转账地址,转账的人需要去证明自己是地址的实际拥有人(具有支配里面比特币的权限),证明的方法是使用私钥将交易内容生产一个数字签名。其他人就可以根据公开的公钥和公开的交易内容去核对数字签名是否正确。由于数字签名随着交易内容的不同而不同,所以不会被重复使用,同时为了通过公钥的验证,交易内容也不能被篡改。

比特币中是没有某个账户的收支情况表(balance sheet)这个概念的,一个账户可以支配多少比特币是通过追踪这个账户历史上所有的交易来验证的。这就是比特币交易中的输入(input)和输出(output)的概念,输入用于证明要转出比特币的账户拥有等于或多余转账金额的比特币,证明的方法是把该账户的部分历史(被转入比特币的)交易信息列出来。交易中接受转账的一方需要验证输入中列出的历史交易。这样每个交易涉及的比特币的历史交易记录都会被检查,这也就是在首次安装比特币客户端时需要下载比特币历史交易记录并进行验证的原因。所有比特币的交易都是依赖于之前的交易,这样的依赖关系就构成了交易链(Transaction Chain)。

比特币在交易中使用智能合约(smart contract)的方式可以实现复杂的交易,具体的实现方式就是在交易的输出种使用脚本来编写交易的方式,也就是说,比特币交易的输出不是简单的一个接收比特币的地址信息,而是一个脚本写成数学谜题,可以把脚本当成是锁,开锁的方式就是脚本定义的内容。

比特币的匿名性非常好,具体实现上通过两点体现:一是可以通过TOR网络去访问比特币体系,这样除了公钥(也就是账户地址)外没有其他信息需要公开;二,账户地址可以在每次的交易之前重新生成,这样就避免了有人根据账户地址信息去追踪某个账户所有的收支数据(毕竟所以的交易信息都是公开的)。当然,由于每笔交易的输出中会需要使用签名来解锁,这就会导致账户在一定程度上被追踪,目前的研究人员也就是根据交易签名来研究比特币用户的行为。此外,为了防止有人通过账户地址识别出线下的身份,比特币系统允许离线生成交易使用的公钥。由于比特币账户地址的长度,从数学上就保证了出现重复地址的概率几乎不可能。

在具体的一个交易过程中接收方还需要防止“双花”(double spending),即需要确保输入中的比特币是没有在其他的交易种使用,比特币体系解决这个问题的方式就是彻查所有的历史交易。比特币体系中没有了每个账户的收支情况表,取而代之的是所有交易的清单。由于交易顺序(Transaction Order)的存在,这样的检查还是无法有效防止“双花”,这需要一种技术对交易的时间戳进行确认(公证)。比特币体系使用的技术就是基于区块链的“全网记账权争抢比赛”。

比特币体系将所有的交易按时间顺序进行分组,每个分组就是一个区块(Block),然后将区块进行连接,形成区块链(block chain),这个与之前描述的交易链不同,区块链用来确保交易的顺序,同一个区块内的交易被认为是同时发生的。

------------------------------------------------4月10日编辑的分界线--------------------------------------------------------------

比特币作为区块链的第一个实际应用存在了两大缺陷,使得银行等金融机构没有直接使用这项技术:
        第一个因素与比特币的扩展性以及成本有关:
(1)容量收到限制。比特币中每个区块最大容量为1MB,这就使得比特币每天所能处理的交易数量限定在了300000(按10分钟一个区块)。尽管区块的最大容量可能会变大,但这样的交易数量限制是金融机构应用该技术的重要障碍。目前存在与此有关的讨论,即在不增加区块链分支出现概率的情况下提高容量限制。
(2)交易成本。目前比特币的每笔交易是有交易费用的(这构成了目前矿工的一部分收入,在停止产生新的比特币后,将是矿工唯一的收入)。当然,这笔交易费用目前是可选的,然而如果交易费用过低可能会导致交易的确认过程被大大延迟(矿工有挑选区块中要包含哪些交易的权限),在交易量增加而区块的大小没有及时调整时会导致交易参与者为了及时被矿工确认交易而大幅度提高交易费用。
(3)无关信息过多。比特币在设计之初就不是为机构提供服务,所以区块中存储的信息很杂,如果机构要以比特币作为基础架构来进行系统建设将不得不处理大量的无关信息(比特币的机制要求必须对所有交易进行验证)。
        第二个因素是私密性与安全性:
(1)挖矿相关的风险。比特币为了保证去中心化网络的安全性而设计的挖矿机制(工作了证明)会给潜在的机构使用者带来如下风险:•交易确认时间的不确定性(理论上是服从均值为10分钟的泊松分布);•51%攻击的可能性(指的是如果攻击者具有超过挖矿网络中一半的计算能力,那么攻击者就具有改写近期区块中交易的可能性)。
(2)缺乏私密性。比特币一开始就规定了所有的交易都是对任何一个网络节点公开的,也就是说只要能接入到网络就可以查看所有的比特币交易。比特币通过允许变更交易的地址而在一定程度上保护了用户的隐私,使得比特币网络的用户不太容易被其他人追踪进而与现实世界中的身份进行对应。尽管如此,交易的金额是无法被隐藏的,比特币网络的参与者都有将来被人追踪的风险,这对于金融行业来说是很难接受的。
(3)过于开放。任何能使用英特网的人都能使用比特币网络进行交易,这就使得很多非法交易可以借助于比特币来进行,监管当局虽然在理论上可以规定参与机构只能与某些特定的参与者进行交易,但这就需要对每笔交易进核实与验证,这会使得交易流程很复杂。

----------------------------------------------------4月12日分界线--------------------------------------------------------------
阻止区块链的处理速度提高的的一个重要客观原因是网络延时,一个区块发布的时候从一个节点传播到另外一个节点需要时间,且这个时间和网络状况带宽都有关系,对共识影响很大。此外,为了防止分叉(英文是uncle)的出现也不能将区块的产生速度调解得过大(一旦时间过快,新的区块得不到有效传播会造成同时有多个不同区块在网络节点间传播)。
上述两个原因使得很难将使用POW(proof of work 工作量证明)算法实现共识的区块链的生成区块的速度降至5秒以下,目前正在探索的新方向是使用POS(proof of stake 权益证明)算法实现共识,这样能够实现在1秒内产生新的区块。
(待续)

far8008 发表于 2016-4-3 10:47:36

比特币的前景能说说吗?

君伟帆 发表于 2016-4-3 10:49:36

far8008 发表于 2016-4-3 10:47 static/image/common/back.gif
比特币的前景能说说吗?

比特币的思想还是太过于模仿黄金,所以我不看好比特币本身,而区块链技术将来会颠覆我们的生活

far8008 发表于 2016-4-3 11:08:34

君伟帆 发表于 2016-4-3 10:49 static/image/common/back.gif
比特币的思想还是太过于模仿黄金,所以我不看好比特币本身,而区块链技术将来会颠覆我们的生活

希望楼主能好好科普一下区块链技术,门外汉实在看不懂是啥意思?

loy_20002000 发表于 2016-4-3 15:42:22

支好小板凳听课。

水杉 发表于 2016-4-4 11:54:39

不管神马概念,最后目标一定是实物:土地、人、房子、资源等等,中间眼花缭乱的是手段。

健恒 发表于 2016-4-4 12:07:16

资本市场炒作的老手法,区块链涉及到的几块:p2p、加密、hash、时间戳,都是旧技术。
现在很多打着区块链旗号的跟比特币里定义的区块链 不是同一个东西,很多都是集中式控制,不是无中心化,各国央行想搞的数字货币 也都是受央行控制的集中化方案,我觉得只要国家存在,无中心化不受政府央行控制的数字货币就不可能存在。
不过借用p2p的思想来搞云存储是一个新思路。

君伟帆 发表于 2016-4-10 18:49:17

健恒 发表于 2016-4-4 12:07 static/image/common/back.gif
资本市场炒作的老手法,区块链涉及到的几块:p2p、加密、hash、时间戳,都是旧技术。
现在很多打着区块链旗 ...

是的,区块链或者说比特币并没有什么原创性的技术,都是已有技术的组合,我认为比特币的成功主要原因在于整个机制的设计,例如挖矿的时间与奖励机制,交易的处理过程等。

dkgeki 发表于 2016-4-11 21:53:07

君伟帆 发表于 2016-4-10 18:49 static/image/common/back.gif
是的,区块链或者说比特币并没有什么原创性的技术,都是已有技术的组合,我认为比特币的成功主要原因在于 ...

不过重点在于解决了多人之间记账的信用问题,所以不经由清算中心的交易成为可能,连带着还有各种探索中的其他应用

君伟帆 发表于 2016-4-12 21:32:01

dkgeki 发表于 2016-4-11 21:53 static/image/common/back.gif
不过重点在于解决了多人之间记账的信用问题,所以不经由清算中心的交易成为可能,连带着还有各种探索中的 ...

是的,以太坊的出现就是人们想构建一个基于区块链的应用平台,基于区块链的特性去开发各种应用。

玩钉耙的悟空 发表于 2016-4-14 22:28:55

听过上交所一个人的课,记住他的两个看法:

1,区块链应用有三个核心,密码、分布式系统和金融应用方案,满足2个以上才能叫应用。

2,最有可能实现应用的领域是银行间的转账,比如理财产品,一记账,二追溯资金来源。

君伟帆 发表于 2016-4-16 09:13:02

玩钉耙的悟空 发表于 2016-4-14 22:28 static/image/common/back.gif
听过上交所一个人的课,记住他的两个看法:

1,区块链应用有三个核心,密码、分布式系统和金融应用方案, ...

多谢大师兄分享。就国内目前的热情来看金融绝对是主力,包括银行、券商、期货等都热情高涨。我个人有个想法,认为基于开源系统和区块链的博彩系统才是最有可能成为替代比特币的下一代应用,传统互联网博彩(包括彩票)的公信力、支付的方便程度、个人隐私等痛点能通过开源系统和区块链得到很大的提升,目前我在尝试在第二代区块链(以太坊)上进行基础功能的尝试。

loy_20002000 发表于 2016-4-16 12:26:53

楼主的文章是总结性质的。像我这样的非技术人员看起来有些吃力呀,楼主能不能花点时间弄个科普版的。当然了,没时间或者不方便那就算了。

西溪老槐 发表于 2016-4-16 13:50:39

顶楼主一个。很好的科普贴。

君伟帆 发表于 2016-4-17 09:10:46

loy_20002000 发表于 2016-4-16 12:26 static/image/common/back.gif
楼主的文章是总结性质的。像我这样的非技术人员看起来有些吃力呀,楼主能不能花点时间弄个科普版的。当然了 ...

多谢支持,您的建议很好,我后续会添加一些描叙交易、挖矿的具体过程。

zjjydckw 发表于 2016-4-17 11:06:43

君伟帆 发表于 2016-4-17 09:10 static/image/common/back.gif
多谢支持,您的建议很好,我后续会添加一些描叙交易、挖矿的具体过程。

【漫画区块链:我和小明的2块钱恩怨情仇】国君通信宋嘉吉团队  http://mp.weixin.qq.com/s?__biz=MzAwNTAwOTA2MQ==&mid=2649987790&idx=1&sn=ef162f45af264a4153126282c4520686&scene=23&srcid=041353NJEWBrE197BsN9ghWx#rd

玩钉耙的悟空 发表于 2016-4-17 20:24:39

君伟帆 发表于 2016-4-16 09:13 static/image/common/back.gif
多谢大师兄分享。就国内目前的热情来看金融绝对是主力,包括银行、券商、期货等都热情高涨。我个人有个想 ...

在骗钱,金融市场里的区块链概念股票都是伪概念,勉强有点密码学的概念,几乎没有分布式系统。

除了公信力、便利、隐私,区块链应用需要两个突破,一,大,满足非常大的总量交易;二,快,满足速度非常快的峰值交易。

冰红茶 发表于 2016-10-16 04:44:42

这东西目前最适合的领域还是洗钱:lol
只不过目前bitcoin在这块还是不够完美,否则 光南美几个挨着美国的“商业公司”就足够支撑起所需要的资金量。
页: [1]
查看完整版本: 程序猿眼中的区块链技术