cc c talk里面怎么样才能永久怎样在qq上禁言别人

作为公司代码委员会 golang 分会的理事我 review 了很多代码,看了很多别人的 review 评论发现不少同学 code review 与写出好代码的水平有待提高。在这里想分享一下我的一些理念和思路。

Code'知易荇难,知行合一难嘴里要讲出来总是轻松,把别人讲过的话记住组织一下语言,再讲出来很容易。绝知此事要躬行设计理念你可能道听途说了一些,以为自己掌握了但是你会做么?有能力去思考、改进自己当前的实践方式和实践中的代码细节么不客气地说,很哆人仅仅是知道并且认同了某个设计理念进而产生了一种虚假的安心感---自己的技术并不差。但是他根本没有去实践这些设计理念,甚臸根本实践不了这些设计理念从结果来说,他懂不懂这些道理/理念有什么差别?变成了自欺欺人

代码,是设计理念落地的地方是技术的呈现和根本。同学们可以在 review 过程中做到落地沟通不再是空对空的讨论,可以在实际问题中产生思考的碰撞互相学习,大家都掌握团队里积累出来最好的实践方式!当然如果 leader 没时间写代码,仅仅是 review 代码指出其他同学某些实践方式不好,要给出好的实践的意见即使没亲手写代码,也是对最佳实践要有很多思考

为什么同学们要在 review 中思考和总结最佳实践

我这里先给一个我自己的总结:所谓架构师,就是掌握大量设计理念和原则、落地到各种语言及附带工具链(生态)下的实践方法、垂直行业模型理解定制系统模型设计和工程实踐规范细则。进而控制 30+万行代码项目的开发便利性、可维护性、可测试性、运营质量

厉害的技术人,主要可以分为下面几个方向:

握佷多技巧以及发现技巧一系列思路,比如很多编程大赛比的就是这个。但是这个对工程,用处好像并不是很大

比如约翰*卡马克,怹创造出了现代计算机图形高效渲染的方法论不论如果没有他,后面会不会有人发明他就是第一个发明了。1999 年卡马克登上了美国时玳杂志评选出来的科技领域 50 大影响力人物榜单,并且名列第 10 位但是,类似的殿堂级位置没有几个,不够大家分没我们的事儿。

八十姩代李开复博士坚持采用隐含马尔可夫模型的框架成功地开发了世界上第一个大词汇量连续语音识别系统 Sphinx。我辈工程师好像擅长这个嘚很少。

这个是大家都可以做到按照上面架构师的定义。在这条路上走得好就能为任何公司组建技术团队,组织建设高质量的系统

從上面的讨论中,可以看出我们普通工程师的进化之路,就是不断打磨最佳实践方法论、落地细节

在讨论什么代码是好代码之前,我們先讨论什么是不好的计算机是人造的学科,我们自己制造了很多问题进而去思考解法。

看看仅仅看到末端,不去看完整个继承树嘚完整图景我根本无法知道我关心的某个细节在什么位置。进而我要往整个 http 服务体系里修改任何功能,都无法抛开对整体完整设计的悝解和熟悉还极容易没有知觉地破坏者整体的设计。

说到组合还有一个关系很紧密的词,叫插件化大家都用 vscode 用得很开心,它比 visual studio 成功茬哪里如果 vscode 通过添加一堆插件达到 visual studio 具备的能力,那么它将变成另一个和 visual studio 差不多的东西叫做 vs studio 吧。大家应该发现问题了我们很多时候其實并不需要 visual studio 的大多数功能,而且希望灵活定制化一些比较小众的能力用一些小众的插件。甚至我们希望选择不同实现的同类型插件。這就是组合的力量各种不同的组合,它简单却又满足了各种需求,灵活多变要实现一个插件,不需要事先掌握一个庞大的体系体現在代码上,也是一样的道理至少后端开发领域,组合比 OOP,'香'很多

原则 6 吝啬原则: 除非确无它法, 不要编写庞大的程序

可能有些同学会覺得,把程序写得庞大一些才好拿得出手去评 T11、T12leader 们一看评审方案就容易觉得:很大,很好很全面。但是我们真的需要写这么大的程序么?

我又要说了"那么古尔丹,代价是什么呢"。代价是代码越多越难维护,难调整C 语言之父 Ken Thompson 说"删除一行代码,给我带来的成就感偠比添加一行要大"我们对于代码,要吝啬能把系统做小,就不要做大腾讯不乏 200w+行的客户端,很大很牛。但是同学们自问,现在還调整得动架构么手 Q 的同学们,看看自己代码曾经叹息过么。能小做的事情就小做寻求通用化,通过 duck interface(甚至多进程用于隔离能力的哆线程)把模块、能力隔离开,时刻想着删减代码量才能保持代码的可维护性和面对未来的需求、架构,调整自身的活力客户端代码,UI 渲染模块可以复杂吊炸天非 UI 部分应该追求最简单,能力接口化可替换、重组合能力强。

落地到大家的代码review 时,就应该最关注核心 struct 定義构建起一个完备的模型,核心 interface明确抽象 model 对外部的依赖,明确抽象 model 对外提供的能力其他代码,就是要用最简单、平平无奇的代码实現模型内部细节

原则 7 透明性原则: 设计要可见,以便审查和调试

首先定义一下,什么是透明性和可显性

"如果没有阴暗的角落和隐藏的罙度,软件系统就是透明的透明性是一种被动的品质。如果实际上能预测到程序行为的全部或大部分情况并能建立简单的心理模型,這个程序就是透明的因为可以看透机器究竟在干什么。

如果软件系统所包含的功能是为了帮助人们对软件建立正确的'做什么、怎么做'的惢理模型而设计这个软件系统就是可显的。因此举例来说,对用户而言良好的文档有助于提高可显性;对程序员而言,良好的变量囷函数名有助于提高可显性可显性是一种主动品质。在软件中要达到这一点仅仅做到不晦涩是不够的,还必须要尽力做到有帮助"

我們要写好程序,减少 bug就要增强自己对代码的控制力。你始终做到理解自己调用的函数/复用的代码大概是怎么实现的。不然你可能就會在单线程状态机的 server 里调用有 IO 阻塞的函数,让自己的 server 吞吐量直接掉到底进而,为了保证大家能对自己代码能做到有控制力所有人写的函数,就必须具备很高的透明性而不是写一些看了一阵看不明白的函数/代码,结果被迫使用你代码的人直接放弃了对掌控力的追取,甚至放弃复用你的代码另起炉灶,走向了'制造重复代码'的深渊

透明性其实相对容易做到的,大家有意识地锻炼一两个月就能做得很恏。可显性就不容易了有一个现象是,你写的每一个函数都不超过 80 行每一行我都能看懂,但是你层层调用很多函数调用,组合起来怎么就实现了某个功能看两遍,还是看不懂第三遍可能才能大概看懂。大概看懂了但太复杂,很难在大脑里构建起你实现这个功能嘚整体流程结果就是,阅读者根本做不到对你的代码有好的掌控力

可显性的标准很简单,大家看一段代码懂不懂,一下就明白了泹是,如何做好可显性那就是要追求合理的函数分组,合理的函数上下级层次同一层次的代码才会出现在同一个函数里,追求通俗易慬的函数分组分层方式是通往可显性的道路。

当然复杂如 linux 操作系统,office 文档问题本身就很复杂,拆解、分层、组合得再合理都难建竝心理模型。这个时候就需要完备的文档了。完备的文档还需要出现在离代码最近的地方让人'知道这里复杂的逻辑有文档',而不是其實文档但是阅读者不知道。再看看上面 golang 标准库里的 http.Request感受到它在可显性上的努力了么?对就去学它。

原则 10 通俗原则: 接口设计避免标新竝异

设计程序过于标新立异的话可能会提升别人理解的难度。

一般我们这么定义一个'点',使用 x 表示横坐标用 y 表示纵坐标:

很好,你鼡词很精准一般人还驳斥不了你。但是多数人读你的 VerticalOrdinate 就是没有读 X 理解来得快,来得容易懂、方便你是在刻意制造协作成本。

上面的唎子常见但还不是最小立异原则最想说明的问题。想想一下一个程序里,你把用'+'这个符号表示数组添加元素而不是数学'加','result := 1+2' --> 'result = []int{1, 2}'而不是'result=3'那么,你这个标新立异对程序的破坏性,简直无法想象"最小立异原则的另一面是避免表象想死而实际却略有不同。这会极端危险洇为表象相似往往导致人们产生错误的假定。所以最好让不同事物有明显区别而不要看起来几乎一模一样。" -- Henry Spencer

你实现一个 db.Add()函数却做着 db.AddOrUpdate()的操作,有人使用了你的接口错误地把数据覆盖了。

原则 11 缄默原则: 如果一个程序没什么好说的就沉默

req.String())',非常害怕自己信息打印得不够害怕自己不知道程序执行成功了,总要最后'log("success")'但是,我问一下大家你们真的耐心看过别人写的代码打的一堆日志么?不是自己需要哪个就在一堆日志里,再打印一个日志出来一个带有特殊标记的日志'log("this_is_my_log_" + xxxxx)'结果,第一个作者打印的日志在代码交接给其他人或者在跟别人协莋的时候,这个日志根本没有价值反而提升了大家看日志的难度。

一个服务一跑起来就疯狂打日志,请求处理正常也打一堆日志滚滾而来的日志,把错误日志淹没在里面错误日志失去了效果,简单地 tail 查看日志眼花缭乱,看不出任何问题这不就成了'为了捕获问题'洏让自己'根本无法捕获问题'了么?

沉默是金除了简单的 stat log,如果你的程序'发声'了那么它抛出的信息就一定要有效!打印一个 log('process fail')也是毫无价徝,到底什么 fail 了是哪个用户带着什么参数在哪个环节怎么 fail 了?如果发声就要把必要信息给全。不然就是不发声表示自己好好地 work 着呢。不发声就是最好的消息现在我的 work 一切正常!

"设计良好的程序将用户的注意力视为有限的宝贵资源,只有在必要时才要求使用"程序员洎己的主力,也是宝贵的资源!只有有必要的时候日志才跑来提醒程序员'我有问题,来看看'而且,必须要给到足够的信息让一把讲奣白现在发生了什么。而不是程序员还需要很多辅助手段来搞明白到底发生了什么

每当我发布程序 ,我抽查一个机器看它的日志。发現只有每分钟外部接入、内部 rpc 的个数/延时分布日志的时候我就心情很愉悦。我知道这一分钟,它的成功率又是 100%没任何问题!

原则 12 补救原则: 出现异常时,马上退出并给出足够错误信息

其实这个问题很简单如果出现异常,异常并不会因为我们尝试掩盖它它就不存在了。所以程序错误和逻辑错误要严格区分对待。这是一个态度问题

'异常是互联网服务器的常态'。逻辑错误通过 metrics 统计我们做好告警分析。对于程序错误 我们就必须要严格做到在问题最早出现的位置就把必要的信息搜集起来,高调地告知开发和维护者'我出现异常了请立即修复我!'。可以是直接就没有被捕获的 panic 了也可以在一个最上层的位置统一做好 recover 机制,但是在 recover 的时候一定要能获得准确异常位置的准确异瑺信息不能有中间 catch 机制,catch 之后丢失很多信息再往上传递

很多 Java 开发的同学,不区分程序错误和逻辑错误要么都很宽容,要么都很严格对代码的可维护性是毁灭性的破坏。"我的程序没有程序错误如果有,我当时就解决了"只有这样,才能保持程序代码质量的相对稳定在火苗出现时扑灭火灾是最好的扑灭火灾的方式。当然更有效的方式是全面自动化测试的预防:)

前面提了好多思考方向的问题。大嘚原则问题和方向我这里,再来给大家简单列举几个细节执行点吧毕竟,大家要上手是从执行开始,然后才是总结思考能把我的思考方式抄过去。下面是针对 golang 语言的其他语言略有不同。以及我一时也想不全我所执行的 所有细则,这就是我强调'原则'的重要性原則是可枚举的。

  • 对于代码格式规范100%严格执行,严重容不得一点沙

  • 文件绝不能超过 800 行,超过一定要思考怎么拆文件。工程思维就在於拆文件的时候积累。

  • 函数对决不能超过 80 行超过,一定要思考怎么拆函数思考函数分组,层次工程思维,就在于拆文件的时候积累

  • 代码嵌套层次不能超过 4 层,超过了就得改多想想能不能 early return。工程思维就在于拆文件的时候积累。

下面这个就是 early return把两端代码从逻辑上解耦了。

  • 从目录、package、文件、struct、function 一层层下来 信息一定不能出现冗余。比如 file.FileProperty 这种定义只有每个'定语'只出现在一个位置,才为'做好逻辑、定義分组/分层'提供了可能性

  • 多用多级目录来组织代码所承载的信息,即使某一些中间目录只有一个子目录

  • 随着代码的扩展,老的代码违反了一些设计原则应该立即原地局部重构,维持住代码质量不滑坡比如:拆文件;拆函数;用 Session 来保存一个复杂的流程型函数的所有信息;重新调整目录结构。

  • 基于上一点考虑我们应该尽量让项目的代码有一定的组织、层次关系。我个人的当前实践是除了特别通用的代码都放在一个 git 里。特别通用、修改少的代码逐渐独立出 git,作为子 git 连接到当前项目 git让 goland 的 Refactor 特性、各种 Refactor 工具能帮助我们快速、安全局部重构。

  • 自己的项目代码应该有一个内生的层级和逻辑关系。flat 平铺展开是非常不利于代码复用的怎么复用、怎么组织复用,肯定会变成'人生難题'T4-T7 的同学根本无力解决这种难题。

  • 如果被 review 的代码虽然简短但是你看了一眼却发现不咋懂,那就一定有问题自己看不出来,就找高級别的同学交流这是你和别 review 代码的同学成长的时刻。

  • 日志要少打要打日志就要把关键索引信息带上。必要的日志必须打

  • 有疑问就立即问,不要怕问错让代码作者给出解释。不要怕问出极低问题

  • 不要说'建议',提问题就是刚,你 pk 不过我就得改!

  • 请积极使用 trpc。总是偠和老板站在一起!只有和老板达成的对于代码质量建设的共识才能在团队里更好地做好代码质量建设。

  • 消灭重复!消灭重复!消灭重複!

最后我来为'主干开发'多说一句话。道理很简单只有每次被 review 代码不到 500 行,reviewer 才能快速地看完而且几乎不会看漏。超过 500 行reviewer 就不能仔細看,只能大概浏览了而且,让你调整 500 行代码内的逻辑比调整 3000 行甚至更多的代码容易很多,降低不仅仅是 6 倍而是一到两个数量级。囿问题在刚出现的时候就调整了,不会给被 revew 的人带来大的修改负担

《unix 编程艺术》

建议大家把这本书找出来读一读。特别是T7 及更高级別的同学。你们已经积累了大量的代码实践亟需对'工程性'做思考总结。很多工程方法论都过时了这本书的内容,是例外中的例外它所表达出的内容没有因为软件技术的不断更替而过时。

佛教禅宗讲'不立文字'(不立文字教外别传,直指人心见性成佛),很多道理和感悟昰不能用文字传达的文字的表达能力,不能表达大家常常因为"自己听说过、知道某个道理"而产生一种安心感,认为"我懂了这个道理"泹是自己却不能在实践中做到。知易行难知道却做不到,在工程实践里就和'不懂这个道理'没有任何区别了。

曾经我面试过一个别的公司的总监,讲得好像一套一套代码拉出来遛一遛,根本就没做到仅仅会道听途说。他在工程实践上的探索前路可以说已经基本断绝叻我只能祝君能做好向上管理,走自己的纯管理道路吧请不要再说自己对技术有追求,是个技术人了!

所以大家不仅仅是看看我这篇文章,而是在实践中去不断践行和积累自己的'教外别传'吧

也是一本必读好书,可惜没找到中文翻译

}

原标题:轻社区科普:比特币是什么《比特币基础科普与常见误解》

《比特币基础科普与常见误解》

比特币是一种全新的东西。比特币和互联网一样都有着全新的底層技术,运行原理和上层应用历史上从未有过类似的东西。给普通民众讲清楚比特币是什么就像给80年代的民众讲清楚互联网是什么一樣困难。

这也导致了绝大部分普通民众都很难搞清楚比特币是什么并产生各种各样的误解,这和互联网早期遇到的问题一模一样如果告诉80年代的民众能通过网络买衣服,他们会怎么反应

连试都没法试,怎么可能通过这种方式买衣服这绝对扯淡!
有图片也不行啊,上街买衣服不都得试穿试穿
不知道穿了合不合身,好不好看就买你这是疯了吧!

你要向他们介绍Google,他们会怎么反应

一家帮你搜索信息嘚公司值5000亿美元?查个信息能收那么多钱
什么?查信息是免费的你用的所有服务都是免费的?
那公司怎么赚钱还市值5000亿美元?你这昰疯了吧!

你要告诉普通民众一种程序员人为造出来的数字货币,一个币能值1200美元超过一盎司黄金,总市值超过一百亿美元他们会怎么反应?

比特币就是个骗局任何一个程序员都可以再造出更多的比笨币,比傻币比蠢币,
这种凭空造出来完全没有实体的虚拟币怎么可能有价值?
没有政府背书担保怎么可能有信用当货币?你这是疯了吧!

听起来是不是都很有道理逻辑上无懈可击?

对于想了解仳特币的人来说比特币又相当晦涩难懂。最早的比特币用户大都是极客与黑客高手这导致绝大部分“比特币科普教程”实际上充斥着夶量的技术术语和底层原理介绍,并不适合没有技术背景的人阅读

通常而言,一个没有技术背景的人自学的话往往需要花一两个月的時间才能大致搞清楚比特币的技术基础、运行原理、过往历史和生态系统(想想一个80年代的人要花多久才能大致搞清楚互联网)。本文的目的就是将这一两个月缩短到一两周,并力争在阅读本文的一两小时内形成对比特币的基本认识框架

② 买家发送比特币到Coinbase指定的比特幣地址(一般把比特币账号称为比特币地址,下同)

也就是说,仅仅比特币一个小的分支应用中的两个博彩网站就消耗了6万多比特币,占当时比特币1200万流通量的200份之1

这群由数学黑客、公民自由主义者、自由市场的鼓吹者、天才程序员、改旗易帜的密码学家以及各种奇怪人士组成的松散联盟被称为“密码朋克”,他们主张保护个人隐私和权利不被政府和大公司侵犯他们曾经创造了PGP加密算法、Skype、BT下载、維基解密,并无私的分享给公众现在,他们又创造了比特币

……吴老板也亏了,说花了几十万买了3000多个币如今一个币却跌到2美元,非常后悔
……挖矿挖了一年多,一共挖到7000多个币去除吃喝交电费、暴仓、被盗,总共攒下2700多个币2012年底减半后币价没有立即上涨,有些失望2013年1月初,币价刚刚从11美元涨到13美元然后横盘神鱼在QQ上问我怎么看,我回答我看就这样了,涨不上去了又过了几周, 比特币突破17美元2700多个币终于值回了最初投入的30万人民币,回本了于是我就把这些币全部卖掉,只留了100多个币算下来还赚了一万多块钱。
其實本来是想做个波段的但是在跌到15美元时没能买回来……

除了中本聪外,没有人是先知为了让大家更能理解当时的情况,我把当时的K線贴出来:

之后端宏斌更是非常精确地在狗币历史最高位(1分5)发博文推荐狗币:

1月22日《“狗币效应”引爆低价山寨币》

然而皮之不存毛将焉附?山寨币因比特币的暴涨而兴起山寨币的价值依附于比特币。在比特币不断下跌的熊市中山寨币自然不可能幸免。之后狗币┅路狂泻跌掉96%不知老端在比特币上赚的十倍,在山寨币上最后赔进去多少

按新民网《中国玩家端宏斌:玩比特币就像坐过山车》的采访:

自那以后,老端连同他的基金,一起退出了比特币的江湖现在,他和比特币的交集仅限于手头留作纪念的几个币。

从“先行者”咾端的故事里我们可以学习到两点经验和一点教训,

经验1:长期小额定投摊低成本

经验2:买币后提币躲过#bitcoin-dev上进行(web界面, 历史记录)。

摩尔萣律指出了计算机性能的高速、指数化发展即使只考虑光纤这种通讯方式,其潜力也极其巨大光纤的通频带很宽,理论可达30亿兆赫兹我们现在只用了九牛一毛。目前的技术条件下设备终端能够提供多高的速率,光纤就能传输多高的速率即使不考虑未来技术,现在實验室中单条光纤最大速度也达到了43T(43000G)(腾讯《43Tbps网速新纪录诞生》)处理70亿人的交易只是九牛一毛。

人类人口是不可能以指数速度发展的未来全球人口能达到700亿?7000亿还是每人每天需要产生100笔?1000笔交易因此不可能出现比特币网络无法承载全球交易的情况,现在一台個人电脑就足以轻松存储全球人口的身份信息未来一台个人电脑轻松处理全球交易,也不是多么遥远

7.2.7、比特币交易需等待6确认(约60分鍾),无法用于日常交易

日常消费0确认(存在主要矿池的内存池)即可

7.2.8、比特币现在手续费便宜是因为有区块奖励,将来区块奖励挖完後手续费特别贵

7.2.9、比特币不断丢失减少最终无法使用

私钥是比特币地址的唯一控制方式,一旦丢失私钥也就相当于丢失了地址里的比特币(注:这些比特币还在地址里,但再也没有人可以使用就像深海沉船里的金币一样)。

早期用户往往成百上千地丢币其中最倒霉嘚莫过于James Howells,不小心丢掉存有7500比特币的硬盘在当时约价值5000万人民币(新闻《别扔硬盘,里面可能有 7500 个比特币》)即使是专业人员也不能圉免,2011年7月当时世界第三大比特币交易所Bitomat在服务器重启后误删除了虚拟机然后丢失了包含有17000比特币的wallet.dat(存放私钥的文件)及其备份,当嘫也有人怀疑Bitomat根本就没有丢币

目前超过3年没有任何支出的比特币地址,总余额高达323万比特币(Blockmeta统计—沉睡地址)可能大部分都是丢失幣。虽然随着比特币价格的上升和用户备份意识的提高丢币会越来越少,但终究不可避免比特币可用总币数将缓慢地下降。

不过这并鈈会影响比特币的使用比特币目前最小单位为亿分之一比特币,总货币单位2100万亿聪但比特币是数字货币,可以无穷尽地往下细分因此即使丢失到只剩下1个比特币,只要调整比特币的最小单位也不会出现不够用的情况。实际上丢失比特币的唯一后果是——使得剩下嘚比特币更加值钱了,正好是法币通货膨胀的逆过程:)

7.2.10、比特币设计时为何不把算力用来做有用的科学计算?而是要白白浪费那么多資源做无意义的哈希运算

7.2.11、比特币网络会被51%算力攻击,政府只要控制超过一半的矿场或矿池就能破坏比特币网络。

51%攻击的原理见《51%攻擊解析 | 巴比特》简单地说51%攻击的最大的用处是双花比特币。攻击者买东西付了比特币然后用51%以上算力挖出另一个分叉,新分叉中没有剛才的交易那么就能取消刚才的付款,把已付款的比特币拿回来了

听起来似乎很厉害?一知半解的小白往往会神话51%攻击的威力认为51%攻击是对比特币的致命威胁。然而51%攻击是一种攻击范围、攻击条件、攻击对象都极其有限仅存在于理论上,完全可以完美防御的攻击茬攻击者和卖家都不犯错误的前提下,攻击者必败

a、51%攻击必须针对大金额的付款

没有任何攻击者会消耗大量算力成本,去51%攻击一杯咖啡嘚付款即使是只求破坏的恶意攻击者,为了造成影响也必须攻击大金额付款。想像一下51%攻击者宣布:动用超过2/3算力,成功51%攻击了一杯咖啡的付款

b、51%攻击必须在短时间内发起

哪怕有绝对优势的算力(比如总算力的2/3),攻击者也不能在付款后太长时间才发起51%攻击否则鈈管是分叉追赶主链的极长耗时,还是攻击矿池的长时间不出块都将导致社区和卖家的警觉和攻击的失败。

另外一旦发生被证实的大金額51%攻击后开发者也很有可能采取一些安全措施,来限制长跨度时间51%攻击例如修改比特币客户端为不接受太长时间以前的分叉(比如不接受任何12小时之前的分叉)。攻击者一旦超过12小时才放出分叉对不起,我们不认这个分叉哪怕这分叉比主链高度还高,你就自己继续挖着玩吧

注:目前比特币客户端没有此限制,允许接受任意时间之前的分叉原因是拒绝一段时间之前的分叉存在微小的风险:当全球互联网出现严重且长时间的中断时,不同地区有可能产生无法合并的不同分叉既然51%攻击只是理论上、从未出现的危险,那现在就没必要莋此限制但是一旦首次发生了大金额51%攻击,特别是矿工恶意持续发起51%攻击开发者两害相权取其轻,就有足够的理由加入这一限制

c、51%攻击必须针对无法撤回的发货

例如攻击者51%了一次购房付款,那售房者肯定会因为攻击者的付款欺诈把房子追回。在几个小时之内既是大金额又无法撤回,又接受比特币的发货实在太少太少甚至少到可以认为只有一种——针对交易所的51%攻击,充值比特币到交易所卖出提现法币或直接把比特币提出来,然后51%攻击拿回充值的比特币

不过交易所只要不犯错误,是完全可以完美防御攻击的:

① 大额充值比特幣后法币提现:

延长处理时间(大额法币本身处理耗时也长)过了12小时的分叉时间限制就安全了。

② 大额充值比特币后比特币提现:

延長处理时间用户体验不好不过有个巧妙的防御方法:将充值的币作为提现币的来源,这样一旦攻击者取消了充值交易后续依赖的提现茭易自然也就失效了。在线博彩中本聪骰子使用了此技巧因此可以接受0确认的投注。

因此比特币的51%攻击是一种攻击范围、攻击条件、攻擊对象都极其有限完全可以完美防御,仅存在于理论上的攻击

即使是在绝大部分算力都被恶意攻击者控制(比如政府控制矿场矿池,歭续不断地攻击比特币网络)比特币开发者也可以通过更换挖矿算法,甚至从POW挖矿更换为POS挖矿的方法让攻击者价值几十亿元的矿机变荿废铁。

7.2.12、比特币在实际运行中不可避免地走向中心化(数据量大)

这对于过去来说是不可想象的方式如此浪费计算力和带宽

7.2.13、区块链將发展,比特币将被淘汰

7.3、确实存在的缺陷

7.3.2、波动性无法履行价值尺度功能

【法币不能保证今天五块钱的面,明天还是不是五块你说嘚这个情况在战乱下的确有。单和平年代相对稳定。 然后我们看比特币呢今天早上也许我手里的比特币买不起一碗面,但是到了晚上峩就能买四五碗这样的波动性,作为货币我吃不消啊】

法币和平年代虽然相对稳定,但也相对稳定贬值

短期确实法币比 黄金/比特币穩定,但法币长期趋势上一直对 黄金/比特币 贬值那么是不是就会有一些人,在长期持有货币时选择黄金/比特币

比特币的波动性很明显逐年下降,现在已经不可能再出现一碗变四五碗的情况了

等到比特币波动性下降到黄金水准(小于日0.3%),那作为日常货币使用并不会囿什么问题。

你会在乎一碗面是5元还是5.015元吗

有人认为一旦比特币用于清算结算的量变大,远超用于投机的量其价格也就趋于稳定

Coinbase(也僦是 Olaf 所在的公司)最近上线了 「借记卡转换」(Shift debit card) 功能,任何可以刷卡的商户都可以用比特币支付原理就是从你的 Coinbase 账户中扣除比特币。泹是商户是见不到比特币的因为系统已经将比特币转换成美元支付给商家。

7.3.4.1、中本聪对挖矿的本意设计

目前这种谁的矿机多算力高谁僦能抢到打包权的挖矿方式称为POW挖矿(Proof of work,工作量证明)中本聪在白皮书第4章中对挖矿曾作出如下表述:

工作量证明(POW)机制还解决了在集体投票表决时,谁是大多数的问题如果决定大多数的方式是基于IP地址的,一IP地址一票那么 如果有人拥有分配大量IP地址的权力,则该機制就被破坏了而工作量证明机制的本质则是一CPU一票(one-CPU-one-vote)。

但中本聪并未预料到ASIC矿机和大规模矿场的出现在目前的POW挖矿中,拥有大量礦机的人就像拥有大量IP地址的人一样不仅破坏了中本聪挖矿(投票)机制的本意,更有可能危及比特币系统

在目前的挖矿方式下,比特币网络的使用人(比特币用户)和维护人(矿工)是两个不同的群体不同的群体必然存在不同的利益,不同的利益将导致难以调和的沖突

① 矿工和比特币用户的利益冲突

在是否提高区块上限1MB(以此提高比特币处理交易的数量)的争议中,矿工和比特币用户就出现了明顯的分歧用户和部分比特币核心开发者倾向BIP101方案(Bitcoin Improvement Proposal,比特币改进提议)(先提升到8MB之后每两年上限加倍,直至每块达到8GB 上限)希望赽速提高比特币区块大小。

但大区块将增加矿池的网络和服务器成本并导致孤立块率上升,给矿池带来损失因此矿池则倾向于放慢提高区块大小的速度,并最终通过算力投票选择了BIP100方案(先提升到8MB之后矿工可通过算力投票改变,但不超过32MB)

更让用户头疼的是,除非絕大部分用户一致同意改变目前的挖矿方式(抛弃掉目前的矿工)否则负责维护区块链的矿工拥有是否将全网升级到某个新版本的决定權,如果矿工强硬拒绝即使用户再希望使用新版本,也无可奈何

② 矿工对比特币网络的攻击

目前比特币市值约220亿元,全网435P算力的矿机價值约9亿(简单假设所有矿机都是1.15T/2400元的蚂蚁S5)也就是说目前使用4.5亿元的矿机即可对市值220亿元的比特币网络发起51%攻击。如果通过租用矿机/算力通过矿池免手续费控制算力等方式,51%攻击的成本还会更低除了51%攻击外,矿工还可能通过拒绝服务(不打包任何交易)+分叉攻击(┅旦有正常的打包交易区块就将其分叉)的方法,让比特币的任何交易都无法确认

更麻烦的是,未来随着比特币初始区块奖励的不断減半矿机总值占比特币市值的比例必将越来越少,目前比例为4%再经历五次减半后比例可能只剩千分之一,也就是说攻击者完全可以先莋空比特币然后用比特币市值万分之五的矿机攻击比特币网络,造成市场恐慌和比特币价格下降后从中获利这是不同群体不同的利益必然导致的难以调和的冲突。

POW挖矿的另一个问题是消耗了巨量的电力等资源一直被环保人士所指责。虽说金矿挖矿也消耗了巨量的资源但比特币作为全新的互联网货币,为什么要和挖金矿这种几千年前的古老行业比谁差呢

矿工所消耗的矿机和电力资源并不是凭空变出,而是由全体比特币用户买单比特币挖矿作为一个类似黄金挖矿的工业生产行业,长期利润必将趋近社会平均利润因此矿工必须将挖箌的绝大部分比特币在交易市场上卖出,以支付购买矿机和电费成本这对比特币市场资金造成了严重的吸血效应

具体来说目前每天產生的新币是25币/区块*6区块/小时*24小时=3600个*1500元/个=540万元,也就是矿工将从比特币市场资金每天抽血540万元每月1.62亿元,每年19.44亿元矿工还会在币价较高时借币提前卖出未来的电费,这虽然有益于平抑市场的过度泡沫但同时也对比特币用户和币价上涨造成了沉重的负担。

竞争币点点币(Peercoin)对POW挖矿加以改造创造了POS挖矿(Proof of Stake,权益证明)的方式规则是以币挖矿,谁的币多谁就能抢到打包权。用币挖矿的效果有点类似于存币获得利息(挖矿收入)

在POS挖矿中,初始币多者恒多这将导致非常严重的公平性问题,因此不适合做初始币分发但POS挖矿非常适合莋初始币挖完后的区块链维护。在初始币已经挖完币已经非常分散的前提下,POS挖矿获取的极少量手续费远远少于正常经济活动带来的幣流动,并不会导致币多者恒多此时POS相对于POW挖矿的优势是:

① 统一了比特币网络的维护者和使用者。

② 无人能控制51%以上的比特币即使控制并发起了攻击,受损最大的也是他自己这使得51%攻击几乎不可能出现。

③ 维护比特币区块链的成本低到几乎可以忽略不计用户在使鼡比特币客户端时,就顺便进行了POS挖矿维护了区块链。

目前新发行的山寨币几乎都使用了POW分发初始币POS维护后期区块链的挖矿模式。POW使嘚初始币分发公平用户愿意参与;POS避免后期用户资金被无穷无尽的矿工砸盘吸光。经过数千山寨币实验后市场的自发选择证明了POW转POS的鈳行性和必然性。

比特币在初始币挖完(或基本挖完)用户和矿工的利益冲突日益严重时,也有可能转为POS挖矿转换何时发生,取决于鼡户和矿工利益冲突的尖锐程度矿机总价值一旦降低到比特币总市值的万分之一以下,矿工对比特币网络的攻击几乎不可避免

为维护仳特币网络的安全,即使无外人攻击比特币网络比特币的支持者也有可能抢先对比特币网络发起攻击,以消除这一安全隐患不要觉得這是天方夜谭,在是否提高区块上限1MB的争议中Coinwallet等公司或个人就曾花费数百比特币的手续费,发起了巨量的垃圾交易阻塞比特币网络以此证明提高1MB上限的迫在眉睫。在社区的压力测试中转为POS总比在外部攻击,市值暴跌血雨腥风中转为POS好。

以下的每一个字都是无数前人嘚血泪所成请务必谨记在心。

① 比特币是一种存在巨大的遐想空间争议极大,价格波动也极大的特殊商品

② 比特币很有可能由于各種缺陷,无法达到一定规模进入正循环最后像世界语一样半死不活

③ 不建议普通人投资比特币目前比特币风险级别属于风险投资,鈈属于普通人投资领域如果一定要看好要投资,请确保充分了解比特币使用闲钱投资,并做好损失95%本金的心理准备

策略上建议做長期小额定投,小额定投时币价高买入的币数就自动变少币价低买入的币数就自动变多,这被历史证明是风险最小的策略即使运气差箌在三次泡沫顶峰才开始小额定投,但由于牛短熊长短期少量的高价币成本很快被后续长期便宜币摊平,因此都不会被套太久进一步嘚数据论证,建议读读这篇文章《比特币定投的可行性检验》

如果有稳定的资产收益(比如信托基金利息、房屋房租、股权分红),那鼡收益定期买入是最理想的策略——这种投资的心理负担最小就算遇到像32美元到2美元的归零暴跌,也拿得住按历史战绩看,“利息” 買入的比特币价值已经远远超过了“本金”。

⑤ 时间上建议做至少数年的长线投资短线玩波段甚至玩杠杆期货的“高手”绝大部分死嘚很惨。特别强调一点:看好比特币的死忠一定不要玩杠杆期货。投机中务必做到无情无义对投机标的好感会严重影响对交易趋势的判断,最后在某次暴跌中彻底爆仓几乎是必然事件死忠适合做现货抄底,即使是32美元到2美元的深跌由于对比特币了解深刻,也不会被輕易洗出

① 购买比特币后一定要提现到自己的钱包绝对不要在交易所长时间存币合规的比特币交易所应像券商的资金第三方存管一樣,托管所有的法币和比特币只负责撮合交易。现在的比特币交易所还在野蛮生长期交易所同时掌控法币和比特币,存在极大的跑路囷被盗倒闭风险

绝对不要认为某交易所“足够大”就不会倒闭。Mt.Gox交易所在倒闭前是全球最大的交易所曾经占全球80%交易量,2014年宣布黑愙“盗币”而倒闭随之失踪的是85万比特币,最后日本警方的调查结果是CEO内部交易亏损和监守自盗

③ 不建议新手使用电脑版钱包,以免被黑客盗币建议使用淘汰的安卓手机,只装一个手机版比特币钱包专门用来存币(建议到 https://bitcoin.org/zh_CN/choose-your-wallet 下载手机版Bitcoin Wallet)

手机是远比电脑安全的:专门存币的手机可以平时一直关机,发币时才开机;不会像电脑因日常使用装软件、访问网站、收发邮件而中毒;手机本身的漏洞和攻击者都遠少于电脑另外手机和电脑都可能损坏或丢失,所以务必导出地址私钥使用WinRAR等压缩软件用长密码打包加密,在多处邮箱或网盘备份

}

我要回帖

更多关于 怎样在qq上禁言别人 的文章

更多推荐

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

点击添加站长微信