Skip to content

Commit b2f6540

Browse files
authored
Merge pull request #225 from xch-dev/offer-address
Add receive address to make_offer
2 parents 5b290e0 + d187020 commit b2f6540

File tree

4 files changed

+29
-34
lines changed

4 files changed

+29
-34
lines changed

crates/sage-api/src/requests/offers.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ pub struct MakeOffer {
1010
pub requested_assets: Assets,
1111
pub offered_assets: Assets,
1212
pub fee: Amount,
13+
#[serde(default)]
14+
pub receive_address: Option<String>,
15+
#[serde(default)]
1316
pub expires_at_second: Option<u64>,
1417
}
1518

crates/sage-wallet/src/wallet/offer.rs

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ mod tests {
2323
puzzles::nft::NftMetadata,
2424
};
2525
use clvmr::Allocator;
26-
use indexmap::{indexmap, IndexMap};
26+
use indexmap::indexmap;
2727
use test_log::test;
2828

2929
use crate::{MakerSide, RequestedNft, TakerSide, TestWallet, WalletNftMint};
@@ -44,14 +44,12 @@ mod tests {
4444
.make_offer(
4545
MakerSide {
4646
xch: 750,
47-
cats: IndexMap::new(),
48-
nfts: Vec::new(),
4947
fee: 250,
48+
..Default::default()
5049
},
5150
TakerSide {
52-
xch: 0,
5351
cats: indexmap! { asset_id => 1000 },
54-
nfts: IndexMap::new(),
52+
..Default::default()
5553
},
5654
None,
5755
false,
@@ -120,13 +118,9 @@ mod tests {
120118
.make_offer(
121119
MakerSide {
122120
xch: 1000,
123-
cats: IndexMap::new(),
124-
nfts: Vec::new(),
125-
fee: 0,
121+
..Default::default()
126122
},
127123
TakerSide {
128-
xch: 0,
129-
cats: IndexMap::new(),
130124
nfts: indexmap! {
131125
nft.info.launcher_id => RequestedNft {
132126
metadata,
@@ -135,6 +129,7 @@ mod tests {
135129
royalty_ten_thousandths: nft.info.royalty_ten_thousandths,
136130
},
137131
},
132+
..Default::default()
138133
},
139134
None,
140135
false,
@@ -201,15 +196,12 @@ mod tests {
201196
.wallet
202197
.make_offer(
203198
MakerSide {
204-
xch: 0,
205-
cats: IndexMap::new(),
206199
nfts: vec![nft.info.launcher_id],
207-
fee: 0,
200+
..Default::default()
208201
},
209202
TakerSide {
210203
xch: 1000,
211-
cats: IndexMap::new(),
212-
nfts: IndexMap::new(),
204+
..Default::default()
213205
},
214206
None,
215207
false,
@@ -284,18 +276,15 @@ mod tests {
284276
.wallet
285277
.make_offer(
286278
MakerSide {
287-
xch: 0,
288-
cats: IndexMap::new(),
289279
nfts: vec![
290280
nft_id_first.info.launcher_id,
291281
nft_id_second.info.launcher_id,
292282
],
293-
fee: 0,
283+
..Default::default()
294284
},
295285
TakerSide {
296286
xch: 1000,
297-
cats: IndexMap::new(),
298-
nfts: IndexMap::new(),
287+
..Default::default()
299288
},
300289
None,
301290
false,
@@ -385,18 +374,15 @@ mod tests {
385374
.wallet
386375
.make_offer(
387376
MakerSide {
388-
xch: 0,
389-
cats: IndexMap::new(),
390377
nfts: vec![
391378
nft_id_first.info.launcher_id,
392379
nft_id_second.info.launcher_id,
393380
],
394-
fee: 0,
381+
..Default::default()
395382
},
396383
TakerSide {
397-
xch: 0,
398384
cats: indexmap! { asset_id => 1000 },
399-
nfts: IndexMap::new(),
385+
..Default::default()
400386
},
401387
None,
402388
false,
@@ -481,18 +467,15 @@ mod tests {
481467
.wallet
482468
.make_offer(
483469
MakerSide {
484-
xch: 0,
485-
cats: IndexMap::new(),
486470
nfts: vec![
487471
nft_id_first.info.launcher_id,
488472
nft_id_second.info.launcher_id,
489473
],
490-
fee: 0,
474+
..Default::default()
491475
},
492476
TakerSide {
493477
xch: 1000,
494-
cats: IndexMap::new(),
495-
nfts: IndexMap::new(),
478+
..Default::default()
496479
},
497480
None,
498481
false,

crates/sage-wallet/src/wallet/offer/make_offer.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,16 @@ pub struct UnsignedMakeOffer {
2222
pub builder: OfferBuilder<Partial>,
2323
}
2424

25-
#[derive(Debug, Clone)]
25+
#[derive(Debug, Default, Clone)]
2626
pub struct MakerSide {
2727
pub xch: u64,
2828
pub cats: IndexMap<Bytes32, u64>,
2929
pub nfts: Vec<Bytes32>,
3030
pub fee: u64,
31+
pub p2_puzzle_hash: Option<Bytes32>,
3132
}
3233

33-
#[derive(Debug, Clone)]
34+
#[derive(Debug, Default, Clone)]
3435
pub struct TakerSide {
3536
pub xch: u64,
3637
pub cats: IndexMap<Bytes32, u64>,
@@ -81,7 +82,9 @@ impl Wallet {
8182
let maker_coins = self
8283
.fetch_offer_coins(&total_amounts, maker.nfts.clone())
8384
.await?;
84-
let p2_puzzle_hash = self.p2_puzzle_hash(hardened, reuse).await?;
85+
86+
let change_puzzle_hash = self.p2_puzzle_hash(hardened, reuse).await?;
87+
let p2_puzzle_hash = maker.p2_puzzle_hash.unwrap_or(change_puzzle_hash);
8588

8689
let mut builder = OfferBuilder::new(maker_coins.nonce());
8790
let mut ctx = SpendContext::new();
@@ -173,7 +176,7 @@ impl Wallet {
173176
royalties: maker_royalties,
174177
trade_prices,
175178
fee: maker.fee,
176-
change_puzzle_hash: p2_puzzle_hash,
179+
change_puzzle_hash,
177180
extra_conditions,
178181
},
179182
)

crates/sage/src/endpoints/offers.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,19 @@ impl Sage {
7676

7777
let fee = self.parse_amount(req.fee)?;
7878

79+
let p2_puzzle_hash = req
80+
.receive_address
81+
.map(|address| self.parse_address(address))
82+
.transpose()?;
83+
7984
let unsigned = wallet
8085
.make_offer(
8186
MakerSide {
8287
xch: offered_xch,
8388
cats: offered_cats,
8489
nfts: offered_nfts,
8590
fee,
91+
p2_puzzle_hash,
8692
},
8793
TakerSide {
8894
xch: requested_xch,

0 commit comments

Comments
 (0)