File tree 1 file changed +49
-0
lines changed
1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change @@ -439,4 +439,53 @@ Cairo 程序和 Starknet 合约
439
439
- 外部函数:通过交易直接调用,可能修改状态。
440
440
- 视图函数:读取状态但不修改。
441
441
442
+
443
+ ### 2024.10.08
444
+ Starknet 智能合约构建笔记
445
+
446
+ 引言
447
+
448
+ - 回顾了之前关于 Cairo 编写的智能合约基础部分。
449
+ - 本节深入探讨智能合约的组件,包括合约接口、公共函数、储存和事件等概念。
450
+
451
+ 合约储存
452
+
453
+ - 储存简介:智能合约的持久化储存空间,用于读写和修改数据。
454
+ - 储存槽:拥有\( 2^{251}\) 个槽,每个槽初始为 0。
455
+ - 储存变量:
456
+ - 声明在特殊的 Storage 结构体中,需用#[storage]标注。
457
+ - 使用 Store trait 以支持存储。
458
+
459
+ 访问和使用储存变量
460
+
461
+ - 读取和写入:通过生成的 read 和 write 函数访问。
462
+ - 复杂类型存储:需要实现 Store trait,自定义类型(如 struct 和 enum)可被存储。
463
+ - 地址计算:使用 sn_keccak 哈希来计算储存变量的基础地址。
464
+
465
+ 储存节点
466
+
467
+ - 定义:特别的 struct,用于包含 Map、Vec 等储存类型。
468
+ - 优势:提升储存布局的复杂性和代码的可读性。
469
+
470
+ 储存映射(Mappings)
471
+
472
+ - Map类型:用于声明映射关系。
473
+ - 声明和使用:通过 entry 方法和 read/write 函数进行访问。
474
+ - 嵌套映射:支持多重键值映射。
475
+
476
+ 储存向量(Vectors)
477
+
478
+ - Vec 类型:用于存储集合。
479
+ - 声明和使用:通过 append 添加元素,at 和 get 方法读取元素。
480
+ - 地址计算:使用 sn_keccak 和 Pedersen 哈希函数。
481
+
482
+ 整理
483
+
484
+ - 储存变量:数据持久化,特殊Storage结构体。
485
+ - 访问储存:read和write方法。
486
+ - 定制类型:需实现Store trait。
487
+ - 结构与枚举布局:顺序存储元素和变体。
488
+ - 存储节点:组织复杂储存布局。
489
+ - 存储映射和向量:以键值对和集合进行存储操作。
490
+
442
491
<!-- Content_END -->
You can’t perform that action at this time.
0 commit comments