Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions mover/SherVite/code/Task5_Swap/Swap/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build/*
68 changes: 68 additions & 0 deletions mover/SherVite/code/Task5_Swap/Swap/Move.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# @generated by Move, please check-in and do not edit manually.

[move]
version = 3
manifest_digest = "D956F2EFC491ADC191658BFBA6A01D96AEE8FEF688024CBC7967616E2DAA5942"
deps_digest = "397E6A9F7A624706DBDFEE056CE88391A15876868FD18A88504DA74EB458D697"
dependencies = [
{ id = "Bridge", name = "Bridge" },
{ id = "MoveStdlib", name = "MoveStdlib" },
{ id = "Sui", name = "Sui" },
{ id = "SuiSystem", name = "SuiSystem" },
{ id = "task2_coin", name = "task2_coin" },
]

[[move.package]]
id = "Bridge"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/bridge" }

dependencies = [
{ id = "MoveStdlib", name = "MoveStdlib" },
{ id = "Sui", name = "Sui" },
{ id = "SuiSystem", name = "SuiSystem" },
]

[[move.package]]
id = "MoveStdlib"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/move-stdlib" }

[[move.package]]
id = "Sui"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/sui-framework" }

dependencies = [
{ id = "MoveStdlib", name = "MoveStdlib" },
]

[[move.package]]
id = "SuiSystem"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/sui-system" }

dependencies = [
{ id = "MoveStdlib", name = "MoveStdlib" },
{ id = "Sui", name = "Sui" },
]

[[move.package]]
id = "task2_coin"
source = { local = "..\\..\\task2_coin" }

dependencies = [
{ id = "Bridge", name = "Bridge" },
{ id = "MoveStdlib", name = "MoveStdlib" },
{ id = "Sui", name = "Sui" },
{ id = "SuiSystem", name = "SuiSystem" },
]

[move.toolchain-version]
compiler-version = "1.47.0"
edition = "2024.beta"
flavor = "sui"

[env]

[env.mainnet]
chain-id = "35834a8a"
original-published-id = "0xefef43e6ce1e42e17c9f4d3a209217e6aa25ffa040edd4b1cc5425dc2e1c348c"
latest-published-id = "0xefef43e6ce1e42e17c9f4d3a209217e6aa25ffa040edd4b1cc5425dc2e1c348c"
published-version = "1"
37 changes: 37 additions & 0 deletions mover/SherVite/code/Task5_Swap/Swap/Move.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
[package]
name = "Swap"
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]
task2_coin = { local = "../../task2_coin" }
# 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]
swap = "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"

121 changes: 121 additions & 0 deletions mover/SherVite/code/Task5_Swap/Swap/sources/swap.move
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
module swap::swap{
use sui::balance;
use sui::balance::Balance;
use sui::coin;
use sui::coin::Coin;
use sui::transfer::{transfer, share_object, public_transfer};
use task2_coin::oiia_faucet::{OIIA_FAUCET};
use task2_coin::oiia::{OIIA};

const CoinNotEnough: u64 = 100;
const FauceOIIANotEnough: u64 = 101;
const WalletNotEnough: u64 = 102;

public struct AdminCap has key {
id: UID
}

// Swap pool
public struct Swap has key {
id: UID,
coin: Balance<OIIA>,
faucet_coin: Balance<OIIA_FAUCET>
}

fun init(ctx: &mut TxContext) {
let adminCap = AdminCap { id: object::new(ctx) };
let swap = Swap {
id: object::new(ctx),
coin: balance::zero<OIIA>(),
faucet_coin: balance::zero<OIIA_FAUCET>()
};
transfer(adminCap, ctx.sender());
// share the swap pool
share_object(swap);
}


public entry fun coin_to_faucet(
swap: &mut Swap,
in_coin: &mut Coin<OIIA>,
in_amount: u64,
ctx: &mut TxContext
) {
// wallet has enough coin
assert!(in_coin.value() >= in_amount, WalletNotEnough);
let coin_old_value = swap.coin.value();
let fauct_coin_old_value = swap.faucet_coin.value();
let const_value = coin_old_value * fauct_coin_old_value;
let coin_new_value = coin_old_value + in_amount;
// make sure the x total value * y total value = k
let fauct_coin_new_value = const_value / coin_new_value;
// the amount of faucet_coin to give
let out_amount = fauct_coin_old_value - fauct_coin_new_value;
// swap pool has enough faucet_coin
assert!(swap.faucet_coin.value() >= out_amount, FauceOIIANotEnough);
// swap pool add coin
swap.coin.join(coin::into_balance(in_coin.split(in_amount, ctx)));
// swap pool give faucet_coin
let takeCoin = coin::from_balance(swap.faucet_coin.split(out_amount), ctx);
// transfer to user
public_transfer(takeCoin, ctx.sender());
}

public entry fun faucet_to_coin(
swap: &mut Swap,
in_coin: &mut Coin<OIIA_FAUCET>,
in_amount: u64,
ctx: &mut TxContext
) {
// wallet has enough faucet_coin
assert!(in_coin.value() >= in_amount, WalletNotEnough);
let coin_old_value = swap.coin.value();
let fauct_coin_old_value = swap.faucet_coin.value();
let const_value = coin_old_value * fauct_coin_old_value;
let fauct_coin_new_value = fauct_coin_old_value + in_amount;
let coin_new_value = const_value / fauct_coin_new_value;
let out_amount = coin_old_value - coin_new_value;
assert!(swap.coin.value() >= out_amount, CoinNotEnough);
// swap pool add faucet_coin
swap.faucet_coin.join(coin::into_balance(in_coin.split(in_amount, ctx)));
// swap pool give coin
let out_coin = coin::from_balance(swap.coin.split(out_amount), ctx);
// transfer to user
public_transfer(out_coin, ctx.sender());
}

public entry fun deposit(
_: &AdminCap,
swap: &mut Swap,
coin: &mut Coin<OIIA>,
coin_amt: u64,
faucet_coin: &mut Coin<OIIA_FAUCET>,
faucet_coin_amount: u64,
ctx: &mut TxContext
) {
if (coin_amt > 0) {
swap.coin.join(coin::into_balance(coin.split(coin_amt, ctx)));
};
if (faucet_coin_amount > 0) {
swap.faucet_coin.join(coin::into_balance(faucet_coin.split(faucet_coin_amount, ctx)));
};
}


public entry fun withdraw(
_: &AdminCap,
swap: &mut Swap,
coin_amount: u64,
faucet_coin_amount: u64,
ctx: &mut TxContext
) {
if (coin_amount > 0 && swap.coin.value() > 0) {
let take_coin = coin::from_balance(swap.coin.split(coin_amount), ctx);
public_transfer(take_coin, ctx.sender());
};
if (faucet_coin_amount > 0 && swap.faucet_coin.value() > 0) {
let take_faucet_coin = coin::from_balance(swap.faucet_coin.split(faucet_coin_amount), ctx);
public_transfer(take_faucet_coin, ctx.sender());
};
}
}
18 changes: 18 additions & 0 deletions mover/SherVite/code/Task5_Swap/Swap/tests/swap_tests.move
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
#[test_only]
module swap::swap_tests;
// uncomment this line to import the module
// use swap::swap;

const ENotImplemented: u64 = 0;

#[test]
fun test_swap() {
// pass
}

#[test, expected_failure(abort_code = ::swap::swap_tests::ENotImplemented)]
fun test_swap_fail() {
abort ENotImplemented
}
*/
1 change: 1 addition & 0 deletions mover/SherVite/code/Task7/ctf7/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build/*
56 changes: 56 additions & 0 deletions mover/SherVite/code/Task7/ctf7/Move.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# @generated by Move, please check-in and do not edit manually.

[move]
version = 3
manifest_digest = "F8C66222E31F54B6E25DBBB21D9CBD788D3480EE2F04A26C1EC88EB5C622BC87"
deps_digest = "F9B494B64F0615AED0E98FC12A85B85ECD2BC5185C22D30E7F67786BB52E507C"
dependencies = [
{ id = "Bridge", name = "Bridge" },
{ id = "MoveStdlib", name = "MoveStdlib" },
{ id = "Sui", name = "Sui" },
{ id = "SuiSystem", name = "SuiSystem" },
]

[[move.package]]
id = "Bridge"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/bridge" }

dependencies = [
{ id = "MoveStdlib", name = "MoveStdlib" },
{ id = "Sui", name = "Sui" },
{ id = "SuiSystem", name = "SuiSystem" },
]

[[move.package]]
id = "MoveStdlib"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/move-stdlib" }

[[move.package]]
id = "Sui"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/sui-framework" }

dependencies = [
{ id = "MoveStdlib", name = "MoveStdlib" },
]

[[move.package]]
id = "SuiSystem"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "04f11afaf5e0", subdir = "crates/sui-framework/packages/sui-system" }

dependencies = [
{ id = "MoveStdlib", name = "MoveStdlib" },
{ id = "Sui", name = "Sui" },
]

[move.toolchain-version]
compiler-version = "1.47.0"
edition = "2024.beta"
flavor = "sui"

[env]

[env.mainnet]
chain-id = "35834a8a"
original-published-id = "0x9f16384006b3dc0ff2927d7eae90186469cb6475d67862822c5f6cedd38c93f6"
latest-published-id = "0x9f16384006b3dc0ff2927d7eae90186469cb6475d67862822c5f6cedd38c93f6"
published-version = "1"
36 changes: 36 additions & 0 deletions mover/SherVite/code/Task7/ctf7/Move.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[package]
name = "ctf7"
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]

# 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]
ctf7 = "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"

Loading