├── README.md ├── week1 ├── README.md └── extra │ ├── assets │ └── 1.png │ ├── cli-commands.txt │ └── compiling-core.md └── week2 └── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Dojo Bitcoin 2 | 3 | ## ✅ Semana 1 4 | 5 | **✍️ Aula** 6 | 7 | - **[Vídeo da Aula 1](https://www.youtube.com/watch?v=8NylsXut8-M)** 8 | - Subir nó Bitcoin (testnet) local. 9 | - Interagir com o nó Bitcoin usando RPC e CLI. 10 | - Estrutura de blocos e transações no Bitcoin. 11 | 12 | **🤺 Desafio** 13 | 14 | - Subir nó Bitcoin (testnet) em um serviço de cloud (ex.: AWS, DigitalOcean). 15 | - Criar um Explorer que conecte ao nó Bitcoin, com as seguintes funcionalidades: 16 | - Buscar um bloco pelo número. 17 | - Buscar uma transação pelo hash. 18 | - Exibir o saldo de uma carteira com base no endereço. 19 | - Documentar e compartilhar a trajetória no LinkedIn ou Twitter. 20 | - **Dica 1:** o saldo de uma carteira pode ser calculado somando os UTXOs. 21 | - **Dica 2:** [Como Configurar um Nó Bitcoin Grátis na Oracle Cloud](https://medium.com/@mauricio.doerr/bitcoin-regtest-node-with-always-free-oracle-cloud-compute-instance-e7412dd0f902) 22 | 23 | **⭐️ Engajamento** 24 | 25 | | Link do Post | Equipe | 26 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | 27 | | [Dojo Bitcoin Challenge: Progress on the Block Explorer](https://www.linkedin.com/posts/zackson-pessoa_bitcoin-blockchain-development-activity-7284287815385833473-Je5f?utm_source=share&utm_medium=member_desktop) | Anarcriptos | 28 | | [Dojo Bitcoin Challenge: Block Explorer](https://www.linkedin.com/posts/zackson-pessoa_introdução-ao-dojo-bitcoin-activity-7283916576972546048-SEJ1/?utm_source=share&utm_medium=member_desktop) | Anarcriptos | 29 | | [Bitcoin regtest node with always free Oracle Cloud compute instance](https://medium.com/@mauricio.doerr/bitcoin-regtest-node-with-always-free-oracle-cloud-compute-instance-e7412dd0f902) | Anarcriptos | 30 | | [🚀 FOI DADA A LARGADA! ](https://www.linkedin.com/posts/oguilhermecss_softwaredevelopment-bitcoin-blockexplorer-activity-7283987796556476416-fWJF/?utm_source=share&utm_medium=member_desktop) | Os Quebra Blocos | 31 | | [Começando NX DOJO Bitcoin 101](https://www.linkedin.com/posts/vanessabarros-tech_come%C3%A7ando-nx-dojo-bitcoin-101-metas-do-dojo-activity-7282157167636287488-9U6H?utm_source=share&utm_medium=member_desktop) | Lendas da Razão | 32 | | [Learning about Bitcoin on Nearx DOJO](https://www.linkedin.com/posts/mauriciodoerr_bitcoin-regtest-node-with-always-free-oracle-activity-7283312672475860993--1iH?utm_source=share&utm_medium=member_desktop) | Campeões do Cripto | 33 | | [Challenge 1: Block Explorer](https://www.linkedin.com/feed/update/urn:li:activity:7284354684796964864/) | Sindicado do Blockchain | 34 | | [Cronograma](https://www.linkedin.com/posts/emanoel-oliveira-br_dojo-bitcoin-nearx-activity-7284241022400827392-T7Bi?) | Shi Satoshi | 35 | | [O que já foi realizado](https://www.linkedin.com/posts/emanoel-oliveira-br_bitcoin-blockchain-inovaaexaeto-activity-7284398852554592256-H1qC/) | Shi Satoshi | 36 | | [Desenvolvimento de um Explorer para rede Bitcoin e Lightning Network ! 😲](https://www.linkedin.com/posts/marciomoraisoficial_bitcoin-blockchain-tecnologia-activity-7284595376441974784-AZuq/) | Cruzados do Código | 37 | | [Dojo Bitcoin Challenge: Overcoming Obstacles in Block Explorer Development](https://www.linkedin.com/posts/zackson-pessoa_softwaredevelopment-bitcoin-blockexplorer-activity-7284721160909447169-9OHB/) | Anácriptos | 38 | | [Dojo Bitcoin - Desafio Blockchain Explorer](https://www.linkedin.com/posts/kledenilson_doidosabrdescentralizados-nearx-bitcoin-activity-7285334686816440320-t_fu/) | Doidos Descentralizados | 39 | | [How to Set Up and Run a Bitcoin Node on Regtest Mode Using Linode](https://medium.com/@pavusa/how-to-set-up-and-run-a-bitcoin-node-on-regtest-mode-using-linode-508c355bf1c3) | Shi Satoshi | 40 | 41 | --- 42 | 43 | ## ✅ Semana 2 44 | 45 | **✍️ Aula** 46 | 47 | - [Vídeo da Aula 2](https://www.youtube.com/watch?v=eRlOK_uNXRA) 48 | - Introdução à criptografia (hashes, chaves públicas/privadas, assinaturas digitais). 49 | - Usando SDK Bitcoin com Python para criar e manipular transações. 50 | - Conceitos de UTXO e taxas de transação. 51 | 52 | **🤺 Desafio** 53 | 54 | - Criar uma Wallet CLI/DESKTOP com Python/lang que: 55 | - Gere múltiplos endereços Bitcoin. 56 | - Consulte o saldo de uma carteira usando API do seu nó. 57 | - Envie transações de uma carteira para outras usando seu nó. 58 | - Documentar e compartilhar a trajetória no LinkedIn ou Twitter. 59 | - **Dica 1:** [Biblioteca para fazer Desktop Python (Flet)](https://flet.dev) 60 | - **Dica 2:** [Biblioteca para integrar com Bitcoin Python (BitcoinLib)](https://github.com/1200wd/bitcoinlib) 61 | - **Dica 2:** [Biblioteca para integrar com Bitcoin Python (Bit)](https://ofek.dev/bit/) 62 | 63 | | Link do Post | Equipe | 64 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | 65 | | [Dojo Bicoin - Desafio Wallet CLI](https://www.linkedin.com/posts/kledenilson_walletabrcli-blockchain-doidosabrdescentralizados-activity-7286739091105177603-g89o/) | Doidos Descentralizados | 66 | | [Dojo Bicoin - Desafio Wallet CLI - Atualização](https://www.linkedin.com/posts/kledenilson_walletabrcli-blockchain-doidosabrdescentralizados-activity-7287805329881337856-U76z/) | Doidos Descentralizados | 67 | | [Dojo Bicoin - Desafio Wallet Desktop](https://www.linkedin.com/posts/luanhsl_python-bitcoin-oracle-activity-7288342746015166464-Bn9s?utm_source=share&utm_medium=member_desktop) | Cruzado do Código | 68 | 69 | | Artigos | Aluno | 70 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | 71 | | [How To Integrate Vue Js With Your Bitcoin Api Server](https://medium.com/@pavusa/how-to-integrate-vue-js-with-your-bitcoin-api-server-9a30118b16ab) | Rob DC | 72 | | [How To Create Your Own Bitcoin Api Server Using Flask](https://medium.com/@pavusa/how-to-create-your-own-bitcoin-api-server-using-flask-7023d2f55ae4) | Rob DC | 73 | 74 | --- 75 | 76 | ## ✅ Semana 3 77 | 78 | **✍️ Aula** 79 | 80 | - [Vídeo da Aula 3](https://youtu.be/-iinbu4NY3k) 81 | 82 | - Introdução ao Bitcoin Script: como criar scripts personalizados. 83 | - Gerando transações customizadas com SDK Bitcoin. 84 | 85 | **🤺 Desafio** 86 | 87 | - Criar uma plataforma de registro de direitos autorais que: 88 | - Qualquer user pode subir um documento. 89 | - Usuário precisa pagar para registrar documento. 90 | - Validar pagamento. 91 | - Consulte e valide o registro no blockchain. 92 | - Interface simples para upload e consulta. 93 | - Documentar e compartilhar a trajetória no LinkedIn ou Twitter. 94 | - **Dica 1:** Diagrama de Sequencia para usar em https://sequencediagram.org 95 | 96 | 97 | ``` 98 | title Registro de Direitos Autorais com Bitcoin 99 | 100 | participant "Backend" as Backend 101 | participant "Bitcoin (Testnet)" as Blockchain 102 | participant "User" as User 103 | participant "Frontend" as Frontend 104 | 105 | entryspacing 1.0 106 | User->>Frontend: Upload do Documento 107 | Frontend->>Frontend: Geração do Hash (SHA-256) 108 | 109 | # PARALLEL 110 | Frontend->>Backend: Novo docs adicionado na Plataforma [enviar hash e docs] 111 | Backend->>Backend: Cria nova carteira para receber pagamento 112 | Backend->>Frontend: nova carteira aqui: Addr 113 | Backend->Backend: Aguarda Confirmação de Pagamento 114 | Frontend->>User: Exibe Status do docs [Pagamento Pendente] 115 | # PARALLEL 116 | 117 | User->>Blockchain: Realiza Pagamento 118 | Blockchain->>Backend: Evento de pagamento 119 | Backend->Backend: Validar valor e carteira de pagamento 120 | 121 | # PARALLEL 122 | Backend->>Frontend: Confirmação do Pagamento 123 | Frontend->>Frontend: Atualiza Status: "Mineração Pendente" 124 | Backend->>Blockchain: Transmite Transação com OP_RETURN 125 | Blockchain->>Backend: Confirmação de Mineração 126 | Backend->>Frontend: Atualiza Status: "Minerado Confimada" 127 | # PARALLEL 128 | 129 | Frontend->>Frontend: Atualiza Status: "Mineração Confimada" 130 | Frontend->>User: Link para Documento na Blockchain 131 | ``` 132 | 133 | 134 | **⭐️ Engajamento** 135 | 136 | | Link do Post | Equipe | 137 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | 138 | | [🚀Bora desenvolver nossa Plataforma de Registro de Direitos Autorais](https://www.linkedin.com/posts/kledenilson_dojoabrbitcoin-blockchaini-blockabrexplorer-activity-7288174718132609026-qoiq/) | Doidos Descentralizados | 139 | | [⚠️Iniciamos o projeto da Plataforma de Registro Direitos Autorais](https://www.linkedin.com/posts/kledenilson_dojoabrbitcoin-blockchaini-bitcoin-activity-7288586026002898945-KWAZ/) | Doidos Descentralizados | 140 | | [🆕 Atualizações Semana 3️⃣ do hashtag#Dojo_Bitcoin da Nearx! 🌐 ](https://www.linkedin.com/posts/kledenilson_dojoabrbitcoin-dojoabrbitcoin-blockchainabrexplorer-activity-7290001007801999361-47gO/) | Doidos Descentralizados | 141 | | [Plataforma de Direitos Autorais na Rede do Bitcoin!!](https://www.linkedin.com/posts/marciomoraisoficial_cruzadadocodigo-nearx-nearx-activity-7290482352135299072-RRnL/?utm_source=share&utm_medium=member_desktop) | Cruzada do Código | 142 | | [Galera, a semana tá insanaaa!!!! Nosso Grupo @CruzadadoCodigo, tá ON!!!](https://www.linkedin.com/posts/marciomoraisoficial_nearx-app-app-activity-7289972327520301056-PElj/?utm_source=share&utm_medium=member_desktop) | Cruzada do Código | 143 | 144 | --- 145 | 146 | ## ⏰ Semana 4 147 | 148 | **✍️ Aula** 149 | 150 | - Conceitos da Lightning Network: canais de pagamento, BREEZ 151 | - Configuração de um nó Lightning local. 152 | - Interação com APIs Lightning (LND REST/gRPC). 153 | 154 | **🤺 Desafio** 155 | 156 | - Criar um chat de texto que: 157 | - Usuário envia mensagens para outros usuários. 158 | - É possivel enviar pagamentos dentro do chat. 159 | - Mensagens são exibidas no frontend. 160 | - Backend gerencia pagamentos e confirmações. 161 | - Documentar e compartilhar a trajetória no LinkedIn ou Twitter. 162 | 163 | --- 164 | 165 | ## ⏰ Semana 5 166 | 167 | **✍️ Aula** 168 | 169 | - Fundamentos do Taproot 170 | - Criando e assinando transações Taproot. 171 | 172 | **🤺 Desafio** 173 | 174 | - Airdrop de NFTs: 175 | - Criar NFTs e subir para IPFS (image + json metadata) 176 | - Implementar um contrato taproot para os NFTs 177 | - Criar uma plataforma para os usuários visualizarem seus Assets. 178 | - Documentar e compartilhar a trajetória no LinkedIn ou Twitter. 179 | -------------------------------------------------------------------------------- /week1/README.md: -------------------------------------------------------------------------------- 1 | # Bem-Vindos ao Dojo Bitcoin da Nearx! 2 | 3 | #### Olá, meu nome é Luciana Ferreira 4 | #### Atuo com tecnologias financeiras desde 2021 5 | 6 | - Ciências Biológicas pela UFSCAR de São Carlos 7 | - Desenvolvimento Humano pelo City College of San Francisco na California 8 | - MBA em Gestão Educacional pela Universidade Anhembi-Morumbi 9 | - Introdução às Moedas Digitais pela Universidade de Nicosia 10 | - Formações em desenvolvimento Bitcoin pela Chaincode Labs, Bitshala e Base58 11 | 12 | Clientes no mercado corporativo 13 | 14 | - Banco Itaú 15 | - Banco Bradesco 16 | - Banco BMG 17 | - HDI Seguros 18 | - Recovery 19 | - ... até que descobri a magia do Bitcoin! 20 | 21 | Atuação no mundo do desenvolvimento Bitcoin open-source 22 | 23 | - Tradutora voluntária do livro Mastering the Lightning Network da O'Reilly 24 | - PM voluntária no projeto WalletScrutiny 25 | - Diretora de Programas da Vinteum—instituição que treina devs e oferece bolsas no Brasil 26 | - Organizadora do SatsHack 2023 27 | - Organizadora Bitdevs Ribeirão Preto/SP e São Carlos/SP desde Dezembro de 2023 28 | - Fundadora de Scalar School of Bitcoin Developers com seed funding de 25 mil dólares pela Human Rights Foundation (scalarschool.org) 29 | - Escritora do livro Tecnologia Bitcoin: Fundamentos e Trilhas de Carreira para Devs 30 | - Coordeno uma comunidade no Discord com mais de 100 devs 31 | - Adepta à soberania financeira, como realizar pagamentos pela rede lightning usando meu próprio node doméstico 32 | 33 | #### Por que o Bitcoin é outro planeta e você não pode ficar de fora dele 34 | 35 | - É a layer zero de todo o mercado de cripto. Reserva de valor de alcance global 36 | - Primeira implementação onde surgiu a tecnologia blockchain como a conhecemos hoje 37 | - Origem única, por um dev anônimo, sem pé-mineração, sem fundadores recebendo tokens extras 38 | - Propósito: dev estava tentando resolver o problema do dinheiro para a humanidade 39 | - Sistema de dinheiro eletrônico peer-to-peer 40 | - Prova-de-trabalho como garantia de segurança 41 | - Script simples e limitado, gerando um dinheiro sólido, global, confiável e resistente 42 | - Estável, com mudanças de protocolo extremamente cautelosas 43 | - Permaware: o software vai permanecer mesmo quando não estivermos mais aqui 44 | 45 | #### Filosofia e Comunidade 46 | 47 | - Maximalismo: forma superior de dinheiro, senso de justiça, segurança, descentralização e propósito 48 | - Soberania individual: controle de suas chaves e transações sem intermediários 49 | - Inclusão Social: liberdade financeira para desbancarizados e pessoas em países de moeda fraca 50 | - Privacidade e desenvolvimento de PETs (Privacy-Enhancing Technologies) 51 | - Comunidade construiu o protocolo incensurável Nostr, onde conseguem mandar satoshis em vez de likes 52 | - Shift de redes sociais com algoritmos de caixa preta focados em venda de dados para redes sociais onde você escolhe seu algoritmo 53 | 54 | #### Oportunidades Lucrativas e com Senso de Propósito 55 | 56 | - É o ativo mais performante do planeta 57 | - Equilíbrio entre missão e retorno financeiro 58 | - Média salarial dev Bitcoin no exterior USD 80k-200k 59 | - Dev Open Source USD 100k 60 | - Dois mercados: open source e privado 61 | 62 | #### Como se Envolver com o Open Source 63 | 64 | - Procure algum projeto que lhe interessa e entre no Discord 65 | - Observe a dinâmica da comunidade. A anonimidade é muito valorizada 66 | - Comece a colaborar e entregar valor para construir sua reputação 67 | - Naturalmente você encontrará os caminhos dos empregos e verbas 68 | - Twitter e Nostr. Tudo acontece por lá 69 | - Trilha Educacional: https://bitcoindevs.xyz 70 | - Crie um Bitdevs na sua cidade se não tem ainda 71 | - Frequente Bitdevs e ajude a organizar se já existir 72 | - Mailing List: https://groups.google.com/g/bitcoindev 73 | - PR Review: https://bitcoincore.reviews/ 74 | - Bitcoin Stack Exchange: https://bitcoin.stackexchange.com 75 | - Bitcoin OpTech: https://bitcoinops.org/ 76 | - Você pode trabalhar como dev ou com educação e comunidades 77 | - C++, Rust, Go e Python 78 | 79 | #### Pontos de Atenção 80 | 81 | - Cuidado com influenciadores que vendem sonhos e ideologias questionáveis em torno do bitcoin 82 | - Cuidado com comunidades extremistas e câmaras de eco 83 | - Cuidado com falsas promessas 84 | - Se parece bom demais para ser verdade, é porque é 85 | - Mais tecnologia, menos ideologia 86 | - Quanto aos projetos sérios, leiam as regras das comunidades e sigam os códigos de conduta 87 | 88 | #### Alguns Projetos Abertos (Open Source) 89 | 90 | - Bitcoin Core 91 | - Stratum V2 92 | - Bitcoin Dev Kit 93 | - Lightning Dev Kit 94 | - Polar 95 | - BTC Pay Server 96 | - LND 97 | - Core Lightning 98 | - Cashu (PET) 99 | - Fedimint (PET) 100 | - Eclair 101 | - Libsecp256k1 102 | - Bitcoin Rust Library 103 | - Taproot Assets 104 | - WalletScrutiny 105 | 106 | #### Agências de Fomento para o Desenvolvimento Open Source 107 | 108 | - Human Rights Foundation 109 | - Vinteum (brasileira) 110 | - Brink 111 | - OpenSats 112 | - Okcoin 113 | - Spiral 114 | - Blockstream 115 | - Kraken 116 | - Coinbase 117 | - Summer of Bitcoin 118 | 119 | -------------------------------------------------------------------------------- /week1/extra/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nrxschool/dojo-bitcoin/d8ae4e481ddcaaeaf99fb22549c6c18343e2ea78/week1/extra/assets/1.png -------------------------------------------------------------------------------- /week1/extra/cli-commands.txt: -------------------------------------------------------------------------------- 1 | 2 | bitcoin-cli help 3 | bitcoin-cli help getblockchaininfo 4 | bitcoin-cli getblockchaininfo 5 | bitcoin-cli help getnetworkinfo (information about p2p network and services that your node supports) 6 | bitcoin-cli getnetworkinfo 7 | bitcoin-cli getwalletinfo 8 | now off to some blockchain exploration commands 9 | bitcoin-cli getblockcount 10 | bitcoin-cli getblockhash (block height, for genesis block is zero) 11 | bitcoin-cli getblock (hash) (verbosity 2) //da pra usar com ou sem verbosity. e no hex to ascii dessa tx de coinbase desse bloco genesis 0 tem a frase do satoshi 12 | bitcoin-cli createwallet salario 13 | bitcoin-cli listwallets 14 | bitcoin-cli help getnewaddress (mostra os tipos: legacy, p2sh-segwit, bech32, bech32m) 15 | bitcoin-cli unloadwallet "" //unloads default wallet 16 | bitcoin-cli loadwallet "" //loads the default wallet back again 17 | bitcoin-cli --rpcwallet=luciana getnewaddress 18 | bitcoin-cli getnewaddress "" legacy 19 | bitcoin-cli getnewaddress "" p2sh-segwit 20 | bitcoin-cli getnewaddress "" bech32m 21 | bitcoin-cli loadwallet "" 22 | bitcoin-cli unloadwallet luciana 23 | bitcoin-cli getwalletinfo 24 | bitcoin-cli getnewaddress 25 | bitcoin-cli generatetoaddtess 26 | bitcoin-cli help sendtoaddress 27 | bitcoin-cli sendtoaddress (address) (numero de bitcoins) 28 | bitcoin-cli gettransaction (txid) 29 | e o hex eh todo o txdata 30 | bitcoin-cli decoderawtransaction (hex) 31 | //mostra value, vin, vout 32 | bitcoin-cli unloadwallet "" 33 | bitcoin-cli loadwallet luciana 34 | bitcoin-cli getwalletinfo 35 | bitcoin-cli getnewaddress 36 | bitcoin-cli unloadwallet 37 | bitcoin-cli loadwallet "" 38 | bitcoin-cli -rpcwallet="" sendtoaddress (address) (quantidade btc) 39 | bitcoin-cli -rpcwallet="" getnewaddress 40 | bitcoin-cli generatetoaddress (number of blocks) (address) //o output sao block ids 41 | bitcoin-cli getbalance 42 | bitcoin-cli -rpcwallet=luciana getwalletinfo 43 | bitcoin-cli listwallets 44 | 45 | 46 | -------------------------------------------------------------------------------- /week1/extra/compiling-core.md: -------------------------------------------------------------------------------- 1 | # Compilando o Bitcoin Core do código-fonte e iniciando uma rede regtest 2 | 3 | Leitura Recomendada: Mastering Bitcoin 3, Capítulos 1, 2 e 3 4 | 5 | Dica geral: Usem Linux! 6 | Dica importante: Usem tmux/vim! 7 | 8 | https://github.com/bitcoinbook/bitcoinbook 9 | 10 | ## Observação 11 | 12 | Você pode optar pela instalação do sistema Polar. A instalação de Docker/Docker Compose é pré-requisito, mas ele facilita 13 | muito esse setup inicial e permite a simulação de redes com topologia complexa. 14 | 15 | https://lightningpolar.com/ 16 | 17 | #### Bitcoin Core: A Implementação de Referência 18 | 19 | Bitcoin Core é a implementação de referência do protocolo Bitcoin. Ele é derivado da implementação original escrita por Satoshi Nakamoto e é mantido por uma comunidade aberta de desenvolvedores. O Bitcoin Core inclui várias funcionalidades essenciais para a rede Bitcoin, tais como: 20 | 21 | - Valida todas as transações e blocos na blockchain, garantindo que estejam em conformidade com as regras de consenso do Bitcoin. 22 | 23 | - Ao rodar o Bitcoin Core, você está operando um nó completo, que ajuda a fortalecer a rede ao transmitir, verificar e armazenar transações e blocos. 24 | 25 | - Inclui uma carteira que permite aos usuários armazenar, enviar e receber bitcoins. A carteira oferece um alto nível de segurança e privacidade. 26 | 27 | - Segue estritamente o protocolo Bitcoin, o que ajuda a garantir a compatibilidade e a segurança da rede. 28 | Inclui suporte a Segregated Witness (SegWit), uma atualização que aumenta a capacidade de transações e reduz taxas. 29 | 30 | #### Funcionalidades Avançadas 31 | 32 | O Bitcoin Core oferece várias funcionalidades avançadas para desenvolvedores e usuários experientes, como a capacidade de criar e assinar transações, monitorar a rede, e acessar dados detalhados de blocos e transações. 33 | 34 | É amplamente considerado como a implementação de padrão do Bitcoin, e é usado por muitos usuários, empresas e desenvolvedores para interagir com a rede Bitcoin de forma segura e confiável. 35 | 36 | https://github.com/bitcoin/bitcoin 37 | 38 | Arquitetura do Bitcoin Core 39 | 40 | ![Bitcoin Core Architecture](assets/1.png) 41 | 42 | ### Usuários Windows 43 | 44 | Utilizando Linux Ubuntu no Computador Windows 45 | 46 | No Terminal 47 | 48 | ```bash 49 | wsl --install 50 | ``` 51 | 52 | Instalar Ubuntu no wsl: 53 | 54 | ```bash 55 | wsl --install -d Ubuntu 56 | ``` 57 | 58 | Executar o Ubuntu a partir do Prompt de Comando ou PowerShell: 59 | 60 | ```bash 61 | wsl 62 | ``` 63 | 64 | ### Preparando a máquina com as dependências 65 | 66 | Pesquise para que servem essas dependências no contexto do core 67 | 68 | Linux: 69 | 70 | ```bash 71 | sudo apt update 72 | sudo apt install cmake build-essential pkg-config git python3 libssl-dev libboost-all-dev libevent-dev libdb++-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqt6-dev 73 | ``` 74 | 75 | MacOS: 76 | 77 | ```bash 78 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 79 | xcode-select --install 80 | brew update 81 | brew install cmake git python@3 openssl boost libevent berkeley-db@4 miniupnpc libnatpmp zeromq qt@6 82 | ``` 83 | 84 | Clone o Bitcoin Core 85 | 86 | ```bash 87 | git clone https://github.com/bitcoin/bitcoin.git # ou SSH: git clone git@github.com:bitcoin/bitcoin.git 88 | ``` 89 | Acesse a pasta onde está o código. 90 | 91 | ```bash 92 | cd bitcoin 93 | ``` 94 | 95 | Escolhendo uma release (versão lançada) 96 | Por padrão, a cópia local será sincronizada com o código mais recente, que pode ser uma versão instável ou beta do Bitcoin. Antes de compilar o código, selecione uma versão específica verificando uma tag de lançamento. Isso sincronizará a cópia local com um snapshot específico do repositório de código identificado por uma tag de palavra-chave. Tags são usadas pelos desenvolvedores para marcar lançamentos específicos do código por número de versão. Primeiro, para encontrar as tags disponíveis, usamos o comando git tag. Você pode voltar para a linha de comando pressionando a tecla q. 97 | 98 | ```bash 99 | git tag 100 | ``` 101 | 102 | Para sair do modo de visualização de tags 103 | 104 | ```bash 105 | q 106 | ``` 107 | A lista de tags mostra todas as versões lançadas do Bitcoin. Por convenção, os candidatos a lançamento, que são destinados a testes, têm o sufixo "rc" (release candidate). Lançamentos estáveis que podem ser executados em sistemas de produção não têm sufixo. 108 | 109 | ```bash 110 | git checkout v28.0 111 | ``` 112 | Com o comando git status você confirma que tem a versão desejada. 113 | 114 | ```bash 115 | git status 116 | ``` 117 | Hora de configurar e compilar o core 118 | 119 | ```bash 120 | ./autogen.sh 121 | ``` 122 | 123 | ```bash 124 | ./configure --without-gui --without-miniupnpc --disable-wallet 125 | ``` 126 | 127 | ```bash 128 | make 129 | ``` 130 | 131 | (Observação: existe uma nova opção de fazer o build com CMAKE que será lançado na v29, utilizando os comandos `cmake -B build` e `cmake --build build`) 132 | 133 | ### Iniciando uma rede local regtest, ou rede de teste de regressão 134 | 135 | A regtest (regression test mode) é um modo que permite você rodar o Bitcoin Core em uma rede de teste completamente local, sem precisar sincronizar com a blockchain principal e sem se conectar a outros peers na Internet. Isso é muito útil para desenvolvimento e testes, pois você pode criar e minerar blocos rapidamente, sem taxas, sem precisar de terceiros. 136 | 137 | O que é um teste de regressão? 138 | Um teste de regressão é uma prática utilizada em desenvolvimento de software para verificar se alterações ou melhorias no código não reintroduziram erros que haviam sido corrigidos anteriormente ou não quebraram funcionalidades existentes. 139 | 140 | A configuração abaixo: 141 | Habilita o modo regtest (regtest=1) 142 | Habilita o servidor RPC (server=1) 143 | Define as credenciais básicas do RPC 144 | Habilita o índice de transações para consultas completas da blockchain (txindex=1) 145 | Define uma taxa padrão para testes (fallbackfee=0.0001) 146 | Permite conexões RPC locais 147 | Executa como um daemon em segundo plano 148 | 149 | ```bash 150 | mkdir -p ~/Library/Application\ Support/Bitcoin/ 151 | cat > ~/Library/Application\ Support/Bitcoin/bitcoin.conf << EOL 152 | regtest=1 153 | server=1 154 | rpcuser=test 155 | rpcpassword=test123 156 | txindex=1 157 | fallbackfee=0.0001 158 | rpcallowip=127.0.0.1 159 | daemon=1 160 | ``` 161 | 162 | Verifique que o arquivo foi criado corretamente: 163 | 164 | ```bash 165 | cat ~/Library/Application\ Support/Bitcoin/bitcoin.conf 166 | ``` 167 | 168 | Inicie o Bitcoin no modo regtest 169 | 170 | ```bash 171 | ./src/bitcoind -regtest 172 | ``` 173 | 174 | Pronto! Agora você pode começar a chamar comandos RPC na sua blockchain local! 175 | 176 | Dica: para evitar digitar o prefixo `./src/bitcoind -regtest` com cada chamada de comando bitcoin-cli, você pode 177 | adicionar o bitcoind ao seu PATH. Primeiro descubra o caminho da sua maquina para a pasta src, digitando pwd dentro do repositório `bitcoin` 178 | 179 | ```bash 180 | export PATH=$PATH:/Users/cypherhead/nearx/bitcoin/src # use o caminho da sua máquina. descubra qual é entrando em bitcoin/src e digitando `pwd` 181 | 182 | ``` 183 | Em seguida abra o vim 184 | 185 | ```bash 186 | vim ~/.bashrc # para ubuntu ou 187 | vim ~/.zshrc # Para macOS (zsh) 188 | 189 | ``` 190 | Aperte I de INSERT, adicione essa linha 191 | 192 | ```bash 193 | export PATH=$PATH:/Users/cypherhead/nearx/bitcoin/src # use o caminho personalizado para sua máquina 194 | ``` 195 | 196 | Aperte Esc, em sequida 197 | 198 | ```bash 199 | :wq! # escreve (w de write, grava) e sai do arquivo (q de quit) 200 | ``` 201 | 202 | Rode a configuração 203 | 204 | ```bash 205 | source ~/.bashrc # para ubuntu 206 | source ~/.zshrc # para macos 207 | ``` 208 | 209 | Agora você deve conseguir chamar comandos RPC sem adicionar `./src/bitcoind -regtest` antes do comando principal! 210 | Você pode encontrar uma lista de comandos aqui: https://developer.bitcoin.org/reference/rpc/ 211 | 212 | Inicializando o nó em regtest 213 | 214 | ```bash 215 | bitcoind -regtest -daemon 216 | ``` 217 | 218 | Criando uma carteira 219 | ```bash 220 | bitcoin-cli -regtest createwallet "testwallet" 221 | ``` 222 | 223 | Minerando blocos 224 | ```bash 225 | bitcoin-cli -regtest generatetoaddress 101 $(bitcoin-cli -regtest getnewaddress) 226 | ``` 227 | 228 | Visualizando informações do bloco 229 | ```bash 230 | bitcoin-cli -regtest getblockchaininfo 231 | ``` 232 | 233 | # Em 2025—Docker 234 | 235 | Editor de código moderno: https://www.cursor.com/ 236 | 237 | Rodar instância do core no docker. Sandbox environment: https://labs.play-with-docker.com/ 238 | 239 | ```bash 240 | docker pull bitcoin/bitcoin 241 | ``` 242 | Inicie o container com as configurações de regtest 243 | 244 | ```bash 245 | docker run -d \ 246 | --name bitcoin-regtest \ 247 | -v $(pwd)/bitcoin-data:/root/.bitcoin \ 248 | -p 18443:18443 \ 249 | -p 18444:18444 \ 250 | bitcoin/bitcoin \ 251 | bitcoind \ 252 | -regtest \ 253 | -server=1 \ 254 | -rpcallowip=0.0.0.0/0 \ 255 | -rpcbind=0.0.0.0 \ 256 | -rpcuser=user \ 257 | -rpcpassword=pass \ 258 | -txindex=1 \ 259 | -printtoconsole 260 | ``` 261 | Teste de comando rpc 262 | 263 | ```bash 264 | curl --user user:pass --data-binary '{"jsonrpc":"1.0","id":"curltest","method":"getblockchaininfo","params":[]}' -H 'content-type:text/plain;' http://127.0.0.1:18443/ 265 | ``` 266 | 267 | # Desafio Dojo Bitcoin 268 | 269 | Agora vem o desafio para a próxima semana: a criação de um explorador de blocos! 270 | 271 | Agora que você consegue se comunicar com o seu nó regtest, implemente os seguintes endpoints no backend: 272 | 273 | - blocos por numero 274 | - transacao por hash 275 | - saldo de carteira por endereço 276 | - (podem colocar mais funcionalidades-opcional) 277 | 278 | Grave um vídeo tutorial de uma pessoa do grupo mostrando o software em funcionamento, e escrevam um blog post 279 | para postar no medium junto com o vídeo e o código-fonte. 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | -------------------------------------------------------------------------------- /week2/README.md: -------------------------------------------------------------------------------- 1 | # Bitcoin SDK 2 | 3 | # Avisos da Paróquia 4 | 5 | - Aviso 1: Prof 6 | - Aviso 2: Premios 7 | - Aviso 3: Dojo 8 | 9 | # O que é um SDK 10 | 11 | - Python, Rust, JavaScript, Golang, Java 12 | 13 | # O que são Wallets 14 | 15 | 1. Seed 16 | 2. Chave Privada 17 | 3. Chave Pública 18 | 4. Address 19 | 20 | # O que são Transações 21 | 22 | - Função de Transição de Estate (STF) 23 | - Tipo de tx (UTXO vs Account-Based Model) 24 | - Ciclo de vida de uma tx 25 | 26 | 1. Criar tx 27 | 2. Assinar tx 28 | 3. enviar tx 29 | 4. validar tx 30 | 5. mempol tx 31 | 6. minerada tx 32 | 7. assentar tx (6 tx) 10min * 6 = 1h 33 | 34 | - Anatomia de uma tx 35 | 36 | * EVM: from, to, value, sign 37 | * UTXO: INPUT, OUTPUT 38 | 39 | 40 | 41 | --- 42 | 43 | -> 10BTC UTXO1 44 | -> 1BTC UTXO2 45 | -> 4BTC UTXO3 46 | == 15BTC 47 | 48 | -> UTXO1 10BTC 49 | -> UTXO3 4BTC 50 | <- 13BTC UTX04 (to) 51 | <- 0.5BTC UTX05 (from) 52 | == 14BTC 53 | 54 | -> 1BTC UTXO2 55 | -> 1BTC UTXO5 56 | == 2BTC --------------------------------------------------------------------------------