我怀疑花费大量时间在以太坊和 Hyperledger Fabric 上开发智能合约的人仍然相当罕见。再加上这样一个事实,任何有这种经验的人现在都可能在工作中发挥自己的作用:-)
我在 Go 链码上工作了大约一年,为智能合约构建了一个面向物联网的平台,该平台已暂时暂停,而今年我通过 Hyperledger Composer 开发 JavaScript 智能合约。我没有以太坊和 Solidity 方面的直接专业知识,但我会尽力回答我能回答的问题。
但请注意,以太坊基于加密货币和挖矿,并且许多活动都围绕公共、无需许可的网络。 IE。这不是为安全的商业网络而设计的,这需要您获取以太坊代码库的一个版本并对其进行破解。这与使用 Fabric 完全不同,Fabric 是从头开始设计用于安全业务交易的。
关于智能合约的几个简单问题
超级账本智能合约(链码)如何与
以太坊?
以太坊和 Fabric 一样,有多种智能合约语言。以太坊是 Solidity(一种类似 JavaScript 的语言)、Serpent(一种类似 Python 的语言)和 LLL(一种类似 Lisp 的语言)。这里最大的区别是 Fabric 运行actual这些语言的版本,因此您的技能可以双向移植。
超级账本-golang;可表达性? ;表现? ;
安全?
Golang 看起来很像 C 语言,但更具表现力,有通道、接收器等概念。性能相当极端。
我还喜欢 Hyperledger Composer 基础设施,它使用解释型 JavaScript 代码和强大的业务网络建模语言。这是值得探索的,因为它正在快速发展。使用其访问控制语言可以轻松解决许多安全问题permissions.acl
.
以太坊——坚固性;表达能力;表现? ;
安全?
不确定他们的任何语言的可表达性,但想必你可以做常见的合同工作。然而,从定义上来说,性能受到以太坊网络的区块节奏的限制,而以太坊网络的区块节奏又受到挖矿速度的限制。比特币大约每 10 分钟提交一次区块。以太坊速度更快,但也会有限制。
关于这两者的安全性——Fabric 已获得许可,并且通常预计在专用网络、后台或云上运行。因此,它可以根据您的需要和/或负担能力进行架构和设计,以实现尽可能多的物理安全性。以太坊在私下部署时可能是一样的,但当部署到像比特币那样公开的交易所时,情况就不同了。
当然存在攻击向量,但假设您将链代码保存在私有存储库中,那么您可以获得尽可能多的安全性。
如何保障智能合约安全,保证代码不被篡改?
您必须保护您的网络和存储库。例如,如果您在小型区块链的单个 Kubernetes 集群上运行,那么您可以保护该集群。如果您正在与在 Z 系统上运行 HSBN(IBM 基于结构的高安全业务网络)的多个独立后台进行大型协作,那么您将保护物理硬件和互联网络。如果你花足够的钱,链码的攻击向量几乎为零。 (顺便说一句,我也使用成本作为努力的同义词)。据推测,私有以太坊部署将具有类似的特征,但它再次被视为加密货币引擎,并且本质上是无需许可的。
双方如何信任并追踪智能合约的结果?有审计/追溯能力吗?
Fabric 有一个历史学家,可以跟踪每笔交易和世界状态变化(我的意思是所有交易和世界状态变化)。您可以编写复杂的类似 SQL 的查询来收集和分析此类数据。它非常强大。
当我搜索以太坊的类似信息时,我收到一篇又一篇讨论以太坊货币历史价格的文章。这是不同的世界。
同样是在一个去中心化的理想世界,如果出现bug谁的法律责任
和/或智能合约中的缓冲区溢出导致一些损失?
有了 Fabric,有人将负责将智能合约实施为编码化的业务规则,这与内部实施或使用合约实施的任何现有金融系统之间几乎没有逻辑差异。责任的动态将是相同的。
对于以太坊,我不知道。有一个时髦的加密角度需要注意,如果你尝试在 Fabric 上实现一个业务网络,你可能会进入以太坊不承担任何责任的领域。我认为这与 Fabric 没有什么不同。但最初的目的有所不同,这可能会在法律论证方面产生影响(例如“你在想什么?”辩护。)这都是纯粹的猜测:-)
有什么性能基准吗?例如,2000个复杂的智能合约
在 10 秒内执行?
我运行了一些负载测试(在 Bluemix 上的 4 节点 v0.6 结构上进入 Go 智能合约的泊松流量),平均每小时约 23,000 笔交易,并在世界状态中保留完整的历史记录。它运行良好。 Hyperledger v1 的设计性能比 v0.6 高得多,但是使用它的复杂性更高,因此需要认真的系统工程来维持其最佳性能(这有什么新内容?)
如何启用/限制对这些智能合约的安全访问? IE。,
只有爱丽丝和鲍勃可以看到合约,约翰看不到
看看Hyperledger Composer 中的 ACL 语言你会发现对于参与者限制有一个相当复杂的观点。
更新:该链接已损坏。新的是https://hyperledger.github.io/composer/latest/reference/acl_language.html
还有针对 ACL 概念的 Go 库的研究正在进行,但我不知道什么时候会出现。
无论如何,我希望其中一些有用。