Skip to main content
QUICK REVIEW

[论文解读] Mandala: A Smart Contract Programming Language

Markus Knecht|arXiv (Cornell University)|Nov 26, 2019
Blockchain Technology Applications and Security参考文献 1被引用 6
一句话总结

Mandala 是一种静态类型、非图灵完备的智能合约语言,旨在通过在编译时强制执行资源使用、访问控制和错误处理的保证,实现最大程度的安全性和可审计性。它使用能力(capabilities)和子结构类型来建模资产和权限,通过静态强制防止常见的漏洞(如重入攻击和状态破坏),确保所有安全属性在部署前均已验证。

ABSTRACT

Smart contracts on a blockchain behave precisely as specified by their code. A vulnerability in this code can lead to unexpected behaviour, which is hard to fix because a blockchain does not allow to change smart contract code after its deployment. Such vulnerabilities have led to several incidents. In the aftermath of such an event, a hard-fork between Ethereum and Ethereum classic was the result. This thesis proposes to develop a new smart contract programming language with the primary focus on safety, auditability, and the intention to prevent as many of the known categories of vulnerabilities by design as possible. The programming language's code is validated during deployment and afterwards isolated from other smart contracts running on the same blockchain to enforce compile-time guarantees during runtime. The designed programming language does evaluate new concepts and paradigms rarely used in non-smart contract environments for their potential benefit in a smart contract environment.

研究动机与目标

  • 解决已部署智能合约中不可逆漏洞的关键问题,此类漏洞可能导致因不可变性和缺乏补丁机制而造成永久性财务损失。
  • 通过消除动态分派、递归和运行时类型错误,提升可审计性,从而支持对代码行为的正式验证。
  • 通过静态保证,从设计上防止常见的智能合约漏洞(如重入攻击、访问控制缺陷和资源耗尽),确保安全性。
  • 引入一种新颖的能力导向类型系统,在编译时强制执行访问控制和所有权转移,减少运行时攻击面。
  • 创建一种实用、可使用的编程语言,在区块链环境中实现强安全性与开发人员生产力之间的平衡。

提出的方法

  • Mandala 使用静态类型系统,支持代数数据类型,且不支持动态方法分派,确保所有函数调用在编译时即可解析。
  • 通过禁止递归并要求已知的循环边界,实现非图灵完备性,从而支持静态计算资源边界。
  • 该语言采用基于能力的类型系统,对值和资源的访问由带类型的权限控制,且在编译时强制执行。
  • 引入一个最小化的效应系统,用于追踪状态修改和副作用,提升可审计性,并改善对状态变更的推理能力。
  • 错误处理被整合到函数签名中,要求显式声明并处理所有潜在错误,防止静默失败。
  • Mandala 将以太币(Ether)视为一等公民的代币类型,要求显式调用函数进行转账,确保接收方已准备处理资金。

实验结果

研究问题

  • RQ1是否可以通过静态类型系统设计,使智能合约语言从设计上防止重入攻击和访问控制缺陷等常见漏洞?
  • RQ2在智能合约中,对资源边界和控制流的编译时强制在多大程度上能防止运行时故障和攻击?
  • RQ3如何利用能力模型和子结构类型,将资产和权限作为一等语言构造,以提升安全性?
  • RQ4非图灵完备且具有静态资源边界的语言是否能提升可审计性,并消除如‘gas不足’异常等常见故障模式?
  • RQ5与运行时检查相比,基于能力的访问控制机制在表达能力、安全性及开发人员使用体验方面有何差异?

主要发现

  • 通过在编译时强制执行能力模型和控制流,Mandala 从设计上防止了所有已知类型的智能合约漏洞,包括重入攻击、竞争条件和访问控制缺陷。
  • 该语言确保所有资源使用在编译时即可确定边界并计算完成,彻底消除了执行期间资源耗尽的风险。
  • 所有错误必须在函数签名中声明,若未处理则会导致编译时错误,确保运行时不会出现未处理的异常。
  • 基于能力的类型系统可实现对访问控制和所有权转移的精确静态强制,防止对资产或函数的未授权访问。
  • 通过禁止递归和动态分派,Mandala 使审计人员能够以完全确定的方式推理代码行为,因为所有执行路径在编译时均已知。
  • 该语言的设计消除了自毁操作和合约销毁的需要,从而防止了某些现有语言中固有的相关安全问题。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。