稳固和维博之间的主要区别是什么?在现在和将来,哪一个人可以更容易接受订立明智的合同,为什么?
发布于 2019-03-14 14:06:32
从顶层看,最大的区别在于Vyper专注于安全性,并尽最大努力保护开发人员的代码不被利用。它的优点是,它经历了不同的发展阶段,并且是围绕坚实的经验来设计的。Vyper构建时考虑了安全性、语言和编译器的简单性以及可审计性。
此外,Vyper的语法更容易理解,因为它是类似Python的语法。
在现在和将来,哪一个人可以更容易接受订立明智的合同,为什么?
这取决于开发人员。在功能上,它们都做相同的事情(与EVM交互)。如果合同很简单,我认为应该使用Vyper,因为错误的空间较小。有时,Vyper可能根本无法工作,比如您需要编写低级别的程序集来操作EVM。
在Vyper的Github页面中,为了简单起见,Vyper删除了几个条目:
Vyper没有的一些例子以及为什么:修饰符--例如,在Solidity中,您可以执行函数foo() mod1 {. },其中可以在代码的其他地方定义mod1,以包括在执行之前完成的检查、执行后进行的检查、一些状态更改,或者可能包括其他事情。Vyper没有这一点,因为它使得编写误导性代码变得太容易了。mod1看起来太无害了,不能添加任意的预条件、后置条件或状态更改。此外,它还鼓励人们在执行跳过文件的地方编写代码,从而损害了可审计性。修饰符的常用用例是在执行程序之前执行一次检查;我们的建议是将这些检查简单地内联为断言。类继承--要求人们在多个文件之间跳转以了解一个程序正在做什么,并要求人们理解冲突时的优先级规则(实际使用的是哪个类的函数X?)因此,它使代码过于复杂,无法理解。内联程序集-添加内联程序集将使Ctrl+F不再能够为变量名查找该变量被读取或修改的所有实例。函数重载--这可能导致在任何给定时间调用哪个函数的混乱。因此,编写错误代码(foo( "hello“)日志”hello“,而foo("hello","world")偷取您的资金)就更容易了。函数重载的另一个问题是,它使代码更难搜索,因为您必须跟踪哪个调用是指哪个函数。操作员超载-太容易写误导代码(你说的"+“意味着”把我的钱都寄给开发人员“?)我没有听懂代码中写的那部分!)。递归调用--不能为气体限制设置上限,从而为气体限制攻击打开大门。无限长的回路-不能设置一个上限的气体限制,打开门的气体限制攻击。二进制不动点--十进制不动点更好,因为在代码中以文字形式写成的任何十进制不动点值都有精确的表示,而使用二进制不动点逼近通常需要(例如,0.2 -> 0.001100110011.,需要截断),从而导致不直观的结果,例如python0.3+ 0.3 + 0.3 + 0.1 != 1。
https://ethereum.stackexchange.com/questions/68341
复制相似问题