1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| module flashlend::flashlend;
use sui::balance::{Self, Balance}; use sui::coin::{Self, Coin}; use sui::sui::SUI; use sui::transfer::transfer; public struct Flashlend has key { id: UID, val: Balance<SUI>, }
public struct AdminCap has key {
id: UID,
}
public struct Receipt {
val: u64,
}
fun init(ctx: &mut TxContext) {
let flash_lend = Flashlend { id: object::new(ctx), val: balance::zero() };
let admin = AdminCap { id: object::new(ctx) };
transfer(admin, ctx.sender());
}
public fun lend(pool: &mut Flashlend, amout: u64, ctx: &mut TxContext): (Receipt, Coin<SUI>) {
let bal = pool.val.split(amout);
let sui_coin = coin::from_balance(bal, ctx);
let receipt = Receipt { val: amout+amout/100 };
(receipt, sui_coin)
}
public fun repay(pool: &mut Flashlend, re_amout: Receipt, in: Coin<SUI>) {
let in_amout = coin::value(&in);
assert!(in_amout == re_amout.val, 0x11);
let bal = coin::into_balance(in);
pool.val.join(bal);
let Receipt { val } = re_amout;
}
#[test] //伪代码 fun handle() {
let (sui, re) = lend();
repay(pool, re_amout, in);
}
|