/* This file is part of DarkFi (https://dark.fi)
*
* Copyright (C) 2020-2023 Dyne.org foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
//! Clock sync module
use std::{net::UdpSocket, time::Duration};
use log::debug;
use rand::prelude::SliceRandom;
use serde_json::json;
use url::Url;
use super::{client::RpcClient, jsonrpc::JsonRequest};
use crate::{util::time::Timestamp, Error, Result};
/// Clock sync parameters
const RETRIES: u8 = 10;
/// TODO: Loop through set of ntps, get their average response concurrenyly.
const NTP_ADDRESS: &str = "pool.ntp.org:123";
const EPOCH: i64 = 2208988800; // 1900
/// JSON-RPC request to a network peer (randomly selected), to
/// retrieve their current system clock.
async fn peer_request(peers: &[Url]) -> Result