风险提示:理性看待区块链,提高风险意识!

区块链协议函数式编程的优点

2个回答

杰克17星评价

2020-04-29 13:44:12

区块链协议函数式编程的优点

函数式编程能够支持更高效的区块链基础设施,谁在使用它,为什么?

说区块链技术很吸引人,这是一种轻描淡写的说法。数以百计的区块链项目已经被部署,还有数百个项目将在未来几个月推出。随着公司开发更先进的区块链基础设施和应用程序,围绕区块链技术展开的未来将变得更加确定。

在区块链平台开发中使用的一些最著名的编程语言是面向对象的语言。到目前为止,像C++、Python和Ruby这样的语言已经主导了区块链的发展场景。

如果最近的发展有什么可说的,那么非函数式编程语言莫属了。他们提供区块链技术的独特功能,帮助展示其重要的比较优势。

那么,目前正在使用哪些函数式编程语言来开发开放区块链协议呢?这里有几个例子。

函数式编程语言

·OCaml

OCaml是一种函数式编程语言,它经受住了时间的考验。它有一个静态类型系统,它有助于消除运行时错误。与用cor Java编写的程序相比,用OCaml编写的程序通常会更快地启动和运行,并且消耗更少的内存。

OCaml的其他特性还包括一流的词法闭包、参数多态性、异常处理、尾递归和模式匹配,以及支持链接到C原语的外部函数接口。还有用于自动内存管理的垃圾收集器特性。

·Haskell

Haskell是一种基于lambda演算的纯函数编程语言。它具有用户友好的语法、广泛的物理库集合和用于支持教育的奇妙资源。这些对于开发人员的参考资料起着重要的作用。

Haskell还具有顶级的工具、声明式的风格和静态的强类型。在构建高性能应用程序时,这些特性使Haskell成为一个很好的选择。

·Erlang

Erlang是一种函数式编程语言,用于构建在计算机网络上分布的强大的程序系统。它已经在电信行业使用了30多年,目前90%的互联网流量都是通过erlang-受控节点进行的。作为一种函数式语言,它更侧重于对表达式的评估。表达式使用函数来获取基本值。

Erlang在任何其他编程语言之前就开始支持多线程。它提供垃圾收集,使用虚拟机,并具有模式匹配,这允许进行紧凑和清晰的程序。Erlang为其他编程语言(如C、C++和Rust)提供了接口。

Erlang被认为是一种高级语言,特别是在开发需要的后端系统时。

·大量的并发活动

·实时响应

·不间断操作和容错

现在您已经了解了函数式编程语言的一两个例子,让我们来看看是什么使它们特别适合于区块链。

函数式编程语言的优点

·不变性

一般来说,函数式编程语言没有可变的变量;一旦你设置了一个值,它就不能被改变。这使得代码行为更容易预测,并减少了系统错误的数量,提高了系统的稳定性。

·容错

容错是系统继续运行的地方,即使发生了故障。一些函数式编程语言,比如Erlang,默认特性是容错。

·易于并行化,高度分布

函数式编程语言使您能够创建高度并行且高度分布的系统。内置的迭代功能,如map和reduce,在区块链开发中很有用。

虽然有更多的优势让我们深入研究更有趣的东西。但您听说过任何包含函数式编程的区块链吗?继续阅读…

使用函数式编程的区块链协议

·Tezos

Tezos是一个区块链项目,旨在提供世界上第一个”自我修正的加密货币”。它是一个自治的、分散的区块链平台,它使用区块链治理来帮助它随着时间的推移升级它的协议。在另一种授权的(DPoS)方法中,即与所谓的流动性证明”方法达成了共识。

Tezos是在OCaml中实现的,它是一种函数式编程语言,提供高速度、明确的语法和语义,以及一个使Tezos成为证明正确性的良好候选的生态系统。正式验证是开发人员能够在数学上证明他们的智能合约代码的准确性的时候。

·Cardano(卡尔达诺)

Cardano是一个分散的、基于区块链的开源平台,它使用的是一种叫做Ouroboros的数学计算方法。Ouroboros可以通过由持票人投票产生共识。

Cardano区块链是用Haskell编写的,它使用的是一种纯函数式编程语言,使用强大的静态类型和正式的规范,来定义它的智能合约。Plutus的语法相当类似于Haskell,但与Haskell不同的是,该语言受到了热切的评价。

·æternity

æternity”是一个基于区块链的平台,它拥有智能合约和分散的应用程序。和Tezos和Cardano一样,æternity”是用Erlang编写的。

Sophia是ML家族的一种编程语言。它没有一个任意的可变状态,但是对于每个契约实例,有一个有限的状态形式。它是一种健壮的语言,能够指定并自动证明智能合约的属性,因此它非常适合于高价值、系统关键的智能合约。

除了Erlang之外,核心协议中还包含了许多其他的技术特性,这些特性使其脱颖而出:

·状态通道——该技术用于显著提高事务的可伸缩性和智能合约,方法是将它们从较慢的主链(非链)转移到其他地方。除了可伸缩性之外,对状态通道的额外好处是增加了隐私,因为参与通道的各方之间的所有事务或合同都是私有的。此外,由于用户之间的所有交互都是私有的,所以可以并行执行智能合同和事务。

·Bitcoin-NG——为了提高移动分散应用程序的可用性,还必须增加主链的事务速度。这是通过实现Bitcoin-NG实现的,这是一种下一代的共识协议,它支持更高的交易速度,同时保持系统的分散。

·命名系统——一个集成的命名系统也是一种统一的一部分。任何地址、智能合约或oracle都可以有一个人类可读的名字,而不是一串数字和字母,就像大多数其他区块链平台一样。这改善了用户友好性,并帮助了智能合约开发者。

·Integrated Oracles——任何一个AE用户都可以成为或使用一个oracle,在这个区块链上有一种特殊的交易。Oracles报告了真实世界的事件,为智能合约提供了触发器。这提高了智能合约的效用,并实现了它们的全部破坏性潜力。

·在链上的治理——实现了一种股权的变更,允许AE用户正式地表达他们对任何主题的意见。任何AE用户都可以用他们的AE余额签署一个交易来提出问题或回答问题。æternity治理体系类似于在区块链中实现的一种流动性民主形式。投票结果向开发人员表明,社区对各种主题的看法是什么,包括基本的系统变量,如块大小、块奖励或块时间。投票结果不具约束力,但形式上具有象征性意义。

·工作证明的挖掘——与许多新的区块链平台不同,它采用了有争议的治理机制,并建立了有争议的共识构建机制,而这种机制依赖于经过验证的工作量证明方法。

如果您对terof背后的团队感到好奇——你会知道这个项目得到了Erlang和区块链社区中一些最有经验的开发人员的支持。Robert Virding,Erlang的联合创建者,是开源的Erlang社区中最多产、最著名的成员之一,Sascha Hanse,世界级的区块链开发者,都是这个团队的一部分。在这场运动的最前线是创始人Yanislav Malahov,,他被称为以太坊的教父,因为他一开始就参与了这个项目。

结论

函数式编程语言正在进入区块链领域。它们的特性可以使它们特别适合于分布式账本协议和智能合约的开发。在区块链空间中,一些技术最先进的项目转向了可伸缩性、稳定性和容错能力的函数式编程。那些关注区块链技术的开发人员应该考虑探索函数式编程。很有可能的是,它是最实用智能合约平台的基础。


卡布奇诺4星评价

2020-04-29 13:44:58

区块链是对软件正确性要求极高的领域。过去软件bug和安全漏洞带来的损失,一般就是停机维护,被拖个库就已经是很重大的影响了。而区块链软件的漏洞被利用,那将是灾难性的,因为上面跑的都是真金白银。随着区块链技术对传统经济领域渗透的加深,这种风险将会大大提升。

传统软件工程只重视产品的快速上线快速迭代,从来没有把软件的正确性摆在一个优先级很高的位置,究其根本还是传统领域软件出bug带来的成本不高。

行业里其实已经有一些关键领域是对软件的正确性要求极高的,比如航天系统,金融领域一些核心系统等。1962年软件bug造成火箭偏航,损失1850万美元;1978年CAD软件bug造成体育竞技场倒塌,损失上亿美元;1985年放射机软件bug导致病人受到大量辐射,1987年金融交易软件bug导致美国股灾,等等。

这些问题促使人们去思考如何保证软件正确性,而这些年来业界针对这种对软件正确性要求高的领域,也确实发展了一套技术手段来支持,形式验证、类型系统、纯函数式编程等。这些方法对程序员要求更高,开发时间也更长,所以在大部分编程领域,这种方法显得不是那么经济,换句话说大部分程序员其实并不了解这个领域的技术。而现在传统程序员开始进入区块链软件的开发,如果不能在思维、流程、工具各方面作出相应调整的话,是很危险的事情。

但是真正的形式验证成本巨大,只好用来解决一些最核心的问题。而另一种同时兼顾实用性的方案是函数式编程(函数式编程这个词语这些年有些定义模糊,这里特指静态类型纯函数式语言,基本上就是ML一族的语言),而Haskell是其中的佼佼者,也是Cardano项目使用的开发语言。

Haskell是一门 纯函数式 静态类型 惰性求值的语言,这里关键字有几个:

纯函数式是说,函数除了将输入转换为输出以外,不能有其他副作用(比如执行IO操作、修改全局变量、或者发射个导弹啥的),并且对于相同的输入永远返回相同的输出。这意味着不存在变量的概念,数据结构也都是immutable的。显然这样的函数会有很多良好的性质:好测试, 线程安全, 代码可重用, 可读性强等等。另外这样的代码还有一个性质是可证明,因为你可以机械地把函数的调用替代成函数的实现,而不改变其语意,所以你可以形式地证明比如说两个函数等价。还有一些其他的好处,比如一些代码重构工具能够自动调整代码,编译器也可以更激进地对代码进行优化,因为他们能够确保对程序的语意没有影响。

如果在*纯*的基础上,再加上total的约束,那就更好了,total是说函数对参数的所有取值都有定义,相对应的partial的函数可能对某些输入没有定义。 不过有点遗憾的是,函数是否total无法静态地检测出来,因为从程序语意的角度,未定义和死循环是一样的,所以检测total性和停机问题是一样的。 (但是如果我们愿意牺牲图灵完备性的话,是可以支持total检查的,这样的语言里可以没有死循环和partial函数, 智能合约语言就非常需要这样的设计,而智能合约语言 Simplicity 正是这么设计的)

静态类型系统,按照“柯里-霍华德同构”定理,类型对应于命题,而程序对应于证明。当我们把问题的模型编码成类型后,编译器通过类型检查可以保证程序的正确性。在实践中,类型是可以逐步细化的,越细化,能够通过编译的实现就越少,甚至可能细化到只剩下一个有意义的实现,这种情况下甚至可以通过工具实现自动生成实现代码。类型系统还带来其他一些便利的工具,比如hoogle,可以根据类型签名搜索现有库提供的函数实现。

关于Haskell语言其实可以说的还有很多,未来会继续写一些具体的编程模式,尤其是与区块链相关的,以及它在Cardano项目中的具体实践,敬请期待。

更正:Plutus还是图灵完备的语言,已经改成Simplicity。