diff --git "a/mover/0xHoGan/co-learn-2411/images/b\347\253\231\345\205\263\346\263\250.png" "b/mover/0xHoGan/co-learn-2411/images/b\347\253\231\345\205\263\346\263\250.png" new file mode 100644 index 000000000..9d6f32a91 Binary files /dev/null and "b/mover/0xHoGan/co-learn-2411/images/b\347\253\231\345\205\263\346\263\250.png" differ diff --git a/mover/Ming-XX/code/readme.md b/mover/0xHoGan/co-learn-2411/images/readme.md similarity index 100% rename from mover/Ming-XX/code/readme.md rename to mover/0xHoGan/co-learn-2411/images/readme.md diff --git "a/mover/0xHoGan/co-learn-2411/images/task1/11\346\234\2105\346\227\245\350\257\276\347\250\213\345\255\246\344\271\240.png" "b/mover/0xHoGan/co-learn-2411/images/task1/11\346\234\2105\346\227\245\350\257\276\347\250\213\345\255\246\344\271\240.png" new file mode 100644 index 000000000..3905f14c4 Binary files /dev/null and "b/mover/0xHoGan/co-learn-2411/images/task1/11\346\234\2105\346\227\245\350\257\276\347\250\213\345\255\246\344\271\240.png" differ diff --git a/mover/0xHoGan/co-learn-2411/images/task1/SuiWallet.png b/mover/0xHoGan/co-learn-2411/images/task1/SuiWallet.png new file mode 100644 index 000000000..ed1f65df3 Binary files /dev/null and b/mover/0xHoGan/co-learn-2411/images/task1/SuiWallet.png differ diff --git a/mover/0xHoGan/co-learn-2411/images/task1/suiscan.png b/mover/0xHoGan/co-learn-2411/images/task1/suiscan.png new file mode 100644 index 000000000..5278dae18 Binary files /dev/null and b/mover/0xHoGan/co-learn-2411/images/task1/suiscan.png differ diff --git "a/mover/0xHoGan/co-learn-2411/images/task3/11\346\234\21012\346\227\245\350\257\276\347\250\213\345\255\246\344\271\240.png" "b/mover/0xHoGan/co-learn-2411/images/task3/11\346\234\21012\346\227\245\350\257\276\347\250\213\345\255\246\344\271\240.png" new file mode 100644 index 000000000..25b3a0a54 Binary files /dev/null and "b/mover/0xHoGan/co-learn-2411/images/task3/11\346\234\21012\346\227\245\350\257\276\347\250\213\345\255\246\344\271\240.png" differ diff --git "a/mover/0xHoGan/co-learn-2411/images/\345\205\263\346\263\250HOH.png" "b/mover/0xHoGan/co-learn-2411/images/\345\205\263\346\263\250HOH.png" new file mode 100644 index 000000000..c6e18b13c Binary files /dev/null and "b/mover/0xHoGan/co-learn-2411/images/\345\205\263\346\263\250HOH.png" differ diff --git "a/mover/0xHoGan/co-learn-2411/images/\347\273\231github\344\273\223\345\272\223star.png" "b/mover/0xHoGan/co-learn-2411/images/\347\273\231github\344\273\223\345\272\223star.png" new file mode 100644 index 000000000..a1780f924 Binary files /dev/null and "b/mover/0xHoGan/co-learn-2411/images/\347\273\231github\344\273\223\345\272\223star.png" differ diff --git a/mover/0xHoGan/co-learn-2411/project/readme.md b/mover/0xHoGan/co-learn-2411/project/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/mover/0xHoGan/co-learn-2411/project/readme.md @@ -0,0 +1 @@ + diff --git a/mover/0xHoGan/co-learn-2411/readme.md b/mover/0xHoGan/co-learn-2411/readme.md new file mode 100644 index 000000000..47a56259f --- /dev/null +++ b/mover/0xHoGan/co-learn-2411/readme.md @@ -0,0 +1,55 @@ +# 这个模板是2024年11月份的共学营才需要的 + +## b站,推特关注 + +- [] b站关注截图: ![关注截图](./images/b站关注.png) + + +## 为共学营宣传(在朋友圈或者群聊中转发海报/文章) + +- [] 宣传截图:![宣传截图](./images/你的图片地址) + +## 每周课程学习 + +- [] 第一周:![学习记录截图](./images/task1/11月5日课程学习.png) +- [] 第二周:![学习记录截图](./images/task3/11月12日课程学习.png) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 参加直播答疑 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 群里分享学习笔记 + +- [] 第一篇笔记 +- [] 第二篇笔记 +- [] 第三篇笔记 +- [] 第四篇笔记 + +## 对外输出学习笔记 + +- [] 第一篇笔记【学习笔记链接】 +- [] 第二篇笔记【学习笔记链接】 +- [] 第三篇笔记【学习笔记链接】 +- [] 第四篇笔记【学习笔记链接】 + +## 在HOH社区公众号发布自己的技术文章 + +- [] 第一篇笔记【公众号文章链接】 +- [] 第二篇笔记【公众号文章链接】 +- [] 第三篇笔记【公众号文章链接】 +- [] 第四篇笔记【公众号文章链接】 + +## 直播分享学习技巧/工具推荐 + +- [] 会议截图:![会议记录截图](./images/你的图片地址) + +## 提交项目 + +- [] 项目提交![项目截图](./images/你的图片地址) + + diff --git a/mover/0xHoGan/code/readme.md b/mover/0xHoGan/code/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/mover/Ming-XX/code/task1/hello_move/Move.lock b/mover/0xHoGan/code/task1/hello_move/Move.lock similarity index 79% rename from mover/Ming-XX/code/task1/hello_move/Move.lock rename to mover/0xHoGan/code/task1/hello_move/Move.lock index 30ab1cef8..cedc1b702 100644 --- a/mover/Ming-XX/code/task1/hello_move/Move.lock +++ b/mover/0xHoGan/code/task1/hello_move/Move.lock @@ -21,7 +21,7 @@ dependencies = [ ] [move.toolchain-version] -compiler-version = "1.37.1" +compiler-version = "1.37.3" edition = "2024.beta" flavor = "sui" @@ -29,6 +29,6 @@ flavor = "sui" [env.testnet] chain-id = "4c78adac" -original-published-id = "0xdd4ca7a8ef868cfe3b9ac142bf1f6ba5643196165a6f0f6f9d76628acfab9a52" -latest-published-id = "0xdd4ca7a8ef868cfe3b9ac142bf1f6ba5643196165a6f0f6f9d76628acfab9a52" +original-published-id = "0xcfbaa6e97ae0b3184cbc9b72eb9a1f21f82523aa32bccf86c9c27f88bd583a15" +latest-published-id = "0xcfbaa6e97ae0b3184cbc9b72eb9a1f21f82523aa32bccf86c9c27f88bd583a15" published-version = "1" diff --git a/mover/Ming-XX/code/task1/hello_move/Move.toml b/mover/0xHoGan/code/task1/hello_move/Move.toml similarity index 100% rename from mover/Ming-XX/code/task1/hello_move/Move.toml rename to mover/0xHoGan/code/task1/hello_move/Move.toml diff --git a/mover/0xHoGan/code/task1/hello_move/sources/hello_move.move b/mover/0xHoGan/code/task1/hello_move/sources/hello_move.move new file mode 100644 index 000000000..b2899ead7 --- /dev/null +++ b/mover/0xHoGan/code/task1/hello_move/sources/hello_move.move @@ -0,0 +1,19 @@ +module hello_move::hello ; + +use std::ascii::{String, string}; +use sui::object::{Self, UID}; +use sui::transfer::transfer; +use sui::tx_context::{TxContext, sender}; + +public struct Hello has key { + id: UID, + say: String +} + +fun init(ctx: &mut TxContext) { + let hello_move = Hello { + id: object::new(ctx), + say: string(b"0xHoGan"), + }; + transfer(hello_move, sender(ctx)); +} \ No newline at end of file diff --git a/mover/Ming-XX/code/task1/hello_move/tests/hello_move_tests.move b/mover/0xHoGan/code/task1/hello_move/tests/hello_move_tests.move similarity index 100% rename from mover/Ming-XX/code/task1/hello_move/tests/hello_move_tests.move rename to mover/0xHoGan/code/task1/hello_move/tests/hello_move_tests.move diff --git a/mover/0xHoGan/notes/readme.md b/mover/0xHoGan/notes/readme.md new file mode 100644 index 000000000..256dfc08a --- /dev/null +++ b/mover/0xHoGan/notes/readme.md @@ -0,0 +1,349 @@ +# Task1 Hello Move + +## 1.学习资源 + +* [Bootcamp 01_hello](https://github.com/hoh-zone/move-bootcamp/tree/main/01_hello) +* [任务指南](https://github.com/move-cn/letsmove/tree/main/task) +* [提交作业](https://github.com/move-cn/letsmove) +* [通用工具讲解(Vs Code、Git)](https://github.com/hoh-zone/lets-fullstack) + +## 2.Prerequisites(Liunx) + +``` +sudo apt-get update +sudo apt-get install curl git-all cmake gcc libssl-dev pkg-config libclang-dev libpq-dev build-essential +``` + +## 3.Install Sui(Liunx) + +1. Go to [Sui](https://github.com/MystenLabs/sui). +2. In the right pane, find the Releases section. +3. Click the release tagged Latest to open the release's page. +4. In the Assets section of the release, select the .tgz compressed file that corresponds to your operating system. +5. Extract all files from the .tgz file into the preferred location on your system. + +``` +wget .tgz +tar -zxvf .tgz +``` + +6. Navigate to the expanded folder. You should have the following extracted files: + +| Name | Description | +| ---- | ---- | +|move-analyzer | Language Server Protocol implementation. | +|sui | Main Sui binary.| +|sui-bridge | Sui native bridge.| +|sui-data-ingestion | Capture Full node data for indexer to store in a database.| +|sui-faucet | Local faucet to mint coins on local network.| +|sui-graphql-rpc | GraphQL service for Sui RPC. | +|sui-node | Run a local node.| +|sui-test-validator | Run test validators on a local network for development.| +|sui-tool | Provides utilities for Sui.| + +7. Add the folder containing the extracted files to ~/.bashrc. + +``` +export PATH=$PATH:~/sui +``` + +8. Start a new terminal session or type source ~/.bashrc to load the new PATH value. + +``` +source ~/.bashrc +``` + +## 4.Check Sui is Installed + +``` +Sui -V +``` + +## 5.Sui Wallet +* [SuiWallet(Chrome)](https://chromewebstore.google.com/detail/sui-wallet/opcgpfmipidbgpenhmajoajpbobppdil) + +## 6.Sui Explorer +* [Suiscan](https://suiscan.xyz/testnet/home) +* [SuiVision](https://testnet.suivision.xyz/) + +## 7.Sui CLI Command +* Get Sui Address + +``` +sui client addresses +``` + +tips:The first time you start Sui client without having a client.yaml file, the console displays the following message: + +``` +Config file ["``/client.yaml"] doesn't exist, do you want to connect to a Sui Full node server [y/N]? +``` + +* Get Sui Faucet + +``` +sui client faucet +``` + +* Request test tokens through cURL + +``` +curl --location --request POST 'https://faucet.testnet.sui.io/gas' +--header 'Content-Type: application/json' +--data-raw '{ + "FixedAmountRequest": { + "recipient": "``" + } +}' +``` + +* Get Sui Gas + +``` +sui client gas +``` + +* Add a Mnemonic Phrase to Sui +``` +sui keytool import "INPUT KEY_SCHEME" ed25519 +``` + +## 8.创建项目 + +``` +sui move new hello_move +``` + +* 将如下代码复制到sources/hello_move.move + +``` +module hello_move::hello ; + +use std::ascii::{String, string}; +use sui::object::{Self, UID}; +use sui::transfer::transfer; +use sui::tx_context::{TxContext, sender}; + +public struct Hello has key { + id: UID, + say: String +} + +fun init(ctx: &mut TxContext) { + let hello_move = Hello { + id: object::new(ctx), + say: string(b"move"), + }; + transfer(hello_move, sender(ctx)); +} +``` + +## 9.发布上链 + +``` +sui client publish +``` + +* 如遇到访问github网络问题,可修改Move.toml中的dependencies段 + +``` +[dependencies] +Sui = { git = "https://gitee.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" } +``` + +# Task2 Move Coin +## 1.学习资源 +* [Bootcamp 02_basic](https://github.com/hoh-zone/move-bootcamp/tree/main/02_basic) + +## 2.Move基础数据类型 +* 常量、变量的定义 +``` +let 常量名称: 类型 = 常量值; +let mut 变量名称: 类型 = 变量值; +``` + +* 数字类型(Number) + * Move只有6个无符号整数 + * Move没有负数和小数 + * 小数定义: a / b,只要放大整数的倍数 + * 负数定义: 前端展现和约定的方式表示,比如U8类型的1-127表示负数,128-255表示正数 + * 如果未指定类型,编译器会尝试推断类型,如果无法推断,则假定为U32 + * 有两种常用进制:十进制、以0x为前缀十六进制 + * 运算符: 加+、减-、乘*、除/、%取余数 + * 只有类型相同的才能做基本运算 + * as是Move的整数类型转换运算符,比如1u8 as u64 + * Move不支持类型的隐式转换 + +| u8 | Unsigned 8-bit | 0 - 255 | +| --- | --- | --- | +| u16 | Unsigned 16-bit | 0 - 65535 | +| u32 | Unsigned 32-bit | 0 - 4294967295 | +| u64 | Unsigned 64-bit | 0 - 2的64次方-1 | +| u128 | Unsigned 128-bit | 0 - 2的128次方-1 | +| u256 | Unsigned 256-bit | 0 - 2的256次方-1 | + +* 布尔类型(Bool) + * 值只有两种:true和false + * 支持与&&、或||、非!运算 + +* 地址类型(Address) + * 长度为32字节 + * 在表达式中,值需要使用前缀@ + * Move.toml中的[addresses]定义,就可以在代码中引用 +``` +[addresses] +hello_move = "0x0" +let address1: address = @hello_move +``` + +* 编译合约 +``` +sui move build +``` + +## 3.包、模块、方法 +* 包 + * 包是同一个合约地址包含的全部代码的集合,由很多模块组成 + +* 模块(Module) + * module hello_move::hello + * 关键字module表示包 + * hello_move来自Move.toml的[addresses] + * hello和外面的文件名对应 + +* 方法(Function) + * 语法 +``` +fun <[type_parameters: constraint],*>([identifier: type],*):    +``` + + * 方法访问权限控制 + +| 方法签名 | 调用范围 | 返回值 | +| --- | --- | --- | +| fun call() | 只能在模块内调用 | 可以有 | +| public fun call() | 全部合约能调用 | 可以有 | +| public entry fun call() | 全部合约能调用和Dapp(RPC)调用 | 无 | +| entry fun call() | 只能Dapp(RPC)调用 | 无 | +| public(package) fun call() | 只能当前的模块能调用 | 可以有 | + * init方法 + * 只能是私有的 + * 会在发布合约时自动调用一次 + * 只有两种形式 +``` +fun init(ctx: &mut TxContext) {} +fun init(otw: EXAMPLE, ctx: &mut TxContext) {} +``` + +## 4.第一个Dapp +* NodeJs安装 +``` +curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash - +sudo apt-get install -y nodejs + +# Node.js version +node -v + +# npm version +npm -v + +sudo npm install -g pnpm +``` + +* [脚手架](https://sdk.mystenlabs.com/dapp-kit/create-dapp) + * 创建Dapp项目,会提供两种模板 react-client-dapp(仅有前端) 和 react-e2e-counter(前端和后端) +``` +pnpm create @mysten/dapp --template react-e2e-counter +``` + +* 发布上链 +``` +cd my-first-sui-dapp/move/counter +sui client publish +``` + +* 安装依赖 +``` +cd my-first-sui-dapp +pnpm install +``` + +* 添加合约地址 + * my-first-sui-dapp/src下的constants.ts添加部署的合约地址 + +* 运行Dapp项目 +``` +pnpm dev +``` + +## 5.基础语法 +* 注释 +``` +// # 注释 +/* */ # 块注释 +/// # 文档注释 +``` + +* if(条件语句) +``` +if (condition) true_branch else () +``` + +* while(条件循环语句) + * 满足条件为True,才会执行表达式 +``` +while ( idx <= 99 ) { + idx = idx + 1; + if ( idx % 2 == 0) continue; # continue 跳出本次循环 + # break 直接跳出循环 +} +``` + +* loop(无限循环语句) + * 没有条件判断,会一直循环,直到break loop结束。 +``` +loop { + i = i + 1 +} +``` + +## 6.Object定义 +* Struct(结构体) + * 结构体是Move中创建自定义类型的唯一方法。 + * 只能在模块内部定义,并且以关键字public struct开头 + * +``` +public struct NAME { + FIELD1: TYPE1, + FIELD2: TYPE2, + ... +} +``` + +* 数据模型 + * 以太坊和Aptos通过账户(account)余额来追踪区块链状态 + * 比特币和Cardano则使用UTXO来记账 + +* 对象(Object) + * 对象在sui上存储,维护了一个全局的Map数据结构:Map + * 对象定义 + * 必须有key能力 + * 第一个字段必须是ID,而且类型是sui::object::UID + * + +* + + +# Task3 Move NFT + + + +# Task4 Move Game + +# Task5 Move Swap + +# Task6 SDK PTB + +# Task7 Move CTF Check In + +# Task8 Move CTF POW diff --git a/mover/0xHoGan/readme.md b/mover/0xHoGan/readme.md new file mode 100644 index 000000000..f43942543 --- /dev/null +++ b/mover/0xHoGan/readme.md @@ -0,0 +1,54 @@ +## 基本信息 +- Sui钱包地址: `0x034b72d1519ce9fcd53a3e548f25e992abd7c6edf34c5ee794cad764963c464e` +> 首次参与需要完成第一个任务注册好钱包地址才被合并,并且后续学习奖励会打入这个地址 +- github: `0xHoGan` + +## 个人简介 +- 工作经验: 8年 +- 技术栈: `Java` `Python` +> 重要提示 请认真写自己的简介 +- 多年后端开发经验,熟悉Java、Python +- 联系方式: tg: `hogan0x` + +## 任务 + +## 01 hello move +- [√] Sui cli version: sui 1.37.3-b8eb8920aeca +- [√] Sui钱包截图: ![Sui钱包截图](./co-learn-2411/images/task1/SuiWallet.png) +- [√] package id: 0xcfbaa6e97ae0b3184cbc9b72eb9a1f21f82523aa32bccf86c9c27f88bd583a15 +- [√] package id 在 scan上的查看截图:![Scan截图](./co-learn-2411/images/task1/suiscan.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/0xHoGan/scan/readme.md b/mover/0xHoGan/scan/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/mover/0xHoGan/scan/readme.md @@ -0,0 +1 @@ + diff --git a/mover/EarthChen/code/readme.md b/mover/EarthChen/code/readme.md index e69de29bb..a882ab1ff 100644 --- a/mover/EarthChen/code/readme.md +++ b/mover/EarthChen/code/readme.md @@ -0,0 +1,45 @@ +# task4 猜数游戏信息 + +## testnet + +* packageId: 0x549616dbefd766ce256f00b4662eca840964dff08174f6206d141157e9b2bebd +* UpgradeCapID:0x3eea017ced2d484f0593b9b7a4bd7fd9da5504177cebccb7581ec18f39b99271 +* guess_number::PrizePoolCap: 0xc362a9db9ecfbe3fa4043dd00be11c1c0e52158554ff457c83d472ae6d49acd6 + + +### faucetcoin + +* pacakgeId: 0x5d56e4b9ef9e4d7eed8ea64b337eb9220d9ca55c34e795f2db49f1b26fe248bf +* 0x2::package::UpgradeCap: 0x1443e8d5e94f7080ae73e0c2b1c9907b3d16df740d98e361b5264f7325535b62 +* coin: 0x27b93ff04870aa99ce50ca35694fb66d5678629088cacefaa78c6d7d5f20763a + + +## mainnet + +* publish hash: BJT1Dga7cHKK6B5KKPq2JQe1RBzwcaUH3nsRZddMxPmQ +* packageId:0x472b8f0ff90d472069fb57f33a9899243debb7c3201f1dc3bb2b49d15ec537ee +* UpgradeCapID:0x05d90f14cd51264d703c84c837e7febb4f556e16cd0306f8646f265f0352a4ea +* guess_number::PrizePoolCap:0xf88111d290581033164f4222c2cc8f827594b8431406bf1e378f64b138bd72d3 +* inithash: HRaT2c1UsoXfAz5y9EhWLuhMuhqkWn3zzP8gZv5THatj +* poolId: 0x7dddecadd6f32cd78e5897991f12632ac02d9cbe9315835b5406e29c01b45b5f + + + +# task5 bank + +## testnet + +* packageId: 0xdd4c3f39b2446f596a0abb7c764266b43719adc4f4b8a9c488b81d096a8663c4 +* earthchen::Bank : 0x1965c930d133fc49dcdc1ac55b6b18a8ac5b782125796d94902ddbc52216f64a +* amdin: 0x15c02c340a6948e80fb74723a9c15af3192cbf4651dc603c879dbd7a9656d1dc +* deposit_mycoin hash: 8SPPuNUjoorqYQa4xo5P3jFYakjFFtky1EDyLFC8B33p +* deposit_faucetcoin hash: APpff8GhwNfd2Z494frcaLoDPuWNFkFfYFsPPgCqrtsD +* swap_mycoin hash: 3vLWRgDJMefi4449HS9KSjQS5PQwKjQmpLzdeZWHgBbX + + +## mainnet + +* packageId: 0x6d4dd7fffe36cce18887a19a935df4cd45633546c947756ce7d45d1fbca9766e +* bank: 0x0a307a8b9d0a97d911973ad395cdeb9e9e213b2370087e33dea48bee16b7e149 +* deposit_mycoin hash:C1MnhbfeTsnwdNRjf1jmaAcLRW71K6LDCb12LAk8GmMa +* swap_ diff --git a/mover/EarthChen/code/task2/faucetcoin/Move.lock b/mover/EarthChen/code/task2/faucetcoin/Move.lock index 82d2037ad..52de34a46 100644 --- a/mover/EarthChen/code/task2/faucetcoin/Move.lock +++ b/mover/EarthChen/code/task2/faucetcoin/Move.lock @@ -2,7 +2,7 @@ [move] version = 3 -manifest_digest = "040FB3E59D8A1F2E682DCABB7B08CE36CD1FC73BDE7213AB39F548FED3A290C9" +manifest_digest = "36AAF1CDEC036D88764BAC3DCDE58C0D7D361D80DBC1ED0F543FFC7DC8AA1BA6" deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" dependencies = [ { id = "Sui", name = "Sui" }, @@ -10,18 +10,18 @@ dependencies = [ [[move.package]] id = "MoveStdlib" -source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/move-stdlib" } +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/mainnet", subdir = "crates/sui-framework/packages/sui-framework" } +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.37.1" +compiler-version = "1.37.3" edition = "2024.beta" flavor = "sui" @@ -29,8 +29,8 @@ flavor = "sui" [env.testnet] chain-id = "4c78adac" -original-published-id = "0x586cd3af1a22322f864d4f97aeb94287918e4e8cfe5f82906419ecef0e2df04a" -latest-published-id = "0x586cd3af1a22322f864d4f97aeb94287918e4e8cfe5f82906419ecef0e2df04a" +original-published-id = "0x5d56e4b9ef9e4d7eed8ea64b337eb9220d9ca55c34e795f2db49f1b26fe248bf" +latest-published-id = "0x5d56e4b9ef9e4d7eed8ea64b337eb9220d9ca55c34e795f2db49f1b26fe248bf" published-version = "1" [env.mainnet] diff --git a/mover/EarthChen/code/task4/earthchen_game/Move.lock b/mover/EarthChen/code/task4/earthchen_game/Move.lock new file mode 100644 index 000000000..7be1da240 --- /dev/null +++ b/mover/EarthChen/code/task4/earthchen_game/Move.lock @@ -0,0 +1,49 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "3E7C99C33A2E20F63FB3D0534558440BAC3F2A5097CA4C5801FAED92F94005EE" +deps_digest = "3C4103934B1E040BB6B23F1D610B4EF9F2F1166A50A104EADCF77467C004C600" +dependencies = [ + { id = "Sui", name = "Sui" }, + { id = "faucetcoin", name = "faucetcoin" }, +] + +[[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.package]] +id = "faucetcoin" +source = { local = "../../task2/faucetcoin" } + +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[move.toolchain-version] +compiler-version = "1.37.3" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x549616dbefd766ce256f00b4662eca840964dff08174f6206d141157e9b2bebd" +latest-published-id = "0x549616dbefd766ce256f00b4662eca840964dff08174f6206d141157e9b2bebd" +published-version = "1" + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0x472b8f0ff90d472069fb57f33a9899243debb7c3201f1dc3bb2b49d15ec537ee" +latest-published-id = "0x472b8f0ff90d472069fb57f33a9899243debb7c3201f1dc3bb2b49d15ec537ee" +published-version = "1" diff --git a/mover/EarthChen/code/task4/earthchen_game/Move.toml b/mover/EarthChen/code/task4/earthchen_game/Move.toml new file mode 100644 index 000000000..d22f36f90 --- /dev/null +++ b/mover/EarthChen/code/task4/earthchen_game/Move.toml @@ -0,0 +1,38 @@ +[package] +name = "guess_number" +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" } +faucetcoin = { local = "../../task2/faucetcoin" } + +# 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] +guess_number = "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/EarthChen/code/task4/earthchen_game/sources/Move.toml b/mover/EarthChen/code/task4/earthchen_game/sources/Move.toml new file mode 100644 index 000000000..4ad983435 --- /dev/null +++ b/mover/EarthChen/code/task4/earthchen_game/sources/Move.toml @@ -0,0 +1,38 @@ +[package] +name = "guess_number" +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/mainnet" } +faucetcoin = { local = "../faucetcoin" } + +# 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] +guess_number = "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/EarthChen/code/task4/earthchen_game/sources/earthchen_game.move b/mover/EarthChen/code/task4/earthchen_game/sources/earthchen_game.move new file mode 100644 index 000000000..7c539bc8e --- /dev/null +++ b/mover/EarthChen/code/task4/earthchen_game/sources/earthchen_game.move @@ -0,0 +1,113 @@ +/// Module: guess_number +module guess_number::guess_number { + use sui::object::{Self, UID}; + use sui::balance::{Self, Balance}; + use sui::coin::{Self, Coin}; + use sui::transfer::{transfer, share_object, public_transfer}; + use sui::tx_context::{Self, sender}; + use sui::bcs; + use faucetcoin::faucetcoin::FAUCETCOIN; + use std::debug::print; + use std::string::utf8; + + const ENotAllow: u64 = 0; + const EInvalidStake: u64 = 1; + const Rate: u64 = 2; + const MaxStake: u64 = 1000; + const MinStake: u64 = 10; + + // otw + public struct GUESS_NUMBER has drop {} + + // 奖金池,管理员为earthchen + public struct PrizePool has key { + id: UID, + prize: Balance, + earthchen: address // my github id + } + + // 用于创建、初始化奖金池,之后删除 + public struct PrizePoolCap has key { + id: UID + } + + // 创建Cap,并发送给earthchen + fun init(_otw: GUESS_NUMBER, ctx: &mut TxContext) { + let prize_pool_cap = PrizePoolCap { + id: object::new(ctx) + }; + transfer(prize_pool_cap, tx_context::sender(ctx)); + } + + // earthchen用于创建奖金池,并注入初始奖金 + public entry fun initialize_pool(cap: PrizePoolCap, coin: Coin, ctx: &mut TxContext) { + let prize_pool = PrizePool { + id: object::new(ctx), + prize: coin.into_balance(), + earthchen: sender(ctx) + }; + share_object(prize_pool); + let PrizePoolCap { id } = cap; + object::delete(id); + } + + + + // 给奖金池注入更多奖金,任何人都有权限 + public entry fun top_up(pool: &mut PrizePool, coin: Coin) { + coin::put(&mut pool.prize, coin) + } + + // 在奖金池取出指定数量金额 + public entry fun withdraw(pool: &mut PrizePool, amount: u64, ctx: &mut TxContext) { + assert!(pool.earthchen == sender(ctx), ENotAllow); + let balance = pool.prize.split(amount); + let coin = coin::from_balance(balance, ctx); + public_transfer(coin, sender(ctx)); + } + + // 在奖金池取出所有奖金 + public fun withdraw_all(pool: &mut PrizePool, ctx: &mut TxContext) { + assert!(pool.earthchen == sender(ctx), ENotAllow); + let balance = pool.prize.withdraw_all(); + let coin = coin::from_balance(balance, ctx); + public_transfer(coin, sender(ctx)); + } + + // 查询奖金池中剩余的金额 + public fun query_prize(pool: &mut PrizePool):u64 { + pool.prize.value() + } + + // 通过交易hash的方式获取随机数 + fun get_random_num(ctx: &mut TxContext): u8 { + let tx_digest = tx_context::digest(ctx); + let tx_digest_u64= bcs::peel_u8(&mut bcs::new(*tx_digest)); + let random_index: u8 = tx_digest_u64 % 3; + random_index + } + + // 开始游戏 + public entry fun start_game(pool: &mut PrizePool, geuss_number: u8, stake: Coin, ctx: &mut TxContext): bool { + let balance = stake.into_balance(); + let value = balance.value(); + let mut res = false; + assert!(value < MaxStake && value > MinStake, EInvalidStake); + pool.prize.join(balance); + let the_number = get_random_num(ctx); + print(&utf8(b"The right number is:")); + print(&the_number); + if (geuss_number == the_number) { + let prize_value = pool.prize.split(Rate * value); + let prize_coin = coin::from_balance(prize_value, ctx); + public_transfer(prize_coin, sender(ctx)); + res = true; + }; + res + } + + #[test_only] + public fun init_for_testing(ctx: &mut TxContext) { + init(GUESS_NUMBER {}, ctx); + } +} diff --git a/mover/EarthChen/code/task5/earthchen/Move.lock b/mover/EarthChen/code/task5/earthchen/Move.lock new file mode 100644 index 000000000..d872c60c0 --- /dev/null +++ b/mover/EarthChen/code/task5/earthchen/Move.lock @@ -0,0 +1,58 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "BD917155367008DF694FFC9BE7067220688091408D96879871417DE548347128" +deps_digest = "060AD7E57DFB13104F21BE5F5C3759D03F0553FC3229247D9A7A6B45F50D03A3" +dependencies = [ + { id = "Sui", name = "Sui" }, + { id = "faucetcoin", name = "faucetcoin" }, + { id = "mycoin", name = "mycoin" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[[move.package]] +id = "faucetcoin" +source = { local = "../../task2/faucetcoin" } + +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "mycoin" +source = { local = "../../task2/mycoin" } + +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[move.toolchain-version] +compiler-version = "1.37.3" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0xdd4c3f39b2446f596a0abb7c764266b43719adc4f4b8a9c488b81d096a8663c4" +latest-published-id = "0xdd4c3f39b2446f596a0abb7c764266b43719adc4f4b8a9c488b81d096a8663c4" +published-version = "1" + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0x6d4dd7fffe36cce18887a19a935df4cd45633546c947756ce7d45d1fbca9766e" +latest-published-id = "0x6d4dd7fffe36cce18887a19a935df4cd45633546c947756ce7d45d1fbca9766e" +published-version = "1" diff --git a/mover/EarthChen/code/task5/earthchen/Move.toml b/mover/EarthChen/code/task5/earthchen/Move.toml new file mode 100644 index 000000000..ed80fe515 --- /dev/null +++ b/mover/EarthChen/code/task5/earthchen/Move.toml @@ -0,0 +1,39 @@ +[package] +name = "earhchen" +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/mainnet" } +faucetcoin = { local = "../../task2/faucetcoin" } +mycoin = { local = "../../task2/mycoin" } + +# 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] +earthchen = "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/EarthChen/code/task5/earthchen/sources/earthchen.move b/mover/EarthChen/code/task5/earthchen/sources/earthchen.move new file mode 100644 index 000000000..e69d0282a --- /dev/null +++ b/mover/EarthChen/code/task5/earthchen/sources/earthchen.move @@ -0,0 +1,80 @@ +/// Module: earthchen +module earthchen::earthchen { + use sui::coin::{Self, Coin}; + use sui::balance::{Self, Balance}; + use sui::transfer::{Self, transfer, share_object, public_transfer}; + use mycoin::mycoin::MYCOIN; + use faucetcoin::faucetcoin::FAUCETCOIN; + use sui::tx_context::sender; + + public struct Bank has key { + id: UID, + mycoin: Balance, + faucetcoin: Balance, + mc_prop: u64, + fc_prop: u64 + } + + public struct AdaminCap has key { + id: UID + } + + fun init(ctx: &mut TxContext) { + let bank = Bank { + id: object::new(ctx), + mycoin: balance::zero(), + faucetcoin: balance::zero(), + mc_prop: 1000, // mc : fc = mc_prop : fc_prop + fc_prop: 7300 + }; + share_object(bank); + let adamin_cap = AdaminCap { + id: object::new(ctx) + }; + transfer(adamin_cap, sender(ctx)); + } + + public entry fun deposit_mycoin(bank: &mut Bank, mycoin: Coin, _ctx: &mut TxContext) { + let balance = coin::into_balance(mycoin); + bank.mycoin.join(balance); + } + + public entry fun deposit_faucetcoin(bank: &mut Bank, faucetcoin: Coin, _ctx: &mut TxContext) { + let balance = coin::into_balance(faucetcoin); + bank.faucetcoin.join(balance); + } + + public entry fun withdraw_mycoin(_: &AdaminCap, bank: &mut Bank, amount: u64, ctx: &mut TxContext) { + let amount = bank.mycoin.split(amount); + let mycoin = coin::from_balance(amount, ctx); + public_transfer(mycoin, sender(ctx)); + } + + public entry fun withdraw_faucetcoin(_: &AdaminCap, bank: &mut Bank, amount: u64, ctx: &mut TxContext) { + let amount = bank.mycoin.split(amount); + let mycoin = coin::from_balance(amount, ctx); + public_transfer(mycoin, sender(ctx)); + } + + public entry fun swap_mycoin(bank: &mut Bank, faucetcoin: Coin, ctx: &mut TxContext) { + let fc_balance = faucetcoin.into_balance(); + let fc_amt = fc_balance.value(); + let mc_amt = bank.mycoin.split(fc_amt * bank.mc_prop / bank.fc_prop); + bank.faucetcoin.join(fc_balance); + public_transfer(coin::from_balance(mc_amt, ctx), sender(ctx)); + } + + public entry fun swap_faucetcoin(bank: &mut Bank, mycoin: Coin, ctx: &mut TxContext) { + let mc_balance = mycoin.into_balance(); + let mc_amt = mc_balance.value(); + let fc_amt = bank.faucetcoin.split(mc_amt * bank.fc_prop / bank.mc_prop); + bank.mycoin.join(mc_balance); + public_transfer(coin::from_balance(fc_amt, ctx), sender(ctx)); + } + + #[test_only] + public fun init_for_testing(ctx: &mut TxContext) { + init(ctx); + } +} + diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/README.md b/mover/EarthChen/code/task6/my-first-sui-dapp/README.md new file mode 100644 index 000000000..d0889dcae --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/README.md @@ -0,0 +1,35 @@ +# Sui dApp Starter Template + +This dApp was created using `@mysten/create-dapp` that sets up a basic React +Client dApp using the following tools: + +- [React](https://react.dev/) as the UI framework +- [TypeScript](https://www.typescriptlang.org/) for type checking +- [Vite](https://vitejs.dev/) for build tooling +- [Radix UI](https://www.radix-ui.com/) for pre-built UI components +- [ESLint](https://eslint.org/) +- [`@mysten/dapp-kit`](https://sdk.mystenlabs.com/dapp-kit) for connecting to + wallets and loading data +- [pnpm](https://pnpm.io/) for package management + +## Starting your dApp + +To install dependencies you can run + +```bash +pnpm install +``` + +To start your dApp in development mode run + +```bash +pnpm dev +``` + +## Building + +To build your app for deployment you can run + +```bash +pnpm build +``` diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/index.html b/mover/EarthChen/code/task6/my-first-sui-dapp/index.html new file mode 100644 index 000000000..bb7f75b16 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/index.html @@ -0,0 +1,59 @@ + + + + + + + Sui dApp Starter + + + + +
+ + + diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/package.json b/mover/EarthChen/code/task6/my-first-sui-dapp/package.json new file mode 100644 index 000000000..0cd582fe9 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/package.json @@ -0,0 +1,36 @@ +{ + "name": "my-first-sui-dapp", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@mysten/dapp-kit": "0.14.36", + "@mysten/sui": "1.14.4", + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/themes": "^3.1.1", + "@tanstack/react-query": "^5.50.1", + "navi-sdk": "^1.4.1", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^7.16.0", + "@typescript-eslint/parser": "^7.16.0", + "@vitejs/plugin-react-swc": "^3.7.0", + "eslint": "^9.6.0", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.7", + "prettier": "^3.3.2", + "typescript": "^5.5.3", + "vite": "^5.4.11" + } +} \ No newline at end of file diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/pnpm-lock.yaml b/mover/EarthChen/code/task6/my-first-sui-dapp/pnpm-lock.yaml new file mode 100644 index 000000000..e3eff5c45 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/pnpm-lock.yaml @@ -0,0 +1,4668 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@mysten/dapp-kit': + specifier: 0.14.36 + version: 0.14.36(@tanstack/react-query@5.60.5(react@18.3.1))(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@mysten/sui': + specifier: 1.14.4 + version: 1.14.4(typescript@5.6.3) + '@radix-ui/colors': + specifier: ^3.0.0 + version: 3.0.0 + '@radix-ui/react-icons': + specifier: ^1.3.0 + version: 1.3.2(react@18.3.1) + '@radix-ui/themes': + specifier: ^3.1.1 + version: 3.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-query': + specifier: ^5.50.1 + version: 5.60.5(react@18.3.1) + navi-sdk: + specifier: ^1.4.1 + version: 1.4.1(@types/node@22.9.0)(typescript@5.6.3) + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/react': + specifier: ^18.3.3 + version: 18.3.12 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.1 + '@typescript-eslint/eslint-plugin': + specifier: ^7.16.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3) + '@typescript-eslint/parser': + specifier: ^7.16.0 + version: 7.18.0(eslint@9.15.0)(typescript@5.6.3) + '@vitejs/plugin-react-swc': + specifier: ^3.7.0 + version: 3.7.1(vite@5.4.11(@types/node@22.9.0)) + eslint: + specifier: ^9.6.0 + version: 9.15.0 + eslint-plugin-react-hooks: + specifier: ^4.6.2 + version: 4.6.2(eslint@9.15.0) + eslint-plugin-react-refresh: + specifier: ^0.4.7 + version: 0.4.14(eslint@9.15.0) + prettier: + specifier: ^3.3.2 + version: 3.3.3 + typescript: + specifier: ^5.5.3 + version: 5.6.3 + vite: + specifier: ^5.4.11 + version: 5.4.11(@types/node@22.9.0) + +packages: + + '@0no-co/graphql.web@1.0.11': + resolution: {integrity: sha512-xuSJ9WXwTmtngWkbdEoopMo6F8NLtjy84UNAMsAr5C3/2SgAL/dEU10TMqTIsipqPQ8HA/7WzeqQ9DEQxSvPPA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + + '@0no-co/graphqlsp@1.12.16': + resolution: {integrity: sha512-B5pyYVH93Etv7xjT6IfB7QtMBdaaC07yjbhN6v8H7KgFStMkPvi+oWYBTibMFRMY89qwc9H8YixXg8SXDVgYWw==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + + '@digitak/grubber@3.1.4': + resolution: {integrity: sha512-pqsnp2BUYlDoTXWG34HWgEJse/Eo1okRgNex8IG84wHrJp8h3SakeR5WhB4VxSA2+/D+frNYJ0ch3yXzsfNDoA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.17.19': + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.17.19': + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.17.19': + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.17.19': + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.17.19': + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.17.19': + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.17.19': + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.17.19': + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.17.19': + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.17.19': + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.17.19': + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.17.19': + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.17.19': + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.17.19': + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.17.19': + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.17.19': + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.17.19': + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.17.19': + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.17.19': + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.17.19': + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.17.19': + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.17.19': + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.0': + resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.0': + resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.15.0': + resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.3': + resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@gql.tada/cli-utils@1.6.3': + resolution: {integrity: sha512-jFFSY8OxYeBxdKi58UzeMXG1tdm4FVjXa8WHIi66Gzu9JWtCE6mqom3a8xkmSw+mVaybFW5EN2WXf1WztJVNyQ==} + peerDependencies: + '@0no-co/graphqlsp': ^1.12.13 + '@gql.tada/svelte-support': 1.0.1 + '@gql.tada/vue-support': 1.0.1 + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + peerDependenciesMeta: + '@gql.tada/svelte-support': + optional: true + '@gql.tada/vue-support': + optional: true + + '@gql.tada/internal@1.0.8': + resolution: {integrity: sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@mysten/bcs@0.11.1': + resolution: {integrity: sha512-xP85isNSYUCHd3O/g+TmZYmg4wK6cU8q/n/MebkIGP4CYVJZz2wU/G24xIZ3wI+0iTop4dfgA5kYrg/DQKCUzA==} + + '@mysten/bcs@1.1.0': + resolution: {integrity: sha512-yy9/1Y4d0FlRywS1+9ze/T7refCbrvwFwJIOKs9M3QBK1njbcHZp+LkVeLqBvIJA5eZ3ZCzmhQ1Xq4Sed5mEBA==} + + '@mysten/dapp-kit@0.14.36': + resolution: {integrity: sha512-0eQsiSUSRJ9wk6E5Bm66QxRqX0GUZFPAhHQvG6eOdfv9/I4L60cXPu1x4Rrhv7vmyFis3g/5bFKbmRM4wJ9sow==} + peerDependencies: + '@tanstack/react-query': ^5.0.0 + react: '*' + + '@mysten/sui.js@0.54.1': + resolution: {integrity: sha512-TSmGIX7U9O/uS9EKIQdv7/S69KTbBhMJVelXCafJE6IJw8iB9cN9uLu0+uklkBSDrbRmLSEY70jMr3uRFjReIg==} + engines: {node: '>=16'} + deprecated: This package has been renamed to @mysten/sui, please update to use the renamed package. + + '@mysten/sui@1.14.4': + resolution: {integrity: sha512-9d79tu7PUfRXc8TNYIHqxfH+iJN29j0I8Fc913w6wywUSOaCnUDMtjKcPr1o/8yILjaB86vswsK3mqTXX0QFrA==} + engines: {node: '>=18'} + + '@mysten/wallet-standard@0.13.13': + resolution: {integrity: sha512-kzJBb4DL7HdU6img7F9iySu5giiNrxWzYFU1XuzL6aRlNkXYx/KUszMe3sUkwb3TCWDZTwQ16GWuRGJQpD84cA==} + + '@mysten/zksend@0.12.2': + resolution: {integrity: sha512-0U7olaq4iRE85NHUXM3yj3lCqZforofGcxT3Kw//24LVSRyyNRKlCL1bLl0w+WdACxvbznD3heDXj0ZXVfeKVg==} + + '@noble/curves@1.6.0': + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pythnetwork/price-service-client@1.9.0': + resolution: {integrity: sha512-SLm3IFcfmy9iMqHeT4Ih6qMNZhJEefY14T9yTlpsH2D/FE5+BaGGnfcexUifVlfH6M7mwRC4hEFdNvZ6ebZjJg==} + deprecated: This package is deprecated and is no longer maintained. Please use @pythnetwork/hermes-client instead. + + '@pythnetwork/price-service-sdk@1.7.1': + resolution: {integrity: sha512-xr2boVXTyv1KUt/c6llUTfbv2jpud99pWlMJbFaHGUBoygQsByuy7WbjIJKZ+0Blg1itLZl0Lp/pJGGg8SdJoQ==} + + '@pythnetwork/pyth-sui-js@2.1.0': + resolution: {integrity: sha512-oSfpqtLATTEVaac/YbaRQBvOI7DM+Qds5O0GJjEcky7UQRtz/tlU9tjQ6VRn3vm8IXw8P1mKzJcaTIO134X9Sw==} + + '@radix-ui/colors@3.0.0': + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} + + '@radix-ui/number@1.1.0': + resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + + '@radix-ui/primitive@1.1.0': + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + + '@radix-ui/react-accessible-icon@1.1.0': + resolution: {integrity: sha512-i9Zg4NOSXlfUva0agzI2DjWrvFJm9uO4L6CMW7nmMa5CIOOX/Yin894W7WwjodFQWPwe5kmAJ4JF33R8slKI2g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-alert-dialog@1.1.2': + resolution: {integrity: sha512-eGSlLzPhKO+TErxkiGcCZGuvbVMnLA1MTnyBksGOeGRGkxHiiJUujsjmNTdWTm4iHVSRaUao9/4Ur671auMghQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-arrow@1.1.0': + resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-aspect-ratio@1.1.0': + resolution: {integrity: sha512-dP87DM/Y7jFlPgUZTlhx6FF5CEzOiaxp2rBCKlaXlpH5Ip/9Fg5zZ9lDOQ5o/MOfUlf36eak14zoWYpgcgGoOg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-avatar@1.1.1': + resolution: {integrity: sha512-eoOtThOmxeoizxpX6RiEsQZ2wj5r4+zoeqAwO0cBaFQGjJwIH3dIX0OCxNrCyrrdxG+vBweMETh3VziQG7c1kw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-checkbox@1.1.2': + resolution: {integrity: sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-collection@1.1.0': + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.0': + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context-menu@2.2.2': + resolution: {integrity: sha512-99EatSTpW+hRYHt7m8wdDlLtkmTovEe8Z/hnxUPV+SKuuNL5HWNhQI4QSdjZqNSgXHay2z4M3Dym73j9p2Gx5Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-context@1.1.0': + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.1': + resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dialog@1.1.2': + resolution: {integrity: sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-direction@1.1.0': + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.1': + resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-dropdown-menu@2.1.2': + resolution: {integrity: sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.1': + resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.0': + resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-hover-card@1.1.2': + resolution: {integrity: sha512-Y5w0qGhysvmqsIy6nQxaPa6mXNKznfoGjOfBgzOjocLxr2XlSjqBMYQQL+FfyogsMuX+m8cZyQGYhJxvxUzO4w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-icons@1.3.2': + resolution: {integrity: sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc + + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-menu@2.1.2': + resolution: {integrity: sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-navigation-menu@1.2.1': + resolution: {integrity: sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.1.2': + resolution: {integrity: sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.0': + resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.2': + resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.1': + resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.0.0': + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-progress@1.1.0': + resolution: {integrity: sha512-aSzvnYpP725CROcxAOEBVZZSIQVQdHgBr2QQFKySsaD14u8dNT0batuXI+AAGDdAHfXH8rbnHmjYFqVJ21KkRg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-radio-group@1.2.1': + resolution: {integrity: sha512-kdbv54g4vfRjja9DNWPMxKvXblzqbpEC8kspEkZ6dVP7kQksGCn+iZHkcCz2nb00+lPdRvxrqy4WrvvV1cNqrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.0': + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-scroll-area@1.2.1': + resolution: {integrity: sha512-FnM1fHfCtEZ1JkyfH/1oMiTcFBQvHKl4vD9WnpwkLgtF+UmnXMCad6ECPTaAjcDjam+ndOEJWgHyKDGNteWSHw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-select@2.1.2': + resolution: {integrity: sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slider@1.2.1': + resolution: {integrity: sha512-bEzQoDW0XP+h/oGbutF5VMWJPAl/UU8IJjr7h02SOHDIIIxq+cep8nItVNoBV+OMmahCdqdF38FTpmXoqQUGvw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.1.0': + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-switch@1.1.1': + resolution: {integrity: sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tabs@1.1.1': + resolution: {integrity: sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle-group@1.1.0': + resolution: {integrity: sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle@1.1.0': + resolution: {integrity: sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-tooltip@1.1.4': + resolution: {integrity: sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.0': + resolution: {integrity: sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.0': + resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.0': + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.1.0': + resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.0': + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + + '@radix-ui/themes@3.1.6': + resolution: {integrity: sha512-4uaUK0E+3ZRURohKNqnzG8LciTJcpppuBbYxkp7miLyPiaXBwKTrEttdQpExsp/fP6J+ss+JHy5FJhU5lboQkg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: 16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: 16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@rollup/rollup-android-arm-eabi@4.27.3': + resolution: {integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.27.3': + resolution: {integrity: sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.27.3': + resolution: {integrity: sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.27.3': + resolution: {integrity: sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.27.3': + resolution: {integrity: sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.27.3': + resolution: {integrity: sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.27.3': + resolution: {integrity: sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.27.3': + resolution: {integrity: sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.27.3': + resolution: {integrity: sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.27.3': + resolution: {integrity: sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': + resolution: {integrity: sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.27.3': + resolution: {integrity: sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-s390x-gnu@4.27.3': + resolution: {integrity: sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.27.3': + resolution: {integrity: sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.27.3': + resolution: {integrity: sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.27.3': + resolution: {integrity: sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.27.3': + resolution: {integrity: sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.27.3': + resolution: {integrity: sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==} + cpu: [x64] + os: [win32] + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/bip32@1.5.0': + resolution: {integrity: sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==} + + '@scure/bip39@1.4.0': + resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@suchipi/femver@1.0.0': + resolution: {integrity: sha512-bprE8+K5V+DPX7q2e2K57ImqNBdfGHDIWaGI5xHxZoxbKOuQZn4wzPiUxOAHnsUr3w3xHrWXwN7gnG/iIuEMIg==} + + '@swc/core-darwin-arm64@1.9.2': + resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.9.2': + resolution: {integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.9.2': + resolution: {integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.9.2': + resolution: {integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@swc/core-linux-x64-gnu@1.9.2': + resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@swc/core-win32-arm64-msvc@1.9.2': + resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.9.2': + resolution: {integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.9.2': + resolution: {integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.9.2': + resolution: {integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.15': + resolution: {integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==} + + '@tanstack/query-core@5.60.5': + resolution: {integrity: sha512-jiS1aC3XI3BJp83ZiTuDLerTmn9P3U95r6p+6/SNauLJaYxfIC4dMuWygwnBHIZxjn2zJqEpj3nysmPieoxfPQ==} + + '@tanstack/react-query@5.60.5': + resolution: {integrity: sha512-M77bOsPwj1wYE56gk7iJvxGAr4IC12NWdIDhT+Eo8ldkWRHMvIR8I/rufIvT1OXoV/bl7EECwuRuMlxxWtvW2Q==} + peerDependencies: + react: ^18 || ^19 + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + + '@types/react-dom@18.3.1': + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} + + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@vanilla-extract/css@1.16.0': + resolution: {integrity: sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg==} + + '@vanilla-extract/dynamic@2.1.2': + resolution: {integrity: sha512-9BGMciD8rO1hdSPIAh1ntsG4LPD3IYKhywR7VOmmz9OO4Lx1hlwkSg3E6X07ujFx7YuBfx0GDQnApG9ESHvB2A==} + + '@vanilla-extract/private@1.0.6': + resolution: {integrity: sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==} + + '@vanilla-extract/recipes@0.5.5': + resolution: {integrity: sha512-VadU7+IFUwLNLMgks29AHav/K5h7DOEfTU91RItn5vwdPfzduodNg317YbgWCcpm7FSXkuR3B3X8ZOi95UOozA==} + peerDependencies: + '@vanilla-extract/css': ^1.0.0 + + '@vitejs/plugin-react-swc@3.7.1': + resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==} + peerDependencies: + vite: ^4 || ^5 + + '@vitest/expect@1.6.0': + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + + '@vitest/runner@1.6.0': + resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} + + '@vitest/snapshot@1.6.0': + resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} + + '@vitest/spy@1.6.0': + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + + '@vitest/utils@1.6.0': + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + + '@wallet-standard/app@1.1.0': + resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} + engines: {node: '>=16'} + + '@wallet-standard/base@1.1.0': + resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} + engines: {node: '>=16'} + + '@wallet-standard/core@1.0.3': + resolution: {integrity: sha512-Jb33IIjC1wM1HoKkYD7xQ6d6PZ8EmMZvyc8R7dFgX66n/xkvksVTW04g9yLvQXrLFbcIjHrCxW6TXMhvpsAAzg==} + engines: {node: '>=16'} + + '@wallet-standard/features@1.1.0': + resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} + engines: {node: '>=16'} + + '@wallet-standard/wallet@1.1.0': + resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} + engines: {node: '>=16'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios-retry@3.9.1: + resolution: {integrity: sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==} + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + + base-x@5.0.0: + resolution: {integrity: sha512-sMW3VGSX1QWVFA6l8U62MLKz29rRfpTlYdCqLdpLo1/Yd4zZwSbnUaDfciIAowAqvq7YFnWq9hrhdg1KYgc1lQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deep-object-diff@1.1.9: + resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react-refresh@0.4.14: + resolution: {integrity: sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==} + peerDependencies: + eslint: '>=7' + + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.15.0: + resolution: {integrity: sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + esrun@3.2.26: + resolution: {integrity: sha512-gDjP87qj4RW0BryZXPY3/L161hPo9uG6luBTjLsuHG3cKnhSMrzB7eNzSzvDyBLg7OgugyvzSgB2ov7mZ/oa7Q==} + engines: {node: '>=14.0'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gql.tada@1.8.10: + resolution: {integrity: sha512-FrvSxgz838FYVPgZHGOSgbpOjhR+yq44rCzww3oOPJYi0OvBJjAgCiP6LEokZIYND2fUTXzQAyLgcvgw1yNP5A==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql@16.9.0: + resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-retry-allowed@2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + magic-string@0.30.13: + resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} + + media-query-parser@2.0.2: + resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + + modern-ahocorasick@1.0.1: + resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanostores@0.10.3: + resolution: {integrity: sha512-Nii8O1XqmawqSCf9o2aWqVxhKRN01+iue9/VEd1TiJCr9VT5XxgPFbF1Edl1XN6pwJcZRsl8Ki+z01yb/T/C2g==} + engines: {node: ^18.0.0 || >=20.0.0} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + navi-sdk@1.4.1: + resolution: {integrity: sha512-2lSrdINsz/kgv0NDVKzvvgmKr2KRxrWEPOdxCk7+bQrSBP1QhmOan5rU+4TEceKC4KNjC3GLISQudaYTMqfq0A==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-remove-scroll-bar@2.3.6: + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.0: + resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.27.3: + resolution: {integrity: sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + + superstruct@1.0.4: + resolution: {integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinypool@0.8.4: + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-log@2.2.7: + resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.2: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + valibot@0.36.0: + resolution: {integrity: sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==} + + vite-node@1.6.0: + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@1.6.0: + resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.6.0 + '@vitest/ui': 1.6.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + + zustand@4.5.5: + resolution: {integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==} + engines: {node: '>=12.7.0'} + peerDependencies: + '@types/react': '>=16.8' + immer: '>=9.0.6' + react: '>=16.8' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + +snapshots: + + '@0no-co/graphql.web@1.0.11(graphql@16.9.0)': + optionalDependencies: + graphql: 16.9.0 + + '@0no-co/graphqlsp@1.12.16(graphql@16.9.0)(typescript@5.6.3)': + dependencies: + '@gql.tada/internal': 1.0.8(graphql@16.9.0)(typescript@5.6.3) + graphql: 16.9.0 + typescript: 5.6.3 + + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@digitak/grubber@3.1.4': {} + + '@emotion/hash@0.9.2': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.17.19': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.17.19': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.17.19': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.17.19': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.17.19': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.17.19': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.17.19': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.17.19': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.17.19': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.17.19': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.17.19': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.17.19': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.17.19': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.17.19': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.17.19': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.17.19': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.17.19': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.17.19': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.17.19': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.17.19': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.17.19': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.17.19': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.4.1(eslint@9.15.0)': + dependencies: + eslint: 9.15.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.9.0': {} + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.15.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.3': + dependencies: + levn: 0.4.1 + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.12': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.6.12 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/utils@0.2.8': {} + + '@gql.tada/cli-utils@1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.9.0)(typescript@5.6.3))(graphql@16.9.0)(typescript@5.6.3)': + dependencies: + '@0no-co/graphqlsp': 1.12.16(graphql@16.9.0)(typescript@5.6.3) + '@gql.tada/internal': 1.0.8(graphql@16.9.0)(typescript@5.6.3) + graphql: 16.9.0 + typescript: 5.6.3 + + '@gql.tada/internal@1.0.8(graphql@16.9.0)(typescript@5.6.3)': + dependencies: + '@0no-co/graphql.web': 1.0.11(graphql@16.9.0) + graphql: 16.9.0 + typescript: 5.6.3 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.9.0)': + dependencies: + graphql: 16.9.0 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@mysten/bcs@0.11.1': + dependencies: + bs58: 5.0.0 + + '@mysten/bcs@1.1.0': + dependencies: + bs58: 6.0.0 + + '@mysten/dapp-kit@0.14.36(@tanstack/react-query@5.60.5(react@18.3.1))(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + dependencies: + '@mysten/sui': 1.14.4(typescript@5.6.3) + '@mysten/wallet-standard': 0.13.13(typescript@5.6.3) + '@mysten/zksend': 0.12.2(typescript@5.6.3) + '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dropdown-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@tanstack/react-query': 5.60.5(react@18.3.1) + '@vanilla-extract/css': 1.16.0 + '@vanilla-extract/dynamic': 2.1.2 + '@vanilla-extract/recipes': 0.5.5(@vanilla-extract/css@1.16.0) + clsx: 2.1.1 + react: 18.3.1 + zustand: 4.5.5(@types/react@18.3.12)(react@18.3.1) + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - '@types/react' + - '@types/react-dom' + - babel-plugin-macros + - immer + - react-dom + - typescript + + '@mysten/sui.js@0.54.1(typescript@5.6.3)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + '@mysten/bcs': 0.11.1 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + '@suchipi/femver': 1.0.0 + bech32: 2.0.0 + gql.tada: 1.8.10(graphql@16.9.0)(typescript@5.6.3) + graphql: 16.9.0 + superstruct: 1.0.4 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@mysten/sui@1.14.4(typescript@5.6.3)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + '@mysten/bcs': 1.1.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + '@suchipi/femver': 1.0.0 + bech32: 2.0.0 + gql.tada: 1.8.10(graphql@16.9.0)(typescript@5.6.3) + graphql: 16.9.0 + tweetnacl: 1.0.3 + valibot: 0.36.0 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@mysten/wallet-standard@0.13.13(typescript@5.6.3)': + dependencies: + '@mysten/sui': 1.14.4(typescript@5.6.3) + '@wallet-standard/core': 1.0.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@mysten/zksend@0.12.2(typescript@5.6.3)': + dependencies: + '@mysten/sui': 1.14.4(typescript@5.6.3) + '@mysten/wallet-standard': 0.13.13(typescript@5.6.3) + mitt: 3.0.1 + nanostores: 0.10.3 + valibot: 0.36.0 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@noble/curves@1.6.0': + dependencies: + '@noble/hashes': 1.5.0 + + '@noble/hashes@1.5.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pythnetwork/price-service-client@1.9.0': + dependencies: + '@pythnetwork/price-service-sdk': 1.7.1 + '@types/ws': 8.5.13 + axios: 1.7.7 + axios-retry: 3.9.1 + isomorphic-ws: 4.0.1(ws@8.18.0) + ts-log: 2.2.7 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + '@pythnetwork/price-service-sdk@1.7.1': + dependencies: + bn.js: 5.2.1 + + '@pythnetwork/pyth-sui-js@2.1.0(typescript@5.6.3)': + dependencies: + '@mysten/sui': 1.14.4(typescript@5.6.3) + '@pythnetwork/price-service-client': 1.9.0 + buffer: 6.0.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - bufferutil + - debug + - typescript + - utf-8-validate + + '@radix-ui/colors@3.0.0': {} + + '@radix-ui/number@1.1.0': {} + + '@radix-ui/primitive@1.1.0': {} + + '@radix-ui/react-accessible-icon@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-alert-dialog@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-aspect-ratio@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-avatar@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-checkbox@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-context-menu@2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-context@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-dropdown-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-hover-card@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-icons@1.3.2(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-navigation-menu@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-popover@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/rect': 1.1.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-progress@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-radio-group@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-scroll-area@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-select@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-slider@1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-switch@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-tabs@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-toggle@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/rect@1.1.0': {} + + '@radix-ui/themes@3.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/colors': 3.0.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-accessible-icon': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-alert-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-aspect-ratio': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-avatar': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-checkbox': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context-menu': 2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dropdown-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-hover-card': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-navigation-menu': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-popover': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-progress': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-radio-group': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-scroll-area': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-select': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slider': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-switch': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tabs': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-tooltip': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + classnames: 2.5.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@rollup/rollup-android-arm-eabi@4.27.3': + optional: true + + '@rollup/rollup-android-arm64@4.27.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.27.3': + optional: true + + '@rollup/rollup-darwin-x64@4.27.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.27.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.27.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.27.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.27.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.27.3': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.27.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.27.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.27.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.27.3': + optional: true + + '@scure/base@1.1.9': {} + + '@scure/bip32@1.5.0': + dependencies: + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.4.0': + dependencies: + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 + + '@sinclair/typebox@0.27.8': {} + + '@suchipi/femver@1.0.0': {} + + '@swc/core-darwin-arm64@1.9.2': + optional: true + + '@swc/core-darwin-x64@1.9.2': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.9.2': + optional: true + + '@swc/core-linux-arm64-gnu@1.9.2': + optional: true + + '@swc/core-linux-arm64-musl@1.9.2': + optional: true + + '@swc/core-linux-x64-gnu@1.9.2': + optional: true + + '@swc/core-linux-x64-musl@1.9.2': + optional: true + + '@swc/core-win32-arm64-msvc@1.9.2': + optional: true + + '@swc/core-win32-ia32-msvc@1.9.2': + optional: true + + '@swc/core-win32-x64-msvc@1.9.2': + optional: true + + '@swc/core@1.9.2': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.15 + optionalDependencies: + '@swc/core-darwin-arm64': 1.9.2 + '@swc/core-darwin-x64': 1.9.2 + '@swc/core-linux-arm-gnueabihf': 1.9.2 + '@swc/core-linux-arm64-gnu': 1.9.2 + '@swc/core-linux-arm64-musl': 1.9.2 + '@swc/core-linux-x64-gnu': 1.9.2 + '@swc/core-linux-x64-musl': 1.9.2 + '@swc/core-win32-arm64-msvc': 1.9.2 + '@swc/core-win32-ia32-msvc': 1.9.2 + '@swc/core-win32-x64-msvc': 1.9.2 + + '@swc/counter@0.1.3': {} + + '@swc/types@0.1.15': + dependencies: + '@swc/counter': 0.1.3 + + '@tanstack/query-core@5.60.5': {} + + '@tanstack/react-query@5.60.5(react@18.3.1)': + dependencies: + '@tanstack/query-core': 5.60.5 + react: 18.3.1 + + '@types/estree@1.0.6': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@22.9.0': + dependencies: + undici-types: 6.19.8 + + '@types/prop-types@15.7.13': {} + + '@types/react-dom@18.3.1': + dependencies: + '@types/react': 18.3.12 + + '@types/react@18.3.12': + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 + + '@types/ws@8.5.13': + dependencies: + '@types/node': 22.9.0 + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.18.0(eslint@9.15.0)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@9.15.0)(typescript@5.6.3) + '@typescript-eslint/utils': 7.18.0(eslint@9.15.0)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 9.15.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.18.0(eslint@9.15.0)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7 + eslint: 9.15.0 + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + + '@typescript-eslint/type-utils@7.18.0(eslint@9.15.0)(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + '@typescript-eslint/utils': 7.18.0(eslint@9.15.0)(typescript@5.6.3) + debug: 4.3.7 + eslint: 9.15.0 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@7.18.0': {} + + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.18.0(eslint@9.15.0)(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + eslint: 9.15.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + + '@vanilla-extract/css@1.16.0': + dependencies: + '@emotion/hash': 0.9.2 + '@vanilla-extract/private': 1.0.6 + css-what: 6.1.0 + cssesc: 3.0.0 + csstype: 3.1.3 + dedent: 1.5.3 + deep-object-diff: 1.1.9 + deepmerge: 4.3.1 + lru-cache: 10.4.3 + media-query-parser: 2.0.2 + modern-ahocorasick: 1.0.1 + picocolors: 1.1.1 + transitivePeerDependencies: + - babel-plugin-macros + + '@vanilla-extract/dynamic@2.1.2': + dependencies: + '@vanilla-extract/private': 1.0.6 + + '@vanilla-extract/private@1.0.6': {} + + '@vanilla-extract/recipes@0.5.5(@vanilla-extract/css@1.16.0)': + dependencies: + '@vanilla-extract/css': 1.16.0 + + '@vitejs/plugin-react-swc@3.7.1(vite@5.4.11(@types/node@22.9.0))': + dependencies: + '@swc/core': 1.9.2 + vite: 5.4.11(@types/node@22.9.0) + transitivePeerDependencies: + - '@swc/helpers' + + '@vitest/expect@1.6.0': + dependencies: + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + chai: 4.5.0 + + '@vitest/runner@1.6.0': + dependencies: + '@vitest/utils': 1.6.0 + p-limit: 5.0.0 + pathe: 1.1.2 + + '@vitest/snapshot@1.6.0': + dependencies: + magic-string: 0.30.13 + pathe: 1.1.2 + pretty-format: 29.7.0 + + '@vitest/spy@1.6.0': + dependencies: + tinyspy: 2.2.1 + + '@vitest/utils@1.6.0': + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + + '@wallet-standard/app@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/base@1.1.0': {} + + '@wallet-standard/core@1.0.3': + dependencies: + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + '@wallet-standard/wallet': 1.1.0 + + '@wallet-standard/features@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/wallet@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + aria-hidden@1.2.4: + dependencies: + tslib: 2.8.1 + + array-union@2.1.0: {} + + assertion-error@1.1.0: {} + + asynckit@0.4.0: {} + + axios-retry@3.9.1: + dependencies: + '@babel/runtime': 7.26.0 + is-retry-allowed: 2.2.0 + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base-x@4.0.0: {} + + base-x@5.0.0: {} + + base64-js@1.5.1: {} + + bech32@2.0.0: {} + + binary-extensions@2.3.0: {} + + bn.js@5.2.1: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + bs58@5.0.0: + dependencies: + base-x: 4.0.0 + + bs58@6.0.0: + dependencies: + base-x: 5.0.0 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + cac@6.7.14: {} + + callsites@3.1.0: {} + + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + classnames@2.5.1: {} + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-what@6.1.0: {} + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + dedent@1.5.3: {} + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-is@0.1.4: {} + + deep-object-diff@1.1.9: {} + + deepmerge@4.3.1: {} + + delayed-stream@1.0.0: {} + + detect-node-es@1.1.0: {} + + diff-sequences@29.6.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + esbuild@0.17.19: + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@4.6.2(eslint@9.15.0): + dependencies: + eslint: 9.15.0 + + eslint-plugin-react-refresh@0.4.14(eslint@9.15.0): + dependencies: + eslint: 9.15.0 + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.15.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.0 + '@eslint/core': 0.9.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.15.0 + '@eslint/plugin-kit': 0.2.3 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.3.7 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + esrun@3.2.26: + dependencies: + '@digitak/grubber': 3.1.4 + chokidar: 3.6.0 + esbuild: 0.17.19 + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + esutils@2.0.3: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 + + flatted@3.3.2: {} + + follow-redirects@1.15.9: {} + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fsevents@2.3.3: + optional: true + + get-func-name@2.0.2: {} + + get-nonce@1.0.1: {} + + get-stream@8.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gql.tada@1.8.10(graphql@16.9.0)(typescript@5.6.3): + dependencies: + '@0no-co/graphql.web': 1.0.11(graphql@16.9.0) + '@0no-co/graphqlsp': 1.12.16(graphql@16.9.0)(typescript@5.6.3) + '@gql.tada/cli-utils': 1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.9.0)(typescript@5.6.3))(graphql@16.9.0)(typescript@5.6.3) + '@gql.tada/internal': 1.0.8(graphql@16.9.0)(typescript@5.6.3) + typescript: 5.6.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - graphql + + graphemer@1.4.0: {} + + graphql@16.9.0: {} + + has-flag@4.0.0: {} + + human-signals@5.0.0: {} + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-retry-allowed@2.2.0: {} + + is-stream@3.0.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@8.18.0): + dependencies: + ws: 8.18.0 + + js-tokens@4.0.0: {} + + js-tokens@9.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + local-pkg@0.5.1: + dependencies: + mlly: 1.7.3 + pkg-types: 1.2.1 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lru-cache@10.4.3: {} + + magic-string@0.30.13: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + media-query-parser@2.0.2: + dependencies: + '@babel/runtime': 7.26.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@4.0.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + mitt@3.0.1: {} + + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 + + modern-ahocorasick@1.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.7: {} + + nanostores@0.10.3: {} + + natural-compare@1.4.0: {} + + navi-sdk@1.4.1(@types/node@22.9.0)(typescript@5.6.3): + dependencies: + '@mysten/sui': 1.14.4(typescript@5.6.3) + '@mysten/sui.js': 0.54.1(typescript@5.6.3) + '@pythnetwork/pyth-sui-js': 2.1.0(typescript@5.6.3) + axios: 1.7.7 + esrun: 3.2.26 + tsconfig-paths: 4.2.0 + vitest: 1.6.0(@types/node@22.9.0) + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - '@types/node' + - '@vitest/browser' + - '@vitest/ui' + - bufferutil + - debug + - happy-dom + - jsdom + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - typescript + - utf-8-validate + + normalize-path@3.0.0: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@5.0.0: + dependencies: + yocto-queue: 1.1.1 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-type@4.0.0: {} + + pathe@1.1.2: {} + + pathval@1.1.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pkg-types@1.2.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier@3.3.3: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-is@18.3.1: {} + + react-remove-scroll-bar@2.3.6(@types/react@18.3.12)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + + react-remove-scroll@2.6.0(@types/react@18.3.12)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.2(@types/react@18.3.12)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + + react-style-singleton@2.2.1(@types/react@18.3.12)(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + resolve-from@4.0.0: {} + + reusify@1.0.4: {} + + rollup@4.27.3: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.27.3 + '@rollup/rollup-android-arm64': 4.27.3 + '@rollup/rollup-darwin-arm64': 4.27.3 + '@rollup/rollup-darwin-x64': 4.27.3 + '@rollup/rollup-freebsd-arm64': 4.27.3 + '@rollup/rollup-freebsd-x64': 4.27.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.3 + '@rollup/rollup-linux-arm-musleabihf': 4.27.3 + '@rollup/rollup-linux-arm64-gnu': 4.27.3 + '@rollup/rollup-linux-arm64-musl': 4.27.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.3 + '@rollup/rollup-linux-riscv64-gnu': 4.27.3 + '@rollup/rollup-linux-s390x-gnu': 4.27.3 + '@rollup/rollup-linux-x64-gnu': 4.27.3 + '@rollup/rollup-linux-x64-musl': 4.27.3 + '@rollup/rollup-win32-arm64-msvc': 4.27.3 + '@rollup/rollup-win32-ia32-msvc': 4.27.3 + '@rollup/rollup-win32-x64-msvc': 4.27.3 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@7.6.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + std-env@3.8.0: {} + + strip-bom@3.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strip-literal@2.1.0: + dependencies: + js-tokens: 9.0.0 + + superstruct@1.0.4: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tinybench@2.9.0: {} + + tinypool@0.8.4: {} + + tinyspy@2.2.1: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@1.4.0(typescript@5.6.3): + dependencies: + typescript: 5.6.3 + + ts-log@2.2.7: {} + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + tweetnacl@1.0.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.1.0: {} + + typescript@5.6.3: {} + + ufo@1.5.4: {} + + undici-types@6.19.8: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.2(@types/react@18.3.12)(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + + use-sidecar@1.1.2(@types/react@18.3.12)(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + + valibot@0.36.0: {} + + vite-node@1.6.0(@types/node@22.9.0): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + pathe: 1.1.2 + picocolors: 1.1.1 + vite: 5.4.11(@types/node@22.9.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.11(@types/node@22.9.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.27.3 + optionalDependencies: + '@types/node': 22.9.0 + fsevents: 2.3.3 + + vitest@1.6.0(@types/node@22.9.0): + dependencies: + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + acorn-walk: 8.3.4 + chai: 4.5.0 + debug: 4.3.7 + execa: 8.0.1 + local-pkg: 0.5.1 + magic-string: 0.30.13 + pathe: 1.1.2 + picocolors: 1.1.1 + std-env: 3.8.0 + strip-literal: 2.1.0 + tinybench: 2.9.0 + tinypool: 0.8.4 + vite: 5.4.11(@types/node@22.9.0) + vite-node: 1.6.0(@types/node@22.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.9.0 + transitivePeerDependencies: + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + ws@8.18.0: {} + + yocto-queue@0.1.0: {} + + yocto-queue@1.1.1: {} + + zustand@4.5.5(@types/react@18.3.12)(react@18.3.1): + dependencies: + use-sync-external-store: 1.2.2(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + react: 18.3.1 diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/prettier.config.cjs b/mover/EarthChen/code/task6/my-first-sui-dapp/prettier.config.cjs new file mode 100644 index 000000000..c07541106 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/prettier.config.cjs @@ -0,0 +1,4 @@ +// eslint-disable-next-line no-undef +module.exports = { + proseWrap: "always", +}; diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/src/App.tsx b/mover/EarthChen/code/task6/my-first-sui-dapp/src/App.tsx new file mode 100644 index 000000000..05a8c6acd --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/src/App.tsx @@ -0,0 +1,39 @@ +import { ConnectButton } from "@mysten/dapp-kit"; +import { Box, Container, Flex, Heading } from "@radix-ui/themes"; +import {PtbBlock} from "./ptb.tsx"; + +function App() { + return ( + <> + + + dApp Starter Template + + + + + + + + + + + + + ); +} + +export default App; diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/src/OwnedObjects.tsx b/mover/EarthChen/code/task6/my-first-sui-dapp/src/OwnedObjects.tsx new file mode 100644 index 000000000..fa759db0a --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/src/OwnedObjects.tsx @@ -0,0 +1,42 @@ +import { useCurrentAccount, useSuiClientQuery } from "@mysten/dapp-kit"; +import { Flex, Heading, Text } from "@radix-ui/themes"; + +export function OwnedObjects() { + const account = useCurrentAccount(); + const { data, isPending, error } = useSuiClientQuery( + "getOwnedObjects", + { + owner: account?.address as string, + }, + { + enabled: !!account, + }, + ); + + if (!account) { + return; + } + + if (error) { + return Error: {error.message}; + } + + if (isPending || !data) { + return Loading...; + } + + return ( + + {data.data.length === 0 ? ( + No objects owned by the connected wallet + ) : ( + Objects owned by the connected wallet + )} + {data.data.map((object) => ( + + Object ID: {object.data?.objectId} + + ))} + + ); +} diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/src/WalletStatus.tsx b/mover/EarthChen/code/task6/my-first-sui-dapp/src/WalletStatus.tsx new file mode 100644 index 000000000..21e734677 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/src/WalletStatus.tsx @@ -0,0 +1,23 @@ +import { useCurrentAccount } from "@mysten/dapp-kit"; +import { Container, Flex, Heading, Text } from "@radix-ui/themes"; +import { OwnedObjects } from "./OwnedObjects"; + +export function WalletStatus() { + const account = useCurrentAccount(); + + return ( + + Wallet Status + + {account ? ( + + Wallet connected + Address: {account.address} + + ) : ( + Wallet not connected + )} + + + ); +} diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/src/main.tsx b/mover/EarthChen/code/task6/my-first-sui-dapp/src/main.tsx new file mode 100644 index 000000000..db3a81acc --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/src/main.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import "@mysten/dapp-kit/dist/index.css"; +import "@radix-ui/themes/styles.css"; + +import { SuiClientProvider, WalletProvider } from "@mysten/dapp-kit"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { Theme } from "@radix-ui/themes"; +import App from "./App.tsx"; +import { networkConfig } from "./networkConfig.ts"; + +const queryClient = new QueryClient(); + +ReactDOM.createRoot(document.getElementById("root")!).render( + + + + + + + + + + + , +); diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/src/networkConfig.ts b/mover/EarthChen/code/task6/my-first-sui-dapp/src/networkConfig.ts new file mode 100644 index 000000000..96de92158 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/src/networkConfig.ts @@ -0,0 +1,17 @@ +import { getFullnodeUrl } from "@mysten/sui/client"; +import { createNetworkConfig } from "@mysten/dapp-kit"; + +const { networkConfig, useNetworkVariable, useNetworkVariables } = + createNetworkConfig({ + devnet: { + url: getFullnodeUrl("devnet"), + }, + testnet: { + url: getFullnodeUrl("testnet"), + }, + mainnet: { + url: getFullnodeUrl("mainnet"), + }, + }); + +export { useNetworkVariable, useNetworkVariables, networkConfig }; diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/src/ptb.tsx b/mover/EarthChen/code/task6/my-first-sui-dapp/src/ptb.tsx new file mode 100644 index 000000000..1a3ee6bd7 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/src/ptb.tsx @@ -0,0 +1,162 @@ +import { useCurrentAccount, useSignAndExecuteTransaction } from "@mysten/dapp-kit"; +import { Box, Button, Card, Container, DataList, Flex, Text } from "@radix-ui/themes"; +import { pool, Sui, nUSDC } from 'navi-sdk/dist/address' +import { getLatestProtocolPackageId } from 'navi-sdk/dist/libs/PoolInfo' +import { NAVISDKClient } from "navi-sdk/dist/naviSDK"; +import { useEffect, useState } from "react"; +import { Transaction } from "@mysten/sui/transactions"; +import { depositCoin, borrowCoin, repayDebt } from 'navi-sdk/dist/libs/PTB' +import { Pool, PoolConfig } from "navi-sdk/dist/types"; + + +export const addZero = (v: number) => { + if (v < 10) { + return '0' + v + } else { + return '' + v + } + } + + export const getCurrentTime = () => { + const myDate=new Date(); + const year = myDate.getFullYear(); + const month = myDate.getMonth()+1; + const date = myDate.getDate(); + const hour = myDate.getHours(); + const min = myDate.getMinutes(); + const second = myDate.getSeconds(); + return { + year, + month, + date, + hour, + min, + second + } + } + + +export function PtbBlock() { + const [realtimeData, setRealtimeData] = useState<{[key: string]: any}[]>() + const [digest, setDigest] = useState('') + + const naviClient = new NAVISDKClient({ networkType: 'mainnet' }); + const account = useCurrentAccount(); + + const { mutate: signAndExecuteTransaction } = useSignAndExecuteTransaction(); + + const getNaviPackageId = async () => { + const id = await getLatestProtocolPackageId() + console.log(id) + } + + const getRealTimeData = async () => { + const res = await Promise.all([naviClient.getPoolInfo(nUSDC), naviClient.getPoolInfo(Sui)]) + setRealtimeData(res) + } + + // usdc精度为6 + const getCurrentDateAmount = () => { + const { + month, + date, + hour, + } = getCurrentTime() + // [月][天][小时] 5位 + return parseInt(`${addZero(month)}${addZero(date)}${addZero(hour)}`) + + } + const startPtb =async () => { + if (!account) { + return + } + const tx = new Transaction(); + + // 存入 1 Sui + // 获取sui池子配置 + const suiAmount = 1000000000 + const suiPoolConfig: PoolConfig = pool[Sui.symbol as keyof Pool]; + const suiCoin = tx.splitCoins(tx.gas, [suiAmount]) + await depositCoin(tx, suiPoolConfig, suiCoin, suiAmount) + console.log('存入Sui:', suiAmount) + + // 借出当前时间的nUSDC + const nUSDCPoolConfig: PoolConfig = pool[nUSDC.symbol as keyof Pool]; + // 借出nUSDC的数量 0.[月][天][小时] + const nUSDCAmount = getCurrentDateAmount() + const [borrowBalance] = await borrowCoin(tx, nUSDCPoolConfig, nUSDCAmount) + console.log('借出 nUSDC:', nUSDCAmount) + + // 归还nUSDC + await repayDebt(tx, nUSDCPoolConfig, borrowBalance, nUSDCAmount) + console.log('归还 nUSDC:', nUSDCAmount) + + // 执行ptb + signAndExecuteTransaction( + { + transaction: tx, + }, + { + onSuccess: (result) => { + console.log('executed transaction', result); + setDigest(result.digest); + }, + onError: (error) => { + console.error(error.message) + } + } + ) + } + + useEffect(() => { + getNaviPackageId() + + getRealTimeData() + // setInterval(() => { + // getRealTimeData() + // }, 10000) + }, []) + return ( + + {account ? ( + + 钱包已连接 + Address: {account.address} + + ) : ( + 钱包未连接 + )} +
+ +
{digest}
+
+ + { + realtimeData?.map((data, realtimeKey) => ( + + + + { + data && Object.keys(data).map(key => { + if (key !== 'rewardTokenAddress' && key !== 'coin_type') { + return ( + + { key } + + { data[key] } + + + ) + } + }) + } + + + + )) + } + + +
+ ); +} diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/src/vite-env.d.ts b/mover/EarthChen/code/task6/my-first-sui-dapp/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/tsconfig.json b/mover/EarthChen/code/task6/my-first-sui-dapp/tsconfig.json new file mode 100644 index 000000000..a7fc6fbf2 --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/tsconfig.node.json b/mover/EarthChen/code/task6/my-first-sui-dapp/tsconfig.node.json new file mode 100644 index 000000000..42872c59f --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/mover/EarthChen/code/task6/my-first-sui-dapp/vite.config.ts b/mover/EarthChen/code/task6/my-first-sui-dapp/vite.config.ts new file mode 100644 index 000000000..d366e8c8d --- /dev/null +++ b/mover/EarthChen/code/task6/my-first-sui-dapp/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react-swc"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}); diff --git a/mover/EarthChen/code/task7/check_in/Move.lock b/mover/EarthChen/code/task7/check_in/Move.lock new file mode 100644 index 000000000..67b15779d --- /dev/null +++ b/mover/EarthChen/code/task7/check_in/Move.lock @@ -0,0 +1,26 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "0577871E9F47DF334E0DB1BD5DF1F3265B7FE5B4D0FFB5F16C3C5853B13CE8E5" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://gitee.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.37.3" +edition = "2024.beta" +flavor = "sui" diff --git a/mover/EarthChen/code/task7/check_in/Move.toml b/mover/EarthChen/code/task7/check_in/Move.toml new file mode 100644 index 000000000..3e11a52d3 --- /dev/null +++ b/mover/EarthChen/code/task7/check_in/Move.toml @@ -0,0 +1,36 @@ +[package] +name = "check_in" +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://gitee.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] +check_in = "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" \ No newline at end of file diff --git a/mover/EarthChen/code/task7/check_in/sources/check_in.move b/mover/EarthChen/code/task7/check_in/sources/check_in.move new file mode 100644 index 000000000..398fbfcac --- /dev/null +++ b/mover/EarthChen/code/task7/check_in/sources/check_in.move @@ -0,0 +1,96 @@ +module check_in::check_in { + use std::debug::print; + use std::ascii::{String, string}; + use std::bcs; + use std::hash::sha3_256; + use std::vector; + use sui::event; + use sui::object; + use sui::random; + use sui::random::Random; + use sui::transfer::share_object; + use sui::tx_context::{Self, TxContext}; + + const ESTRING: u64 = 0; + + public struct Flag has copy, drop { + sender: address, + flag: bool, + ture_num: u64, + github_id: String + } + + public struct FlagString has key { + id: UID, + str: String, + ture_num: u64 + } + + fun init(ctx: &mut TxContext) { + let flag_str = FlagString { + id: object::new(ctx), + str: string(b"LetsMoveCTF"), + ture_num: 0 + }; + share_object(flag_str); + } + + + entry fun get_flag( + flag: vector, + github_id: String, + flag_str: &mut FlagString, + rand: &Random, + ctx: &mut TxContext + ) { + let mut bcs_flag = bcs::to_bytes(&flag_str.str); + vector::append(&mut bcs_flag, *github_id.as_bytes()); + + assert!(flag == sha3_256(bcs_flag), ESTRING); + + flag_str.str = getRandomString(rand, ctx); + + flag_str.ture_num = flag_str.ture_num + 1; + + event::emit(Flag { + sender: tx_context::sender(ctx), + flag: true, + ture_num: flag_str.ture_num, + github_id + }); + } + + + fun getRandomString(rand: &Random, ctx: &mut TxContext): String { + let mut gen = random::new_generator(rand, ctx); + + let mut str_len = random::generate_u8_in_range(&mut gen, 4, 30); + + let mut rand: vector = b""; + while (str_len != 0) { + let rand_num = random::generate_u8_in_range(&mut gen, 34, 126); + vector::push_back(&mut rand, rand_num); + str_len = str_len - 1; + }; + + string(rand) + } + + + entry fun get_flag_test():vector { + let mut bcs_flag: vector = bcs::to_bytes(&string(b"o|-WcKQ+Ac>[`Wd7EyW$xSh")); + vector:: append(&mut bcs_flag, *string(b"earthchen").as_bytes()); + let sha256= sha3_256(bcs_flag); + sha256 + } + + + #[test] + fun test1(){ + let ret= get_flag_test(); + print(&ret); + } + + +} + diff --git a/mover/EarthChen/code/task7/readme.md b/mover/EarthChen/code/task7/readme.md new file mode 100644 index 000000000..dd6f3a77e --- /dev/null +++ b/mover/EarthChen/code/task7/readme.md @@ -0,0 +1,3 @@ +```bash +sui client call --package 0x914099b4d1b4f5513acc8aaa4fdc1f67578522b81d818f61bae527d590c6d87d --module check_in --function get_flag --gas-budget 10000000 --args '0x274dfd20f8665701459951935aa88bab5b75d9f73de38c0458278ea60e978822' earthchen 0xc8dcd54baa7724177593a9f70598a09ae6a4286f996542e058f248209db08147 0x8 +``` \ No newline at end of file diff --git a/mover/EarthChen/images/task7.png b/mover/EarthChen/images/task7.png new file mode 100644 index 000000000..ef7c083ba Binary files /dev/null and b/mover/EarthChen/images/task7.png differ diff --git a/mover/EarthChen/readme.md b/mover/EarthChen/readme.md index dc3209d4f..243c1c02b 100644 --- a/mover/EarthChen/readme.md +++ b/mover/EarthChen/readme.md @@ -32,22 +32,22 @@ - [x] scan上的NFT截图:![Scan截图](./images/nft_scan.png) ## 04 Move Game -- [] game package id : -- [] deposit Coin hash: -- [] withdraw `Coin` hash: -- [] play game hash: +- [x] game package id :0x472b8f0ff90d472069fb57f33a9899243debb7c3201f1dc3bb2b49d15ec537ee +- [x] deposit Coin hash: 8VXsjH2eVz1TWAc5DkAWrtPYVNoArEgVJZq8tCxnNscc +- [x] withdraw `Coin` hash: HizGTtY5FGAGuEQ3g9idAyFuP5BMh8dnH1hSKsTV9ZD8 +- [x] play game hash: AjYKT5oKewnDWv9fnDvYRvoeRDBzfGuYGmPSMXGpv2cY ## 05 Move Swap -- [] swap package id : -- [] call swap CoinA-> CoinB hash : -- [] call swap CoinB-> CoinA hash : +- [x] swap package id :0x6d4dd7fffe36cce18887a19a935df4cd45633546c947756ce7d45d1fbca9766e +- [x] call swap CoinA-> CoinB hash :DXUJPhgKCNc8oMdq9gNQxRvzKPhWrZHbEwpa9bEc72S8 +- [x] call swap CoinB-> CoinA hash :8u7wjB5V3FnE4kBXF6Y1CcCpc7XPZ5o6zN9r3oQvwfs2 ## 06 Dapp-kit SDK PTB -- [] save hash : +- [x] save hash :JPUo2RssPWGqhXdeGaUtr1uuhTjhgdMT9R3oFSVG5hb ## 07 Move CTF Check In -- [] CLI call 截图 : ![截图](./images/你的图片地址) -- [] flag hash : +- [x] CLI call 截图 : ![截图](./images/task7.png) +- [x] flag hash : 6zyAcnJ5WMzzQpsBWdoXPcsTeVyNLbDWSV2bTtNvRWb9 ## 08 Move CTF Lets Move - [] proof : diff --git a/mover/Jmagicc/code/task2/sources/jmagicc_coin.move b/mover/Jmagicc/code/task2/sources/jmagicc_coin.move new file mode 100644 index 000000000..2e1b90f46 --- /dev/null +++ b/mover/Jmagicc/code/task2/sources/jmagicc_coin.move @@ -0,0 +1,37 @@ +module jmagicc_coin::jmagicc_coin { + use sui::coin::{Self}; + use sui::url::{Url,Self}; + + public struct JMAGICC_COIN has drop {} + + + fun init(witness: JMAGICC_COIN, ctx: &mut TxContext) { + let (treasury, metadata) = coin::create_currency( + witness, + 9, // decimals + b"JMAGICC", // symbol + b"Jmagicc Coin", // name + b"Jmagicc Coin", // description + option::some(url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/58356228")), // icon url + ctx + ); + + // transfer the `TreasuryCap` to the sender, so they can mint and burn + transfer::public_transfer(treasury, tx_context::sender(ctx)); + + // metadata is typically frozen after creation + transfer::public_freeze_object(metadata); + } + + + public entry fun mint( + treasury_cap: &mut coin::TreasuryCap, amount: u64, recipient: address, ctx: &mut TxContext + ) { + coin::mint_and_transfer(treasury_cap, amount, recipient, ctx); + } + + + public entry fun burn(treasury_cap: &mut coin::TreasuryCap, target: coin::Coin) { + coin::burn(treasury_cap, target); + } +} diff --git a/mover/Jmagicc/code/task2/sources/jmagicc_faucet_coin.move b/mover/Jmagicc/code/task2/sources/jmagicc_faucet_coin.move new file mode 100644 index 000000000..29281c712 --- /dev/null +++ b/mover/Jmagicc/code/task2/sources/jmagicc_faucet_coin.move @@ -0,0 +1,37 @@ +module jmagicc_faucet_coin::jmagicc_faucet_coin { + use sui::coin::{Self}; + use sui::url::{Url,Self}; + + public struct JMAGICC_FAUCET_COIN has drop {} + + + fun init(witness: JMAGICC_FAUCET_COIN, ctx: &mut TxContext) { + let (treasury_cap, metadata) = coin::create_currency( + witness, + 9, // decimals + b"JMAGICC FAUCET", // symbol + b"Jmagicc Faucet Coin", // name + b"Jmagicc Faucet Coin", // description + option::some(url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/58356228")), // icon url + ctx + ); + + transfer::public_freeze_object(metadata); + + transfer::public_share_object(treasury_cap) + } + + + public entry fun mint( + treasury_cap: &mut coin::TreasuryCap, amount: u64, recipient: address, ctx: &mut TxContext + ) { + coin::mint_and_transfer(treasury_cap, amount, recipient, ctx); + } + + + public entry fun burn(treasury_cap: &mut coin::TreasuryCap, target: coin::Coin) { + coin::burn(treasury_cap, target); + } +} + + diff --git a/mover/Jmagicc/readme.md b/mover/Jmagicc/readme.md index 17e9dce9b..34a857b89 100644 --- a/mover/Jmagicc/readme.md +++ b/mover/Jmagicc/readme.md @@ -13,17 +13,17 @@ ## 任务 ## 01 hello move -- [] Sui cli version: sui 1.34.0-99ebd8f082f2 -- [] Sui钱包截图: ![Sui钱包截图](./images/sui-wallet.png) -- [] package id: 0xc441a563822caa87821d4aeb29948ba735fdc61b7647d313916b6550f89b5a0 -- [] package id 在 scan上的查看截图:![Scan截图](./images/package-id.png) - -## 02 move coin -- [] My Coin package id : -- [] Faucet package id : -- [] 转账 `My Coin` hash: -- [] `Faucet Coin` address1 mint hash: -- [] `Faucet Coin` address2 mint hash: +- [x] Sui cli version: sui 1.34.0-99ebd8f082f2 +- [x] Sui钱包截图: ![Sui钱包截图](./images/sui-wallet.png) +- [x] package id: 0xc441a563822caa87821d4aeb29948ba735fdc61b7647d313916b6550f89b5a0 +- [x] package id 在 scan上的查看截图:![Scan截图](./images/package-id.png) + +## 02 move coin +- [x] My Coin package id : 0x26c52507cbd06684da94a201bc6228acce8337bb768bd423f7a5d8db5fe28598 +- [x] Faucet package id : 0x456356b93dd173dfc641a21db0b53f504baeca59b9679c267692c5b5b3f28369 +- [x] 转账 `My Coin` hash: Bc9RUbLhzw31xaE87NmqzpwyXiqx12hanJGgyiPJ1o62 +- [x] `Faucet Coin` address1 mint hash: 9GdcMy9xUsVPFZ1TeK6vvQ3DpvUeLTxW1kpH8KoKgPfG +- [x] `Faucet Coin` address2 mint hash: 2pnVPpT3mMCrHVgCgpXoP9VSbDeV75VA2yB57Fe3X2ib ## 03 move NFT - [] nft package id : diff --git a/mover/Ming-XX/images/nft.jpg b/mover/Ming-XX/images/nft.jpg new file mode 100644 index 000000000..3faa7ea8c Binary files /dev/null and b/mover/Ming-XX/images/nft.jpg differ diff --git a/mover/Ming-XX/readme.md b/mover/Ming-XX/readme.md index 2276ff34c..55741a2c3 100644 --- a/mover/Ming-XX/readme.md +++ b/mover/Ming-XX/readme.md @@ -1,54 +1,55 @@ -## 基本信息 -- Sui钱包地址: `0x711104a1a3183f0f1a35d548ce26a363c2f8dbb7a80543cc823e08807b831a1c` -> 首次参与需要完成第一个任务注册好钱包地址才被合并,并且后续学习奖励会打入这个地址 -- github: `Ming-XX` - -## 个人简介 -- 工作经验: 3年 -- 技术栈: `C` `Rust` -> 重要提示 请认真写自己的简介 -- STM32嵌入式开发,自学了Rust,想要了解Move与Rust的区别,并通过Move入门区块链 -- 联系方式: tg: `https://t.me/Mina_xx` - -## 任务 - -## 01 hello move -- [✓] Sui cli version: sui 1.37.1-7839b9501066 -- [✓] Sui钱包截图: ![Sui钱包截图](./images/qb.png) -- [✓] package id: 0x59f7b41923269e125530d33beb7da7329049f1434c4cdf478a5fd1c691f565ee -- [✓] package id 在 scan上的查看截图:![Scan截图](./images/l.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 : +## 基本信息 +- Sui钱包地址: `0x711104a1a3183f0f1a35d548ce26a363c2f8dbb7a80543cc823e08807b831a1c` +> 首次参与需要完成第一个任务注册好钱包地址才被合并,并且后续学习奖励会打入这个地址 +- github: `Ming-XX` + +## 个人简介 +- 工作经验: 3年 +- 技术栈: `C` `Rust` +> 重要提示 请认真写自己的简介 +- STM32嵌入式开发,自学了Rust,想要了解Move与Rust的区别,并通过Move入门区块链 +- 联系方式: tg: `https://t.me/Mina_xx` + +## 任务 + +## 01 hello move +- [✓] Sui cli version: sui 1.37.1-7839b9501066 +- [✓] Sui钱包截图: ![Sui钱包截图](./images/qb.png) +- [✓] package id: 0x59f7b41923269e125530d33beb7da7329049f1434c4cdf478a5fd1c691f565ee +- [✓] package id 在 scan上的查看截图:![Scan截图](./images/l.png) + +## 02 move coin +- [✓] My Coin package id :0xfd1150b4d050beba03dcac1ac986189fc89e84f961a1b8ec2233e8d06423dca2 +- [✓] Faucet package id : 0xdb8e8fc891265b2274b4895f5242af9e94208857756de64150efc46603b2a135 +- [✓] 转账 `My Coin` hash:CwM8dfPT63SbDARuWsswUAgnrhTpbmr68Mbp79Pt5vTj +- [✓] `Faucet Coin` address1 mint hash:9VrgruonWKkmzY9ESDRFy93WVKoKPNPsmTeG7Yn8y1e4 +- [✓] `Faucet Coin` address2 mint hash:EHHLSJVVoLWjYiW8Vc99ebMNwYduzh8UnR5SizAsotCJ + + +## 03 move NFT +- [✓] nft package id :0xc37c8817793bafd05ef493491d315625375ef59a031dcfa9ee5eee0553c4b540 +- [✓] nft object id : 0xc3fe2601c815f6737226b240bf9e452679c13f28d34dcbed0d7ccc73a7a90072 +- [✓] 转账 nft hash:37YJXK6iSKTZSiaw1hw6mbWmfBSVjVZiDYrUJG24CCiY +- [✓] scan上的NFT截图:![Scan截图](./images/nft.jpg) + +## 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/Ming-XX/code/task1/hello_move/sources/hello_move.move b/mover/Ming-XX/task1/hello_move.move similarity index 95% rename from mover/Ming-XX/code/task1/hello_move/sources/hello_move.move rename to mover/Ming-XX/task1/hello_move.move index 25839d3f0..4e49fb964 100644 --- a/mover/Ming-XX/code/task1/hello_move/sources/hello_move.move +++ b/mover/Ming-XX/task1/hello_move.move @@ -1,19 +1,19 @@ -module hello_move::hello ; - -use std::ascii::{String, string}; -use sui::object::{Self, UID}; -use sui::transfer::transfer; -use sui::tx_context::{TxContext, sender}; - -public struct Hello has key { - id: UID, - say: String -} - -fun init(ctx: &mut TxContext) { - let hello_move = Hello { - id: object::new(ctx), - say: string(b"Ming-XX"), - }; - transfer(hello_move, sender(ctx)); +module hello_move::hello ; + +use std::ascii::{String, string}; +use sui::object::{Self, UID}; +use sui::transfer::transfer; +use sui::tx_context::{TxContext, sender}; + +public struct Hello has key { + id: UID, + say: String +} + +fun init(ctx: &mut TxContext) { + let hello_move = Hello { + id: object::new(ctx), + say: string(b"Ming-XX"), + }; + transfer(hello_move, sender(ctx)); } \ No newline at end of file diff --git a/mover/Ming-XX/task2/ming_xx_coin.move b/mover/Ming-XX/task2/ming_xx_coin.move new file mode 100644 index 000000000..efb84cf9b --- /dev/null +++ b/mover/Ming-XX/task2/ming_xx_coin.move @@ -0,0 +1,29 @@ +module my_coin::ming_xx_coin; +use sui::coin::{create_currency, TreasuryCap}; +use std::option::some; +use sui::coin; +use sui::transfer::{public_freeze_object, public_transfer}; +use sui::url::Url; +use sui::url; + +public struct MING_XX_COIN has drop{} + +fun init(my_coin:MING_XX_COIN,ctx:&mut TxContext){ + + let (treasury, coin_metadata)=create_currency( + my_coin, + 8, + b"MY_COIN", + b"MING_XX", + b"this is MYCOIN", + some(url::new_unsafe_from_bytes(b"https://img1.baidu.com/it/u=22878553,612949489&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=1067")), + ctx, + ); + + public_freeze_object(coin_metadata); + public_transfer(treasury,ctx.sender()); +} + +public entry fun mint(treasury:&mut TreasuryCap,amout:u64,recipient:address,ctx:&mut TxContext){ + coin::mint_and_transfer(treasury,amout,recipient,ctx); +} \ No newline at end of file diff --git a/mover/Ming-XX/task2/ming_xx_faucet_coin.move b/mover/Ming-XX/task2/ming_xx_faucet_coin.move new file mode 100644 index 000000000..cee884367 --- /dev/null +++ b/mover/Ming-XX/task2/ming_xx_faucet_coin.move @@ -0,0 +1,30 @@ +module my_coin::ming_xx_faucet_coin; +use sui::coin::{create_currency, TreasuryCap}; +use sui::coin; +use std::option::some; +use sui::transfer::{public_freeze_object, public_share_object}; +use sui::url::Url; +use sui::url; + +public struct MING_XX_FAUCET_COIN has drop{} + +fun init(my_faucet_coin:MING_XX_FAUCET_COIN,ctx:&mut TxContext){ + + let (treasury, coin_metadata)=create_currency( + my_faucet_coin, + 8, + b"MY_FAUCET_COIN", + b"MING_XX_FAUCET", + b"this is FAUCETCOIN", + some(url::new_unsafe_from_bytes(b"https://img2.baidu.com/it/u=3094430203,904462832&fm=253&fmt=auto&app=120&f=JPEG?w=600&h=556")), + ctx, + ); + + public_freeze_object(coin_metadata); + + public_share_object(treasury); +} + +public entry fun mint(treasury:&mut TreasuryCap,amout:u64,recipient:address,ctx:&mut TxContext){ + coin::mint_and_transfer(treasury,amout,recipient,ctx); +} \ No newline at end of file diff --git a/mover/Ming-XX/task3/MY_NFT.move b/mover/Ming-XX/task3/MY_NFT.move new file mode 100644 index 000000000..b88c46292 --- /dev/null +++ b/mover/Ming-XX/task3/MY_NFT.move @@ -0,0 +1,56 @@ +module my_nft::MY_NFT; +use std::string; +use std::string::{String, utf8}; +use sui::transfer::transfer; +use sui::package; +use sui::display; + + +public struct MyNFT has key{ + id:UID, + name:String, + image_url:String, +} + +public struct MY_NFT has drop{} + +fun init(otw:MY_NFT,ctx:&mut TxContext){ + let keys=vector[ + utf8(b"name"), + utf8(b"image_url"), + ]; + + let values=vector[ + utf8(b"{name}"), + utf8(b"{image_url}"), + ]; + + let publisher = package::claim(otw, ctx); + + let mut display = display::new_with_fields( + &publisher, keys, values, ctx + ); + + display::update_version(&mut display); + + transfer::public_transfer(publisher, ctx.sender()); + transfer::public_transfer(display, ctx.sender()); +} + +public entry fun mint(url:String, recipient:address, ctx:&mut TxContext){ + let my_nft=MyNFT{ + id:object::new(ctx), + name:string::utf8(b"Ming-XX NFT"), + image_url:url, + }; + + let send_nft=MyNFT{ + id:object::new(ctx), + name:string::utf8(b"send_nft"), + image_url:string::utf8(b"https://img1.baidu.com/it/u=2774048779,1307844049&fm=253&fmt=auto&app=138&f=JPEG?w=609&h=609"), + }; + + transfer(my_nft,ctx.sender()); + + transfer(send_nft,recipient); +} \ No newline at end of file diff --git "a/mover/aimotee/notes/\357\274\210\344\272\214\357\274\211Let's Move\345\205\261\345\255\246\357\274\214\345\210\235\345\247\213\350\257\255\346\263\225.md" "b/mover/aimotee/notes/\357\274\210\344\272\214\357\274\211Let's Move\345\205\261\345\255\246\357\274\214\345\210\235\345\247\213\350\257\255\346\263\225.md" new file mode 100644 index 000000000..c6b4a2819 --- /dev/null +++ "b/mover/aimotee/notes/\357\274\210\344\272\214\357\274\211Let's Move\345\205\261\345\255\246\357\274\214\345\210\235\345\247\213\350\257\255\346\263\225.md" @@ -0,0 +1 @@ +登链社区 iD:aimotee 文章链接:https://learnblockchain.cn/article/9962 diff --git a/mover/didigo545/coLearn2411/images/img.png b/mover/didigo545/coLearn2411/images/img.png new file mode 100644 index 000000000..8b5ce69bc Binary files /dev/null and b/mover/didigo545/coLearn2411/images/img.png differ diff --git a/mover/didigo545/coLearn2411/images/img_1.png b/mover/didigo545/coLearn2411/images/img_1.png new file mode 100644 index 000000000..94dcfcf68 Binary files /dev/null and b/mover/didigo545/coLearn2411/images/img_1.png differ diff --git a/mover/didigo545/coLearn2411/images/readme.md b/mover/didigo545/coLearn2411/images/readme.md new file mode 100644 index 000000000..2362026ff --- /dev/null +++ b/mover/didigo545/coLearn2411/images/readme.md @@ -0,0 +1,7 @@ +![img.png](img.png) +![img_1.png](img_1.png) +![B站.png](../../../../../../../Desktop/B%E7%AB%99.png) +![水分子.jpg](../../../../../../../Desktop/%E6%B0%B4%E5%88%86%E5%AD%90.jpg) +![tg关注.jpg](../../../../../../../Desktop/tg%E5%85%B3%E6%B3%A8.jpg) +![仓库标星.jpg](../../../../../../../Desktop/%E4%BB%93%E5%BA%93%E6%A0%87%E6%98%9F.jpg) +![参加会议.jpg](../../../../../../../Desktop/%E5%8F%82%E5%8A%A0%E4%BC%9A%E8%AE%AE.jpg) \ No newline at end of file diff --git a/mover/didigo545/coLearn2411/project/readme.md b/mover/didigo545/coLearn2411/project/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/mover/didigo545/coLearn2411/project/readme.md @@ -0,0 +1 @@ + diff --git a/mover/didigo545/coLearn2411/readme.md b/mover/didigo545/coLearn2411/readme.md new file mode 100644 index 000000000..e20223a39 --- /dev/null +++ b/mover/didigo545/coLearn2411/readme.md @@ -0,0 +1,53 @@ + + +## b站,推特关注 + +- [] b站,推特关注截图: ![关注截图](./images/你的图片地址) + +## 为共学营宣传(在朋友圈或者群聊中转发海报/文章) + +- [] 宣传截图:![宣传截图](./images/你的图片地址) + +## 每周课程学习 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 参加直播答疑 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 群里分享学习笔记 + +- [] 第一篇笔记 +- [] 第二篇笔记 +- [] 第三篇笔记 +- [] 第四篇笔记 + +## 对外输出学习笔记 + +- [] 第一篇笔记【学习笔记链接】 +- [] 第二篇笔记【学习笔记链接】 +- [] 第三篇笔记【学习笔记链接】 +- [] 第四篇笔记【学习笔记链接】 + +## 在HOH社区公众号发布自己的技术文章 + +- [] 第一篇笔记【公众号文章链接】 +- [] 第二篇笔记【公众号文章链接】 +- [] 第三篇笔记【公众号文章链接】 +- [] 第四篇笔记【公众号文章链接】 + +## 直播分享学习技巧/工具推荐 + +- [] 会议截图:![会议记录截图](./images/你的图片地址) + +## 提交项目 + +- [] 项目提交![项目截图](./images/你的图片地址) + diff --git a/mover/didigo545/code/readme.md b/mover/didigo545/code/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/mover/didigo545/code/task1/hellomove/Move.toml b/mover/didigo545/code/task1/hellomove/Move.toml new file mode 100644 index 000000000..be65a17c8 --- /dev/null +++ b/mover/didigo545/code/task1/hellomove/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "hellomove" +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] +hellomove = "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/didigo545/code/task1/hellomove/sources/hellomove.move b/mover/didigo545/code/task1/hellomove/sources/hellomove.move new file mode 100644 index 000000000..d057c8d1e --- /dev/null +++ b/mover/didigo545/code/task1/hellomove/sources/hellomove.move @@ -0,0 +1,17 @@ +module hellomove::hello ; + +use std::ascii::{String, string}; +use sui::transfer::transfer; + +public struct Hello has key { + id: UID, + say: String +} + +fun init(ctx: &mut TxContext) { + let hello_move = Hello { + id: object::new(ctx), + say: string(b"didigo545"), + }; + transfer(hello_move, ctx.sender()); +} \ No newline at end of file diff --git a/mover/didigo545/code/task1/hellomove/tests/hellomove_tests.move b/mover/didigo545/code/task1/hellomove/tests/hellomove_tests.move new file mode 100644 index 000000000..3f6ec59dc --- /dev/null +++ b/mover/didigo545/code/task1/hellomove/tests/hellomove_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module hellomove::hellomove_tests; +// uncomment this line to import the module +// use hellomove::hellomove; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_hellomove() { + // pass +} + +#[test, expected_failure(abort_code = ::hellomove::hellomove_tests::ENotImplemented)] +fun test_hellomove_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/didigo545/notes/readme.md b/mover/didigo545/notes/readme.md new file mode 100644 index 000000000..3fabc9c83 --- /dev/null +++ b/mover/didigo545/notes/readme.md @@ -0,0 +1 @@ +//0基础学习的 进度比较慢。加油不放弃 \ No newline at end of file diff --git a/mover/didigo545/readme.md b/mover/didigo545/readme.md new file mode 100644 index 000000000..ef7117a58 --- /dev/null +++ b/mover/didigo545/readme.md @@ -0,0 +1,55 @@ +## 基本信息 +- Sui钱包地址: `0x9b7e6de1e74202218f30513540189b75bf017a3e7dda691bb7038f58c4192e55` +> 首次参与需要完成第一个任务注册好钱包地址才被合并,并且后续学习奖励会打入这个地址 +- github: `didigo545` + +## 个人简介 +- 工作经验: 0年 +- 技术栈: +> 重要提示 请认真写自己的简介 +- 没有web2开发经验,对Move特别感兴趣,想通过Move入门区块链 +- 联系方式: tg: `didigo545` + +## 任务 + +## 01 hello move +- [√] Sui cli version:sui 1.37.3 +- [√] Sui钱包截图: ![Sui钱包截图](/Users/shaoweiwang/Desktop/钱包截图1.png) +- [√] package id: 0x37a6d1eeb4cfde0baa41fc7b6849fab777511c4a6c0b92bc026a97d773eb20e6 +- [√] package id 在 scan上的查看截图:![Scan截图](/Users/shaoweiwang/Desktop/浏览器截图.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/didigo545/scan/readme.md b/mover/didigo545/scan/readme.md new file mode 100644 index 000000000..2d1938033 --- /dev/null +++ b/mover/didigo545/scan/readme.md @@ -0,0 +1,13 @@ +![131731764356_.pic.jpg](../../../../../../Library/Containers/com.tencent.xinWeChat/Data/Library/Application%20Support/com.tencent.xinWeChat/2.0b4.0.9/9146c532503958328d0f3a842d5a1d21/Message/MessageTemp/731bbda69d35d134d464a5cfd76437e3/Image/131731764356_.pic.jpg) +![141731764356_.pic.jpg](../../../../../../Library/Containers/com.tencent.xinWeChat/Data/Library/Application%20Support/com.tencent.xinWeChat/2.0b4.0.9/9146c532503958328d0f3a842d5a1d21/Message/MessageTemp/731bbda69d35d134d464a5cfd76437e3/Image/141731764356_.pic.jpg) +![151731764361_.pic.jpg](../../../../../../Library/Containers/com.tencent.xinWeChat/Data/Library/Application%20Support/com.tencent.xinWeChat/2.0b4.0.9/9146c532503958328d0f3a842d5a1d21/Message/MessageTemp/731bbda69d35d134d464a5cfd76437e3/Image/151731764361_.pic.jpg) +![161731764495_.pic.jpg](../../../../../../Library/Containers/com.tencent.xinWeChat/Data/Library/Application%20Support/com.tencent.xinWeChat/2.0b4.0.9/9146c532503958328d0f3a842d5a1d21/Message/MessageTemp/731bbda69d35d134d464a5cfd76437e3/Image/161731764495_.pic.jpg) +![171731764579_.pic.jpg](../../../../../../Library/Containers/com.tencent.xinWeChat/Data/Library/Application%20Support/com.tencent.xinWeChat/2.0b4.0.9/9146c532503958328d0f3a842d5a1d21/Message/MessageTemp/731bbda69d35d134d464a5cfd76437e3/Image/171731764579_.pic.jpg) + + + +![参加会议.jpg](../../../../../../Desktop/%E5%8F%82%E5%8A%A0%E4%BC%9A%E8%AE%AE.jpg) +![B站.png](../../../../../../Desktop/B%E7%AB%99.png) +![水分子.jpg](../../../../../../Desktop/%E6%B0%B4%E5%88%86%E5%AD%90.jpg) +![tg关注.jpg](../../../../../../Desktop/tg%E5%85%B3%E6%B3%A8.jpg) +![仓库标星.jpg](../../../../../../Desktop/%E4%BB%93%E5%BA%93%E6%A0%87%E6%98%9F.jpg) \ No newline at end of file diff --git a/mover/fengfengxiong123/code/readme.md b/mover/fengfengxiong123/code/readme.md index f1af33134..be9e10324 100644 --- a/mover/fengfengxiong123/code/readme.md +++ b/mover/fengfengxiong123/code/readme.md @@ -1,5 +1,15 @@ # 命令 ```shell + +# 学习文档 +https://move.sui-book.com/your-first-move/hello-world.html + +# task代码 +https://github.com/hoh-zone/move-bootcamp + +# fork分支 +https://github.com/move-cn/letsmove + # 配置代理拉取代码 git clone -c http.proxy="127.0.0.1:2334" https://github.com/fengfengxiong123/letsmove.git @@ -9,10 +19,17 @@ sui -V # 零测试网sui币 sui client faucet +# 正在使用的地址 +sui client active-address + # 查看gas sui client gas +# 创建新项目 +sui move new xxx + # 发布上链 +cd xxx sui client publish # 测试网查看package地址 @@ -24,9 +41,146 @@ Transaction Digest: FuxCGHzDKWHko7UfiCxZbUFa7a7KKSLbdwPVgZyNt5Bc # 找到package id changes页 - Type为package/action为published +# PACKAGE_ID +0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667 + +# 账户 +0xd4d7fd4aef735c6da8d394c3f71f9ed5cd48ab277fe2be51c5b13761c0a5300c + +# 使用ptb构建交易 +sui client ptb \ +--gas-budget 100000000 \ +--assign sender @$MY_ADDRESS \ +--move-call $PACKAGE_ID::todo_list::new \ +--assign list \ +--transfer-objects "[list]" sender + +sui client ptb \ +--gas-budget 100000000 \ +--assign sender @0xd4d7fd4aef735c6da8d394c3f71f9ed5cd48ab277fe2be51c5b13761c0a5300c \ +--move-call 0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667::todo_list::new \ +--assign list \ +--transfer-objects "[list]" sender + + +# LIST_ID +0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa + +# ptb交易 +sui client ptb \ +--gas-budget 100000000 \ +--move-call 0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667::todo_list::add @0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa "'Finish the Hello, Sui chapter'" + + + +# 查看list_id +sui client object 0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa + +# 链式命令 +sui client ptb \ +--gas-budget 100000000 \ +--move-call $PACKAGE_ID::todo_list::add @$LIST_ID "'Finish Concepts chapter'" \ +--move-call $PACKAGE_ID::todo_list::add @$LIST_ID "'Read the Move Basics chapter'" \ +--move-call $PACKAGE_ID::todo_list::add @$LIST_ID "'Learn about Object Model'" \ +--move-call $PACKAGE_ID::todo_list::remove @$LIST_ID 0 +sui client ptb \ +--gas-budget 100000000 \ +--move-call 0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667::todo_list::add @0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa "'Finish Concepts chapter'" \ +--move-call 0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667::todo_list::add @0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa "'Read the Move Basics chapter'" \ +--move-call 0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667::todo_list::add @0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa "'Learn about Object Model'" \ +--move-call 0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667::todo_list::remove @0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa 0 +# 查看list_id +sui client object 0xb4e0cc01ad7bcb4bd3debdcb8bfa437b42435c313e2b05a28506dcb4779e49fa -``` \ No newline at end of file +``` + +## task2 调用命令 +```shell +sui client call \ + --package 0x1234567890abcdef \ + --module MyCoin \ + --function mint \ + --args \ + "0xdeadbeef" \ + "1000" \ + "0xrecipient_address" \ + --gas-budget 2000 + + + sui client call \ + --package 0x2 \ + --module coin \ + --function mint_and_transfer \ + --type-args 0x375aa2e13fdd2b740ed93c9b90e0a1353875b721c2872925e50b92366c65e599::dao::DAO \ + --args \ + 0x1021116270d1bee0eaabd4353a2b998009c74f86573df54a37a291cab33782d1 \ + 1000000000 \ + 0xd790d41adfffd48df8e38607991a297970743decff87517e647008a652587d4c + +``` + +## 共享币 +```shell + sui client call \ + --package 0x2 \ + --module coin \ + --function mint_and_transfer \ + --type-args 0x71d67141b2c06e7abdf6829aa2ca8e36cb469fe304519e084c3f29e9e6244824::dao::DAO \ + --args \ + 0x7a2079da6aa6a74d5a3466f98afe96a47cecca0be6c79ef151aa370720f855fd \ + 1000000000 \ + 0x1cf6273dc8d5f7f8189fbae937741434d388fefeabe029ac128c2fed67633498 +``` + +## 主网 +Digest: 9VCLdmeCVTtbcHs6ygV96YYMMSF3qnWrz1o6Aadx84QL + +账户:0x1cf6273dc8d5f7f8189fbae937741434d388fefeabe029ac128c2fed67633498 +pkg id : 0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83 + +### coin对象id +obj id : 0x56d0bb3c37de365e23a2c56180601da49d8b23794b45119f4fbb4c64deb1825a +ObjectType: 0x2::coin::CoinMetadata<0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83::faucetcoin::FAUCETCOIN> + +ObjectID: 0x6a64c9dbce72db96f7cc9cd7be8531f546a5ca3e9ebc43da2569f5e354bd6487 +ObjectType: 0x2::coin::CoinMetadata<0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83::dao::DAO> + +### TreasuryCap信息 +DAO TreasuryCap obj id : 0xe880375ea3d82755a9c387bf3fb705a9bbc5982afc5d16349773e162754a9b86 +faucet coin TreasuryCap obj id : 0x56d0bb3c37de365e23a2c56180601da49d8b23794b45119f4fbb4c64deb1825a + +## mint dao +```shell + sui client call \ + --package 0x2 \ + --module coin \ + --function mint_and_transfer \ + --type-args 0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83::dao::DAO \ + --args \ + 0xe880375ea3d82755a9c387bf3fb705a9bbc5982afc5d16349773e162754a9b86 \ + 7000000000 \ + 0x7b8e0864967427679b4e129f79dc332a885c6087ec9e187b53451a9006ee15f2 \ + --gas-budget 100000000 +``` + +## mint faucet coin + +```shell + sui client call \ + --package 0x2 \ + --module coin \ + --function mint_and_transfer \ + --type-args 0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83::faucetcoin::FAUCETCOIN \ + --args \ + 0x56d0bb3c37de365e23a2c56180601da49d8b23794b45119f4fbb4c64deb1825a \ + 8000000000 \ + 0x7b8e0864967427679b4e129f79dc332a885c6087ec9e187b53451a9006ee15f2 \ + --gas-budget 100000000 +``` + +## 使用sui cli转账 +sui client transfer-sui --to 0x2e312e10390700d045ae462dcac090354bda4a81dc151c0d538a250beb0492f5 --amount 13266772 --sui-coin-object-id 0x1feb5ad79c303c52cca592272203b259119fc3fb02e037209ceaf9570474ce08 --gas-budget 100000000 \ No newline at end of file diff --git a/mover/fengfengxiong123/code/task2/my_coin/Move.lock b/mover/fengfengxiong123/code/task2/my_coin/Move.lock new file mode 100644 index 000000000..f61eeb81b --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "2D9D5D84736483D7957D746CB95566597906F9A24C61AA1DFAD580DB2D3EC1AE" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates\\sui-framework\\packages\\move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83" +latest-published-id = "0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83" +published-version = "1" diff --git a/mover/fengfengxiong123/code/task2/my_coin/Move.toml b/mover/fengfengxiong123/code/task2/my_coin/Move.toml new file mode 100644 index 000000000..445dfd553 --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin/Move.toml @@ -0,0 +1,38 @@ +[package] +name = "my_coin" +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://gitee.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/mainnet" } +#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] +my_coin = "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/fengfengxiong123/code/task2/my_coin/sources/dao.move b/mover/fengfengxiong123/code/task2/my_coin/sources/dao.move new file mode 100644 index 000000000..a075c7480 --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin/sources/dao.move @@ -0,0 +1,20 @@ +module my_coin::dao { + + use sui::coin; + + public struct DAO has drop {} + + fun init(witness: DAO, ctx: &mut TxContext) { + let (treasury, metadata) = coin::create_currency( + witness, 9, + b"DAO", + b"DaoCoin", + b"dao to all", + option::none(), + ctx + ); + transfer::public_freeze_object(metadata); + transfer::public_transfer(treasury, tx_context::sender(ctx)); + // 0x54f53f96aa56ca74e3f121b63ed6fdbddaae7d306cf0f30c64dba503726b0cc::dao::DAO + } +} diff --git a/mover/fengfengxiong123/code/task2/my_coin/sources/faucet_coin.move b/mover/fengfengxiong123/code/task2/my_coin/sources/faucet_coin.move new file mode 100644 index 000000000..d320f1982 --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin/sources/faucet_coin.move @@ -0,0 +1,30 @@ +module my_coin::faucetcoin { + // 包id 0x054f53f96aa56ca74e3f121b63ed6fdbddaae7d306cf0f30c64dba503726b0cc + // sender 0x1cf6273dc8d5f7f8189fbae937741434d388fefeabe029ac128c2fed67633498 + + // TreasuryCap 0x8f26e253f0203dd5372db724eb4779bc697579a18d97fc996beb7f16957adb69 + // 类型 0x2::coin::TreasuryCap<0x54f53f96aa56ca74e3f121b63ed6fdbddaae7d306cf0f30c64dba503726b0cc::dao::DAO> + + // TreasuryCap 0x402a9c44f0563db50cc4d40e503730759c9b80c77249f7364ebf39b3e05a51ed + // 类型 0x2::coin::TreasuryCap<0x54f53f96aa56ca74e3f121b63ed6fdbddaae7d306cf0f30c64dba503726b0cc::faucetcoin::FAUCETCOIN> + + use sui::coin; + public struct FAUCETCOIN has drop {} + + fun init(witness: FAUCETCOIN, ctx: &mut TxContext) { + + let (treasury, metadata) = coin::create_currency( + witness, 9, + b"FTN", + b"FaucetCoin", + b"my faucet coin", + option::none(), + ctx + ); + transfer::public_freeze_object(metadata); // 0x2::coin::CoinMetadata<0x71d67141b2c06e7abdf6829aa2ca8e36cb469fe304519e084c3f29e9e6244824::dao::DAO> + transfer::public_share_object(treasury); + // 0x7a2079da6aa6a74d5a3466f98afe96a47cecca0be6c79ef151aa370720f855fd + // 0x2::coin::TreasuryCap<0x71d67141b2c06e7abdf6829aa2ca8e36cb469fe304519e084c3f29e9e6244824::dao::DAO> + } + +} diff --git a/mover/fengfengxiong123/code/task2/my_coin/tests/my_coin_tests.move b/mover/fengfengxiong123/code/task2/my_coin/tests/my_coin_tests.move new file mode 100644 index 000000000..4be556acf --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin/tests/my_coin_tests.move @@ -0,0 +1,19 @@ +/* +#[test_only] +module my_coin::my_coin_tests { + // uncomment this line to import the module + // use my_coin::my_coin; + + const ENotImplemented: u64 = 0; + + #[test] + fun test_my_coin() { + // pass + } + + #[test, expected_failure(abort_code = ::my_coin::my_coin_tests::ENotImplemented)] + fun test_my_coin_fail() { + abort ENotImplemented + } +} +*/ diff --git a/mover/fengfengxiong123/code/task2/my_coin2/Move.lock b/mover/fengfengxiong123/code/task2/my_coin2/Move.lock new file mode 100644 index 000000000..f61bb70e7 --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin2/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "527040C9D4064960C3424E12CA1A4F4392E2423DACC0F0C922968A9DD971B4D0" +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.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x71d67141b2c06e7abdf6829aa2ca8e36cb469fe304519e084c3f29e9e6244824" +latest-published-id = "0x71d67141b2c06e7abdf6829aa2ca8e36cb469fe304519e084c3f29e9e6244824" +published-version = "1" diff --git a/mover/fengfengxiong123/code/task2/my_coin2/Move.toml b/mover/fengfengxiong123/code/task2/my_coin2/Move.toml new file mode 100644 index 000000000..77e9accae --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin2/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "my_coin2" +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] +my_coin2 = "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/fengfengxiong123/code/task2/my_coin2/sources/my_coin2.move b/mover/fengfengxiong123/code/task2/my_coin2/sources/my_coin2.move new file mode 100644 index 000000000..90c0317f9 --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin2/sources/my_coin2.move @@ -0,0 +1,24 @@ +module my_coin2::dao { + // 摘要 Coxqzq8Y2EEE9BwANy7wJGvBBBgs8XyH8AvxSKuj1c36 + // sender 0x1cf6273dc8d5f7f8189fbae937741434d388fefeabe029ac128c2fed67633498 + // + use sui::coin; + public struct DAO has drop {} + + fun init(witness: DAO, ctx: &mut TxContext) { + + let (treasury, metadata) = coin::create_currency( + witness, 9, + b"DAO", + b"DaoCoin", + b"dao to all 2", + option::none(), + ctx + ); + transfer::public_freeze_object(metadata); // 0x2::coin::CoinMetadata<0x71d67141b2c06e7abdf6829aa2ca8e36cb469fe304519e084c3f29e9e6244824::dao::DAO> + transfer::public_share_object(treasury); + // 0x7a2079da6aa6a74d5a3466f98afe96a47cecca0be6c79ef151aa370720f855fd + // 0x2::coin::TreasuryCap<0x71d67141b2c06e7abdf6829aa2ca8e36cb469fe304519e084c3f29e9e6244824::dao::DAO> + } + +} diff --git a/mover/fengfengxiong123/code/task2/my_coin2/tests/my_coin2_tests.move b/mover/fengfengxiong123/code/task2/my_coin2/tests/my_coin2_tests.move new file mode 100644 index 000000000..8707b03b2 --- /dev/null +++ b/mover/fengfengxiong123/code/task2/my_coin2/tests/my_coin2_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module my_coin2::my_coin2_tests; +// uncomment this line to import the module +// use my_coin2::my_coin2; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_my_coin2() { + // pass +} + +#[test, expected_failure(abort_code = ::my_coin2::my_coin2_tests::ENotImplemented)] +fun test_my_coin2_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/fengfengxiong123/code/todo_list/Move.lock b/mover/fengfengxiong123/code/todo_list/Move.lock new file mode 100644 index 000000000..258447eab --- /dev/null +++ b/mover/fengfengxiong123/code/todo_list/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 2 +manifest_digest = "24B05BB09ED82BC03E089F813A1CEF032679C621EECFA63C57659ADE383815CE" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { name = "Sui" }, +] + +[[move.package]] +name = "MoveStdlib" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates\\sui-framework\\packages\\move-stdlib" } + +[[move.package]] +name = "Sui" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.34.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667" +latest-published-id = "0x8eff1442cf00ea873b5d76ebda77d3436503b2f9acdf51da77a007911abe5667" +published-version = "1" diff --git a/mover/fengfengxiong123/code/todo_list/Move.toml b/mover/fengfengxiong123/code/todo_list/Move.toml new file mode 100644 index 000000000..5a5f203d3 --- /dev/null +++ b/mover/fengfengxiong123/code/todo_list/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "todo_list" +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://gitee.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] +todo_list = "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/fengfengxiong123/code/todo_list/sources/todo_list.move b/mover/fengfengxiong123/code/todo_list/sources/todo_list.move new file mode 100644 index 000000000..15de6eaf3 --- /dev/null +++ b/mover/fengfengxiong123/code/todo_list/sources/todo_list.move @@ -0,0 +1,41 @@ +/// Module: todo_list +module todo_list::todo_list { + use std::string::String; + + /// List of todos. Can be managed by the owner and shared with others. + public struct TodoList has key, store { + id: UID, + items: vector + } + + /// Create a new todo list. + public fun new(ctx: &mut TxContext): TodoList { + let list = TodoList { + id: object::new(ctx), + items: vector[] + }; + + (list) + } + + /// Add a new todo item to the list. + public fun add(list: &mut TodoList, item: String) { + list.items.push_back(item); + } + + /// Remove a todo item from the list by index. + public fun remove(list: &mut TodoList, index: u64): String { + list.items.remove(index) + } + + /// Delete the list and the capability to manage it. + public fun delete(list: TodoList) { + let TodoList { id, items: _ } = list; + id.delete(); + } + + /// Get the number of items in the list. + public fun length(list: &TodoList): u64 { + list.items.length() + } +} diff --git a/mover/fengfengxiong123/code/todo_list/tests/todo_list_tests.move b/mover/fengfengxiong123/code/todo_list/tests/todo_list_tests.move new file mode 100644 index 000000000..a88170ed5 --- /dev/null +++ b/mover/fengfengxiong123/code/todo_list/tests/todo_list_tests.move @@ -0,0 +1,19 @@ +/* +#[test_only] +module todo_list::todo_list_tests { + // uncomment this line to import the module + // use todo_list::todo_list; + + const ENotImplemented: u64 = 0; + + #[test] + fun test_todo_list() { + // pass + } + + #[test, expected_failure(abort_code = ::todo_list::todo_list_tests::ENotImplemented)] + fun test_todo_list_fail() { + abort ENotImplemented + } +} +*/ diff --git a/mover/fengfengxiong123/readme.md b/mover/fengfengxiong123/readme.md index dcbfabbaa..e924fb50e 100644 --- a/mover/fengfengxiong123/readme.md +++ b/mover/fengfengxiong123/readme.md @@ -4,7 +4,7 @@ - github: `fengfengxiong123` ## 个人简介 -- 工作经验: x年 +- 工作经验: 6年 - 技术栈: `python django linux mysql vue flutter` > 重要提示 请认真写自己的简介 - 多年web2开发经验,对Move特别感兴趣,想通过Move入门区块链 @@ -19,11 +19,11 @@ - [x] package id 在 scan上的查看截图:![Scan截图](./images/pkg_id.png) ## 02 move coin -- [] My Coin package id : -- [] Faucet package id : -- [] 转账 `My Coin` hash: -- [] `Faucet Coin` address1 mint hash: -- [] `Faucet Coin` address2 mint hash: +- [x] My Coin package id : 0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83 +- [x] Faucet package id : 0xae412de9df987063117db968d17e8f4dfa16b92f5f9527e36af47af427070b83 +- [x] 转账 `My Coin` hash: 642AZ1s4jkSpfw8mkwkRZAFAGUFem6mJcWgeLiQpB1h9 +- [x] `Faucet Coin` address1 mint hash:GVbcaUXgakGcHiLDcTpWdN9D4jQoZdtVfXEeGfZKxZXp +- [x] `Faucet Coin` address2 mint hash:249CeKvrqYxujrSGfSAUmuP9Muubvg6wmoyTyw8U5Y9E ## 03 move NFT - [] nft package id : diff --git "a/mover/huahuahua1223/co-learn-2411/images/\345\210\206\344\272\253\350\275\254\345\217\221.jpg" "b/mover/huahuahua1223/co-learn-2411/images/\345\210\206\344\272\253\350\275\254\345\217\221.jpg" index 420e4a367..e62a37dfe 100644 Binary files "a/mover/huahuahua1223/co-learn-2411/images/\345\210\206\344\272\253\350\275\254\345\217\221.jpg" and "b/mover/huahuahua1223/co-learn-2411/images/\345\210\206\344\272\253\350\275\254\345\217\221.jpg" differ diff --git "a/mover/huahuahua1223/co-learn-2411/images/\347\254\254\344\270\211\345\221\250\347\233\264\346\222\255.jpg" "b/mover/huahuahua1223/co-learn-2411/images/\347\254\254\344\270\211\345\221\250\347\233\264\346\222\255.jpg" new file mode 100644 index 000000000..6a8b895b1 Binary files /dev/null and "b/mover/huahuahua1223/co-learn-2411/images/\347\254\254\344\270\211\345\221\250\347\233\264\346\222\255.jpg" differ diff --git a/mover/huahuahua1223/co-learn-2411/readme.md b/mover/huahuahua1223/co-learn-2411/readme.md index 8158fbde7..18077b6f6 100644 --- a/mover/huahuahua1223/co-learn-2411/readme.md +++ b/mover/huahuahua1223/co-learn-2411/readme.md @@ -19,20 +19,20 @@ - [x] 第一周:![学习记录截图](./images/第一周直播.jpg) - [x] 第二周:![学习记录截图](./images/第二周直播.jpg) -- [] 第三周:![学习记录截图](./images/你的图片地址) +- [x] 第三周:![学习记录截图](./images/第三周直播.jpg) - [] 第四周:![学习记录截图](./images/你的图片地址) ## 群里分享学习笔记 - [x] 第一篇笔记 -- [] 第二篇笔记 -- [] 第三篇笔记 +- [x] 第二篇笔记 +- [x] 第三篇笔记 - [] 第四篇笔记 ## 对外输出学习笔记 - [x] 第一篇笔记【[学习笔记链接](https://blog.csdn.net/Huahua_1223/article/details/143750762)】 -- [] 第二篇笔记【学习笔记链接】 +- [x] 第二篇笔记【[学习笔记链接](https://hua1223.blog.csdn.net/article/details/143866005)】 - [] 第三篇笔记【学习笔记链接】 - [] 第四篇笔记【学习笔记链接】 diff --git a/mover/huahuahua1223/code/task2/my_coin/Move.lock b/mover/huahuahua1223/code/task2/my_coin/Move.lock new file mode 100644 index 000000000..388612bc2 --- /dev/null +++ b/mover/huahuahua1223/code/task2/my_coin/Move.lock @@ -0,0 +1,40 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "F736B510287895B9E312F466011986BB6BE314FD8023E38FFD53560AA5EFBB84" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates\\sui-framework\\packages\\move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.35.2" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x6c1e664cc9cab212a59c7d2f8d30554ce8ace9efd2858074bb59fb14c60ef0ff" +latest-published-id = "0x6c1e664cc9cab212a59c7d2f8d30554ce8ace9efd2858074bb59fb14c60ef0ff" +published-version = "1" + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0x4e393fad36baba534f8cbfa9852665c49a69be64cf5b82576f267007e187d036" +latest-published-id = "0x4e393fad36baba534f8cbfa9852665c49a69be64cf5b82576f267007e187d036" +published-version = "1" diff --git a/mover/huahuahua1223/code/task2/my_coin/Move.toml b/mover/huahuahua1223/code/task2/my_coin/Move.toml new file mode 100644 index 000000000..a51b96f89 --- /dev/null +++ b/mover/huahuahua1223/code/task2/my_coin/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "my_coin" +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/mainnet" } + +# 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] +my_coin = "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/huahuahua1223/code/task2/my_coin/sources/huahuahua1223_coin.move b/mover/huahuahua1223/code/task2/my_coin/sources/huahuahua1223_coin.move new file mode 100644 index 000000000..25210ffb8 --- /dev/null +++ b/mover/huahuahua1223/code/task2/my_coin/sources/huahuahua1223_coin.move @@ -0,0 +1,23 @@ +module my_coin::huahuahua1223_coin{ + use sui::coin::create_currency; + use std::option::{Self, none, some}; + use sui::transfer::{ public_transfer, public_freeze_object }; + use sui::url::{Self, Url}; + + + public struct HUAHUAHUA1223_COIN has drop {} + + fun init(huahuahua1223_coin: HUAHUAHUA1223_COIN, ctx: &mut TxContext) { + let url = url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/138219491"); + let yes = some(url); + // let no = none(); + + let (treasury, coin_metadata) = + create_currency(huahuahua1223_coin, 8, b"HUAHUAHUA1223_COIN", b"HUAHUAHUA1223_COIN", b"this is my coin", yes, ctx); + + public_freeze_object(coin_metadata); + + public_transfer(treasury, ctx.sender()) + } + +} \ No newline at end of file diff --git a/mover/huahuahua1223/code/task2/my_coin/sources/huahuahua1223_faucet_coin.move b/mover/huahuahua1223/code/task2/my_coin/sources/huahuahua1223_faucet_coin.move new file mode 100644 index 000000000..5677b31d5 --- /dev/null +++ b/mover/huahuahua1223/code/task2/my_coin/sources/huahuahua1223_faucet_coin.move @@ -0,0 +1,23 @@ +module my_coin::huahuahua1223_faucet_coin{ + use sui::coin::create_currency; + use std::option::{Self, none, some}; + use sui::transfer::{ public_share_object, public_freeze_object }; + use sui::url::{Self, Url}; + + + public struct HUAHUAHUA1223_FAUCET_COIN has drop {} + + fun init(huahuahua1223_faucet_coin: HUAHUAHUA1223_FAUCET_COIN, ctx: &mut TxContext) { + let url = url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/138219491"); + let yes = some(url); + // let no = none(); + + let (treasury, coin_metadata) = + create_currency(huahuahua1223_faucet_coin, 8, b"HUAHUAHUA1223_FAUCET_COIN", b"HUAHUAHUA1223_FAUCET_COIN", b"this is my faucet coin", yes, ctx); + + public_freeze_object(coin_metadata); + + public_share_object(treasury) + } + +} \ No newline at end of file diff --git a/mover/huahuahua1223/code/task2/my_coin/tests/my_coin_tests.move b/mover/huahuahua1223/code/task2/my_coin/tests/my_coin_tests.move new file mode 100644 index 000000000..cd5b36060 --- /dev/null +++ b/mover/huahuahua1223/code/task2/my_coin/tests/my_coin_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module my_coin::my_coin_tests; +// uncomment this line to import the module +// use my_coin::my_coin; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_my_coin() { + // pass +} + +#[test, expected_failure(abort_code = ::my_coin::my_coin_tests::ENotImplemented)] +fun test_my_coin_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/huahuahua1223/notes/readme.md b/mover/huahuahua1223/notes/readme.md index 5819b6795..da62e111c 100644 --- a/mover/huahuahua1223/notes/readme.md +++ b/mover/huahuahua1223/notes/readme.md @@ -40,4 +40,72 @@ sui client publish --gas-budget 100000000 -事务数据、事务效果、事务块事件、对象更改和余额更改 \ No newline at end of file +事务数据、事务效果、事务块事件、对象更改和余额更改 + + +# task2 +## 1. 创建项目 +sui move new my_coin +cd .\my_coin\ +空编译 +sui move build + +## 2. 测试网部署 +```bash +sui client publish --skip-dependency-verification +``` +```bash +sui client call --help +``` + +调用铸造coin模块的 mint_and_transfer 函数,`0x2`是coin模块的包 +sui client call --package 0x2 +--module coin +--function mint_and_transfer +--type-args packageID::模块名::模块 +--args TreasuryCap的object id 铸造数量 接收地址 + +- my_coin::HUAHUAHUA1223_COIN +```bash +sui client call --package 0x2 --module coin --function mint_and_transfer --type-args 0x7caf338071535a6f0df38211d34cd475b4c5ae3958b591ffb967b947cf6b787b::huahuahua1223_coin::HUAHUAHUA1223_COIN --args 0x02ca6c177ab698e12e374270299c32019aaac562f37d20f5c108fe47b90d0daf 10000000000 0xfcaab3c6b0758f32b8e6782a23ab10a59ff0884a0785cd3d8ee391ccf96ca50a +``` + +- my_coin::HUAHUAHUA1223_FAUCET_COIN +```bash +sui client call --package 0x2 --module coin --function mint_and_transfer --type-args 0x7caf338071535a6f0df38211d34cd475b4c5ae3958b591ffb967b947cf6b787b::huahuahua1223_faucet_coin::HUAHUAHUA1223_FAUCET_COIN --args 0x4b543b18ce5f903d7bf8c63aaacacb63db414110bc696ddd058fdda2f0e4dcba 10000000000 0xfcaab3c6b0758f32b8e6782a23ab10a59ff0884a0785cd3d8ee391ccf96ca50a +``` + +## 3. 主网部署 +添加主网 +```bash +sui client new-env --alias mainnet --rpc https://fullnode.mainnet.sui.io:443 +``` + +切换到主网 +```bash +sui client switch --env mainnet +``` + +查看所有环境 +```bash +sui client envs +``` + +查看当前激活的地址 +```bash +sui client active-address +``` + +sui client publish --skip-dependency-verification + +- my_coin::HUAHUAHUA1223_COIN +```bash +sui client call --package 0x2 --module coin --function mint_and_transfer --type-args 0x4e393fad36baba534f8cbfa9852665c49a69be64cf5b82576f267007e187d036::huahuahua1223_coin::HUAHUAHUA1223_COIN --args 0xeb347cf0d593756d04a7f56eb7d71864ecc1b0d4db4f131dc58d8c735581d5e6 10000000000 0x7b8e0864967427679b4e129f79dc332a885c6087ec9e187b53451a9006ee15f2 +``` + +- my_coin::HUAHUAHUA1223_FAUCET_COIN +```bash +sui client call --package 0x2 --module coin --function mint_and_transfer --type-args 0x4e393fad36baba534f8cbfa9852665c49a69be64cf5b82576f267007e187d036::huahuahua1223_faucet_coin::HUAHUAHUA1223_FAUCET_COIN --args 0x0b1d96bcc48a001596fd1b8a98c9166f8653aee9888a12d221e807c0f5be0009 10000000000 0xfcaab3c6b0758f32b8e6782a23ab10a59ff0884a0785cd3d8ee391ccf96ca50a + +sui client call --package 0x2 --module coin --function mint_and_transfer --type-args 0x4e393fad36baba534f8cbfa9852665c49a69be64cf5b82576f267007e187d036::huahuahua1223_faucet_coin::HUAHUAHUA1223_FAUCET_COIN --args 0x0b1d96bcc48a001596fd1b8a98c9166f8653aee9888a12d221e807c0f5be0009 10000000000 0xba05e5ff69321ed26d686dc08ecb9df43113139f6483893740b35a8361c6c4a7 +``` \ No newline at end of file diff --git a/mover/huahuahua1223/readme.md b/mover/huahuahua1223/readme.md index 4e8b51800..b590cb51d 100644 --- a/mover/huahuahua1223/readme.md +++ b/mover/huahuahua1223/readme.md @@ -1,5 +1,5 @@ ## 基本信息 -- Sui钱包地址: `0xdbbf5b1fcca21cdd5bfc5c0653ff1186e58227b9f255e9b3e85ee28915946813` +- Sui钱包地址: `0xba05e5ff69321ed26d686dc08ecb9df43113139f6483893740b35a8361c6c4a7` > 首次参与需要完成第一个任务注册好钱包地址才被合并,并且后续学习奖励会打入这个地址 - github: `huahuahua1223` @@ -19,11 +19,11 @@ - [x] package id 在 scan上的查看截图:![Scan截图](./images/hello_scan.png) ## 02 move coin -- [] My Coin package id : -- [] Faucet package id : -- [] 转账 `My Coin` hash: -- [] `Faucet Coin` address1 mint hash: -- [] `Faucet Coin` address2 mint hash: +- [x] My Coin package id : `0x4e393fad36baba534f8cbfa9852665c49a69be64cf5b82576f267007e187d036` +- [x] Faucet package id : `0x4e393fad36baba534f8cbfa9852665c49a69be64cf5b82576f267007e187d036` +- [x] 转账 `My Coin` hash:`4DafrEdShrs2JpCEubqMvQABB7f51iid2j3yNfgDAFsp` +- [x] `Faucet Coin` address1 mint hash:`F9xZ7fnvucHvviSNeJQ3EiUX3599kBv1yVMw2vpyQpD9` +- [x] `Faucet Coin` address2 mint hash:`825rrdSMnRQwKB6ebNvVjhzYPhE4Wk3LVPwWt7STxJGc` ## 03 move NFT - [] nft package id : diff --git a/mover/itpika/code/task6/inedx.js b/mover/itpika/code/task6/inedx.js index cf63c7a81..2054c5fd1 100644 --- a/mover/itpika/code/task6/inedx.js +++ b/mover/itpika/code/task6/inedx.js @@ -6,7 +6,7 @@ const { pool, USDC } = require('navi-sdk/dist/address'); (async() => { let cli = new navi.NAVISDKClient({ - mnemonic: "oxygen live segment arrange divide snack nuclear stand cherry family travel doll", + mnemonic: "oxygen office_hour segment arrange divide snack nuclear stand cherry family travel doll", wordLength: 12, networkType: 'mainnet', numberOfAccounts: 2 }); let acc = cli.accounts[0]; diff --git a/mover/klren0312/code/check_in/Move.toml b/mover/klren0312/code/check_in/Move.toml new file mode 100644 index 000000000..87af25a2b --- /dev/null +++ b/mover/klren0312/code/check_in/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "check_in" +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] +check_in = "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/klren0312/code/check_in/sources/check_in.move b/mover/klren0312/code/check_in/sources/check_in.move new file mode 100644 index 000000000..c251914e3 --- /dev/null +++ b/mover/klren0312/code/check_in/sources/check_in.move @@ -0,0 +1,45 @@ +module check_in::check_in { + use std::ascii::{string, String}; + use std::bcs; + use std::hash::sha3_256; + use sui::transfer::share_object; + + const ESTRING: u64 = 0; + + + public struct FlagString has key { + id: UID, + str: String, + ture_num: u64 + } + + fun init(ctx: &mut TxContext) { + let flag_str = FlagString { + id: object::new(ctx), + str: string(b"LetsMoveCTF"), + ture_num: 0 + }; + share_object(flag_str); + } + + + + entry fun get_flag(): vector { + let mut bcs_flag = bcs::to_bytes(&string(b"9$3^U&7j'lX^yUsyP_")); + vector::append(&mut bcs_flag, *string(b"klren0312").as_bytes()); + let sha256 = sha3_256(bcs_flag); + sha256 + } + + entry fun check_get_flag( + flag: vector, + github_id: String, + flag_str: String, + ): vector { + let mut bcs_flag = bcs::to_bytes(&flag_str); + vector::append(&mut bcs_flag, *github_id.as_bytes()); + assert!(flag == sha3_256(bcs_flag), ESTRING); + sha3_256(bcs_flag) + } +} + diff --git a/mover/klren0312/code/check_in/tests/check_in_tests.move b/mover/klren0312/code/check_in/tests/check_in_tests.move new file mode 100644 index 000000000..4d658814e --- /dev/null +++ b/mover/klren0312/code/check_in/tests/check_in_tests.move @@ -0,0 +1,36 @@ + +#[test_only] +module check_in::check_in_tests; +// uncomment this line to import the module +use check_in::check_in; +use std::debug::print; +#[test] +fun test_check_in() { + let res2 = check_in::get_flag(); + print(&res2); + // check_in::check_get_flag( + // res2, + // string(b"klren0312"), + // string(b"0xc8dcd54baa7724177593a9f70598a09ae6a4286f996542e058f248209db08147"), + // ); + /** + function hexToUint8Array(hex) { + if (typeof hex !== 'string') { + throw new TypeError('Input must be a string'); + } + + if (hex.length % 2 !== 0) { + throw new Error('Hex string must have an even length'); + } + + const array = new Uint8Array(hex.length / 2); + for (let i = 0; i < hex.length; i += 2) { + array[i / 2] = parseInt(hex.substring(i, i + 2), 16); + } + + return array; + } + JSON.stringify(Array.from(hexToUint8Array('acb41a9ddfa1572aa4a818ffc04e27c1c16187115128323154257e452f033700'))) + + */ +} diff --git a/mover/klren0312/images/07checkin/call.png b/mover/klren0312/images/07checkin/call.png new file mode 100644 index 000000000..4d708edcf Binary files /dev/null and b/mover/klren0312/images/07checkin/call.png differ diff --git a/mover/klren0312/readme.md b/mover/klren0312/readme.md index b35cf9dd1..0f3f6dab9 100644 --- a/mover/klren0312/readme.md +++ b/mover/klren0312/readme.md @@ -45,8 +45,8 @@ - [x] save hash : [7LaCsFnPva62KDDSECgFFgFXYsrvEAzc8jEFY2sFkEX5](https://suiscan.xyz/mainnet/tx/7LaCsFnPva62KDDSECgFFgFXYsrvEAzc8jEFY2sFkEX5) ## 07 Move CTF Check In -- [] CLI call 截图 : ![截图](./images/你的图片地址) -- [] flag hash : +- [x] CLI call 截图 : ![截图](./images/07checkin/call.png) +- [x] flag hash : [5WVoCoD1RoWnXo8Z17r1QR8WjrjCfTcqpBnKSqn8i29D](https://suiscan.xyz/mainnet/tx/5WVoCoD1RoWnXo8Z17r1QR8WjrjCfTcqpBnKSqn8i29D) ## 08 Move CTF Lets Move - [] proof : diff --git a/mover/linqining/co-learn-2411/images/live/week1.png b/mover/linqining/co-learn-2411/images/office_hour/week1.png similarity index 100% rename from mover/linqining/co-learn-2411/images/live/week1.png rename to mover/linqining/co-learn-2411/images/office_hour/week1.png diff --git a/mover/linqining/co-learn-2411/images/office_hour/week2.png b/mover/linqining/co-learn-2411/images/office_hour/week2.png new file mode 100644 index 000000000..8cd20b9a4 Binary files /dev/null and b/mover/linqining/co-learn-2411/images/office_hour/week2.png differ diff --git a/mover/linqining/co-learn-2411/images/task/learn_task1/img.png b/mover/linqining/co-learn-2411/images/task/learn_week1/img.png similarity index 100% rename from mover/linqining/co-learn-2411/images/task/learn_task1/img.png rename to mover/linqining/co-learn-2411/images/task/learn_week1/img.png diff --git a/mover/linqining/co-learn-2411/images/task/learn_week2/img.png b/mover/linqining/co-learn-2411/images/task/learn_week2/img.png new file mode 100644 index 000000000..d3f71de42 Binary files /dev/null and b/mover/linqining/co-learn-2411/images/task/learn_week2/img.png differ diff --git a/mover/linqining/co-learn-2411/readme.md b/mover/linqining/co-learn-2411/readme.md index 11f81f2bc..106ab29f9 100644 --- a/mover/linqining/co-learn-2411/readme.md +++ b/mover/linqining/co-learn-2411/readme.md @@ -15,15 +15,15 @@ ## 每周课程学习 -- [x] 第一周:![学习记录截图](./images/task/learn_task1/img.png) -- [] 第二周:![学习记录截图](./images/你的图片地址) +- [x] 第一周:![学习记录截图](images/task/learn_week1/img.png) +- [x] 第二周:![学习记录截图](./images/task/learn_week2/img.png) - [] 第三周:![学习记录截图](./images/你的图片地址) - [] 第四周:![学习记录截图](./images/你的图片地址) ## 参加直播答疑 -- [x] 第一周:![学习记录截图](./images/live/week1.png) -- [] 第二周:![学习记录截图](./images/你的图片地址) +- [x] 第一周:![学习记录截图](images/office_hour/week1.png) +- [x] 第二周:![学习记录截图](./images/office_hour/week2.png) - [] 第三周:![学习记录截图](./images/你的图片地址) - [] 第四周:![学习记录截图](./images/你的图片地址) diff --git a/mover/linqining/code/task2/faucet_coin/Move.lock b/mover/linqining/code/task2/faucet_coin/Move.lock new file mode 100644 index 000000000..426795c0f --- /dev/null +++ b/mover/linqining/code/task2/faucet_coin/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "F8CFCF256E2F1BB7CD401C27799A09C40777C5C100F0DFA253E86DD7F0D4ED1B" +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.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0xf855a34f6870634a444260ec3a7ad5581334849d8388f63d67e703b06428edc4" +latest-published-id = "0xf855a34f6870634a444260ec3a7ad5581334849d8388f63d67e703b06428edc4" +published-version = "1" diff --git a/mover/linqining/code/task2/faucet_coin/Move.toml b/mover/linqining/code/task2/faucet_coin/Move.toml new file mode 100644 index 000000000..ce62a246c --- /dev/null +++ b/mover/linqining/code/task2/faucet_coin/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "faucet_coin" +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/mainnet" } + +# 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] +faucet_coin = "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/linqining/code/task2/faucet_coin/gen.sh b/mover/linqining/code/task2/faucet_coin/gen.sh new file mode 100644 index 000000000..7b244679d --- /dev/null +++ b/mover/linqining/code/task2/faucet_coin/gen.sh @@ -0,0 +1,3 @@ +sui client call --package 0x2 --module coin --function mint_and_transfer \ +--type-args 0xf855a34f6870634a444260ec3a7ad5581334849d8388f63d67e703b06428edc4::eig::EIG \ +--args 0x500fdab62d80e0e75fd09fe6e9cb463cf017cfb4171e25a70c9f9d387a01d187 10000000000000 0xc1f4704452819f75c258fe3a01e54d6561899e3478f818625ee8be716fbdd007 --gas-budget 3000000 \ No newline at end of file diff --git a/mover/linqining/code/task2/faucet_coin/sources/faucet_coin.move b/mover/linqining/code/task2/faucet_coin/sources/faucet_coin.move new file mode 100644 index 000000000..9ce68238a --- /dev/null +++ b/mover/linqining/code/task2/faucet_coin/sources/faucet_coin.move @@ -0,0 +1,15 @@ +module faucet_coin::eig; +use std::option::none; +use sui::coin::create_currency; +use sui::transfer::{public_freeze_object, public_share_object}; +use sui::url::Url; + +public struct EIG has drop{} + +fun init(eig:EIG,ctx: &mut TxContext){ + let eig_img = none(); + let (treasury,metadata) = create_currency(eig,8,b"EIG",b"EIG",b"eig coin",eig_img,ctx); + public_freeze_object(metadata); + public_share_object(treasury); +} + diff --git a/mover/linqining/code/task2/faucet_coin/tests/faucet_coin_tests.move b/mover/linqining/code/task2/faucet_coin/tests/faucet_coin_tests.move new file mode 100644 index 000000000..74b01751a --- /dev/null +++ b/mover/linqining/code/task2/faucet_coin/tests/faucet_coin_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module faucet_coin::faucet_coin_tests; +// uncomment this line to import the module +// use faucet_coin::faucet_coin; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_faucet_coin() { + // pass +} + +#[test, expected_failure(abort_code = ::faucet_coin::faucet_coin_tests::ENotImplemented)] +fun test_faucet_coin_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/linqining/code/task2/my_coin/Move.lock b/mover/linqining/code/task2/my_coin/Move.lock new file mode 100644 index 000000000..e8e853077 --- /dev/null +++ b/mover/linqining/code/task2/my_coin/Move.lock @@ -0,0 +1,40 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "0A4652D38CF3C3FDB79EC6C1C98FCFF7B2E933E12B84A1DA267DB28F66AFECE3" +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.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x23728ec5d011eaf7a8bca55811edf283d83a3ffe105b1bfd067ebb16a475cb1d" +latest-published-id = "0x23728ec5d011eaf7a8bca55811edf283d83a3ffe105b1bfd067ebb16a475cb1d" +published-version = "1" + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0xff6c887f84778d86304dab92b31fed7ea25fec1bdc783c9f7c9a2bfa0546f4a3" +latest-published-id = "0xff6c887f84778d86304dab92b31fed7ea25fec1bdc783c9f7c9a2bfa0546f4a3" +published-version = "1" diff --git a/mover/linqining/code/task2/my_coin/Move.toml b/mover/linqining/code/task2/my_coin/Move.toml new file mode 100644 index 000000000..b9ca003f8 --- /dev/null +++ b/mover/linqining/code/task2/my_coin/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "my_coin" +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] +my_coin = "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/linqining/code/task2/my_coin/gen.sh b/mover/linqining/code/task2/my_coin/gen.sh new file mode 100644 index 000000000..553c61872 --- /dev/null +++ b/mover/linqining/code/task2/my_coin/gen.sh @@ -0,0 +1,3 @@ +sui client call --package 0x2 --module coin --function mint_and_transfer \ +--type-args 0xff6c887f84778d86304dab92b31fed7ea25fec1bdc783c9f7c9a2bfa0546f4a3::usd::USD \ +--args 0x3e29fd3385f060829514eba6e0aabcdca7e7de0c6b689f4a25a5484b9fa86a0c 10000000000000 0x7b8e0864967427679b4e129f79dc332a885c6087ec9e187b53451a9006ee15f2 --gas-budget 3000000 \ No newline at end of file diff --git a/mover/linqining/code/task2/my_coin/sources/my_coin.move b/mover/linqining/code/task2/my_coin/sources/my_coin.move new file mode 100644 index 000000000..67beb012b --- /dev/null +++ b/mover/linqining/code/task2/my_coin/sources/my_coin.move @@ -0,0 +1,14 @@ +module my_coin::usd; +use std::option::none; +use sui::coin::create_currency; +use sui::transfer::{public_freeze_object, public_transfer}; +use sui::url::Url; + +public struct USD has drop{} + +fun init(usd:USD,ctx: &mut TxContext){ + let usd_img = none(); + let (treasury,metadata) = create_currency(usd,8,b"USD",b"USD",b"world currency",usd_img,ctx); + public_freeze_object(metadata); + public_transfer(treasury,ctx.sender()); +} diff --git a/mover/linqining/code/task2/my_coin/tests/my_coin_tests.move b/mover/linqining/code/task2/my_coin/tests/my_coin_tests.move new file mode 100644 index 000000000..cd5b36060 --- /dev/null +++ b/mover/linqining/code/task2/my_coin/tests/my_coin_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module my_coin::my_coin_tests; +// uncomment this line to import the module +// use my_coin::my_coin; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_my_coin() { + // pass +} + +#[test, expected_failure(abort_code = ::my_coin::my_coin_tests::ENotImplemented)] +fun test_my_coin_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/linqining/code/task3/display_nft/Move.lock b/mover/linqining/code/task3/display_nft/Move.lock new file mode 100644 index 000000000..4a8817084 --- /dev/null +++ b/mover/linqining/code/task3/display_nft/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "6B7A8AED2C1EF029F8D2281D36C6E8AADD6050481843FF50F3E1DB6F5CE02FC4" +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.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0x08e4c88ca1eb4233b4ea72e3b762d94ae48e3fd6e73939a7244fd31b2ade8db9" +latest-published-id = "0x08e4c88ca1eb4233b4ea72e3b762d94ae48e3fd6e73939a7244fd31b2ade8db9" +published-version = "1" diff --git a/mover/linqining/code/task3/display_nft/Move.toml b/mover/linqining/code/task3/display_nft/Move.toml new file mode 100644 index 000000000..7ab1e284d --- /dev/null +++ b/mover/linqining/code/task3/display_nft/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "display_nft" +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] +display_nft = "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/linqining/code/task3/display_nft/sources/display_nft.move b/mover/linqining/code/task3/display_nft/sources/display_nft.move new file mode 100644 index 000000000..b029d9fda --- /dev/null +++ b/mover/linqining/code/task3/display_nft/sources/display_nft.move @@ -0,0 +1,70 @@ +module display_nft::display_nft; +use std::string::String; +use std::string; +use sui::package; +use sui::display; + +public struct MyNFT has key,store{ + id: UID, + name:String, + image_url:String, +} + +public struct DISPLAY_NFT has drop{ + +} + +fun init(otw:DISPLAY_NFT,ctx:&mut TxContext){ + + let keys = vector[ + b"name".to_string(), + b"link".to_string(), + b"image_url".to_string(), + b"description".to_string(), + b"project_url".to_string(), + b"creator".to_string(), + ]; + let values = vector[ + // For `name` one can use the `Hero.name` property + b"{name}".to_string(), + // For `link` one can build a URL using an `id` property + b"https://sui-heroes.io/hero/{id}".to_string(), + // For `image_url` use an IPFS template + `image_url` property. + b"{image_url}".to_string(), + // Description is static for all `Hero` objects. + b"A true Hero of the Sui ecosystem!".to_string(), + // Project URL is usually static + b"https://sui-heroes.io".to_string(), + // Creator field can be any + b"Unknown Sui Fan".to_string(), + ]; + + // Claim the `Publisher` for the package! + let publisher = package::claim(otw, ctx); + + // Get a new `Display` object for the `Hero` type. + let mut display = display::new_with_fields( + &publisher, keys, values, ctx + ); + + // Commit first version of `Display` to apply changes. + display.update_version(); + transfer::public_transfer(publisher,ctx.sender()); + transfer::public_transfer(display,ctx.sender()); + + let my_nft = MyNFT{ + id: object::new(ctx), + name:string::utf8(b"linqining"), + image_url: string::utf8(b"https://avatars.githubusercontent.com/u/18323181?s=400&u=1a7a274db375e0ffe9f303939d3283c5cedc1e25&v=4"), + }; + transfer::public_transfer(my_nft,ctx.sender()) +} + +public entry fun mint(url:String,ctx:&mut TxContext){ + let my_nft = MyNFT{ + id: object::new(ctx), + name:string::utf8(b"linqining"), + image_url: url, + }; + transfer::public_transfer(my_nft,ctx.sender()); +} \ No newline at end of file diff --git a/mover/linqining/code/task3/display_nft/tests/display_nft_tests.move b/mover/linqining/code/task3/display_nft/tests/display_nft_tests.move new file mode 100644 index 000000000..8bb8a300a --- /dev/null +++ b/mover/linqining/code/task3/display_nft/tests/display_nft_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module display_nft::display_nft_tests; +// uncomment this line to import the module +// use display_nft::display_nft; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_display_nft() { + // pass +} + +#[test, expected_failure(abort_code = ::display_nft::display_nft_tests::ENotImplemented)] +fun test_display_nft_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/linqining/code/task3/nft/Move.lock b/mover/linqining/code/task3/nft/Move.lock new file mode 100644 index 000000000..dd986e72f --- /dev/null +++ b/mover/linqining/code/task3/nft/Move.lock @@ -0,0 +1,40 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "9D4FCF5807A34E3110DFBA44AD92FEFEC55EE3DE8CF58F3D302F55D3004E70D1" +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.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x34caeefe0d3b271ec280a386a37090cae86a35b5caadb9ed1b19c42698e2a92c" +latest-published-id = "0x34caeefe0d3b271ec280a386a37090cae86a35b5caadb9ed1b19c42698e2a92c" +published-version = "1" + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0xd274bf8a1ad63e7969ac9f653c2017c684e3a3762dff2bd48d7c5b7796a4263a" +latest-published-id = "0xd274bf8a1ad63e7969ac9f653c2017c684e3a3762dff2bd48d7c5b7796a4263a" +published-version = "1" diff --git a/mover/linqining/code/task3/nft/Move.toml b/mover/linqining/code/task3/nft/Move.toml new file mode 100644 index 000000000..504c662e4 --- /dev/null +++ b/mover/linqining/code/task3/nft/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "nft" +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] +nft = "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/linqining/code/task3/nft/sources/nft.move b/mover/linqining/code/task3/nft/sources/nft.move new file mode 100644 index 000000000..e17dd30c0 --- /dev/null +++ b/mover/linqining/code/task3/nft/sources/nft.move @@ -0,0 +1,67 @@ +module nft::mynft; +use std::string::String; +use std::string; +use sui::transfer::transfer; + +public struct MyNFT has key{ + id: UID, + name:String, + image_url:String, +} + +public struct DisplayNft has drop{ + +} + +fun init(otw:DisplayNft,ctx:&mut TxContext){ + let my_nft = MyNFT{ + id: object::new(ctx), + name:string::utf8(b"linqining"), + image_url: string::utf8(b"https://avatars.githubusercontent.com/u/18323181?s=400&u=1a7a274db375e0ffe9f303939d3283c5cedc1e25&v=4"), + }; + transfer(my_nft,ctx.sender()); +} + +public entry fun mint(url:String,ctx:&mut TxContext){ + let my_nft = MyNFT{ + id: object::new(ctx), + name:string::utf8(b"linqining"), + image_url: url, + }; + let keys = vector[ + b"name".to_string(), + b"link".to_string(), + b"image_url".to_string(), + b"description".to_string(), + b"project_url".to_string(), + b"creator".to_string(), + ]; + + let values = vector[ + // For `name` one can use the `Hero.name` property + b"{name}".to_string(), + // For `link` one can build a URL using an `id` property + b"https://sui-heroes.io/hero/{id}".to_string(), + // For `image_url` use an IPFS template + `image_url` property. + b"ipfs://{image_url}".to_string(), + // Description is static for all `Hero` objects. + b"A true Hero of the Sui ecosystem!".to_string(), + // Project URL is usually static + b"https://sui-heroes.io".to_string(), + // Creator field can be any + b"Unknown Sui Fan".to_string(), + ]; + + // Claim the `Publisher` for the package! + let publisher = package::claim(otw, ctx); + + // Get a new `Display` object for the `Hero` type. + let mut display = display::new_with_fields( + &publisher, keys, values, ctx + ); + + // Commit first version of `Display` to apply changes. + display.update_version(&display); + transfer(my_nft,ctx.sender()); + transfer(display,ctx.sender()); +} \ No newline at end of file diff --git a/mover/linqining/code/task3/nft/tests/nft_tests.move b/mover/linqining/code/task3/nft/tests/nft_tests.move new file mode 100644 index 000000000..3c9c56a93 --- /dev/null +++ b/mover/linqining/code/task3/nft/tests/nft_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module nft::nft_tests; +// uncomment this line to import the module +// use nft::nft; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_nft() { + // pass +} + +#[test, expected_failure(abort_code = ::nft::nft_tests::ENotImplemented)] +fun test_nft_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/linqining/images/nft_mint.png b/mover/linqining/images/nft_mint.png new file mode 100644 index 000000000..4c09dbed2 Binary files /dev/null and b/mover/linqining/images/nft_mint.png differ diff --git a/mover/linqining/readme.md b/mover/linqining/readme.md index e1b1e7872..0e3b4c62d 100644 --- a/mover/linqining/readme.md +++ b/mover/linqining/readme.md @@ -16,23 +16,24 @@ ## 任务 ## 01 hello move -- [✓] Sui cli version: sui 1.37.1-homebrew -- [✓] Sui钱包截图: ![Sui钱包截图](./images/IMG_3635.PNG) -- [✓] package id: 0x2fee616afb84d0252eddbcd75c7b5b5bebade95ba2683e3f2600d6437f7b74e2 -- [✓] package id 在 scan上的查看截图:![Scan截图](./images/img.png) +- [x] Sui cli version: sui 1.37.1-homebrew +- [x] Sui钱包截图: ![Sui钱包截图](./images/IMG_3635.PNG) +- [x] package id: 0x2fee616afb84d0252eddbcd75c7b5b5bebade95ba2683e3f2600d6437f7b74e2 +- [x] package id 在 scan上的查看截图:![Scan截图](./images/img.png) ## 02 move coin -- [] My Coin package id : -- [] Faucet package id : -- [] 转账 `My Coin` hash: -- [] `Faucet Coin` address1 mint hash: -- [] `Faucet Coin` address2 mint hash: +- [x] My Coin package id : 0xff6c887f84778d86304dab92b31fed7ea25fec1bdc783c9f7c9a2bfa0546f4a3 +- [x] Faucet package id : 0xf855a34f6870634a444260ec3a7ad5581334849d8388f63d67e703b06428edc4 +- [x] 转账 `My Coin` hash: zMbWbMhgKgaWxJBwYswUJpqHR4ZmUCVu8856P2jjz2p +- [x] `Faucet Coin` address1(0x7caaf3d123266f92398b3b642682133098afa7017b3a74b7fd0442d0368ae595) mint hash: 5XY6xTNBYmSYN4zGGf7WRUV3pB7Q4Tn8fm1WFjqktQZc +- [x] `Faucet Coin` address2(0xc1f4704452819f75c258fe3a01e54d6561899e3478f818625ee8be716fbdd007) mint hash: HYr5URs9WbfP4sEUxQJtbfPg16U33XCmNnGwv7MPyVVM ## 03 move NFT -- [] nft package id : -- [] nft object id : -- [] 转账 nft hash: -- [] scan上的NFT截图:![Scan截图](./images/你的图片地址) +- [x] nft package id : 0x08e4c88ca1eb4233b4ea72e3b762d94ae48e3fd6e73939a7244fd31b2ade8db9 +- [x] nft object id : 0x2f7c23c9e1e90dde2164fd15bdded9e8d43e6f19e81822883a3beb93f4495899 +- [x] 转账 nft hash: PmWjBzc9RfS8UnQ14URBZKktEptWv4r1x3FN8dUCDqt +- [x] scan上的NFT截图:![Scan截图](./images/nft_mint.png) + ## 04 Move Game - [] game package id : diff --git a/mover/qwrdxer/code/task5/cmd.sh b/mover/qwrdxer/code/task5/cmd.sh new file mode 100644 index 000000000..894ca72df --- /dev/null +++ b/mover/qwrdxer/code/task5/cmd.sh @@ -0,0 +1,398 @@ +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Transaction Data │ +├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ Gas Owner: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ Gas Budget: 33116000 MIST │ +│ Gas Price: 750 MIST │ +│ Gas Payment: │ +│ ┌── │ +│ │ ID: 0x66304f3dfd22f5209bff3fef0c4da9df77ff656e07f5f16ee9f6d233c613bf27 │ +│ │ Version: 420167053 │ +│ │ Digest: 9gaVNcbtyjzEjm8rp3mLic6ZKMCyMFem9Ucwdo68LQ9F │ +│ └── │ +│ │ +│ Transaction Kind: Programmable │ +│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ +│ │ Input Objects │ │ +│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ +│ │ 0 Pure Arg: Type: address, Value: "0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b" │ │ +│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ +│ ╭─────────────────────────────────────────────────────────────────────────╮ │ +│ │ Commands │ │ +│ ├─────────────────────────────────────────────────────────────────────────┤ │ +│ │ 0 Publish: │ │ +│ │ ┌ │ │ +│ │ │ Dependencies: │ │ +│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000001 │ │ +│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000002 │ │ +│ │ └ │ │ +│ │ │ │ +│ │ 1 TransferObjects: │ │ +│ │ ┌ │ │ +│ │ │ Arguments: │ │ +│ │ │ Result 0 │ │ +│ │ │ Address: Input 0 │ │ +│ │ └ │ │ +│ ╰─────────────────────────────────────────────────────────────────────────╯ │ +│ │ +│ Signatures: │ +│ FGCf2khY84o8xLXXY7gR6Czmv4FbslHIDEujAoYUEd4Tsw63J7QcyKRm8F5D6DNSzrK6ZYBtdcvyoc3FMg04CQ== │ +│ │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Transaction Effects │ +├───────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Digest: EdyFY8wtPc6pErLYTd55VbPzgU9uYiMU6KvUkRmAYxeB │ +│ Status: Success │ +│ Executed Epoch: 586 │ +│ │ +│ Created Objects: │ +│ ┌── │ +│ │ ID: 0x0f91bfa5e9c0f2d92287771ed68042b564781da9e78855c2d64e9e171cb7436d │ +│ │ Owner: Immutable │ +│ │ Version: 420167054 │ +│ │ Digest: 7xdsNJ4Vw7qcEEA6Heb7FNP7Y55canFp16FMNe7npEm1 │ +│ └── │ +│ ┌── │ +│ │ ID: 0x1db50d717e2ecad7b55d277237db3f7d579357ab79e371c4a3f5dc4d0ba52e59 │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ Version: 420167054 │ +│ │ Digest: H1EdLQBS9sLcxj8VpEcVJX6WRiZ51ZMb9A1SMYrmyvFz │ +│ └── │ +│ ┌── │ +│ │ ID: 0x3e7aa58d91050a37bde593209b2fc46c550001cb13da51dde83be5e33ac6cb57 │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ Version: 420167054 │ +│ │ Digest: 5xF5VXostD5NJCUu5sKieCgosQctorHwDkCPSnemRHy1 │ +│ └── │ +│ ┌── │ +│ │ ID: 0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5 │ +│ │ Owner: Immutable │ +│ │ Version: 1 │ +│ │ Digest: 7t88hbho67Yz1cHonf7wrv6VPULi3jmE4MBXXpkDH3q3 │ +│ └── │ +│ ┌── │ +│ │ ID: 0x84bc9bc113ce987eb35ee92f1faf61ddb38ac8c6b9d2f4d15c0479a70b350580 │ +│ │ Owner: Immutable │ +│ │ Version: 420167054 │ +│ │ Digest: 7yrFSj1qzCX8j2TXF9GjUzLYD2fxgkmgSTqgjwAQmdDB │ +│ └── │ +│ ┌── │ +│ │ ID: 0x8b1d00d1dadb2a5c5c9db6cfcba611e5c8be56513f3e62e3ef687def5c27dae2 │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ Version: 420167054 │ +│ │ Digest: 77NNchMxMwRXq4BPe9gYhh3az73ENUeRuiMGbt3JDkPt │ +│ └── │ +│ ┌── │ +│ │ ID: 0xa57ddfa65f3f524e4d057edf4a1a0dec70946083da7190a8e0b4f2b91b815875 │ +│ │ Owner: Immutable │ +│ │ Version: 420167054 │ +│ │ Digest: 7PwjwXsGGSBQ7xuDNAcRRA46NLvZZobGXZcKKuqc37TN │ +│ └── │ +│ ┌── │ +│ │ ID: 0xfc2bd925a6c4d4fa711240d759b9084fb859e9b58ec19799a2ea56d37204a507 │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ Version: 420167054 │ +│ │ Digest: 7t7mXzVkzg27X4NWk6SzVXgvThDgPkkEWdkdMveon83H │ +│ └── │ +│ Mutated Objects: │ +│ ┌── │ +│ │ ID: 0x66304f3dfd22f5209bff3fef0c4da9df77ff656e07f5f16ee9f6d233c613bf27 │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ Version: 420167054 │ +│ │ Digest: 7DbvUzo5fL5xSJJMmTbeyhhzHubDdvaXKpNKoc48Mv8 │ +│ └── │ +│ Gas Object: │ +│ ┌── │ +│ │ ID: 0x66304f3dfd22f5209bff3fef0c4da9df77ff656e07f5f16ee9f6d233c613bf27 │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ Version: 420167054 │ +│ │ Digest: 7DbvUzo5fL5xSJJMmTbeyhhzHubDdvaXKpNKoc48Mv8 │ +│ └── │ +│ Gas Cost Summary: │ +│ Storage Cost: 31616000 MIST │ +│ Computation Cost: 750000 MIST │ +│ Storage Rebate: 978120 MIST │ +│ Non-refundable Storage Fee: 9880 MIST │ +│ │ +│ Transaction Dependencies: │ +│ 49puDQZwHRnu7zYoARCjco1dFKMiK7LVSS8B5Si1yVdh │ +│ 4XMTF4L9pjHKtYRoYJnR8rWyBp8Zewvak7PVmSEEuTKR │ +│ 8MkMyu5cseLwqyWDwg947q7U2d7ipSoGu9LZQh744JRJ │ +╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─────────────────────────────╮ +│ No transaction block events │ +╰─────────────────────────────╯ + +╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Object Changes │ +├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Created Objects: │ +│ ┌── │ +│ │ ObjectID: 0x0f91bfa5e9c0f2d92287771ed68042b564781da9e78855c2d64e9e171cb7436d │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Immutable │ +│ │ ObjectType: 0x2::coin::CoinMetadata<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_USDT::QWRDXER_USDT> │ +│ │ Version: 420167054 │ +│ │ Digest: 7xdsNJ4Vw7qcEEA6Heb7FNP7Y55canFp16FMNe7npEm1 │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0x1db50d717e2ecad7b55d277237db3f7d579357ab79e371c4a3f5dc4d0ba52e59 │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ ObjectType: 0x2::package::UpgradeCap │ +│ │ Version: 420167054 │ +│ │ Digest: H1EdLQBS9sLcxj8VpEcVJX6WRiZ51ZMb9A1SMYrmyvFz │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0x3e7aa58d91050a37bde593209b2fc46c550001cb13da51dde83be5e33ac6cb57 │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ ObjectType: 0x2::coin::TreasuryCap<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_USDT::QWRDXER_USDT> │ +│ │ Version: 420167054 │ +│ │ Digest: 5xF5VXostD5NJCUu5sKieCgosQctorHwDkCPSnemRHy1 │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0x84bc9bc113ce987eb35ee92f1faf61ddb38ac8c6b9d2f4d15c0479a70b350580 │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Immutable │ +│ │ ObjectType: 0x2::coin::CoinMetadata<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_DOGE::QWRDXER_DOGE> │ +│ │ Version: 420167054 │ +│ │ Digest: 7yrFSj1qzCX8j2TXF9GjUzLYD2fxgkmgSTqgjwAQmdDB │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0x8b1d00d1dadb2a5c5c9db6cfcba611e5c8be56513f3e62e3ef687def5c27dae2 │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ ObjectType: 0x2::coin::TreasuryCap<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_RMB::QWRDXER_RMB> │ +│ │ Version: 420167054 │ +│ │ Digest: 77NNchMxMwRXq4BPe9gYhh3az73ENUeRuiMGbt3JDkPt │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0xa57ddfa65f3f524e4d057edf4a1a0dec70946083da7190a8e0b4f2b91b815875 │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Immutable │ +│ │ ObjectType: 0x2::coin::CoinMetadata<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_RMB::QWRDXER_RMB> │ +│ │ Version: 420167054 │ +│ │ Digest: 7PwjwXsGGSBQ7xuDNAcRRA46NLvZZobGXZcKKuqc37TN │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0xfc2bd925a6c4d4fa711240d759b9084fb859e9b58ec19799a2ea56d37204a507 │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ ObjectType: 0x2::coin::TreasuryCap<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_DOGE::QWRDXER_DOGE> │ +│ │ Version: 420167054 │ +│ │ Digest: 7t7mXzVkzg27X4NWk6SzVXgvThDgPkkEWdkdMveon83H │ +│ └── │ +│ Mutated Objects: │ +│ ┌── │ +│ │ ObjectID: 0x66304f3dfd22f5209bff3fef0c4da9df77ff656e07f5f16ee9f6d233c613bf27 │ +│ │ Sender: 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI> │ +│ │ Version: 420167054 │ +│ │ Digest: 7DbvUzo5fL5xSJJMmTbeyhhzHubDdvaXKpNKoc48Mv8 │ +│ └── │ +│ Published Objects: │ +│ ┌── │ +│ │ PackageID: 0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5 │ +│ │ Version: 1 │ +│ │ Digest: 7t88hbho67Yz1cHonf7wrv6VPULi3jmE4MBXXpkDH3q3 │ +│ │ Modules: qwrdxer_DOGE, qwrdxer_RMB, qwrdxer_USDT │ +│ └── │ +╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Balance Changes │ +├───────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ ┌── │ +│ │ Owner: Account Address ( 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b ) │ +│ │ CoinType: 0x2::sui::SUI │ +│ │ Amount: -31387880 │ +│ └── │ +╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ + + +│ │ ObjectType: 0x2::coin::TreasuryCap<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_RMB::QWRDXER_RMB> 0x8b1d00d1dadb2a5c5c9db6cfcba611e5c8be56513f3e62e3ef687def5c27dae2 +│ │ ObjectType: 0x2::coin::TreasuryCap<0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5::qwrdxer_USDT::QWRDXER_USDT> │0x3e7aa58d91050a37bde593209b2fc46c550001cb13da51dde83be5e33ac6cb57 +# 领水 +sui client call --package 0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5 --module qwrdxer_RMB --function mint --args 0x8b1d00d1dadb2a5c5c9db6cfcba611e5c8be56513f3e62e3ef687def5c27dae2 1000000000 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b --gas-budget 10000000 + +sui client call --package 0x624279676894ea3ea17937402ec82c0a9681fdf34dd4b5dce75ccde4dd56a8f5 --module qwrdxer_USDT --function mint --args 0x3e7aa58d91050a37bde593209b2fc46c550001cb13da51dde83be5e33ac6cb57 1000000000 0x01bde56f16b7ad996f559ff2d34fa7a11030a8f303ff69bfe1017b321591cc5b --gas-budget 10000000 + +# 存钱 +admin_cap: 0x057bb2450d43c518561ba16d5693bfd3e10c1e5d8e84729035aadb5122106ca7 +swap_bank: 0x4dfdb243dcbc0cc041619e0a48da4ab01e95400062a6ec1c592273396bbdb16c +packageid: 0x48251c536f9c06c5a68d958ce4c1ba6ee1d1bf36698ab42b0c1929d12969a840 + +public entry fun deposit_CoinUSDT(_:&AdminCap,bank:&mut SwapBank,usdtcoin:Coin,_:&mut TxContext){ +sui client call --package 0x48251c536f9c06c5a68d958ce4c1ba6ee1d1bf36698ab42b0c1929d12969a840 --module task5_swap --function deposit_CoinRMB \ +--args 0x057bb2450d43c518561ba16d5693bfd3e10c1e5d8e84729035aadb5122106ca7 0x4dfdb243dcbc0cc041619e0a48da4ab01e95400062a6ec1c592273396bbdb16c 0xa377c0e86efa13a9ff669b0d0cf3be9aff44bc9d2dcdf96ac7653654e69a1ca3 --gas-budget 10000000 + +sui client call --package 0x48251c536f9c06c5a68d958ce4c1ba6ee1d1bf36698ab42b0c1929d12969a840 --module task5_swap --function deposit_CoinUSDT \ +--args 0x057bb2450d43c518561ba16d5693bfd3e10c1e5d8e84729035aadb5122106ca7 0x4dfdb243dcbc0cc041619e0a48da4ab01e95400062a6ec1c592273396bbdb16c 0xa5d7125976b2c3a2c8d3eab6c4954d3153aa683dff7b89f6bd27e5dc0264a0a2 --gas-budget 10000000 + +# swap +sui client call --package 0x48251c536f9c06c5a68d958ce4c1ba6ee1d1bf36698ab42b0c1929d12969a840 --module task5_swap --function swap_USDT_TO_RMB \ +--args 0x4dfdb243dcbc0cc041619e0a48da4ab01e95400062a6ec1c592273396bbdb16c 0xe87cb58658f6078bcb896d90c1fe29853b71f1f3bfca6e6f1dc76fce54c73fd6 --gas-budget 10000000 + +sui client call --package 0x48251c536f9c06c5a68d958ce4c1ba6ee1d1bf36698ab42b0c1929d12969a840 --module task5_swap --function swap_RMB_TO_USDT \ +--args 0x4dfdb243dcbc0cc041619e0a48da4ab01e95400062a6ec1c592273396bbdb16c 0x6c245963e1beb1685d66002894583ac343a39702d52e555ee9d2f9bf58af5e19 --gas-budget 10000000 +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Transaction Data │ +├──────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Sender: 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e │ +│ Gas Owner: 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e │ +│ Gas Budget: 21243200 MIST │ +│ Gas Price: 1000 MIST │ +│ Gas Payment: │ +│ ┌── │ +│ │ ID: 0x137401866fb084a460bb3dddff5ef3e4b9c7f3ae3edf8521c4e25d722f7637e4 │ +│ │ Version: 236168707 │ +│ │ Digest: FDqzJRrUHbm9JP6kcpLKbL3dKAYWpCheYwPs9N9XVCGS │ +│ └── │ +│ │ +│ Transaction Kind: Programmable │ +│ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ +│ │ Input Objects │ │ +│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ +│ │ 0 Pure Arg: Type: address, Value: "0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e" │ │ +│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ +│ ╭─────────────────────────────────────────────────────────────────────────╮ │ +│ │ Commands │ │ +│ ├─────────────────────────────────────────────────────────────────────────┤ │ +│ │ 0 Publish: │ │ +│ │ ┌ │ │ +│ │ │ Dependencies: │ │ +│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000001 │ │ +│ │ │ 0x0000000000000000000000000000000000000000000000000000000000000002 │ │ +│ │ │ 0x7dccdb3a368c516201c525084920b0d05a6d0aa0582b9ce305407f0fcbe809f8 │ │ +│ │ └ │ │ +│ │ │ │ +│ │ 1 TransferObjects: │ │ +│ │ ┌ │ │ +│ │ │ Arguments: │ │ +│ │ │ Result 0 │ │ +│ │ │ Address: Input 0 │ │ +│ │ └ │ │ +│ ╰─────────────────────────────────────────────────────────────────────────╯ │ +│ │ +│ Signatures: │ +│ qLRqPDgrLo+hTNZu2jG0qOHi8lN9+neWhAVe5dw8pA4bE8IzfS8EyN+IkhGs0JQ7qTCVyXc3kR7l5tNS7RcQCg== │ +│ │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Transaction Effects │ +├───────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Digest: FP4zgCsxWSVwWrUP7gwzRyt6H8inXa4xXHEwqzmq4EbY │ +│ Status: Success │ +│ Executed Epoch: 558 │ +│ │ +│ Created Objects: │ +│ ┌── │ +│ │ ID: 0x5d0625806abc8767669088d87be27ae46aebc866f2eb5e043d8030e294bccd65 │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ Version: 236168708 │ +│ │ Digest: 3B8rsp4u4cHhtAsj5SyBGzsqVLKvsbBYQxL2G2CyCmWA │ +│ └── │ +│ ┌── │ +│ │ ID: 0x5e478cf977b27d86cad94507d2cd0cca626b19f3d853d38516ee19e535f28947 │ +│ │ Owner: Shared( 236168708 ) │ +│ │ Version: 236168708 │ +│ │ Digest: JiGSg5h4rDwJTiKWBk3f5h8bBd2XNot22PqcmAPZLrh │ +│ └── │ +│ ┌── │ +│ │ ID: 0x730177df75e2772275582a8d20621a0a957579be314cb197ef9bb1ecd9dae843 │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ Version: 236168708 │ +│ │ Digest: ErehcbmURWsgWDm2SJCGwLNfoUHvYdK2MbEP1GxESzNJ │ +│ └── │ +│ ┌── │ +│ │ ID: 0xaef7604777b24b9348ba605126d3880172744d6887616ca514ce46031c76a737 │ +│ │ Owner: Immutable │ +│ │ Version: 1 │ +│ │ Digest: 8WfnWdmtbTyXoDqZwAhEv2p6nfKkH6jZCPFntNSGvdyH │ +│ └── │ +│ Mutated Objects: │ +│ ┌── │ +│ │ ID: 0x137401866fb084a460bb3dddff5ef3e4b9c7f3ae3edf8521c4e25d722f7637e4 │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ Version: 236168708 │ +│ │ Digest: 5FEBam8M65dPe5Cj8nfYtFGZBvnTpuk1YK5nFzEwHesp │ +│ └── │ +│ Gas Object: │ +│ ┌── │ +│ │ ID: 0x137401866fb084a460bb3dddff5ef3e4b9c7f3ae3edf8521c4e25d722f7637e4 │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ Version: 236168708 │ +│ │ Digest: 5FEBam8M65dPe5Cj8nfYtFGZBvnTpuk1YK5nFzEwHesp │ +│ └── │ +│ Gas Cost Summary: │ +│ Storage Cost: 19243200 MIST │ +│ Computation Cost: 1000000 MIST │ +│ Storage Rebate: 978120 MIST │ +│ Non-refundable Storage Fee: 9880 MIST │ +│ │ +│ Transaction Dependencies: │ +│ 7MGpKbf6Pg9LgDWd73Cv1W83SPXHb7fQTm3BLzkFqZL1 │ +│ GMBJA2gEEvtwv1wGGT7ZEDkQdrmUTKaE4TeinNGQ2feC │ +│ HavfYHBdgJysknuk6B4h4JtCRC293HyqywD2ZHRCM4q6 │ +╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─────────────────────────────╮ +│ No transaction block events │ +╰─────────────────────────────╯ + +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Object Changes │ +├──────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ Created Objects: │ +│ ┌── │ +│ │ ObjectID: 0x5d0625806abc8767669088d87be27ae46aebc866f2eb5e043d8030e294bccd65 │ +│ │ Sender: 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ ObjectType: 0x2::package::UpgradeCap │ +│ │ Version: 236168708 │ +│ │ Digest: 3B8rsp4u4cHhtAsj5SyBGzsqVLKvsbBYQxL2G2CyCmWA │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0x5e478cf977b27d86cad94507d2cd0cca626b19f3d853d38516ee19e535f28947 │ +│ │ Sender: 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e │ +│ │ Owner: Shared( 236168708 ) │ +│ │ ObjectType: 0xaef7604777b24b9348ba605126d3880172744d6887616ca514ce46031c76a737::task5_swap::SwapBank │ +│ │ Version: 236168708 │ +│ │ Digest: JiGSg5h4rDwJTiKWBk3f5h8bBd2XNot22PqcmAPZLrh │ +│ └── │ +│ ┌── │ +│ │ ObjectID: 0x730177df75e2772275582a8d20621a0a957579be314cb197ef9bb1ecd9dae843 │ +│ │ Sender: 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ ObjectType: 0xaef7604777b24b9348ba605126d3880172744d6887616ca514ce46031c76a737::task5_swap::AdminCap │ +│ │ Version: 236168708 │ +│ │ Digest: ErehcbmURWsgWDm2SJCGwLNfoUHvYdK2MbEP1GxESzNJ │ +│ └── │ +│ Mutated Objects: │ +│ ┌── │ +│ │ ObjectID: 0x137401866fb084a460bb3dddff5ef3e4b9c7f3ae3edf8521c4e25d722f7637e4 │ +│ │ Sender: 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ ObjectType: 0x2::coin::Coin<0x2::sui::SUI> │ +│ │ Version: 236168708 │ +│ │ Digest: 5FEBam8M65dPe5Cj8nfYtFGZBvnTpuk1YK5nFzEwHesp │ +│ └── │ +│ Published Objects: │ +│ ┌── │ +│ │ PackageID: 0xaef7604777b24b9348ba605126d3880172744d6887616ca514ce46031c76a737 │ +│ │ Version: 1 │ +│ │ Digest: 8WfnWdmtbTyXoDqZwAhEv2p6nfKkH6jZCPFntNSGvdyH │ +│ │ Modules: task5_swap │ +│ └── │ +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭───────────────────────────────────────────────────────────────────────────────────────────────────╮ +│ Balance Changes │ +├───────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ ┌── │ +│ │ Owner: Account Address ( 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e ) │ +│ │ CoinType: 0x2::sui::SUI │ +│ │ Amount: -19265080 │ +│ └── │ +╰───────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/mover/qwrdxer/code/task5/coin.move b/mover/qwrdxer/code/task5/coin.move new file mode 100644 index 000000000..2437c9623 --- /dev/null +++ b/mover/qwrdxer/code/task5/coin.move @@ -0,0 +1,93 @@ +/* +/// Module: task5_coin +module task5_coin::task5_coin; +*/ + +//ref https://examples.sui-book.com/samples/coin.html +//ref https://learnblockchain.cn/article/8717#%20%E5%90%88%E7%BA%A6 +//ref https://learnblockchain.cn/article/9788 + +// Coin1 RMB +module task5_coin::qwrdxer_RMB{ + use sui::coin; + use sui::coin::{TreasuryCap, mint_and_transfer}; + + public struct QWRDXER_RMB has drop{} + fun init(witness:QWRDXER_RMB,ctx: &mut TxContext){ + let (treasury, metadata)=coin::create_currency( + witness, + 6, + b"QWRDXERRMB", + b"", + b"", + option::none(),ctx); + transfer::public_freeze_object(metadata); + transfer::public_transfer(treasury,tx_context::sender(ctx)); + } + // 持有cap 的地址可以mint coin到指定地址 + public entry fun mint( + treasury_cap:&mut TreasuryCap,amount:u64,recipient:address,ctx: &mut TxContext + ){ + mint_and_transfer(treasury_cap,amount,recipient,ctx) + } + +} + +// Coin 2 USDT +module task5_coin::qwrdxer_USDT{ + use sui::coin; + use sui::coin::{TreasuryCap, mint_and_transfer}; + + public struct QWRDXER_USDT has drop{} + fun init(witness:QWRDXER_USDT,ctx: &mut TxContext){ + let (treasury, metadata)=coin::create_currency( + witness, + 6, + b"QWRDXERUSDT", + b"", + b"", + option::none(),ctx); + transfer::public_freeze_object(metadata); + transfer::public_transfer(treasury,tx_context::sender(ctx)); + } + // 持有cap 的地址可以mint coin到指定地址 + public entry fun mint( + treasury_cap:&mut TreasuryCap,amount:u64,recipient:address,ctx: &mut TxContext + ){ + mint_and_transfer(treasury_cap,amount,recipient,ctx) + } + +} +// Coin 3 DOGE +module task5_coin::qwrdxer_DOGE{ + use sui::coin; + use sui::coin::{TreasuryCap, mint_and_transfer}; + + public struct QWRDXER_DOGE has drop{} + fun init(witness:QWRDXER_DOGE,ctx: &mut TxContext){ + let (treasury, metadata)=coin::create_currency( + witness, + 6, + b"QWRDXERDOGE", + b"", + b"", + option::none(),ctx); + transfer::public_freeze_object(metadata); + transfer::public_transfer(treasury,tx_context::sender(ctx)); + } + // 持有cap 的地址可以mint coin到指定地址 + public entry fun mint( + treasury_cap:&mut TreasuryCap,amount:u64,recipient:address,ctx: &mut TxContext + ){ + mint_and_transfer(treasury_cap,amount,recipient,ctx) + } + +} + +/* + 正确调用qwrdxercoin + sui client call --package 0x2a9a3474683292a9f88e5a404c191db5b7e9c8017380344d1ebc0d68caa3f369 --module qwrdxercoin --function mint --args 0xed02c055c9e1aad5cad787be38a1566aa3d851d94aacd62832e2e6c596b26452 10000000 0x7b8e0864967427679b4e129f79dc332a885c6087ec9e187b53451a9006ee15f2 --gas-budget 10000000 + 使用另一个地址调用faucet + sui client call --package 0x319ea40d6a669cd26f787fb432d2bd29b0bf71f9354486eae9bbab8517ff6bb0 --module faucetqwrdxercoin --function mint --args 0xdaba562b748d108e6cea27d23a7c8487729a60ff041cbb31d6c7c7bd92d1e8a1 10000000 0x3f130ae9c17e02f07fa4bb2e758365e5d1aa8c0b921f1a7dc0cf917a9c1aa07e --gas-budget 10000000 +*/ + diff --git a/mover/qwrdxer/code/task5/qwrdxer.move b/mover/qwrdxer/code/task5/qwrdxer.move new file mode 100644 index 000000000..73bb34760 --- /dev/null +++ b/mover/qwrdxer/code/task5/qwrdxer.move @@ -0,0 +1,117 @@ + +//第一个是简单的SWAP,交换的代币为QWRDXER_RMB 和QWRDXER_USDT +module qwrdxer::task5_swap{ + use sui::balance::{Self,Balance, zero}; + use sui::coin; + use sui::coin::{Coin}; + use sui::event::emit; + use sui::transfer::{share_object, public_transfer}; + use sui::tx_context::sender; + use task5_coin::qwrdxer_RMB::QWRDXER_RMB; + use task5_coin::qwrdxer_USDT::QWRDXER_USDT; + + //日志结构体 + public struct LogBank has drop,copy{ + bank_value_RMB:u64, + bank_value_USDT:u64, + bank_value_change:u64 + } + + public struct AdminCap has key{ + id:UID + } + public struct SwapBank has store,key{ + id:UID, + Coin_RMB:Balance, + Coin_USDT:Balance, + } + fun init(ctx:&mut TxContext){ + //初始化银行 + let bank= SwapBank{ + id:object::new(ctx), + Coin_RMB:zero(), + Coin_USDT:zero() + }; + //共享出去 + share_object(bank); + //创建管理员权限 + transfer::transfer(AdminCap{id:object::new(ctx)},tx_context::sender(ctx)) + } + + // 管理员能调用的存取函数 + public entry fun deposit_CoinRMB(_:&AdminCap,bank:&mut SwapBank,rmbcoin:Coin,_:&mut TxContext){ + let rmbbalance=coin::into_balance(rmbcoin); + let changevalue=balance::value(&rmbbalance); + bank.Coin_RMB.join(rmbbalance); + emit( + LogBank{ + bank_value_RMB:balance::value(&bank.Coin_RMB), + bank_value_USDT:balance::value(&bank.Coin_USDT), + bank_value_change:changevalue + } + ) + } + + public entry fun withDraw_CoinRMB(_:&AdminCap,bank:&mut SwapBank,amt:u64,ctx:&mut TxContext){ + let rmbbalance=balance::split(&mut bank.Coin_RMB,amt); + let cach=coin::from_balance(rmbbalance,ctx); + transfer::public_transfer(cach,ctx.sender()); + emit( + LogBank{ + bank_value_RMB:balance::value(&bank.Coin_RMB), + bank_value_USDT:balance::value(&bank.Coin_USDT), + bank_value_change:amt + } + ) + } + public entry fun deposit_CoinUSDT(_:&AdminCap,bank:&mut SwapBank,usdtcoin:Coin,_:&mut TxContext){ + let usdtbalance=coin::into_balance(usdtcoin); + let changevalue=balance::value(&usdtbalance); + bank.Coin_USDT.join(usdtbalance); + emit( + LogBank{ + bank_value_RMB:balance::value(&bank.Coin_RMB), + bank_value_USDT:balance::value(&bank.Coin_USDT), + bank_value_change:changevalue + } + ) + } + + public entry fun withDraw_CoinUSDT(_:&AdminCap,bank:&mut SwapBank,amt:u64,ctx:&mut TxContext){ + let usdtbalance=balance::split(&mut bank.Coin_USDT,amt); + let cach=coin::from_balance(usdtbalance,ctx); + transfer::public_transfer(cach,ctx.sender()); + emit( + LogBank{ + bank_value_RMB:balance::value(&bank.Coin_RMB), + bank_value_USDT:balance::value(&bank.Coin_USDT), + bank_value_change:amt + } + ) + } + //swap交换函数实现 + public entry fun swap_RMB_TO_USDT(bank:&mut SwapBank,rmbCoin: Coin,ctx:&mut TxContext){ + let coinvalue=coin::value(&rmbCoin); + let swapbalance=coinvalue *730000 /100000; + //RMB 入 Bank + let rmbbalance=coin::into_balance(rmbCoin); + balance::join(&mut bank.Coin_RMB,rmbbalance); + //取出 USDT + let usdtbalance=balance::split(&mut bank.Coin_USDT,swapbalance); + let usdtcoin=coin::from_balance(usdtbalance,ctx); + //发送给对方 + public_transfer(usdtcoin,sender(ctx)); + } + public entry fun swap_USDT_TO_RMB(bank:&mut SwapBank,usdtCoin: Coin,ctx:&mut TxContext){ + let coinvalue=coin::value(&usdtCoin); + let swapbalance=coinvalue*100000 /730000; + //RMB 入 Bank + let usdtbalance=coin::into_balance(usdtCoin); + balance::join(&mut bank.Coin_USDT,usdtbalance); + //取出 USDT + let rmbbalance=balance::split(&mut bank.Coin_RMB,swapbalance); + let rmbtcoin=coin::from_balance(rmbbalance,ctx); + //发送给对方 + public_transfer(rmbtcoin,sender(ctx)); + } +} \ No newline at end of file diff --git a/mover/qwrdxer/readme.md b/mover/qwrdxer/readme.md index ebb695de0..fc8bed82b 100644 --- a/mover/qwrdxer/readme.md +++ b/mover/qwrdxer/readme.md @@ -39,9 +39,9 @@ 3fEZrqVfa5qVMMzq35gDktiqF1RNA9sSJg7bh8KJzs7i ## 05 Move Swap -- [] swap package id : -- [] call swap CoinA-> CoinB hash : -- [] call swap CoinB-> CoinA hash : +- [√] swap package id : 0x48251c536f9c06c5a68d958ce4c1ba6ee1d1bf36698ab42b0c1929d12969a840 +- [√] call swap CoinA-> CoinB hash : 5Gpmj7w7nonDEa48qtrsHyvaxSxXrY47Vonsqmyg5TdR +- [√] call swap CoinB-> CoinA hash : F4vBUtrMMEJmtcUNvKfJEaPghYj37U3ehFkfVW5o155W ## 06 Dapp-kit SDK PTB - [] save hash : diff --git a/mover/xiongchenyu6/co-learn-2411/images/20241118-174757_screenshot.png b/mover/xiongchenyu6/co-learn-2411/images/20241118-174757_screenshot.png new file mode 100644 index 000000000..d110ff542 Binary files /dev/null and b/mover/xiongchenyu6/co-learn-2411/images/20241118-174757_screenshot.png differ diff --git a/mover/xiongchenyu6/co-learn-2411/images/20241118-175931_screenshot.png b/mover/xiongchenyu6/co-learn-2411/images/20241118-175931_screenshot.png new file mode 100644 index 000000000..fe53f6b98 Binary files /dev/null and b/mover/xiongchenyu6/co-learn-2411/images/20241118-175931_screenshot.png differ diff --git a/mover/xiongchenyu6/co-learn-2411/images/20241119-164015_screenshot.png b/mover/xiongchenyu6/co-learn-2411/images/20241119-164015_screenshot.png new file mode 100644 index 000000000..5455064ab Binary files /dev/null and b/mover/xiongchenyu6/co-learn-2411/images/20241119-164015_screenshot.png differ diff --git a/mover/xiongchenyu6/co-learn-2411/images/IMG_4198.png b/mover/xiongchenyu6/co-learn-2411/images/IMG_4198.png new file mode 100644 index 000000000..ebda6d20b Binary files /dev/null and b/mover/xiongchenyu6/co-learn-2411/images/IMG_4198.png differ diff --git a/mover/xiongchenyu6/co-learn-2411/images/IMG_4200.png b/mover/xiongchenyu6/co-learn-2411/images/IMG_4200.png new file mode 100644 index 000000000..e0d206c29 Binary files /dev/null and b/mover/xiongchenyu6/co-learn-2411/images/IMG_4200.png differ diff --git a/mover/xiongchenyu6/co-learn-2411/readme.md b/mover/xiongchenyu6/co-learn-2411/readme.md index bec391402..e0e861e79 100644 --- a/mover/xiongchenyu6/co-learn-2411/readme.md +++ b/mover/xiongchenyu6/co-learn-2411/readme.md @@ -2,23 +2,25 @@ ## b站,推特关注 -- [x] b站,推特关注截图: ![关注截图](./images/20241107-185011_screenshot.png) +- [x] b站关注截图: ![关注截图](./images/20241107-185011_screenshot.png) +- [x] 推特关注截图: ![关注截图](./images/20241118-174757_screenshot.png) + ## 为共学营宣传(在朋友圈或者群聊中转发海报/文章) -- [] 宣传截图:![宣传截图](./images/你的图片地址) +- [x] 宣传截图:![宣传截图](./images/IMG_4198.png) ## 每周课程学习 - [x] 第一周:![学习记录截图](./images/20241107-184959_screenshot.png) -- [] 第二周:![学习记录截图](./images/你的图片地址) +- [x] 第二周:![学习记录截图](./images/20241118-175931_screenshot.png) - [] 第三周:![学习记录截图](./images/你的图片地址) - [] 第四周:![学习记录截图](./images/你的图片地址) ## 参加直播答疑 - [] 第一周:![学习记录截图](./images/你的图片地址) -- [] 第二周:![学习记录截图](./images/你的图片地址) +- [x] 第二周:![学习记录截图](./images/IMG_4200.png) - [] 第三周:![学习记录截图](./images/你的图片地址) - [] 第四周:![学习记录截图](./images/你的图片地址) diff --git a/mover/xiongchenyu6/code/task2/Move.lock b/mover/xiongchenyu6/code/task2/Move.lock new file mode 100644 index 000000000..0e69d1334 --- /dev/null +++ b/mover/xiongchenyu6/code/task2/Move.lock @@ -0,0 +1,40 @@ +# @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.37.3" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x92e2c8604429789bdb504505c82d1d8e9a14aaf7eb5ebd5434efade956c47260" +latest-published-id = "0x92e2c8604429789bdb504505c82d1d8e9a14aaf7eb5ebd5434efade956c47260" +published-version = "1" + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0x32de70fc2e92a7abddf1675afc56b37c5403a4a846d68de328c44d528450754e" +latest-published-id = "0x32de70fc2e92a7abddf1675afc56b37c5403a4a846d68de328c44d528450754e" +published-version = "1" diff --git a/mover/xiongchenyu6/code/task2/Move.toml b/mover/xiongchenyu6/code/task2/Move.toml new file mode 100644 index 000000000..6a6098d99 --- /dev/null +++ b/mover/xiongchenyu6/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/xiongchenyu6/code/task2/sources/faucet_coin.move b/mover/xiongchenyu6/code/task2/sources/faucet_coin.move new file mode 100644 index 000000000..60334292a --- /dev/null +++ b/mover/xiongchenyu6/code/task2/sources/faucet_coin.move @@ -0,0 +1,39 @@ +/* +/// Module: task2 +*/ +module task2::faucet_coin { + + use sui::coin::{Self, TreasuryCap, Coin}; + use sui::url; + + public struct FAUCET_COIN has drop {} + + fun init(witness: FAUCET_COIN, ctx: &mut TxContext) { + let (treasury, metadata) = coin::create_currency( + witness, + 6, + b"ALRFAUCET", + b"faucet autolife robotics", + b"First ai robotics coin on sui net by autolife robotics faucet", + option::some(url::new_unsafe_from_bytes(b"https://www.autolife.ai/icon.svg")), ctx); + + transfer::public_freeze_object(metadata); + transfer::public_share_object(treasury) + } + + #[allow(lint(self_transfer))] + public entry fun mint( + treasury_cap: &mut TreasuryCap, + amount: u64, + ctx: &mut TxContext, + ) { + let coin = coin::mint(treasury_cap, amount, ctx); + let sender = tx_context::sender(ctx); + + transfer::public_transfer(coin, sender) + } + + public entry fun burn(treasury_cap: &mut TreasuryCap, coin: Coin) { + coin::burn(treasury_cap, coin); + } +} diff --git a/mover/xiongchenyu6/code/task2/sources/my_coin.move b/mover/xiongchenyu6/code/task2/sources/my_coin.move new file mode 100644 index 000000000..bde97d4a0 --- /dev/null +++ b/mover/xiongchenyu6/code/task2/sources/my_coin.move @@ -0,0 +1,32 @@ +/* +/// Module: task2 +*/ +module task2::autolife_robotics { + use sui::coin::{Self, TreasuryCap}; + use sui::url; + + public struct AUTOLIFE_ROBOTICS has drop {} + + fun init(witness: AUTOLIFE_ROBOTICS, ctx: &mut TxContext) { + let (treasury, metadata) = coin::create_currency( + witness, + 6, + b"AUTOLFIE", + b"autolife robotics", + b"First ai robot coin on sui net by autolife robotics", + option::some(url::new_unsafe_from_bytes(b"https://www.autolife.ai/icon.svg")), ctx); + + transfer::public_freeze_object(metadata); + transfer::public_transfer(treasury, ctx.sender()) + } + + public fun mint( + treasury_cap: &mut TreasuryCap, + amount: u64, + recipient: address, + ctx: &mut TxContext, + ) { + let coin = coin::mint(treasury_cap, amount, ctx); + transfer::public_transfer(coin, recipient) + } +} \ No newline at end of file diff --git a/mover/xiongchenyu6/code/task2/tests/task2_tests.move b/mover/xiongchenyu6/code/task2/tests/task2_tests.move new file mode 100644 index 000000000..8a0300a94 --- /dev/null +++ b/mover/xiongchenyu6/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/xiongchenyu6/code/task3/Move.lock b/mover/xiongchenyu6/code/task3/Move.lock new file mode 100644 index 000000000..25bc82e1d --- /dev/null +++ b/mover/xiongchenyu6/code/task3/Move.lock @@ -0,0 +1,40 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "DEDE53BD567ECEDC2009BE853A86F47F6BDC3F1F03A6B00FAED274F07E74A18B" +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.37.3" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0xcbcdf4bb693e1d1d884ac1a91f029e4836221cccc9bac901bc3399fefdcbcab2" +latest-published-id = "0xcbcdf4bb693e1d1d884ac1a91f029e4836221cccc9bac901bc3399fefdcbcab2" +published-version = "1" + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0x8f114682b00555c2cc6d2fd2fb2fa8b388d3f71e067150b6493133dc1a4133a6" +latest-published-id = "0x8f114682b00555c2cc6d2fd2fb2fa8b388d3f71e067150b6493133dc1a4133a6" +published-version = "1" diff --git a/mover/xiongchenyu6/code/task3/Move.toml b/mover/xiongchenyu6/code/task3/Move.toml new file mode 100644 index 000000000..480be1592 --- /dev/null +++ b/mover/xiongchenyu6/code/task3/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "task3" +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] +task3 = "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/xiongchenyu6/code/task3/sources/task3.move b/mover/xiongchenyu6/code/task3/sources/task3.move new file mode 100644 index 000000000..49dcbb3aa --- /dev/null +++ b/mover/xiongchenyu6/code/task3/sources/task3.move @@ -0,0 +1,139 @@ +/* +/// Module: task3*/ +module task3::autolife_nft { + use std::string; + use std::string::{ String }; + use sui::url; + use sui::url::Url; + use sui::event; + use sui::package; + use sui::display; + + public struct RobotNft has key, store{ + id:UID, + name: String, + description: String, + image_url: Url, + } + public struct AUTOLIFE_NFT has drop{} + + + // ===== Events ===== + + public struct NFTMinted has copy, drop { + object_id: ID, + creator: address, + name: String, + } + + /// The capability granting the application admin the right to create new + /// accounts in the system. + public struct AdminCap has key, store { id: UID } + + /// Create the AdminCap object on package publish and transfer it to the + /// package owner. + fun init(otw:AUTOLIFE_NFT, ctx: &mut TxContext) { + + let keys = vector[ + b"name".to_string(), + b"image_url".to_string(), + b"description".to_string(), + b"creator".to_string(), + ]; + + let values = vector[ + // For `name` one can use the `Hero.name` property + b"{name}".to_string(), + // For `image_url` use an IPFS template + `image_url` property. + b"{image_url}".to_string(), + // Description is static for all `Hero` objects. + b"{description}".to_string(), + // Creator field can be any + b"Autolife-Robotics".to_string(), + ]; + + // Claim the `Publisher` for the package! + let publisher = package::claim(otw, ctx); + + // Get a new `Display` object for the `RobotNft` type. + let mut display = display::new_with_fields( + &publisher, keys, values, ctx + ); + + // Commit first version of `Display` to apply changes. + display.update_version(); + + transfer::public_transfer(publisher, ctx.sender()); + transfer::public_transfer(display, ctx.sender()); + + transfer::transfer( + AdminCap { id: object::new(ctx) }, + ctx.sender() + ) + } + + public entry fun mint_to_sender( + name: vector, + description: vector, + img_url: vector, + ctx: &mut TxContext + ) { + let sender = ctx.sender(); + inner_mint_to(name, description, img_url, sender, ctx); + } + + public entry fun mint_to( + name: vector, + description: vector, + img_url: vector, + reciver: address, + ctx: &mut TxContext) { + + inner_mint_to(name, description, img_url, reciver, ctx); + } + + fun inner_mint_to( + name: vector, + description: vector, + img_url: vector, + reciver: address, + ctx: &mut TxContext){ + + let nft = RobotNft { + id: object::new(ctx), + name: string::utf8(name), + description: string::utf8(description), + image_url: url::new_unsafe_from_bytes(img_url) + }; + + event::emit(NFTMinted { + object_id: object::id(&nft), + creator: reciver, + name: nft.name, + }); + + transfer::public_transfer(nft, reciver); + } + + /// Transfer `nft` to `recipient` + public entry fun transfer( + nft: RobotNft, recipient: address, _: &mut TxContext + ) { + transfer::public_transfer(nft, recipient) + } + + /// Update the `description` of `nft` to `new_description` + public entry fun update_description( + nft: &mut RobotNft, + new_description: vector, + _: &mut TxContext + ) { + nft.description = string::utf8(new_description) + } + + /// Permanently delete `nft` + public entry fun burn(_: &AdminCap, nft: RobotNft, _: &mut TxContext) { + let RobotNft { id, name: _, description: _, image_url: _ } = nft; + id.delete() + } +} \ No newline at end of file diff --git a/mover/xiongchenyu6/code/task3/tests/task3_tests.move b/mover/xiongchenyu6/code/task3/tests/task3_tests.move new file mode 100644 index 000000000..d128fbb0f --- /dev/null +++ b/mover/xiongchenyu6/code/task3/tests/task3_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module task3::task3_tests; +// uncomment this line to import the module +// use task3::task3; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_task3() { + // pass +} + +#[test, expected_failure(abort_code = ::task3::task3_tests::ENotImplemented)] +fun test_task3_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/xiongchenyu6/readme.md b/mover/xiongchenyu6/readme.md index d4013c365..8a7bcda6b 100644 --- a/mover/xiongchenyu6/readme.md +++ b/mover/xiongchenyu6/readme.md @@ -12,7 +12,7 @@ ## 任务 -## 01 hello move +## 01 hello move - [x] Sui cli version: sui 1.37.1-7839b9501066 - [x] Sui钱包截图: ![Sui钱包截图](./co-learn-2411/images/20241108-102046_screenshot.png) - [x] package id: 0x9c87e896b2d75c4a4264b6f330ad8289102514435a8e55a28c20ff6aecca5b1d @@ -20,18 +20,18 @@ ## 02 move coin -- [] My Coin package id : -- [] Faucet package id : -- [] 转账 `My Coin` hash: -- [] `Faucet Coin` address1 mint hash: -- [] `Faucet Coin` address2 mint hash: +- [x] My Coin package id : 0x32de70fc2e92a7abddf1675afc56b37c5403a4a846d68de328c44d528450754e +- [x] Faucet package id : 0x32de70fc2e92a7abddf1675afc56b37c5403a4a846d68de328c44d528450754e +- [x] 转账 `My Coin` hash: EJBJZPbavFmXXxN8whgUMxHnWNbHKGjPFuCcbqR2kXPg +- [x] `Faucet Coin` address1 mint hash: EWKVnwGMxQxhQTGgFy7V5PP9XnAQqBm4qtNaZ3fdtzT9 +- [x] `Faucet Coin` address2 mint hash: 6f5nFAjVYQUUJpW8Yvt8HM3VDWJ1XRvjPUGeoSvmC4fN ## 03 move NFT -- [] nft package id : -- [] nft object id : -- [] 转账 nft hash: -- [] scan 上的 NFT 截图:![Scan截图](./images/你的图片地址) +- [x] nft package id : 0x8f114682b00555c2cc6d2fd2fb2fa8b388d3f71e067150b6493133dc1a4133a6 +- [x] nft object id : 0x80f62e3d3c52373385e21763cc235e1e46b3ef658b837fde4b390d2a448ebc5b +- [x] 转账 nft hash: 7bLrDV4GVAM1niBEQ19Tz4ZB8u1XytdhzNYoUw9C2KWm +- [x] scan 上的 NFT 截图:![Scan截图](./images/20241119-164015_screenshot.png) ## 04 Move Game @@ -58,4 +58,4 @@ ## 08 Move CTF Lets Move - [] proof : -- [] flag hash : \ No newline at end of file +- [] flag hash : diff --git a/mover/yoona333/co-learn-2411/images/1.jpg b/mover/yoona333/co-learn-2411/images/1.jpg new file mode 100644 index 000000000..2bae97c6b Binary files /dev/null and b/mover/yoona333/co-learn-2411/images/1.jpg differ diff --git a/mover/yoona333/co-learn-2411/images/2.png b/mover/yoona333/co-learn-2411/images/2.png new file mode 100644 index 000000000..f62c8610f Binary files /dev/null and b/mover/yoona333/co-learn-2411/images/2.png differ diff --git a/mover/yoona333/co-learn-2411/images/3.png b/mover/yoona333/co-learn-2411/images/3.png new file mode 100644 index 000000000..1f849e1be Binary files /dev/null and b/mover/yoona333/co-learn-2411/images/3.png differ diff --git a/mover/yoona333/co-learn-2411/images/readme.md b/mover/yoona333/co-learn-2411/images/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/mover/yoona333/co-learn-2411/project/readme.md b/mover/yoona333/co-learn-2411/project/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/mover/yoona333/co-learn-2411/project/readme.md @@ -0,0 +1 @@ + diff --git a/mover/yoona333/co-learn-2411/readme.md b/mover/yoona333/co-learn-2411/readme.md new file mode 100644 index 000000000..49cb76570 --- /dev/null +++ b/mover/yoona333/co-learn-2411/readme.md @@ -0,0 +1,54 @@ +# 这个模板是2024年11月份的共学营才需要的 + +## b站,推特关注 + +- [√] b站,推特关注截图: ![关注截图](./images/3.png) + +## 为共学营宣传(在朋友圈或者群聊中转发海报/文章) + +- [√] 宣传截图:![宣传截图](./images/1.jpg) + +## 每周课程学习 + +- [√] 第一周:![学习记录截图](./images/2.png) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 参加直播答疑 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 群里分享学习笔记 + +- [] 第一篇笔记 +- [] 第二篇笔记 +- [] 第三篇笔记 +- [] 第四篇笔记 + +## 对外输出学习笔记 + +- [] 第一篇笔记【学习笔记链接】 +- [] 第二篇笔记【学习笔记链接】 +- [] 第三篇笔记【学习笔记链接】 +- [] 第四篇笔记【学习笔记链接】 + +## 在HOH社区公众号发布自己的技术文章 + +- [] 第一篇笔记【公众号文章链接】 +- [] 第二篇笔记【公众号文章链接】 +- [] 第三篇笔记【公众号文章链接】 +- [] 第四篇笔记【公众号文章链接】 + +## 直播分享学习技巧/工具推荐 + +- [] 会议截图:![会议记录截图](./images/你的图片地址) + +## 提交项目 + +- [] 项目提交![项目截图](./images/你的图片地址) + + diff --git a/mover/yoona333/code/task1/hello_move/Move.toml b/mover/yoona333/code/task1/hello_move/Move.toml index d022a9699..1aa2e580d 100644 --- a/mover/yoona333/code/task1/hello_move/Move.toml +++ b/mover/yoona333/code/task1/hello_move/Move.toml @@ -33,4 +33,4 @@ hello_move = "0x0" [dev-addresses] # The dev-addresses section allows overwriting named addresses for the `--test` # and `--dev` modes. -# alice = "0xB0B" \ No newline at end of file +# alice = "0xB0B" diff --git a/mover/yoona333/code/task1/hello_move/sources/hello_move.move b/mover/yoona333/code/task1/hello_move/sources/hello_move.move index b1fc430e6..2ed11d167 100644 --- a/mover/yoona333/code/task1/hello_move/sources/hello_move.move +++ b/mover/yoona333/code/task1/hello_move/sources/hello_move.move @@ -16,4 +16,4 @@ module hello_move::hello { }; transfer(hello_move, sender(ctx)); } -} \ No newline at end of file +} diff --git a/mover/yoona333/code/task2/my_coin/Move.lock b/mover/yoona333/code/task2/my_coin/Move.lock new file mode 100644 index 000000000..643d77404 --- /dev/null +++ b/mover/yoona333/code/task2/my_coin/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "0A4652D38CF3C3FDB79EC6C1C98FCFF7B2E933E12B84A1DA267DB28F66AFECE3" +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.35.2" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0x42d09c92dc048f5753f6c7960c8dbb92934dc7e69b4b59bbf89f4e2e0ad4525d" +latest-published-id = "0x42d09c92dc048f5753f6c7960c8dbb92934dc7e69b4b59bbf89f4e2e0ad4525d" +published-version = "1" diff --git a/mover/yoona333/code/task2/my_coin/Move.toml b/mover/yoona333/code/task2/my_coin/Move.toml new file mode 100644 index 000000000..b9ca003f8 --- /dev/null +++ b/mover/yoona333/code/task2/my_coin/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "my_coin" +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] +my_coin = "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/yoona333/code/task2/my_coin/sources/yoona333Coin.move b/mover/yoona333/code/task2/my_coin/sources/yoona333Coin.move new file mode 100644 index 000000000..4ec6a7413 --- /dev/null +++ b/mover/yoona333/code/task2/my_coin/sources/yoona333Coin.move @@ -0,0 +1,26 @@ +module my_coin::yoona333Coin{ //定义了yoona333Coin模块 + +//导入依赖 +use sui::coin::create_currency; +use std::option::{none,some}; +use sui::transfer::{ public_transfer,public_freeze_object}; +use sui::url::{Self,Url}; + +public struct YOONA333COIN has drop{} + +fun init(yoona333Coin:YOONA333COIN, ctx: &mut TxContext) { + + // let no = none(); + + let url = url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/167958904?v=4"); + let yes = some(url); + let (treasury,coin_metadata) = + create_currency(yoona333Coin,8,b"YOONA333COIN",b"YOONA333COIN",b"This is YOONA333COIN",yes,ctx); + + + public_freeze_object(coin_metadata); //冻结 coin_metadata 对象,使其不可再被修改。 + + public_transfer(treasury,ctx.sender()) //将 treasury 对象(初始代币)转移到当前交易的发送者地址。 + +} +} \ No newline at end of file diff --git a/mover/yoona333/code/task2/my_coin/sources/yoona333FaucetCoin.move b/mover/yoona333/code/task2/my_coin/sources/yoona333FaucetCoin.move new file mode 100644 index 000000000..744baddf5 --- /dev/null +++ b/mover/yoona333/code/task2/my_coin/sources/yoona333FaucetCoin.move @@ -0,0 +1,26 @@ +module my_coin::yoona333FaucetCoin{ //定义了yoona333Coin模块 + +//导入依赖 +use sui::coin::create_currency; +use std::option::{none,some}; +use sui::transfer::{public_share_object,public_freeze_object}; +use sui::url::{Self,Url}; + +public struct YOONA333FAUCETCOIN has drop{} + +fun init(yoona333FaucetCoin:YOONA333FAUCETCOIN, ctx: &mut TxContext) { + + // let no = none(); + + let url = url::new_unsafe_from_bytes(b"https://avatars.githubusercontent.com/u/167958904?v=4"); + let yes = some(url); + let (treasury,coin_metadata) = + create_currency(yoona333FaucetCoin,8,b"YOONA333FAUCETCOIN",b"YOONA333FAUCETCOIN",b"This is YOONA333FAUCETCOIN",yes,ctx); + + + public_freeze_object(coin_metadata); //冻结 coin_metadata 对象,使其不可再被修改。 + + public_share_object(treasury); //将 treasury 对象(初始代币)转移到当前交易的发送者地址。 + +} +} \ No newline at end of file diff --git a/mover/yoona333/code/task2/my_coin/tests/call.sh b/mover/yoona333/code/task2/my_coin/tests/call.sh new file mode 100644 index 000000000..2104bb811 --- /dev/null +++ b/mover/yoona333/code/task2/my_coin/tests/call.sh @@ -0,0 +1 @@ + sui client call --package 0x2 --module coin --function mint_and_transfer --type-args 0x42d09c92dc048f5753f6c7960c8dbb92934dc7e69b4b59bbf89f4e2e0ad4525d::yoona333Coin::YOONA333COIN --args 0xc546685f063fe21108b585fb6ba834d992134ca6456273664321d593ec7e679a 10000000000 0x7b8e0864967427679b4e129f79dc332a885c6087ec9e187b53451a9006ee15f2 \ No newline at end of file diff --git a/mover/yoona333/code/task2/my_coin/tests/my_coin_tests.move b/mover/yoona333/code/task2/my_coin/tests/my_coin_tests.move new file mode 100644 index 000000000..cd5b36060 --- /dev/null +++ b/mover/yoona333/code/task2/my_coin/tests/my_coin_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module my_coin::my_coin_tests; +// uncomment this line to import the module +// use my_coin::my_coin; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_my_coin() { + // pass +} + +#[test, expected_failure(abort_code = ::my_coin::my_coin_tests::ENotImplemented)] +fun test_my_coin_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/yoona333/readme.md b/mover/yoona333/readme.md index 9eefd7c81..fb12c2410 100644 --- a/mover/yoona333/readme.md +++ b/mover/yoona333/readme.md @@ -13,17 +13,17 @@ ## 任务 ## 01 hello move s -- [] Sui cli version:sui 1.35.2-4e46da89efd5 -- [] Sui钱包截图: ![Sui钱包截图](./images/1.png) -- [] package id: 0xb19a851fdb7d882561515669d733056c7f29a31ce27b005fe460b82aa123a6e9 -- [] package id 在 scan上的查看截图:![Scan截图](./images/2.png) +- [x] Sui cli version:sui 1.35.2-4e46da89efd5 +- [x] Sui钱包截图: ![Sui钱包截图](./images/1.png) +- [x] package id: 0xb19a851fdb7d882561515669d733056c7f29a31ce27b005fe460b82aa123a6e9 +- [x] package id 在 scan上的查看截图:![Scan截图](./images/2.png) ## 02 move coin -- [] My Coin package id : -- [] Faucet package id : -- [] 转账 `My Coin` hash: -- [] `Faucet Coin` address1 mint hash: -- [] `Faucet Coin` address2 mint hash: +- [x] My Coin package id : `0x42d09c92dc048f5753f6c7960c8dbb92934dc7e69b4b59bbf89f4e2e0ad4525d` +- [x] Faucet package id : `0x42d09c92dc048f5753f6c7960c8dbb92934dc7e69b4b59bbf89f4e2e0ad4525d` +- [x] 转账 `My Coin` hash: `4g7MaYruPQxsGvMTfVx36nxeNPJJwxHR2jXNkJDXVJjw` +- [x] `Faucet Coin` address1 mint hash:`CoTU33nN3XGjDyVn3KeCtdcE6xYu9JCrkkSpJtpHvTJZ` +- [x] `Faucet Coin` address2 mint hash:`734tBAzvZANFsJrhFv5aUgE57YaM6ZhAhwBwy4Tou19m` ## 03 move NFT - [] nft package id : diff --git a/mover/z0yuan/code/task4/Move.lock b/mover/z0yuan/code/task4/Move.lock new file mode 100644 index 000000000..75ced7ef6 --- /dev/null +++ b/mover/z0yuan/code/task4/Move.lock @@ -0,0 +1,43 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "DAC3A8A8378D8A82FB0B9535F438803157F46A9C2BC92CF167C4E95F565A368A" +deps_digest = "3C4103934B1E040BB6B23F1D610B4EF9F2F1166A50A104EADCF77467C004C600" +dependencies = [ + { id = "Sui", name = "Sui" }, + { id = "faucet", name = "faucet" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[[move.package]] +id = "faucet" +source = { local = "../faucet" } + +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[move.toolchain-version] +compiler-version = "1.37.3" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.mainnet] +chain-id = "35834a8a" +original-published-id = "0xbce4d4ae01a013e40000a2e82fd158529e16c88f52416b0f8b0d2fb3cedba22e" +latest-published-id = "0xbce4d4ae01a013e40000a2e82fd158529e16c88f52416b0f8b0d2fb3cedba22e" +published-version = "1" diff --git a/mover/z0yuan/code/task4/Move.toml b/mover/z0yuan/code/task4/Move.toml new file mode 100644 index 000000000..396e259df --- /dev/null +++ b/mover/z0yuan/code/task4/Move.toml @@ -0,0 +1,38 @@ +[package] +name = "my_game" +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/mainnet" } +faucet = { local = "../faucet"} + +# 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] +my_game = "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/z0yuan/code/task4/sources/my_game.move b/mover/z0yuan/code/task4/sources/my_game.move new file mode 100644 index 000000000..181fcf459 --- /dev/null +++ b/mover/z0yuan/code/task4/sources/my_game.move @@ -0,0 +1,65 @@ +#[allow(unused_use, duplicate_alias,lint(public_random))] +module my_game::my_game{ + use sui::coin::{Self, Coin, TreasuryCap}; + use sui::balance::{Self, Balance}; + use sui::random::{Self, Random, new_generator}; + use faucet::mycoin::{MYCOIN}; + use 0x1::bcs::{}; + + const BalanceValuesmall: u64 = 1000; + + //奖金池 + public struct Reward_pool has key,store{ + id: UID, + balance: Balance, + } + //拥有者 + public struct Owner has key{ + id: UID, + } + + fun init(ctx: &mut TxContext) { + let reward_poll = Reward_pool {id: object::new(ctx) ,balance: balance::zero(), }; + transfer::share_object(reward_poll); + + let owner = Owner { id: object::new(ctx) }; + transfer::transfer(owner,tx_context::sender(ctx)); + } + //存款 + public entry fun Deposit(reward: &mut Reward_pool,coin: &mut Coin,amount: u64){ + + //判断用户余额是否大于存款金额,如果小于直接回退 + assert!(coin::value(coin) >= amount,BalanceValuesmall); + + let split_balance = balance::split(coin::balance_mut(coin), amount); + balance::join(&mut reward.balance,split_balance); + } + //取款 + entry fun Withdraw(reward: &mut Reward_pool,amount: u64,_: &mut Owner,ctx: &mut TxContext){ + //判断奖金池余额是否大于要提取的金额 + assert!(reward.balance.value() >= amount,BalanceValuesmall); + + let recv_balance = coin::take(&mut reward.balance, amount, ctx); + transfer::public_transfer(recv_balance, tx_context::sender(ctx)); + } + //游戏逻辑 + public entry fun game(reward_poll: &mut Reward_pool,coin: &mut Coin,amount: u64,guess: bool,rand: &Random,ctx: &mut TxContext){ + //判断用户余额是否大于押注余额 + assert!(coin::value(coin) >= amount,BalanceValuesmall); + + let mut generator = new_generator(rand, ctx); + let result = random::generate_u8_in_range(&mut generator, 0, 1); + + let flag: bool = result == 1; + //如果猜测正确 + if (flag == guess) { + let reward = coin::take(&mut reward_poll.balance, amount, ctx); + coin::join(coin, reward); + } + else{ + Deposit(reward_poll, coin, amount); + } + } + +} + diff --git a/mover/z0yuan/code/task4/tests/my_game_tests.move b/mover/z0yuan/code/task4/tests/my_game_tests.move new file mode 100644 index 000000000..a86dc77ed --- /dev/null +++ b/mover/z0yuan/code/task4/tests/my_game_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module my_game::my_game_tests; +// uncomment this line to import the module +// use my_game::my_game; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_my_game() { + // pass +} + +#[test, expected_failure(abort_code = ::my_game::my_game_tests::ENotImplemented)] +fun test_my_game_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/z0yuan/readme.md b/mover/z0yuan/readme.md index 1c2798eb3..4ea760d9b 100755 --- a/mover/z0yuan/readme.md +++ b/mover/z0yuan/readme.md @@ -32,10 +32,10 @@ - [x] scan上的NFT截图:![Scan截图](./images/nft.png) ## 04 Move Game -- [] game package id : -- [] deposit Coin hash: -- [] withdraw `Coin` hash: -- [] play game hash: +- [x] game package id :0xbce4d4ae01a013e40000a2e82fd158529e16c88f52416b0f8b0d2fb3cedba22e +- [x] deposit Coin hash:GWL6dmLEFhgAgHjmjPF8vQnW62qJXUnnRrCmBuyB522Y +- [x] withdraw `Coin` hash:GtKW22GhaheeArUcYEY7bQVBYrSJRqb7LWUmqTFq1qPB +- [x] play game hash:GtKW22GhaheeArUcYEY7bQVBYrSJRqb7LWUmqTFq1qPB ## 05 Move Swap - [] swap package id : @@ -47,5 +47,5 @@ ## 07 Move CTF Check In -- [] CLI call 截图 : -- [] flag hash : +- [] CLI call 截图 : +- [] flag hash : diff --git a/mover/zacarx/assets/image-20241114170946321.png b/mover/zacarx/assets/image-20241114170946321.png new file mode 100644 index 000000000..c81388e77 Binary files /dev/null and b/mover/zacarx/assets/image-20241114170946321.png differ diff --git a/mover/zacarx/co-learn-2411/assets/image-20241114230736922.png b/mover/zacarx/co-learn-2411/assets/image-20241114230736922.png new file mode 100644 index 000000000..d69d431fd Binary files /dev/null and b/mover/zacarx/co-learn-2411/assets/image-20241114230736922.png differ diff --git a/mover/zacarx/co-learn-2411/assets/image-20241114230857279.png b/mover/zacarx/co-learn-2411/assets/image-20241114230857279.png new file mode 100644 index 000000000..d561b9177 Binary files /dev/null and b/mover/zacarx/co-learn-2411/assets/image-20241114230857279.png differ diff --git a/mover/zacarx/co-learn-2411/assets/image-20241114231107464.png b/mover/zacarx/co-learn-2411/assets/image-20241114231107464.png new file mode 100644 index 000000000..f394662d4 Binary files /dev/null and b/mover/zacarx/co-learn-2411/assets/image-20241114231107464.png differ diff --git a/mover/zacarx/co-learn-2411/images/readme.md b/mover/zacarx/co-learn-2411/images/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/mover/zacarx/co-learn-2411/project/readme.md b/mover/zacarx/co-learn-2411/project/readme.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/mover/zacarx/co-learn-2411/project/readme.md @@ -0,0 +1 @@ + diff --git a/mover/zacarx/co-learn-2411/readme.md b/mover/zacarx/co-learn-2411/readme.md new file mode 100644 index 000000000..a63eff3b1 --- /dev/null +++ b/mover/zacarx/co-learn-2411/readme.md @@ -0,0 +1,60 @@ +# 这个模板是2024年11月份的共学营才需要的 + +## b站,推特关注 + +- [x] b站,推特关注截图: + +![image-20241114230736922](./assets/image-20241114230736922.png) + +![image-20241114230857279](./assets/image-20241114230857279.png) + + + +## 为共学营宣传(在朋友圈或者群聊中转发海报/文章) + +- [x] 宣传截图: +- [x] ![image-20241114231107464](./assets/image-20241114231107464.png) + +## 每周课程学习 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 参加直播答疑 + +- [] 第一周:![学习记录截图](./images/你的图片地址) +- [] 第二周:![学习记录截图](./images/你的图片地址) +- [] 第三周:![学习记录截图](./images/你的图片地址) +- [] 第四周:![学习记录截图](./images/你的图片地址) + +## 群里分享学习笔记 + +- [] 第一篇笔记 +- [] 第二篇笔记 +- [] 第三篇笔记 +- [] 第四篇笔记 + +## 对外输出学习笔记 + +- [] 第一篇笔记【学习笔记链接】 +- [] 第二篇笔记【学习笔记链接】 +- [] 第三篇笔记【学习笔记链接】 +- [] 第四篇笔记【学习笔记链接】 + +## 在HOH社区公众号发布自己的技术文章 + +- [] 第一篇笔记【公众号文章链接】 +- [] 第二篇笔记【公众号文章链接】 +- [] 第三篇笔记【公众号文章链接】 +- [] 第四篇笔记【公众号文章链接】 + +## 直播分享学习技巧/工具推荐 + +- [] 会议截图:![会议记录截图](./images/你的图片地址) + +## 提交项目 + +- [] 项目提交![项目截图](./images/你的图片地址) + diff --git a/mover/zacarx/code/task2_coin/faucet_coin/Move.lock b/mover/zacarx/code/task2_coin/faucet_coin/Move.lock new file mode 100644 index 000000000..9c8728bb1 --- /dev/null +++ b/mover/zacarx/code/task2_coin/faucet_coin/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "8D3EEF09FF2AD6B4D80AC40E366B5FB930DD591FB36370A977E0847B34F30996" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/devnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/devnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.main-env] +chain-id = "35834a8a" +original-published-id = "0xed033d020f7796449b1c845cdde8bca79e2d0a77329f03d014b2daa7896709ae" +latest-published-id = "0xed033d020f7796449b1c845cdde8bca79e2d0a77329f03d014b2daa7896709ae" +published-version = "1" diff --git a/mover/zacarx/code/task2_coin/faucet_coin/Move.toml b/mover/zacarx/code/task2_coin/faucet_coin/Move.toml new file mode 100644 index 000000000..d54a49200 --- /dev/null +++ b/mover/zacarx/code/task2_coin/faucet_coin/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "faucet_coin" +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://gitee.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/devnet" } + +# 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] +faucet_coin = "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/zacarx/code/task2_coin/faucet_coin/sources/faucet_coin.move b/mover/zacarx/code/task2_coin/faucet_coin/sources/faucet_coin.move new file mode 100644 index 000000000..30fa0b948 --- /dev/null +++ b/mover/zacarx/code/task2_coin/faucet_coin/sources/faucet_coin.move @@ -0,0 +1,18 @@ +module faucet_coin::zacarxfaucet; + +use sui::coin::{create_currency, mint_and_transfer}; +use sui::url; +use std::option; + +public struct ZACARXFAUCET has drop {} + +fun init(zacarxfaucet: ZACARXFAUCET, ctx: &mut TxContext) { + let url = url::new_unsafe_from_bytes(b"https://aggregator.walrus-testnet.walrus.space/v1/3om0zV4j9AHvC5KSrcg3iyMU8zOavKhg3uT8q1rwap0"); + let yes = option::some(url); // 使用 option::some 函数 + let (treasury, coinmetadata) = create_currency(zacarxfaucet, 8, b"ZACARXFAUCET", b"zacarxfaucet", b"we love zacarxfaucet'coin", yes, ctx); + + sui::transfer::public_freeze_object(coinmetadata); + sui::transfer::public_share_object(treasury); + + // mint_and_transfer() +} diff --git a/mover/zacarx/code/task2_coin/faucet_coin/tests/faucet_coin_tests.move b/mover/zacarx/code/task2_coin/faucet_coin/tests/faucet_coin_tests.move new file mode 100644 index 000000000..74b01751a --- /dev/null +++ b/mover/zacarx/code/task2_coin/faucet_coin/tests/faucet_coin_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module faucet_coin::faucet_coin_tests; +// uncomment this line to import the module +// use faucet_coin::faucet_coin; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_faucet_coin() { + // pass +} + +#[test, expected_failure(abort_code = ::faucet_coin::faucet_coin_tests::ENotImplemented)] +fun test_faucet_coin_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/zacarx/code/task2_coin/my_coin/Move.lock b/mover/zacarx/code/task2_coin/my_coin/Move.lock new file mode 100644 index 000000000..c2c8ca29d --- /dev/null +++ b/mover/zacarx/code/task2_coin/my_coin/Move.lock @@ -0,0 +1,40 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "6784F87564F47856350582ED7D17417E9E132E3258C1448EF81E23BFD57D0FF2" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/devnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/devnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.devnet] +chain-id = "0fc07bbe" +original-published-id = "0x5ab5bd498a6affa955df12b98a8b67578825e1c6a24ba79240e61178c988dac1" +latest-published-id = "0x5ab5bd498a6affa955df12b98a8b67578825e1c6a24ba79240e61178c988dac1" +published-version = "1" + +[env.main-env] +chain-id = "35834a8a" +original-published-id = "0xfb935e0ef8cb76d207ad2cdfe15bca9130e90d783f5d5dd51a865551655c48ba" +latest-published-id = "0xfb935e0ef8cb76d207ad2cdfe15bca9130e90d783f5d5dd51a865551655c48ba" +published-version = "1" diff --git a/mover/zacarx/code/task2_coin/my_coin/Move.toml b/mover/zacarx/code/task2_coin/my_coin/Move.toml new file mode 100644 index 000000000..a674d54e9 --- /dev/null +++ b/mover/zacarx/code/task2_coin/my_coin/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "my_coin" +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://gitee.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/devnet" } + +# 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] +my_coin = "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/zacarx/code/task2_coin/my_coin/sources/usd.move b/mover/zacarx/code/task2_coin/my_coin/sources/usd.move new file mode 100644 index 000000000..d8a1bbe1f --- /dev/null +++ b/mover/zacarx/code/task2_coin/my_coin/sources/usd.move @@ -0,0 +1,18 @@ +module my_coin::zacarxcoin; + +use sui::coin::{create_currency, mint_and_transfer}; +use sui::url; +use std::option; + +public struct ZACARXCOIN has drop {} + +fun init(zacarxcoin: ZACARXCOIN, ctx: &mut TxContext) { + let url = url::new_unsafe_from_bytes(b"https://aggregator.walrus-testnet.walrus.space/v1/3om0zV4j9AHvC5KSrcg3iyMU8zOavKhg3uT8q1rwap0"); + let yes = option::some(url); // 使用 option::some 函数 + let (treasury, coinmetadata) = create_currency(zacarxcoin, 8, b"ZACARXCOIN", b"zacarxcoin", b"we love zacarx'coin", yes, ctx); + + sui::transfer::public_freeze_object(coinmetadata); + sui::transfer::public_transfer(treasury, ctx.sender()) + + // mint_and_transfer() +} diff --git a/mover/zacarx/code/task2_coin/my_coin/tests/my_coin_tests.move b/mover/zacarx/code/task2_coin/my_coin/tests/my_coin_tests.move new file mode 100644 index 000000000..cd5b36060 --- /dev/null +++ b/mover/zacarx/code/task2_coin/my_coin/tests/my_coin_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module my_coin::my_coin_tests; +// uncomment this line to import the module +// use my_coin::my_coin; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_my_coin() { + // pass +} + +#[test, expected_failure(abort_code = ::my_coin::my_coin_tests::ENotImplemented)] +fun test_my_coin_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/zacarx/code/task3_my_nft/Move.lock b/mover/zacarx/code/task3_my_nft/Move.lock new file mode 100644 index 000000000..f8d957b19 --- /dev/null +++ b/mover/zacarx/code/task3_my_nft/Move.lock @@ -0,0 +1,40 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "52D56DDA7B81D6C8D4E8149AE4D0DA217890CA30BB40D805DE9A9A3C84AAB9FF" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://gitee.com/MystenLabs/sui.git", rev = "framework/mainnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.37.1" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.devnet] +chain-id = "0fc07bbe" +original-published-id = "0x16496de6ed690667e7d3116c98b3396f12b8785e3b687f4d3c1e85c9d9936b6f" +latest-published-id = "0x16496de6ed690667e7d3116c98b3396f12b8785e3b687f4d3c1e85c9d9936b6f" +published-version = "1" + +[env.main-env] +chain-id = "35834a8a" +original-published-id = "0x9c9e730a675be48bebf1fce89d305dec7e1a46c1adb8a07b8af61153ce696778" +latest-published-id = "0x9c9e730a675be48bebf1fce89d305dec7e1a46c1adb8a07b8af61153ce696778" +published-version = "1" diff --git a/mover/zacarx/code/task3_my_nft/Move.toml b/mover/zacarx/code/task3_my_nft/Move.toml new file mode 100644 index 000000000..245fdf912 --- /dev/null +++ b/mover/zacarx/code/task3_my_nft/Move.toml @@ -0,0 +1,37 @@ +[package] +name = "my_nft" +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://gitee.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/mainnet" } + +# 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] +my_nft = "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/zacarx/code/task3_my_nft/sources/my_nft.move b/mover/zacarx/code/task3_my_nft/sources/my_nft.move new file mode 100644 index 000000000..d8002245d --- /dev/null +++ b/mover/zacarx/code/task3_my_nft/sources/my_nft.move @@ -0,0 +1,64 @@ +module my_nft::my_nft; + +use std::string; +use std::string::String; +use sui::package; +use sui::display; +use sui::tx_context::sender; + +public struct NFT has key,store { + id: UID, + name: String, + image_url: String, +} +public struct MY_NFT has drop {} + +fun init(otw:MY_NFT,ctx: &mut TxContext){ + let keys = vector[ + b"id".to_string(), + b"name".to_string(), + b"image_url".to_string(), + ]; + + let values = vector[ + b"{id}".to_string(), + b"{name}".to_string(), + b"{image_url}".to_string(), + ]; + + // Claim the `Publisher` for the package! + let publisher = package::claim(otw, ctx); + + // Get a new `Display` object for the `NFT` type. + let mut display = display::new_with_fields( + &publisher, keys, values, ctx + ); + + // Commit first version of `Display` to apply changes. + display.update_version(); + + transfer::public_transfer(publisher, ctx.sender()); + transfer::public_transfer(display, ctx.sender()); + + let mynft = NFT{ + id:object::new(ctx), + name:string::utf8(b"zacarx nft"), + image_url:string::utf8(b"https://aggregator.walrus-testnet.walrus.space/v1/3om0zV4j9AHvC5KSrcg3iyMU8zOavKhg3uT8q1rwap0"), + }; + + transfer::public_transfer(mynft,ctx.sender()); +} + + +public entry fun mint(name: String, image_url: String, ctx: &mut TxContext) { + let mint_nft = NFT { + id: object::new(ctx), + name, + image_url + }; + transfer::public_transfer(mint_nft,ctx.sender()); +} + +public entry fun transfer_nft(nft: NFT, to: address) { + transfer::public_transfer(nft, to); +} diff --git a/mover/zacarx/code/task3_my_nft/tests/my_nft_tests.move b/mover/zacarx/code/task3_my_nft/tests/my_nft_tests.move new file mode 100644 index 000000000..4f30419a2 --- /dev/null +++ b/mover/zacarx/code/task3_my_nft/tests/my_nft_tests.move @@ -0,0 +1,18 @@ +/* +#[test_only] +module my_nft::my_nft_tests; +// uncomment this line to import the module +// use my_nft::my_nft; + +const ENotImplemented: u64 = 0; + +#[test] +fun test_my_nft() { + // pass +} + +#[test, expected_failure(abort_code = ::my_nft::my_nft_tests::ENotImplemented)] +fun test_my_nft_fail() { + abort ENotImplemented +} +*/ diff --git a/mover/zacarx/readme.md b/mover/zacarx/readme.md index 5ca8ebf5e..7bf795707 100644 --- a/mover/zacarx/readme.md +++ b/mover/zacarx/readme.md @@ -1,10 +1,10 @@ ## 基本信息 -- Sui钱包地址: `0xaaaf8ef32c022f5f1a7a0af13cea9e063ad502f6f3d0e4a854cc919718431ed5` +- Sui钱包地址: `0xdd3ef4a5f244874b6649519092e92482c262e7abcd6e1d84f435004ced85022d` > 首次参与需要完成第一个任务注册好钱包地址才被合并,并且后续学习奖励会打入这个地址 - github: `Zacarx` ## 个人简介 -- 工作经验: 0年 +- 工作经验: 1年 - 技术栈: `golang` `Python` > 重要提示 请认真写自己的简介 - CTFer,web手,对Move特别感兴趣,想通过Move入门区块链学习提升自己,开阔眼界 @@ -27,17 +27,22 @@ ![image-20240512172410027](./img/image-20240512172410027.png) ## 02 move coin -- [] My Coin package id : -- [] Faucet package id : -- [] 转账 `My Coin` hash: -- [] `Faucet Coin` address1 mint hash: -- [] `Faucet Coin` address2 mint hash: +- [x] My Coin package id : 0xfb935e0ef8cb76d207ad2cdfe15bca9130e90d783f5d5dd51a865551655c48ba +- [x] Faucet package id : 0xed033d020f7796449b1c845cdde8bca79e2d0a77329f03d014b2daa7896709ae +- [x] 转账 `My Coin` hash: 9bSsBeyv1gfm3BMULPjDKy6dFkALaWKwis6MmEVoqocT +- [x] `Faucet Coin` address1 mint hash: 9vWSqxLEW8mRriqVcY1F6FUX2KperUjputgx3MLuXW7b +- [x] `Faucet Coin` address2 mint hash:8JyJBcnimsZBFJpnYFFiV6gfvnrqLBQH7AbAeMWnSJNy ## 03 move NFT -- [] nft package id : -- [] nft object id : -- [] 转账 nft hash: -- [] scan上的NFT截图:![Scan截图](./images/你的图片地址) +- [x] nft package id :0x9c9e730a675be48bebf1fce89d305dec7e1a46c1adb8a07b8af61153ce696778 + +- [x] nft object id : 0x9c9e730a675be48bebf1fce89d305dec7e1a46c1adb8a07b8af61153ce696778 + +- [x] 转账 nft hash:CknAVhVVDDDPVKoz8Va5haxqv4PmVpL7pkLVLLccfmTN + +- [x] scan上的NFT截图: + + ![image-20241114170946321](./assets/image-20241114170946321.png) ## 04 Move Game - [] game package id :