Skip to content

Commit 67c39a9

Browse files
authored
Merge pull request #345 from mojoX911/log-and-other-fixes
Make the DNS send ALL addresses
2 parents 1bc3e5d + bcbd223 commit 67c39a9

File tree

6 files changed

+47
-51
lines changed

6 files changed

+47
-51
lines changed

src/bin/taker.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ fn main() -> Result<(), TakerError> {
232232
}
233233

234234
Commands::SyncOfferBook => {
235-
taker.sync_offerbook(args.maker_count)?;
235+
taker.sync_offerbook()?;
236236
}
237237
Commands::DoCoinswap => {
238238
taker.do_coinswap(swap_params)?;

src/market/directory.rs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ fn handle_client(
394394
let dns_request: DnsRequest = serde_cbor::de::from_reader(&buf[..])?;
395395
match dns_request {
396396
DnsRequest::Post { metadata } => {
397-
log::info!("Received new maker address: {}", &metadata.url);
397+
log::info!("Received POST | From {}", &metadata.url);
398398

399399
let txid = metadata.proof.bond.outpoint.txid;
400400
let transaction = rpc.get_raw_transaction(&txid, None)?;
@@ -422,22 +422,18 @@ fn handle_client(
422422
}
423423
}
424424
}
425-
DnsRequest::Get { makers } => {
426-
log::info!("Taker pinged the directory server");
427-
log::info!("Number of makers requested: {:?}", makers);
425+
DnsRequest::Get => {
426+
log::info!("Received GET | From {}", stream.peer_addr()?);
428427
let addresses = directory.addresses.read()?;
429-
let response = if addresses.len() < makers as usize {
430-
String::new()
431-
} else {
432-
addresses
433-
.iter()
434-
.take(makers as usize)
435-
.fold(String::new(), |acc, AddressEntry(_, addr)| {
436-
acc + addr + "\n"
437-
})
438-
};
428+
let response = addresses
429+
.iter()
430+
.fold(String::new(), |acc, AddressEntry(_, addr)| {
431+
acc + addr + "\n"
432+
});
433+
log::debug!("Sending Addresses: {}", response);
439434
send_message(stream, &response)?;
440435
}
436+
#[cfg(feature = "integration-test")]
441437
DnsRequest::Dummy { url } => {
442438
log::info!("Got new maker address: {}", &url);
443439
directory.addresses.write()?.insert(AddressEntry(0, url));

src/taker/api.rs

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,13 @@ impl Taker {
297297
/// If that fails too. Open an issue at [our github](https://github.com/citadel-tech/coinswap/issues)
298298
pub fn send_coinswap(&mut self, swap_params: SwapParams) -> Result<(), TakerError> {
299299
log::info!("Syncing Offerbook");
300-
self.sync_offerbook(swap_params.maker_count)?;
300+
self.sync_offerbook()?;
301+
302+
// Error early if hop_count > available good makers.
303+
if swap_params.maker_count > self.offerbook.all_makers.len() {
304+
return Err(TakerError::NotEnoughMakersInOfferBook);
305+
}
306+
301307
// Generate new random preimage and initiate the first hop.
302308
let mut preimage = [0u8; 32];
303309
OsRng.fill_bytes(&mut preimage);
@@ -1920,7 +1926,7 @@ impl Taker {
19201926
}
19211927

19221928
/// Synchronizes the offer book with addresses obtained from directory servers and local configurations.
1923-
pub fn sync_offerbook(&mut self, maker_count: usize) -> Result<(), TakerError> {
1929+
pub fn sync_offerbook(&mut self) -> Result<(), TakerError> {
19241930
let directory_address = match self.config.connection_type {
19251931
ConnectionType::CLEARNET => {
19261932
let mut address = self.config.directory_server_address.clone();
@@ -1952,18 +1958,21 @@ impl Taker {
19521958
socks_port = Some(self.config.socks_port);
19531959
}
19541960
}
1955-
let addresses_from_dns = fetch_addresses_from_dns(
1956-
socks_port,
1957-
directory_address,
1958-
maker_count,
1959-
self.config.connection_type,
1960-
)?;
1961-
let offers = fetch_offer_from_makers(addresses_from_dns, &self.config)?;
1961+
let addresses_from_dns =
1962+
fetch_addresses_from_dns(socks_port, directory_address, self.config.connection_type)?;
19621963

1963-
let new_offers = offers
1964+
// Filter for new addresses only.
1965+
let know_addrs = self
1966+
.offerbook
1967+
.all_makers
1968+
.iter()
1969+
.map(|oa| oa.address.clone())
1970+
.collect::<Vec<_>>();
1971+
let new_addrs = addresses_from_dns
19641972
.into_iter()
1965-
.filter(|offer| !self.offerbook.bad_makers.contains(offer))
1973+
.filter(|addr| !know_addrs.contains(addr))
19661974
.collect::<Vec<_>>();
1975+
let new_offers = fetch_offer_from_makers(new_addrs, &self.config)?;
19671976

19681977
for offer in new_offers {
19691978
log::info!(
@@ -1976,10 +1985,11 @@ impl Taker {
19761985
.verify_fidelity_proof(&offer.offer.fidelity, &offer.address.to_string())
19771986
{
19781987
log::warn!(
1979-
"Fidelity Proof Verification failed with error: {:?}. Rejecting Offer from Maker : {}",
1988+
"Fidelity Proof Verification failed with error: {:?}. Adding this to bad maker list : {}",
19801989
e,
19811990
offer.address.to_string()
19821991
);
1992+
self.offerbook.add_bad_maker(&offer);
19831993
} else {
19841994
log::info!("Fideity Bond verification succes. Adding offer to our OfferBook");
19851995
self.offerbook.add_new_offer(&offer);

src/taker/offers.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,8 @@ pub fn fetch_offer_from_makers(
165165
thread.thread().name().expect("thread names expected")
166166
);
167167
let join_result = thread.join();
168-
if let Ok(r) = join_result {
169-
log::info!("Thread closing result: {:?}", r)
170-
} else if let Err(e) = join_result {
171-
log::info!("Error in internal thread: {:?}", e);
168+
if let Err(e) = join_result {
169+
log::error!("Error in internal thread: {:?}", e);
172170
}
173171
}
174172
Ok(result)
@@ -178,7 +176,6 @@ pub fn fetch_offer_from_makers(
178176
pub fn fetch_addresses_from_dns(
179177
socks_port: Option<u16>,
180178
directory_server_address: String,
181-
number_of_makers: usize,
182179
connection_type: ConnectionType,
183180
) -> Result<Vec<MakerAddress>, TakerError> {
184181
// TODO: Make the communication in serde_encoded bytes.
@@ -199,10 +196,7 @@ pub fn fetch_addresses_from_dns(
199196
stream.flush()?;
200197

201198
// Change datatype of number of makers to u32 from usize
202-
let request = DnsRequest::Get {
203-
makers: number_of_makers as u32,
204-
};
205-
if let Err(e) = send_message(&mut stream, &request) {
199+
if let Err(e) = send_message(&mut stream, &DnsRequest::Get) {
206200
log::warn!("Failed to send request. Retrying...{}", e);
207201
thread::sleep(GLOBAL_PAUSE);
208202
continue;
@@ -225,17 +219,7 @@ pub fn fetch_addresses_from_dns(
225219
.collect::<Result<Vec<MakerAddress>, _>>()
226220
{
227221
Ok(addresses) => {
228-
if addresses.len() < number_of_makers {
229-
log::info!(
230-
"Insufficient addresses received. Need: {}, Got: {}. Retrying...",
231-
number_of_makers,
232-
addresses.len()
233-
);
234-
thread::sleep(GLOBAL_PAUSE);
235-
continue;
236-
} else {
237-
return Ok(addresses);
238-
}
222+
return Ok(addresses);
239223
}
240224
Err(e) => {
241225
log::error!("Error decoding DNS response: {:?}. Retrying...", e);

src/utill.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -512,9 +512,14 @@ pub struct DnsMetadata {
512512
// Structured requests and responses using serde.
513513
#[derive(Serialize, Deserialize, Debug)]
514514
pub enum DnsRequest {
515-
Post { metadata: Box<DnsMetadata> },
516-
Get { makers: u32 },
517-
Dummy { url: String },
515+
Post {
516+
metadata: Box<DnsMetadata>,
517+
},
518+
Get,
519+
#[cfg(feature = "integration-test")]
520+
Dummy {
521+
url: String,
522+
},
518523
}
519524

520525
pub fn verify_fidelity_checks(

src/wallet/api.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ impl Wallet {
152152
// Generate Master key
153153
let master_key = {
154154
let mnemonic = Mnemonic::generate(12)?;
155-
log::info!("Mnemonics: \n {:?}", mnemonic);
155+
let words = mnemonic.words().collect::<Vec<_>>();
156+
log::info!("Backup the Wallet Mnemonics. \n {:?}", words);
156157
let seed = mnemonic.to_entropy();
157158
Xpriv::new_master(rpc_config.network, &seed)?
158159
};

0 commit comments

Comments
 (0)