diff --git a/mover/dgu0323/co-learn-2411/images/follow_bilibli.jpg b/mover/dgu0323/co-learn-2411/images/follow_bilibli.jpg new file mode 100644 index 000000000..0a9a5535c Binary files /dev/null and b/mover/dgu0323/co-learn-2411/images/follow_bilibli.jpg differ diff --git a/mover/dgu0323/co-learn-2411/images/follow_x.jpg b/mover/dgu0323/co-learn-2411/images/follow_x.jpg new file mode 100644 index 000000000..30b02c077 Binary files /dev/null and b/mover/dgu0323/co-learn-2411/images/follow_x.jpg differ diff --git a/mover/dgu0323/co-learn-2411/images/readme.md b/mover/dgu0323/co-learn-2411/images/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/mover/dgu0323/co-learn-2411/images/wechat_forward.jpg b/mover/dgu0323/co-learn-2411/images/wechat_forward.jpg new file mode 100644 index 000000000..f0d1cc008 Binary files /dev/null and b/mover/dgu0323/co-learn-2411/images/wechat_forward.jpg differ diff --git a/mover/dgu0323/co-learn-2411/images/x_forward.jpg b/mover/dgu0323/co-learn-2411/images/x_forward.jpg new file mode 100644 index 000000000..57bd279e1 Binary files /dev/null and b/mover/dgu0323/co-learn-2411/images/x_forward.jpg differ diff --git a/mover/dgu0323/co-learn-2411/project/readme.md b/mover/dgu0323/co-learn-2411/project/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/mover/dgu0323/co-learn-2411/project/readme.md @@ -0,0 +1 @@ + diff --git a/mover/dgu0323/co-learn-2411/readme.md b/mover/dgu0323/co-learn-2411/readme.md new file mode 100644 index 000000000..9b3eccb1d --- /dev/null +++ b/mover/dgu0323/co-learn-2411/readme.md @@ -0,0 +1,54 @@ +# 这个模板是2024年11月份的共学营才需要的 + +## b站,推特关注 + +- [] b站,推特关注截图: ![关注截图](./images/你的图片地址) + +## 为共学营宣传(在朋友圈或者群聊中转发海报/文章) + +- [] 宣传截图:![宣传截图](./images/你的图片地址) + +## 每周课程学习 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 参加直播答疑 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 群里分享学习笔记 + +- [] 第一篇笔记 +- [] 第二篇笔记 +- [] 第三篇笔记 +- [] 第四篇笔记 + +## 对外输出学习笔记 + +- [] 第一篇笔记【学习笔记链接】 +- [] 第二篇笔记【学习笔记链接】 +- [] 第三篇笔记【学习笔记链接】 +- [] 第四篇笔记【学习笔记链接】 + +## 在HOH社区公众号发布自己的技术文章 + +- [] 第一篇笔记【公众号文章链接】 +- [] 第二篇笔记【公众号文章链接】 +- [] 第三篇笔记【公众号文章链接】 +- [] 第四篇笔记【公众号文章链接】 + +## 直播分享学习技巧/工具推荐 + +- [] 会议截图:![会议记录截图](./images/你的图片地址) + +## 提交项目 + +- [] 项目提交![项目截图](./images/你的图片地址) + + diff --git a/mover/dgu0323/code/readme.md b/mover/dgu0323/code/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/mover/dgu0323/code/task1/Move.lock b/mover/dgu0323/code/task1/Move.lock new file mode 100644 index 000000000..b57a64837 --- /dev/null +++ b/mover/dgu0323/code/task1/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "2E267C18D553336099CDD31F7063857679825E46CD06EC67CC7F7FB0C20317C1" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.36.2" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x265327067146edd1f498d1fc3bdacf1936a29d11320d4265748cf701f7dd7669" +latest-published-id = "0x265327067146edd1f498d1fc3bdacf1936a29d11320d4265748cf701f7dd7669" +published-version = "1" diff --git a/mover/dgu0323/code/task1/Move.toml b/mover/dgu0323/code/task1/Move.toml new file mode 100644 index 000000000..e75e497eb --- /dev/null +++ b/mover/dgu0323/code/task1/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "task1" +edition = "2024.beta" # edition = "legacy" to use legacy (pre-2024) Move +# license = "" # e.g., "MIT", "GPL", "Apache 2.0" +# authors = ["..."] # e.g., ["Joe Smith (joesmith@noemail.com)", "John Snow (johnsnow@noemail.com)"] + +[dependencies] +Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" } + +# For remote import, use the `{ git = "...", subdir = "...", rev = "..." }`. +# Revision can be a branch, a tag, and a commit hash. +# MyRemotePackage = { git = "https://some.remote/host.git", subdir = "remote/path", rev = "main" } + +# For local dependencies use `local = path`. Path is relative to the package root +# Local = { local = "../path/to" } + +# To resolve a version conflict and force a specific version for dependency +# override use `override = true` +# Override = { local = "../conflicting/version", override = true } + +[addresses] +task1 = "0x0" + +# Named addresses will be accessible in Move as `@name`. They're also exported: +# for example, `std = "0x1"` is exported by the Standard Library. +# alice = "0xA11CE" + +[dev-dependencies] +# The dev-dependencies section allows overriding dependencies for `--test` and +# `--dev` modes. You can introduce test-only dependencies here. +# Local = { local = "../path/to/dev-build" } + +[dev-addresses] +# The dev-addresses section allows overwriting named addresses for the `--test` +# and `--dev` modes. +# alice = "0xB0B" + diff --git a/mover/dgu0323/code/task1/sources/task1.move b/mover/dgu0323/code/task1/sources/task1.move new file mode 100644 index 000000000..8828d0c81 --- /dev/null +++ b/mover/dgu0323/code/task1/sources/task1.move @@ -0,0 +1,17 @@ +module task1::hello; +use std::ascii::{String, string}; + +public struct Hello has key { + id: UID, + say: String +} + +fun init(ctx: &mut TxContext) { + let hello = Hello { + id: object::new(ctx), + say: string(b"dgu0323") + }; + + transfer::transfer(hello, ctx.sender()); +} + diff --git a/mover/dgu0323/code/task1/tests/task1_tests.move b/mover/dgu0323/code/task1/tests/task1_tests.move new file mode 100644 index 000000000..4a6af24ca --- /dev/null +++ b/mover/dgu0323/code/task1/tests/task1_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module task1::task1_tests; +// uncomment this line to import the module +// use task1::task1; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_task1() { + // pass +} + +#[test, expected_failure(abort_code = ::task1::task1_tests::ENotImplemented)] +fun test_task1_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/dgu0323/code/task2/Move.lock b/mover/dgu0323/code/task2/Move.lock new file mode 100644 index 000000000..b81e89ff2 --- /dev/null +++ b/mover/dgu0323/code/task2/Move.lock @@ -0,0 +1,26 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "E7A65BF39B740E195045E87B46B06936199C063AFE29D8948B9C6B9B853033A8" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.38.1" +edition = "2024.beta" +flavor = "sui" diff --git a/mover/dgu0323/code/task2/Move.toml b/mover/dgu0323/code/task2/Move.toml new file mode 100644 index 000000000..6a6098d99 --- /dev/null +++ b/mover/dgu0323/code/task2/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "task2" +edition = "2024.beta" # edition = "legacy" to use legacy (pre-2024) Move +# license = "" # e.g., "MIT", "GPL", "Apache 2.0" +# authors = ["..."] # e.g., ["Joe Smith (joesmith@noemail.com)", "John Snow (johnsnow@noemail.com)"] + +[dependencies] +Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" } + +# For remote import, use the `{ git = "...", subdir = "...", rev = "..." }`. +# Revision can be a branch, a tag, and a commit hash. +# MyRemotePackage = { git = "https://some.remote/host.git", subdir = "remote/path", rev = "main" } + +# For local dependencies use `local = path`. Path is relative to the package root +# Local = { local = "../path/to" } + +# To resolve a version conflict and force a specific version for dependency +# override use `override = true` +# Override = { local = "../conflicting/version", override = true } + +[addresses] +task2 = "0x0" + +# Named addresses will be accessible in Move as `@name`. They're also exported: +# for example, `std = "0x1"` is exported by the Standard Library. +# alice = "0xA11CE" + +[dev-dependencies] +# The dev-dependencies section allows overriding dependencies for `--test` and +# `--dev` modes. You can introduce test-only dependencies here. +# Local = { local = "../path/to/dev-build" } + +[dev-addresses] +# The dev-addresses section allows overwriting named addresses for the `--test` +# and `--dev` modes. +# alice = "0xB0B" + diff --git a/mover/dgu0323/code/task2/sources/task2.move b/mover/dgu0323/code/task2/sources/task2.move new file mode 100644 index 000000000..07c329780 --- /dev/null +++ b/mover/dgu0323/code/task2/sources/task2.move @@ -0,0 +1,6 @@ +module task2::task2; +use sui::coin; + +fun aa(){ + coin::create_regulated_currency_v2() +} \ No newline at end of file diff --git a/mover/dgu0323/code/task2/tests/task2_tests.move b/mover/dgu0323/code/task2/tests/task2_tests.move new file mode 100644 index 000000000..8a0300a94 --- /dev/null +++ b/mover/dgu0323/code/task2/tests/task2_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module task2::task2_tests; +// uncomment this line to import the module +// use task2::task2; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_task2() { + // pass +} + +#[test, expected_failure(abort_code = ::task2::task2_tests::ENotImplemented)] +fun test_task2_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/dgu0323/notes/publish-first-contract.md b/mover/dgu0323/notes/publish-first-contract.md new file mode 100644 index 000000000..2f4f51fb7 --- /dev/null +++ b/mover/dgu0323/notes/publish-first-contract.md @@ -0,0 +1,191 @@ +# 发布第一个合约到 Sui 链上 + +## 准备钱包 + +与Sui 链上交互首先需要钱包, 并领取一些测试 SUI Token 作为交易 gas + +### 添加 env + +Sui 的 3 个环境: + +* mainnet: 主网, 使用真 SUI 进行交互 +* testnet: 测试网, 用测试币, 推荐使用 +* devnet: 开发网, 用测试币, 经常重置, 导致之前部署的合约会被删掉, 但是特性都是最新的, 用来测试新功能 + +``` +# 添加3个evn +sui client new-env --alias devnet --rpc https://fullnode.devnet.sui.io:443 +sui client new-env --alias testnet --rpc https://fullnode.testnet.sui.io:443 +sui client new-env --alias mainnet --rpc https://fullnode.mainnet.sui.io:443 + +# 查看 +sui client envs +╭─────────┬─────────────────────────────────────┬────────╮ +│ alias │ url │ active │ +├─────────┼─────────────────────────────────────┼────────┤ +│ devnet │ https://fullnode.devnet.sui.io:443 │ │ +│ testnet │ https://fullnode.testnet.sui.io:443 │ * │ +│ mainnet │ https://fullnode.mainnet.sui.io:443 │ │ +╰─────────┴─────────────────────────────────────┴────────╯ +其中 * 代表当前激活的 env, 后续交互都会走 testnet + +# 切换到主网 +sui client switch --env mainnet +``` + +上面的更改会写入本地文件 `~/.sui/sui_config/client.yaml` + + + +### 创建钱包 + +``` +sui client new-address ed25519 +╭────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Created new keypair and saved it to keystore. │ +├────────────────┬───────────────────────────────────────────────────────────────────────────────────┤ +│ alias │ quirky-plasma │ +│ address │ 0x790ff8abe90560564a0564bbe522498cfd67f20bba32c4c407db46d09c27a779 │ +│ keyScheme │ ed25519 │ +│ recoveryPhrase │ 12 word 的助记词.... │ +╰────────────────┴───────────────────────────────────────────────────────────────────────────────────╯ + +# 查看本地所有钱包 +sui client addresses +╭────────────────────────┬────────────────────────────────────────────────────────────────────┬────────────────╮ +│ alias │ address │ active address │ +├────────────────────────┼────────────────────────────────────────────────────────────────────┼────────────────┤ +│ inspiring-emerald │ 0x09b724887e8f2f6f3e13ed09a03bf9a577d7c668b735627cd14aa9dc129551d2 │ │ +│ fervent-garnet │ 0x527758edf86e7e2b845b1c79c7e402e89015cb7bae3e6fe74bb9957760a3d333 │ * │ + +其中 * 代表当前激活的钱包, 后续交互都会用这个钱包, 比如: 领水, 发布合约 + +# 切换钱包 +sui client switch --address 0x09b724887e8f2f6f3e13ed09a03bf9a577d7c668b735627cd14aa9dc129551d2 + +切换完之后, 再查看就会有 * +``` + +#### 查看本地钱包私钥 + +``` +cat ~/.sui/sui_config/sui.keystore +结果的顺序和 sui keytool list 的结果顺序是一样的, 方便做地址和私钥的对应 +``` + +#### 本地钱包导入到网页钱包 + +``` +~/.sui/sui_config/sui.keystore 中的的私钥是 base64 需要转 hex +sui keytool convert xxxxxxxx +``` + +#### 网页钱包导入到本地钱包 + +从 Sui Wallet 中导出私钥后在本地执行 + +``` +sui keytool import ed25519 +``` + + + +### 领水 + +**方式1: 给当前激活的钱包领水 + +``` +sui client faucet +``` + +**方式2: 给任意钱包领水** + +可以指定不同 env 的 url 来给不同 env 下的钱包领水, 注意: 不能无限领, 有频率限制 + +``` +curl --location --request POST 'https://faucet.testnet.sui.io/gas' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "FixedAmountRequest": { + "recipient": "0x527758edf86e7e2b845b1c79c7e402e89015cb7bae3e6fe74bb9957760a3d333" + } +}' +``` + +### 查看余额 + +``` +# 直接查看余额总数 +sui client balance + +# 查看每个 SUI Object, 可以得到每个 SUI 的 ObjectId, 可能记录会很多 +sui client gas +``` + + + +## 浏览器 + +查看账户余额, 对象属性, 交易详情 + +搜索框中可以搜索所有对象的 ObjectID, 如: 钱包地址, 对象 ID, 交易 hash + +比如: + +查看钱包 https://testnet.suivision.xyz/account/0x527758edf86e7e2b845b1c79c7e402e89015cb7bae3e6fe74bb9957760a3d260 + + + +## 开发合约 + +``` +# 创建项目 +sui move new task1 + +# 编辑 task1.move +module task1::hello; +use std::ascii::{String, string}; + +public struct Hello has key { + id: UID, + say: String +} + +fun init(ctx: &mut TxContext) { + let hello = Hello { + id: object::new(ctx), + say: string(b"dgu0323") + }; + + transfer::transfer(hello, ctx.sender()); +} + + + +# 构建 +sui move build +``` + + + +## 发布合约 + +``` +sui client publish + +Transaction Digest: HL9Ud8GJxEnPeEqosZwKbPtG7n3n7mpa2TuGrBWvErYs +.... 省略 +``` + + + +## 查看链上发布详情 + +https://testnet.suivision.xyz/txblock/HL9Ud8GJxEnPeEqosZwKbPtG7n3n7mpa2TuGrBWvErYs + +从中可以看到如下信息: + +* tx 发生在什么时候 +* 是谁触发的 +* change了哪些内容, 其中包括 publish 这个合约 + diff --git a/mover/dgu0323/notes/readme.md b/mover/dgu0323/notes/readme.md new file mode 100644 index 000000000..2c6ead1a4 --- /dev/null +++ b/mover/dgu0323/notes/readme.md @@ -0,0 +1,8 @@ +# 学习笔记 + +[Sui Move 开发环境准备](./sui-move-environment-setup.md) + +[发布第一个合约到 Sui 链上](./publish-first-contract.md) + + + diff --git a/mover/dgu0323/notes/sui-move-environment-setup.md b/mover/dgu0323/notes/sui-move-environment-setup.md new file mode 100644 index 000000000..d19e7963f --- /dev/null +++ b/mover/dgu0323/notes/sui-move-environment-setup.md @@ -0,0 +1,189 @@ +# Sui Move 开发环境准备 + +Move 是一种基于 Rust 改编的编程语言,它创建于 2019 年,最初是为 Meta 的 Diem 区块链项目而开发的,在 Diem 项目解散之后,其创始团队出走分别创立的 Aptos 与 Sui,也将 Move 作为核心编程语言。 + +## Install Rust + +Sui 是 Rust 编写的, 因此本地需要 Rust 开发环境, 一般开发合约无需开发 Rust 代码 + +``` +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +安装位置: `~/.cargo/bin`, 里面常用的工具 + +* rustup + * up 是 setup 或 update 的意思 + * 工具链管理器 ToolChain Management + +* rustc + * 编译器 + +* cargo + * 包管理工具, 类似 maven + +### 常用命令 + +``` +# 查看编译器版本 +rustc -V + +# 查看包管理工具版本 +cargo --version + +# rustup 管理多版本编译器 +## 安装稳定版 +rustup toolchain install stable +## 安装日更版本 +rustup toolchain install nightly + +# 查看默认编译器 +rustup default + +# 修改默认编译器 +rustup default nightly + +用指定版本的编译器执行命令 +rustup run nightly rustc --version +``` + + + +## Install Sui + +Sui 客户端, 负责和 Sui 区块链做交互 + +Mac 系统下执行 + +```` +brew search sui +brew install sui +```` + +验证安装 + +安装到了 `/opt/homebrew/Cellar/sui/1.36.2/bin` + +``` +# 查看版本 +# sui -V +sui 1.36.2-homebrew +``` + +后续升级, 因为 sui 客户端更新的比较频繁 + +``` +brew upgrade sui + +==> Downloading https://formulae.brew.sh/api/formula_tap_migrations.jws.json +##################################################################################################################################################### 100.0% +Warning: sui 1.36.2 already installed +``` + +### 开发常用命令 + +``` +# 创建项目 +sui move new + +# 构建项目 +sui move build + +# 测试项目 +sui move test +``` + + + +## Install Vscode Move Plugin + +搜索 "move", 选择 Mysten Labs 发行的官方插件 + +![](https://james-01-1256894360.cos.ap-beijing.myqcloud.com/2024-11-04-140804.png) + +## Hello World + +创建项目`move new helloworld` + +用 vscode 打开项目 `code helloworld` + +编译项目下载依赖方便看 Sui 官方源码 `sui move build` + +目录结构 + +``` +➜ helloworld tree -L 3 +├── Move.lock +├── Move.toml # 项目依赖管理 +├── build +│ ├── helloworld +│ │ ├── BuildInfo.yaml +│ │ ├── bytecode_modules +│ │ │ └── dependencies +│ │ │ ├── MoveStdlib +│ │ │ └── Sui +│ │ ├── source_maps +│ │ └── sources +│ │ └── dependencies # sui move build 下载的依赖 +│ │ ├── MoveStdlib # move 语言标准库 +│ │ └── Sui # sui 标准库 +│ └── locks +├── sources # 源码 +│ └── helloworld.move # helloworld 模块 +└── tests # 单元测试 + └── helloworld_tests.move # 单元测试模块 +``` + +编写 sources/`helloworld.move` + +``` +module helloworld::helloworld { + use std::debug; + + public fun hello() { + debug::print(&666); + } +} +``` + +编写单元测试模块 `tests/helloworld_tests.move` + +``` +#[test_only] +module helloworld::helloworld_tests; + +use helloworld::helloworld; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_helloworld() { + helloworld::hello(); +} + +#[test, expected_failure(abort_code = ::helloworld::helloworld_tests::ENotImplemented)] +fun test_helloworld_fail() { + abort ENotImplemented +} + +``` + +执行单元测试 `sui move test` 成功输出 666 + +``` +INCLUDING DEPENDENCY Sui +INCLUDING DEPENDENCY MoveStdlib +BUILDING helloworld +Running Move unit tests +[debug] 666 +[ PASS ] helloworld::helloworld_tests::test_helloworld +[ PASS ] helloworld::helloworld_tests::test_helloworld_fail +Test result: OK. Total tests: 2; passed: 2; failed: 0 +``` + +## Install Sui Wallet + +安装 chrome 插件 Sui Wallet + +![](https://james-01-1256894360.cos.ap-beijing.myqcloud.com/2024-11-05-045100.png) + diff --git a/mover/dgu0323/readme.md b/mover/dgu0323/readme.md new file mode 100644 index 000000000..a10f17ceb --- /dev/null +++ b/mover/dgu0323/readme.md @@ -0,0 +1,54 @@ +## 基本信息 +- Sui钱包地址: `0xc31478f6b4fd9ef2c9a4b74e859622e4194f8e34927898b6d2ba48d0ffc8d24c` +> 首次参与需要完成第一个任务注册好钱包地址才被合并,并且后续学习奖励会打入这个地址 +- github: `自己的githubid` + +## 个人简介 +- 工作经验: 18 年 +- 技术栈: `java` `js` `move` `rust` +> 重要提示 请认真写自己的简介 +- 多年 web2 开发经验,资深 java 架构师, 企业云存储领域, 想通过 Sui Move 入局 Web3 +- 联系方式: tg: `dgu0323` + +## 任务 + +## 01 hello move +- [] Sui cli version: 1.36.2-homebrew +- [] Sui钱包截图: ![](https://james-01-1256894360.cos.ap-beijing.myqcloud.com/2024-11-05-150701.png) +- [] package id: 0x265327067146edd1f498d1fc3bdacf1936a29d11320d4265748cf701f7dd7669 +- [] package id 在 scan上的查看截图:![](https://james-01-1256894360.cos.ap-beijing.myqcloud.com/2024-11-05-150825.png) + +## 02 move coin +- [] My Coin package id : +- [] Faucet package id : +- [] 转账 `My Coin` hash: +- [] `Faucet Coin` address1 mint hash: +- [] `Faucet Coin` address2 mint hash: + +## 03 move NFT +- [] nft package id : +- [] nft object id : +- [] 转账 nft hash: +- [] scan上的NFT截图:![Scan截图](./images/你的图片地址) + +## 04 Move Game +- [] game package id : +- [] deposit Coin hash: +- [] withdraw `Coin` hash: +- [] play game hash: + +## 05 Move Swap +- [] swap package id : +- [] call swap CoinA-> CoinB hash : +- [] call swap CoinB-> CoinA hash : + +## 06 Dapp-kit SDK PTB +- [] save hash : + +## 07 Move CTF Check In +- [] CLI call 截图 : ![截图](./images/你的图片地址) +- [] flag hash : + +## 08 Move CTF Lets Move +- [] proof : +- [] flag hash : diff --git a/mover/dgu0323/scan/readme.md b/mover/dgu0323/scan/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/mover/dgu0323/scan/readme.md @@ -0,0 +1 @@ +