Skip to content

Commit f5f7fae

Browse files
committed
chore: moar vault stuff
Signed-off-by: aeryz <[email protected]>
1 parent 5c128d1 commit f5f7fae

File tree

5 files changed

+151
-120
lines changed

5 files changed

+151
-120
lines changed

sui/ucs03_zkgm/sources/zkgm.move

Lines changed: 38 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,9 @@ module zkgm::zkgm {
6262
use std::string::{Self, String};
6363
use std::type_name;
6464

65-
use sui::balance;
6665
use sui::bcs;
6766
use sui::clock::Clock;
68-
use sui::coin::{Self, Coin, TreasuryCap, CoinMetadata};
67+
use sui::coin::{Self, Coin};
6968
use sui::object_bag::{Self, ObjectBag};
7069
use sui::table::{Self, Table};
7170

@@ -121,7 +120,6 @@ module zkgm::zkgm {
121120
const E_INVALID_FILL_TYPE: u64 = 12;
122121
const E_NO_CALL_OPERATION: u64 = 17;
123122
const E_INVALID_FORWARD_INSTRUCTION: u64 = 18;
124-
const E_NO_TREASURY_CAPABILITY: u64 = 20;
125123
const E_NO_COIN_IN_BAG: u64 = 23;
126124
const E_CHANNEL_BALANCE_PAIR_NOT_FOUND: u64 = 25;
127125
const E_ANOTHER_TOKEN_IS_REGISTERED: u64 = 26;
@@ -130,7 +128,7 @@ module zkgm::zkgm {
130128
const E_INVALID_TOKEN_ORDER_KIND: u64 = 31;
131129
const E_UNWRAP_BASE_AMOUNT_SMALLER_THAN_QUOTE_AMOUNT: u64 = 32;
132130
const E_UNWRAP_METADATA_INVALID: u64 = 33;
133-
const E_UNAUTHORIZED: u64 = 34;
131+
// const E_UNAUTHORIZED: u64 = 34;
134132
const E_INVALID_METADATA: u64 = 35;
135133
const E_INVALID_UNESCROW: u64 = 38;
136134
const E_ACK_SIZE_MISMATCHING: u64 = 42;
@@ -149,22 +147,10 @@ module zkgm::zkgm {
149147
in_flight_packet: Table<vector<u8>, Packet>,
150148
channel_balance: Table<ChannelBalancePair, u256>,
151149
token_origin: Table<vector<u8>, u256>,
152-
type_name_t_to_capability: ObjectBag,
153150
bag_to_coin: ObjectBag,
154151
wrapped_denom_to_t: Table<vector<u8>, String>,
155152
}
156153

157-
public struct TreasuryCapWithMetadata<phantom T> has key, store {
158-
id: UID,
159-
cap: TreasuryCap<T>,
160-
name: String,
161-
symbol: String,
162-
decimals: u8,
163-
icon_url: Option<String>,
164-
description: String,
165-
owner: address
166-
}
167-
168154
public struct ChannelBalancePair has copy, drop, store {
169155
channel: u32,
170156
path: u256,
@@ -225,7 +211,6 @@ module zkgm::zkgm {
225211
in_flight_packet: table::new(ctx),
226212
channel_balance: table::new(ctx),
227213
token_origin: table::new(ctx),
228-
type_name_t_to_capability: object_bag::new(ctx),
229214
bag_to_coin: object_bag::new(ctx),
230215
wrapped_denom_to_t: table::new(ctx),
231216
});
@@ -669,6 +654,7 @@ module zkgm::zkgm {
669654

670655
public fun acknowledge_packet<T>(
671656
ibc: &mut ibc::IBCStore,
657+
vault: &mut Vault,
672658
zkgm: &mut RelayStore,
673659
relayer: address,
674660
mut ack_ctx: AckCtx,
@@ -715,6 +701,7 @@ module zkgm::zkgm {
715701
};
716702

717703
zkgm.acknowledge_internal<T>(
704+
vault,
718705
packet,
719706
relayer,
720707
zkgm_packet.path,
@@ -797,6 +784,7 @@ module zkgm::zkgm {
797784

798785
public fun timeout_packet<T>(
799786
ibc: &mut ibc::IBCStore,
787+
vault: &mut Vault,
800788
zkgm: &mut RelayStore,
801789
relayer: address,
802790
mut timeout_ctx: TimeoutCtx,
@@ -835,6 +823,7 @@ module zkgm::zkgm {
835823
};
836824

837825
zkgm.timeout_internal<T>(
826+
vault,
838827
packet,
839828
relayer,
840829
zkgm_packet.path,
@@ -876,35 +865,6 @@ module zkgm::zkgm {
876865
abort E_INFINITE_GAME
877866
}
878867

879-
public fun register_capability<T>(
880-
zkgm: &mut RelayStore,
881-
mut capability: TreasuryCap<T>,
882-
metadata: &CoinMetadata<T>,
883-
owner: address,
884-
ctx: &mut TxContext,
885-
) {
886-
if (owner != @0x0) {
887-
assert!(ctx.sender() == owner, E_UNAUTHORIZED);
888-
};
889-
890-
let supply = coin::supply(&mut capability);
891-
if (balance::supply_value(supply) != 0 ) {
892-
abort 0
893-
};
894-
895-
let typename_t = type_name::get<T>();
896-
zkgm.type_name_t_to_capability.add(string::from_ascii(typename_t.into_string()), TreasuryCapWithMetadata {
897-
id: object::new(ctx),
898-
cap: capability,
899-
name: coin::get_name(metadata),
900-
symbol: string::from_ascii(coin::get_symbol(metadata)),
901-
decimals: coin::get_decimals(metadata),
902-
icon_url: coin::get_icon_url(metadata).map!(|url| string::utf8(url.inner_url().into_bytes())),
903-
description: coin::get_description(metadata),
904-
owner
905-
});
906-
}
907-
908868
fun market_maker_fill<T>(
909869
zkgm: &mut RelayStore,
910870
vault: &mut Vault,
@@ -999,6 +959,7 @@ module zkgm::zkgm {
999959

1000960
fun protocol_fill_mint<T>(
1001961
zkgm: &mut RelayStore,
962+
vault: &mut Vault,
1002963
_channel_id: u32,
1003964
_path: u256,
1004965
wrapped_token: vector<u8>,
@@ -1012,15 +973,14 @@ module zkgm::zkgm {
1012973

1013974
let fee = (order.base_amount() - order.quote_amount()) as u64;
1014975
// if this token is minted for the first time, then we need to ensure that its always minting the same T
1015-
if (!zkgm.claim_wrapped_denom<T>(wrapped_token, metadata)) {
976+
if (!zkgm.claim_wrapped_denom<T>(vault, wrapped_token, metadata)) {
1016977
return (vector::empty(), E_ANOTHER_TOKEN_IS_REGISTERED)
1017978
};
1018-
let capability = zkgm.get_treasury_cap<T>();
1019979
if (quote_amount > 0) {
1020-
coin::mint_and_transfer<T>(capability, quote_amount as u64, receiver, ctx);
980+
vault.mint_and_transfer<T>(quote_amount as u64, receiver, ctx);
1021981
};
1022982
if (fee > 0){
1023-
coin::mint_and_transfer<T>(capability, fee, relayer, ctx);
983+
vault.mint_and_transfer<T>(fee, relayer, ctx);
1024984
};
1025985

1026986
(token_order_ack::new(
@@ -1235,6 +1195,7 @@ module zkgm::zkgm {
12351195

12361196
// We expect the token to be deployed already here and the treasury cap is registered previously with type T
12371197
zkgm.protocol_fill_mint<T>(
1198+
vault,
12381199
ibc_packet.destination_channel_id(),
12391200
path,
12401201
wrapped_token,
@@ -1464,6 +1425,7 @@ module zkgm::zkgm {
14641425

14651426
fun acknowledge_internal<T>(
14661427
zkgm: &mut RelayStore,
1428+
vault: &mut Vault,
14671429
ibc_packet: Packet,
14681430
relayer: address,
14691431
path: u256,
@@ -1481,6 +1443,7 @@ module zkgm::zkgm {
14811443
let order = token_order::decode(instruction.operand());
14821444

14831445
zkgm.acknowledge_token_order<T>(
1446+
vault,
14841447
ibc_packet,
14851448
relayer,
14861449
path,
@@ -1497,6 +1460,7 @@ module zkgm::zkgm {
14971460
OP_FORWARD => {
14981461
assert!(version == INSTR_VERSION_0, E_UNSUPPORTED_VERSION);
14991462
zkgm.acknowledge_forward<T>(
1463+
vault,
15001464
ibc_packet,
15011465
relayer,
15021466
salt,
@@ -1515,6 +1479,7 @@ module zkgm::zkgm {
15151479

15161480
fun acknowledge_token_order<T>(
15171481
zkgm: &mut RelayStore,
1482+
vault: &mut Vault,
15181483
ibc_packet: Packet,
15191484
_relayer: address,
15201485
path: u256,
@@ -1534,8 +1499,7 @@ module zkgm::zkgm {
15341499
let market_maker = bcs::new(*asset_order_ack.market_maker()).peel_address();
15351500

15361501
if (order.kind() == TOKEN_ORDER_KIND_UNESCROW) {
1537-
let capability = zkgm.get_treasury_cap<T>();
1538-
coin::mint_and_transfer<T>(capability, order.base_amount() as u64, market_maker, ctx);
1502+
vault.mint_and_transfer<T>(order.base_amount() as u64, market_maker, ctx);
15391503
} else {
15401504
let res = zkgm.decrease_outstanding(
15411505
ibc_packet.source_channel_id(),
@@ -1552,7 +1516,7 @@ module zkgm::zkgm {
15521516
);
15531517
coin.split<T>(order.base_amount() as u64, ctx)
15541518
};
1555-
coin::burn<T>(zkgm.get_treasury_cap<T>(), coin);
1519+
vault.burn<T>(coin, ctx);
15561520
} else {
15571521
zkgm.distribute_coin<T>(market_maker, order.base_amount() as u64, ctx);
15581522
};
@@ -1563,6 +1527,7 @@ module zkgm::zkgm {
15631527
};
15641528
} else {
15651529
zkgm.refund<T>(
1530+
vault,
15661531
ibc_packet.source_channel_id(),
15671532
path,
15681533
order,
@@ -1574,6 +1539,7 @@ module zkgm::zkgm {
15741539

15751540
fun acknowledge_forward<T>(
15761541
zkgm: &mut RelayStore,
1542+
vault: &mut Vault,
15771543
ibc_packet: Packet,
15781544
relayer: address,
15791545
salt: vector<u8>,
@@ -1583,6 +1549,7 @@ module zkgm::zkgm {
15831549
ctx: &mut TxContext
15841550
) {
15851551
zkgm.acknowledge_internal<T>(
1552+
vault,
15861553
ibc_packet,
15871554
relayer,
15881555
forward_packet.path(),
@@ -1596,6 +1563,7 @@ module zkgm::zkgm {
15961563

15971564
fun timeout_internal<T>(
15981565
zkgm: &mut RelayStore,
1566+
vault: &mut Vault,
15991567
ibc_packet: Packet,
16001568
relayer: address,
16011569
path: u256,
@@ -1608,6 +1576,7 @@ module zkgm::zkgm {
16081576
OP_TOKEN_ORDER => {
16091577
if (version == INSTR_VERSION_2) {
16101578
zkgm.timeout_token_order<T>(
1579+
vault,
16111580
ibc_packet,
16121581
path,
16131582
token_order::decode(instruction.operand()),
@@ -1621,6 +1590,7 @@ module zkgm::zkgm {
16211590
OP_FORWARD => {
16221591
assert!(version == INSTR_VERSION_0, E_UNSUPPORTED_VERSION);
16231592
zkgm.timeout_forward<T>(
1593+
vault,
16241594
ibc_packet,
16251595
relayer,
16261596
path,
@@ -1637,12 +1607,14 @@ module zkgm::zkgm {
16371607

16381608
fun timeout_token_order<T>(
16391609
zkgm: &mut RelayStore,
1610+
vault: &mut Vault,
16401611
packet: Packet,
16411612
path: u256,
16421613
order: TokenOrderV2,
16431614
ctx: &mut TxContext
16441615
) {
16451616
zkgm.refund<T>(
1617+
vault,
16461618
packet.source_channel_id(),
16471619
path,
16481620
order,
@@ -1652,16 +1624,16 @@ module zkgm::zkgm {
16521624

16531625
fun refund<T>(
16541626
zkgm: &mut RelayStore,
1627+
vault: &mut Vault,
16551628
source_channel: u32,
16561629
path: u256,
16571630
order: TokenOrderV2,
16581631
ctx: &mut TxContext
16591632
) {
16601633
let sender = bcs::new(*order.sender()).peel_address();
1661-
let capability = zkgm.get_treasury_cap<T>();
16621634

16631635
if (order.kind() == TOKEN_ORDER_KIND_UNESCROW) {
1664-
coin::mint_and_transfer<T>(capability, order.base_amount() as u64, sender, ctx);
1636+
vault.mint_and_transfer<T>(order.base_amount() as u64, sender, ctx);
16651637
} else {
16661638
zkgm.decrease_outstanding(
16671639
source_channel,
@@ -1677,13 +1649,15 @@ module zkgm::zkgm {
16771649

16781650
fun timeout_forward<T>(
16791651
zkgm: &mut RelayStore,
1652+
vault: &mut Vault,
16801653
packet: Packet,
16811654
relayer: address,
16821655
path: u256,
16831656
forward_packet: Forward,
16841657
ctx: &mut TxContext
16851658
) {
16861659
zkgm.timeout_internal<T>(
1660+
vault,
16871661
packet,
16881662
relayer,
16891663
path,
@@ -1692,19 +1666,9 @@ module zkgm::zkgm {
16921666
)
16931667
}
16941668

1695-
fun get_treasury_cap<T>(
1696-
zkgm: &mut RelayStore
1697-
): &mut TreasuryCap<T> {
1698-
let typename_t = type_name::get<T>();
1699-
let key = string::from_ascii(typename_t.into_string());
1700-
if (!zkgm.type_name_t_to_capability.contains(key)) {
1701-
abort E_NO_TREASURY_CAPABILITY
1702-
};
1703-
&mut zkgm.type_name_t_to_capability.borrow_mut<String, TreasuryCapWithMetadata<T>>(key).cap
1704-
}
1705-
17061669
fun claim_wrapped_denom<T>(
17071670
zkgm: &mut RelayStore,
1671+
vault: &Vault,
17081672
wrapped_denom: vector<u8>,
17091673
metadata: Option<TokenMetadata>,
17101674
): bool {
@@ -1720,14 +1684,14 @@ module zkgm::zkgm {
17201684
let metadata = metadata.destroy_some();
17211685
let sui_metadata = sui_token_metadata::decode(*metadata.initializer());
17221686

1723-
let t = zkgm.type_name_t_to_capability.borrow<String, TreasuryCapWithMetadata<T>>(key);
1724-
1725-
if (t.name != sui_metadata.name()
1726-
|| t.symbol != sui_metadata.symbol()
1727-
|| t.decimals != sui_metadata.decimals()
1728-
|| t.owner != sui_metadata.owner()
1729-
|| &t.icon_url != sui_metadata.icon_url()
1730-
|| &t.description != sui_metadata.description()) {
1687+
let m = vault.get_metadata<T>();
1688+
1689+
if (m.name() != sui_metadata.name()
1690+
|| m.symbol() != sui_metadata.symbol()
1691+
|| m.decimals() != sui_metadata.decimals()
1692+
|| m.owner() != sui_metadata.owner()
1693+
|| m.icon_url() != sui_metadata.icon_url()
1694+
|| m.description() != sui_metadata.description()) {
17311695
return false
17321696
};
17331697

@@ -1768,32 +1732,4 @@ module zkgm::zkgm {
17681732
zkgm.token_origin.add(wrapped_token, updated_channel_path);
17691733
};
17701734
}
1771-
1772-
/// Coin admin functions
1773-
public fun mint<T>(
1774-
zkgm: &mut RelayStore,
1775-
value: u64,
1776-
ctx: &mut TxContext
1777-
): Coin<T> {
1778-
let typename_t = type_name::get<T>();
1779-
let cap = zkgm.type_name_t_to_capability.borrow_mut<String, TreasuryCapWithMetadata<T>>(string::from_ascii(typename_t.into_string()));
1780-
1781-
assert!(ctx.sender() == cap.owner, E_UNAUTHORIZED);
1782-
1783-
coin::mint<T>(&mut cap.cap, value, ctx)
1784-
}
1785-
1786-
public fun mint_and_transfer<T>(
1787-
zkgm: &mut RelayStore,
1788-
amount: u64,
1789-
recipient: address,
1790-
ctx: &mut TxContext
1791-
) {
1792-
let typename_t = type_name::get<T>();
1793-
let cap = zkgm.type_name_t_to_capability.borrow_mut<String, TreasuryCapWithMetadata<T>>(string::from_ascii(typename_t.into_string()));
1794-
1795-
assert!(ctx.sender() == cap.owner, E_UNAUTHORIZED);
1796-
1797-
coin::mint_and_transfer<T>(&mut cap.cap, amount, recipient, ctx);
1798-
}
17991735
}

sui/vault/Move.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[move]
44
version = 3
5-
manifest_digest = "9B884F800CA004D5E999A394E3C1EB8057F7FB0B4D78019F4705C08ECAAE55FC"
5+
manifest_digest = "BE99A194CDA006B6A8701E2D9E9A1CFB544DE3E447BAD710B4AAAB625947A123"
66
deps_digest = "397E6A9F7A624706DBDFEE056CE88391A15876868FD18A88504DA74EB458D697"
77
dependencies = [
88
{ id = "Bridge", name = "Bridge" },

0 commit comments

Comments
 (0)