首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

22分钟搞懂比特币&区块链

2018年5月19日山东蓬莱

有一个词专门用来描述人们因担心错失什么而产生的恐惧,叫做“错失恐惧症”,英文缩写“FoMO”(Fear of Missing Out)。

前段时间(其实至少是半年前了)那铺天盖地的区块链与比特币刷屏,以及身边各种all-in区块链的朋友(例如ACM某大神?),有没有让你产生一种区块链错失恐惧?我也在这种焦虑当中决定探究一下比特币和区块链相关原理,现将我的学习内容分享出来,作为网上各种《9分钟搞懂区块链》、《X分钟入门区块链》的补充,希望能帮你解答更多在各种速成类文章中留下的未解之谜,争取让你彻底搞懂比特币和区块链是怎么回事儿。

为避免枯燥的技术细节让你过快的进入深度睡眠,这篇笔记只在稍微介绍必要的技术基础之后(稍稍具备《数据结构》基础即可阅读,实在不行别硬抗,直接跳到Q&A吧,读下去重要!),再以Q&A的形式来完成介绍,在A的过程中如有必要的理论基础再另行标注。我会尽可能的让非技术人员也可以读下去并有所收获。

读到这里你可能已经产生了第一个疑问:这篇文章到底是介绍比特币还是介绍区块链?两者的关系到底是什么?

答:区块链是比特币的实现方式,比特币是区块链思想的第一个应用。区块链的“块”里存储的就是比特币的交易记录。两者是紧密耦合的,不可能单独介绍其中一个而不涉及另一个,本文以介绍比特币为线索,如果介绍清楚了,那么区块链是怎么工作的也就不言自明了。

【注:稍严谨一点的说,比特币其实是比区块链更庞大的一个系统,区块链是比特币系统的一部分,参考比特币白皮书】

必要的技术基础

一.密码学-哈希函数(重要!不学习的话将无法理解挖矿的概念,无需技术背景

说有这么个函数y=H(x) ,对于任意的输入字符串x,在H(x)的内部,经过对x的加减乘除、求余、移位、截取等操作,得到一个[指定长度]的另一个字符串y。

这个函数有一个重要的特点:不可逆。已知x,可以得到唯一的y。但是已经y,无法计算输入的x是什么。这个并不难理解:因为输入x的位数并没有限制,而输出的y的位数是指定的(例如256位),假如你的输入x是257位,比输出多了一位,那么也就意味着输入的x的值的集合,必然比输出的y的集合更大,这样输入和输出之间的关系,一定不是1对1了,而是多对1。既然有多个输入x可以映射到同一个输出y,那么已知y的话,当然不知道输入的x是哪一个了,这就叫做不可逆。

举个例子,有一个算法叫MD5哈希加密算法,

令x=“隔壁老王”,

经过这个算法的计算,得到

各种网站的注册和登录,就是运用了某一种哈希加密算法,将你输入的明文密码(例如你的生日),经过哈希函数的计算,得到一个你看不懂的字符串,存入数据库中。这样即便是数据库泄露了,黑客得到了y,也无法[轻易]得到你的明文密码x是什么,将无法登录你的账号。

另一个应用是快速对比之前上传到云上的大文件,例如视频文件,下载下来后看是否有破损:保留hash值(这个输出是固定长度,虽然输入的文件会非常大),下载后对比其hash值,这里的哈希函数对于一个信息生成固定长度的摘要,或生成了简明总结,这为我们提供了一种记住之前所见事物,并在今后认出这些事物的高效方法。

以上就是密码学的核心思想。怎么样?是不是觉得so easy

当然,虽然已知哈希函数的输出y,并不能根据特定的反向的运算直接算出输入的x是什么,但是如果你有时间有耐心,也可以通过正向的不断尝试碰运气,兴许能碰出指定的y是不是。只不过这个过程需要尝试平均的次数太大了,大到一台计算机来暴力尝试的话,也需要不知道多少亿年的时间,以至于认为根本不可能做到。例如对于一个256位的输出y,一台电脑每秒计算10000个哈希值,平均也需要花10^27多年时间(平均需要尝试2^128次,这个不难理解)!

二.公钥&私钥

这个已经算不上一个技术课题了,只是比特币系统运行中涉及的一对重要概念。咱们先开门见山,说说两个概念的角色。

公钥:在比特币体系中又称为地址,用于标识一个账号的身份,对外公开,类似于银行体系中的储蓄卡卡号。知道了一个用户的公钥,就可以转移比特币给这个用户了。

私钥:类似于银行卡的密码,用于在交易时进行签名,来表示你是这些比特币的持有者,有权限进行这次交易。仅用户自己知道,不能对外公开,一旦公开其他人就可以随意操作转移你的比特币了。

—— 以下内容非技术人员酌情阅读

公钥和私钥是通过某种算法成对生成的:

(sk,pk):=generateKeys(keysize)

generateKeys方法把keysize作为输入,来产生一对公钥pk和私钥sk。签名过程是把一段消息(交易信息)和私钥sk作为输入,对应的输出就是所谓的签名:

sig: = sign(sk,message)

验证过程是通过把一段消息(交易信息)和签名与公钥pk作为输入,如果返回的结果是true,证明签名属实,交易有效;如果返回的结果为false,证明签名消息为假,交易无效

isValid:= verify(pk,message,sig)

verify( pk, message, sign(sk,message)) == true

三.梅克尔树/链表

-- 无计算机基础人员为不影响阅读体验,围绕图2适当了解即可

比特币系统将每一次交易,作为叶子节点两两分组,向上每个节点再存储它的两个叶子节点的哈希指针,层层向上,直到找到一个根节点,形成一颗二叉树,叫做梅克尔树。

如图(来源:比特币白皮书https://bitcoin.org/bitcoin.pdf)

图1

其中,每一个叶子节点中的Tx,包含了这些信息:

1.拉莫斯给萨拉赫转账了3个比特币

2.拉莫斯的这3个比特币,来自于交易0af23784

其中的“0af23784”是一个哈希指针,指向另一个交易的节点,而另一个交易节点里存存储的信息是:

1.C罗给拉莫斯转账了3个比特币

2.C罗的这3个比特币,来源于挖矿所得奖励/或来源于交易0bd23874…..

已知某一次交易的哈希值(即将这次交易的相关信息进行哈希计算得出一个字符串),想证明其隶属于某个梅克尔树,或不隶属于某个梅克尔树,都是容易的,时间复杂度均为log2N。

将梅克尔树中的所有交易信息,包括矿工的挖矿所得(一个没有输入的交易,输出地址就是矿工自己的地址,后面细说),以及上一个区块的哈希指针等信息,打包成一个新的区块(区块是逻辑上的概念,就像电脑中的文件夹一样),并将上述所有信息,都作为输入的组成部分,经过哈希运算,得到一个哈希指针,作为指向本区块的哈希指针,链接到现有区块链的头部(头部还是尾部不必纠结,这里就是指新区块生成的方向,新区块里面有指向上一个区块的哈希指针),形成一个链表,就是区块链。

整理一下:我们通过哈希指针构建一个链表,我们将这个数据结构称为区块链(block chain)。在链表中有一系列区块,每个区块既有数据(一颗梅克尔树)也有一个指向上一个区块的指针。如图2(我自己画的)

图2

四.分布式/去中心化

什么是中心化?就是有一个银行,来发行纸币、并帮你记录每一次交易信息,心情不好的时候可能会冻结你的账户

什么是分布式/去中心化?就是没有银行这个东西,由网络上的老张、老王、托尼老师、凯文老师等自愿的帮所有人记录每一笔交易。今天,老王记录了一系列交易(例如拉莫斯给萨拉赫转账了3个比特币等)后,把这一系列交易打包成一个区块(块里面是前面介绍的梅克尔树),广播给网络上的老张、托尼老师、凯文老师,以便达成网络上所有记账者的共识(即老张、托尼老师、凯文老师都认可拉莫斯给萨拉赫转账了3个比特,他们都是这笔交易的证人,会主持公道);明天,托尼老师又记录了一系列新的交易,并打包成区块后,连接到前一天老王记录那个区块的头部(不要纠结是头还是尾),并将整个链表广播给老张、老王、凯文老师以及新加入的苍老师等。虽然没有银行,但是所有人都认可区块链上的所有记录的交易,没人会赖账(这叫公众共识)。而这个存储交易记录的链表,就是我们的主角区块链了(如图2)。

比特币就是一个分布式,去中心化的数字货币系统。

好了,技术基础说的差不多了,也不敢再多说了,我猜已经有相当一部分读者读到公钥&私钥这里就已经放弃我了….或许我的猜测太乐观了…..

下面进入Q&A吧:

Q:什么是比特币?

A:一个叫中本聪的人发明的一种数字货币,不同于美元、人民币有国家信用做背书,比特币没有什么信用背书,完全是中本聪拍脑袋想出来的,唯一的信用来自于“公众共识”,即大家都认可它有价值,它就有价值。

另外跟黄金类似的是,其总量有限制,总量不会超过2100w个,后面再说具体怎么限制,当然跟黄金不同的是,黄金是实实在在存在的,其总量是大自然限制的,你改变不了;而比特币的总量是用人为制定的规则限制的,明天你心情好了改掉了这个规则也说不定呢….

Q:什么是区块链?

A:如前所述,是一个去中心化的分布式账本,以双向链表作为数据结构,技术基础的三、四两节已经描述的很清楚了。

需要补充的是区块链具有仅增特性,可以防篡改。那么它是如何防止篡改的呢?

--非技术人员酌情阅读

回到图2

1.每个区块里都存储了指向上一个区块的哈希指针,即一个哈希值(一个字符串)

2.指向每个区块的哈希指针是由这个区块内所有交易信息,上一个区块的哈希指针等作为输入计算得来的,交易信息的变化、上一个区块哈希指针的变化等,都会导致指向当前区块哈希指针发生变化。

3.网络上的每一个所有节点都可以验证每个区块哈希值的正确性,说白了大家都盯着整个区块链呢。

==>结果是,如果有人想要篡改区块链中任意地方的数据,为了保证整个内容一致,他将不得不进行一系列连锁的篡改直至链表头部。他最终将碰到障碍,因为他不能篡改链表头部的指针。这样,只要我们记住链表头部的哈希指针,我们就基本记住记住了整个链表的防篡改哈希值。

Q:比特币存在于什么地方?什么形态?谁有多少比特币是怎么记录的,有一个类似银行的账户么?

A:别想多了,看到图2没?那就是比特币交易系统的全部!就是在每个区块里,记录着“拉莫斯给萨拉赫转账了3个比特币,而拉莫斯的这3个币是从xxx来的”,“狗哥的这12.5个比特币,是挖矿得到的奖励”,That’s all。对于每一笔交易,所有矿工都可以追根溯源,验证其来源的合法,而所有比特币最终的来源只有一个:矿工挖矿的奖励。

也并不存在一个类似银行账户的东西,记录每个账号有多少余额,压根儿没有“余额”这个概念。

额外说明一点:我举的例子是为了让读者容易理解,实际的比特币是匿名的,没有拉莫斯,也没有萨拉赫,只有代表他们的一个个公钥,长得类似这个样子:0eb3be2db3a534c192be5570c6c42f59

Q:比特币的单位是什么?是否真的有一个一个的币?

A:不存在所谓“1比特币”这样的东西,比特币没有固定面额,不像美元。具体来说,没有“1比特币”这样的特别名称。比特币只不过是交易输出,在现在的规则里,它们可以是精确到小数点后8位的任意值。可能的最小价值是0. 000 000 01 BTC(比特币),我们称之为1个中本聪。没有一个具体意义上的比特“币”,只有未消费的支出,我们把它们叫作币

Q:什么是挖矿?怎么挖?

A:在技术基础-四里面介绍了,比特币的交易靠网络上的老张老王各种老师帮忙记账,并将一系列交易打包后广播给所有记账者,但四啊,打包可不是你想打,想打就能打。打包的权力是需要去争夺的,这个争夺打包交易的过程,就叫挖矿。

怎么挖呢?这就要用到前面的密码学-哈希函数知识了,还记得我们说过可以通过正向的不断尝试来碰撞出指定的y吧?想碰撞出指定的256位y,需要10^27年,但是我们可以降低点儿难度,我只要求输出的字符串y是以指定数量的连续的“0”开头即可,这样难度就大大降低了,具体需要多长时间,可以通过要求的数量来控制。

在新的区块中,有存储交易信息的梅克尔树,以及指向上一个区块的哈希指针,在区块的头部,还有一个32位的随机数区域,还有一个叫做“币基”的东西,把这几部分信息都用上,来组成一个字符串x作为哈希函数的输入,可以计算出对应的y。而挖矿所做的工作,就是尝试不同的临时随机数,直到该随机数能使得输入x的哈希函数值y小于目标值(即开头有足够的)。一旦找到这么一个临时随机数,你就可以将前几分钟发生的交易,打包成区块,放入区块链广播出去了。没错儿,就是这么无聊,这么费电,这么没意义,还美其名曰:工作量证明,哈希函数解谜……

Q:挖矿有什么奖励?

A:一旦你获得了一个区块的打包权,你将被允许在这个区块里加入这么一笔特殊的交易:这个交易没有输入,输出就是你自己的比特币地址,就是向你自己的账户里转入指定数量的比特币,这些比特币就归你了。这就是挖矿的奖励,也是比特币发行的唯一途径。

此外,每笔交易也有一定交易费(手续费)是给矿工的。

Q:每个人都在计算同一个谜题吗?

A:稍微仔细想一下就知道不是,最后的hash值是使用随机数,加上整个梅克尔树的各个节点的信息,包括顺序,两个不同的块是不可能完全一样的。另外每个矿工自己的地址也不一样,区块中要有给自己地址里放入奖励的交易呀,区块中但凡有一点儿信息不一样,计算的题目也就不一样了。

Q:大约多久产生一个新的区块?为什么?

A:对于比特币系统,大约10分钟产生一个区块,系统会根据当前全网的计算能力,动态调整难度,来保证平均每10分钟生成一个区块。为什么是10分钟呢?基本是拍脑袋订的,没开玩笑,就是拍脑袋订的,整个比特币系统里很多东西都是中本聪拍脑袋订的,后面还有呢

Q:比特币如何保证只有2100w个?

A:前两个问题说了挖矿的奖励,以及区块产生的速度。中本聪就规定了:最开始每打包一个区块,可以奖励50个比特币,每生成210 000个区块,该金额减半。根据区块生成的速度,我们不难算出,这个金额大概每4年减半一次,而且是一个最终会趋于的等比数列,这个等比数列的和,就是2100w个。

比特币第一个区块产生于2009年,我写这篇文章的时候处在第三个4年,当前每打包一个区块,可以获得12.5个比特币的奖励,后面我会给一个网站,随便打开一个区块,看看奖励是不是这么多。

Q:碰巧两个人同时打包出了不同的块怎么办(这个属于技术上细节问题了,非技术人员看心情吧)?

A:确实有这种可能,区块链可能随时会出现分叉,诚实的矿工需要遵守的规则是:捡那个最长的链条来扩展。这样的话,确实会产生一些无效的区块,里面的交易不会被纳入最终的区块链中,也就是无效的交易。一般来讲,一个区块被确认6次后(也就是这个块后面又追加了5个区块了),从概率上说,里面的交易已经大概率被坐实了。

Q:挖矿大概需要什么配置的计算机?需要多少空间?普通矿工挖到矿的概率怎么计算?

A:从最开始的CPU挖矿,到GPU挖矿,到专业集成电路技术挖矿…..总之普通个人电脑基本就不要想了。目前整个区块链交易数据所占空间大概在百GB级别,普通个人电脑倒是可以装下。至于挖到矿的概率,首先10分钟一个区块是已知的,于是就要看你的计算力占全网计算力的比例了,假如你的计算力占全网计算力的0.1%,大约平均1星期能挖到一个区块。

现实当中还有一些矿工合作起来形成的矿池,任何矿工挖到矿会共享奖金,每个人都可以降低完全百忙的风险,这个不细说了。

Q:比特币系统的处理能力?

A:硬性规定,每个区块大小限定在1MB,每个交易大约是250字节,所以每块最多容纳4000个交易。平均每隔10分钟,有一个矿工获得记账权利,所以每秒钟只能处理7个交易,这就是比特币网络的交易处理能力.

Q:2100w个比特币全被挖出来了之后矿工怎么办?拿什么奖励?

A:交易费

Q:比特币如何产生?谁来负责发行新币?

A:前面已经揭晓过答案了,矿工挖矿的奖励是比特币发行的唯一方式

Q:如果是这样的话,那最初的时候都没有比特币,也没有交易可打包,怎么产生比特币?

A:比特币的第一个区块是个特殊的区块,里面没有其他交易,只有一笔奖励交易,这个区块叫做创世区块,从此比特币就诞生了。当然你可能猜到了,这个区块是中本聪挖出来的。

Q:比特币使用的hash算法是什么[应该只有技术人员会关心]?

A:Secure Hash Algorithm 256,简称SHA- 256算法

Q:比特币是匿名的吗?真的可以彻底的隐藏身份吗?比特币的匿名属性是否会助长犯罪行为?

A:比特币的匿名严格来说应该属于“化名”(使用公钥做标识),但想与真实身份关联起来其实并不难,有很多途径可以,例如购物的时候,商家和买家之间显然知道了对方的身份、地址等,而且交易的过程还知道了你的比特币地址。即便没有这么明显,也总能在现实生活中通过交易行为找到一些蛛丝马迹,你的比特币终究要用于购买现实世界中的商品,换取现实世界中的货币,那么这个匿名系统与实名系统之间,总要有这么一个出口,可以将身份与比特币中的地址关联起来。

况且,在区块链货币中,所有交易都被记录在一个公共账本上,也就是说,这些记录都是公开的,并且可根据相关地址进行永久追踪,因此,你的比特币交易的隐私保护可能会比传统的银行更糟糕!传统的交易中只要银行不泄露你的交易信息,反而不容易被人追踪到。

至于助长犯罪行为,不是会不会,是已经发生了,例如著名的WanaCrypt0r 2.0(永恒之蓝)的比特币勒索病毒。

Q:比特币/区块链是否需要监管?

A:当然需要!不光需要监管,区块链技术还需要用社会主义核心价值观来做指导!

当市场失灵并带来大家一致认可的恶果时,监管可以介入,并解决这种失灵。由于市场并不总是给出最优的结果,所以我们说监管有时是有益的。脱离了监管就会出现典型的劣币驱逐良币的现象。

Q:数字货币最大安全问题是什么?如何避免?

--非技术人员酌情

A:双重支付。就是老王收到来自老张的3个比特币,他想重复利用,于是他先制造了一笔交易:老王给托尼老师转账3个比特币;又制造了另一个交易:老王给苍老师转账了3个比特币,这就是双重支付。

这两笔交易,如果被同一个矿工打包,这个矿工很容易验证出来,有两笔交易来自同一个输入,会判定其中一个交易无效(有效的挖矿节点需要维护一个完整的当前未被消费掉的交易列表)。如果被两个不同的矿工打包在两个不同区块里,那么这两个区块必然有一个区块会被废弃(参见前面的讨论),只有一个交易最终会被纳入长期共识链。注:防止双重支付攻击完全依赖于共识,密码学不起任何作用。从密码角度来看,这两个交易都是正当有效的,都有正当的来源,但共识可以决定哪个被放进长期共识链。最后,你无法百分之百保证你感兴趣的交易被放进了长期共识链。

从一个收款方的角度来说,你可能在网上卖出一件商品,对方选择用比特币支付,于是付款方发起了一笔交易,但买家是个坏银,后续可能发起了双重支付,导致这笔交易最后没有被留在长期共识链,而你又在对方发起交易后就发货了,最后人财两空。为了确保不被坑,需要等待付款方的这笔交易多被确认几次(就是前面提到的,这个区块后面再多被连接几个新的区块,因为诚实的矿工总会去挑选最长的那个链去扩展),一般来说,6次确认后,你基本已经没有犯错误的可能了。

Q:比特币交易所是个什么角色?

A:比特币交易所和银行有相似的地方。交易所可以办理比特币存款,日后需要用钱的时候,可以到交易所提款。你还可以把法定货币存到比特币交易所,交易所承诺日后会按照你的要求把钱——比特币或法币,或两者都有,还给你。也可以通过交易所办理类银行业务,例如,用比特币付款或收款。还可以通过交易所把比特币兑换成法币,或把法币兑换成比特币,交易所在该业务中通常起撮合作用,它们同时寻找愿意兑换法定货币和愿意兑换比特币的人,并安排他们作为交易对手,如果交易对手对于汇率达成一致意见,交易所就促成这笔交易。

值得注意的是,当你在交易所完成上述交易的时候,区块链上并不会立刻记录任何交易。交易所不需要在区块链里把比特币从一个地址转到另一个地址。交易所只是给你个承诺,承诺日后会还给你指定数量的比特币或法币,交易前后,比特币并没有真正在区块链中移动,只是你和交易所的合约变化了而已。确实有不少交易所由于存款到期无法兑付或其他问题而倒闭。

Q:区块链思想除了比特币,还能做些什么?

A:区块链可以应用于跨境支付、金融保险、知识产权保护、共享经济、游戏等领域。这种简单的罗列简直跟废话一样,连我自己都嫌弃……这里先举个例子吧:

假设我们想证明,申请专利的一些创意点子早就在我们头脑里存在。我们可以在产生创意的第一时间,就将设计文档或者示意图草稿在区块链里用哈希函数发表出来,即运用前面介绍的密码学知识,将你的文章经过哈希运算得到一个字符串,放入区块链,然后自己将文章保存好,不向任何人泄露这个创意的具体内容。之后,当我们提交专利申请或是公布这个想法的时候,我们可以将最初的设计文档和相关信息发表出来,同时从区块链中拿出当时存储的字符串,验证通过你的文档,可以计算得到这个字符串,任何人都可以查证这些文件的函数时间戳,来证实我们在这之前,也就是我们发布设计文档的哈希函数约定的时候,就已经有了这个创意(证明我们对这个创意的时间上优先所有权)。

至于在上述领域中,为什么要使用区块链,可以回忆下前文,提取区块链的特点:

1.分布式/去中心化/共识—可解决跨国、跨机构场景中的互不承认问题。

2.仅增特性/防篡改— 解决中心化资产管理场景中,资产被随意篡改、冻结的理论可能,还有例子中知识产权保护等。

Q:区块链创业项目具体做些什么?

A:早期的这方面项目大多还是集中于比特币交易所、比特币钱包、挖矿等,本质上还是基于对比特币的长期价值走势持有信心,希望能从项目中赚取手续费、挖矿收益等。

其他领域,如果你到网上搜索,可以搜出大量的无脑罗列:例如共享经济(区块链打车)、知识产权保护(专利管理)等,但他们都可能会面临一个尴尬的问题:如果还是由公司、机构或政府发行的,其本质在一定程度上又跟去中心化产生了矛盾,将难以得到广泛参与,反过来又违背了区块链分布式、去中心化的初衷,你需要深入思考下这些需求是否真的有必要进行分布式去中心化。

从当前形势来看,区块链可能还是在金融、保险领域的机会更大一些,这些领域内的应用基本是基于自己新创的链。

【注:此问题的解答要感谢某区块链从业者大佬提供的权威指导,为保护其隐私不透露姓名了】

Q:哪里可以实时查看当前价格?既然区块链是分布式的公开账本,普通人是否可以查看?在哪看?

A:https://blockchain.info (这不是唯一可查看的网站)

图3

除了查看实时价格,还可以查看每个区块的详细信息(图4),前面已经说过了,区块链是一个分布式的公开账本。

图4

Q:如何看待数字货币/区块链技术?是庞氏骗局还是一次技术革命?

A:这个话题坦白说以我目前的眼界和视野怕是暂时没准备好去做太多延伸。个人认为即没有庞氏骗局那么糟糕,也远远谈不上什么技术革命。庞氏骗局完全是拆东墙补西墙,参与者都是懵逼的状态;而比特币是基于公众共识,大家都是基于充分的知情而自愿相信它的价值。技术革命,在我看来至少要有材料、硬件平台上的颠覆,解决之前所无法解决的问题,至于区块链思想,目前我的理解只是对已有功能的不同实现方式(中心化到分布式),暂不冒然议论了。

Q:最后一个问题:为什么是22分钟搞懂比特币/区块链?

A:致敬我的偶像阿尔塞纳.温格,他上个月刚刚结束了长达22年的枪手生涯。

非常感谢你浪费在这篇文章上的时间,如果你觉得亏了,我也不会赔偿你的,我语文不好我有理呀!

本篇暂时没有深入讨论对数字货币和区块链思想的看法,大部分只单纯陈述客观事实,介绍相关原理。时间允许的话下一篇争取能写下我的一些浅见。

如有指教欢迎留言,我会挑选看着顺眼的给予回复,拜拜

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180603G1EUMS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券