/// <summary>
/// Sends coins to the given address, via the given <see cref="PeerGroup"/>.
/// Change is returned to the first key in the wallet.
/// </summary>
/// <param name="peerGroup">The peer group to send via.</param>
/// <param name="to">Which address to send coins to.</param>
/// <param name="nanocoins">How many nanocoins to send. You can use Utils.toNanoCoins() to calculate this.</param>
/// <returns>
/// The <see cref="Transaction"/> that was created or null if there was insufficient balance to send the coins.
/// </returns>
/// <exception cref="IOException">If there was a problem broadcasting the transaction.</exception>
public Transaction SendCoins(PeerGroup peerGroup, Address to, ulong nanocoins)
{
lock (this)
{
var tx = CreateSend(to, nanocoins);
if (tx == null) // Not enough money! :-(
return null;
if (!peerGroup.BroadcastTransaction(tx))
{
throw new IOException("Failed to broadcast tx to all connected peers");
}
// TODO - retry logic
ConfirmSend(tx);
return tx;
}
}