/// <summary> /// Método que pega saldo de determinado endereço /// </summary> /// <returns> O saldo da chave </returns> internal static string PegarSaldo() { string chavePrivada = "cUaDX2ECmotrvVH71puhfmRHSTCjUxUtV5cUipqkMnfLGhzLKHAn"; var bitcoinSecret = new BitcoinSecret(chavePrivada); var rede = bitcoinSecret.Network; var saldo = "0"; try { saldo = ExploradorBlockchain.RetornarSaldo(bitcoinSecret, rede); }catch (Exception) { saldo = "Erro ao buscar o saldo"; } return(saldo); }
/// <summary> /// Método que envia valor para para determinado endereço /// </summary> public static bool Enviar(string destino, decimal valorAEnviar) { valorAEnviar = 0.00000001m; destino = "2N8MhUSTiw5JX8QCD4XoAZ2Qb5DcX9E5Qf6"; var bitcoinSecret = RetonaPrivateKey(); //TODO: Retorna private key, verifica saldo do outpoint e pega mais uma se não for o suficiente ou erro se não tiver var rede = bitcoinSecret.Network; var transacao = Transaction.Create(rede); var coinsDaTransacao = ExploradorBlockchain.PegarCoins(bitcoinSecret.ScriptPubKey, rede); var outPointAGastar = PegarOutpointOrigem(coinsDaTransacao, bitcoinSecret.ScriptPubKey); transacao.Inputs.Add(new TxIn() { PrevOut = outPointAGastar }); var enderecoDestino = BitcoinAddress.Create(destino, rede); //Gerado= {2N8MhUSTiw5JX8QCD4XoAZ2Qb5DcX9E5Qf6} var taxaDeMineracao = new Money(0.00008000m, MoneyUnit.BTC); //Taxa fixa em 80 bit ou 8000 satoshis var quantiaTxInDisponivel = (Money)coinsDaTransacao[(int)outPointAGastar.N].Amount; var valor = new Money(valorAEnviar, MoneyUnit.BTC); if (quantiaTxInDisponivel < valor) { throw new Exception("Não há valor disponível para a transação."); } if (quantiaTxInDisponivel - valor < taxaDeMineracao) { throw new Exception("A quantia disponivel para envio não é suficiente para arcar com a taxa de mineração."); } var troco = quantiaTxInDisponivel - valor - taxaDeMineracao; TxOut txOut = new TxOut() { Value = valor, ScriptPubKey = enderecoDestino.ScriptPubKey }; TxOut trocoTxOut = new TxOut() { Value = troco, ScriptPubKey = bitcoinSecret.ScriptPubKey }; transacao.Outputs.Add(txOut); transacao.Outputs.Add(trocoTxOut); var mensagem = "Primeira transacao Arbitro Bitcoin!"; var bytes = Encoding.UTF8.GetBytes(mensagem); transacao.Outputs.Add(new TxOut() { Value = Money.Zero, ScriptPubKey = TxNullDataTemplate.Instance.GenerateScriptPubKey(bytes) }); transacao.Inputs[0].ScriptSig = bitcoinSecret.ScriptPubKey; transacao.Sign(bitcoinSecret, coinsDaTransacao.ToArray()); var txId = transacao.GetHash(); return(ExploradorBlockchain.PropagarTransacao(transacao, bitcoinSecret.Network)); }