开发高级「黑科技」:Starknet – 你的二层 ZKRollup 扩容利器!

Starknet 开发指南:为 Solidity 开发者而写

《Starknet 开发指南:面向 Solidity 开发者》

Starknet

最近,我参加了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之书》来入门。

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.jsonownable_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_RPCSTARKNET_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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

市场行情

首发亚洲:比特币鲸鱼增多,但发送到交易所的比特币数量持续下降这一趋势意味着什么?

此外,由于令人失望的ADP私营部门就业报告和ISM服务指数,比特币在近两周内首次跌破了30,000美元,但在周四稍后又有所回升

区块链

在美国证券交易委员会(SEC)推迟后,ARK Invest和21Shares申请了现货以太坊交易所交易基金(ETF)

美国证券交易委员会还有另一个加密货币交易所交易基金需要考虑,ARK Invest和21Shares提议推出与以太坊相关的现货投资工具

区块链

“为什么这位加密货币专家认为以太坊是比特币采用的‘最大障碍’”

雷·尤塞夫(Ray Youssef)最近在他的X账号上表达了他对以太坊及其对比特币采用的影响的立场...

市场行情

首发亚洲:比特币接近30,000美元,不受黑石集团CEO评论和鹰派FOMC会议纪要的影响

加分:泰国下一任总理候选人拥有比特币、以太币、BNB和ADA以下是Pita Limjaroenrat披露的原因

区块链

“XRP逆势上涨,随着加密资产连续第4周流出”

“CoinShares数字资产基金每周流动报告”显示,自9月3日至9日的一周内,连续四周出现资金流出

市场行情

首发亚洲:比特币在一个宁静而漫长的周末结束时保持在30,500美元以上

此外,忽视GameFi中庞氏骗局的确实普遍性并不利于Web 3的形象