开发高级「黑科技」:Starknet – 你的二层 ZKRollup 扩容利器!
Starknet 开发指南:为 Solidity 开发者而写
《Starknet 开发指南:面向 Solidity 开发者》

最近,我参加了Starknet的开发学习营,跟着登链社区和Openbuild合作推出的Bootcamp,探索了一种全新的以太坊二层扩容方案——Starknet。Starknet采用了一种与EVM完全不同的开发模式,让我大开眼界,领略到了区块链行业的高级黑科技!
如果你是Solidity智能开发者,可能会对Starknet感到陌生。别担心,我将通过幽默有趣的方式为你讲解,带你领略这个“扩容神奇”的世界。
Cairo vs Solidity:战斗开发语言!
首先,我们来看看Starknet使用的开发语言——Cairo和Solidity的区别。Solidity是为以太坊虚拟机(EVM)设计的一种语言,类似于Python和JavaScript。每次调用合约,EVM都会在各个节点上重新执行以验证结果的一致性。
而Starknet使用的是Cairo语言,它是一种可证明的编程语言。Cairo编写的程序会生成一个证明,证明了特定程序和特定输入得到了特定的结果。也就是说,我们可以省去重复执行程序的开销,从而实现扩容效果。Cairo是一种通用的可证明的程序语言,不仅可以在Starknet中使用,还可以在其他场景中广泛应用。当然,Cairo作为类似Rust的语言,对于中文用户来说学习门槛略高一些,但你可以参考StarknetAstro翻译的《Cairo之书》来入门。
- ‘朝鲜黑客Lazarus Group 6年盗取30亿!一不小心,钱就被抢光了’
- 开放网络访问层:LianGuairticle Network 生态系统揭秘
- 美国法官警告证交会对加密货币案件中“虚假和误导”的要求
Starknet账户:让你的AA钱包更加智能!
在以太坊中,我们有外部账户(EOA)和合约账户两种账户类型,通常使用MetaMask等钱包来管理外部账户。而在Starknet中,我们有一种原生支持的账户抽象,也就是所有账户都是智能合约。在Starknet账户中,我们可以使用合约来验证交易,支持多种验签方式,还可以进行社交恢复和批量交易。当然,你需要使用Braavos或ArgentX等钱包来管理Starknet账户。
高级工具Scarb:让你的开发旗开得胜!
Solidity项目通常使用Foundry或Hardhat进行开发,而Cairo项目则使用Scarb。Scarb是Cairo语言的项目管理工具,它集成了包管理器和编译器,可以方便地管理项目的依赖项并编译Cairo项目。想要使用Scarb,只需要执行以下命令进行安装:
curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh
Hello, Cairo!打造你的第一个Starknet合约
安装完Scarb后,我们就可以开始创建我们的第一个Cairo合约了!让我们创建一个名为Ownable的合约。
scarb new ownable
接下来,我们需要编辑Scarb.toml文件,用以下内容替换原有内容:
[LianGuaickage]
name = "ownable"
version = "0.1.0"
[dependencies]
starknet = ">=2.2.0"
[[target.starknet-contract]]
sierra = true
编辑完成后,我们还需要用一段Cairo代码替换lib.cairo中的代码,具体代码请参考Github。
准备工作完成后,执行以下命令进行编译:
scarb build
如果编译成功,你将看到以下类似的输出:
Compiling ownable v0.1.0 (/Users/emmett/CairoProject/ownable/Scarb.toml)
Finished release target(s) in 1 second
编译完成后,你会在target/dev/目录下看到生成的编译文件:ownable.starknet_artifacts.json和ownable_ownable.contract_class.json。恭喜你,合约准备就绪!
接下来,我们来看看如何将合约部署到Starknet网络中。
安装Starkli:高效与Starknet网络进行交互!
Starkli是一款命令行工具,用于与Starknet网络(包括本地网络)进行交互。安装Starkli非常简单,你只需要执行以下命令即可:
curl https://get.starkli.sh | sh
安装完starkliup后,将starkliup添加到环境变量中,并使用以下命令安装starkli:
starkliup
稍等片刻后,你就可以在终端中使用starkli命令了。输入starkli --version可以查看当前starkli的版本。
准备钱包:让你的Starknet之旅更加顺利!
在Starknet上部署合约,我们需要使用钱包账户进行支付Gas费用。所以,第一步我们需要准备一个可用的钱包账户。
你可以选择Braavos或ArgentX等钱包,它们都有浏览器插件版本,操作方法类似于MetaMask。在创建钱包时,记得从官方水龙头获取一些以太币。
在Starknet中,每个智能钱包由一个签名者(signer)和一个账户描述(account descriptor)控制。对比以太坊上的EOA钱包,智能钱包在合约中进行验签,支持多种签名方式,并用账户描述来描述签名者和智能钱包账户的关系。
首先,我们需要创建一个存储智能钱包所需文件的文件夹.wallets:
mkdir .wallets
签名者(signer)可以是私钥或加密的keystore。为了安全起见,我们通常选择使用keystore。你可以使用Braavos或ArgentX导出的私钥来创建keystore:
starkli signer keystore from-key .wallets/keystore.json
该命令会让你输入私钥和密码,然后会生成一个.wallets/keystore.json文件。在发起交易时,starkli会使用keystore来为你的交易签名。
接下来,我们需要创建账户描述文件。如果你在Starknet上已经部署该账户,可以使用以下命令获取该账户信息并创建账户描述文件:
starkli account fetch 0x0325E8b88aedBac03c5dc9E22bF94d47E6508f9723FD085f5D7b5809afA48bC4 --output .wallets/account.json --rpc https://starknet-goerli.g.alchemy.com/v2/xxxxxxx
请将--output替换为正确的账户描述文件位置,并将--rpc替换为正确的节点RPC地址。如果账户没有在链上部署,你会收到ContractNotFound的错误信息,这时你需要在钱包上进行一笔转账交易,系统会自动创建该钱包账户。
声明合约(declare):向世界宣告你的合约!
首先,我们需要将合约代码声明(declare)到Starknet网络中。声明合约需要通过交易进行,为了方便起见,我们将节点账户和RPC地址写入到环境变量中:
export STARKNET_RPC="https://starknet-goerli.g.alchemy.com/v2/replace_with_your_key"
export STARKNET_ACCOUNT=".wallets/account.json"
export STARKNET_KEYSTORE=".wallets/keystore.json"
替换STARKNET_RPC和STARKNET_ACCOUNT为正确的RPC地址和账户文件路径。使用source envsh在命令行中应用环境变量。
使用以下命令进行合约声明(会自动使用以上环境变量):
starkli declare target/dev/ownable_ownable.contract_class.json
如果一切顺利,你将会获得一个类似的class hash。
部署合约:向全世界宣告你的合约!
部署合约非常简单,只需要执行以下命令:
starkli deploy 0x077bd1a78e208a5e73995278e4300066fa14259f48c33123fe0de13bf8b8a24d 0x0325E8b88aedBac03c5dc9E22bF94d47E6508f9723FD085f5D7b5809afA48bC4
输入正确的class hash和账户地址,如果没有错误,你将获得一个类似的合约地址。
与合约互动:调用合约!
好了,现在我们来试试调用合约的get_owner方法:
starkli call 0x03264b6bdb740c14b776972ce2065c4b79cc6002fb0438ade0bb480c4774b272 get_owner
你将会获得一个类似的返回结果。
通过starkscan浏览器也可以调用合约,具体操作请参考这里。
总结:Starknet和EVM区别一览表
相信经过我的讲解,你已经对Starknet合约开发有了初步的了解。下面是一个Starknet和EVM开发的区别一览表,供你参考:
| EVM | Starknet | |
|---|---|---|
| 开发语言 | Solidity | Cairo |
| 开发工具 | Foundry | Scarb |
| 与链交互 | web3.js | starkli |
| 本地模拟节点 | anvil | Katana |
| 账号 | EOA、AA钱包 | 只有AA钱包 |
| 钱包 | MetaMask | Braavos、ArgentX |
| 部署方法 | 直接部署合约字节码 | 先声明合约,再部署合约实例 |
嘿!你准备好进入Starknet的扩容之旅了吗?
Starknet的二层ZKRollup扩容方案为以太坊的发展注入了新的活力!如果你是数字资产的投资者,Starknet的高级黑科技无疑是一个值得关注的项目。不要犹豫,加入我们的Bootcamp学习吧!完成作业还有奖励哦!更重要的是,在一月份我们还将举办一场Starknet黑客马拉松活动,精彩纷呈,不容错过!有兴趣的朋友可以联系晓娜(微信:upchainedu)获取更多信息。
现在,你准备好向全新的区块链技术世界迈进了吗?加入我们,一起体验Starknet的无限可能吧!
欢迎在评论区留言,与我互动分享你的看法和想法。同时,如果你还有任何关于Starknet开发的问题,也可以在评论区向我提问。我会尽力解答。祝愉快~
We will continue to update 算娘; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles





