private void Create(WasabiSynchronizer synchronizer, Network network, KeyManager keyManager, Func <Uri> ccjHostUriAction, IPEndPoint torSocks5EndPoint) { Network = Guard.NotNull(nameof(network), network); KeyManager = Guard.NotNull(nameof(keyManager), keyManager); CcjHostUriAction = Guard.NotNull(nameof(ccjHostUriAction), ccjHostUriAction); Synchronizer = Guard.NotNull(nameof(synchronizer), synchronizer); TorSocks5EndPoint = torSocks5EndPoint; CoordinatorFeepercentToCheck = null; ExposedLinks = new ConcurrentDictionary <TxoRef, IEnumerable <HdPubKeyBlindedPair> >(); _running = 0; Cancel = new CancellationTokenSource(); _frequentStatusProcessingIfNotMixing = 0; State = new CcjClientState(); MixLock = new AsyncLock(); _statusProcessing = 0; DelayedRoundRegistration = null; Synchronizer.ResponseArrived += Synchronizer_ResponseArrivedAsync; var lastResponse = Synchronizer.LastResponse; if (lastResponse != null) { _ = TryProcessStatusAsync(Synchronizer.LastResponse.CcjRoundStates); } }
public CcjClient( WasabiSynchronizer synchronizer, Network network, KeyManager keyManager, Uri ccjHostUri, IPEndPoint torSocks5EndPoint = null) { Network = Guard.NotNull(nameof(network), network); KeyManager = Guard.NotNull(nameof(keyManager), keyManager); CcjHostUri = Guard.NotNull(nameof(ccjHostUri), ccjHostUri); Synchronizer = Guard.NotNull(nameof(synchronizer), synchronizer); TorSocks5EndPoint = torSocks5EndPoint; CoordinatorFeepercentToCheck = null; ExposedLinks = new ConcurrentDictionary <TxoRef, IEnumerable <HdPubKeyBlindedPair> >(); _running = 0; Cancel = new CancellationTokenSource(); _frequentStatusProcessingIfNotMixing = 0; State = new CcjClientState(); MixLock = new AsyncLock(); _statusProcessing = 0; DelayedRoundRegistration = null; Synchronizer.ResponseArrived += Synchronizer_ResponseArrivedAsync; }
public CcjClient(WasabiSynchronizer synchronizer, Network network, BlindingRsaPubKey coordinatorPubKey, KeyManager keyManager, Uri ccjHostUri, IPEndPoint torSocks5EndPoint = null) { AccessCache = new ConcurrentDictionary <HdPubKey, DateTimeOffset>(); Network = Guard.NotNull(nameof(network), network); CoordinatorPubKey = Guard.NotNull(nameof(coordinatorPubKey), coordinatorPubKey); KeyManager = Guard.NotNull(nameof(keyManager), keyManager); CcjHostUri = Guard.NotNull(nameof(ccjHostUri), ccjHostUri); Synchronizer = Guard.NotNull(nameof(synchronizer), synchronizer); TorSocks5EndPoint = torSocks5EndPoint; CoordinatorFeepercentToCheck = null; _running = 0; Cancel = new CancellationTokenSource(); _frequentStatusProcessingIfNotMixing = 0; State = new CcjClientState(); MixLock = new AsyncLock(); _statusProcessing = 0; CustomChangeAddresses = new List <BitcoinAddress>(); CustomActiveAddresses = new List <BitcoinAddress>(); CustomChangeAddressesLock = new object(); CustomActiveAddressesLock = new object(); Synchronizer.ResponseArrived += Synchronizer_ResponseArrivedAsync; }
public CcjClient(Network network, BlindingRsaPubKey coordinatorPubKey, KeyManager keyManager, Uri ccjHostUri, IPEndPoint torSocks5EndPoint = null) { Network = Guard.NotNull(nameof(network), network); CoordinatorPubKey = Guard.NotNull(nameof(coordinatorPubKey), coordinatorPubKey); KeyManager = Guard.NotNull(nameof(keyManager), keyManager); CcjHostUri = Guard.NotNull(nameof(ccjHostUri), ccjHostUri); TorSocks5EndPoint = torSocks5EndPoint; SatoshiClient = new SatoshiClient(ccjHostUri, torSocks5EndPoint); _running = 0; Cancel = new CancellationTokenSource(); _frequentStatusProcessingIfNotMixing = 0; State = new CcjClientState(); MixLock = new AsyncLock(); CustomChangeAddresses = new List <BitcoinAddress>(); CustomActiveAddresses = new List <BitcoinAddress>(); CustomChangeAddressesLock = new object(); CustomActiveAddressesLock = new object(); }
private SmartCoinStatus GetSmartCoinStatus() { if (Model.IsBanned) { return(SmartCoinStatus.MixingBanned); } CcjClientState clientState = Global.ChaumianClient.State; if (Model.CoinJoinInProgress) { foreach (long roundId in clientState.GetAllMixingRounds()) { CcjClientRound round = clientState.GetSingleOrDefaultRound(roundId); if (round != default) { if (round.CoinsRegistered.Contains(Model)) { if (round.State.Phase == CcjRoundPhase.InputRegistration) { return(SmartCoinStatus.MixingInputRegistration); } else if (round.State.Phase == CcjRoundPhase.ConnectionConfirmation) { return(SmartCoinStatus.MixingConnectionConfirmation); } else if (round.State.Phase == CcjRoundPhase.OutputRegistration) { return(SmartCoinStatus.MixingOutputRegistration); } else if (round.State.Phase == CcjRoundPhase.Signing) { return(SmartCoinStatus.MixingSigning); } } } } } if (Model.SpentAccordingToBackend) { return(SmartCoinStatus.SpentAccordingToBackend); } if (Model.Confirmed) { if (Model.CoinJoinInProgress) { return(SmartCoinStatus.MixingOnWaitingList); } else { return(SmartCoinStatus.Confirmed); } } else // Unconfirmed { if (Model.CoinJoinInProgress) { return(SmartCoinStatus.MixingWaitingForConfirmation); } else { return(SmartCoinStatus.Unconfirmed); } } }