@@ -62,10 +62,9 @@ module zkgm::zkgm {
62
62
use std::string::{Self , String };
63
63
use std::type_name;
64
64
65
- use sui::balance;
66
65
use sui::bcs;
67
66
use sui::clock::Clock ;
68
- use sui::coin::{Self , Coin , TreasuryCap , CoinMetadata };
67
+ use sui::coin::{Self , Coin };
69
68
use sui::object_bag::{Self , ObjectBag };
70
69
use sui::table::{Self , Table };
71
70
@@ -121,7 +120,6 @@ module zkgm::zkgm {
121
120
const E_INVALID_FILL_TYPE : u64 = 12 ;
122
121
const E_NO_CALL_OPERATION : u64 = 17 ;
123
122
const E_INVALID_FORWARD_INSTRUCTION : u64 = 18 ;
124
- const E_NO_TREASURY_CAPABILITY : u64 = 20 ;
125
123
const E_NO_COIN_IN_BAG : u64 = 23 ;
126
124
const E_CHANNEL_BALANCE_PAIR_NOT_FOUND : u64 = 25 ;
127
125
const E_ANOTHER_TOKEN_IS_REGISTERED : u64 = 26 ;
@@ -130,7 +128,7 @@ module zkgm::zkgm {
130
128
const E_INVALID_TOKEN_ORDER_KIND : u64 = 31 ;
131
129
const E_UNWRAP_BASE_AMOUNT_SMALLER_THAN_QUOTE_AMOUNT : u64 = 32 ;
132
130
const E_UNWRAP_METADATA_INVALID : u64 = 33 ;
133
- const E_UNAUTHORIZED : u64 = 34 ;
131
+ // const E_UNAUTHORIZED: u64 = 34;
134
132
const E_INVALID_METADATA : u64 = 35 ;
135
133
const E_INVALID_UNESCROW : u64 = 38 ;
136
134
const E_ACK_SIZE_MISMATCHING : u64 = 42 ;
@@ -149,22 +147,10 @@ module zkgm::zkgm {
149
147
in_flight_packet: Table <vector <u8 >, Packet >,
150
148
channel_balance: Table <ChannelBalancePair , u256 >,
151
149
token_origin: Table <vector <u8 >, u256 >,
152
- type_name_t_to_capability: ObjectBag ,
153
150
bag_to_coin: ObjectBag ,
154
151
wrapped_denom_to_t: Table <vector <u8 >, String >,
155
152
}
156
153
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
-
168
154
public struct ChannelBalancePair has copy , drop , store {
169
155
channel: u32 ,
170
156
path: u256 ,
@@ -225,7 +211,6 @@ module zkgm::zkgm {
225
211
in_flight_packet: table::new (ctx),
226
212
channel_balance: table::new (ctx),
227
213
token_origin: table::new (ctx),
228
- type_name_t_to_capability: object_bag::new (ctx),
229
214
bag_to_coin: object_bag::new (ctx),
230
215
wrapped_denom_to_t: table::new (ctx),
231
216
});
@@ -669,6 +654,7 @@ module zkgm::zkgm {
669
654
670
655
public fun acknowledge_packet <T >(
671
656
ibc: &mut ibc::IBCStore ,
657
+ vault: &mut Vault ,
672
658
zkgm: &mut RelayStore ,
673
659
relayer: address ,
674
660
mut ack_ctx: AckCtx ,
@@ -715,6 +701,7 @@ module zkgm::zkgm {
715
701
};
716
702
717
703
zkgm.acknowledge_internal <T >(
704
+ vault,
718
705
packet,
719
706
relayer,
720
707
zkgm_packet.path,
@@ -797,6 +784,7 @@ module zkgm::zkgm {
797
784
798
785
public fun timeout_packet <T >(
799
786
ibc: &mut ibc::IBCStore ,
787
+ vault: &mut Vault ,
800
788
zkgm: &mut RelayStore ,
801
789
relayer: address ,
802
790
mut timeout_ctx: TimeoutCtx ,
@@ -835,6 +823,7 @@ module zkgm::zkgm {
835
823
};
836
824
837
825
zkgm.timeout_internal <T >(
826
+ vault,
838
827
packet,
839
828
relayer,
840
829
zkgm_packet.path,
@@ -876,35 +865,6 @@ module zkgm::zkgm {
876
865
abort E_INFINITE_GAME
877
866
}
878
867
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
-
908
868
fun market_maker_fill <T >(
909
869
zkgm: &mut RelayStore ,
910
870
vault: &mut Vault ,
@@ -999,6 +959,7 @@ module zkgm::zkgm {
999
959
1000
960
fun protocol_fill_mint <T >(
1001
961
zkgm: &mut RelayStore ,
962
+ vault: &mut Vault ,
1002
963
_channel_id: u32 ,
1003
964
_path: u256 ,
1004
965
wrapped_token: vector <u8 >,
@@ -1012,15 +973,14 @@ module zkgm::zkgm {
1012
973
1013
974
let fee = (order.base_amount () - order.quote_amount ()) as u64 ;
1014
975
// 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)) {
1016
977
return (vector ::empty (), E_ANOTHER_TOKEN_IS_REGISTERED )
1017
978
};
1018
- let capability = zkgm.get_treasury_cap <T >();
1019
979
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);
1021
981
};
1022
982
if (fee > 0 ){
1023
- coin:: mint_and_transfer <T >(capability, fee, relayer, ctx);
983
+ vault. mint_and_transfer <T >(fee, relayer, ctx);
1024
984
};
1025
985
1026
986
(token_order_ack::new (
@@ -1235,6 +1195,7 @@ module zkgm::zkgm {
1235
1195
1236
1196
// We expect the token to be deployed already here and the treasury cap is registered previously with type T
1237
1197
zkgm.protocol_fill_mint <T >(
1198
+ vault,
1238
1199
ibc_packet.destination_channel_id (),
1239
1200
path,
1240
1201
wrapped_token,
@@ -1464,6 +1425,7 @@ module zkgm::zkgm {
1464
1425
1465
1426
fun acknowledge_internal <T >(
1466
1427
zkgm: &mut RelayStore ,
1428
+ vault: &mut Vault ,
1467
1429
ibc_packet: Packet ,
1468
1430
relayer: address ,
1469
1431
path: u256 ,
@@ -1481,6 +1443,7 @@ module zkgm::zkgm {
1481
1443
let order = token_order::decode (instruction.operand ());
1482
1444
1483
1445
zkgm.acknowledge_token_order <T >(
1446
+ vault,
1484
1447
ibc_packet,
1485
1448
relayer,
1486
1449
path,
@@ -1497,6 +1460,7 @@ module zkgm::zkgm {
1497
1460
OP_FORWARD => {
1498
1461
assert !(version == INSTR_VERSION_0 , E_UNSUPPORTED_VERSION );
1499
1462
zkgm.acknowledge_forward <T >(
1463
+ vault,
1500
1464
ibc_packet,
1501
1465
relayer,
1502
1466
salt,
@@ -1515,6 +1479,7 @@ module zkgm::zkgm {
1515
1479
1516
1480
fun acknowledge_token_order <T >(
1517
1481
zkgm: &mut RelayStore ,
1482
+ vault: &mut Vault ,
1518
1483
ibc_packet: Packet ,
1519
1484
_relayer: address ,
1520
1485
path: u256 ,
@@ -1534,8 +1499,7 @@ module zkgm::zkgm {
1534
1499
let market_maker = bcs::new (*asset_order_ack.market_maker ()).peel_address ();
1535
1500
1536
1501
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);
1539
1503
} else {
1540
1504
let res = zkgm.decrease_outstanding (
1541
1505
ibc_packet.source_channel_id (),
@@ -1552,7 +1516,7 @@ module zkgm::zkgm {
1552
1516
);
1553
1517
coin.split <T >(order.base_amount () as u64 , ctx)
1554
1518
};
1555
- coin:: burn <T >(zkgm. get_treasury_cap < T >(), coin );
1519
+ vault. burn <T >(coin, ctx );
1556
1520
} else {
1557
1521
zkgm.distribute_coin <T >(market_maker, order.base_amount () as u64 , ctx);
1558
1522
};
@@ -1563,6 +1527,7 @@ module zkgm::zkgm {
1563
1527
};
1564
1528
} else {
1565
1529
zkgm.refund <T >(
1530
+ vault,
1566
1531
ibc_packet.source_channel_id (),
1567
1532
path,
1568
1533
order,
@@ -1574,6 +1539,7 @@ module zkgm::zkgm {
1574
1539
1575
1540
fun acknowledge_forward <T >(
1576
1541
zkgm: &mut RelayStore ,
1542
+ vault: &mut Vault ,
1577
1543
ibc_packet: Packet ,
1578
1544
relayer: address ,
1579
1545
salt: vector <u8 >,
@@ -1583,6 +1549,7 @@ module zkgm::zkgm {
1583
1549
ctx: &mut TxContext
1584
1550
) {
1585
1551
zkgm.acknowledge_internal <T >(
1552
+ vault,
1586
1553
ibc_packet,
1587
1554
relayer,
1588
1555
forward_packet.path (),
@@ -1596,6 +1563,7 @@ module zkgm::zkgm {
1596
1563
1597
1564
fun timeout_internal <T >(
1598
1565
zkgm: &mut RelayStore ,
1566
+ vault: &mut Vault ,
1599
1567
ibc_packet: Packet ,
1600
1568
relayer: address ,
1601
1569
path: u256 ,
@@ -1608,6 +1576,7 @@ module zkgm::zkgm {
1608
1576
OP_TOKEN_ORDER => {
1609
1577
if (version == INSTR_VERSION_2 ) {
1610
1578
zkgm.timeout_token_order <T >(
1579
+ vault,
1611
1580
ibc_packet,
1612
1581
path,
1613
1582
token_order::decode (instruction.operand ()),
@@ -1621,6 +1590,7 @@ module zkgm::zkgm {
1621
1590
OP_FORWARD => {
1622
1591
assert !(version == INSTR_VERSION_0 , E_UNSUPPORTED_VERSION );
1623
1592
zkgm.timeout_forward <T >(
1593
+ vault,
1624
1594
ibc_packet,
1625
1595
relayer,
1626
1596
path,
@@ -1637,12 +1607,14 @@ module zkgm::zkgm {
1637
1607
1638
1608
fun timeout_token_order <T >(
1639
1609
zkgm: &mut RelayStore ,
1610
+ vault: &mut Vault ,
1640
1611
packet: Packet ,
1641
1612
path: u256 ,
1642
1613
order: TokenOrderV2 ,
1643
1614
ctx: &mut TxContext
1644
1615
) {
1645
1616
zkgm.refund <T >(
1617
+ vault,
1646
1618
packet.source_channel_id (),
1647
1619
path,
1648
1620
order,
@@ -1652,16 +1624,16 @@ module zkgm::zkgm {
1652
1624
1653
1625
fun refund <T >(
1654
1626
zkgm: &mut RelayStore ,
1627
+ vault: &mut Vault ,
1655
1628
source_channel: u32 ,
1656
1629
path: u256 ,
1657
1630
order: TokenOrderV2 ,
1658
1631
ctx: &mut TxContext
1659
1632
) {
1660
1633
let sender = bcs::new (*order.sender ()).peel_address ();
1661
- let capability = zkgm.get_treasury_cap <T >();
1662
1634
1663
1635
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);
1665
1637
} else {
1666
1638
zkgm.decrease_outstanding (
1667
1639
source_channel,
@@ -1677,13 +1649,15 @@ module zkgm::zkgm {
1677
1649
1678
1650
fun timeout_forward <T >(
1679
1651
zkgm: &mut RelayStore ,
1652
+ vault: &mut Vault ,
1680
1653
packet: Packet ,
1681
1654
relayer: address ,
1682
1655
path: u256 ,
1683
1656
forward_packet: Forward ,
1684
1657
ctx: &mut TxContext
1685
1658
) {
1686
1659
zkgm.timeout_internal <T >(
1660
+ vault,
1687
1661
packet,
1688
1662
relayer,
1689
1663
path,
@@ -1692,19 +1666,9 @@ module zkgm::zkgm {
1692
1666
)
1693
1667
}
1694
1668
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
-
1706
1669
fun claim_wrapped_denom <T >(
1707
1670
zkgm: &mut RelayStore ,
1671
+ vault: &Vault ,
1708
1672
wrapped_denom: vector <u8 >,
1709
1673
metadata: Option <TokenMetadata >,
1710
1674
): bool {
@@ -1720,14 +1684,14 @@ module zkgm::zkgm {
1720
1684
let metadata = metadata.destroy_some ();
1721
1685
let sui_metadata = sui_token_metadata::decode (*metadata.initializer ());
1722
1686
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 ()) {
1731
1695
return false
1732
1696
};
1733
1697
@@ -1768,32 +1732,4 @@ module zkgm::zkgm {
1768
1732
zkgm.token_origin.add (wrapped_token, updated_channel_path);
1769
1733
};
1770
1734
}
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
- }
1799
1735
}
0 commit comments