区块链

区块链

比原链CTO James | Go语言成为区块链主流开发语言的四点理由

文章分享Bytom 发表了文章 • 0 个评论 • 685 次浏览 • 2019-11-27 07:31 • 来自相关话题

11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里、 ...查看全部


11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里、网易的技术专家带来Kubernetes、区块链、日志采集、云原生等话题的分享。James向大家介绍了Go语言特性在区块链中的应用还分析了Go语言成为区块链主流开发语言的原因。

比原链的系统架构




在区块链系统中内核层是最核心的,他承接了区块验证、交易验证、节点维护、打包挖矿等重多职责。通信层掌管了区块链系统的网络服务,区块链的网络更像P2P的网络形式,他呈网状扩散,负责区块同步、交易同步、节点发现等重要的功能。钱包层是直接和用户发生交互的一层,他的职责是资产管理、私钥管理,并与内核层通信验证区块交易。



以Bytom为例,他的内核层分为了五个的模块。我们举例描述几个主要的模块。

孤儿块管理:孤儿块就是由矿工挖出但未成为主链区块的区块(在相同高度产生2个甚至更多的合法区块,一个区块成为主链,剩下的则称为孤儿块),孤儿块管理就是将未成为主链区块的孤儿块存储起来。举个例子,我现在挖到的区块是100,那么下一个区块理论上是101,但是在网络层发生延时的时候,可能会发生先出102再出101的情况,那么孤儿块管理会将这些父块未到的子块先缓存起来。

共识层:确认一个块是否合法。分为区块头验证和交易验证。区块头验证需要验证它的父块和时间戳,同是需要算力来保证记账权利。交易验证比原特别的设计了一层BC层,这层在交易验证时会获得更好的性能,交易验证还和智能合约相关,交易被验证时参数会参入虚拟机验证该交易是否合法。

区块树管理:又称为Block Index,作用是记录全网所有的块,保存了全网所有块的一张镜像图。因为有孤儿块,所有它并不是链式结构的,会有分叉的情况,所以称为区块树。举个例子,区块树管理好比有一个分布式系统,但无法保证每个节点的状态一致,可能会出现同一个高度产生同时参生区块的情况。区块树管理就是具备了在节点状态不一致的情况下让系统回滚到正确的区块这个功能。

数据存储:将区块数据做持久化存储。包含两种数据,第一种是区块数据,会在网络上进行广播的原生区块信息;第二种是UTXO数据,存储UTXO数据是为了更快的验证一笔UTXO是否可以花费,而不需要去遍历所有区块信息。

交易池:维护了所有全网发出的但是还未被确认的交易。跟它关联最大的是挖矿模块,挖矿模块每次要产生一个新区块的时候,它会从交易池拿一些交易打包成块,然后用Tensority共识算法进行工作量验算。举个例子,在节点打包交易之前,交易处在一个未确认的状态之下,交易池会将这些未确认的交易保存起来,分配给后面的矿工用于打包。

WHY GOLANG?




第一点,区块链是多模块异步协同工作的,分成了P2P层、钱包层、内核层。其中内核层、情报层里面都有不同的很多子模块,在负责不同的事情。Go语言做得很出色非常适合做这方面的开发。

第二点,区块链项目有核心团队但是主要还是依赖社区参与,Go语言编译上相对于其他语言稍微严格一点,在制定规范后可以使不同开发者代码风格相近,有利于协同工作的展开。

第三点,Go语言社区完善,有很多非常好的开源库支持,使用起来非常方便用户体验良好。

第四点,主流语言的头部效应,在区块链的项目里面超过85%的项目都是基于Go语言开发的,大部分区块链工程师都擅长Go语言,所以当新的项目开始的时候,会首选Go语言。

对区块链感兴趣的程序员可以投递简历至:james@bytom.io

NEO 3.0开发进展 | 「原生合约」开发完成

文章分享NEO1 发表了文章 • 1 个评论 • 566 次浏览 • 2019-05-15 10:32 • 来自相关话题

NEO 3.0中的原生合约 今天为大家带来NEO 3.0开发中的一些最新进展,其中最主要的是一个被称为“原生合约”的功能。原生合约是NEO 3.0中NeoContract组件的一部分,目前已经开发完成并被合并到了master分支。Ne ...查看全部
NEO 3.0中的原生合约

今天为大家带来NEO 3.0开发中的一些最新进展,其中最主要的是一个被称为“原生合约”的功能。原生合约是NEO 3.0中NeoContract组件的一部分,目前已经开发完成并被合并到了master分支。NeoContract的其它部分包括:清单与权限系统、互联网资源访问(预言机)、投票系统(链上治理)等,将在未来几个月内被设计并开发。
目前已经开发完成的原生合约是两个代币合约:NEO和GAS。与它们的前辈(NEO 2.x中UTXO版的NEO和GAS)相比,它们实现了原有的全部功能,例如:转账、GAS奖励、共识节点选举和投票等。此外,原生合约还提供了一些额外的功能。

原生合约的优势

在NEO 3.0中,一切皆合约。对于像NEO和GAS这种系统对象,它们也是运行在智能合约之中的。虽然使用普通的智能合约来构建NEO和GAS也是一个可行的方案,但是采用原生合约来构建NEO和GAS,可以使它们的运行速度与在虚拟机中相比更快。而且,如果采用原生合约,即使未来合约的内容发生变化,例如添加了新的功能,合约的hash也不会改变。
当NEO和GAS成为智能合约后,它们所提供的系统功能也会成为合约的一部分,向用户和其它合约开放接口,使得任意合约都可以方便地与之集成。此外,新的NEO和GAS合约与NEP-5标准兼容,可以使用任意钱包和客户端来直接对资产进行管理。其它合约也可以通过NEP-5的接口来与NEO和GAS集成,开发出更加高级的功能。
特别地,对于原生合约版的GAS,我们有了一项新的特性。过去,为了获取GAS奖励,你需要经历3个步骤:转账NEO,提取GAS,获得GAS。借助原生合约的强大功能,现在,每次你发送或接收NEO转账时,系统都会自动为你提取GAS奖励,无需手动操作。

兼容性

绝大部分的原生合约功能都是与NEO 2.x相兼容的。因此,这项功能将会在适当的时候被移植到NEO 2.x。一旦这项移植被成功部署,将会为普通用户、开发者和交易所带来巨大的好处。
首先,对于DApp的开发者而言,他们可以方便地在项目中加入与NEO或GAS相结合的经济模型,这在以前是非常困难的。
其次,对于很多交易所而言,它们会因为存在大量用户充值的NEO而获取GAS奖励。交易所应该将这些GAS分发给用户,然而交易所需要进行许多复杂的步骤。而这个过程现在将会变得轻松无比。
最后,由于采用了NEO 3.0中的原生合约技术,未来当用户从NEO 2.x迁移到NEO 3.0时将会变得更加平滑。
对生态项目而言,本次更新将不会影响目前主网上已部署的智能合约,新智能合约的部署及调用流程也不会发生改变。对NEO/GAS持有者而言, 本次更新将不会影响交易所及钱包的正常使用。

下一步计划

NEO 3.0的开发工作依旧在紧锣密鼓地进行中。目前新的价格计算模型方案已经确定。新的P2P协议也在设计中,并且已经添加了LZ4压缩选项,UDP协议支持也在开发中。
欢迎关注我们的微信公众号【NEO智能经济】,持续为你更新后续进展!

mongo-go-driver

Golangkevin 回复了问题 • 2 人关注 • 2 个回复 • 815 次浏览 • 2019-04-22 11:27 • 来自相关话题

【广州】招聘中高级golang开发工程师/技术组长15-30K

回复

招聘应聘bmkcrypto 发起了问题 • 1 人关注 • 0 个回复 • 531 次浏览 • 2019-03-25 13:45 • 来自相关话题

[广州坏猴子科技] 招聘中高级 golang 开发工程师/技术组长(base 广州天河)

招聘应聘bmkcrypto 发表了文章 • 1 个评论 • 387 次浏览 • 2019-03-06 17:32 • 来自相关话题

岗位职责: 1.负责系统服务端技术选型和架构; 2.负责系统核心模块的设计,开发和维护。 任职要求: 1.2 年以上 Golang 开发经验; ...查看全部
岗位职责:

1.负责系统服务端技术选型和架构;

2.负责系统核心模块的设计,开发和维护。

任职要求:

1.2 年以上 Golang 开发经验;

2.熟悉服务端接口开发,有一定的技术架构经验;

3.熟悉 http,protobuf,grpc ;

4.熟悉 goroutine,channel,io,http 等模块;

5.熟悉 gin,xorm,sqlboiler,go-micro 等优先;

6.掌握 mysql,pgsql,redis 基本使用;

7.有分布式,高并发系统开发经验优先;

8.掌握 linux,shell,js,docker 优先;

9.有个人技术博客优先。



公司全称:广州坏猴子网络科技有限公司

公司简介:

广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个基于区块链实现的去中心化数据流通平台,打造合规有序的数据流通生态。

工作地点:广州天河区羊城创意产业园

联系方式:

[ QQ ] 1426589457@qq.com

[薪酬福利]

1、薪酬:固定工资、绩效奖金、项目奖金、年终奖金、股权池及其他薪酬激励;

2、五险一金:入职即购买五险一金;

3、工作餐:免费提供优质工作餐;

4、法定假期:享受法定节假日及病假、婚假、产假、陪产假等各种假期,公司提供节日礼品福利;

5、带薪年假

6、员工活动:高逼格旅游、团建、拓展、户外活动及其他个性化活动等。

一经录用,公司提供广阔发展空间及有竞争力的薪资待遇。

【广州坏猴子科技】招聘初级c++/golang开发工程师

招聘应聘bmkcrypto 发表了文章 • 5 个评论 • 442 次浏览 • 2019-01-08 16:34 • 来自相关话题

公司全称:广州坏猴子网络科技有限公司 公司简介: 广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个 ...查看全部
公司全称:广州坏猴子网络科技有限公司

公司简介:

广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个基于区块链实现的去中心化数据流通平台,打造合规有序的数据流通生态。

工作地点:广州天河区羊城创意产业园

联系方式:

【QQ】1426589457
【邮箱】1426589457@qq.com

工作职责:

1、负责核心系统的开发和优化工作;

2、对自身承担模块的开发进度、代码质量负责;

职位要求:

1、计算机/数学等相关专业,1年及以上C/C++/python/golang 服务端开发经验,1年及以上golang开发经验, 熟悉golang语言内部实现原理;

2、学习能力强,具备一定的技术预研、技术难点攻关能力,有良好编程习惯和文档编写习惯;

3、有分布式系统开发设计经验,参与高并发程序开发的优先;

4、有大数据相关开发相关经验优先;

5、熟悉区块链技术,对区块链相关算法有研究的优先;

【薪酬福利】

1、薪酬:固定工资、绩效奖金、项目奖金、年终奖金、股权池及其他薪酬激励;

2、五险一金:入职即购买五险一金;

3、工作餐:免费提供优质工作餐;

4、法定假期:享受法定节假日及病假、婚假、产假、陪产假等各种假期,公司提供节日礼品福利;

5、带薪年假:入职满1年的员工给予带薪年休假;

6、员工活动:高逼格旅游、团建、拓展、户外活动及其他个性化活动等。

一经录用,公司提供广阔发展空间及有竞争力的薪资待遇。

链游成公链新宠,风口之下究竟哪家称王?

每日新闻NEO1 发表了文章 • 0 个评论 • 401 次浏览 • 2018-12-24 18:04 • 来自相关话题

以谜恋猫为起点,区块链游戏这趟列车已经风驰电掣地跑了满一年。回顾去年同期,整个数字货币市场都陷入了非理性的狂热中,天价猫不断刷新着记录,以太坊网络也一度拥堵到被业内外大肆嘲笑,“看,它竟然被一只猫给搞瘫痪了”。时隔一年,尽管养猫游戏热度已降,但是新玩法的兴起还 ...查看全部
以谜恋猫为起点,区块链游戏这趟列车已经风驰电掣地跑了满一年。回顾去年同期,整个数字货币市场都陷入了非理性的狂热中,天价猫不断刷新着记录,以太坊网络也一度拥堵到被业内外大肆嘲笑,“看,它竟然被一只猫给搞瘫痪了”。时隔一年,尽管养猫游戏热度已降,但是新玩法的兴起还是吸引了越来越多从业者、项目方、资本机构以及传统互联网巨头的关注。

在大家一直以来不断呼吁的加速应用落地声潮中,可以看到越来越多的公链平台都把目光转向了区块链游戏,尤其是市场走熊以来,链游领域俨然已经成为了行业新的救命稻草,被诸多底层平台视为生态布局,应用场景落地的重点方向。

作为链游的承载平台,各大公链或高调重金诱惑,或低调默默布局,但大家都希望自己的平台上面可以拥有种类丰富、活跃度高的DApp(去中心化应用)。实际上,自16年开始,全球共计前后发布了2万多种数字代币,这样意味着约有2万多条公链曾先后面世。但是,据本月上旬链塔智库和天德科技发布的《全球公链项目技术评估与分析蓝皮书》,目前,90%以上的公链都是“僵尸”链,只有约2000条公链还“活着”,而这其中又只有200条链是有价值的。

今年年中,中国工信部赛迪研究院发布了赛迪全球公有链技术评估指数(第7期)。指数排名显示,EOS、以太坊和比特股占据了榜单前三名,这是其连续第三次占据榜单前三位。不过,值得欣慰的是,在这次公链技术评估指数中,国内的星云链、公信链、NEO也紧随其后,并在不断进化当中。国内区块链的发展情况一直牵动着圈内人的心,今天,链鱼鱼(ID:lianyu180807)就国内公链在链游领域的布局进行了一番对比。


01 NEO:积累深厚,发力能否精准

2016年10月17日, NEO主网正式上线,至今已经稳定运行超过两年。在这两年时间内,无论是NEO的核心技术,社区建设还是项目生态都日益完善成熟。

就核心技术而言,NEO 独创的 dBFT 共识机制以稳定、安全、不分叉获得诸多好评,NEO 主网上线后的智能合约体系也在不断发展完善,目前已经可以支持多种主流编程语言,如 C#、Java、JS、Python 及 GO 语言。此外,NeoVM 更是当下行业中为数不多的拥有自有虚拟机的区块链项目。

在社区建设方面,NEO更是首屈一指。许多社区已经集结成团队,在业内颇有名气,比如,NEO最早的开发者社区City of Zion,为布局游戏生态而生的NEL以及南美开发者社区NEO Research等。目前,NEO的海外社区遍及美国、荷兰、德国、法国、意大利、俄罗斯、日本、韩国、新加坡等地,人数已逾百万。这些社区的不断壮大与源源不断的持续输出为NEO项目生态搭建打下了坚实的基础。

从种种迹象来看,NEO对其未来的项目生态建设有着非常清晰的规划,区块链游戏是重点角力赛道。今年上半年,NEO中国开发者社区NEL宣布孵化成立基于NEO的区块链游戏社区,该游戏社区致力于打造一个玩家分类自治的社区化游戏平台,真正做到让利于玩家、游戏开发商,让好游戏不再被埋没。

紧接着,游戏社区发布了首款基于NEO自主研发的卡牌游戏《疯狂角斗士》。与此同时,为了催生出更多优质作品,NEO还举办了为期四个月的游戏大赛,奖金总额高达350万元人民币。在游戏大赛闭幕式上,FunJumping创始人陈喜正式公布了“BlaCat”。据了解,这是基于NEO技术打造的链游平台DApp及开发工具套件(SDK),它能够让用户像玩传统游戏一样玩链游而不必进行复杂的钱包、交易所等一系列操作,同时让传统游戏开发者能无缝对接区块链。在这场游戏比赛中,诞生了诸如《NEO.Girl》、《BLOCKLORDS》以及《Card Maker》等多款具有一定趣味性的游戏,颇受业界瞩目。

就在当前的寒冬期,NEO在链游布局方面亦没有放慢的脚步,据悉,NEO已经和大型区块链沙盒游戏NEOWorld达成合作,NEOWorld将会在游戏中建立一个NEOLand,玩家可用NEO进行消费。此外,近日,NGC 旗下投资基金 NEO Eco Fund投资了区块链游戏制作平台链游大师(DGameMaker),该平台将提供完整的可视化工具、丰富的免费美术素材和一键发布的平台,让传统游戏开发者可以便捷地在NEO上编辑智能合约。

值得一提的是, BlaCat已经在本月中下旬开始正式陆续推出他们打磨良久的链游,上文中的三款链游在经过他们耐心地研发之后,终于将正式面世。目前,人们都将下一波牛市的到来押注在区块链游戏领域,因此这些游戏的陆续推出,也是在为整个市场做预热准备和探索。


02 星云链:应用虽多,日活都去哪儿了

现在的星云链,似乎有点过于安静。

随着激励计划的推进,目前星云链上的DApp数量已经上升至944个,仅次于以太坊。但让人大跌眼镜的是,所有DApp24小时日活只有15,交易额为0,几乎全军覆没。



实际上,星云链确实一直在大力推动社区生态的发展,尤其是在区块链游戏领域。

早在今年上半年,星云激励计划期间,游戏类应用频频获得周度、月度的优秀应用大奖,诸如“细胞进化”、“恐龙乐园”、“隐秘世界OL”等游戏也曾引起过巨大的讨论。为了拉开架势抢滩登陆,星云链更是先后与全球首家HTML5区块链平台”Egretia”、金山云区块链游戏生态“Project-X”、全球第一开源游戏引擎Cocos达成合作,动作之迅速,令人不得不称赞。

曾经的风光,如今的窘迫,让人难免唏嘘和疑问。究竟是什么原因导致目前的日活如此惨淡呢?要知道,星云链曾一致被认为是国产公链中的低调黑马。而之前DAPP开发者活动为整个NAS的生态引入的大量开发者,如今又都去哪里了呢?

再优秀的应用乏人问津,也就没有任何价值。包括星云链在内的底层平台和开发团队当下需要思考的问题是,如何有效增加日活和留存,让应用活久一点。

03 公信链:海量数据,流量是否有效转化

公信链的优势之一是其生态中拥有大量的个人用户数据,有丰富的流量支持。截至目前,布洛克城用户数量已经突破221万,吸引了众多区块链应用入驻,包括预言家、币得、利德,以及万利马、链与飞车等游戏应用。要知道这么多的用户数据是可以发挥出巨大的能量的,因为哪怕是以太坊或者EOS上面排名前几的DApp每天日活也只有几百至几千不等。

以万利宝为例,这是一款区块链养成游戏,目前已经累计用户数25万。显然,布洛克城强大的流量赋能为这款游戏在推广之初助力其快速获得了用户的认可和使用。

然而,目前布洛克城里共计入驻应用24款,其中游戏7款。可以看出游戏的比例并不高。当然,我们不得不承认,公信链的目标是打造可信数据的价值网络,区块链游戏是其释放数据潜力,丰富落地应用的一部分,但并不是重要方向。布洛克城已经上线小应用接入功能,可以帮助开发者快速开发和上线应用,但就目前上线的一系列游戏来看,质量有待提升。

如此高的用户注册量,其中如果诞生出爆款游戏或者其他应用,链鱼鱼(ID:lianyu180807)相信这一定会是区块链应用得以大规模推广的最佳契机。但是,目前来看,公信链之前积累的海量数据和流量并没有得到有效充分地利用,我们期待能够看到更高的用户转化率。

结语

区块链应用落地,是一项长期而艰难的路程,我们相信未来会一步步向我们靠近,但前提是我们要不停地探索和尝试。业内经过去年一年的摸索,大部分人得出的结论是,游戏的天生数字化决定了其与区块链结合的天然属性,必然是最先落地的应用方向。

区块链对于游戏的全新赋能是如此强大,以至于很少有人在深入了解后还能够抵抗住这种诱惑,越来越多的底层平台不约而同地将链游视为生态布局重点,也正是看中了两者结合的巨大潜力。不过,链游才刚刚起步,存在操作门槛高,游戏体验差,底层技术不成熟等诸多缺点,任重道远,还需要各方公链携手努力。

[广州坏猴子科技] 招聘 C++开发工程师/golang 开发工程师(15k-30k)

招聘应聘bmkcrypto 发表了文章 • 0 个评论 • 359 次浏览 • 2018-12-14 10:56 • 来自相关话题

公司全称:广州坏猴子网络科技有限公司 公司简介: 广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个 ...查看全部
公司全称:广州坏猴子网络科技有限公司

公司简介:

广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个基于区块链实现的去中心化数据流通平台,打造合规有序的数据流通生态。

工作地点:广州天河区羊城创意产业园

联系方式:

[ QQ ] 1426589457

[邮箱 ] 1426589457@qq.com

工作职责:

1、负责核心系统的开发和优化工作;

2、对自身承担模块的开发进度、代码质量负责;

职位要求:

1、计算机 /数学等相关专业,2 年及以上 C/C++/python/golang 服务端开发经验;

2、学习能力强,具备一定的技术预研、技术难点攻关能力,有良好编程习惯和文档编写习惯;

3、有分布式系统开发设计经验,参与高并发程序开发的优先;

4、有大数据相关开发相关经验优先;

5、熟悉区块链技术,对区块链相关算法有研究的优先;

[薪酬福利]

1、薪酬:固定工资、绩效奖金、项目奖金、年终奖金、股权池及其他薪酬激励;

2、五险一金:入职即购买五险一金;

3、工作餐:免费提供优质工作餐;

4、法定假期:享受法定节假日及病假、婚假、产假、陪产假等各种假期,公司提供节日礼品福利;

5、带薪年假:入职满 1 年的员工给予带薪年休假;

6、员工活动:高逼格旅游、团建、拓展、户外活动及其他个性化活动等。

一经录用,公司提供广阔发展空间及有竞争力的薪资待遇。

[上海][PPLabs][分布式加密云存储项目][招聘golang工程师/web后端工程师

招聘应聘mashoushan1989 发表了文章 • 5 个评论 • 616 次浏览 • 2018-11-30 14:26 • 来自相关话题

**公司简介:** - 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内offic ...查看全部
**公司简介:**
- 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内office位于上海浦东软件园。

**创始人团队:**
- 创始人:姚欣,蓝驰创投合伙人,原上海聚力传媒技术有限公司创始人兼首席执行官、PPLive创始人,AI创业营发起人。自PPTV被收购退出后,现任蓝驰创投合伙人,投资并关注AI及互联网科技行业;
- 联合创始人:王闻宇:连续成功创业者,原PPTV联合创始人和PPTV首席架构师,曾经独自完成大部分PPTV代码,精通P2P技术,后来主导了PPTV点播和云盘这两个分布式存储项目。2018年后联合创立现在的公司。在P2P技术,网络安全技术,存储技术,流媒体技术方面是世界级专家。github地址:https://github.com/omnigeeker 里面原创经典项目超过100个
- 知乎博客号:https://www.zhihu.com/people/elninowang/activities
公司网站:https://www.pp.io/

**招聘职位:go开发工程师 **

**职责描述:**
- 1、负责Blockchain底层相关模块的设计和开发;
- 2、负责Linux/Windows/Mac的存储性能优化,以及基于linux的嵌入式平台存储性能优化
- 3、负责Blockchain相关模块和代码的单元测试。

**任职要求:**
- 1、有两年以上相关开发经验,熟悉C/C++, Golang程序的设计和开发;
- 2、熟悉多线程、网络编程、异步IO等技术;
- 3、对数据结构、算法感兴趣的优先;
- 4、有大数据平台开发经验优先;
- 5、有安全相关领域相关经验优先;
- 6、有高性能存储系统经验者优先;
- 7、有Etherum、blockchain经验优先;

**招聘职位:Web后端开发工程**

**工作职责**
独立设计并完成 Web 后端功能开发,并配合前端完成整个 Web App 或 Native App 的开发工作。

**基本要求**
1. 拥有计算机、软件工程或相关专业本科及以上学历;
2. 拥有至少两年以上的 Web 后端开发经验,并且有完整的核心功能设计和开发经验;
3. 了解一些常用的数据结构及算法;
4. 熟练使用 Golang 进行 Web 后端开发并且对 Golang 的并发编程有一定了解;
5. 会使用至少一门脚本语言(Linux Shell、Python 等),并且能熟练操作 Linux 系统;
6. 熟练使用 MySQL、Redis 数据库系统;
7. 有良好的文档编写能力,并且能熟练阅读英文文档。

**优先条件**
1. 有网盘类工具开发经验的优先;
2. 有开发开源项目的经历,如有 `GitHub` 账号或技术博客,请在简历中写明。

**简历投递**:ash@pplabs.org,或微信(ID:mashoushan)直接联系

**公司地址**:上海浦东新区博霞路81号3F

NEO两周年对话,达鸿飞谈去中心化进程,公链竞争,稳定币……

每日新闻NEO1 发表了文章 • 0 个评论 • 522 次浏览 • 2018-11-02 11:23 • 来自相关话题

NEO,原名小蚁,2014年正式立项,2015年6月于Github实时开源,2016年10月,NEO主网正式上线。作为国内较早发起的区块链项目,成立以来,NEO团队亲历了区块链行业的高潮与低谷,数字货币市场的狂热与冷却,各国监管态度的模糊与清晰。 ...查看全部
NEO,原名小蚁,2014年正式立项,2015年6月于Github实时开源,2016年10月,NEO主网正式上线。作为国内较早发起的区块链项目,成立以来,NEO团队亲历了区块链行业的高潮与低谷,数字货币市场的狂热与冷却,各国监管态度的模糊与清晰。

回顾NEO的诞生,有几个里程碑式的重要节点:从2014年比特创业应的想法孕育,到微天使网站的推出,致力于协助小微资产众筹;2015年9月,NEO前身——小蚁发布白皮书,并完成两次众筹,为团队筹集后续几年开发和生态搭建的充足资金;2017年6月,小蚁品牌升级,NEO正式面世。



2014年至今NEO发展路线图 (来源:通证经济研究院)

根据小葱区块链发布的相关研究报告,NEO自主网上线以来,表现出主网运转稳定,开发者社区成熟,基础设施完善,社群热度较高等发展优势。但同时也存在共识中心化程度高,应用生态薄弱,技术进展迟滞创新后劲不足,NEO 3.0实践方案不明确等问题。

 

站在NEO两周年的节点上,我们对NEO创始人达鸿飞进行了一次访问,不限于NEO本身,我们还问了达鸿飞这些问题:

近两年公有链的发展经历了什么变化?现状和核心问题? 国内团队主导的项目如何真正“走出去”? NEO受争议的共识节点去中心化进展? 公链场景如何取舍,金融OR游戏? 行业未来的关键词? 对稳定币,STO等新热点的看法? 对新近入场的投资者和创业者们有哪些建议?

来看看国内最早的区块链拓荒者之一达鸿飞的分享:



 NEO创始人达鸿飞

 

 

区块链应用场景:游戏or金融?
 

 

8btc :NEO的目标是实现智能经济,现在的发展状况跟你最初想要做的一样吗?

达鸿飞:整个大方向没什么变化,但是你在具体着眼一点,在现在这个时间做什么事情,当然会有侧重。创业过程像是打篮球,打篮球有个动作,一只脚站在原地不动,另一只脚在移动,然后再看往哪个方向,但是篮筐的方向永远是在那个位置的。比如最近的重点,我们跟游戏开发者接触比较多,一些游戏会在NEO上面进行开发。
8btc:看得出来最近NEO生态很重视游戏领域的发展,8月社区项目NEL举办了NEO区块链游戏开发大赛,NEO Global Capital还投资了区块链游戏开发平台Cocos-BCX,为什么看好区块链在游戏领域的发展前景?

达鸿飞:最早大家都想着区块链跟金融结合,有很强的颠覆性,但是也有很强的阻力,因为金融是一个强监管的行业,不管在哪个国家,与金融结合有两种方式,一种是跟有牌照的传统金融机构合作,但这种方式下很多业务也会受到这些牌照的阻力,需要满足这个牌照的需求,要满足很多监管的条件,对区块链公司来说很难做到;第二种就是不管这些牌照,想办法绕过,做一些不需要牌照就能完成的事情。
 

本质上是触碰现有的金融监管就很难进行下去。有牌照的机构的想法就是我已经有牌照了,本来就可以进行这个业务,为什么还要跟区块链公司合作?没有牌照的最后不能合规,很难大规模推广应用。

自然而然有一些游戏开发者开始到NEO上来做开发,也看到在以太坊这样的其他的项目平台上,游戏也是比较多人应用的一个方向,游戏里面的数字资产跟区块链里面的通证,天生是比较好的结合。

现有的一些游戏,区块链只是给它加上了一些东西,它里面的数字资产可以用区块链记录来流转的这样一个游戏,相当于加分了,而不是彻底把它变成一个只能在区块链上才能玩的游戏;另外一些博彩博弈类往往都是只能在区块链上玩的游戏,短期内这类游戏是比较容易火的,因为他利用了人性的弱点,长期来看最终游戏的可玩性是非常重要的,重点还是在游戏本身上。

未来出现的区块链游戏可能是像头号玩家电影中所描述的虚拟世界,虚拟世界里的资产都是记录在区块链上,里面需要有很好的经济模型,但什么时候能出现这样一款游戏,只能等他横空出世。我希望未来能出现我女儿也能玩的区块链游戏。

 
共识节点如何去中心化?
 

 

8btc :NEO的去中心化进程外界有些质疑,最近共识节点去中心化这件事整个社区也比较关注,这方面有哪些进展和规划?

达鸿飞:现在NEO主网上共有7个共识节点,NEO Foundation运行其中的6个,NEO开发者社区CoZ运行一个,测试网上的7个共识节点分别由NEO Foundation维护2个、NEO Global Development维护1个、CityOfZion社区维护2个、荷兰皇家电信(KPN)维护1个、瑞士电信(Swisscom Blockchain)维护1个。测试网上运行的共识节点比如运营半年以上的时间能够证明他们运营良好的话,所有的token持有人就可以对他们进行投票,这些节点就可能被选为主网上的节点运营方。
 

但投票参与率并不高,目前主要是交易所和团队参与投票,所以NEO团队目前对这件事情影响力还比较强,但随着未来若干年后团队把票逐渐分发出去,团队的影响力还会继续减弱。

8btc:非团队的来运营节点,比如提到的国家级别的电信公司,它们运营的动力是什么?

达鸿飞:运营的动力是第一他们在技术能力和硬件条件上完全没问题,第二他们希望能深入了解和接触一条公链,这样对于他们未来开展区块链业务有很大帮助。
 
公链需要有原创性,开发者友好很重要
 

 

8btc:从2014年的比特创业营直到现在,你几乎经历了中国区块链发展全程,也见证了从国内诞生第一条公链项目,到今年公链层出不穷。谈谈你眼里近几年公链的发展演变进程?目前来看公链领域需要克服的主要困难有哪些?

达鸿飞:近两年公有链发生的变化:第一是数量变多,因为相对来说,公有链的估值市场比较追捧,所以大家都愿意去做公有链;第二个变化就是大家都是奔着全球市场去的,从第一天开始就很国际化。
 

困难在于,如果是由中国团队发起的项目,和海外的团队发起的项目相比,还有很大的文化语言壁垒;另外在底层核心技术上原创性弱一些。公有链需要有原创性,基础设施如果跟别人的技术架构一样的话,其实应该加入到别的项目里面把这个项目做的更好。

8btc:的确非常多,所以公链之间存不存在竞争?今年有不少知名公链几乎在同一时期上线了主网,NEO团队会有危机感吗?

达鸿飞:公有链太多,但上层应用和开发者都不够用。就像操作系统做好了,上面没有程序跑,操作系统就没有生命力。有危机感,对NEO来说,面对公链强烈竞争时,应对措施主要是观念上的——如何做成对开发者最友好的,开发者容易上手的公链?比如文档,教程就很重要,怎样能让一个会编程的开发者立刻能够到NEO链上,变成一个智能合约开发者。
 
产品是发展海外社区第一要素
 

 

8btc:你也提到过今年1月在海外做了一次比较成功的开发者大赛,NEO在海外整体的口碑和热度可能是国内团队主导的项目中最好的,能不能分享一下这两年怎么建设海外社区的?或者在海外社区的建设过程中遇到了哪些问题,怎么解决的,分享一些经验?

达鸿飞:海外社区很多时候还是看产品和技术更多一些,因此把产品做好是发展海外社区第一个重要因素。第二是传播,中国团队发展海外社区肯定面临文化隔阂,因此需要有比如英文材料,当地活动能够传播出去。
8btc:你在海外时间也很多,你感受到的国内外区块链发展有什么差异?

达鸿飞:实际上除了中国,还有各个地方,每个地方发展都不一样。如果跟北美比较,我们这的市场做的多了一点,而真正做底层开发的比较少;第二从监管方面来讲,小国家相对来说,区块链项目更容易接触到监管机构。
 
“愿景”是未来行业关键词
 

 

8btc:2018年已经过去大半,未来的一年你觉得行业发展的关键词会是什么?

达鸿飞:Vision.愿景吧。最近一年中,我们看到大量的新出现的项目,可能大部分这些团队想做的是:我要做一个东西,市值可以做到以太坊的百分之一,或者百分之五,就觉得它成功了。我觉得这类想法实际上很难在一个比较平静的市场里面坚持下去。
 

反而是那些真正有很强愿景,真正想做有深远影响的,有意义的事情的团队,更容易在比较平静的行业里沉下心来做事情。而做的这些事情在下一次市场获得更多关注的时候,就容易发掘出来,也更容易获得市场的认可。

 
给行业投入时间和智力,而不仅仅是金钱
 

 

8btc:有哪些建议可以分享给当前市场环境下,接触区块链不久或者想要投入区块链行业的创业者和投资者的?

达鸿飞:做一个聪明的投资者,把自己的时间和智力投在行业里面,做一些创造性的事,而不要仅仅把金钱投在这个行业,指望它明天怎么涨,怎么翻多少倍。我看到的把时间和自己的智力投入进来的,长远来看都挺不错,但仅仅是投机性的投一些钱的,也许短期内会赚不少,但又涨有跌,最终市场给的只有少数的幸运儿能留着,很大部份都会还回去的。
 
如果一样东西符合原来的定义和监管,那他的颠覆性是有限的
 

 

8btc:最近很热的几个行业话题,比如稳定币和STO。Circle Coin (USDC)、Gemini Dollar (GUSD)和Paxos (PAX)这些与USDT相比,新一代的通过审计甚至符合监管的稳定币出现;而STO,很多人认为它可能是ICO之后的下一轮造富热点,你怎么看?

达鸿飞:符合监管的稳定币出现,如果监管不变,我觉得没什么用,跟银行转账没有区别。如果会有一样东西,它百分之百符合原来监管的具体的措施,而不是监管的实际意图,很可能它就跟原来那个产品,原来世界上已经现存的那种模式是一样的。
8btc:但大家会认为在数字货币世界里面,还是需要一个相对稳定的类似基础设施的稳定币,不然没法被大规模普及接受。

达鸿飞:对,我同意是需要的,但是需要的这个模式,如果不能推动有新的监管的出现,可能意义就不是那么大。
8btc:意思是可能需要配合新的监管框架一起出现,而不是在原有的监管框架里面?

达鸿飞:对,如果它能够被定义为一个原有的东西,并且又符合监管的所有条件的话,那它本身就是一个原有的东西。比如被定义为债券,那它就是一个债券,如果被定义为一个什么东西,又符合原有的所有监管需求,很可能工作方式就跟原来的那个东西几乎一样,最多就是提高了效率。
 

一个新事物,如果它符合原有监管和原有对某种东西的定义,而且并没有推动新的监管模式出现,很可能它就是原有东西的一个高效率的升级版,它能够提供的颠覆性是有限的。它就只是一个优化版本,而不是一个具有颠覆性的产品。

NEO主要技术社区成员大曝光

文章分享NEO1 发表了文章 • 0 个评论 • 603 次浏览 • 2018-10-26 14:46 • 来自相关话题

10月17号NEO主网上线2周年,作为一个社区项目离不开各个成员的贡献。经常被别人问到“为什么你们社区运营得这么好?为什么你们的海外社区那么强?”在这篇文章中将为大家带来回归本质的解答。NEO的几个核心技术社区在这2年中做了哪些贡献呢?取得了哪些成绩?关于最初 ...查看全部
10月17号NEO主网上线2周年,作为一个社区项目离不开各个成员的贡献。经常被别人问到“为什么你们社区运营得这么好?为什么你们的海外社区那么强?”在这篇文章中将为大家带来回归本质的解答。NEO的几个核心技术社区在这2年中做了哪些贡献呢?取得了哪些成绩?关于最初他们是如何了解到NEO,又是为什么选择了NEO呢,这其中有哪些有趣的小故事?


一、City of Zion (CoZ)

CoZ是NEO上第一个技术社区,他们由近50位开发者组成。开发了基于NEO的跨平台轻钱包NEOWallet(目前有Windows、OSX、Linux等版本)、NEO区块链浏览器NEOScan、编译器NEO-PHTHON,节点监视器Neomon……并且在社区内组织多语种信息翻译服务全球的社区成员及爱好者。创始人兼开发者Fabio拥有计算科学本科学位及机械工程硕士学位,成立CoZ之前已经参与过几个大型项目的开发。在此之前,Fabio在巴西共同创立并担任Lemonaid Learning Analytics创业公司的首席技术官。


本来希望Fabio可以将他与NEO结缘的故事写下来,但他最近在加速开发NEON钱包的事宜,所以这里就简单罗列了这两年CoZ取得的一些关键成就:



• 在全球范围内形成了NEO生态独有的开源开发者社区

• 翻译并完善技术文档以提高全球采用率

• 开发NEON钱包

• 开发Neoscan与Neomon

• 以Python、Golang等多种语言实现VM、Core与编译器

• 开发neo-sharp与hyperVM

• 开发api和开发者文库(如neon-js)

• 部署包括6个共识节点(3个在测试网,3个在主网)在内的多个全节点

• 品牌在多个社交平台成功完成从小蚁到NEO的升级

• 为NEO大会与见面会策划支持、外联和黑客松等活动

• 开发并审计NEO改进计划(NEP)

• 对NEO平台进行多次安全审计

• 开发neo-local与neo-tools等简单易用的工具



Fabio说NEON钱包开发结束会给我们一个惊喜,一起来期待吧。



三、 NewEconoLab (NEL)



我们都知道,NEO在国内还有一个最大的技术社区NEL——NewEconoLab,由刘永新和李剑英共同创立。NEL把技术布道和基础设施建设作为自己的使命,通过线下讲座、线上直播、社区问答、文字介绍等形式推广区块链平台,帮助开发者转型为区块链开发者。通过承担区块链生态必要的非盈利基础设施建设,例如智能合约在线编译器,区块链浏览器等,让有一定区块链和智能合约开发经验的开发者可以选择加入到这些项目中。



今年NEL在除了非盈利基础设施之外,也开发一些商业性项目,旨在让区块链应用离人们更近,目前实现NEO上的域名服务NNS——获得了分布式资本和NGC战略投资,在2月初发布了白皮书,10月份已上线,测试网首次公测吸引参与人数达一万人。10月9日,NNS主网版本正式上线,上线3小时域名开标数突破1000,上线6小时,突破2000。除此之外,NNS与O3钱包达成合作协议。O3将集成NNS域名服务,允许NEO域名服务的注册和使用。NEL提出将为所有NEO生态项目免费提供技术咨询服务。


从2017年11月份开始,NEL就开始了NEO生态里一些基础设施项目的开发,例如浏览器,智能合约开发调试工具,ts, C#接口,轻钱包接口服务。并多次参与线下交流活动。同时,初步完成了NEODUN硬件钱包的设计工作。


NEO生态内的技术社区也经常交流合作,今年1月份,NEL与CoZ初步达成意向,在项目上增加交流沟通,相互支持。NEL把CoZ提供的NEO js接口文件翻译成了中文。


在游戏方面的拓展,NEL孵化第一个基于NEO的游戏“疯狂角斗士”。并举办第一届NEO游戏开发大赛,历时三个多月落下帷幕,共有来自全球各个国家与地区的200多位开发者报名参与比赛,有效参赛作品数量46个,涵盖塔防、卡牌、沙盒、益智、养成、挂机、经营等类型。奖金总额达到350万元人民币,是迄今为止NEO在全球范围举办的规格最高的大型游戏比赛。


在基础设施建设方面,NEL孵化了BlaCat平台。BlaCat是基于NEO技术打造的链游平台,为游戏类dApp提供了游戏开发工具套件(SDK),让用户能像玩传统游戏一样玩链游而不必进行复杂的钱包、交易所等一系列操作,同时让传统游戏开发者能无缝对接区块链。BlaCat则孵化了Zorochain,ZoroChain是一条介于应用与公链之间的链,在应用链上采用了特有的共识算法,简化了共识步骤,让共识能够快速完成,同时采用应用链与节点多对多的拓扑结构,任意节点可以随时加入网络,为任意应用链提供服务。ZoroChain是真正意义上的去中心化应用链,提供了与NEO公链交互接口。


在社区建设方面NEL设立了开发者奖励计划,鼓励自行设计开发NEO相关生态项目。并与Trinity钱包建立战略合作关系,搭建了NEL区块链开发者论坛。


经过近一年的发展,NEL社区形成了以非营利性的基础设施项目,商业性的基础设施项目和游戏类项目为主的格局。

一、NEOResearch


NeoResearch是来自巴西的NEO技术社区,核心成员是Vitor和Igor(称Coelho兄弟)。2017年7月前后,Vitor和Igor第一次接触了NEO团队。当时兄弟俩正在忙于“SciChain”系统的设计工作,“SciChain”的想法于2016年首次提出,项目的初衷是创建一个基于以太坊平台运行的系统(用来处理在区块链上提交的科学文献),但在这时,Coelho兄弟接触了NEO核心—C#编译器。


他们当时面临的第一个难题是需要通过Linux实现智能合约的编译。在多位研究人员的共同努力下,他们终于在12月前后实现了智能合约在独立Linux环境下的完整编译。紧接着,他们就发布了NeoCompiler——NEO在线编译器。

一开始,NeoResearch的目的很简单,主要是创建一个自用的系统以推进自己的开发进程。但几周后便有了不同的想法,甚至有了设计一个有自适应性可自我校准的测试网的想法。


在达叔、铮文、Peter的指引下,这个简单的编译器逐渐演变成了可以对智能合约进行测试与分析的生态系统,生态访问量现已超过40万(基于几个月前的指标)。

后来NeoCompiler生态的去中心化程度逐渐加深,由编译器RPC服务器、用于构建交易的共享私网和工具,以及基本的包含教学指引功能的转换器组成。


NeoResearch作为重要的技术社区成员,经常参与活动做分享,曾受邀前往澳大利亚进行了一次分享,亲自讨论并重点介绍了NEO科研社区的基石所在。


“NeoResearch”这个社区像一座桥梁,在生态的各个板块间起到沟通连接的作用。此外,因为base在巴西,他们还身肩开拓南美科学前沿的任务,NeoResearch团队在Tamar Salant(NEO社区生态拓展经理)的协助下开始在南美发表科研见解。

为了促进与NEO社区的沟通,NeoResearch还为南美及巴西社区互动计划的实施给予了支持,包括开展更多活动/编程实践活动,并提出与院校及当地公司广泛建立合作关系的提议。

为了响应快速增长的需求,NeoResearch还促成了AmazoNeo这个新社区的创建。

AmazoNeo是由Igor、Vitor与Alexandre联合创建的社区,职责是与NEO南美建立合作关系,现在也正致力建立这类合作关系。


目前NeoResearch的工作重点主要包括以下几点:

• 完善NeoCompiler生态

• 优化NeoVM

• 学习优化策略从而帮助NEO团队实现10万TPS的目标并完善NEO区块链


最近他们发布了一个新工具——SMACCO,这是在包含教学指引功能的智能账户创建工具方面取得的重要进展,使NEO提供比竞争对手更具优势的区块链工具。

智能账户与智能交易是区块链的核心,同样重要的还有各种应用的工业需求以及跨链协议,一些引人关注的合作关系也表现出了这些技术的需求。

Lgor说到,项目发展至今绝非一蹴而就,是各个团队与匿名贡献者付诸于时间和心血的结晶。“但隧道尽头的光无疑是人们的关注点。从这个层面看,对NEO的关注就好比是那道光,开发者和整个行业都在这个项目上看到了一个光明的未来。”

四、社区内的大神

NEO的技术社区内可谓是卧虎藏龙,在格鲁吉亚的Hackathon上,我们的评委是魔兽争霸3的世界冠军Insomnia。这位曾让几千万玩家陷入疯狂,在国内有百万级粉丝,他的魅力不亚于现在的蔡徐坤走进女生宿舍的样子。当战衣褪去,英雄的光荣与梦想在区块链的世界里延续,他蜕变成NEO区块链开发者的Zdravko Georigiev,在社区内贡献自己的力量。他经常出没东欧地区的NEO Workshop担任讲师,欢迎更多的开发者加入NEO,与Insomnia在区块链的世界里并肩作战。

10月17号NEO主网上线已经2周年了,NEO实现了主网稳定运行、社区生态不断壮大,整体安全性以及性能的提升。目前,区块高度约287万,接入的dApp数量有100+款。自成立以来,NEO团队亲历了区块链行业的高潮与低谷,但社区成员始终是我们的中坚力量,投入自己所有的时间精力,稳步前行,相信智能经济的变革终将到来。

招聘-区块链高级工程师《25k-45k》待遇优厚

回复

招聘应聘星际范式 发起了问题 • 1 人关注 • 0 个回复 • 1036 次浏览 • 2018-09-05 13:02 • 来自相关话题

基于区块链底层技术的分布式云存储项目招聘go开发

招聘应聘mashoushan1989 发表了文章 • 1 个评论 • 907 次浏览 • 2018-09-04 12:01 • 来自相关话题

**公司简介:** - 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内office位于上 ...查看全部
**公司简介:**
- 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内office位于上海浦东软件园。

**创始人团队:**
- 创始人:姚欣,蓝驰创投合伙人,原上海聚力传媒技术有限公司创始人兼首席执行官、PPLive创始人,AI创业营发起人。自PPTV被收购退出后,现任蓝驰创投合伙人,投资并关注AI及互联网科技行业;

- 联合创始人:王闻宇:连续成功创业者,原PPTV联合创始人和PPTV首席架构师,曾经独自完成大部分PPTV代码,精通P2P技术,后来主导了PPTV点播和云盘这两个分布式存储项目。2018年后联合创立现在的公司。在P2P技术,网络安全技术,存储技术,流媒体技术方面是世界级专家。github地址:http://www.github.com/elninowang 里面原创经典项目超过100个
- 知乎博客号:https://www.zhihu.com/people/elninowang/activities

**招聘职位:go开发工程师**
职责描述:
- 1、负责Blockchain底层相关模块的设计和开发;
- 2、负责Linux/Windows/Mac的存储性能优化,以及基于linux的嵌入式平台存储性能优化
- 3、负责Blockchain相关模块和代码的单元测试。

任职要求:
- 1、有两年以上相关开发经验,熟悉C/C++, Golang程序的设计和开发;
- 2、熟悉多线程、网络编程、异步IO等技术;
- 3、对数据结构、算法感兴趣的优先;
- 4、有大数据平台开发经验优先;
- 5、有安全相关领域相关经验优先;
- 6、有高性能存储系统经验者优先;
- 7、有Etherum、blockchain经验优先;

**简历投递:mingren@ppfs.io**

【北京】Matrix区块链公司招聘golang工程师~持续招聘中~

招聘应聘MaxChen 发表了文章 • 13 个评论 • 1070 次浏览 • 2018-08-22 11:34 • 来自相关话题

>MATRIX 是将人工智能与区块链技术深度结合而创造的新一代的区块链,包括基础主链、人工智能、安全防御、系统应用,以及面向用户友好和开发人员优化的区块链操作系统,是全球人工智能+区块链领域的倡导者和领军者。 > ----本公司依托位 ...查看全部
>MATRIX 是将人工智能与区块链技术深度结合而创造的新一代的区块链,包括基础主链、人工智能、安全防御、系统应用,以及面向用户友好和开发人员优化的区块链操作系统,是全球人工智能+区块链领域的倡导者和领军者。

> ----本公司依托位于香港的区块链总公司Matrix AI Network。目前有包括赛伯乐、风和投资、TaTa等在内的多家公司提供资金支持。公司拥有国内顶尖的人工智能(AI)、芯片设计、生态经济等多方面领域的专家提供技术保障。

> ----作为区块链 3.0 的开创者,MATRIX 完整实践了“人工智能+区块链”。为一带一路战略发展中心、中老森林项目、癌症辅助诊疗、数字资产证券化管理等各生态项目提供技术需求。


公司官网:[www.matrix.io](http://www.matrix.io/ "www.matrix.io")

# 工作职责
1. 从事区块链方向的设计和研发工作,研究区块链的协议,运行机制和底层实现等;
2. 参与模块设计开发,业务逻辑开发等工作;
3. 参与相关子系统及业务流程优化重构,研发过程优化工作。

# 任职要求
1. 本科及以上学历,计算机相关专业优先,2年以上开发经验;
2. 精通Linux下编程,熟悉TCP/IP协议,了解常用算法和数据结构;
3. 熟悉分布式、 多线程及高性能的设计与编码优先;
4. 良好的团队协作精神和执行力,较强的分析问题和解决问题能力

# 其他
- 薪酬范围:15k-30k
- 福利待遇:每周双休+团队Outing+免费水果零食+...
- 工作地点:尚东数字谷A区2号B座1层
- 简历投至:zelongchen@matrix.io

通过blockchain_go分析区块链交易原理

文章分享pert 发表了文章 • 0 个评论 • 846 次浏览 • 2018-07-15 14:18 • 来自相关话题

[原文链接-石匠的Blog](http://www.bugclosed.com/post/38) ### 1.背景 在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下。需要进行 ...查看全部


[原文链接-石匠的Blog](http://www.bugclosed.com/post/38)

### 1.背景
在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下。需要进行交易,首先就需要有交易的双方以及他们的认证机制,其次是各自的资金账户规则。在分布式账本系统里面,需要有机制能够准确验证一个用户身份以及对账户资金的精确计算,不能出现一丁点差错。在区块链中交易通过Transaction表示,而账户的自己并不是在每个节点上保存每个用户的一个余额的数字,而是通过历史交易信息计算而来(历史交易不可篡改),其中的关键机制是UTXO。

### 2.身份认证
在区块链身份认证是采用RSA非对称加密体系完成,每个用户在会拥有一个“钱包”,钱包是通过安全的椭圆曲线加密算法生成,其中包括一对公私钥。私钥自己保留不能暴露,用作加密,签名等,公钥公开给所有人,用于信息验证等。只要是用私钥签名的信息,就可以通过配对的公钥解码认证,不可抵赖。在blockchain_go中,钱包实现如下:

```
// Wallet stores private and public keys
type Wallet struct {
PrivateKey ecdsa.PrivateKey
PublicKey []byte
}

// NewWallet creates and returns a Wallet
func NewWallet() *Wallet {
private, public := newKeyPair()
wallet := Wallet{private, public}

return &wallet
}
func newKeyPair() (ecdsa.PrivateKey, []byte) {
curve := elliptic.P256() //椭圆曲线
private, err := ecdsa.GenerateKey(curve, rand.Reader) //生成私钥
if err != nil {
log.Panic(err)
}
pubKey := append(private.PublicKey.X.Bytes(),private.PublicKey.Y.Bytes()...) //合成公钥

return *private, pubKey
}
```
钱包最重要的功能就是为用户提供身份认证和加解密的公私钥对。

### 3.什么是Transaction
区块链中的Transaction(交易)就是一批输入和输出的集合,比如A通过交易给B10个代币(token),那么交易就是A输入10代币,输出变成B得到10代币,这样A就减少10代币,B增加10代币,再将这个交易信息存储到区块链中固化后,A和B在区块链中的账号状态就发生了永久性不可逆的变化。

在blockchain_go中transaction的定义如下:

```
// TXInput represents a transaction input
type TXInput struct {
Txid []byte
Vout int
Signature []byte
PubKey []byte
}
// TXOutput represents a transaction output
type TXOutput struct {
Value int
PubKeyHash []byte
}

type Transaction struct {
ID []byte //交易唯一ID
Vin []TXInput //交易输入序列
Vout []TXOutput //交易输出序列
}

```
从定义可以看到Transaction就是输入和输出的集合,输入和输出的关系如下图:
![交易输入输出关系图](http://p8t8zn8m5.bkt.clouddn.com/wblog/input_output.png)

其中tx0,tx1,tx2等是独立的交易,每个交易通过输入产生输出,下面重点看看一个交易的输入和输出单位是怎么回事。

先看输出TXOutput:

+ Value : 表示这个输出中的代币数量
+ PubKeyHash : 存放了一个用户的公钥的hash值,表示这个输出里面的Value是属于哪个用户的

输入单元TXInput:

+ Txid : 交易ID(这个输入使用的是哪个交易的输出)
+ Vout : 该输入单元指向本次交易输出数组的下标,通俗讲就是,这个输入使用的是Txid中的第几个输出。
+ Signature : 输入发起方(转账出去方)的私钥签名本Transaction,表示自己认证了这个输入TXInput。
+ PubKey : 输入发起方的公钥

通俗来讲,一个TXInput结构表示 :

```
我要使用哪个交易(Txid)的哪个输出数组(Transaction.Vout)的下标(Vout)作为我本次输入的代币数值(TXOutput.Value)
```
因为交易的输入其实是需要指明要输入多少代币(Value),但是TXInput中并没有直接的代币字段,而唯一有代币字段的是在TXOuput中,所以这里使用的方式是在TXInput中指明了自己需要使用的代币在哪个TXOutput中。

TXInput中的Signature字段是发起用户对本次交易输入的签名,PubKey存放了用户的公钥,用于之前的验证(私钥签名,公钥验证)。


### 3.什么是UTXO
UTXO 是 Unspent Transaction Output 的缩写,意指“为花费的交易输出”,是中本聪最早在比特币中采用的一种技术方案。因为比特币中没有账户的概念,也就没有保存用户余额数值的机制。因为区块链中的历史交易都是被保存且不可修改的,而每一个交易(如前所述的Transaction)中又保存了“谁转移了多少给谁”的信息,所以要计算用户账户余额,只需要遍历所有交易进行累计即可。

从第三节的交易图可以看到,每笔交易的输入TXInput都是使用的是其他交易的输出TXOutput(只有输出中保存了该输出是属于哪个用户,价值多少)。如果一笔交易的输出被另外一个交易的输入引用了(TXInput中的Vout指向了该TXOutput),那么这笔输出就是“已花费”。如果一笔交易的输出没有被任何交易的输入引用,那么就是“未花费”。分析上图的tx3交易:

tx3有3个输入:

+ input 0 :来自tx0的output0,花费了这个tx0.output0.
+ input 1 :来自tx1的output1,花费了这个tx1.output1.
+ input 2 :来自了tx2的output0,花费了这个tx2.output0.

tx3有2个输出:

+ output 0 :没有被任何后续交易引用,表示“未花费”。
+ output 1 :被tx4的input1引用,表示已经被花费。

因为每一个output都包括一个value和一个公钥身份,所以遍历所有区块中的交易,找出其中所有“未花费”的输出,就可以计算出用户的账户余额。

### 4.查找未花费的Output
如果一个账户需要进行一次交易,把自己的代币转给别人,由于没有一个账号系统可以直接查询余额和变更,而在utxo模型里面一个用户账户余额就是这个用户的所有utxo(未花费的输出)记录的合集,因此需要查询用户的转账额度是否足够,以及本次转账需要消耗哪些output(将“未花费”的output变成”已花费“的output),通过遍历区块链中每个区块中的每个交易中的output来得到结果。

下面看看怎么查找一个特定用户的utxo,utxo_set.go相关代码如下:

```
// FindSpendableOutputs finds and returns unspent outputs to reference in inputs
func (u UTXOSet) FindSpendableOutputs(pubkeyHash []byte, amount int) (int, map[string][]int) {
unspentOutputs := make(map[string][]int)
accumulated := 0
db := u.Blockchain.db

err := db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(utxoBucket))
c := b.Cursor()

for k, v := c.First(); k != nil; k, v = c.Next() {
txID := hex.EncodeToString(k)
outs := DeserializeOutputs(v)

for outIdx, out := range outs.Outputs {
if out.IsLockedWithKey(pubkeyHash) && accumulated < amount {
accumulated += out.Value
unspentOutputs[txID] = append(unspentOutputs[txID], outIdx)
}
}
}

return nil
})
if err != nil {
log.Panic(err)
}

return accumulated, unspentOutputs
}

```
FindSpendableOutputs查找区块链上pubkeyHash账户的utxo集合,直到这些集合的累计未花费金额达到需求的amount为止。

blockchain_go中使用嵌入式key-value数据库boltdb存储区块链和未花费输出等信息,其中utxoBucket是所有用户未花费输出的bucket,其中的key表示交易ID,value是这个交易中未被引用的所有output的集合。所以通过遍历查询本次交易需要花费的output,得到Transaction的txID和这个output在Transaction中的输出数组中的下标组合unspentOutputs。

另外一个重点是utxobucket中保存的未花费输出结合是关于所有账户的,要查询特定账户需要对账户进行判断,因为TXOutput中有pubkeyhash字段,用来表示该输出属于哪个用户,此处采用out.IsLockedWithKey(pubkeyHash)判断特定output是否是属于给定用户。

### 5.新建Transaction
需要发起一笔交易的时候,需要新建一个Transaction,通过交易发起人的钱包得到足够的未花费输出,构建出交易的输入和输出,完成签名即可,blockchain_go中的实现如下:

```
// NewUTXOTransaction creates a new transaction
func NewUTXOTransaction(wallet *Wallet, to string, amount int, UTXOSet *UTXOSet) *Transaction {
var inputs []TXInput
var outputs []TXOutput

pubKeyHash := HashPubKey(wallet.PublicKey)
acc, validOutputs := UTXOSet.FindSpendableOutputs(pubKeyHash, amount)

if acc < amount {
log.Panic("ERROR: Not enough funds")
}

// Build a list of inputs
for txid, outs := range validOutputs {
txID, err := hex.DecodeString(txid)
if err != nil {
log.Panic(err)
}

for _, out := range outs {
input := TXInput{txID, out, nil, wallet.PublicKey}
inputs = append(inputs, input)
}
}

// Build a list of outputs
from := fmt.Sprintf("%s", wallet.GetAddress())
outputs = append(outputs, *NewTXOutput(amount, to))
if acc > amount {
outputs = append(outputs, *NewTXOutput(acc-amount, from)) // a change
}

tx := Transaction{nil, inputs, outputs}
tx.ID = tx.Hash()
UTXOSet.Blockchain.SignTransaction(&tx, wallet.PrivateKey)

return &tx
}

```

函数参数:

+ wallet : 用户钱包参数,存储用户的公私钥,用于交易的签名和验证。
+ to : 交易转账的目的地址(转账给谁)。
+ amount : 需要交易的代币额度。
+ UTXOSet : uxto集合,查询用户的未花费输出。

查询需要的未花费输出:

```
acc, validOutputs := UTXOSet.FindSpendableOutputs(pubKeyHash, amount)
```
因为用户的总金额是通过若干未花费输出累计起来的,而每个output所携带金额不一而足,所以每次转账可能需要消耗多个不同的output,而且还可能涉及找零问题。以上查询返回了一批未花费输出列表validOutputs和他们总共的金额acc. 找出来的未花费输出列表就是本次交易的输入,并将输出结果构造output指向目的用户,并检查是否有找零,将找零返还。

如果交易顺利完成,转账发起人的“未花费输出”被消耗掉变成了花费状态,而转账接收人to得到了一笔新的“未花费输出”,之后他自己需要转账时,查询自己的未花费输出,即可使用这笔钱。

最后需要对交易进行签名,表示交易确实是由发起人本人发起(私钥签名),而不是被第三人冒充。

### 6.Transaction的签名和验证

#### 6.1 签名

交易的有效性需要首先建立在发起人签名的基础上,防止他人冒充转账或者发起人抵赖,blockchain_go中交易签名实现如下:

```
// SignTransaction signs inputs of a Transaction
func (bc *Blockchain) SignTransaction(tx *Transaction, privKey ecdsa.PrivateKey) {
prevTXs := make(map[string]Transaction)

for _, vin := range tx.Vin {
prevTX, err := bc.FindTransaction(vin.Txid)
if err != nil {
log.Panic(err)
}
prevTXs[hex.EncodeToString(prevTX.ID)] = prevTX
}

tx.Sign(privKey, prevTXs)
}

// Sign signs each input of a Transaction
func (tx *Transaction) Sign(privKey ecdsa.PrivateKey, prevTXs map[string]Transaction) {
if tx.IsCoinbase() {
return
}

for _, vin := range tx.Vin {
if prevTXs[hex.EncodeToString(vin.Txid)].ID == nil {
log.Panic("ERROR: Previous transaction is not correct")
}
}

txCopy := tx.TrimmedCopy()

for inID, vin := range txCopy.Vin {
prevTx := prevTXs[hex.EncodeToString(vin.Txid)]
txCopy.Vin[inID].Signature = nil
txCopy.Vin[inID].PubKey = prevTx.Vout[vin.Vout].PubKeyHash

dataToSign := fmt.Sprintf("%x\n", txCopy)

r, s, err := ecdsa.Sign(rand.Reader, &privKey, []byte(dataToSign))
if err != nil {
log.Panic(err)
}
signature := append(r.Bytes(), s.Bytes()...)

tx.Vin[inID].Signature = signature
txCopy.Vin[inID].PubKey = nil
}
}

```
交易输入的签名信息是放在TXInput中的signature字段,其中需要包括用户的pubkey,用于之后的验证。需要对每一个输入做签名。

#### 6.2 验证

交易签名是发生在交易产生时,交易完成后,Transaction会把交易广播给邻居。节点在进行挖矿时,会整理一段时间的所有交易信息,将这些信息打包进入新的区块,成功加入区块链以后,这个交易就得到了最终的确认。但是在挖矿节点打包交易前,需要对交易的有效性做验证,以防虚假数据,验证实现如下:

```
// MineBlock mines a new block with the provided transactions
func (bc *Blockchain) MineBlock(transactions []*Transaction) *Block {
var lastHash []byte
var lastHeight int

for _, tx := range transactions {
// TODO: ignore transaction if it's not valid
if bc.VerifyTransaction(tx) != true {
log.Panic("ERROR: Invalid transaction")
}
}

...
...
...

return block
}
// VerifyTransaction verifies transaction input signatures
func (bc *Blockchain) VerifyTransaction(tx *Transaction) bool {
if tx.IsCoinbase() {
return true
}

prevTXs := make(map[string]Transaction)

for _, vin := range tx.Vin {
prevTX, err := bc.FindTransaction(vin.Txid)
if err != nil {
log.Panic(err)
}
prevTXs[hex.EncodeToString(prevTX.ID)] = prevTX
}

return tx.Verify(prevTXs)
}
// Verify verifies signatures of Transaction inputs
func (tx *Transaction) Verify(prevTXs map[string]Transaction) bool {
if tx.IsCoinbase() {
return true
}

for _, vin := range tx.Vin {
if prevTXs[hex.EncodeToString(vin.Txid)].ID == nil {
log.Panic("ERROR: Previous transaction is not correct")
}
}

txCopy := tx.TrimmedCopy()
curve := elliptic.P256()

for inID, vin := range tx.Vin {
prevTx := prevTXs[hex.EncodeToString(vin.Txid)]
txCopy.Vin[inID].Signature = nil
txCopy.Vin[inID].PubKey = prevTx.Vout[vin.Vout].PubKeyHash

r := big.Int{}
s := big.Int{}
sigLen := len(vin.Signature)
r.SetBytes(vin.Signature[:(sigLen / 2)])
s.SetBytes(vin.Signature[(sigLen / 2):])

x := big.Int{}
y := big.Int{}
keyLen := len(vin.PubKey)
x.SetBytes(vin.PubKey[:(keyLen / 2)])
y.SetBytes(vin.PubKey[(keyLen / 2):])

dataToVerify := fmt.Sprintf("%x\n", txCopy)

rawPubKey := ecdsa.PublicKey{Curve: curve, X: &x, Y: &y}
if ecdsa.Verify(&rawPubKey, []byte(dataToVerify), &r, &s) == false {
return false
}
txCopy.Vin[inID].PubKey = nil
}

return true
}
```
可以看到验证的时候也是每个交易的每个TXInput都单独进行验证,和签名过程很相似,需要构造相同的交易数据txCopy,验证时会用到签名设置的TxInput.PubKeyHash生成一个原始的PublicKey,将前面的signature分拆后通过ecdsa.Verify进行验证。

### 7.总结
以上简单分析和整理了blockchain_go中的交易和UTXO机制的实现过程,加深了区块链中的挖矿,交易和转账的基础技术原理的理解。
条新动态, 点击查看
再补充几个: 9. Node.js区块链开发 :https://pan.baidu.com/s/1Ldpn0DvJ5LgLqwix6eWgyg 10. geth使用指南文档中文版 :https://pan.baidu.com/s/1M0W... 显示全部 »
再补充几个: 9. Node.js区块链开发 :https://pan.baidu.com/s/1Ldpn0DvJ5LgLqwix6eWgyg 10. geth使用指南文档中文版 :https://pan.baidu.com/s/1M0WxhmumF_fRqzt_cegnag 11. 以太坊DApp开发环境搭建-Ubuntu : https://pan.baidu.com/s/10qL4q-uKooMehv9X2R1qSA 12. 以太坊DApp开发环境搭建-windows :https://pan.baidu.com/s/1cyYkhIJIFuI2oyxM9Ut0eA

mongo-go-driver

回复

Golangkevin 回复了问题 • 2 人关注 • 2 个回复 • 815 次浏览 • 2019-04-22 11:27 • 来自相关话题

【广州】招聘中高级golang开发工程师/技术组长15-30K

回复

招聘应聘bmkcrypto 发起了问题 • 1 人关注 • 0 个回复 • 531 次浏览 • 2019-03-25 13:45 • 来自相关话题

招聘-区块链高级工程师《25k-45k》待遇优厚

回复

招聘应聘星际范式 发起了问题 • 1 人关注 • 0 个回复 • 1036 次浏览 • 2018-09-05 13:02 • 来自相关话题

整理了一些区块链、以太坊技术开发相关的文件,觉得有用的拿去

回复

文章分享dilisk 回复了问题 • 16 人关注 • 6 个回复 • 9448 次浏览 • 2018-04-24 12:02 • 来自相关话题

区块链会是下一个风口么?

回复

技术讨论dilisk 回复了问题 • 11 人关注 • 6 个回复 • 4641 次浏览 • 2018-03-18 15:52 • 来自相关话题

北京-京东总部-golang工程师

回复

招聘应聘malaxiangguo 回复了问题 • 6 人关注 • 6 个回复 • 3985 次浏览 • 2018-03-12 16:49 • 来自相关话题

【北京】求区块链开发工程师/技术负责人--无需融资--信链科技

回复

招聘应聘stirlingx 回复了问题 • 2 人关注 • 1 个回复 • 2336 次浏览 • 2017-07-24 14:58 • 来自相关话题

比原链CTO James | Go语言成为区块链主流开发语言的四点理由

文章分享Bytom 发表了文章 • 0 个评论 • 685 次浏览 • 2019-11-27 07:31 • 来自相关话题

11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里、 ...查看全部


11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里、网易的技术专家带来Kubernetes、区块链、日志采集、云原生等话题的分享。James向大家介绍了Go语言特性在区块链中的应用还分析了Go语言成为区块链主流开发语言的原因。

比原链的系统架构




在区块链系统中内核层是最核心的,他承接了区块验证、交易验证、节点维护、打包挖矿等重多职责。通信层掌管了区块链系统的网络服务,区块链的网络更像P2P的网络形式,他呈网状扩散,负责区块同步、交易同步、节点发现等重要的功能。钱包层是直接和用户发生交互的一层,他的职责是资产管理、私钥管理,并与内核层通信验证区块交易。



以Bytom为例,他的内核层分为了五个的模块。我们举例描述几个主要的模块。

孤儿块管理:孤儿块就是由矿工挖出但未成为主链区块的区块(在相同高度产生2个甚至更多的合法区块,一个区块成为主链,剩下的则称为孤儿块),孤儿块管理就是将未成为主链区块的孤儿块存储起来。举个例子,我现在挖到的区块是100,那么下一个区块理论上是101,但是在网络层发生延时的时候,可能会发生先出102再出101的情况,那么孤儿块管理会将这些父块未到的子块先缓存起来。

共识层:确认一个块是否合法。分为区块头验证和交易验证。区块头验证需要验证它的父块和时间戳,同是需要算力来保证记账权利。交易验证比原特别的设计了一层BC层,这层在交易验证时会获得更好的性能,交易验证还和智能合约相关,交易被验证时参数会参入虚拟机验证该交易是否合法。

区块树管理:又称为Block Index,作用是记录全网所有的块,保存了全网所有块的一张镜像图。因为有孤儿块,所有它并不是链式结构的,会有分叉的情况,所以称为区块树。举个例子,区块树管理好比有一个分布式系统,但无法保证每个节点的状态一致,可能会出现同一个高度产生同时参生区块的情况。区块树管理就是具备了在节点状态不一致的情况下让系统回滚到正确的区块这个功能。

数据存储:将区块数据做持久化存储。包含两种数据,第一种是区块数据,会在网络上进行广播的原生区块信息;第二种是UTXO数据,存储UTXO数据是为了更快的验证一笔UTXO是否可以花费,而不需要去遍历所有区块信息。

交易池:维护了所有全网发出的但是还未被确认的交易。跟它关联最大的是挖矿模块,挖矿模块每次要产生一个新区块的时候,它会从交易池拿一些交易打包成块,然后用Tensority共识算法进行工作量验算。举个例子,在节点打包交易之前,交易处在一个未确认的状态之下,交易池会将这些未确认的交易保存起来,分配给后面的矿工用于打包。

WHY GOLANG?




第一点,区块链是多模块异步协同工作的,分成了P2P层、钱包层、内核层。其中内核层、情报层里面都有不同的很多子模块,在负责不同的事情。Go语言做得很出色非常适合做这方面的开发。

第二点,区块链项目有核心团队但是主要还是依赖社区参与,Go语言编译上相对于其他语言稍微严格一点,在制定规范后可以使不同开发者代码风格相近,有利于协同工作的展开。

第三点,Go语言社区完善,有很多非常好的开源库支持,使用起来非常方便用户体验良好。

第四点,主流语言的头部效应,在区块链的项目里面超过85%的项目都是基于Go语言开发的,大部分区块链工程师都擅长Go语言,所以当新的项目开始的时候,会首选Go语言。

对区块链感兴趣的程序员可以投递简历至:james@bytom.io

NEO 3.0开发进展 | 「原生合约」开发完成

文章分享NEO1 发表了文章 • 1 个评论 • 566 次浏览 • 2019-05-15 10:32 • 来自相关话题

NEO 3.0中的原生合约 今天为大家带来NEO 3.0开发中的一些最新进展,其中最主要的是一个被称为“原生合约”的功能。原生合约是NEO 3.0中NeoContract组件的一部分,目前已经开发完成并被合并到了master分支。Ne ...查看全部
NEO 3.0中的原生合约

今天为大家带来NEO 3.0开发中的一些最新进展,其中最主要的是一个被称为“原生合约”的功能。原生合约是NEO 3.0中NeoContract组件的一部分,目前已经开发完成并被合并到了master分支。NeoContract的其它部分包括:清单与权限系统、互联网资源访问(预言机)、投票系统(链上治理)等,将在未来几个月内被设计并开发。
目前已经开发完成的原生合约是两个代币合约:NEO和GAS。与它们的前辈(NEO 2.x中UTXO版的NEO和GAS)相比,它们实现了原有的全部功能,例如:转账、GAS奖励、共识节点选举和投票等。此外,原生合约还提供了一些额外的功能。

原生合约的优势

在NEO 3.0中,一切皆合约。对于像NEO和GAS这种系统对象,它们也是运行在智能合约之中的。虽然使用普通的智能合约来构建NEO和GAS也是一个可行的方案,但是采用原生合约来构建NEO和GAS,可以使它们的运行速度与在虚拟机中相比更快。而且,如果采用原生合约,即使未来合约的内容发生变化,例如添加了新的功能,合约的hash也不会改变。
当NEO和GAS成为智能合约后,它们所提供的系统功能也会成为合约的一部分,向用户和其它合约开放接口,使得任意合约都可以方便地与之集成。此外,新的NEO和GAS合约与NEP-5标准兼容,可以使用任意钱包和客户端来直接对资产进行管理。其它合约也可以通过NEP-5的接口来与NEO和GAS集成,开发出更加高级的功能。
特别地,对于原生合约版的GAS,我们有了一项新的特性。过去,为了获取GAS奖励,你需要经历3个步骤:转账NEO,提取GAS,获得GAS。借助原生合约的强大功能,现在,每次你发送或接收NEO转账时,系统都会自动为你提取GAS奖励,无需手动操作。

兼容性

绝大部分的原生合约功能都是与NEO 2.x相兼容的。因此,这项功能将会在适当的时候被移植到NEO 2.x。一旦这项移植被成功部署,将会为普通用户、开发者和交易所带来巨大的好处。
首先,对于DApp的开发者而言,他们可以方便地在项目中加入与NEO或GAS相结合的经济模型,这在以前是非常困难的。
其次,对于很多交易所而言,它们会因为存在大量用户充值的NEO而获取GAS奖励。交易所应该将这些GAS分发给用户,然而交易所需要进行许多复杂的步骤。而这个过程现在将会变得轻松无比。
最后,由于采用了NEO 3.0中的原生合约技术,未来当用户从NEO 2.x迁移到NEO 3.0时将会变得更加平滑。
对生态项目而言,本次更新将不会影响目前主网上已部署的智能合约,新智能合约的部署及调用流程也不会发生改变。对NEO/GAS持有者而言, 本次更新将不会影响交易所及钱包的正常使用。

下一步计划

NEO 3.0的开发工作依旧在紧锣密鼓地进行中。目前新的价格计算模型方案已经确定。新的P2P协议也在设计中,并且已经添加了LZ4压缩选项,UDP协议支持也在开发中。
欢迎关注我们的微信公众号【NEO智能经济】,持续为你更新后续进展!

[广州坏猴子科技] 招聘中高级 golang 开发工程师/技术组长(base 广州天河)

招聘应聘bmkcrypto 发表了文章 • 1 个评论 • 387 次浏览 • 2019-03-06 17:32 • 来自相关话题

岗位职责: 1.负责系统服务端技术选型和架构; 2.负责系统核心模块的设计,开发和维护。 任职要求: 1.2 年以上 Golang 开发经验; ...查看全部
岗位职责:

1.负责系统服务端技术选型和架构;

2.负责系统核心模块的设计,开发和维护。

任职要求:

1.2 年以上 Golang 开发经验;

2.熟悉服务端接口开发,有一定的技术架构经验;

3.熟悉 http,protobuf,grpc ;

4.熟悉 goroutine,channel,io,http 等模块;

5.熟悉 gin,xorm,sqlboiler,go-micro 等优先;

6.掌握 mysql,pgsql,redis 基本使用;

7.有分布式,高并发系统开发经验优先;

8.掌握 linux,shell,js,docker 优先;

9.有个人技术博客优先。



公司全称:广州坏猴子网络科技有限公司

公司简介:

广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个基于区块链实现的去中心化数据流通平台,打造合规有序的数据流通生态。

工作地点:广州天河区羊城创意产业园

联系方式:

[ QQ ] 1426589457@qq.com

[薪酬福利]

1、薪酬:固定工资、绩效奖金、项目奖金、年终奖金、股权池及其他薪酬激励;

2、五险一金:入职即购买五险一金;

3、工作餐:免费提供优质工作餐;

4、法定假期:享受法定节假日及病假、婚假、产假、陪产假等各种假期,公司提供节日礼品福利;

5、带薪年假

6、员工活动:高逼格旅游、团建、拓展、户外活动及其他个性化活动等。

一经录用,公司提供广阔发展空间及有竞争力的薪资待遇。

【广州坏猴子科技】招聘初级c++/golang开发工程师

招聘应聘bmkcrypto 发表了文章 • 5 个评论 • 442 次浏览 • 2019-01-08 16:34 • 来自相关话题

公司全称:广州坏猴子网络科技有限公司 公司简介: 广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个 ...查看全部
公司全称:广州坏猴子网络科技有限公司

公司简介:

广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个基于区块链实现的去中心化数据流通平台,打造合规有序的数据流通生态。

工作地点:广州天河区羊城创意产业园

联系方式:

【QQ】1426589457
【邮箱】1426589457@qq.com

工作职责:

1、负责核心系统的开发和优化工作;

2、对自身承担模块的开发进度、代码质量负责;

职位要求:

1、计算机/数学等相关专业,1年及以上C/C++/python/golang 服务端开发经验,1年及以上golang开发经验, 熟悉golang语言内部实现原理;

2、学习能力强,具备一定的技术预研、技术难点攻关能力,有良好编程习惯和文档编写习惯;

3、有分布式系统开发设计经验,参与高并发程序开发的优先;

4、有大数据相关开发相关经验优先;

5、熟悉区块链技术,对区块链相关算法有研究的优先;

【薪酬福利】

1、薪酬:固定工资、绩效奖金、项目奖金、年终奖金、股权池及其他薪酬激励;

2、五险一金:入职即购买五险一金;

3、工作餐:免费提供优质工作餐;

4、法定假期:享受法定节假日及病假、婚假、产假、陪产假等各种假期,公司提供节日礼品福利;

5、带薪年假:入职满1年的员工给予带薪年休假;

6、员工活动:高逼格旅游、团建、拓展、户外活动及其他个性化活动等。

一经录用,公司提供广阔发展空间及有竞争力的薪资待遇。

链游成公链新宠,风口之下究竟哪家称王?

每日新闻NEO1 发表了文章 • 0 个评论 • 401 次浏览 • 2018-12-24 18:04 • 来自相关话题

以谜恋猫为起点,区块链游戏这趟列车已经风驰电掣地跑了满一年。回顾去年同期,整个数字货币市场都陷入了非理性的狂热中,天价猫不断刷新着记录,以太坊网络也一度拥堵到被业内外大肆嘲笑,“看,它竟然被一只猫给搞瘫痪了”。时隔一年,尽管养猫游戏热度已降,但是新玩法的兴起还 ...查看全部
以谜恋猫为起点,区块链游戏这趟列车已经风驰电掣地跑了满一年。回顾去年同期,整个数字货币市场都陷入了非理性的狂热中,天价猫不断刷新着记录,以太坊网络也一度拥堵到被业内外大肆嘲笑,“看,它竟然被一只猫给搞瘫痪了”。时隔一年,尽管养猫游戏热度已降,但是新玩法的兴起还是吸引了越来越多从业者、项目方、资本机构以及传统互联网巨头的关注。

在大家一直以来不断呼吁的加速应用落地声潮中,可以看到越来越多的公链平台都把目光转向了区块链游戏,尤其是市场走熊以来,链游领域俨然已经成为了行业新的救命稻草,被诸多底层平台视为生态布局,应用场景落地的重点方向。

作为链游的承载平台,各大公链或高调重金诱惑,或低调默默布局,但大家都希望自己的平台上面可以拥有种类丰富、活跃度高的DApp(去中心化应用)。实际上,自16年开始,全球共计前后发布了2万多种数字代币,这样意味着约有2万多条公链曾先后面世。但是,据本月上旬链塔智库和天德科技发布的《全球公链项目技术评估与分析蓝皮书》,目前,90%以上的公链都是“僵尸”链,只有约2000条公链还“活着”,而这其中又只有200条链是有价值的。

今年年中,中国工信部赛迪研究院发布了赛迪全球公有链技术评估指数(第7期)。指数排名显示,EOS、以太坊和比特股占据了榜单前三名,这是其连续第三次占据榜单前三位。不过,值得欣慰的是,在这次公链技术评估指数中,国内的星云链、公信链、NEO也紧随其后,并在不断进化当中。国内区块链的发展情况一直牵动着圈内人的心,今天,链鱼鱼(ID:lianyu180807)就国内公链在链游领域的布局进行了一番对比。


01 NEO:积累深厚,发力能否精准

2016年10月17日, NEO主网正式上线,至今已经稳定运行超过两年。在这两年时间内,无论是NEO的核心技术,社区建设还是项目生态都日益完善成熟。

就核心技术而言,NEO 独创的 dBFT 共识机制以稳定、安全、不分叉获得诸多好评,NEO 主网上线后的智能合约体系也在不断发展完善,目前已经可以支持多种主流编程语言,如 C#、Java、JS、Python 及 GO 语言。此外,NeoVM 更是当下行业中为数不多的拥有自有虚拟机的区块链项目。

在社区建设方面,NEO更是首屈一指。许多社区已经集结成团队,在业内颇有名气,比如,NEO最早的开发者社区City of Zion,为布局游戏生态而生的NEL以及南美开发者社区NEO Research等。目前,NEO的海外社区遍及美国、荷兰、德国、法国、意大利、俄罗斯、日本、韩国、新加坡等地,人数已逾百万。这些社区的不断壮大与源源不断的持续输出为NEO项目生态搭建打下了坚实的基础。

从种种迹象来看,NEO对其未来的项目生态建设有着非常清晰的规划,区块链游戏是重点角力赛道。今年上半年,NEO中国开发者社区NEL宣布孵化成立基于NEO的区块链游戏社区,该游戏社区致力于打造一个玩家分类自治的社区化游戏平台,真正做到让利于玩家、游戏开发商,让好游戏不再被埋没。

紧接着,游戏社区发布了首款基于NEO自主研发的卡牌游戏《疯狂角斗士》。与此同时,为了催生出更多优质作品,NEO还举办了为期四个月的游戏大赛,奖金总额高达350万元人民币。在游戏大赛闭幕式上,FunJumping创始人陈喜正式公布了“BlaCat”。据了解,这是基于NEO技术打造的链游平台DApp及开发工具套件(SDK),它能够让用户像玩传统游戏一样玩链游而不必进行复杂的钱包、交易所等一系列操作,同时让传统游戏开发者能无缝对接区块链。在这场游戏比赛中,诞生了诸如《NEO.Girl》、《BLOCKLORDS》以及《Card Maker》等多款具有一定趣味性的游戏,颇受业界瞩目。

就在当前的寒冬期,NEO在链游布局方面亦没有放慢的脚步,据悉,NEO已经和大型区块链沙盒游戏NEOWorld达成合作,NEOWorld将会在游戏中建立一个NEOLand,玩家可用NEO进行消费。此外,近日,NGC 旗下投资基金 NEO Eco Fund投资了区块链游戏制作平台链游大师(DGameMaker),该平台将提供完整的可视化工具、丰富的免费美术素材和一键发布的平台,让传统游戏开发者可以便捷地在NEO上编辑智能合约。

值得一提的是, BlaCat已经在本月中下旬开始正式陆续推出他们打磨良久的链游,上文中的三款链游在经过他们耐心地研发之后,终于将正式面世。目前,人们都将下一波牛市的到来押注在区块链游戏领域,因此这些游戏的陆续推出,也是在为整个市场做预热准备和探索。


02 星云链:应用虽多,日活都去哪儿了

现在的星云链,似乎有点过于安静。

随着激励计划的推进,目前星云链上的DApp数量已经上升至944个,仅次于以太坊。但让人大跌眼镜的是,所有DApp24小时日活只有15,交易额为0,几乎全军覆没。



实际上,星云链确实一直在大力推动社区生态的发展,尤其是在区块链游戏领域。

早在今年上半年,星云激励计划期间,游戏类应用频频获得周度、月度的优秀应用大奖,诸如“细胞进化”、“恐龙乐园”、“隐秘世界OL”等游戏也曾引起过巨大的讨论。为了拉开架势抢滩登陆,星云链更是先后与全球首家HTML5区块链平台”Egretia”、金山云区块链游戏生态“Project-X”、全球第一开源游戏引擎Cocos达成合作,动作之迅速,令人不得不称赞。

曾经的风光,如今的窘迫,让人难免唏嘘和疑问。究竟是什么原因导致目前的日活如此惨淡呢?要知道,星云链曾一致被认为是国产公链中的低调黑马。而之前DAPP开发者活动为整个NAS的生态引入的大量开发者,如今又都去哪里了呢?

再优秀的应用乏人问津,也就没有任何价值。包括星云链在内的底层平台和开发团队当下需要思考的问题是,如何有效增加日活和留存,让应用活久一点。

03 公信链:海量数据,流量是否有效转化

公信链的优势之一是其生态中拥有大量的个人用户数据,有丰富的流量支持。截至目前,布洛克城用户数量已经突破221万,吸引了众多区块链应用入驻,包括预言家、币得、利德,以及万利马、链与飞车等游戏应用。要知道这么多的用户数据是可以发挥出巨大的能量的,因为哪怕是以太坊或者EOS上面排名前几的DApp每天日活也只有几百至几千不等。

以万利宝为例,这是一款区块链养成游戏,目前已经累计用户数25万。显然,布洛克城强大的流量赋能为这款游戏在推广之初助力其快速获得了用户的认可和使用。

然而,目前布洛克城里共计入驻应用24款,其中游戏7款。可以看出游戏的比例并不高。当然,我们不得不承认,公信链的目标是打造可信数据的价值网络,区块链游戏是其释放数据潜力,丰富落地应用的一部分,但并不是重要方向。布洛克城已经上线小应用接入功能,可以帮助开发者快速开发和上线应用,但就目前上线的一系列游戏来看,质量有待提升。

如此高的用户注册量,其中如果诞生出爆款游戏或者其他应用,链鱼鱼(ID:lianyu180807)相信这一定会是区块链应用得以大规模推广的最佳契机。但是,目前来看,公信链之前积累的海量数据和流量并没有得到有效充分地利用,我们期待能够看到更高的用户转化率。

结语

区块链应用落地,是一项长期而艰难的路程,我们相信未来会一步步向我们靠近,但前提是我们要不停地探索和尝试。业内经过去年一年的摸索,大部分人得出的结论是,游戏的天生数字化决定了其与区块链结合的天然属性,必然是最先落地的应用方向。

区块链对于游戏的全新赋能是如此强大,以至于很少有人在深入了解后还能够抵抗住这种诱惑,越来越多的底层平台不约而同地将链游视为生态布局重点,也正是看中了两者结合的巨大潜力。不过,链游才刚刚起步,存在操作门槛高,游戏体验差,底层技术不成熟等诸多缺点,任重道远,还需要各方公链携手努力。

[广州坏猴子科技] 招聘 C++开发工程师/golang 开发工程师(15k-30k)

招聘应聘bmkcrypto 发表了文章 • 0 个评论 • 359 次浏览 • 2018-12-14 10:56 • 来自相关话题

公司全称:广州坏猴子网络科技有限公司 公司简介: 广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个 ...查看全部
公司全称:广州坏猴子网络科技有限公司

公司简介:

广州坏猴子网络科技有限公司,是一家专注于区块链和密码学技术的高科技公司,在有巨大数据源以及相关大数据处理经验的基础之上,通过智能合约、分布式数据库等,打造一个基于区块链实现的去中心化数据流通平台,打造合规有序的数据流通生态。

工作地点:广州天河区羊城创意产业园

联系方式:

[ QQ ] 1426589457

[邮箱 ] 1426589457@qq.com

工作职责:

1、负责核心系统的开发和优化工作;

2、对自身承担模块的开发进度、代码质量负责;

职位要求:

1、计算机 /数学等相关专业,2 年及以上 C/C++/python/golang 服务端开发经验;

2、学习能力强,具备一定的技术预研、技术难点攻关能力,有良好编程习惯和文档编写习惯;

3、有分布式系统开发设计经验,参与高并发程序开发的优先;

4、有大数据相关开发相关经验优先;

5、熟悉区块链技术,对区块链相关算法有研究的优先;

[薪酬福利]

1、薪酬:固定工资、绩效奖金、项目奖金、年终奖金、股权池及其他薪酬激励;

2、五险一金:入职即购买五险一金;

3、工作餐:免费提供优质工作餐;

4、法定假期:享受法定节假日及病假、婚假、产假、陪产假等各种假期,公司提供节日礼品福利;

5、带薪年假:入职满 1 年的员工给予带薪年休假;

6、员工活动:高逼格旅游、团建、拓展、户外活动及其他个性化活动等。

一经录用,公司提供广阔发展空间及有竞争力的薪资待遇。

[上海][PPLabs][分布式加密云存储项目][招聘golang工程师/web后端工程师

招聘应聘mashoushan1989 发表了文章 • 5 个评论 • 616 次浏览 • 2018-11-30 14:26 • 来自相关话题

**公司简介:** - 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内offic ...查看全部
**公司简介:**
- 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内office位于上海浦东软件园。

**创始人团队:**
- 创始人:姚欣,蓝驰创投合伙人,原上海聚力传媒技术有限公司创始人兼首席执行官、PPLive创始人,AI创业营发起人。自PPTV被收购退出后,现任蓝驰创投合伙人,投资并关注AI及互联网科技行业;
- 联合创始人:王闻宇:连续成功创业者,原PPTV联合创始人和PPTV首席架构师,曾经独自完成大部分PPTV代码,精通P2P技术,后来主导了PPTV点播和云盘这两个分布式存储项目。2018年后联合创立现在的公司。在P2P技术,网络安全技术,存储技术,流媒体技术方面是世界级专家。github地址:https://github.com/omnigeeker 里面原创经典项目超过100个
- 知乎博客号:https://www.zhihu.com/people/elninowang/activities
公司网站:https://www.pp.io/

**招聘职位:go开发工程师 **

**职责描述:**
- 1、负责Blockchain底层相关模块的设计和开发;
- 2、负责Linux/Windows/Mac的存储性能优化,以及基于linux的嵌入式平台存储性能优化
- 3、负责Blockchain相关模块和代码的单元测试。

**任职要求:**
- 1、有两年以上相关开发经验,熟悉C/C++, Golang程序的设计和开发;
- 2、熟悉多线程、网络编程、异步IO等技术;
- 3、对数据结构、算法感兴趣的优先;
- 4、有大数据平台开发经验优先;
- 5、有安全相关领域相关经验优先;
- 6、有高性能存储系统经验者优先;
- 7、有Etherum、blockchain经验优先;

**招聘职位:Web后端开发工程**

**工作职责**
独立设计并完成 Web 后端功能开发,并配合前端完成整个 Web App 或 Native App 的开发工作。

**基本要求**
1. 拥有计算机、软件工程或相关专业本科及以上学历;
2. 拥有至少两年以上的 Web 后端开发经验,并且有完整的核心功能设计和开发经验;
3. 了解一些常用的数据结构及算法;
4. 熟练使用 Golang 进行 Web 后端开发并且对 Golang 的并发编程有一定了解;
5. 会使用至少一门脚本语言(Linux Shell、Python 等),并且能熟练操作 Linux 系统;
6. 熟练使用 MySQL、Redis 数据库系统;
7. 有良好的文档编写能力,并且能熟练阅读英文文档。

**优先条件**
1. 有网盘类工具开发经验的优先;
2. 有开发开源项目的经历,如有 `GitHub` 账号或技术博客,请在简历中写明。

**简历投递**:ash@pplabs.org,或微信(ID:mashoushan)直接联系

**公司地址**:上海浦东新区博霞路81号3F

NEO两周年对话,达鸿飞谈去中心化进程,公链竞争,稳定币……

每日新闻NEO1 发表了文章 • 0 个评论 • 522 次浏览 • 2018-11-02 11:23 • 来自相关话题

NEO,原名小蚁,2014年正式立项,2015年6月于Github实时开源,2016年10月,NEO主网正式上线。作为国内较早发起的区块链项目,成立以来,NEO团队亲历了区块链行业的高潮与低谷,数字货币市场的狂热与冷却,各国监管态度的模糊与清晰。 ...查看全部
NEO,原名小蚁,2014年正式立项,2015年6月于Github实时开源,2016年10月,NEO主网正式上线。作为国内较早发起的区块链项目,成立以来,NEO团队亲历了区块链行业的高潮与低谷,数字货币市场的狂热与冷却,各国监管态度的模糊与清晰。

回顾NEO的诞生,有几个里程碑式的重要节点:从2014年比特创业应的想法孕育,到微天使网站的推出,致力于协助小微资产众筹;2015年9月,NEO前身——小蚁发布白皮书,并完成两次众筹,为团队筹集后续几年开发和生态搭建的充足资金;2017年6月,小蚁品牌升级,NEO正式面世。



2014年至今NEO发展路线图 (来源:通证经济研究院)

根据小葱区块链发布的相关研究报告,NEO自主网上线以来,表现出主网运转稳定,开发者社区成熟,基础设施完善,社群热度较高等发展优势。但同时也存在共识中心化程度高,应用生态薄弱,技术进展迟滞创新后劲不足,NEO 3.0实践方案不明确等问题。

 

站在NEO两周年的节点上,我们对NEO创始人达鸿飞进行了一次访问,不限于NEO本身,我们还问了达鸿飞这些问题:

近两年公有链的发展经历了什么变化?现状和核心问题? 国内团队主导的项目如何真正“走出去”? NEO受争议的共识节点去中心化进展? 公链场景如何取舍,金融OR游戏? 行业未来的关键词? 对稳定币,STO等新热点的看法? 对新近入场的投资者和创业者们有哪些建议?

来看看国内最早的区块链拓荒者之一达鸿飞的分享:



 NEO创始人达鸿飞

 

 

区块链应用场景:游戏or金融?
 

 

8btc :NEO的目标是实现智能经济,现在的发展状况跟你最初想要做的一样吗?

达鸿飞:整个大方向没什么变化,但是你在具体着眼一点,在现在这个时间做什么事情,当然会有侧重。创业过程像是打篮球,打篮球有个动作,一只脚站在原地不动,另一只脚在移动,然后再看往哪个方向,但是篮筐的方向永远是在那个位置的。比如最近的重点,我们跟游戏开发者接触比较多,一些游戏会在NEO上面进行开发。
8btc:看得出来最近NEO生态很重视游戏领域的发展,8月社区项目NEL举办了NEO区块链游戏开发大赛,NEO Global Capital还投资了区块链游戏开发平台Cocos-BCX,为什么看好区块链在游戏领域的发展前景?

达鸿飞:最早大家都想着区块链跟金融结合,有很强的颠覆性,但是也有很强的阻力,因为金融是一个强监管的行业,不管在哪个国家,与金融结合有两种方式,一种是跟有牌照的传统金融机构合作,但这种方式下很多业务也会受到这些牌照的阻力,需要满足这个牌照的需求,要满足很多监管的条件,对区块链公司来说很难做到;第二种就是不管这些牌照,想办法绕过,做一些不需要牌照就能完成的事情。
 

本质上是触碰现有的金融监管就很难进行下去。有牌照的机构的想法就是我已经有牌照了,本来就可以进行这个业务,为什么还要跟区块链公司合作?没有牌照的最后不能合规,很难大规模推广应用。

自然而然有一些游戏开发者开始到NEO上来做开发,也看到在以太坊这样的其他的项目平台上,游戏也是比较多人应用的一个方向,游戏里面的数字资产跟区块链里面的通证,天生是比较好的结合。

现有的一些游戏,区块链只是给它加上了一些东西,它里面的数字资产可以用区块链记录来流转的这样一个游戏,相当于加分了,而不是彻底把它变成一个只能在区块链上才能玩的游戏;另外一些博彩博弈类往往都是只能在区块链上玩的游戏,短期内这类游戏是比较容易火的,因为他利用了人性的弱点,长期来看最终游戏的可玩性是非常重要的,重点还是在游戏本身上。

未来出现的区块链游戏可能是像头号玩家电影中所描述的虚拟世界,虚拟世界里的资产都是记录在区块链上,里面需要有很好的经济模型,但什么时候能出现这样一款游戏,只能等他横空出世。我希望未来能出现我女儿也能玩的区块链游戏。

 
共识节点如何去中心化?
 

 

8btc :NEO的去中心化进程外界有些质疑,最近共识节点去中心化这件事整个社区也比较关注,这方面有哪些进展和规划?

达鸿飞:现在NEO主网上共有7个共识节点,NEO Foundation运行其中的6个,NEO开发者社区CoZ运行一个,测试网上的7个共识节点分别由NEO Foundation维护2个、NEO Global Development维护1个、CityOfZion社区维护2个、荷兰皇家电信(KPN)维护1个、瑞士电信(Swisscom Blockchain)维护1个。测试网上运行的共识节点比如运营半年以上的时间能够证明他们运营良好的话,所有的token持有人就可以对他们进行投票,这些节点就可能被选为主网上的节点运营方。
 

但投票参与率并不高,目前主要是交易所和团队参与投票,所以NEO团队目前对这件事情影响力还比较强,但随着未来若干年后团队把票逐渐分发出去,团队的影响力还会继续减弱。

8btc:非团队的来运营节点,比如提到的国家级别的电信公司,它们运营的动力是什么?

达鸿飞:运营的动力是第一他们在技术能力和硬件条件上完全没问题,第二他们希望能深入了解和接触一条公链,这样对于他们未来开展区块链业务有很大帮助。
 
公链需要有原创性,开发者友好很重要
 

 

8btc:从2014年的比特创业营直到现在,你几乎经历了中国区块链发展全程,也见证了从国内诞生第一条公链项目,到今年公链层出不穷。谈谈你眼里近几年公链的发展演变进程?目前来看公链领域需要克服的主要困难有哪些?

达鸿飞:近两年公有链发生的变化:第一是数量变多,因为相对来说,公有链的估值市场比较追捧,所以大家都愿意去做公有链;第二个变化就是大家都是奔着全球市场去的,从第一天开始就很国际化。
 

困难在于,如果是由中国团队发起的项目,和海外的团队发起的项目相比,还有很大的文化语言壁垒;另外在底层核心技术上原创性弱一些。公有链需要有原创性,基础设施如果跟别人的技术架构一样的话,其实应该加入到别的项目里面把这个项目做的更好。

8btc:的确非常多,所以公链之间存不存在竞争?今年有不少知名公链几乎在同一时期上线了主网,NEO团队会有危机感吗?

达鸿飞:公有链太多,但上层应用和开发者都不够用。就像操作系统做好了,上面没有程序跑,操作系统就没有生命力。有危机感,对NEO来说,面对公链强烈竞争时,应对措施主要是观念上的——如何做成对开发者最友好的,开发者容易上手的公链?比如文档,教程就很重要,怎样能让一个会编程的开发者立刻能够到NEO链上,变成一个智能合约开发者。
 
产品是发展海外社区第一要素
 

 

8btc:你也提到过今年1月在海外做了一次比较成功的开发者大赛,NEO在海外整体的口碑和热度可能是国内团队主导的项目中最好的,能不能分享一下这两年怎么建设海外社区的?或者在海外社区的建设过程中遇到了哪些问题,怎么解决的,分享一些经验?

达鸿飞:海外社区很多时候还是看产品和技术更多一些,因此把产品做好是发展海外社区第一个重要因素。第二是传播,中国团队发展海外社区肯定面临文化隔阂,因此需要有比如英文材料,当地活动能够传播出去。
8btc:你在海外时间也很多,你感受到的国内外区块链发展有什么差异?

达鸿飞:实际上除了中国,还有各个地方,每个地方发展都不一样。如果跟北美比较,我们这的市场做的多了一点,而真正做底层开发的比较少;第二从监管方面来讲,小国家相对来说,区块链项目更容易接触到监管机构。
 
“愿景”是未来行业关键词
 

 

8btc:2018年已经过去大半,未来的一年你觉得行业发展的关键词会是什么?

达鸿飞:Vision.愿景吧。最近一年中,我们看到大量的新出现的项目,可能大部分这些团队想做的是:我要做一个东西,市值可以做到以太坊的百分之一,或者百分之五,就觉得它成功了。我觉得这类想法实际上很难在一个比较平静的市场里面坚持下去。
 

反而是那些真正有很强愿景,真正想做有深远影响的,有意义的事情的团队,更容易在比较平静的行业里沉下心来做事情。而做的这些事情在下一次市场获得更多关注的时候,就容易发掘出来,也更容易获得市场的认可。

 
给行业投入时间和智力,而不仅仅是金钱
 

 

8btc:有哪些建议可以分享给当前市场环境下,接触区块链不久或者想要投入区块链行业的创业者和投资者的?

达鸿飞:做一个聪明的投资者,把自己的时间和智力投在行业里面,做一些创造性的事,而不要仅仅把金钱投在这个行业,指望它明天怎么涨,怎么翻多少倍。我看到的把时间和自己的智力投入进来的,长远来看都挺不错,但仅仅是投机性的投一些钱的,也许短期内会赚不少,但又涨有跌,最终市场给的只有少数的幸运儿能留着,很大部份都会还回去的。
 
如果一样东西符合原来的定义和监管,那他的颠覆性是有限的
 

 

8btc:最近很热的几个行业话题,比如稳定币和STO。Circle Coin (USDC)、Gemini Dollar (GUSD)和Paxos (PAX)这些与USDT相比,新一代的通过审计甚至符合监管的稳定币出现;而STO,很多人认为它可能是ICO之后的下一轮造富热点,你怎么看?

达鸿飞:符合监管的稳定币出现,如果监管不变,我觉得没什么用,跟银行转账没有区别。如果会有一样东西,它百分之百符合原来监管的具体的措施,而不是监管的实际意图,很可能它就跟原来那个产品,原来世界上已经现存的那种模式是一样的。
8btc:但大家会认为在数字货币世界里面,还是需要一个相对稳定的类似基础设施的稳定币,不然没法被大规模普及接受。

达鸿飞:对,我同意是需要的,但是需要的这个模式,如果不能推动有新的监管的出现,可能意义就不是那么大。
8btc:意思是可能需要配合新的监管框架一起出现,而不是在原有的监管框架里面?

达鸿飞:对,如果它能够被定义为一个原有的东西,并且又符合监管的所有条件的话,那它本身就是一个原有的东西。比如被定义为债券,那它就是一个债券,如果被定义为一个什么东西,又符合原有的所有监管需求,很可能工作方式就跟原来的那个东西几乎一样,最多就是提高了效率。
 

一个新事物,如果它符合原有监管和原有对某种东西的定义,而且并没有推动新的监管模式出现,很可能它就是原有东西的一个高效率的升级版,它能够提供的颠覆性是有限的。它就只是一个优化版本,而不是一个具有颠覆性的产品。

NEO主要技术社区成员大曝光

文章分享NEO1 发表了文章 • 0 个评论 • 603 次浏览 • 2018-10-26 14:46 • 来自相关话题

10月17号NEO主网上线2周年,作为一个社区项目离不开各个成员的贡献。经常被别人问到“为什么你们社区运营得这么好?为什么你们的海外社区那么强?”在这篇文章中将为大家带来回归本质的解答。NEO的几个核心技术社区在这2年中做了哪些贡献呢?取得了哪些成绩?关于最初 ...查看全部
10月17号NEO主网上线2周年,作为一个社区项目离不开各个成员的贡献。经常被别人问到“为什么你们社区运营得这么好?为什么你们的海外社区那么强?”在这篇文章中将为大家带来回归本质的解答。NEO的几个核心技术社区在这2年中做了哪些贡献呢?取得了哪些成绩?关于最初他们是如何了解到NEO,又是为什么选择了NEO呢,这其中有哪些有趣的小故事?


一、City of Zion (CoZ)

CoZ是NEO上第一个技术社区,他们由近50位开发者组成。开发了基于NEO的跨平台轻钱包NEOWallet(目前有Windows、OSX、Linux等版本)、NEO区块链浏览器NEOScan、编译器NEO-PHTHON,节点监视器Neomon……并且在社区内组织多语种信息翻译服务全球的社区成员及爱好者。创始人兼开发者Fabio拥有计算科学本科学位及机械工程硕士学位,成立CoZ之前已经参与过几个大型项目的开发。在此之前,Fabio在巴西共同创立并担任Lemonaid Learning Analytics创业公司的首席技术官。


本来希望Fabio可以将他与NEO结缘的故事写下来,但他最近在加速开发NEON钱包的事宜,所以这里就简单罗列了这两年CoZ取得的一些关键成就:



• 在全球范围内形成了NEO生态独有的开源开发者社区

• 翻译并完善技术文档以提高全球采用率

• 开发NEON钱包

• 开发Neoscan与Neomon

• 以Python、Golang等多种语言实现VM、Core与编译器

• 开发neo-sharp与hyperVM

• 开发api和开发者文库(如neon-js)

• 部署包括6个共识节点(3个在测试网,3个在主网)在内的多个全节点

• 品牌在多个社交平台成功完成从小蚁到NEO的升级

• 为NEO大会与见面会策划支持、外联和黑客松等活动

• 开发并审计NEO改进计划(NEP)

• 对NEO平台进行多次安全审计

• 开发neo-local与neo-tools等简单易用的工具



Fabio说NEON钱包开发结束会给我们一个惊喜,一起来期待吧。



三、 NewEconoLab (NEL)



我们都知道,NEO在国内还有一个最大的技术社区NEL——NewEconoLab,由刘永新和李剑英共同创立。NEL把技术布道和基础设施建设作为自己的使命,通过线下讲座、线上直播、社区问答、文字介绍等形式推广区块链平台,帮助开发者转型为区块链开发者。通过承担区块链生态必要的非盈利基础设施建设,例如智能合约在线编译器,区块链浏览器等,让有一定区块链和智能合约开发经验的开发者可以选择加入到这些项目中。



今年NEL在除了非盈利基础设施之外,也开发一些商业性项目,旨在让区块链应用离人们更近,目前实现NEO上的域名服务NNS——获得了分布式资本和NGC战略投资,在2月初发布了白皮书,10月份已上线,测试网首次公测吸引参与人数达一万人。10月9日,NNS主网版本正式上线,上线3小时域名开标数突破1000,上线6小时,突破2000。除此之外,NNS与O3钱包达成合作协议。O3将集成NNS域名服务,允许NEO域名服务的注册和使用。NEL提出将为所有NEO生态项目免费提供技术咨询服务。


从2017年11月份开始,NEL就开始了NEO生态里一些基础设施项目的开发,例如浏览器,智能合约开发调试工具,ts, C#接口,轻钱包接口服务。并多次参与线下交流活动。同时,初步完成了NEODUN硬件钱包的设计工作。


NEO生态内的技术社区也经常交流合作,今年1月份,NEL与CoZ初步达成意向,在项目上增加交流沟通,相互支持。NEL把CoZ提供的NEO js接口文件翻译成了中文。


在游戏方面的拓展,NEL孵化第一个基于NEO的游戏“疯狂角斗士”。并举办第一届NEO游戏开发大赛,历时三个多月落下帷幕,共有来自全球各个国家与地区的200多位开发者报名参与比赛,有效参赛作品数量46个,涵盖塔防、卡牌、沙盒、益智、养成、挂机、经营等类型。奖金总额达到350万元人民币,是迄今为止NEO在全球范围举办的规格最高的大型游戏比赛。


在基础设施建设方面,NEL孵化了BlaCat平台。BlaCat是基于NEO技术打造的链游平台,为游戏类dApp提供了游戏开发工具套件(SDK),让用户能像玩传统游戏一样玩链游而不必进行复杂的钱包、交易所等一系列操作,同时让传统游戏开发者能无缝对接区块链。BlaCat则孵化了Zorochain,ZoroChain是一条介于应用与公链之间的链,在应用链上采用了特有的共识算法,简化了共识步骤,让共识能够快速完成,同时采用应用链与节点多对多的拓扑结构,任意节点可以随时加入网络,为任意应用链提供服务。ZoroChain是真正意义上的去中心化应用链,提供了与NEO公链交互接口。


在社区建设方面NEL设立了开发者奖励计划,鼓励自行设计开发NEO相关生态项目。并与Trinity钱包建立战略合作关系,搭建了NEL区块链开发者论坛。


经过近一年的发展,NEL社区形成了以非营利性的基础设施项目,商业性的基础设施项目和游戏类项目为主的格局。

一、NEOResearch


NeoResearch是来自巴西的NEO技术社区,核心成员是Vitor和Igor(称Coelho兄弟)。2017年7月前后,Vitor和Igor第一次接触了NEO团队。当时兄弟俩正在忙于“SciChain”系统的设计工作,“SciChain”的想法于2016年首次提出,项目的初衷是创建一个基于以太坊平台运行的系统(用来处理在区块链上提交的科学文献),但在这时,Coelho兄弟接触了NEO核心—C#编译器。


他们当时面临的第一个难题是需要通过Linux实现智能合约的编译。在多位研究人员的共同努力下,他们终于在12月前后实现了智能合约在独立Linux环境下的完整编译。紧接着,他们就发布了NeoCompiler——NEO在线编译器。

一开始,NeoResearch的目的很简单,主要是创建一个自用的系统以推进自己的开发进程。但几周后便有了不同的想法,甚至有了设计一个有自适应性可自我校准的测试网的想法。


在达叔、铮文、Peter的指引下,这个简单的编译器逐渐演变成了可以对智能合约进行测试与分析的生态系统,生态访问量现已超过40万(基于几个月前的指标)。

后来NeoCompiler生态的去中心化程度逐渐加深,由编译器RPC服务器、用于构建交易的共享私网和工具,以及基本的包含教学指引功能的转换器组成。


NeoResearch作为重要的技术社区成员,经常参与活动做分享,曾受邀前往澳大利亚进行了一次分享,亲自讨论并重点介绍了NEO科研社区的基石所在。


“NeoResearch”这个社区像一座桥梁,在生态的各个板块间起到沟通连接的作用。此外,因为base在巴西,他们还身肩开拓南美科学前沿的任务,NeoResearch团队在Tamar Salant(NEO社区生态拓展经理)的协助下开始在南美发表科研见解。

为了促进与NEO社区的沟通,NeoResearch还为南美及巴西社区互动计划的实施给予了支持,包括开展更多活动/编程实践活动,并提出与院校及当地公司广泛建立合作关系的提议。

为了响应快速增长的需求,NeoResearch还促成了AmazoNeo这个新社区的创建。

AmazoNeo是由Igor、Vitor与Alexandre联合创建的社区,职责是与NEO南美建立合作关系,现在也正致力建立这类合作关系。


目前NeoResearch的工作重点主要包括以下几点:

• 完善NeoCompiler生态

• 优化NeoVM

• 学习优化策略从而帮助NEO团队实现10万TPS的目标并完善NEO区块链


最近他们发布了一个新工具——SMACCO,这是在包含教学指引功能的智能账户创建工具方面取得的重要进展,使NEO提供比竞争对手更具优势的区块链工具。

智能账户与智能交易是区块链的核心,同样重要的还有各种应用的工业需求以及跨链协议,一些引人关注的合作关系也表现出了这些技术的需求。

Lgor说到,项目发展至今绝非一蹴而就,是各个团队与匿名贡献者付诸于时间和心血的结晶。“但隧道尽头的光无疑是人们的关注点。从这个层面看,对NEO的关注就好比是那道光,开发者和整个行业都在这个项目上看到了一个光明的未来。”

四、社区内的大神

NEO的技术社区内可谓是卧虎藏龙,在格鲁吉亚的Hackathon上,我们的评委是魔兽争霸3的世界冠军Insomnia。这位曾让几千万玩家陷入疯狂,在国内有百万级粉丝,他的魅力不亚于现在的蔡徐坤走进女生宿舍的样子。当战衣褪去,英雄的光荣与梦想在区块链的世界里延续,他蜕变成NEO区块链开发者的Zdravko Georigiev,在社区内贡献自己的力量。他经常出没东欧地区的NEO Workshop担任讲师,欢迎更多的开发者加入NEO,与Insomnia在区块链的世界里并肩作战。

10月17号NEO主网上线已经2周年了,NEO实现了主网稳定运行、社区生态不断壮大,整体安全性以及性能的提升。目前,区块高度约287万,接入的dApp数量有100+款。自成立以来,NEO团队亲历了区块链行业的高潮与低谷,但社区成员始终是我们的中坚力量,投入自己所有的时间精力,稳步前行,相信智能经济的变革终将到来。

基于区块链底层技术的分布式云存储项目招聘go开发

招聘应聘mashoushan1989 发表了文章 • 1 个评论 • 907 次浏览 • 2018-09-04 12:01 • 来自相关话题

**公司简介:** - 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内office位于上 ...查看全部
**公司简介:**
- 缀初网络技术(上海)有限公司,PPIO存储公链开发和全球运营团队。在美国硅谷、新加坡、香港、上海四地拥有office。创始团队来自于谷歌微软\BAT\华为等国内知名大型互联网及IT公司的高管及核心员工。国内office位于上海浦东软件园。

**创始人团队:**
- 创始人:姚欣,蓝驰创投合伙人,原上海聚力传媒技术有限公司创始人兼首席执行官、PPLive创始人,AI创业营发起人。自PPTV被收购退出后,现任蓝驰创投合伙人,投资并关注AI及互联网科技行业;

- 联合创始人:王闻宇:连续成功创业者,原PPTV联合创始人和PPTV首席架构师,曾经独自完成大部分PPTV代码,精通P2P技术,后来主导了PPTV点播和云盘这两个分布式存储项目。2018年后联合创立现在的公司。在P2P技术,网络安全技术,存储技术,流媒体技术方面是世界级专家。github地址:http://www.github.com/elninowang 里面原创经典项目超过100个
- 知乎博客号:https://www.zhihu.com/people/elninowang/activities

**招聘职位:go开发工程师**
职责描述:
- 1、负责Blockchain底层相关模块的设计和开发;
- 2、负责Linux/Windows/Mac的存储性能优化,以及基于linux的嵌入式平台存储性能优化
- 3、负责Blockchain相关模块和代码的单元测试。

任职要求:
- 1、有两年以上相关开发经验,熟悉C/C++, Golang程序的设计和开发;
- 2、熟悉多线程、网络编程、异步IO等技术;
- 3、对数据结构、算法感兴趣的优先;
- 4、有大数据平台开发经验优先;
- 5、有安全相关领域相关经验优先;
- 6、有高性能存储系统经验者优先;
- 7、有Etherum、blockchain经验优先;

**简历投递:mingren@ppfs.io**

【北京】Matrix区块链公司招聘golang工程师~持续招聘中~

招聘应聘MaxChen 发表了文章 • 13 个评论 • 1070 次浏览 • 2018-08-22 11:34 • 来自相关话题

>MATRIX 是将人工智能与区块链技术深度结合而创造的新一代的区块链,包括基础主链、人工智能、安全防御、系统应用,以及面向用户友好和开发人员优化的区块链操作系统,是全球人工智能+区块链领域的倡导者和领军者。 > ----本公司依托位 ...查看全部
>MATRIX 是将人工智能与区块链技术深度结合而创造的新一代的区块链,包括基础主链、人工智能、安全防御、系统应用,以及面向用户友好和开发人员优化的区块链操作系统,是全球人工智能+区块链领域的倡导者和领军者。

> ----本公司依托位于香港的区块链总公司Matrix AI Network。目前有包括赛伯乐、风和投资、TaTa等在内的多家公司提供资金支持。公司拥有国内顶尖的人工智能(AI)、芯片设计、生态经济等多方面领域的专家提供技术保障。

> ----作为区块链 3.0 的开创者,MATRIX 完整实践了“人工智能+区块链”。为一带一路战略发展中心、中老森林项目、癌症辅助诊疗、数字资产证券化管理等各生态项目提供技术需求。


公司官网:[www.matrix.io](http://www.matrix.io/ "www.matrix.io")

# 工作职责
1. 从事区块链方向的设计和研发工作,研究区块链的协议,运行机制和底层实现等;
2. 参与模块设计开发,业务逻辑开发等工作;
3. 参与相关子系统及业务流程优化重构,研发过程优化工作。

# 任职要求
1. 本科及以上学历,计算机相关专业优先,2年以上开发经验;
2. 精通Linux下编程,熟悉TCP/IP协议,了解常用算法和数据结构;
3. 熟悉分布式、 多线程及高性能的设计与编码优先;
4. 良好的团队协作精神和执行力,较强的分析问题和解决问题能力

# 其他
- 薪酬范围:15k-30k
- 福利待遇:每周双休+团队Outing+免费水果零食+...
- 工作地点:尚东数字谷A区2号B座1层
- 简历投至:zelongchen@matrix.io

通过blockchain_go分析区块链交易原理

文章分享pert 发表了文章 • 0 个评论 • 846 次浏览 • 2018-07-15 14:18 • 来自相关话题

[原文链接-石匠的Blog](http://www.bugclosed.com/post/38) ### 1.背景 在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下。需要进行 ...查看全部


[原文链接-石匠的Blog](http://www.bugclosed.com/post/38)

### 1.背景
在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下。需要进行交易,首先就需要有交易的双方以及他们的认证机制,其次是各自的资金账户规则。在分布式账本系统里面,需要有机制能够准确验证一个用户身份以及对账户资金的精确计算,不能出现一丁点差错。在区块链中交易通过Transaction表示,而账户的自己并不是在每个节点上保存每个用户的一个余额的数字,而是通过历史交易信息计算而来(历史交易不可篡改),其中的关键机制是UTXO。

### 2.身份认证
在区块链身份认证是采用RSA非对称加密体系完成,每个用户在会拥有一个“钱包”,钱包是通过安全的椭圆曲线加密算法生成,其中包括一对公私钥。私钥自己保留不能暴露,用作加密,签名等,公钥公开给所有人,用于信息验证等。只要是用私钥签名的信息,就可以通过配对的公钥解码认证,不可抵赖。在blockchain_go中,钱包实现如下:

```
// Wallet stores private and public keys
type Wallet struct {
PrivateKey ecdsa.PrivateKey
PublicKey []byte
}

// NewWallet creates and returns a Wallet
func NewWallet() *Wallet {
private, public := newKeyPair()
wallet := Wallet{private, public}

return &wallet
}
func newKeyPair() (ecdsa.PrivateKey, []byte) {
curve := elliptic.P256() //椭圆曲线
private, err := ecdsa.GenerateKey(curve, rand.Reader) //生成私钥
if err != nil {
log.Panic(err)
}
pubKey := append(private.PublicKey.X.Bytes(),private.PublicKey.Y.Bytes()...) //合成公钥

return *private, pubKey
}
```
钱包最重要的功能就是为用户提供身份认证和加解密的公私钥对。

### 3.什么是Transaction
区块链中的Transaction(交易)就是一批输入和输出的集合,比如A通过交易给B10个代币(token),那么交易就是A输入10代币,输出变成B得到10代币,这样A就减少10代币,B增加10代币,再将这个交易信息存储到区块链中固化后,A和B在区块链中的账号状态就发生了永久性不可逆的变化。

在blockchain_go中transaction的定义如下:

```
// TXInput represents a transaction input
type TXInput struct {
Txid []byte
Vout int
Signature []byte
PubKey []byte
}
// TXOutput represents a transaction output
type TXOutput struct {
Value int
PubKeyHash []byte
}

type Transaction struct {
ID []byte //交易唯一ID
Vin []TXInput //交易输入序列
Vout []TXOutput //交易输出序列
}

```
从定义可以看到Transaction就是输入和输出的集合,输入和输出的关系如下图:
![交易输入输出关系图](http://p8t8zn8m5.bkt.clouddn.com/wblog/input_output.png)

其中tx0,tx1,tx2等是独立的交易,每个交易通过输入产生输出,下面重点看看一个交易的输入和输出单位是怎么回事。

先看输出TXOutput:

+ Value : 表示这个输出中的代币数量
+ PubKeyHash : 存放了一个用户的公钥的hash值,表示这个输出里面的Value是属于哪个用户的

输入单元TXInput:

+ Txid : 交易ID(这个输入使用的是哪个交易的输出)
+ Vout : 该输入单元指向本次交易输出数组的下标,通俗讲就是,这个输入使用的是Txid中的第几个输出。
+ Signature : 输入发起方(转账出去方)的私钥签名本Transaction,表示自己认证了这个输入TXInput。
+ PubKey : 输入发起方的公钥

通俗来讲,一个TXInput结构表示 :

```
我要使用哪个交易(Txid)的哪个输出数组(Transaction.Vout)的下标(Vout)作为我本次输入的代币数值(TXOutput.Value)
```
因为交易的输入其实是需要指明要输入多少代币(Value),但是TXInput中并没有直接的代币字段,而唯一有代币字段的是在TXOuput中,所以这里使用的方式是在TXInput中指明了自己需要使用的代币在哪个TXOutput中。

TXInput中的Signature字段是发起用户对本次交易输入的签名,PubKey存放了用户的公钥,用于之前的验证(私钥签名,公钥验证)。


### 3.什么是UTXO
UTXO 是 Unspent Transaction Output 的缩写,意指“为花费的交易输出”,是中本聪最早在比特币中采用的一种技术方案。因为比特币中没有账户的概念,也就没有保存用户余额数值的机制。因为区块链中的历史交易都是被保存且不可修改的,而每一个交易(如前所述的Transaction)中又保存了“谁转移了多少给谁”的信息,所以要计算用户账户余额,只需要遍历所有交易进行累计即可。

从第三节的交易图可以看到,每笔交易的输入TXInput都是使用的是其他交易的输出TXOutput(只有输出中保存了该输出是属于哪个用户,价值多少)。如果一笔交易的输出被另外一个交易的输入引用了(TXInput中的Vout指向了该TXOutput),那么这笔输出就是“已花费”。如果一笔交易的输出没有被任何交易的输入引用,那么就是“未花费”。分析上图的tx3交易:

tx3有3个输入:

+ input 0 :来自tx0的output0,花费了这个tx0.output0.
+ input 1 :来自tx1的output1,花费了这个tx1.output1.
+ input 2 :来自了tx2的output0,花费了这个tx2.output0.

tx3有2个输出:

+ output 0 :没有被任何后续交易引用,表示“未花费”。
+ output 1 :被tx4的input1引用,表示已经被花费。

因为每一个output都包括一个value和一个公钥身份,所以遍历所有区块中的交易,找出其中所有“未花费”的输出,就可以计算出用户的账户余额。

### 4.查找未花费的Output
如果一个账户需要进行一次交易,把自己的代币转给别人,由于没有一个账号系统可以直接查询余额和变更,而在utxo模型里面一个用户账户余额就是这个用户的所有utxo(未花费的输出)记录的合集,因此需要查询用户的转账额度是否足够,以及本次转账需要消耗哪些output(将“未花费”的output变成”已花费“的output),通过遍历区块链中每个区块中的每个交易中的output来得到结果。

下面看看怎么查找一个特定用户的utxo,utxo_set.go相关代码如下:

```
// FindSpendableOutputs finds and returns unspent outputs to reference in inputs
func (u UTXOSet) FindSpendableOutputs(pubkeyHash []byte, amount int) (int, map[string][]int) {
unspentOutputs := make(map[string][]int)
accumulated := 0
db := u.Blockchain.db

err := db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(utxoBucket))
c := b.Cursor()

for k, v := c.First(); k != nil; k, v = c.Next() {
txID := hex.EncodeToString(k)
outs := DeserializeOutputs(v)

for outIdx, out := range outs.Outputs {
if out.IsLockedWithKey(pubkeyHash) && accumulated < amount {
accumulated += out.Value
unspentOutputs[txID] = append(unspentOutputs[txID], outIdx)
}
}
}

return nil
})
if err != nil {
log.Panic(err)
}

return accumulated, unspentOutputs
}

```
FindSpendableOutputs查找区块链上pubkeyHash账户的utxo集合,直到这些集合的累计未花费金额达到需求的amount为止。

blockchain_go中使用嵌入式key-value数据库boltdb存储区块链和未花费输出等信息,其中utxoBucket是所有用户未花费输出的bucket,其中的key表示交易ID,value是这个交易中未被引用的所有output的集合。所以通过遍历查询本次交易需要花费的output,得到Transaction的txID和这个output在Transaction中的输出数组中的下标组合unspentOutputs。

另外一个重点是utxobucket中保存的未花费输出结合是关于所有账户的,要查询特定账户需要对账户进行判断,因为TXOutput中有pubkeyhash字段,用来表示该输出属于哪个用户,此处采用out.IsLockedWithKey(pubkeyHash)判断特定output是否是属于给定用户。

### 5.新建Transaction
需要发起一笔交易的时候,需要新建一个Transaction,通过交易发起人的钱包得到足够的未花费输出,构建出交易的输入和输出,完成签名即可,blockchain_go中的实现如下:

```
// NewUTXOTransaction creates a new transaction
func NewUTXOTransaction(wallet *Wallet, to string, amount int, UTXOSet *UTXOSet) *Transaction {
var inputs []TXInput
var outputs []TXOutput

pubKeyHash := HashPubKey(wallet.PublicKey)
acc, validOutputs := UTXOSet.FindSpendableOutputs(pubKeyHash, amount)

if acc < amount {
log.Panic("ERROR: Not enough funds")
}

// Build a list of inputs
for txid, outs := range validOutputs {
txID, err := hex.DecodeString(txid)
if err != nil {
log.Panic(err)
}

for _, out := range outs {
input := TXInput{txID, out, nil, wallet.PublicKey}
inputs = append(inputs, input)
}
}

// Build a list of outputs
from := fmt.Sprintf("%s", wallet.GetAddress())
outputs = append(outputs, *NewTXOutput(amount, to))
if acc > amount {
outputs = append(outputs, *NewTXOutput(acc-amount, from)) // a change
}

tx := Transaction{nil, inputs, outputs}
tx.ID = tx.Hash()
UTXOSet.Blockchain.SignTransaction(&tx, wallet.PrivateKey)

return &tx
}

```

函数参数:

+ wallet : 用户钱包参数,存储用户的公私钥,用于交易的签名和验证。
+ to : 交易转账的目的地址(转账给谁)。
+ amount : 需要交易的代币额度。
+ UTXOSet : uxto集合,查询用户的未花费输出。

查询需要的未花费输出:

```
acc, validOutputs := UTXOSet.FindSpendableOutputs(pubKeyHash, amount)
```
因为用户的总金额是通过若干未花费输出累计起来的,而每个output所携带金额不一而足,所以每次转账可能需要消耗多个不同的output,而且还可能涉及找零问题。以上查询返回了一批未花费输出列表validOutputs和他们总共的金额acc. 找出来的未花费输出列表就是本次交易的输入,并将输出结果构造output指向目的用户,并检查是否有找零,将找零返还。

如果交易顺利完成,转账发起人的“未花费输出”被消耗掉变成了花费状态,而转账接收人to得到了一笔新的“未花费输出”,之后他自己需要转账时,查询自己的未花费输出,即可使用这笔钱。

最后需要对交易进行签名,表示交易确实是由发起人本人发起(私钥签名),而不是被第三人冒充。

### 6.Transaction的签名和验证

#### 6.1 签名

交易的有效性需要首先建立在发起人签名的基础上,防止他人冒充转账或者发起人抵赖,blockchain_go中交易签名实现如下:

```
// SignTransaction signs inputs of a Transaction
func (bc *Blockchain) SignTransaction(tx *Transaction, privKey ecdsa.PrivateKey) {
prevTXs := make(map[string]Transaction)

for _, vin := range tx.Vin {
prevTX, err := bc.FindTransaction(vin.Txid)
if err != nil {
log.Panic(err)
}
prevTXs[hex.EncodeToString(prevTX.ID)] = prevTX
}

tx.Sign(privKey, prevTXs)
}

// Sign signs each input of a Transaction
func (tx *Transaction) Sign(privKey ecdsa.PrivateKey, prevTXs map[string]Transaction) {
if tx.IsCoinbase() {
return
}

for _, vin := range tx.Vin {
if prevTXs[hex.EncodeToString(vin.Txid)].ID == nil {
log.Panic("ERROR: Previous transaction is not correct")
}
}

txCopy := tx.TrimmedCopy()

for inID, vin := range txCopy.Vin {
prevTx := prevTXs[hex.EncodeToString(vin.Txid)]
txCopy.Vin[inID].Signature = nil
txCopy.Vin[inID].PubKey = prevTx.Vout[vin.Vout].PubKeyHash

dataToSign := fmt.Sprintf("%x\n", txCopy)

r, s, err := ecdsa.Sign(rand.Reader, &privKey, []byte(dataToSign))
if err != nil {
log.Panic(err)
}
signature := append(r.Bytes(), s.Bytes()...)

tx.Vin[inID].Signature = signature
txCopy.Vin[inID].PubKey = nil
}
}

```
交易输入的签名信息是放在TXInput中的signature字段,其中需要包括用户的pubkey,用于之后的验证。需要对每一个输入做签名。

#### 6.2 验证

交易签名是发生在交易产生时,交易完成后,Transaction会把交易广播给邻居。节点在进行挖矿时,会整理一段时间的所有交易信息,将这些信息打包进入新的区块,成功加入区块链以后,这个交易就得到了最终的确认。但是在挖矿节点打包交易前,需要对交易的有效性做验证,以防虚假数据,验证实现如下:

```
// MineBlock mines a new block with the provided transactions
func (bc *Blockchain) MineBlock(transactions []*Transaction) *Block {
var lastHash []byte
var lastHeight int

for _, tx := range transactions {
// TODO: ignore transaction if it's not valid
if bc.VerifyTransaction(tx) != true {
log.Panic("ERROR: Invalid transaction")
}
}

...
...
...

return block
}
// VerifyTransaction verifies transaction input signatures
func (bc *Blockchain) VerifyTransaction(tx *Transaction) bool {
if tx.IsCoinbase() {
return true
}

prevTXs := make(map[string]Transaction)

for _, vin := range tx.Vin {
prevTX, err := bc.FindTransaction(vin.Txid)
if err != nil {
log.Panic(err)
}
prevTXs[hex.EncodeToString(prevTX.ID)] = prevTX
}

return tx.Verify(prevTXs)
}
// Verify verifies signatures of Transaction inputs
func (tx *Transaction) Verify(prevTXs map[string]Transaction) bool {
if tx.IsCoinbase() {
return true
}

for _, vin := range tx.Vin {
if prevTXs[hex.EncodeToString(vin.Txid)].ID == nil {
log.Panic("ERROR: Previous transaction is not correct")
}
}

txCopy := tx.TrimmedCopy()
curve := elliptic.P256()

for inID, vin := range tx.Vin {
prevTx := prevTXs[hex.EncodeToString(vin.Txid)]
txCopy.Vin[inID].Signature = nil
txCopy.Vin[inID].PubKey = prevTx.Vout[vin.Vout].PubKeyHash

r := big.Int{}
s := big.Int{}
sigLen := len(vin.Signature)
r.SetBytes(vin.Signature[:(sigLen / 2)])
s.SetBytes(vin.Signature[(sigLen / 2):])

x := big.Int{}
y := big.Int{}
keyLen := len(vin.PubKey)
x.SetBytes(vin.PubKey[:(keyLen / 2)])
y.SetBytes(vin.PubKey[(keyLen / 2):])

dataToVerify := fmt.Sprintf("%x\n", txCopy)

rawPubKey := ecdsa.PublicKey{Curve: curve, X: &x, Y: &y}
if ecdsa.Verify(&rawPubKey, []byte(dataToVerify), &r, &s) == false {
return false
}
txCopy.Vin[inID].PubKey = nil
}

return true
}
```
可以看到验证的时候也是每个交易的每个TXInput都单独进行验证,和签名过程很相似,需要构造相同的交易数据txCopy,验证时会用到签名设置的TxInput.PubKeyHash生成一个原始的PublicKey,将前面的signature分拆后通过ecdsa.Verify进行验证。

### 7.总结
以上简单分析和整理了blockchain_go中的交易和UTXO机制的实现过程,加深了区块链中的挖矿,交易和转账的基础技术原理的理解。

EthBox以太坊开发套件,一键安装部署以太坊开发环境

文章分享jimi 发表了文章 • 0 个评论 • 485 次浏览 • 2018-06-08 11:19 • 来自相关话题

`EthBox`是汇智网为了方便以太坊开发学习者快速安装本地开发环境而制作的开发套件,可以一键安装以下必备开发工具: - nodejs:8.11.2 - git:2.17.1.2 - geth:1.8.10 ...查看全部
`EthBox`是汇智网为了方便以太坊开发学习者快速安装本地开发环境而制作的开发套件,可以一键安装以下必备开发工具:

- nodejs:8.11.2
- git:2.17.1.2
- geth:1.8.10
- ganache-cli:6.1.0
- truffle:4.1.11

`EthBox`即支持采用仿真器进行快速开发验证,也支持使用标准
节点软件搭建私链测试,或接入公链进行部署。

`EthBox`的当前版本是0.0.1,目前仅适用于windows操作系统。

- [EthBox下载地址 - 百度云盘](https://pan.baidu.com/s/1sjqciE0CsAHj2Qnm5f51KA)
- [EthBox使用说明](http://blog.hubwiz.com/2018/06/07/ethbox-readme/)
- [以太坊教程](http://xc.hubwiz.com/course/5a952991adb3847553d205d1)
- [以太坊电商实战教程](http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6)

## 安装

执行下载到本地的`ethbox-setup.exe`启动安装程序:

![agreement](http://upload-images.jianshu.io/upload_images/11831773-2593db28bf4f87ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

点击[接受]按钮,进入安装目录选择:

![installdir](http://upload-images.jianshu.io/upload_images/11831773-36ba6137710e0aca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

点击[安装]按钮,开始执行安装过程:

![install](http://upload-images.jianshu.io/upload_images/11831773-55e124f4a398f95b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

安装完毕后,在桌面可以看到EthBox图标:

![shortcut](http://upload-images.jianshu.io/upload_images/11831773-d2aa396f9de84244.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


## 启动仿真器

点击桌面的EthBox图标,即可进入EthBox环境:

![EthBox](http://upload-images.jianshu.io/upload_images/11831773-5c2a695472c2f2df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

执行`ganache-cli`启动仿真器:

```
C:\Users\user> ganache-cli
```

显示如下结果,表示成功启动:

![ganache](http://upload-images.jianshu.io/upload_images/11831773-a99facdd013705b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 创建truffle项目

再次点击桌面的EthBox图标,进入EthBox环境。

创建一个项目目录,然后执行`truffle unbox webpack`初始化项目文件:

```
C:\Users\user> md demo
C:\Users\hubwiz\demo> truffle.cmd unbox webpack
```

你将会看到如下结果:

![truffle unbox webpack](http://upload-images.jianshu.io/upload_images/11831773-10d4778db30e60f1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在`Setting up...`处将需要等待一会儿,因为需要从网络下载项目依赖包。

## 运行truffle项目

首先修改默认的`truffle.js`配置文件,将节点端口修改为8545 - 因为ganache-cli的监听端口是8545:

```
module.exports = {
networks:{
development: {
port: 8545
}
}
}
```

然后修改`app/javascripts/app.js`中的节点URL,同样将端口修改为8545:

```
window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
```

现在执行`truffle compile`命令编译合约:

```
C:\Users\user\demo> truffle.cmd compile
```

编译过程中有一些警告,暂时忽略即可。

然后执行`truffle migrate`部署合约:

```
C:\Users\user\demo> truffle.cmd migrate
```

结果如下:

![truffle migrate](http://upload-images.jianshu.io/upload_images/11831773-5d0c3ecb34289f72.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

在部署过程中,如果你切换到ganache那个窗口,会看到一些交易信息 —— 部署合约也是一种交易:

![ganache transactions](http://upload-images.jianshu.io/upload_images/11831773-f211650dc0f61e4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

一切就绪!可以启动web服务器了:

```
C:\Users\user\demo> npm run dev
```

这个命令会执行内存打包并且启动一个在8080端口监听的web服务器:

![npm-run-dev](http://upload-images.jianshu.io/upload_images/11831773-d2dc21ec85087bc4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

现在,访问 http://localhost:8080 即可!

![web](http://upload-images.jianshu.io/upload_images/11831773-16e1a2a7f5432e25.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

注意这句话:

> You have 10000 META

这个`10000`是从链上(ganache-cli)取来的,因此看到这个数字,就意味着,你的以太坊开发环境部署成功!

原文:http://blog.hubwiz.com/2018/06/07/ethbox-readme/

以太坊教程:搭建环境、编写编译一个智能合约

文章分享jimi2018 发表了文章 • 0 个评论 • 782 次浏览 • 2018-06-05 14:55 • 来自相关话题

本以太坊教程主要是介绍:搭建一个开发环境、编写编译一个智能合约。 ### 以太坊是什么 以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether)提供去中心化 ...查看全部
本以太坊教程主要是介绍:搭建一个开发环境、编写编译一个智能合约。

### 以太坊是什么

以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(“以太虚拟机” Ethereum Virtual Machine)来处理点对点合约。

以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin,受比特币启发后提出,大意为“下一代加密货币与去中心化应用平台”,在2014年通过ICO众筹得以开始发展。目前以太币是市值第二高的加密货币,仅次于比特币。

### 以太坊区块链是什么?

以太坊区块链有 2 个主要组件:

- 数据存储:网络中每笔交易都存储在区块链上。当你部署合约时,就是一笔交易。当你执行合约功能时,也是另一笔交易。所有的这些交易都是公开的,每个人都可以看到并进行验证。这个数据永远也无法篡改。为了确保网络中的所有节点都有着同一份数据拷贝,并且没有向区块链中写入任何的无效数据,以太坊使用一个叫做工作量证明的算法来保证网络安全。

- 代码:就数据的层面而言,区块链就是存储交易。在以太坊的世界里,你可以通过一个叫 Solidity 的语言编写逻辑/应用代码(也就是智能合约)。然后用 solidity 编译器将代码编译为以太坊字节码,并将字节码部署到区块链上(也有一些其他的语言可以写合约,不过 solidity 是到目前为止用得最多也是相对更容易的选择)。所以,以太坊不仅仅会存储交易数据,它还会存储和执行智能合约代码。

可以简单的理解以太坊区块链的作用就是存储数据和代码,并在 EVM(Ethereum Virtual Machine,以太坊虚拟机)中执行代码。

### 要准备的基础知识

为了进行以太坊开发,你应该对以下语言/技术有基本了解:

- 熟悉某种面向对象语言(如Python,Java,go)
- HTML/CSS/Javascript
- 基本的命令行交互如Linux shell命令
- 理解数据库的基本概念

为了构建以太坊去中心化应用即Dapp(Decentralized application),以太坊有一个非常方便的 JavaScript 库即 web3.js,你也可以在一些 js 框架中直接引入该库构建应用,比如 react,angular,vue 等。

### 示例:一个以太坊投票应用

[以太坊教程](http://xc.hubwiz.com/course/5a952991adb3847553d205d1)示例中,我们将会构建一个简单的去中心化投票应用。所谓去中心化应用,就是一个不只存在于某一中心化服务器上的应用。在网络中成百上千的电脑上,会运行着非常多的应用副本,这使得它几乎不可能出现宕机的情况。你将会构建一个投票应用,在这个应用中,你可以初始化参与选举的候选者,并对候选者投票,而这些投票将会被记录在区块链上。你将会经历编写投票合约,部署到区块链并与之交互的整个过程。你将会了解什么是一个合约,将合约部署到区块链上并与之交互意味着什么。

本质上,区块链就像是一个分布式数据库,这个数据库维护了一个不断增长的记录链表。如果熟悉关系型数据库,你应该知道一张表里有很多行的数据。现在,对数据进行批(batch)量处理(比如每批 100 行),并将每个处理的批次相连。就可以形成一个区块链了!在区块链里,每个批次的数据就叫一个块(block),块里的每一行就叫一笔交易(transaction)。

现在,你对以太坊已经有了基本了解,我们可以开始构建投票的 dapp 了。这将会加强你对以太坊的认识,并且初略了解以太坊的功能。

### 以太坊开发环境搭建

#### Linux

示例是 Ubuntu 16.04 下的学习环境搭建,你只需要成功安装了 nodejs 和 npm,就可以继续项目的下一步了。

我们通过 npm 安装 ganache 和 web3 包来为[以太坊教程](http://xc.hubwiz.com/course/5a952991adb3847553d205d1)提供支撑。我们也需要安装 solc来编译合约。

下面是安装过程:
```
$ sudo apt-get update
$ curl -sL https://deb.nodesource.com/setup_7.x -o nodesource_setup.sh
$ sudo bash nodesource_setup.sh
$ sudo apt-get install nodejs
$ node --version
v7.4.0
$ npm --version
4.0.5
$ mkdir -p ethereum_voting_dapp/chapter1
$ cd ethereum_voting_dapp/chapter1
$ npm install ganache-cli web3@0.20.1 solc
$ node_modules/.bin/ganache-cli
```
如果安装成功,运行命令node_modules/.bin/ganache-cli,应该能够看到下面的输出。

```
Ganache CLI v6.0.3 (ganache-core: 2.0.2)

Available Accounts
==================
(0) 0x5c252a0c0475f9711b56ab160a1999729eccce97
(1) 0x353d310bed379b2d1df3b727645e200997016ba3
(2) 0xa3ddc09b5e49d654a43e161cae3f865261cabd23
(3) 0xa8a188c6d97ec8cf905cc1dd1cd318e887249ec5
(4) 0xc0aa5f8b79db71335dacc7cd116f357d7ecd2798
(5) 0xda695959ff85f0581ca924e549567390a0034058
(6) 0xd4ee63452555a87048dcfe2a039208d113323790
(7) 0xc60c8a7b752d38e35e0359e25a2e0f6692b10d14
(8) 0xba7ec95286334e8634e89760fab8d2ec1226bf42
(9) 0x208e02303fe29be3698732e92ca32b88d80a2d36

Private Keys
==================
(0) a6de9563d3db157ed9926a993559dc177be74a23fd88ff5776ff0505d21fed2b
(1) 17f71d31360fbafbc90cad906723430e9694daed3c24e1e9e186b4e3ccf4d603
(2) ad2b90ce116945c11eaf081f60976d5d1d52f721e659887fcebce5c81ee6ce99
(3) 68e2288df55cbc3a13a2953508c8e0457e1e71cd8ae62f0c78c3a5c929f35430
(4) 9753b05bd606e2ffc65a190420524f2efc8b16edb8489e734a607f589f0b67a8
(5) 6e8e8c468cf75fd4de0406a1a32819036b9fa64163e8be5bb6f7914ac71251cc
(6) c287c82e2040d271b9a4e071190715d40c0b861eb248d5a671874f3ca6d978a9
(7) cec41ef9ccf6cb3007c759bf3fce8ca485239af1092065aa52b703fd04803c9d
(8) c890580206f0bbea67542246d09ab4bef7eeaa22c3448dcb7253ac2414a5362a
(9) eb8841a5ae34ff3f4248586e73fcb274a7f5dd2dc07b352d2c4b71132b3c73f0

HD Wallet
==================
Mnemonic: cancel better shock lady capable main crunch alcohol derive alarm duck umbrella
Base HD Path: m/44'/60'/0'/0/{account_index}

Listening on localhost:8545
```
为了便于测试,ganache 默认会创建 10 个账户,每个账户有 100 个以太。如果你还不懂什么是账户,把它想象成存钱的银行账户就可以了(以太(Ether,ETH)就是以太坊生态系统中的 钱/货币)。你需要用这个账户创建交易,发送/接收以太。

#### MacOS

如果你还没有安装 homebrew,请按照 https://brew.sh/ 的指示安装 homebrew。homebrew 是一个包管理器,它可以帮助我们安装开发所需的所有其他软件。按照下面的指示安装所有其他所需的包。
```
$ brew update
$ brew install nodejs
$ node --version
v7.10.0
$ npm --version
4.2.0
$ mkdir -p ethereum_voting_dapp/chapter1
$ cd ethereum_voting_dapp/chapter1
$ npm install ganache-cli web3@0.20.1 solc
$ node_modules/.bin/ganache-cli
```

我们通过 npm 安装 ganache 和 web3 包。我们也需要安装 solc 来编译合约。

如果安装成功,运行命令node_modules/.bin/ganache-cli,应该能够看到右图所示的输出。
```
Ganache CLI v6.0.3 (ganache-core: 2.0.2)
Available Accounts
==================
(0) 0x5c252a0c0475f9711b56ab160a1999729eccce97
(1) 0x353d310bed379b2d1df3b727645e200997016ba3
(2) 0xa3ddc09b5e49d654a43e161cae3f865261cabd23
(3) 0xa8a188c6d97ec8cf905cc1dd1cd318e887249ec5
(4) 0xc0aa5f8b79db71335dacc7cd116f357d7ecd2798
(5) 0xda695959ff85f0581ca924e549567390a0034058
(6) 0xd4ee63452555a87048dcfe2a039208d113323790
(7) 0xc60c8a7b752d38e35e0359e25a2e0f6692b10d14
(8) 0xba7ec95286334e8634e89760fab8d2ec1226bf42
(9) 0x208e02303fe29be3698732e92ca32b88d80a2d36

Private Keys
==================
(0) a6de9563d3db157ed9926a993559dc177be74a23fd88ff5776ff0505d21fed2b
(1) 17f71d31360fbafbc90cad906723430e9694daed3c24e1e9e186b4e3ccf4d603
(2) ad2b90ce116945c11eaf081f60976d5d1d52f721e659887fcebce5c81ee6ce99
(3) 68e2288df55cbc3a13a2953508c8e0457e1e71cd8ae62f0c78c3a5c929f35430
(4) 9753b05bd606e2ffc65a190420524f2efc8b16edb8489e734a607f589f0b67a8
(5) 6e8e8c468cf75fd4de0406a1a32819036b9fa64163e8be5bb6f7914ac71251cc
(6) c287c82e2040d271b9a4e071190715d40c0b861eb248d5a671874f3ca6d978a9
(7) cec41ef9ccf6cb3007c759bf3fce8ca485239af1092065aa52b703fd04803c9d
(8) c890580206f0bbea67542246d09ab4bef7eeaa22c3448dcb7253ac2414a5362a
(9) eb8841a5ae34ff3f4248586e73fcb274a7f5dd2dc07b352d2c4b71132b3c73f0

HD Wallet
==================
Mnemonic: cancel better shock lady capable main crunch alcohol derive alarm duck umbrella
Base HD Path: m/44'/60'/0'/0/{account_index}

Listening on localhost:8545
```
为了便于测试,ganache 默认会创建 10 个账户,每个账户有 100 个以太。如果你还不懂什么是以太坊账户,把它想象成存钱的银行账户就可以了(以太(Ether, ETH)就是以太坊生态系统中的钱/货币)。你需要用这个账户创建交易,发送/接收以太。

#### Windows

- 安装 Visual Studio Community Edition。如果你选择定制安装,那么至少应该安装 Visual C++(目前的版本是 VS 2017)
- 安装 Windows SDK for Windows
- 安装 Python 2.7 如果你还没有安装的话,并且确保将它加入到环境变量 PATH
- 安装 git 如果你还没有安装并加入到 PATH
- 安装 OpenSSL。确保选择了正确的安装包,并且只安装完整版(而不是轻装版)。你必须将 OpenSSL 安装到推荐安装的位置 -- 不要改变安装路径
- 下载和安装 node v8.1.2 。不推荐使用版本 v6.11.0 搭配 VS2017
- 执行命令 npm install ganache-cli web3@0.20.1 solc

### Solidity Contracts

现在已经安装好 ganache 并运行,我们将会开始编写第一个以太坊智能合约。

我们会使用 solidity 编程语言来编写合约。如果你熟悉面向对象编程,学习用 solidity 写合约应该非常简单。我们会写一个叫做 Voting 的合约(可以把合约看成是面对对象编程语言的一个类),这个合约有以下内容:

- 一个构造函数,用来初始化一些候选者。
- 一个用来投票的方法(对投票数加 1)
- 一个返回候选者所获得的总票数的方法

当你把合约部署到区块链的时候,就会调用构造函数,并只调用一次。与 web 世界里每次部署代码都会覆盖旧代码不同,在区块链上部署的合约是不可改变的,也就是说,如果你更新合约并再次部署,旧的合约仍然会在区块链上存在,并且数据仍在。新的部署将会创建合约的一个新的实例。

```
pragma solidity ^0.4.18;

contract Voting {

mapping (bytes32 => uint8) public votesReceived;
bytes32[] public candidateList;

function Voting(bytes32[] candidateNames) public {
candidateList = candidateNames;
}

function totalVotesFor(bytes32 candidate) view public returns (uint8) {
require(validCandidate(candidate));
return votesReceived[candidate];
}

function voteForCandidate(bytes32 candidate) public {
require(validCandidate(candidate));
votesReceived[candidate] += 1;
}

function validCandidate(bytes32 candidate) view public returns (bool) {
for(uint i = 0; i < candidateList.length; i++) {
if (candidateList[i] == candidate) {
return true;
}
}
return false;
}
}
```
将右侧代码拷贝到一个叫做 Voting.sol 的文件中,并保存到 chapter1 目录下面。

**代码和解释**

- Line 1. 我们必须指定代码将会哪个版本的编译器进行编译
- Line 3. mapping 相当于一个关联数组或者是字典,是一个键值对。mapping votesReceived 的键是候选者的名字,类型为 bytes32。mapping 的值是一个未赋值的整型,存储的是投票数。
- Line 4. 在很多编程语言中,仅仅通过 votesReceived.keys 就可以获取所有的候选者姓名。但是,但是在 solidity 中没有这样的方法,所以我们必须单独管理一个候选者数组 candidateList。
- Line 14. 注意到 votesReceived[key] 有一个默认值 0,所以你不需要将其初始化为 0,直接加1 即可。

你也会注意到每个函数有个可见性说明符(visibility specifier)(比如本例中的 public)。这意味着,函数可以从合约外调用。如果你不想要其他任何人调用这个函数,你可以把它设置为私有(private)函数。如果你不指定可见性,编译器会抛出一个警告。最近 solidity 编译器进行了一些改进,如果用户忘记了对私有函数进行标记导致了外部可以调用私有函数,编译器会捕获这个问题。 [这里](http://solidity.readthedocs.io/en/develop/miscellaneous.html#function-visibility-specifiers) 可以看到所有的可见性说明符。

你也会在一些函数上看到一个修饰符 view。它通常用来告诉编译器函数是只读的(也就是说,调用该函数,区块链状态并不会更新)。所有的修饰符都可以在 [这里](http://solidity.readthedocs.io/en/develop/miscellaneous.html#modifiers) 看到。

### 编译智能合约

我们将会使用上一节安装的 solc 库来编译代码。如果你还记得的话,之前我们提到过 web3js 是一个库,它能够让你通过 RPC 与区块链进行交互。我们将会在 node 控制台里用这个库部署合约,并与区块链进行交互。

首先,在终端中运行 node 进入 node 控制台,初始化 web3 对象,并向区块链查询获取所有的账户。

>确保与此同时 ganache 已经在另一个窗口中运行

为了编译合约,先从 Voting.sol 中加载代码并绑定到一个 string 类型的变量,然后像下边这样对合约进行编译。

```
$ node

In the node console
> Web3 = require('web3')
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
> web3.eth.accounts
['0x5c252a0c0475f9711b56ab160a1999729eccce97'
'0x353d310bed379b2d1df3b727645e200997016ba3'
'0xa3ddc09b5e49d654a43e161cae3f865261cabd23'
'0xa8a188c6d97ec8cf905cc1dd1cd318e887249ec5'
'0xc0aa5f8b79db71335dacc7cd116f357d7ecd2798'
'0xda695959ff85f0581ca924e549567390a0034058'
'0xd4ee63452555a87048dcfe2a039208d113323790'
'0xc60c8a7b752d38e35e0359e25a2e0f6692b10d14'
'0xba7ec95286334e8634e89760fab8d2ec1226bf42'
'0x208e02303fe29be3698732e92ca32b88d80a2d36']


> code = fs.readFileSync('Voting.sol').toString()
> solc = require('solc')
> compiledCode = solc.compile(code)
```

当你成功地编译好合约,打印 compiledCode 对象(直接在 node 控制台输入 compiledCode 就可以看到内容),你会注意到有两个重要的字段,它们很重要,你必须要理解:

- 1.compiledCode.contracts[':Voting'].bytecode: 这就是 Voting.sol 编译好后的字节码。也是要部署到区块链上的代码。
- 2.compiledCode.contracts[':Voting'].interface: 这是一个合约的接口或者说模板(叫做 abi 定义),它告诉了用户在这个合约里有哪些方法。在未来无论何时你想要跟任意一个合约进行交互,你都会需要这个 abi 定义。你可以在这里 看到 [ABI](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) 的更多内容。

教程参考汇智网的DAPP开发入门教程,如果大家等不及博客更新,也可以直接访问这个[以太坊教程](http://xc.hubwiz.com/course/5a952991adb3847553d205d1)。

什么是以太坊?什么是智能合约?

文章分享jimi2018 发表了文章 • 0 个评论 • 629 次浏览 • 2018-05-29 18:46 • 来自相关话题

![以太坊智能合约](http://upload-images.jianshu.io/upload_images/11831773-b4c4b20efddd1e04.jpg?imageMogr2/auto-orient/strip%7CimageView2/2 ...查看全部
![以太坊智能合约](http://upload-images.jianshu.io/upload_images/11831773-b4c4b20efddd1e04.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

以太坊是一个分布式的计算平台。它会生成一个名为Ether的加密货币。程序员可以在以太坊区块链上写下“智能合约”,这些以太坊智能合约会根据代码自动执行。

### 以太坊是什么?
以太坊经常与比特币相提并论,但情况却有所不同。比特币是一种加密货币和分布式支付网络,允许比特币在用户之间转移。

> 相关:[什么是比特币?它是如何工作的?](https://www.howtogeek.com/141374/htg-explains-what-is-bitcoin-and-how-does-it-work/)

以太坊项目有更大的目标。正如Ethereum网站所说,“以太坊是一个运行智能合约的分布式平台”。这些智能合约运行在“以太坊虚拟机”上,这是一个由所有运行以太网节点的设备组成的分布式计算网络。

“分布式平台”部分意味着任何人都可以建立并运行以太坊节点,就像任何人都可以运行比特币节点一样。任何想要在节点上运行“智能合约”的人都必须向Ether中的这些节点的运营商付款,这是一个与以太坊相关的加密货币。因此,运行以太网节点的人提供计算能力,并在以太网中获得支付,这与运行比特币节点的人提供哈希能力并以比特币支付的方式类似。

换句话说,虽然比特币仅仅是一个区块链和支付网络,但以太坊是一个分布式计算网络,其区块链可以用于许多其他事情。[以太坊白皮书](https://pan.baidu.com/s/1bzAFnzJ35hlQxJ2J4Oj-Ow)中提供了详细信息。

### 以太是什么?

以太网是与以太坊区块链相关的数字标记(或者说就是加密货币)。换句话说,以太是代币,以太坊是平台。但是,现在人们经常交替使用这些术语。例如,Coinbase允许你购买以太坊代币(Ethereum),即代表以太币代币。

这在技术上就是“[altcoin](https://www.howtogeek.com/341972/what-are-altcoins-and-why-do-they-exist/)”,这实际上意味着一个非比特币加密货币。和比特币一样,Ether也受到分布式区块链支持 - 在这种情况下是以太坊区块链。

想要在以太坊区块链上创建应用程序或[以太坊 智能合约](http://xc.hubwiz.com/course/5a952991adb3847553d205d1)的开发人员需要以太网代币来支付节点来托管它,而基于以太坊的应用程序的用户可能需要以太网来支付这些应用程序中的服务费用。人们也可以在以太坊网络之外销售服务,并接受以太网支付,或者可以在交易所以现金形式出售以太币代币 - 就像比特币一样。

### 为什么分布式应用程序有趣?

![以太坊区块链应用程序](http://upload-images.jianshu.io/upload_images/11831773-a9f7854bee7aac24.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

比特币区块链存储比特币交易的历史,就是这样。以太坊区块链将以太币代币存储在人们的钱包中,但它还存储每个智能合约的最新状态以及每个智能合约的代码。

区块链是存储在多个位置的分布式账本,所以这意味着智能合约数据由那些以太坊节点存储。如果您在区块链上创建“智能合约”(也称为应用程序),则会以分布式的方式进行存储和运行。

为了比较,请考虑我们今天使用的许多应用程序。这包括Gmail等电子邮件应用程序,Microsoft OneNote等笔记记录应用程序,以及使用应用程序并将数据存储在公司服务器上的任何其他应用程序。如果存储数据的公司禁止您的帐户,关闭应用程序或停业,那么除非您有脱机备份副本,否则您将丢失该应用程序中的所有数据。

如果您使用的是构建在以太坊之上的应用程序,组成应用程序的代码(智能合约代码)和个人数据(智能合约的状态)将存储在区块链中。每当您使用应用程序并更改数据时,所有以太坊节点都会更新智能合约的状态。这意味着没有中央“失败点”可能会阻止您访问数据或关闭您使用的应用程序。您的数据和应用程序的代码本身将在全球范围内备份,并且没有人可以将所有这些备忘录脱机。当然,您的数据将通过区块链进行加密,所以没有其他人可以读取它。

### 什么是智能合约?

智能合约是在以太坊虚拟机上运行的应用程序。这是一个分布的“世界计算机”,计算能力由所有以太坊节点提供。提供计算能力的任何节点都将以Ether数字货币作为资源支付。

他们被命名为智能合约,因为您可以编写满足要求时自动执行的“合同”。

例如,想象一下在以太坊之上建立一个类似Kickstarter的众筹服务。有人可以建立一个[以太坊智能合约](http://xc.hubwiz.com/course/5a952991adb3847553d205d1),将资金汇集到别人身上。这个智能合约可以写成这样的话:当将100,000美元的货币添加到池中时,它将全部发送给收件人。或者,如果一个月内没有达到100,000美元的门槛,所有的货币都将被发回给货币的原始持有人。当然,这将使用以太币代替美元。

这一切都将根据智能合同代码进行,智能合同代码可自动执行交易,而无需可信任的第三方持有货币并签署交易。例如,Kickstarter在5%的付款处理费之上收取5%的费用,这意味着在$ 100,000的众筹项目中将收取8000到10000美元的费用。智能合约不需要向像Kickstarter这样的第三方支付费用。

智能合约可以用于许多不同的事情。开发人员可以创建智能合约,为其他智能合约提供功能,类似于软件库的工作方式。或者,智能合约可以简单地用作应用程序来存储以太坊区块链上的信息。

为了真正执行智能合同代码,有人必须发送足够的以太网代币作为交易费 - 多少取决于所需的计算资源。这为以太坊节点参与并提供计算能力付出了代价。

### CryptoKitties使用智能合约

![CryptoKitties 智能合约](http://upload-images.jianshu.io/upload_images/11831773-782dd726d9f3aa27.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


在以太坊网络上使用智能合约构建的最知名的应用之一是CryptoKitties,它自称是“世界上第一款基于区块链技术构建的游戏”。

从本质上讲,CryptoKitties是存储在以太坊区块链中的一种数字“可收集”形式。 CryptoKitties提供了在Ethereum网络上存储和交换数字项目的能力的良好演示。

新的CryptoKitties是通过“繁殖”生成的。这涉及到选择两个基本的CryptoKitties并花费以太币代币运行智能合约。合约使用两只选择的猫来产生新的CryptoKitty。这些小猫和繁殖过程的细节存储在以太坊区块链的公共账本上。

您可以“拥有”CryptoKitties,它们存储在以太坊区块链分类账中。您可以将其出售或交易给其他人,也可以购买。这与使用允许您购买,交易和养殖猫的智能手机应用程序不同。这些通常会存储在应用程序自己的服务器上,如果公司关闭应用程序或禁止您的帐户,则可能会丢失珍贵的数字宠物。但是,因为CryptoKitties存储在区块链中,所以不会发生。没有人能把你的小猫带走。

2017年12月 - 巧合的是,在比特币的历史最高价格附近,人们花费了超过1200万美元的CryptoKitties的Ether费用,而最昂贵的CryptoKitty售价约为12万美元。

像以太网,比特币和昂贵的绘画一样,CryptoKitties值得人们准备为它们付钱。

原文:howtogeek.com/350322/what-is-ethereum-and-what-are-smart-contracts
作者: Chris Hoffman