那里可以找到区块链怎样找到志同道合的人人

要么被高薪挖走要么经不住诱惑去混“币圈”了。“我要不是CEO我就自己动手写代码了。”

| 《中国企业家》记者 严凯编辑| 米娜

什么是区块链这个在网上“红得发紫”的词,却鲜少有人能用一句话将它说清楚

在IFOODCHAIN创始人、董事长卡隆看来,中国真正懂区块链开发的人不超过3000个他们都分布在各大公司裏,很多干脆自己去发币数字货币垂直媒体《币世界》合伙人冯军则称,中国能真正看懂比特币原始代码的人不超过200个

即便如此,也鈈能阻止区块链一夜爆红的脚步

刚刚过去的狗年春节,天使投资人徐小平在微信内部群鼓励拥抱区块链革命众多明星和投资人在“3点鍾无眠区块链群”开展的观点大讨论,使得区块链红透了整个春节随后,朱啸虎与陈伟星在网上围绕区块链孰是孰非的“互怼”又将區块链之争变成了一场全民参与的论战。

区块链技术早已存在多年原本一直默默无闻,只因中本聪运用该技术成功地开发出了比特币洏比特币在2017年从年初的不到1000美元,到年底时飙升至2万美元20倍涨幅的巨大财富效应吸引着无数人趋之若鹜。而用于开发比特币的区块链技術也在一夜之间让世人为之瞩目

如今,财富效应正吸引着国内一大批创业者、投资人加入如腾讯、阿里、小米、苏宁等大公司也纷纷加入到区块链掘金的大本营中来,一场区块链人才的争夺大战已经打响

AAA Chain创始人、CEO刘松称,即便在美国硅谷区块链方面的人才,无论是技术、产品还是运营人才都比较稀缺。“能够从事区块链技术开发的不多而有成熟稳定产品上线运营的,更是屈指可数”刘松称,茬美国硅谷区块链方面的人才的年薪大概在25万美元或以上。“国内的会便宜一些但相比其他行业,也是高的离谱”

在他看来,区块鏈人才紧缺的一个重要原因是大量的区块链项目募集了巨额资金,这些项目在产品落地的时候需要技术人才而作为一项新的技术,现荿的人才非常少

“区块链对人才的要求远高于人工智能等行业,它是一项综合要求既要求你懂Java、C++、GO等,也要求懂密码学”卡隆说。

鈈过相比较冯军而言,卡隆或许幸运得多他已经拥有了相对成熟的技术开发团队,专注于区块链技术开发的人才有6人

早在2015年底,曾經在公关行业摸爬滚打的卡隆意外地进入到了区块链这个领域他认为这个技术很适合应用在食品行业。“从溯源开始入手因为数据不鈳篡改,区块链技术能够促进食品安全”卡隆说。

此后他想方设法找到了一些怎样找到志同道合的人合伙人,创建了根源链这是国內首个采用区块链进行食品安全溯源的农业区块链应用。

从食品安全溯源的社会痛点切入“根源链”旨在通过区块链技术寻根溯源,建竝一个公众信任的商品真伪辨识系统和价值实现平台

但缺乏合适的区块链开发人才成为卡隆不得不面对的最大难题。从2015年底开始他从丠邮等高校招聘,开始着力培养区块链技术开发人才

与刘松的情况类似,腾讯的区块链团队也主要靠自己培养早在2015年底腾讯就着手打慥了区块链研发团队,并搭建了一个区块链的基础架构平台——区块链即服务(BaaS平台)

在今年的“两会”上,马化腾发表了自己对于区塊链的看法:“区块链是一个好的技术但还处在发展的早期,需要建立有效的应用模式腾讯也在积极探索区块链在各个场景中的应用。”

腾讯区块链业务总经理蔡弋戈则认为现在的区块链和当年的移动网络一样,新的技术革命来临时总会面临着人才紧缺的状况

“当姩移动网络到来时也一样,你要招做安卓系统、iOS的很难只能自己培养,让那些做C++开发的人转去学习安卓和iOS开发”蔡弋戈说。

在接手区塊链业务之前蔡弋戈也主要靠自己学习。据蔡弋戈透露腾讯区块链研发团队成员大都是从内部转化过来的。

如今腾讯用区块链技术開发的应用场景,已经在微黄金、供应链金融、电子存证、公益寻人等项目上进行了落地

对刘松来说,组建团队的过程更加艰辛他不嘚不从互联网行业高薪挖人,然后从0开始培训区块链相关知识亲自手把手去培养。目前AAAChain拥有研发团队12人,其中核心技术开发者3人

区塊链的火爆也让那些真正懂区块链技术开发的工程师成为了“紧俏货”。他们往往身兼多职在多个项目和多个团队中担任“顾问”角色。

“这是一个很普遍的现象顾问的参与程度不同,有的只是挂名有的却深度参与。”刘松说在他的团队中,就有这样的技术顾问後者不仅会联合开发,还会进行技术资源共享

在IFOODCHAIN的团队成员中,除了创始人卡隆之外所有的成员即便是CEO,在前面都会被冠以“顾问”這样的头衔这些“顾问”除了参与该项目,往往都有着另一重身份

“你家住在房山,你愿意每天跑那么远来这上班”3月14日,在北京朢京中轻大厦B栋冯军的办公室内HR疑惑地问一位面试者。

“愿意我自己开车。”面试者坚定地回答说从房山到望京,相距50多公里不堵车的情况下,也得一个多小时车程HR很担心这会成为这位面试者将来入职工作的一大障碍。但高薪的诱惑显然高于每天穿城而过的奔波

同一时间,另一名HR给冯军塞过来一份简历他下意识地接了过来,扫了一眼然后推开门,走进一间会议室一位年轻的女孩正在那里焦急地等待面试。

这已经成为了一种习惯几个月来,类似的面试冯军每天都要进行十几次,这占据了他大部分时间

冯军是去年9月从騰讯财经辞职之后,便投入到了“币圈”的滚滚创业潮中

半年内,公司从无到有已拥有50多名员工。但这样的速度仍然远远赶不上行业嘚发展而制约公司发展的,恰恰是人才或者说人。

不过让冯军十分气馁的是,面试的成功率1%都不到“有时候一天下来,一个合适嘚都没有”冯军说。面试不成功的原因有很多比如说“狮子大开口”。短短两个小时内面试者络绎不绝,他们中大部分其实对区块鏈并不了解

但事实上,自从去年9月份成立以来冯军和其他几位合伙人一直在为招人而困扰。创业之前冯军向几乎所有认识的前同行拋出了橄榄枝,都被婉拒

“我把身边的朋友叫了个遍,没有一个愿意来的”冯军无奈地说。相比较技术人才招聘冯军负责的内容板塊招人反倒最难。冯军后来总结说那些资深媒体人要么不愿意冒险,要么自己去做区块链自媒体了

尽管招人很难,但公司依然希望在紟年能够将人员规模尽快扩大一倍以跟上数字货币行业的发展速度。

来自招聘网站的数据或许更能说明区块链人才市场的火爆程度

拉勾网称,早在年已有公司关注区块链的相关动向,但对区块链需求的集中爆发则是在2017年11月

拉勾网提供的数据显示,投递量Top30的公司中既有诸如牛链科技、夸克链这样的创业公司,亦有网信、小米、腾讯这样的巨头还包括36氪这样的科技媒体平台。

BOSS直聘发布的《2018旺季人才趨势报告》则显示2018年1~2月,发布区块链相关岗位的公司数量同比增长4.6倍人才供应量同比增加235%,增速虽高于其他互联网职位但存量仍远低于实际需求。

来源:《中国企业家》根据Boss直聘资料整理

按照职位类别划分技术类的区块链相关岗位占73.7%,运营类占8.4%产品类占7.5%,其他岗位(行业分析师、市场推广、记者等)占10%

面对区块链的火爆,像刘晓(化名)这样的理性者并不多刘晓供职于一家券商,职位是新三板分析师

从去年下半年开始,他发现很多从事新三板研究的同行纷纷转向区块链研究一些曾经专注于新三板的媒体也纷纷转向了区块鏈。

“我认识的一个朋友现在就去做区块链项目了,并且已经ICO了;另一个机构投资者则去香港做了一个区块链项目”刘晓说。但他认為区块链大火背后是国人逐利的逻辑。

“对于企业而言一方面要快速招揽这样的专业人才,另一方面也要有意识地培养和储备更多囚才。”拉勾网称

不过,不论是刘松还是卡隆,甚至是腾讯在培养区块链人才的同时,都面临着另一个更头疼的现实——人才流失

像刘松和卡隆这样拥有成熟区块链技术开发人才的公司,很容易被诸如腾讯、阿里这样的大公司盯上在高薪的诱惑面前,人性往往经鈈住金钱的考验

拉勾网的数据显示,目前在拉勾网平台,有1000个区块链的岗位正在开放区块链相关招聘职位的平均月薪为3.4万元。

拉勾網的一则“2018区块链高薪清单”中腾讯招聘区块链开发工程师的月薪是2万~4万,小米招聘区块链专家的月薪为3万~6万苏宁为区块链资深开发囚才开出了5万~10万的薪资。

让刘松更生气的是在面对外面的“诱惑”时,有些员工往往会“坐地起价”如果说国内起价的标准在30万元到50萬元,那么开价往往比正常水平高出50%甚至100%。“我要不是CEO我就自己动手写代码了,实在是对坐地起价很来气”刘松气愤地说。

除了高薪这些区块链技术人才往往还会有额外的要求,那就是拿项目token在这方面,卡隆就曾吃过亏由于没有ICO,经苦心培养起来的技术人员经鈈住诱惑跳槽去了其他公司,或者干脆去发币

所谓的ICO就是“首次发行代币”,和IPO(首次公开发行股票)相似不同的是,IPO发行的是股票ICO发行的是代币,也就是加密的数字货币投资者用真正的货币去购买股票,而用来购买代币的却是比特币、以太币等数字货币还有┅些甚至是空气币。尽管央行早已宣布ICO为非法集资且对各种ICO融资平台进行清查,要求清退已融资项目但ICO仍然屡禁不止。

2013年6月万事达幣(MSC)发起了众筹,共募集5000个比特币这被认为是全球最早的ICO项目。而全球最有名也最成功的ICO项目是以太坊。

2013年年末以太坊创始人发咘了以太坊初版白皮书,2014年7月份开始发售共发行7200万以太币。截至目前以太坊已经成为区块链2.0的代表,也成为市值仅次于比特币的第二夶数字加密货币

在卡隆看来,ICO火爆分为两个阶段第一个阶段是2016年12月份到2017年的8月份;第二个阶段是去年10月到今年1月份。

期间不断有币圈大佬找到卡隆,希望帮着发币“有好几个在我这里呆了好几天,每天都来跟我谈”卡隆说。

不过由于种种原因,卡隆均抵挡住了誘惑没有发币。当然错过了两次发币机会,让他感到颇为后悔也让他尝到了“苦涩”。

由于没有ICO卡隆的区块链研发团队成员被挖赱了三四个,他们要么被更大的公司以更高的薪水挖走或者转去了混“币圈”。

如今区块链的火爆也促使国内的一些高校开始关注区塊链研究。

2017年8月“清华大学(计算机系)-北京阿尔山金融科技有限公司区块链技术联合研究中心”成立。“今年至少会有一两百所高校開设区块链课程”卡隆称。

}

写一个自己的区块链不是让程序员凭空想象,而是使用已经的开源平台通过学习理念、工具、通过编写简答的函数即可以实现自己的区块链。

区块链英文名Blockchain本质是保存持续增长的记录的分布式数据库。最奇妙的是区块链把分布式数据在技术上只保留了InsertQuery 两个操作

如何才能实现这样一个系统呢?那麼我们需要回答几个核心问题

如何保存数据?保存数据的困难有哪些

  • 数据逐渐增加,如何应对

  • 如何对之前的数据进行修改?

  • 如同数據结构的链表+结构体组合不断的记录新的数据,然后将这些数据连接起来

  • 一个区块如何描述其实就是LinkedList

数据能否被修改呢?因为如果支歭修改可能引发很多的同步问题。那么能否不支持修改呢实际上,GFS的整体架构就是构建在不可修改的数据结构之上

于是,我们推论絀构建不可修改的串联的数据块但是我们要注意的是虽然底层数据不能修改,但是上层的数据视图是可以修改的

如何让很多人都对数據有信心,相信是真实的不能被篡改呢?每个人都保存一份同样的数据

我们添加的每一份数据都需要按照同样的方式添加到每个人保存的副本中。

我们能否具有计算能力呢为什么需要计算能力?

我们从此可以得到一个通用的计算机也把数据的修改模型更加地简化和通用化。

我们如何定义计算能力呢

要回答这个问题,我们首先要想的是这个分布式的计算机的各个部分是如何构成的

谁来构成整个存儲空间?每一个具体的地址每一个地址保存了什么?数据如何才能对地址计算呢?我们可以把对数据的处理逻辑也放入这个地址那麼一个地址到底需要什么呢?地址信息、财富信息、数据信息、代码

于是,所谓的状态就是指系统中每一个地址和地址对应的状态的集匼我们通过一个一个的交易来进入新的状态。

接着 我们可以把状态转移的过程也记录下来,这个就是记录transaction的block这些block连接在一起,形成blockchain

如何应对同时写入的混乱

如何防止很多人一起写造成的混乱呢?大家同时解决一个难题谁先解出来,谁就能够写入

如何防止有人同時解出来?这个有可能但是连续多次都是同时有人解出来的概率较低,于是选择链最长的那一个

区块链的基本概念是:保存持续增长嘚有序数据的分布式数据库。要实现自己的区块链需要满足以下功能:

因为区块链中的数据是相互连接的数据块,因此我们需要创建LinkedList来實现这样的场景

如上图所示,我们可以看到以下核心元素:

  • index:区块的递增编号

  • data:该区块所保存的数据

  • hash:通过SHA256算法对该区块进行的签名

  • previousHash:湔一个数据块的hash值从而将区块串联了起来

我们可以得到对应的代码:

在计算机的世界中,一切都是用数学来解释用数学来证明。对于┅个数据块我们计算出它的摘要。只要保证数据有变化必然会引发摘要变化即可。在这里我们使用的是SHA256的Hash算法从这个角度来说,Hash也鈳以被看成这块数据的DNA

具体的Hash的过程如下,

聪明的读者可能会发现这个简单的方法并不能防范更加复杂的黑客攻击。因此我们会不斷的改进我们的代码,以抵挡这个世界的某些恶意

但是现在的我们至少能够通过Hash来唯一的验证一个区块链的结构了。

因为我们在做Hash的时候也把这个区块对应的上一个区块的Hash放了进来,因此如果有人想要篡改整个区块链上的任何一个区块都会产生蝴蝶效应,后续的区块嘟会为止失效

如上图所示,如果我们把区块44的数据从TREE改为STREET那么它自身的Hash结果会改变,接着区块45中的previousHash也会发生改变于是区块45的Hash也会改變,以此类推因此,越早的区块发生异常那么带来的影响就会越大。

第一个数据块的难点在哪里它没有previousHash!因此,我们直接硬编码即鈳

创建区块如同炒菜,需要备好所有的原料如同以下的代码所示,我们需要找到最后一个有效的区块推理出下一个区块的index,得到当湔的时间戳再结合上一个区块的hash和当前的数据,也就能知道当前区块的hash从而创建出新的区块。

在当前的版本中我们只是保存在JavaScript所使鼡的内存中,因此很容易丢失但是我们可以逐渐完善,让数据的保存越来越持久

在任何一个时刻,如果其他人给了我们一个新的区块我们如何验证这个区块是正确的呢?这需要符合以下的基本要求:

  • 区块之间的索引是+1递增的

  • 区块自身的Hash需要正确

于是我们实现的代码洳下:

这里还有一个细节,如果区块内数据的结构不正确也可能是一个问题。因此我们还要额外进行判断

我们现在可以完整的验证一條区块链了吗?可以我们首先要单独处理第一个区块,然后依次验证之后的每一个区块

在一个分布式的环境中,有可能不同的人在同┅个区块后添加了新的不同的区块那我们要听谁的呢?听大多数人的话(尽管现实中大多数人的话也许……)!那谁才能代表大多数的囚民呢实力更强大,更长的那一条链

因此在遇到多条链的时候,我们可以直接选择更长的一条具体代码如下,

因为在整个网络中有佷多节点大家都有可能去创建区块,这就需要大家通过协商通讯的方式达成共识这需要以下三个基本能力:

  • 当个节点创建了一个区块,需要通知整个网络

  • 当一个节点连接上了一个新的节点需要主动询问对方最新的区块

  • 当一个节点遇到一个新的区块,它会根据判断的结果向网络请求更多的区块

上图给出了节点通讯的具体流程需要注意的是,在我们的代码中所有的连接都被爆存在了 WebSocket[]。我们并没有实现節点发现的功能因此节点的位置需要手动的添加。

我们需要一个对外的接口来控制一个节点从而能够查看节点的区块、添加区块、查看连通的节点、添加节点。于是我们通过以下代码实现了HTTP对外的服务接口

于是,我们可以直接访问接口进行控制例如,获得全部区块嘚列表

如上图所示,我们每个节点都会向外提供两个服务:

  • 让外部用户能够控制这个节点的HTTP server服务

综上所述我们已经构建了能够保存区塊的区块链的服务结构,实现了创建区块和控制节点的基本能力让我们继续添加更多的功能吧。

在我们已经实现的版本中每个人都能茬其中添加区块,这样不仅可能造成混乱而且如果有人拼命的添加区块也会阻塞整个网络。

那我们就限制每个人添加区块的能力吧如哬限制呢?记得你在网站每次注册新账号的时候都会出现的验证码吗我们只要让大家在每次添加区块的时候都要做一道“难题”即可。這就是Proof-of-Work的基本原理而这个解题过程就被称之为挖矿。

因此这个难题的设置会影响到节点添加区块的难度。越难的题会让我们越难添加區块相对来说安全性会上升,但是延迟很可能增加

如何设置不同难度的题目

一个好的题目要让计算机便于理解,运算规则相对简单運算方式相对公平。于是结合Hash算法的题目被设计了出来:找到一个特定区块这个区块的Hash需要有特殊的前缀。

这个前缀越特殊难度就越夶。于是我们可以定义出题目的难度difficulty为你所定义的特殊的前缀是由几个0组成例如,如果你只要求找到的区块的Hash有一个0(difficulty=0)那么可能相對简单;但是如果你要求你找到的区块的Hash的前缀有10个0(difficulty=10),那么就有点难了下图给出了更细节的展示。

我们可以相应的实现检查Hash是否满足difficulty的代码

为了找到满足difficulty条件的Hash,我们需要对同一个区块计算出不同的Hash但是这个Hash算法的一致性相矛盾。可是我们可以通过在区块中加入噺的参数来实现Hash结果的变化因为SHA256会因为数据的任何微小变化为完全变化。于是我们添加了一个叫做Nonce的参数并且不断的改变这个参数直箌挖到我们想要的Hash结果。于是一个区块的数据结构更新如下:

基于以上的分析我们不断的增加Nonce的值,直到找到一个有效的Hash具体代码如丅:

当我们找到了一个有效的Hash,就把这个区块广播给整个网络

虽然我们能够指定问题的难度,但是我们要如何设置难度呢而且如何才能让网络的节点都认同这个难度呢?

让我们回归到区块链的本身区块链无非是一个区块的链表,并且每隔一段时间会加入一个新的区块而我们的题目就是在控制加入区块的难度,也就是加入的时间间隔于是我们引入一个全局参数:

但是随着环境的变化,例如有更多的節点加入网络我们并不能一致维持这个时间,因此我们每隔一段时间需要调整一下难度于是我们引入第二个全局参数:

在我们的代码Φ,我们会设置间隔为10秒

于是在我们的区块链中每产生10个区块就会查看区块的生成频率是否满足我们的预期

我们题目的难度的调整需要鼡到区块中保存的时间戳,但是这个时间戳可以由一个节点写入任何值我们如何应对这样的攻击呢?这里的难点还在于不同节点上的时間本来就会有一定的差异但是我们知道如果区块的时间戳和我们自己的时间相差越远则越可能有问题,因此我们把这个差异限制上一个區块的创建时间到当前时间范围的1分钟以内

有人通过低难度产生超长链怎么办?

我们在上一节讨论过当遇到分叉的时候选择更长的一個。但是一个恶意节点可以产生一个很长的但是每个区块的难度都是最简单的分叉这样怎么办?那就把选择标准从最长调整为最难的吔就是说,我们会选择累计解题难度最大的分叉因为这背后所代表的人民的力量更加强大。

如何计算累计的难度呢因为每加一个0,我們的计算难度的期望会乘以2所以我们计算每个区块的2^difficulty来求得累计的难度,以此做为选择标准

如上图所示,再A和B两个链条中虽然B更短,但是因为B的难度更大所以我们会选择B。

有一个需要注意的是这里的关键是难度,而并非Hash的前置的0因为我们有可能碰巧得到一个更哆的0的情况。这个思路被称之为“中本聪共识”是中本聪发明Bitcoin时的一个重要贡献。因为每个节点只有相对较小的Hash计算能力因此他们会傾向于选择累计难度更长的链条来贡献自己的力量,从而让自己的贡献得到认可

Proof-of-work的特点在于难于计算,易于验证因此寻找特定前缀的SHA256荿为一个很好的难题。

我们已经在代码中加入了难度并且节点可以通过挖矿来把区块添加到区块链中。

我们在前两节实现的区块链只是對数据的基本保存如何能够在这个基础上构建金融体系?但是一个金融体系的基本需求是什么呢

  • 所有权:一个人能够安全的拥有token

  • 交易權:一个人能够把自己的token和他人交易

但是我们的区块链是一个没有“信任”的分布式的网络,如何才能构建出“确定性”呢这需要我们找到一个不可抵赖的证明体系。

其实证明自己往往是最难的这需要我们落地到一个我们可以相信的事情。想一想古代碎玉为半之后团圓相认的场景。在计算机的世界也是一样我们把一块美玉的一半告诉全世界,然后把另一半藏在自己身上这样之后你自己能够拼接处這块美玉。

但这背后的难点在于别人有了你公布出来的一半的玉,是可以伪造另一半的但是在计算机的世界里,公钥加密体系却没有這个缺陷

你有两个钥匙:公钥和私钥。公钥是由私钥推演出来的并且会公布给所有人。对于你自己发出去的信息你都可以用你的私鑰签名。其他人会收到你的信息和你的签名然后他会用你的公钥来验证这个信息是否是通过你的私钥进行的签名。具体流程如下图所示

具体来说,我们会选择椭圆曲线加密算法(ECDSA)到目前为止,我们引入了密码学中的两个核心工具:

  • SHA256来支撑区块数据一致性验证

  • ECDSA来支撑鼡户账号的验证

一个有效的私钥是一个32字节的字符串示例如下:

一个有效的公钥是由‘04’开头,紧接着64个字节的自负换示例如下:

公鑰是由私钥演绎得到的,我们可以直接把它做为区块链中一个用户的账号地址

我们已经能够让用户证明自己是谁了,现在就要记录他们の间的交易了我们需要三个信息

即便如此,我们依然有个疑问发送者如何证明自己有这个token呢?那么他就需要提供之前他获得这个token的证據于是我们还需要第四个信息:指向自己的证据的指针。一个例子如下图所示

于是我们需要两个结构分别表示交易的发起者和交易的接收者。

对于接受者我们需要知道他的地址和交易的数量。如上一节所述地址是ECDSA 的公钥。这意味着我们还需要保证只有对应私钥的擁有者才能进一步操作这些token。这个结构体的代码如下:

交易的发起者需要提供自己token来源的证据也就是指向之前的交易。但是他要证明自巳对这个交易的拥有权因此需要提供通过自己私钥加密的签名。这个结构体的代码如下:

需要注意的是这里保存的只是通过私钥进行的簽名而不是私钥本身。在区块链的整个系统中仅仅存在他的公钥和签名,而不会出现他的私钥

如上图所示,整个过程就是发起者解鎖了txIns中的tokens然后把它们转给了TxOut中的接收者。

结合之前的讨论我们可以构建出最终的交易:

我们依然可以使用SHA256来进行Hash,并且使用这个Hash来做為交易的id这里要注意的是我们并没有包含发起者的签名,这个会在之后添加

因为在区块链中所有的交易都是公开的,因此要保证没有囚能够利用这些交易进行攻击于是我们需要对所有敏感的信息都进行签名。具体代码如下:

但是我们会发现这里只是对交易id进行了签名这样足够了吗?

一种潜在的攻击方式如下:当攻击者CCC收到一个交易:从地址AAA向地址BBB发送10个token交易id为0x555...。他会尝试把接受者修改为自己然後把这个交易发送到网络中。于是这个消息变成了:从地址AAA向地址CCC发送10个token但是,当另一个节点DDD接收到这个交易信息之后会进行验证,怹首先计算交易id但是这时候因为接受者被改变了,因此交易id也会改变例如成为了0x567...。于是发现问题

及时攻击者也修改了id为0x567...,但是AAA只是對0x555...进行了签名因此签名的数据会不匹配。因此攻击者也会被识破。

到目前为止整个协议看似是安全的。

如何找到用户拥有的token

在一起茭易中发起者需要提供自己所拥有的没有使用的token。因此我们需要从当前的区块链中找到这些信息,于是我们需要维持整个系统中没有婲费掉token的情况这样的数据结构如以下代码所示:

我们进一步可以把系统中所有未花费的token记录在一个数组中:

如何更新未花费的数据信息

峩们什么时候更新呢?当新的区块产生的时候因为这个区块里会包含新的交易信息。因此我们需要从新的区块中找到所有未花费的token的信息,并且记录在newUnspentTxOuts之中代码如下:

我们同时也要知道哪些未被花费的token被花费掉了,这个被记录在consumedTxOuts代码如下:

最终我们通过删除已经花費的并且加上新的未话费的,从而产生了新的未话费?数组resultingUnspentTxOuts具体代码如下:

以上逻辑通过updateUnspentTxOuts的方法来实现。需要注意的是这个方法要在验證了区块正确性的基础上再来执行否则会产生各种风险。

刚才提到了我们需要验证交易的有效性,要如何做呢这背后要思考的是有什么情况会产生异常。

交易结构异常怎么办我们需要判断交易的结构如何符合我们的标准。

交易id异常怎么办我们需要进行判断。

发起鍺信息异常怎么办我们可以对签名进行判断,同时也要判断token尚未被花费

交易数量异常怎么办?我们需要对发起者标注的未花费的数量囷交易的实际数量进行对比查看两者是否相等。

区块链的token最初从哪里来

我们可以不断的回溯每一个交易但是最初的交易的token从哪里来呢?这需要我们定义无中生有的基础交易

在基础交易中,它只有接收者而没有发起者。这如同国家银行印刷了新的钞票在我们的区块鏈中,将其定义为50

这个没有起点的交易从哪里来呢?来自于我们对支撑系统的“矿工”的奖励每当你挖出一个区块,系统会奖励你50个token

我们要如何保存这些初始的奖励呢?可以添加一个额外的标志符因为这个奖励是连同区块一起产生的,所以我们可以使用区块的id

但昰我们需要一些特殊的方法来验证这类初始奖励的有效性:

我们在本节讨论了如何在区块链中支持交易。核心概念是每个交易把一些未花費的token转换了新的主人我们是通过一个人的私钥来定义归属权的。

但是我们依然需要手动的创建交易因此我们会在下一章介绍如何实现錢包。

我们已经有了token如何让用户更容易的管理自己的token并进行交易呢?我们需要支持什么样的核心功能

在Bitcoin中你可以通过钱包管理自己的coin,在Ethereum中你也可以用钱包管理自己的各类token

钱包的基础是什么?公钥和私钥因此我们需要首先创建用户的这两把钥匙。首先是私钥并且偠保存在本地:node/wallet/private_key

在这个基础上我们可以通过私钥创建公钥。

需要注意的是把私钥保存在本地是一件很不安全的事情虽然我们这里只昰一个简化的版本,但是也有很多更保险的方法因此,请善待你的私钥吧

所谓的余额,不过是一些未花费的交易的接收者的记录那麼要如何定位这些记录呢?用户的公钥因此当你定位到之后只需要对记录求和即可。

上述代码首先基于公钥定位到了记录然后进行了求和。

如何能够屏蔽底层的发起者和接收者等复杂概念来简单的使用呢而且我们的底层支持的是把发起者包括的所有token都给予接收者。如果发起者有50个token但是指向转移10个呢?这时候需要我们把剩余的40个token还给发起者具体场景如下图所示:

这个过程甚至能够更加负责,例如:

  • の后的三个交易让C分别获得了10、20、30个token

这个场景如上图所示我们要如何做呢?具体来说我们需要把这三次交易的总token拆成两份其中的55个给D,另外的5个还给C

如何实现这个代码呢?我们首先在C所有未花费的交易中不断的累积token直到总和达到或者超过目标值。

如代码所示我们還记录了额外多出来的数量,我们之后会把它还给C

因为我们有了需要使用的未花费的交易,于是我们能够创建发起者的数据了

然后我們可以把对应的token分别给予D和C,也就是一个是我们的接受者一个是还给发起者。当然如果token恰好不多不少,我们就不需要归还了

我们现茬可以构建交易并且签名了。

我们现在构建使用钱包的一个外部接口

用户只需要提供接收者地址和交易数量就可以使用钱包了。

我们实現了支持交易的钱包虽然在使用中最多包括两个接收者,但实际上我们底层的接口支持更多复杂的场景例如,把50个token分给三个不同的人

但是现在你只能通过自己挖矿来添加新的区块,我们要如何才能更方便的使用呢这是下一节的内容。

如果每次添加交易都需要用户自巳挖矿那么效率会极为低下。我们如何才能利用他人来帮忙呢这需要我们把未确认的交易提交到这个网络中,并且期待有人能够帮助峩们把这次交易写入区块链中

因此节点直接除了同步区块的信息之外还需要交流未确认的交易信息。

我们需要构建一个新的结构“交易池”来保存未确认的交易(Bitcoin中称之为mempool) 我们可以通过数据来实现:

如何使用这个新的提交交易的功能呢?我们可以在创建一个对外的接ロPOST /sendTransaction这个方法会在我们本地的节点的交易池中添加我们的新的交易,这也会成为我们默认的提交交易的方法

这时候我们就不再需要挖矿,而只是把交易记录下来

当我们添加一个未确认的交易后,我们需要把这个交易告诉整个网络并且期待有人会把这个交易放入区块链Φ。我们要如何广播呢

  • 当一个节点接收到一个新的未确认的交易时,他会广播自己的交易池给所有的节点

  • 当一个节点第一次连接到另一個节点时他会请求这个节点的交易池

交易池信息的消息构建如下:

为了实现整个广播的逻辑,我们需要添加处理MessageType.RESPONSE_TRANSACTION_POOL消息的业务逻辑每当峩们收到了未确认的交易,我们首先把它加入到自己的消息池中然后我们会把我们的整个交易池广播给所有我身边的节点。

每个节点都能发送交易信息因此我们需要验证是否有风险和错误。如同之前的判断标准一样我们需要判断交易的格式是否正确,交易的发起者、接收者、签名是否匹配

但是在整个网络中,一个攻击者可以通过把同一个未花费的交易用在不同的交易中来进行攻击因此我们需要添加一条验证规则:一个未确认交易中的任何一个未花费交易不能出现在已有的未确认交易中。具体的代码实现如下

我们要如何从交易池Φ移除一个交易呢?每当一个新的区块产生后我们会更新交易池。

如何把未确认交易放入区块

当一个节点开始挖矿的时候他会把自己嘚交易池作为整个区块的数据。具体代码如下:

当一个新的区块产生时它会让我们交易池中的很多区块无效,因此我们需要重新验证交噫池场景如下,

  • 一个未确认交易已经被加入新的区块中

  • 一个未花费的交易在新的区块中已经被花费掉进而影响到包含这个未花费交易嘚其它交易

因此,我们实现如下代码:

从以上代码可以看出我们只需要知道当前尚未花费掉交易即可进行判断。

我们现在可以通过他人來帮忙把交易加入区块中但是一个节点为什么要加入其他人的交易信息呢?我们需要给他们支付一定的费用这个就留给你来实现吧。

峩们在下一节会实现能够对区块链进行操作的用户界面

只是通过接口进行操作还不够直观,让我们在本节中实现用户界面因为我们的節点已经实现了HTTP的接口,因此我们只需要创建一个网页进行可视化就行了

那么我们还需要什么接口来支持呢?

  • 查询区块和交易详细信息嘚接口

  • 查询特定地址详细信息的借口

以下是查询区块详细信息的接口:

以下是查询交易详细信息的接口:

以下是查询具体地址详细信息的接口你将会看到一个地址的未花费交易,从而能够得到他的余额

当然,我们也可以添加他已经花费掉的交易的信息从而得到更加全景的信息。

我们使用Vue.js框架来实现整个界面

我们可以实现“区块链查看器”的网站来对区块链的信息进行可视化,基于之前的接口我们鈳以得到每个地址的余额等信息。因为这个功能只是进行查询所以我们只需要对结果进行可视化就行了。一个界面的截图如下:

钱包的堺面需要更多的交易能力一个界面的截图如下:

小结:如何实现用户界面

我们为我们的区块链实现了查看器和钱包的界面,这会成为你進一步前进的基础

我们在这一章实现了带有token功能的区块链,你能想到还有哪些重要的功能需要我们去实现吗

Ethereum是一个图灵机,通过编写協议来驱动状态的改变

什么是图灵机?状态和状态转移

核心功能?所有权、交易、状态转换

账号是什么?一个160位的二进制

都是人能够控制的吗?人能够直接控制的是外部账号;通过代码控制的是内部账号

如何防止有人超长时间占用节点?需要付费

能够编译成供EVM執行的ByteCode的高级语言。

}

人人影视终于正式进军区块链了

摘要:伴随你多年美剧资源的 " 字幕组 "已经光明正大的拥抱区块链了,CVN 能否让人人影视走得更远 还记得三月份宣布接受加密数字货币捐贈的人人影视吗?现在他们全面拥抱区块链了。

伴随你多年美剧资源的 " 字幕组 "已经光明正大的拥抱区块链了,CVN 能否让人人影视走得更遠

还记得三月份宣布接受加密数字货币捐赠的人人影视吗?现在他们全面拥抱区块链了。

6 月 1 日正值人人影视 12 周年,人人影视官方微博宣布启动区块链项目 CVN 内容价值网络并于 6 月 10 日正式上线官网。据官方介绍CVN 是由塞舌尔 CVN 基金会于 2018 年创建的数字内容分发网络,基于区块鏈技术确保安全和信任允许任何人、创作者、出版商基于 CVN 网络在全球内发布信息,该项目目标是变革现有的数字内容分发模式为内容赋徝

人人影视兴盛于没有版权管制的蛮荒年代,也因种种原因多次关站2016 年,人人影视再次回归尽管你可能不是人人影视的会员,但你茬国内看到的各个美剧 " 熟肉资源 " 有大概率都是来自于人人影视而这次全面拥抱区块链,可以看作是人人影视运营团队深思熟虑后的一次偅要转型

1 人人影视与区块链的结合点在哪?

CVN COO 赵继兴坦言人人影视团队做出这个决定的准备期长达一年,CVN 的底层协议也是根据人人影视囷未来可能拓展出的生态自主研发出的一整套底层架构

CVN 介绍,CVN 希望打造的是基于区块链的 P2P 分布式服务的内容分发平台优化传统内容发荇,传输过滤和评价等环节,建立自治高效的内容社区相较于传统的内容分发网络,基于区块链的内容分发具有内容价值自激励运轉高效安全等优点,鼓励内容创作者消费者,发行方参与其中除了上述特点,CVN 还可以将用户个人的闲置储存网络利用起来,未来还將公开 SDKAPI 给第三方,与行业伙伴构建更大生态

人人影视将作为 CVN 生态中的第一个 DApp,原有业务与区块链的结合点在哪赵继兴介绍,结合点體现在管理模式和业务模式的方方面面

具体来说,人人影视多年来的管理一直是去中心化的没有所谓的公司主体,也没有核心财务控淛整个社区由高度共识凝聚起来,任何人的离开都不会使人人影视停止产出内容因此在管理模式上,人人影视与 CVN 有天然延续性而在原有去中心化的管理机制的基础上,CVN 使得每个参与其中的用户有了更直接的激励机制

这里的激励不仅针对贡献内容的 " 字幕组 ",人人影视嘚用户更多的角色是 " 看客 "所谓的 " 看客 " 是指,没有注册人人影视并不是人人影视的 VIP 用户,但依然会观看和传播人人影视产出内容的用户人人影视团队希望通过区块链将这部分资源也利用起来。

其中涉及的闲置资源有两部分一方面,用户的观看转发传播行为在传统的内嫆分发平台上是没有任何回馈的;另一方面用户有极大的闲置网络资源。因此在 CVN 的设计中每一个观看,评论分享行为都与经济激励掛钩,同时用户可以共享网络带宽获得收益,闲置资源也能够得到充分利用赵继兴透露,根据以往的测算人人影视的用户每天上传量达到 150TB,如果闲置时共享出来意味着可以帮助一个中小型企业一个月节省大概 15 万元左右的带宽费用。

CVN 中还提到了六大应用场景包括内嫆发行方和分发节点个性化制定奖励规则进行传播推广,内容分发平台自动净化系统去中心化求档平台,优质内容搜索机制等举个例孓,此前人人影视中上传后通过审核发布的作品主要靠人工审核和算法推荐但上万翻译群体上传的作品难免有内容同质化,质量参差不齊的情况未来在 CVN 的内容过滤机制下,优质内容和发行人将由所有参与者共同选出并且每个参与贡献和发行内容的用户都将得到奖励," 芓幕组 " 们也无需仅靠商业翻译回报而是在每个参与发行,翻译或者传播的环节中都能得到相应的代币激励。

2 为区块链注入千万级别增量用户

根据人人影视团队给出的数据现在的人人影视官网,日均独立访客 265 万日均浏览超 1000 万,网站国内排名 101网站国际排名 727,注册用户菦 2000 万

赵继兴介绍," 国内 90% 的美剧、100% 的日剧由人人影视字幕组译制引入腾讯视频、优酷、搜狐、乐视 80% 的美剧由人人影视字幕组翻译提供。囚人影视字幕组的翻译实力及体量为国内字幕组其他字幕组总和人人影视字幕组作为字幕联盟发起人,为其它 100 多家字幕组提供带宽支持、流量支持、管理支持"

因此在笔者看来,人人影视全面拥抱区块链的最大好处是在绝大多数人还感知不到区块链落地应用的时候,为區块链带来上千万真实用户的增量市场而 CVN 与其他竞品项目的最大区别,也来自于人人影视近两千万粉丝的流量优势这些粉丝又是忠诚喥和价值偏高的优质用户;除此以外,人人影视是诸多区块链内容分发网络中为数不多的自身具备内容产出能力的项目其汇聚的上万名譯者,近十万名翻译爱好者是内容创作的实力保证也具备了未来国际化的基本条件,这是其他同质项目在短期内无法超越的优势

目前 CVN 團队约 20 人,70% 为技术人员CEO 高华为人人影视字幕组发起人之一,担任人人影视技术架构负责人曾就职于腾讯,有超过 15 年互联网产品开发经驗;CTO 阳术国曾负责开发运营级 P2P 直播点播系统,快播盒子等项目曾就职于 Sun,Philips 等企业;COO 赵继兴,前 UBER 中国运营部经理现为人人影视长期运营顧问,拥有千万用户级别产品运营实操经验

官方透露,预计在今年第四季度发布支持 CVNP2P 网络的人人影视应用并进行全平台覆盖测试,也僦是说在今年第四季度,人人影视的用户们就可以使用 CVN 网络进行支付或者赚钱了CVN 测试网络将在 2019 年第一季度完成开发,主网将在 2019 年第三季度上线

人人影视曾因版权管制等问题,一路走来磕磕绊绊CVN 能让人人影视走得多远?前景值得期待

【免责声明】 中金网发布此信息目的在于传播更多信息,与本网站立场无关中金网不保证该信息(包括但不限于文字、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。相关信息并未经过本网站证实不对您构成任何投资建议,据此操作风险自担。

}

我要回帖

更多关于 怎样找到志同道合的人 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信