本文介绍了Warp,一个能够将Ethereum的Solidity合约转译为StarkNet的Cairo合约的工具。文章详细解释了Warp与StarkNet的关系及其在以太坊扩展中扮演的重要角色,并提供了ERC20合约在StarkNet上部署的例子和操作步骤,同时列出了未来的开发路线图。
作者:Greg Vardy (_ 0xGreg_ )
感谢 Eli Ben-Sasson、Uri Kolodny、Tomasz Stanczak 和 Antonio Sabado 的审核。
一个多月前,Nethermind 的 Nubia 团队开始开发 Warp,一个 EVM 到 Cairo 的转换器。我们刚刚发布了一个 演示,演示将一个 ERC20 Solidity 合约转换到 Cairo 并部署到 StarkNet。在这篇博客中,我将解释 StarkNet 和 Warp 是什么,以及它们为何是帮助以太坊扩展的重要组成部分。我还将讨论我们的路线图和 Warp 转换器的计划。
StarkNet 是一个去中心化、无权限的 STARK 驱动的 L2 ZK-Rollup,支持对以太坊的通用计算。这种特性组合是独特的。你可以称之为 L2 Rollup 特性的“圣三位一体”。对于一个 ZK-Rollup 来说,拥有具有任意逻辑和可组合性的智能合约并不是一件小事,而 Cairo 对于这种魔法至关重要。Cairo 是 StarkNet 的本地智能合约语言,我已经在 这里 描述了它的独特之处。Cairo 很棒,但我们也理解许多协议和开发者已经在审计/开发他们当前的 Solidity/Vyper 代码库上投入了大量时间和金钱。Warp 的存在是为了冲破你和将你的 DApp/协议部署到能够为用户提供低费用、快速最终性和更优秀体验的 L2 之间的壁垒。
尽管仍在早期开发中,Warp 将允许你将经过验证的以太坊智能合约转换为 Cairo,并无缝部署到 StarkNet。目前,Warp 的工作方式是取你的智能合约,使用你所使用的任何编译器编译为 EVM 字节码,并将该字节码转换为 Cairo。这使我们能够安全地保留原始智能合约的语义。安全性可以说是任何智能合约中最重要的特性。考虑到这一点,我们即将开始对这个转换过程进行正式验证。
如果你已经去阅读了 ERC20 代码,你可能会注意到它看起来与常规的 ERC20 有些不同。像 msg.sender
和 msg.value
这样的表达式在 StarkNet 上还没有对应的部分,因此我们省略了这些和其他依赖于以太坊 L1 状态的操作。你将来无需担心这样做。这个演示的目的是向你展示在 StarkNet 上将使用 Solidity 编写的合约进行转换、部署和交互是多么简单,因此我们就继续操作这个 ERC20 合约的奇特之处吧。
让我们设置我们的环境,克隆主 Warp GitHub 仓库。在仓库的根目录下运行:
MacOS:
brew install python@3.7
brew install gmp
python3.7 -m venv ~/warp_demo
source ~/warp_demo/bin/activate
pip install wheel
pip install ecdsa fastecdsa sympy
pip install cairo-lang==0.3.1
make warp
Linux:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.7
sudo apt install -y python3.7-dev
sudo apt install -y libgmp3-dev
python3.7 -m venv ~/warp_demo
source ~/warp_demo/bin/activate
pip install wheel
pip install ecdsa fastecdsa sympy
pip install cairo-lang==0.3.1
make warp
好了,我们准备好使用 Warp 了。
进入 examples/ERC20 目录。你会看到一个名为 ERC20.sol
的合约。你不需要担心安装正确版本的 Solidity 编译器;Warp 会通过从合约文件中检测编译器版本并在你没有安装时为你安装它。运行:
warp transpile ERC20.sol
你会看到一个具有相同名称的 Cairo 合约已被创建(当然带有 .cairo 扩展名)。你可能会注意到生成的 Cairo 文件的大小很大。这种情况不会持续很久,因为我们目前正在努力将生成的 Cairo 文件的大小减少到仅比原始合约略大。要在 StarkNet 上部署 Cairo 合约,运行:
warp deploy ERC20.cairo
这将编译 Cairo 合约(由于其大小,这需要一分钟)并将其部署到 StarkNet。你会看到一些关于部署交易和合约地址的信息,该信息也会被写入文件。你可以使用以下命令检查 StarkNet 上部署交易的状态:
warp status TX_ID
其中 TX_ID
是部署期间在标准输出中打印的数字。当 status
返回 PENDING
时,交易已通过验证阶段,正在等待上链。现在让我们调用合约中的一个函数!
正如你所看到的,在 ERC20.cairo 中,Cairo 函数被命名为 segmentX
,其中 X
是一个数字。这就是我们处理 EVM JUMP 指令的方式,X
是跳转目标时的程序计数器的值。“但是等等!”你可能会说,“我该如何用这些丑陋的函数名称调用 Cairo 合约呢?”,别担心,Warp 也会处理这个!如果我们查看 Solidity 合约,就会看到一个名为 deposit
的函数,让我们在 StarkNet 合约上调用它:
warp invoke --contract ERC20.cairo --address ADDRESS --function deposit --inputs "0x47304e88314e9eb56F99e37cE2D5Dbc28F8B3FEF 10000"
在幕后,Warp 会弄清楚应该调用哪个 segmentX
Cairo 函数。--inputs
参数中的 ADDRESS
可以在 ERC20 _ADDRESS.txt
中找到。我们刚刚向我们的 Warped Ether 代币在 StarkNet 上存入了一些想象中的价值!
我们的下一个里程碑是将一个 AMM,例如 Uniswap,Warp 到 StarkNet!路线图上的另一个项目是正式验证 Warp,我们最近已聘请一位软件验证专家来实现这一目标。说到这一点,我们正在招聘!这是我的推销。如果你加入 Nubia 团队,你将有机会与以太坊生态系统中一些最优秀的人才(StarkWare)合作,站在 L2 技术的前沿,帮助解决以太坊最重要的问题之一(扩展),同时学习你可能在其他地方学不到的知识。如果这听起来有趣,请给 Antonio 发送电子邮件并附上你的简历,邮箱为 antonio@nethermind.io,或给我发一条 Twitter DM 这里!
- 原文链接: medium.com/nethermind-et...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!