@@ -26,16 +26,17 @@ use unionlabs::{
26
26
27
27
use crate :: {
28
28
com:: {
29
- Ack , Batch , BatchAck , Call , Forward , Instruction , Stake , TokenMetadata , TokenOrderAck ,
30
- TokenOrderV1 , TokenOrderV2 , Unstake , UnstakeAck , WithdrawRewards , WithdrawRewardsAck ,
31
- WithdrawStake , WithdrawStakeAck , ZkgmPacket , ACK_ERR_ONLY_MAKER , FILL_TYPE_MARKETMAKER ,
32
- FILL_TYPE_PROTOCOL , FORWARD_SALT_MAGIC , INSTR_VERSION_0 , INSTR_VERSION_1 , INSTR_VERSION_2 ,
33
- OP_BATCH , OP_CALL , OP_FORWARD , OP_STAKE , OP_TOKEN_ORDER , OP_UNSTAKE , OP_WITHDRAW_REWARDS ,
34
- OP_WITHDRAW_STAKE , TAG_ACK_FAILURE , TAG_ACK_SUCCESS , TOKEN_ORDER_KIND_ESCROW ,
35
- TOKEN_ORDER_KIND_INITIALIZE , TOKEN_ORDER_KIND_UNESCROW ,
29
+ Ack , Batch , BatchAck , Call , Forward , Instruction , SolverMetadata , Stake , TokenMetadata ,
30
+ TokenOrderAck , TokenOrderV1 , TokenOrderV2 , Unstake , UnstakeAck , WithdrawRewards ,
31
+ WithdrawRewardsAck , WithdrawStake , WithdrawStakeAck , ZkgmPacket , ACK_ERR_ONLY_MAKER ,
32
+ FILL_TYPE_MARKETMAKER , FILL_TYPE_PROTOCOL , FORWARD_SALT_MAGIC , INSTR_VERSION_0 ,
33
+ INSTR_VERSION_1 , INSTR_VERSION_2 , OP_BATCH , OP_CALL , OP_FORWARD , OP_STAKE , OP_TOKEN_ORDER ,
34
+ OP_UNSTAKE , OP_WITHDRAW_REWARDS , OP_WITHDRAW_STAKE , TAG_ACK_FAILURE , TAG_ACK_SUCCESS ,
35
+ TOKEN_ORDER_KIND_ESCROW , TOKEN_ORDER_KIND_INITIALIZE , TOKEN_ORDER_KIND_SOLVE ,
36
+ TOKEN_ORDER_KIND_UNESCROW ,
36
37
} ,
37
38
msg:: {
38
- Config , ExecuteMsg , InitMsg , PredictWrappedTokenResponse , QueryMsg , SolverMsg , SolverQuery ,
39
+ Config , ExecuteMsg , InitMsg , PredictWrappedTokenResponse , QueryMsg , SolverMsg ,
39
40
V1ToV2Migration , ZkgmMsg ,
40
41
} ,
41
42
state:: {
@@ -1776,11 +1777,12 @@ fn solver_market_maker_fill_v2(
1776
1777
order : TokenOrderV2 ,
1777
1778
intent : bool ,
1778
1779
) -> Result < Response , ContractError > {
1779
- let quote_token_str = String :: from_utf8 ( Vec :: from ( order. quote_token . clone ( ) ) )
1780
- . map_err ( |_| ContractError :: InvalidQuoteToken ) ?;
1780
+ let metadata = SolverMetadata :: abi_decode_params_validate ( & order. metadata ) ?;
1781
+ let solver = String :: from_utf8 ( Vec :: from ( metadata. solverAddress ) )
1782
+ . map_err ( |_| ContractError :: InvalidSolverAddress ) ?;
1781
1783
Ok ( Response :: new ( ) . add_submessage ( SubMsg :: reply_always (
1782
1784
wasm_execute (
1783
- quote_token_str . clone ( ) ,
1785
+ solver ,
1784
1786
& SolverMsg :: DoSolve {
1785
1787
packet,
1786
1788
order : order. into ( ) ,
@@ -1810,35 +1812,14 @@ fn market_maker_fill_v2(
1810
1812
order : TokenOrderV2 ,
1811
1813
intent : bool ,
1812
1814
) -> Result < Response , ContractError > {
1813
- let quote_token_str = String :: from_utf8 ( order. quote_token . clone ( ) . into ( ) )
1814
- . map_err ( |_| ContractError :: InvalidQuoteToken ) ?;
1815
- let is_solver = deps
1816
- . querier
1817
- . query_wasm_smart :: < ( ) > ( quote_token_str. clone ( ) , & SolverQuery :: IsSolver )
1818
- . is_ok ( ) ;
1819
- let allow_market_maker = deps
1820
- . querier
1821
- . query_wasm_smart :: < bool > ( quote_token_str. clone ( ) , & SolverQuery :: AllowMarketMakers )
1822
- . unwrap_or ( false ) ;
1823
- let ( relayer_fill_for_solver, arbitrary_relayer_payload) =
1824
- match <( bool , alloy_primitives:: Bytes ) >:: abi_decode_params ( & relayer_msg) {
1825
- Ok ( ( x, y) ) => ( x, y) ,
1826
- Err ( _) => ( false , relayer_msg. into_vec ( ) . into ( ) ) ,
1827
- } ;
1828
- let arbitrary_relayer_payload = arbitrary_relayer_payload. 0 . to_vec ( ) . into ( ) ;
1829
- if is_solver && ( !allow_market_maker || !relayer_fill_for_solver) {
1830
- solver_market_maker_fill_v2 (
1831
- caller,
1832
- relayer,
1833
- arbitrary_relayer_payload,
1834
- path,
1835
- packet,
1836
- order,
1837
- intent,
1838
- )
1839
- } else {
1840
- MARKET_MAKER . save ( deps. storage , & arbitrary_relayer_payload) ?;
1841
- relayer_market_maker_fill_v2 ( deps, env, funds, caller, minter, order)
1815
+ match order. kind {
1816
+ TOKEN_ORDER_KIND_SOLVE => {
1817
+ solver_market_maker_fill_v2 ( caller, relayer, relayer_msg, path, packet, order, intent)
1818
+ }
1819
+ _ => {
1820
+ MARKET_MAKER . save ( deps. storage , & relayer_msg) ?;
1821
+ relayer_market_maker_fill_v2 ( deps, env, funds, caller, minter, order)
1822
+ }
1842
1823
}
1843
1824
}
1844
1825
@@ -2082,7 +2063,7 @@ fn execute_fungible_asset_order_v2(
2082
2063
. map_err ( |_| ContractError :: UnableToValidateReceiver ) ?;
2083
2064
2084
2065
// For intent packets, only market maker can fill
2085
- if intent {
2066
+ if intent || order . kind == TOKEN_ORDER_KIND_SOLVE {
2086
2067
let minter = TOKEN_MINTER . load ( deps. storage ) ?;
2087
2068
return market_maker_fill_v2 (
2088
2069
deps,
0 commit comments