SlideShare uma empresa Scribd logo
BLOCKCHAIN & BITCOIN:
INTRODUÇÃO E PRÁTICA
COM C#
Alisson Solitto da Silva
Alisson Solitto da Silva, 23 anos
Técnico em Informática
Técnico em JAVA/WR
Bacharel em Ciência da Computação
MBA em Gestão de TI
Mestrando em Ciência da Computação
6 anos de experiência com o
desenvolvimento de software
Alisson Solitto da Silva, 23 anos
Blog: https://solitto.com.br/
GitHub: https://github.com/alissonsolitto
Linkedin: https://www.linkedin.com/in/solitto
Lattes: http://lattes.cnpq.br/7754813473705418
Simplechain: https://simplechain.com.br/
IzyMobile: http://izymobile.com/
Bitcoin - História
■ White Paper Bitcoin: A Peer-to-Peer Electronic Cash System
■ Ano: 2008 – Crise dos EUA
Unidades Bitcoin
■ No caso do Real a moeda é dividida até sua centésima parte que é o centavo.
■ 1 CENTAVO = R$ 0,01
■ Por ser uma moeda digital o Bitcoin é divisível até a centésima milionésima parte
conhecida como “SATOSHI”em homenagem ao seu criador.
Outros Projetos
CoinMarketCap +2.100 Criptomoedas
Blockchain – O que é?
■ A blockchain funciona como um livro-razão da contabilidade, controlando todos os
créditos e débitos de várias contas.
■ Principal benefício está na descentralização da sua base de dados, visando a
segurança e a confiabilidade de suas transações.
■ Desta forma cria-se uma rede universal, publica e compartilhada.
O que é?
■ O blockchain nada mais é do que uma lista encadeada.
■ As informações referentes a transação são armazenadas em um bloco de dados.
■ HASH: SHA-256
■ Cada nó na rede é um computador e qualquer computador pode fazer parte da
blockchain, para fazer parte da rede é necessário fazer uma cópia de toda a base
de dados da rede, após isso a principal tarefa do nó é validar e repassar os dados
das transações.
■ https://www.blockchain.com/pt/btc/unconfirmed-transactions
Vantagens
■ Transparência: todas as transações que ocorrem na rede são publicas e disponíveis
de forma acessíveis para todos.
■ Descentralização: não há necessidade de um intermediário nas transações, é
possível transferir dinheiro entre pessoas de qualquer lugar do mundo sem uma
instituição financeiro como nos métodos convencionais.
■ Inalterável: as transações feitas na rede são imutáveis, ou seja, não podem ser
alteradas ou deletadas.
■ Baixo custo: Por não haver uma instituição financeira intermediando as transações
o custo é muito menor.
Blockchain – Como funciona?
0x2bf8b4d794eff286baf9de360aeef064478967d7 0xce784419493d80d37ce83dbe86c9353f3f617d75
AliceBob
Transação 01
Transação 02
Transação 03
...
Transação N
Proof of Work
■ O maior trabalho computacional da rede é a criação de um hash válido
■ NONCE (N = Número e Once = Uma vez).
■ Bitcoin utiliza o método hashcash => hash deve ser codificado com um
número n de zero bits.
Exemplo
■ "Olá, mundo! 0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64
■ "Olá, mundo! 1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8
■ "Olá, mundo! 2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7
■ ...
■ "Olá, mundo! 4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965
■ "Olá, mundo! 4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6
■ "Olá, mundo! 4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9
Consenso
■ Broadcast do novo bloco
■ Validação
■ Aceitação
Show me the code! C#
■ Vamos programar uma
Wallet de Bitcoin!!
Show me the code! C#
Show me the code! C#
Show me the code! C#
Key privateKey = new Key();
PubKey publicKey = privateKey.PubKey;
Console.WriteLine(publicKey);
Console.WriteLine(publicKey.GetAddress(Network.TestNet));
Show me the code! C#
■ https://live.blockcypher.com/btc-testnet
■ https://bitcoinfaucet.uo1.net/
Gerando chaves com senha
■ Mnemonic mnemo = new Mnemonic(Wordlist.PortugueseBrazil, WordCount.Twelve);
■ ExtKey pkey = mnemo.DeriveExtKey(senha);
Buscar Saldo
Money SpentCoins = 0;
Money ReceivedCoins = 0;
//Criando address BTC
BitcoinAddress btcAddress = BitcoinAddress.Create(address, Network.TestNet);
//Criando Client QBitNinjaClient
var client = new QBitNinjaClient(Network.TestNet);
Buscar Saldo
//Percorre todas as transações do endereço
client.GetBalance(btcAddress).Result.Operations.ToList().ForEach(x =>
{
if (x.Amount > 0) //Recebido
ReceivedCoins += x.Amount;
else //Enviado
SpentCoins += x.Amount;
});
Buscar Saldo
Console.WriteLine("Recebidos: " + ReceivedCoins.ToUnit(MoneyUnit.BTC));
Console.WriteLine("Enviados: " + SpentCoins.ToUnit(MoneyUnit.BTC));
Console.WriteLine("Total: " + (ReceivedCoins + SpentCoins).ToUnit(MoneyUnit.BTC));
Histórico de Transações
client.GetBalance(btcAddress).Result.Operations.ToList().ForEach(x =>
{
//Detalhes da transação
var tran = client.GetTransaction(x.TransactionId).Result;
Console.WriteLine("----------------------------------------------");
Console.WriteLine("TransactionId" + x.TransactionId.ToString());
Console.WriteLine("Amount" + x.Amount.ToUnit(MoneyUnit.BTC));
Console.WriteLine("BlockId" + x.BlockId.ToString());
Console.WriteLine("Height" + x.Height);
Console.WriteLine("Confirmations" + x.Confirmations);
Console.WriteLine("Fees" + tran.Fees.ToUnit(MoneyUnit.BTC));
});
Criar uma transação
Criar uma transação
■ Chave privada
■ Endereço de destino
■ Quantidade de BTC
■ Taxa de transação
Criar uma transação
var btcSecret = pkey.PrivateKey.GetBitcoinSecret(Network.TestNet);
//Enviando para...
BitcoinAddress btcAddress = BitcoinAddress.Create(addressSend, Network.TestNet);
//Buscando TODAS saídas validas para gastar
var client = new QBitNinjaClient(Network.TestNet);
client.GetBalance(btcSecret.GetAddress(), true).Result.Operations.ToList().ForEach(x =>
{
if (x.Confirmations > 0)
{
x.ReceivedCoins.ForEach(r =>
{
if (r.TxOut.Value > Money.Satoshis(0))
{
lstCoin.Add(new Coin()
{
Outpoint = r.Outpoint,
TxOut = r.TxOut
});
}
});
}
});
//Convertendo as saidas em ICOIN
Coin[] coin = lstCoin.Select((o, i) => new Coin(o.Outpoint, o.TxOut)).ToArray();
//TransactionBuilder montando a transação complexa
TransactionBuilder txBuilder = new TransactionBuilder();
//Politica que define a taxa minima de transacao
txBuilder.StandardTransactionPolicy.MinRelayTxFee = FeeRate.Zero;
//False para permitir transações com poucos satoshis
txBuilder.DustPrevention = false;
Transaction tx = txBuilder
.AddKeys(btcSecret.PrivateKey)
.AddCoins(coin)
.Send(btcAddress.ScriptPubKey, moneySend)
.SetChange(btcSecret.ScriptPubKey)
.SendFees(fee)
.BuildTransaction(true);
BroadcastResponse broadcastResponse = client.Broadcast(tx).Result;
if (!broadcastResponse.Success)
{
Console.WriteLine(string.Format("Code: {0}",
broadcastResponse.Error.ErrorCode));
Console.WriteLine("Mensagem: " + broadcastResponse.Error.Reason);
}
else
{
Console.WriteLine("Sucesso ====> " + tx.GetHash().ToString());
}

Mais conteúdo relacionado

Mais procurados

Apresentando web 1.0
Apresentando web 1.0Apresentando web 1.0
Apresentando web 1.0
Sarah Menezes
 
Perigos da Internet
Perigos da InternetPerigos da Internet
Perigos da Internet
bryner97
 

Mais procurados (20)

Sistema binario
Sistema binarioSistema binario
Sistema binario
 
Apresentação SEO
Apresentação SEOApresentação SEO
Apresentação SEO
 
Sistemas digitais 1
Sistemas digitais 1Sistemas digitais 1
Sistemas digitais 1
 
QUERO Metrô 0.9: Geral
QUERO Metrô 0.9: GeralQUERO Metrô 0.9: Geral
QUERO Metrô 0.9: Geral
 
Código binário
Código binárioCódigo binário
Código binário
 
Engenharia Dirigida por Modelos no Desenvolvimento de Aplicações Ubíquas: Tec...
Engenharia Dirigida por Modelos no Desenvolvimento de Aplicações Ubíquas: Tec...Engenharia Dirigida por Modelos no Desenvolvimento de Aplicações Ubíquas: Tec...
Engenharia Dirigida por Modelos no Desenvolvimento de Aplicações Ubíquas: Tec...
 
Internet das Coisas - Conceitos, tecnologias e aplicações
Internet das Coisas - Conceitos, tecnologias e aplicaçõesInternet das Coisas - Conceitos, tecnologias e aplicações
Internet das Coisas - Conceitos, tecnologias e aplicações
 
Oficina 1: Introdução aos micro:bits
Oficina 1: Introdução aos micro:bitsOficina 1: Introdução aos micro:bits
Oficina 1: Introdução aos micro:bits
 
Introdução a Engenharia de Software.pdf
Introdução a Engenharia de Software.pdfIntrodução a Engenharia de Software.pdf
Introdução a Engenharia de Software.pdf
 
Modelo de von neumann
Modelo de von neumannModelo de von neumann
Modelo de von neumann
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 
Apresentando web 1.0
Apresentando web 1.0Apresentando web 1.0
Apresentando web 1.0
 
Segurança na Internet
Segurança na InternetSegurança na Internet
Segurança na Internet
 
Segurança da Informação - Aula 5 - Criptografia
Segurança da Informação - Aula 5 - CriptografiaSegurança da Informação - Aula 5 - Criptografia
Segurança da Informação - Aula 5 - Criptografia
 
Ongs
OngsOngs
Ongs
 
comparadores sistemas digitais
comparadores sistemas digitaiscomparadores sistemas digitais
comparadores sistemas digitais
 
Crypto 101
Crypto 101Crypto 101
Crypto 101
 
Valores
ValoresValores
Valores
 
Perigos da Internet
Perigos da InternetPerigos da Internet
Perigos da Internet
 
Deep web
Deep webDeep web
Deep web
 

Semelhante a Blockchain e Bitcoin Introdução e Prática com C#

Moedas virtuais Matheus Pavanetti
Moedas virtuais   Matheus PavanettiMoedas virtuais   Matheus Pavanetti
Moedas virtuais Matheus Pavanetti
Matheus Pavanetti
 

Semelhante a Blockchain e Bitcoin Introdução e Prática com C# (20)

Blockchain e o Futuro da Internet
Blockchain e o Futuro da InternetBlockchain e o Futuro da Internet
Blockchain e o Futuro da Internet
 
Bitcoin e blockchain. Afinal, é uma moeda ou um ativo?
Bitcoin e blockchain. Afinal, é uma moeda ou um ativo?Bitcoin e blockchain. Afinal, é uma moeda ou um ativo?
Bitcoin e blockchain. Afinal, é uma moeda ou um ativo?
 
Blockchain e Aplicações Descentralizadas - Fev/2017
Blockchain e Aplicações Descentralizadas - Fev/2017Blockchain e Aplicações Descentralizadas - Fev/2017
Blockchain e Aplicações Descentralizadas - Fev/2017
 
Blockchain: registros eletrônicos distribuídos, imutáveis e seguros
Blockchain: registros eletrônicos distribuídos, imutáveis e segurosBlockchain: registros eletrônicos distribuídos, imutáveis e seguros
Blockchain: registros eletrônicos distribuídos, imutáveis e seguros
 
Blockchain 2.0 - O Bitcoin além do dinheiro digital
Blockchain 2.0 - O Bitcoin além do dinheiro digitalBlockchain 2.0 - O Bitcoin além do dinheiro digital
Blockchain 2.0 - O Bitcoin além do dinheiro digital
 
Tecnologias de blockchain
Tecnologias de blockchainTecnologias de blockchain
Tecnologias de blockchain
 
CURSO SOBRE BLOCKCHAIN, BITCOIN, ETHEREUM E OUTRAS CRIPTOMOEDAS.
CURSO SOBRE BLOCKCHAIN, BITCOIN, ETHEREUM E OUTRAS CRIPTOMOEDAS.CURSO SOBRE BLOCKCHAIN, BITCOIN, ETHEREUM E OUTRAS CRIPTOMOEDAS.
CURSO SOBRE BLOCKCHAIN, BITCOIN, ETHEREUM E OUTRAS CRIPTOMOEDAS.
 
Blockchain e Aplicações Descentralizadas
Blockchain e Aplicações DescentralizadasBlockchain e Aplicações Descentralizadas
Blockchain e Aplicações Descentralizadas
 
Bitcoin - A moeda virtual e sua natureza técnica e normativa
Bitcoin - A moeda virtual e sua natureza técnica e normativaBitcoin - A moeda virtual e sua natureza técnica e normativa
Bitcoin - A moeda virtual e sua natureza técnica e normativa
 
Blockchain: mergulhando nos seus usos #CPBSB2
Blockchain: mergulhando nos seus usos #CPBSB2Blockchain: mergulhando nos seus usos #CPBSB2
Blockchain: mergulhando nos seus usos #CPBSB2
 
Aula de Bitcoin e Blockchain Pereistroka 2017
Aula de Bitcoin e Blockchain Pereistroka 2017Aula de Bitcoin e Blockchain Pereistroka 2017
Aula de Bitcoin e Blockchain Pereistroka 2017
 
Blockchains - Muito Além do Bitcoin
Blockchains - Muito Além do BitcoinBlockchains - Muito Além do Bitcoin
Blockchains - Muito Além do Bitcoin
 
Moedas Digitais - O futuro da economia mundial
Moedas Digitais - O futuro da economia mundialMoedas Digitais - O futuro da economia mundial
Moedas Digitais - O futuro da economia mundial
 
O Bitcoin Fez Sua Estreia Em Las Vegas
O Bitcoin Fez Sua Estreia Em Las Vegas
O Bitcoin Fez Sua Estreia Em Las Vegas
O Bitcoin Fez Sua Estreia Em Las Vegas
 
Blockchain - Além do mercado financeiro
Blockchain - Além do mercado financeiroBlockchain - Além do mercado financeiro
Blockchain - Além do mercado financeiro
 
Moedas virtuais Matheus Pavanetti
Moedas virtuais   Matheus PavanettiMoedas virtuais   Matheus Pavanetti
Moedas virtuais Matheus Pavanetti
 
Tecnologia Blockchain: uma visão Geral (CPqD)
Tecnologia Blockchain: uma visão Geral (CPqD)Tecnologia Blockchain: uma visão Geral (CPqD)
Tecnologia Blockchain: uma visão Geral (CPqD)
 
TDC 2017 - Blockchain Para Nós Desenvolvedores
TDC 2017 - Blockchain Para Nós DesenvolvedoresTDC 2017 - Blockchain Para Nós Desenvolvedores
TDC 2017 - Blockchain Para Nós Desenvolvedores
 
Marketing Multinivel LionsTrading Lançamento Mundial
Marketing Multinivel LionsTrading Lançamento MundialMarketing Multinivel LionsTrading Lançamento Mundial
Marketing Multinivel LionsTrading Lançamento Mundial
 
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan SchnurleHACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
HACKBCBR - RIPPEX - Rafael Pereira e Jan Schnurle
 

Blockchain e Bitcoin Introdução e Prática com C#

  • 1. BLOCKCHAIN & BITCOIN: INTRODUÇÃO E PRÁTICA COM C# Alisson Solitto da Silva
  • 2. Alisson Solitto da Silva, 23 anos Técnico em Informática Técnico em JAVA/WR Bacharel em Ciência da Computação MBA em Gestão de TI Mestrando em Ciência da Computação 6 anos de experiência com o desenvolvimento de software
  • 3. Alisson Solitto da Silva, 23 anos Blog: https://solitto.com.br/ GitHub: https://github.com/alissonsolitto Linkedin: https://www.linkedin.com/in/solitto Lattes: http://lattes.cnpq.br/7754813473705418 Simplechain: https://simplechain.com.br/ IzyMobile: http://izymobile.com/
  • 4. Bitcoin - História ■ White Paper Bitcoin: A Peer-to-Peer Electronic Cash System ■ Ano: 2008 – Crise dos EUA
  • 5. Unidades Bitcoin ■ No caso do Real a moeda é dividida até sua centésima parte que é o centavo. ■ 1 CENTAVO = R$ 0,01 ■ Por ser uma moeda digital o Bitcoin é divisível até a centésima milionésima parte conhecida como “SATOSHI”em homenagem ao seu criador.
  • 6.
  • 9. Blockchain – O que é? ■ A blockchain funciona como um livro-razão da contabilidade, controlando todos os créditos e débitos de várias contas. ■ Principal benefício está na descentralização da sua base de dados, visando a segurança e a confiabilidade de suas transações. ■ Desta forma cria-se uma rede universal, publica e compartilhada.
  • 10.
  • 11. O que é? ■ O blockchain nada mais é do que uma lista encadeada. ■ As informações referentes a transação são armazenadas em um bloco de dados. ■ HASH: SHA-256
  • 12. ■ Cada nó na rede é um computador e qualquer computador pode fazer parte da blockchain, para fazer parte da rede é necessário fazer uma cópia de toda a base de dados da rede, após isso a principal tarefa do nó é validar e repassar os dados das transações. ■ https://www.blockchain.com/pt/btc/unconfirmed-transactions
  • 13. Vantagens ■ Transparência: todas as transações que ocorrem na rede são publicas e disponíveis de forma acessíveis para todos. ■ Descentralização: não há necessidade de um intermediário nas transações, é possível transferir dinheiro entre pessoas de qualquer lugar do mundo sem uma instituição financeiro como nos métodos convencionais. ■ Inalterável: as transações feitas na rede são imutáveis, ou seja, não podem ser alteradas ou deletadas. ■ Baixo custo: Por não haver uma instituição financeira intermediando as transações o custo é muito menor.
  • 14. Blockchain – Como funciona?
  • 17. Proof of Work ■ O maior trabalho computacional da rede é a criação de um hash válido ■ NONCE (N = Número e Once = Uma vez). ■ Bitcoin utiliza o método hashcash => hash deve ser codificado com um número n de zero bits.
  • 18. Exemplo ■ "Olá, mundo! 0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64 ■ "Olá, mundo! 1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8 ■ "Olá, mundo! 2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7 ■ ... ■ "Olá, mundo! 4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965 ■ "Olá, mundo! 4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6 ■ "Olá, mundo! 4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9
  • 19. Consenso ■ Broadcast do novo bloco ■ Validação ■ Aceitação
  • 20. Show me the code! C# ■ Vamos programar uma Wallet de Bitcoin!!
  • 21. Show me the code! C#
  • 22. Show me the code! C#
  • 23. Show me the code! C# Key privateKey = new Key(); PubKey publicKey = privateKey.PubKey; Console.WriteLine(publicKey); Console.WriteLine(publicKey.GetAddress(Network.TestNet));
  • 24. Show me the code! C# ■ https://live.blockcypher.com/btc-testnet ■ https://bitcoinfaucet.uo1.net/
  • 25. Gerando chaves com senha ■ Mnemonic mnemo = new Mnemonic(Wordlist.PortugueseBrazil, WordCount.Twelve); ■ ExtKey pkey = mnemo.DeriveExtKey(senha);
  • 26. Buscar Saldo Money SpentCoins = 0; Money ReceivedCoins = 0; //Criando address BTC BitcoinAddress btcAddress = BitcoinAddress.Create(address, Network.TestNet); //Criando Client QBitNinjaClient var client = new QBitNinjaClient(Network.TestNet);
  • 27. Buscar Saldo //Percorre todas as transações do endereço client.GetBalance(btcAddress).Result.Operations.ToList().ForEach(x => { if (x.Amount > 0) //Recebido ReceivedCoins += x.Amount; else //Enviado SpentCoins += x.Amount; });
  • 28. Buscar Saldo Console.WriteLine("Recebidos: " + ReceivedCoins.ToUnit(MoneyUnit.BTC)); Console.WriteLine("Enviados: " + SpentCoins.ToUnit(MoneyUnit.BTC)); Console.WriteLine("Total: " + (ReceivedCoins + SpentCoins).ToUnit(MoneyUnit.BTC));
  • 29. Histórico de Transações client.GetBalance(btcAddress).Result.Operations.ToList().ForEach(x => { //Detalhes da transação var tran = client.GetTransaction(x.TransactionId).Result; Console.WriteLine("----------------------------------------------"); Console.WriteLine("TransactionId" + x.TransactionId.ToString()); Console.WriteLine("Amount" + x.Amount.ToUnit(MoneyUnit.BTC)); Console.WriteLine("BlockId" + x.BlockId.ToString()); Console.WriteLine("Height" + x.Height); Console.WriteLine("Confirmations" + x.Confirmations); Console.WriteLine("Fees" + tran.Fees.ToUnit(MoneyUnit.BTC)); });
  • 31. Criar uma transação ■ Chave privada ■ Endereço de destino ■ Quantidade de BTC ■ Taxa de transação
  • 32. Criar uma transação var btcSecret = pkey.PrivateKey.GetBitcoinSecret(Network.TestNet); //Enviando para... BitcoinAddress btcAddress = BitcoinAddress.Create(addressSend, Network.TestNet);
  • 33. //Buscando TODAS saídas validas para gastar var client = new QBitNinjaClient(Network.TestNet); client.GetBalance(btcSecret.GetAddress(), true).Result.Operations.ToList().ForEach(x => { if (x.Confirmations > 0) { x.ReceivedCoins.ForEach(r => { if (r.TxOut.Value > Money.Satoshis(0)) { lstCoin.Add(new Coin() { Outpoint = r.Outpoint, TxOut = r.TxOut }); } }); } }); //Convertendo as saidas em ICOIN Coin[] coin = lstCoin.Select((o, i) => new Coin(o.Outpoint, o.TxOut)).ToArray();
  • 34. //TransactionBuilder montando a transação complexa TransactionBuilder txBuilder = new TransactionBuilder(); //Politica que define a taxa minima de transacao txBuilder.StandardTransactionPolicy.MinRelayTxFee = FeeRate.Zero; //False para permitir transações com poucos satoshis txBuilder.DustPrevention = false; Transaction tx = txBuilder .AddKeys(btcSecret.PrivateKey) .AddCoins(coin) .Send(btcAddress.ScriptPubKey, moneySend) .SetChange(btcSecret.ScriptPubKey) .SendFees(fee) .BuildTransaction(true);
  • 35. BroadcastResponse broadcastResponse = client.Broadcast(tx).Result; if (!broadcastResponse.Success) { Console.WriteLine(string.Format("Code: {0}", broadcastResponse.Error.ErrorCode)); Console.WriteLine("Mensagem: " + broadcastResponse.Error.Reason); } else { Console.WriteLine("Sucesso ====> " + tx.GetHash().ToString()); }