|
2 | 2 | #![no_main] |
3 | 3 | extern crate alloc; |
4 | 4 | use amadeus_sdk::*; |
5 | | -use alloc::{vec::Vec}; |
| 5 | +use alloc::{vec::Vec, string::String}; |
6 | 6 |
|
7 | 7 | fn vault_key(symbol: &Vec<u8>) -> Vec<u8> { |
8 | 8 | b!("vault:", account_caller(), ":", symbol) |
9 | 9 | } |
10 | 10 |
|
11 | | -#[no_mangle] |
12 | | -pub extern "C" fn balance(symbol_ptr: i32) { |
13 | | - let key = vault_key(&read_bytes(symbol_ptr)); |
14 | | - ret(kv_get(key).unwrap_or(0)); |
| 11 | +#[contract] |
| 12 | +fn balance(symbol: Vec<u8>) -> i128 { |
| 13 | + kv_get(vault_key(&symbol)).unwrap_or(0) |
15 | 14 | } |
16 | 15 |
|
17 | | -#[no_mangle] |
18 | | -pub extern "C" fn deposit() { |
| 16 | +#[contract] |
| 17 | +fn deposit() -> String { |
19 | 18 | log("deposit called"); |
20 | | - |
21 | 19 | let (has_attachment, (symbol, amount)) = get_attachment(); |
22 | 20 | amadeus_sdk::assert!(has_attachment, "deposit has no attachment"); |
23 | | - |
24 | 21 | let amount_i128 = i128::from_bytes(amount); |
25 | 22 | amadeus_sdk::assert!(amount_i128 > 100, "deposit amount less than 100"); |
26 | | - |
27 | | - let total_vault_deposited = kv_increment(vault_key(&symbol), amount_i128); |
28 | | - ret(total_vault_deposited); |
| 23 | + kv_increment(vault_key(&symbol), amount_i128) |
29 | 24 | } |
30 | 25 |
|
31 | | -#[no_mangle] |
32 | | -pub extern "C" fn withdraw(symbol_ptr: i32, amount_ptr: i32) { |
| 26 | +#[contract] |
| 27 | +fn withdraw(symbol: Vec<u8>, amount: Vec<u8>) -> i128 { |
33 | 28 | log("withdraw called"); |
34 | | - |
35 | | - let withdraw_symbol = read_bytes(symbol_ptr); |
36 | | - let withdraw_amount = read_bytes(amount_ptr); |
37 | | - let withdraw_amount_int = encoding::bytes_to_i128(&withdraw_amount); |
| 29 | + let withdraw_amount_int = encoding::bytes_to_i128(&amount); |
38 | 30 | amadeus_sdk::assert!(withdraw_amount_int > 0, "amount lte 0"); |
39 | | - |
40 | | - let key = vault_key(&withdraw_symbol); |
| 31 | + let key = vault_key(&symbol); |
41 | 32 | let vault_balance: i128 = kv_get(&key).unwrap_or(0); |
42 | 33 | amadeus_sdk::assert!(vault_balance >= withdraw_amount_int, "insufficient funds"); |
43 | | - |
44 | 34 | kv_increment(key, -withdraw_amount_int); |
45 | | - |
46 | | - call!("Coin", "transfer", [account_caller(), withdraw_amount, withdraw_symbol]); |
47 | | - |
48 | | - ret(vault_balance - withdraw_amount_int); |
| 35 | + call!("Coin", "transfer", [account_caller(), amount, symbol]); |
| 36 | + vault_balance - withdraw_amount_int |
49 | 37 | } |
50 | 38 |
|
51 | | -#[no_mangle] |
52 | | -pub extern "C" fn burn(symbol_ptr: i32, amount_ptr: i32) { |
53 | | - let symbol = read_string(symbol_ptr); |
54 | | - let amount = read_bytes(amount_ptr); |
| 39 | +#[contract] |
| 40 | +fn burn(symbol: String, amount: Vec<u8>) -> Vec<u8> { |
55 | 41 | log("burn"); |
56 | | - ret(call!("Coin", "transfer", [BURN_ADDRESS, amount, symbol])); |
| 42 | + call!("Coin", "transfer", [BURN_ADDRESS, amount, symbol]) |
57 | 43 | } |
0 commit comments