Cover photo

Starknet Cairo语言解读

StarkNet是一种利用zkSTARKs进行扩展的Layer2解决方案,它通过增加吞吐量和降低交易费用来缓解以太坊的网络拥塞。利用零知识证明技术,还增强了数据的安全性和隐私性。开发人员可以在去中心化环境中构建、部署和运行高性能智能合约。

STARKNET的基础设施和智能合约均使用的是Cairo编程语言。Cairo是一种相对较新的语言,其功能在未来可能会发生变化。以下是Cairo语言的特点:

  • 表现力强: Cairo语言具有强大的表现力,可以表达复杂的计算和逻辑。

  • 内置函数: Cairo语言内置了许多常用的函数,如哈希函数和加密函数,这些函数可以方便地在智能合约中使用。

  • 隐式参数: Cairo语言支持隐式参数,这使得智能合约编写更加简单和直观。

  • 提示: Cairo语言支持在程序中嵌入Python代码,这些代码只能被Prover看到,而Verifier看不到,这使得一些零知识应用成为可能。

  • 嵌入式测试函数: Cairo语言支持在程序中嵌入测试函数,这使得工程师可以直接在Cairo中实现单元测试,而无需编写单独的测试文件。

StarkNet通过使用zkSTARKs、本地编程语言Cairo和Cairo虚拟机(VM)提供了许多独特的优势。

https://book.cairo-lang.org/ch01-01-installation.html

Cairo语言的优势和缺点如下:

优势:

  • Cairo是一种专门为智能合约设计的、可证明的语言。

  • Cairo具有强大的表现力,可以表达复杂的计算和逻辑。

  • Cairo语言内置了许多常用的函数,如哈希函数和加密函数,这些函数可以方便地在智能合约中使用。

  • Cairo语言支持隐式参数,这使得智能合约编写更加简单和直观。

  • Cairo语言支持在程序中嵌入Python代码,这些代码只能被Prover看到,而Verifier看不到,这使得一些零知识应用成为可能。

  • Cairo语言支持在程序中嵌入测试函数,这使得工程师可以直接在Cairo中实现单元测试,而无需编写单独的测试文件。

  • Cairo语言的证明系统可以高效地生成STARK证明来验证程序的执行。

  • Cairo语言的虚拟机和语言具有STARK友好性,可以在StarkNet平台上高效地执行智能合约。

缺点:

  • 作为一种相对较新的语言,Cairo的生态系统和工具链相对较少。

  • Cairo语言的学习曲线可能较陡峭,需要一定的学习成本。

  • Cairo语言的功能在未来可能会发生变化。

总之,Cairo语言具有许多优点,如强大的表现力、可证明性、内置函数和嵌入式测试函数等,这些优点使得智能合约编写更加简单和直观。同时,Cairo语言的证明系统和STARK友好性也使得其在StarkNet平台上具有高效性。然而,Cairo语言的生态系统和工具链相对较少,需要一定的学习成本。

Cairo语言与其他编程语言的比较如下:

与Solidity相比:

  • Cairo是一种专门为智能合约设计的、可证明的语言,而Solidity则是以太坊上最常用的智能合约编程语言之一。

  • Cairo具有强大的表现力和内置函数,可以表达复杂的计算和逻辑,而Solidity则相对较为简单。

  • Cairo语言支持隐式参数和嵌入Python代码的功能,这使得一些零知识应用成为可能,而Solidity则不支持这些功能。

  • Cairo语言的证明系统可以高效地生成STARK证明来验证程序的执行,而Solidity则使用基于Merkle树的验证方法。

  • Cairo语言的虚拟机和语言具有STARK友好性,可以在StarkNet平台上高效地执行智能合约,而Solidity则需要在以太坊虚拟机上执行。

与Vyper相比:

  • Vyper是另一种专门为智能合约设计的语言,与Solidity类似,但更注重安全性和可审计性。

  • Vyper缺乏Solidity所拥有的广泛社区支持,并且目前还没有Solidity原生工具。

  • Vyper还缺少修饰符、类继承和递归调用,并且编程语言不是图灵完备的。

  • 与Vyper相比,Cairo具有更强的表现力和内置函数,支持隐式参数和嵌入Python代码的功能,以及更高效的证明系统和STARK友好性。

与Yul相比:

  • Yul是支持EVM的以太坊中间层语言,旨在直接转换为字节码,擅长为更高级的Web3开发人员优化智能合约和降低gas成本。

  • Yul缺乏工具和生态系统支持,而Cairo则有更完整的系统和用户友好的数据库。

  • Cairo具有更强的表现力和内置函数,支持隐式参数和嵌入Python代码的功能,以及更高效的证明系统和STARK友好性。

Cairo的转账代码示例:

mod transfer;

use debug::PrintTrait;

fn main() {
    let sender_balance = transfer::get_balance(sender);
    let receiver_balance = transfer::get_balance(receiver);

    if sender_balance >= amount {
        transfer::set_balance(sender, sender_balance - amount);
        transfer::set_balance(receiver, receiver_balance + amount);
        'Transfer successful!'.print();
    } else {
        'Insufficient balance!'.print();
    }
}

这段代码首先调用了一个名为transfer的模块,该模块包含了获取账户余额、设置账户余额等函数。然后,它获取了发送方和接收方的余额,并检查发送方的余额是否足够转账。如果余额足够,则更新发送方和接收方的余额,并打印出“Transfer successful!”的消息。如果余额不足,则打印出“Insufficient balance!”的消息。

需要注意的是,这段代码中的senderreceiveramount变量需要在调用该函数之前进行定义和初始化。此外,该代码示例仅供参考,实际的链上转账代码需要根据具体的需求进行编写。

总结

总之,Cairo语言具有强大的表现力和许多方便的功能,使得智能合约编写更加简单和直观。与其他智能合约编程语言相比,Cairo具有更高效的证明系统和STARK友好性,支持隐式参数和嵌入Python代码的功能,以及更完整的系统和用户友好的数据库。

Citations:

[1] https://www.gate.io/zh/blog_detail/2558/投研导航-读懂以太坊-layer2-扩容解决方-starknet-技术架构-生态版图-layer3-概念

[2] https://book.cairo-lang.org/zh-cn/ch01-02-hello-world.html

[3] https://foresightnews.pro/article/detail/21291

[4] https://blog.csdn.net/weixin_44600198/article/details/131075704

[5] https://hackernoon.com/zh/Starknet-生态系统是否被高估了