如何用Go开发一个区块链项目:ABTC


当前第2页 返回上一页

到此,区块链产生地址,怎么发起交易,怎么验证交易,如何传播交易,如何在去中心的情况下达成共识,确认交易,交易如何存储有了一个简单认识。

3. Go 和区块链的结合

区块链项目使用的编程语言需要满足执行效率高,高并发,跨平台,高效的网络处理能力等要求,所以早期的区块链项目是以 C++ 为主。但是 C++ 入门起来可能也比较难,很多程序员也不是 C++ 出身,进入区块链再学 C++ 就有点难度了。

Go 语言的出现某种程度上就填补了C++ 的短板。

Go 语言有以下特点:

编译速度快,部署简单,跨平台

  • 高性能,语言底层支持高并发

  • 和C的良好交互性

  • 良好的语言设计,更重要的是自带完善的工具链,大大提高了团队协作的一致性

  • 自动垃圾回收,省去了不少麻烦

  • 特殊的 channel 机制,解决系统内部频繁的通信

    我们是做区块链的团队,想把更多的精力投入在区块链的技术创新和研发上。我们可以用 Go 语言做区块链的创新,同时区块链也是风口的产业,区块链也可以推动 Go 语言的高速发展。所以我们的项目 ABTC 选用了 Go 语言开发,我们的同事都从 JAVA 转过来了,也很快上手了。

    我也做一个广告吧,其实我们整个 ABitchain 是一个技术至上的团队,我们整个团队主要是以社区的形式组织的,大家可以参与到我们的区块链研发中。我们主要是以技术创新为主,我们的目标是区块链 3.0,我们下一个阶段会通过打造立体网络,构建多链并行的区块链,其中有很多技术创新点,大家有兴趣参与进来。

    欢迎大家加入我们,我的演讲就是这些内容,谢谢大家!

Q&A

提问:我有一个比较小白的问题,之前看到讲智能合约那块,假设我有这样一个合约,我跟我朋友对赌,如果皇马赢了巴萨,我就给他一个币,这个合约怎么校验呢?

强科臻:通过智能合约先把对赌的规则写好,参与对赌的两个人会预先把钱充入合约账户中, 比赛结果需要一段时间才能出来,这正好和区块链高度是对应的,因为区块链高度随着时间推移是递增的,在某个确定的高度,调用智能合约中提前写好的方法,这个方法可以访问合约外比较有权威性发布平台,获取比赛结果,根据结果,智能合约会自动钱打到对应的账户上。

提问:假设我选的是 CCTV5 的官网查这个结果,我的朋友在 CCTV5 有人,他为了黑我这个币,把这个结果改了。

强科臻:我想你说的这个可能性太小了,因为作为一个公众性的网站,公布的结果应该是有一定的法律效应的,而且你们既然是朋友,肯定是共识过的,认可 CCTV5 的官网的发布结果。

提问:我们两个认识,就是在这种条件下,我觉得可以说我们两个没有大的利益冲突,但是如果我们不是认识的,只是单纯的生意上的来往呢,如果我的合约变成了几百个币,他的利益很庞大了,他作假的成本可以通过合约回收回来。

强科臻:这种几乎是不可能的,你们两个对赌的时候,在公认的结果出来之前,智能合约会保管对赌双方的资金安全。从外界获取公认的结果,这需要第三方支持,区块链只是帮你完成,把你们两个人的币锁在这个合约里面不会跑,不会出现耍赖情况。

提问:你这个写到的是区块链的 3.0,你们的目标是什么时候达到 EOS 6 月份的进度呢?

强科臻:我们马上上线的主网是区块链 2.5,我们接下来已经规划了两个阶段,这两个阶段我计划年底就达到百万级别 TPS,区块链 3.0 是解决企业应用和数据过大的问题,接下来两个版本会重点解决这两个问题,通过立体网络和并链并行的方式解决。

提问:我接着第一个问题问一下,如果说一场足球比赛放到合约里面,结果到某一个时间点,通过调用外部系统的数据获取结果,这一点我有一点疑惑,在智能合约里面如何会访问外部系统的数据?为什么问这个问题,从原理上来讲,以以太坊智能合约为例,单机的节点要全网所有的节点上,发布到节点上之后,每一个节点都验证这个结果,如果这个数据从外部系统获取过来的,有可能得到的数据结果就不一样,执行的结果就不一样,这个是怎么解决的?

强科臻:因为智能合约在执行的时候,不管是在出块节点执行,还是普通节点执行,都是要保持结果一致的,你刚才说的也会产生这种情况,同步不下来这个块,但是对这个块是认可的,你收到这个块解析不了,但是通过程序是认可这个块。

提问:我问一个问题,刚才一个同学问到 EOS 上线的问题,我想问的是 EOS 的融资额是非常大的,我想问一下 Achain 和 EOS 比都是同属于区块链3.0,Achain 和 EOS 有什么不同?

强科臻:我们 Achain 是通过社区做开发的,整个团队都是比较年轻的,技术迭代非常快,技术实现上,EOS 是比特股的团队,整体还是比特谷的基础上开发,我们 Achain,包括 ABitchain 都是通过全新的技术模板开发的,我觉得不管是开发力量上来说,我们还是优于 EOS,只是他出现的比较早,成名的比较早,所以是值比较大,但是我们也一定会努力的。技术上 EOS 是在比特股的基础上开发,他们底层是用了东西,我们就不会用这些了,我们技术体系上通过打造立体网络,在立体网络上建造多链并发的形式去弥补单机的 TBS 不足的问题,后期我们可能会通过用集群自主的方式,也是基于 IPFS 的形式去解决这种节点数据过多的问题,我们走的是两种技术路线。

提问:我问一个问题,不太了解区块链,但是我听之前讲,也没有听明白区块链到底能用来干什么,按照我的理解,其实区块链也是一个数据库,我能这么理解吗,如果是中心化的话,我只要一个人有写的权限,所有人都有读的权限,这个和区块链有什么区别吗?

强科臻:这个理解非常好,首先区块链可以简单的用数据库实现,但是面临一些问题,区块链所说的分布式数据库不是这儿存一点,那儿存一点,而是某一个节点都存有所有的数据,你一个人往里面写,如果你挂了,整个链就停了,而且你写入没有经过共识,大家怎么信任你呢,要知道区块链出现解决的就是信任问题。

提问:为什么非得去中心化呢?

强科臻:整个社会的核心问题就是信任问题,区块链的出现就是解决信任问题,提供了通过机器承担信任的中介,解决第三方信用的问题,整个网络中你不需要信任任何人,只要把交易推出去就会成交。

提问:你刚才说到百万 TPS 通过哪些方式实现,现在所有的区块链 TPS 距百万都是差得非常远的。

强科臻:其实区块链是单机应用,通过各种性能优化,把单机应用的性能压缩到极致的时候,TPS 也过不了万,这是肯定的,只有进行横向扩展,通过多链并行方式解决这个问题。

提问:横向就有分叉的问题吗?

强科臻:任何时候都有可能存在分叉问题,因为网络是不稳定的,我们会通过立体网络和共识机制去解决这个问题,我们在共识机制选择上选择 DPOS 加BFT 的话,其实是不错的选择,这样可以最大程度的降低分叉的可能性,而且后期因为BFT是拜占庭的算法,但是其实把这个算法进行优化、升级,可以最大程度上降低分叉,有可能就是不分叉。

提问:刚才您说到到数据量太多之后有轻节点出现,数据量跑了几年之后,有了10T、100T 的时候,那之后所谓的去中心化又回到了中心化是吧?

强科臻:我觉得不会的,因为我说的这个集群自组的方式是一个奖励模式也是挖矿模式,大家组装在一起,每个地方存一块数据,大家会把整个数据集中起来,但是这样的集中不是一个,会有很多个,这样有一种奖励机制,你只要帮别人验证了,就能拿到奖励,这个奖励机制会促使大家做这件事情,未来就有人通过轻节点迅速达成交易,有些人就愿意提供这种验证方式,去服务大家,最后不会是只有一个节点存储很多数据。

提问:但是也可能只有几个核心节点,这时候也会出现篡改的情况。

强科臻:核心节点不会是一个,有可能是一个群体网络,去中心化是一个相对的,是最大程度的去中心化。





本文来自:51CTO博客

感谢作者:mob604756f0bbf4

查看原文:如何用Go开发一个区块链项目:ABTC


返回前面的内容

相关阅读 >>

Go语言proto使用入门

Golang怎么编写一个window定时关机

Go是强类型语言么

手撸Golang 基本数据结构与算法 归并排序

关于Golang之排序使用

Golang 开发的 web 有哪些框架?

Golang 各种类型相互转换

Go-carbon1.2.5版本发布,新增两个互转方法!

Go微服务入门到容器化实践,落地可观测的微服务电商项目

Golang基础-和mysql打交道

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...