Part 1
Starknet 简介
**Starknet 是建立在以太坊之上的第二层网络,提供高吞吐量和低 Gas 成本,同时保障着以太坊第一层的安全级别。**该系统的高效性源于其能够在链下执行计算,随后生成 ZK 证明。然后在链上验证此证明,允许将多个 L2 交易捆绑到以太坊上的单个交易中。Starknet 上的智能合约使用 Cairo 语言编写,可以无缝部署,使用户能够在这个类似以太坊的网络中进行交易。
Part 2
Cairo
**Starknet 是一个去中心化的 Validity-Rollup。**它利用 Cairo1.0 —— 一种受 Rust 启发的本地智能合约语言,在主网上开发应用程序,如 dYdX、Sorare 和 ImmutableX,从而使开发人员能够更安全、高效地编写合约。
Part 3
账户抽象化(Account Abstraction)
Starknet 的核心在于账户抽象化,其中每个账户本质上都是智能账户,消除了 EOA 的概念。这种独特的方法在所有 L1 和 L2 链中都得到应用,确保所有基础设施,包括钱包和区块浏览器,都适用于这种抽象化。这将 Starknet 定位为智能生态系统的先驱,开发人员可以在构建工具和应用程序时,知道这种抽象化是普遍适用的,而不需要考虑非抽象化账户。这确保了智能账户是用户与应用程序交互的唯一媒介。Starknet 的本地账户抽象化还消除了在 ERC-4337 中出现的由 Bundler 引入的额外复杂性。与其将基础设施和工具调整为与 Bundler 交互,不如通过指定排序器来完成 Bundler 的角色,从而简化了该流程。
下图是 Starknet 交易流程[1],仍然是从 ERC-4337 的设计原则中汲取灵感[2]。

Part 4
Starknet 安全的最佳实践
#1
访问控制
当智能合约没有有效的安全措施时,访问控制就会出现问题,允许未应当有执行特定操作权限的用户访问。这种疏忽可能导致不可预测的智能合约操作,并可能导致资金损失。
例如,考虑一个设计用于创建代币的智能合约。如果缺乏严格的权限检查,这就类似于为潜在的滥用留下了机会。






重入经常发生于 callback 函数中。此外,在诸如闪电贷(flash loans)之类的情况下,借贷合约可能会使用 callback 函数,以允许借款合约利用并随后偿还借入的金额。
▶建议:
**为了防范重入威胁,建议遵循“检查-效果-交互”(check-effects-interactions)的范式。**这意味着在启动对外部合约的调用之前,应优先更新合约的内部状态。参考提供的示例,在调用外部函数之前将发送者从白名单中移除是明智之举。

