timezone |
---|
Asia/Shanghai |
- 区块链新人,没有经验,啥也不会,不过总有开始的一步(
- 你认为你会完成本次残酷学习吗? maybe(70%)
StarkNet is a permissionless decentralized Validity-Rollup (ZK-Rollup) operating as an L2 network on Ethereum. It enables dApps to scale without compromising Ethereum’s composability and security, powered by the STARK cryptographic proof system.
- Total Value Locked (TVL): $236.09m
- Stablecoins Market Cap: $86.69m
- STRK Market Cap: $679.91m
The token unlock schedule outlines the distribution and release rate of strk.
每月解锁 0.64%MAX SUPPLY($63.99M strk) 约占当前市值的 3%
2025 4 月开始每月解锁 1.28%MAX SUPPLY($127.6M strk)😢😢😢
StarkNet's tokenomics .
- STARKWARE :是位于以色列的公司,开发了 Starknet,包括 Starknet 相关的技术,目前负责构建和发展, Starknet 的核心团队是 Starkware 的员工。
- Starkware : 的创始人及现任的 CEO 发明了 Starks ZK
- Cairo : 具备 zk 抽象的高级语言
Cairo 与 Rust 语法非常相似,但本人并不会 rust
-
mod 模块关键字创建合约
-
#[starknet::contract] 合约关键字,如果不声明,则不能部署在 Starknet 上
-
#[starknet::storage] 修饰符,用于声明合约存储变量
-
#[external(v0)] 外部函数声明
-
let y_u8: u8 = 2; 类型声明
-
local 变量 // use
let
keywods to declare local variables -
可变,不可变,Shadowing
-
self: @ContractState view 函数 self.var_name.read()
-
self: ContractState 使用 self.var_name.write(new_value) 修改
-
use array::ArrayTrait; 数组
-
loop 循环
-
Mapping/enum/Storage struct
-
:: 用于访问结构体、枚举或模块的关联函数、常量或类型或者指定泛型类型的具体参数
MyStruct::my_function();
let map: LegacyMap<ContractAddress, u256> = LegacyMap::new(); // 指定 LegacyMap 的类型参数
-
match 模式匹配,类似 switch
-
模式绑定 Colors::Red(()) 括号内携带参数
// match pattern with data (Actions) fn match_action(self: @ContractState, action: Actions) -> u128 { match action { Actions::Forward(dist) => { dist//将匹配到的值绑定至dist }, Actions::Stop(_) => { 0_u128 } } }
-
Option 调用 Option::Some(value)创建一个 Option::Some(value)的值,调用 Option::None()创建一个 Option::None 的值
let x: Option<u8> = Option::Some(5); let y: Option<u8> = Option::None();
x y 为 option 类型,可使用 match 模式匹配
match option{ Option::Some(value) => value, Option::None(_) => 0_u8, }
-
Into\TryInto 类型转换
-
#[constructor] 在合约部署期间自动运行一次
- 事件
- 将数据存储在事件中比存储在存储变量中更具成本效益
- 事件不能直接从合约内部读取。
- 诸如 starknet.js 的应用程序可以通过 RPC 接口订阅这些事件,并在前端触发响应。
- #[event]和#[derive(Drop, starknet::Event)]
- 事件变体成员必须是一个与变体同名的结构体
- 使用 emit()释放
- 异常处理
- assert()
- panic()
因为之前没有接触过 Rust,所以对 Rust 的语法和特性感觉理解困难,观看了 [https://www.bilibili.com/video/BV1hjh1emEAY/?spm_id_from=333.337.search-card.all.click&vd_source=1356c9c3725643abb61fbb2c32756c84] 对所有权、借用规则、引用、生命周期 有了一定了解
- Cairo 中的每一个值都有一个 所有者(owner)。 值在任一时刻有且只有一个所有者。 当所有者(变量)离开作用域,这个值将被丢弃。 如果一个值的所有权没有被 转移(move),它不能离开作用域。
- 借用(ref)
- 借用(borrowing)允许你访问一个值而不取得其所有权。
- 借用分为 可变借用(mutable borrow)和 不可变借用(immutable borrow)。
- 可变借用允许你修改值,而不可变借用则不允许。
- 在任一时刻,一个值只能有一个可变借用,或者任意数量的不可变借用。
- 借用必须显式地声明,并且不能超过值的所有权生命周期。
- 借用必须在使用前声明,并且不能在声明后使用。
- copy drop
- #[derive(Copy, Drop)]
- 实现 Drop 特性的类型被允许没被 Move 就超出范围
- 实现 Copy 特性的类型不被 Move 语义约束
- 在 Cairo 中,快照是某一时刻值的不可变视图。你可以将一个值的快照传递给函数,同时保留原始值的所有权。
- 使用 @ 操作符创建 x 的快照,使用 desnap 操作符 * 将快照转换回普通值
- 观看了共学第二期视频
-
Trait
- Trait 是一种定义了某些行为(方法)的抽象类型
- 使用 impl 实现 trait
- 使用 #[starknet::contract] 属性标记的 trait
- 使用#[generate_trait]属性,在不用单独声明 trait 的情况下直接使用 impl 构建功能 语法糖
-
泛型
- 类型参数在函数名后的尖括号 < > 中指定。例如
- impl PairImpl of PairTrait // 实现泛型方法
- 约束
-
接口
-
用 #[starknet::interface] 属性标记的 trait
-
必须明确声明函数的装饰器。
其中的函数不应被实现。
不应声明构造函数。
不应声明状态变量。
不应声明事件(与 Solidity 不同)。
所有 view 函数需要包含参数 self: @TContractState,external 函数需要包含参数 ref self: TContractState。
-
- 观看视频学习了 rust [https://www.bilibili.com/video/BV15y421h7j7?p=9&vd_source=1356c9c3725643abb61fbb2c32756c84]
- 观看视频学习了 rust [https://www.bilibili.com/video/BV15y421h7j7?p=9&vd_source=1356c9c3725643abb61fbb2c32756c84]
- String &str
- copy move
- 可变借用,不可变借用
- 观看视频学习了 rust [https://www.bilibili.com/video/BV15y421h7j7?p=9&vd_source=1356c9c3725643abb61fbb2c32756c84]
- 观看视频学习了 rust [https://www.bilibili.com/video/BV15y421h7j7?p=9&vd_source=1356c9c3725643abb61fbb2c32756c84]