Meetup #09 - Programação em Bitcoin - Lohann Ferreira

ERC55 Meetups · 23 May 2024 · 1:53:52

Lohann Ferreira explains why Bitcoin uses an unspent transaction output model instead of Ethereum-style accounts, and how its stack-based scripts lock and release funds. On account-based chains a block producer can reorder transactions to change outcomes, and the ERC-20 approve pattern is exposed to an allowance race, whereas Bitcoin has no revert and a producer cannot alter results. The session steps through locking scripts, the scripts that spend them and signature checks, then shows how payment channels with time locks allow thousands of off-chain updates settled by two on-chain transactions.

Speakers

Topics

From ERC55 Meetups, hosted by ERC55.

Transcript

Intro

Lan antes de começar eu queria que você falasse um pouquinho assim da tua trajetória Dev como é que você chegou até aqui e depois já já meter bala no no workshop beleza palavra toda perfeito Muito obrigado thgo e então para quem não me conhece sou loran eu trabalho com blockchain Full Time já há mais de 7 anos a forma como eu entrei na blockchain né eu fiz faculdade de sistemas de informação e me interessei muito pela área de na época né de Inteligência Artificial minerção de dados Isso foi em 2012 e eh Na época eu trabalhei bastante com a parte científica tá não existia eh Deep

learning não existia os modelos já que a gente tem hoje e eu sempre me interessei muito pela parte matemática eh por trás disso e na época eu apresentei um trabalho né era um trabalho em grupo a gente tinha que trazer um tema técnico para falar né sobre e o meu grupo escolheu Bitcoin isso era 2003 2014 então Vocês conseguem reparar o meu susto né que na época acho que o Bitcoin tava valendo acho que 300 ou 200 um Bitcoin Na época eu apresentar aquele assunto né pro pra turma explicando né como que funcionava era o conhecimento que eu tinha era mais alto nível né foi uma pesquisa rápida que eu tinha feito

na internet e Poucos Anos depois né o valor dobrar e dobrar e dobrar e dobrar chegou um ponto né eu já estava trabalhando na área eu trabalhava PR empresa chamada F found eu era Dev full trabalhava com react JS e backend em node JS PHP e outras tecnologias CP também e acabou que eu comei muito né pela eu vi né o valor subindo subindo subindo eu falei caramba eu sou Dev Eu trabalho com isso eu sou a pessoa que deveria entender como isso funciona

né então eu fui lá e eu peguei o livro do Andreas antop polos né o Master em Bitcoin que estava disponível gratuitamente no github até hoje é assim e eu comecei a ler o livro Comecei a ler Comecei a ler e mim foi um né eu é porque até então né que nem qualquer pessoa né que ouve falar de criptomoedas né ouve falar de golpe Ouve na época era o Bitcoin era famoso por quê Por causa do sick ro né era para ou seja para sempre coisas ilícitas né ligadas àquilo então isso já gerava né uma impressão ruim né e acabou que depois que eu entendi Como a tecnologia

funcionava né com background que eu já tinha de antes e eu percebi que era realmente uma coisa eh disruptiva né a maneira como ele era feito não era tinha muito embasamento né tanto da parte de criptografia quanto de tecnologia teoria dos jogos e acabou então que eu comecei a maneira que eu estudo né uma tecnologia nova quando eu e estou estudando né seja uma biblioteca seja uma linguagem de programação eu crio projetos né com aquilo acho que a melhor maneira de aprender algo né É você ir lá e executar e eh eu comecei a criar um sisteminha de pagamentos o nome da aplicação era zenum e funcionaria basicamente como um PayPal de criptomoedas

eh O que aconteceu foi que do nada né na na no mesmo período que eu tava estudando que eu tava aqui nessa aplicação com alguns amigos eh teve um bom na parte de criptomoedas no Vale do Silício eu já trabalhava na época para uma empresa eh estadunidense e eh acabou que o pessoal começou a alocar e recursos para construir aplicações em blockchain e aconteceu que da da empresa eu era a única pessoa que tinha experiência prática e com o Bitcoin e com etherum né Na parte de recebimento de pagamentos e isso foi evoluindo então eu acabei

virando Lead lá do projeto na parte de blockchain especificamente então agora além de trabalhar como Hobby como criptomoeda eu comecei a trabalhar como Full Time na minha empresa também né então foi mais ou menos assim que aconteceu o o Switch né eu trabalhei no projeto pessoal com criptomoeda aconteceu que era a única pessoa com experiência e a empresa começou a pegar né era uma software House pegava projetos externos e eh foi em suma foi assim né comecei no mundo das criptos e por sorte eu já de cara comecei a pegar alguns projetos grandes para trabalhar em criptomoeda e não sei já ouviram falar da forte io foro era é uma plataforma de criptomoeda de pagamentos né em blockchain Centralizado voltada

para jogos eh uma um dos clientes deles por exemplo era o Pokémon go né A ideia era transformar eh em nfts né a parte de Pokémons né tokenizar né os Pokémons era era uma blockchain que a gente fala privada né Eh uma blockchain que rodava local não era etherum porque de custos e por questão de compliance mas aquilo foi ali que começou né e de lá para cá eu trabalhei em vários projetos eu saí né forte comecei a trabalhar na Engine para quem não conhece a Engine é quem o o vtec é quem

propôs o padrão rc15 criador Pat 55 e também focado em jogos né então quando você trab trabalha com jogos né você eu já de cara por que que eu tava por que que a gente utilizava Private chain porque já de cara um jogo um único jogo já precisava de uma escalabilidade que a blockchain já na época não conseguia prover Então antes mesmo de começar o projeto a gente já enfrentava problema de escalabilidade né não era inviável você pegar e mentar na mainnet eh nfts do Pokémon go né então soluções alternativas ao ponto que mesmo uma blockchain privada não era

suficiente precisava de uma blockchain por jogo A gente estamos falando de milhões de transações por segundo numa época que não existia eh nenhuma não existia shards na época da blockchain 1.0 não existia nenhuma das soluções que existem hoje então Eh enfim né para não me prolongar muito nessa introdução foi eh saí da Engine Entrei agora na analog trabalhei bastante com substrate hoje em dia e o meu Core é desenvolver por causa dessa questão né Eu tive que conhecer várias brits diferentes na faculdade eu tive um background na parte de Ciência da Computação em ler artigos científicos implementar aquilo então e

muita coisa da blockchain que a gente tem hoje em dia de inovação não tem um conteúdo fácil não consigo te dar um tutorial como que você constrói uma Bridge não você vai ter que olhar artigos científicos para fazer isso ou olhar código né E são as duas as únicas formas que você tem de encontrar a maneira certa de fazer isso então Eh eu acabei adquirindo esse por questão de construir Bridge né acabei adquirindo esse background com várias tecnologias diferentes não só Bitcoin Bitcoin litecoin eh Cardano eh substrate poc dot eh Solana Então são vários protocolos que eu tive que lidar e entender o Core dele para conseguir né criar essas soluções acho que é um Pou pouco disso eh Então acho que vamos começar com

conteúdo né o principal então eu vou compartilhar aqui a minha tela porque é um conteúdo um pouquinho talvez mais denso Tá mas o enfoque aqui vai ser programação no Bitcoin ã vocês estão conseguindo ver a minha tela ok Aqui tá tá de boa perfeito eh eu não vou colocar em tela cheia aqui senão ele vai bloquear a minha segunda tela aqui então Eh eu vou apresentar por aqui mesmo se tiver tudo bem para vocês então Eh vamos começar acho que eu já introduzi né Eh então sou atualmente eu trabalho como eh blockchain engir na analog one e eh

Account Based Ledger

minha função é construir Bids entre blockchains para alcançar o tão sonhado futuro cochen Então primeiramente né eu prefiro eu tenho que falar para vocês da estrutura do Bitcoin mas eu vou começar falando do que é uma account base Ledger que é o que vocês estão acostumados então o Quais são as blockchains que elas são account based ledgers eh atualmente a maioria delas especialmente as que suportam Smart contracts embora tenh blockchains e toda suporte Smart contas mas a gente diz ah touring complete né touring completas são essas aqui e

e todas elas têm esse modelo de de contas que funciona como você tem uma conta e você tem um saldo nelas além de outras informações Então qual que é o problema do modelo de contas pra gente É bem intuitivo porque a gente tem conta em banco em conta em banco é assim você tem ali a sua conta tem o número da sua conta você tem um saldo né Então faz bastante sentido trazer esse modelo para blockchain Por que que o Bitcoin não usa esse modelo e quais são as limitações desse modelo de contas Então vamos pensar o seguinte temos aqui três transações entre três pessoas diferentes a hélice o Charles e o Bob e esse aqui é o estado

atual da conta dessas três pessoas a hélice tem 12 tokens o Charles tem oito o Bob tem zero e de Digamos que e os três né eles estão ali negociando offline eles três eles mandam essa transação aqui ao mesmo tempo tá isso supondo que estamos rodando por exemplo em uma coun Bas Ledger ou uma ethereum eh o que vai acontecer aqui é que a primeiro a hce vai transferir cinco tokens pro Bob Então vamos lá cinco tokens pro Bob então o saldo dela decrement de sete de 12 para sete e o saldo do Bob agora é cinco eh o minerador ele vai pegar essas

transações vai montar um bloco tá então Ele montou aqui um bloco esse bloco tem o header e tem Alias três transações eh Então vai Executar a segunda transação a transação b então agora o Bob tem 10 tokens o Charles tem três e eh por final eh o Bob Ele Decide transferir oito tokens paraa Carol só que uma coisa que é importante ressaltar é que quando um minerador ou um Block producer ou o que for ele cria um bloco as transações elas são na maioria das blockchains executadas de forma sequencial né então e quem decide a n transações é o minerador a pessoa que monta o bloco Então existe essa

questão que a gente chama de grinding Attack que o minerador como ele tem a liberdade de escolher or transações ele consegue alterar o resultado final delas por exemplo Digamos que aqui ele decide trocar o ordem da transação B pela transação C né então ele troca a ordem o que vai acontecer aqui é que na hora que chegar a transação do Bob que se a gente vê aqui ele tá tentando transferir oito tokens para Carol eh ele não vai ter esses tokens para transferir né ele não vai ter esses tokens aqui Tá errado essa atualização do saldo eh porque ele não vai ter recebido eh vai executar tração a então ele vai ter cinco tokens aí vai

Executar a transação que ele quer transferir oito tokens para Carol mas ele não tem oito tokens Ele tem cinco deixa até já atualizar isso aqui aqui ele vai ter cinco e o Charles eh ainda tem oito né agora tá tá certo aqui o que vai acontecer é que a transação do Bob vai reverter famoso revert e ele ainda vai ter que pagar o custo dessa transação então no final das contas ele não vai ter nem cinco tokens ele ainda vai ter que pagar o custo da transação que ela reverteu né É isso que vai acontecer eh isso aqui acontece porque a etherum e a maioria das eh blockchains baseadas em account based ela tem o que a gente chama de global mutable state quer dizer que você não consegue saber qual vai ser

o resultado da transação até que ela seja executada por quê Porque o estado o o resultado dela Depende do estado atual da blockchain eh existem até algumas vulnerabilidades tá eh em relação a isso isso eh pelo fato delas não ser determinística um exemplo bem clássico não sei se vocês sabem existe uma vulnerabilidade no padrão rc20 essa vulnerabilidade é em relação ao utilizar o approve da transação que hoje em dia não é recomendado utilizar ele ou se for utilizar ele é recomendar utilizar de uma forma específica que que basicamente requ uma transação a mais Então vamos ver como que funciona esse ataque eh tem a hélice Então temos aqui um token rc20 e a hélice ela tem sem o

SDT por exemplo e ela aprova o Bob a mover 45 tokens dela esse aprove ele é muito comum Quando você vai lidar por exemplo com exchanges como o uniswap né você vai lá e você precisa aprovar o contrato ou uma entidade a mover seus tokens por você eh então a transação quando ela você envia uma transação ela fica no que a gente chama de memory Pool ela fica numa lista de transações pendentes que se você tiver um F node rodando né com uma transação ela feita broadcast para todo mundo você acaba conseguindo ver essa transação antes dela ser incluída em um bloco então aqui a transação ela está pendente a prioridade baixa né quer dizer que a hélice setou ali uma

prioridade baixa de fis Então os numeradores têm a tendência de pegar transações com f maiores então ela vai ser executada mais paraa frente então a transação ela é incluída num bloco Digamos que aqui no bloco 105 a partir de agora o estado da blockchain é que a o Bob ele tem uma l ess de 45 quer dizer que o Bob ele consegue mover da hélice eh 45 tokens se ele desejar eh mas então a hélice por algum motivo no futuro ela decide que eh não eh eu vou reduzir eu não quero deixar o Bob mover 45 tokens eu quero reduzir para ele conseguir mover só 25

tá depois de um dia ou dois por algum motivo então ela vai lá e ela envia uma transação que reduz né esse apru para 25 e de novo essa transação ela está no memory Pool Então se o Bob eles tiveram e olhando essas transações ele vai ver essa transação que está aqui que aice deu um approve de 25 ou seja reduzindo o approve dele então quer dizer que ele vai passar a mover só 25 o que que o Bob vai fazer imediatamente ele vai pegar ele vai enviar duas transações uma delas com a prioridade Alta ou seja acando um fi bem alto para ela conseguir entrar num bloco antes da transação da

executada eh essa transação ele vai mover os 45 tokens que a élise tinha aprovado aqui para ele que é o estado atual da blockchain e ele vai enviar uma outra transação movendo 25 uma prioridade menor para ser executada depois eh conse sequentemente né se ele seou um fi bem alto ele vai conseguir com sucesso Executar a transação dele antes da a transação da hélice que diminui o approval então ele agora ele tem 45 tokens que ele moveu da hélice e eh na então aí a transação da é executada então agora o approve dele

porque esse approve ele sobrescreve o valor atual então ele sobrescreve consequentemente o valor se o valor era 45 vai virar 25 aqui no caso o valor foi Era Zero porque o Bob moveu vai voltar a ser 25 o que não era a intenção da hce Elice não queria dar mais 25 ela queria reduzir para 25 e o que vai acontecer é que o Bob ele vai conseguir mover 70 tokens da hélice tá isso aqui é uma vulnerabilidade bem conhecida do rc20 e a maneira que isso aqui que a gente lida com isso é você nunca pode mandar dois approves Com valores diferentes Você sempre tem que mandar um zero Antes quando você vai alterar o approve é a

maneira que você lida com isso e e existem interfaces que você em vez de você falar aqui você fala eu quero reduzir do valor atual 25 independente do estado que for reduz para 25 Então são e mas daí isso não é não é compli com rc20 né então você não pode esperar que as carteiras vão implementar esse método de aove enfim eh isso aqui não é uma vulnerabilidade do padrão rc20 na verdade isso é uma é uma limitação do modelo de contas tá que ele Depende do estado atual eh você só consegue referenciar o estado atual da blockchain para realizar algo então Eh dado essa introdução né vamos ver como que o

UTx0 Based Ledger

modelo de utxo eh resolve essas limitações né que é o modelo que o utiliza Então primeiramente né a gente tá acostumado com carteiras e saldos essa aqui é a minha carteira esse aqui é meu saldo primeiro conceito que deve ser quebrado aqui é que não existe saldo no Bitcoin não existe saldo não da maneira que a gente está acostumado o que o Bitcoin Ao invés dele traquear saldos né perdão é seguir saldos ele eh faz o tracking de transações então digamos aqui que o Bob ele quera

transferir cinco bitcoins para hélice o que o Bob eh ele precisa fazer né Então tá se eu não tenho saldo como que eu sei que o Bob ele tem cinco bitcoins para transferir paraa hélice o Bob ele precisa referenciar eh alguma transação que tenha transferido para ele antes esses cinco bitcoins aqui no caso né temos o Fred o Fred transferiu dois bitcoins pro Bob e temos a Carol a Carol transferiu quatro bitcoins pro Bob Então essa transação ela tem um hash que tá aqui né o hash da transação e o Bob ele precisa referenciar essas transações aqui para ele provar que ele tem cinco bitcoins para transferir Tá mas da onde que veio

os bitcoins do Fred e da Carol eles têm que fazer as mesmas coisas exatamente a mesma coisa eles tem que referenciar a transação e isso até a gente cheg numa transação que a gente chama de coinbase transaction coinbase transaction no caso do Bitcoin é a primeira transação de cada bloco é uma transação que ela não tem entradas a transação que geralmente é acada pelo minerador do bloco e é onde os bitcoins são criados então a gente chama transação de coinbase porque é uma transação que ela criou bitcoins a partir do nada tá E então é a única transação que não tem entrada então se a gente pegar qualquer transação do se a gente ficar seguindo né essa árvore

A gente sempre vai chegar em uma coinbase transaction vocês já ouviram falar por exemplo de bitcoins Anciões né Isso quer dizer que alguém que gastou algum Bitcoin de uma coinbase transaction de anos atrás tá isso aqui são o que a gente chama de Anciões Então você tem esse modelo aqui e Mas se vocês perceberem bem aqui né nesse exemplo a gente o o Bob ele tinha ele referenciou duas transações aqui uma de quatro e uma de dois btcs isso dá seis mas ele transferiu para hélice apenas cinco bitcoins então dá para pensar né Tá qual que é o saldo do Bob

eh Então deixa eu subir aqui eh é um né Deve ser um porque ele gastou cinco Sobrou um e na verdade não é bem assim que a texol funciona eh essa diferença que tá aqui essa primeira regra da utex é que você Obrigatoriamente tem que gastar todas as saídas o dexou e a diferença do que você não gastou é a taxa de transação Então o que quer dizer aqui é que o Bob ele transferiu cinco bitcoins para hélice e ele pagou um Bitcoin de taxa de transação aqui eu tô usando números inteiros para facilitar tá explicação seria um Val absurdo hoje em

dia mas é é um exemplo aqui ã A Regra número dois e a gente já vai ver porque ela é muito importante é que você não pode uma utxo não pode referenciar duas saídas você não pode ter por eh aqui tem quatro bitcoins você não pode ter esses quatro bitcoins sendo gastos em duas transações é sempre uma essa é uma outra regra de ouro então isso aqui é possível você pode ter uma transação referenciando várias que nem aqui mas você nunca pode ter essa transação sendo consumida por mais de uma transação na saída eh qualquer dúvida que vocês tiverem só

mandar aqui no chat tá mas vai ficar um pouquinho mais claro a seguir Então como que começa então o minerador vai lá e Minera 50 bitcoins né isso lá em 2008 2009 então vocês podem imaginar que não existia bitcoins todo mundo tinha Zero bitcoins no começo da do Bitcoin e Então a primeira pessoa que Miner o bloco foi lá Miner um bloco e ganhou por minerar esse bloco 20 bitcoins na época era 50 na verdade tá hoje em dia tá 3 vul alguma coisa ã E então esse minerador depois de um período que a gente chama de maturação a

partir de 50 blocos depois que aação for criada ele pode gastar esse valor que tá aqui então o minerador né a gente tem aqui o que a gente chama de utx né que é transações de saída não gastas tá em suma Mas se vocês forem procurar vocês vão sempre encontrar o número o nome utex então ele vai lá e ele consome ele cria uma segunda transação que consome a saída dessa transação e ele envia por exemplo 12 tokens para hélice e oito tokens pro Charles isso é uma coisa bem interessante do Bitcoin tá que você consegue enviar em uma transação valores para várias pessoas enquanto que na

maioria das blockchains como a ethereum você precisa de um Smart cont para conseguir fazer isso tá você não consegue eh nativamente enviar um saldo para várias pessoas diferentes e e legal então digamos que né aqui entrou 20 tokens e a saída foi 12 mais 8 né então aqui dá para ver que a a transação ela é válida tá porque a saída ela tem que ser igual ou menor que a entrada essa regra porque senão ele estaria criando bitcoins aqui ok então Digamos que agora né a partir de um segundo momento o a hélice

ela precisa pagar o Bob um valor de eh cinco bitcoins tá então a Elice tem que ir lá e ela quer pagar pro Bob cinco bitcoins como que a hélice faria isso eh a gente tem que lembrar então que tem essa regra que cada C de transação só pode ser gasta por uma única transação e a diferença das soma das entradas tem que ser igual ou menor que a soma das saídas então Eh aqui a tem 12 tokens nessa texo e ela é obrigada a gastar os 12 ela não pode gastar parte dos 12 o que ela vai fazer ela vai criar duas saídas pra transação uma que manda cinco tokens pro Bob e uma

outra que ela envia sete e bitcoins para ela mesma é o que a gente chama de Change ou troco tá então ela cria duas saídas Então é assim que você faz para você conseguir gastar toda a saída da de uma transação e ao mesmo tempo não ser obrigado a enviar todo o valor que você quer para uma pessoa ã acontece então a mesma coisa tá pro Charles aqui eu tô omitindo tá as taxas de transação se a Elice ela tivesse pagando taxa de transação ela provavelmente teria que decrementar o valor dela aqui para se por exemplo ou 6 V alguma coisa 6 pon P5 e esse 0.5 seria o equivalente a taxa de transação que

ela estaria pagando por aqui lá eh então daí o Charles vai lá e ele envia eh dinheiro pro Bob E aí né os os nodes bitcoins eles têm uma lista que eles mantém atualizada eh um banco de dados eh extremamente eficiente de todas as utex ZS que não foram gastas então aqui a gente tem quatro são essas quatro aqui essas aqui elas foram excluídas do banco de dados então ele só traqueia as que não tem que não foram gast que são essas quatro aqui a gente consegue ver a evolução disso aqui na aqui na direita e agora né chegou o momento do

Bob e gastar os tokens dele e esse aqui é o principal motivo pelo qual eu disse para vocês que a o Bitcoin ele não tem saldo não não igual o que a gente tem em uma count base Ledger porque pra gente conseguir saber o saldo do a gente não consegue olhar em um lugar único a gente tem que ver a soma de utex que pertencem a ele então aqui no caso Bob ele tem uma Tex que é é de cinco bitcoins ele tem uma outra T que veio do Charles de C bitcoins Digamos que ele Quira transferir 10 bitcoins PR a Carol nesse caso ele seria obrigado a

criar uma transação que tem como entrada as duas doex que ele tem controle aqui E aí ele poderia criar uma transação que envia 10 bitcoins para Carol hã Deixa eu só abrir aqui o chat deixar aqui do lado [Música] caso show eh se não tiver Claro tiver alguma dúvida tá bom pessoal só mandar aqui no chat que daí eu tô de olho aqui então a gente tem alguns tipos né de transações no Bitcoin a gente tem as common transaction as transações comuns que pode ter geralmente uma ou mais entradas e elas TM uma saída a pessoa

que você quer pagar e a outra saída que é o troco sub para você então se aqui eu tenho 100 bitcoins eu quero pagar um eu vou transferir um token pro Bob e vou ficar 99 de troco para mim mesmo isso aqui é o tipo mais comum de transação que tem no Bitcoin temos a aggregate transaction então por exemplo S um serviço de pagamento eu recebi pagamento de várias pessoas então várias eu tenho várias utex ZS eu posso pegar todas essas utex ZS de valores pequenos e agregar em uma grande Tá então esse aqui é o agregate transaction de agregação eh temos também a distributing transactions isso aqui é bem comum Quando você vai comprar Bitcoin em uma Exchange por exemplo eh você vai ver que

a Exchange ela vai ter uma aexo ali com 1000 bitcoins e para ela economizar no valor da transação ela vai pegar e ela vai mandar para todas as pessoas que compraram em Bet então aqui é uma pessoa que comprou cinco bitcoins aqui é uma pessoa que comprou três aqui é uma pessoa que comprou 10 aqui uma pessoa comprou 0,5 e no final ela vai voltar a maior quantia para ela mesma tá então isso aqui é uma transação de distribuição que a gente fala e ela é muito mais eficiente do que você criar várias que envia para poucas pessoas tá o valor e a gente tem um outro tipo especial de transação que é coinbase transaction esse aqui é o único tipo de transação que não tem entradas tá isso aqui e essa aqui é sempre é no caso do

Bitcoin da litecoin e a maioria das blockchains basadas noem texo é sempre a primeira transação de cada bloco que eh o protocolo estabelece que é essa o o minerador do bloco né que é a primeira transão do bloco ele recebeu um número X de bitcoins e esse número X de bitcoins mais as taas de transação ele pode gastar e enviar para qualquer conta que ele queira aqui de saída vamos dar uma olhadinha na prática como isso se parece vamos procurar aqui um Bitcoin Explorer vamos pegar aqui o último bloco

Bitcoin e vamos pegar a primeira transação do bloco que é essa aqui vamos entrar e a gente consegue ver que o from a entrada dela é zero deixa eu dar um zoom aqui caso esteja muito pequeno eh a entrada dela é zero mas ela tem uma saída eh do valor eh não zero e no Bloco Eh o que aconteceu aqui foi que essa pessoa ela eh teve uma quantia de bitcoins que foram criadas do zero Infelizmente aqui ele não tá mostrando para mim hum interessante ele mostrava antes

mas então teve alguns bitcoins foram criados do zero e eh essa pessoa eh ela conseguiu Ah aqui aqui mostra é Então qual que é o quanto que ela pode gastar na texel dela a soma das taxas de transação ou seja diferença de todas as transações do bloco que a pessoa pagou de taxa mas os BS que foram criados a partir do nada que está aqui que Art Então é isso mais isso perfeito então ã teve uma dúvida aqui como acontecem duas transações dois destinatários cada um usando uma utx Soul diferente do Yuri

Correia eh então Eh Yuri na verdade é porque uma transação do ponto de vista do Bitcoin ela é composta disso aqui isso aqui cada quadradinho desse não é uma transação tá isso aqui é uma Alexo isso aqui é maexo essas duas utex Souls pertencem a essa transação que tá aqui você consegue ver que a transação tem um hash que tá aqui esse é o r da transação e a outra ex tem o índex Então esse aqui é é dessa transação índex zero dessa transação index um eh então uma única transação você consegue gerar V várias texol de saída mas elas pertencem à mesma transação são componentes da transação

ã espero que isso tenha esclarecer essa dúvida então ahã é então vamos vamos entender né porque isso aqui parece ser muito mais complexo que um sistema de contas Por que que o Bitcoin usa isso por que que o Bitcoin não foi pro modelo de contas primeiramente é importante ressaltar que o Bitcoin ele não foi criado igual ethereum para rodar contratos ele foi criado com um foco em pagamentos o Bitcoin ele é focado em pagamentos então era muito mais importante para eles terem o que a gente chama de transações eh determinísticas Então o que são

transações determinísticas vamos começar aqui tá do modelo então eu sou um minerador e eu estou aqui montando um bloco aqui na direita eh o que o que vai acontecer é que a gente vai ter uma transação que eu recebi ali do moderador então tem aqui a transação essa transação eh está enviando tokens de novo pra hélice pro Bob tá agora temos uma segunda transação que envia Eh esses tokens da hélice também pro perdão pro Charles pra hélice então envia pro Bob eh O que acontece se o minerador tentar fazer a mesma coisa que a gente fez lá na eum ele tentar alterar a ordem das transações no bloco o que vai acontecer

é que quando ele for tentar Executar a transação da Carol e o Bob ele tenta enviar eh 10 tokens para Carol é que não vai existir a utxo que se referencia aqui né para para ele não vai exar o texo que ele pode gastar esse 10 eh bitcoins consequentemente essa transação ela é inválida consequente o bloco inteiro é inválido então no Bitcoin não existe revert não existe você enviar uma transação E você tem que esperar para ver o que vai acontecer se ela vai dar certo ou se ela vai dar errado não existe isso se uma transação ela está num bloco ela é

válida e vocês vão perceber aqui né também olando isso que o minerador ele não consegue alterar o resultado de uma transação enquanto que numa count base Ledger eu só por eu ordenar as transações eu consigo alterar o resultado final numa utxo é impossível não tem nada que o moderador ele consiga fazer aqui para alterar o resultado dessas transações a única coisa que ele poderia fazer aqui né então a gente tem uma lista de dependências então a transação quatro ela tem ela Obrigatoriamente tem que ser executada depois da transação do e TR a transação dois e TR tem que Obrigatoriamente ser executada depois da transação um a transação um tem que Obrigatoriamente ser executada depois da transação

coinbase zero tá então existe aqui uma lista de dependências então tipo a única coisa que sei lá o mador poderia fazer é mudar a ordem entre a transação TRS e do por exemplo Mas independente dele fazer isso isso não alteraria o resultado final Então você tem essa garantia de que quando você vai executar alguma coisa você sabe que se a transação entrou num bloco você não precisa conferir se o recibo da transação existe recibo de transação ela vai fazer exatamente o que você esperava que ela fizesse F E então esse modelo ele é muito superior para pagamentos tá que o modelo de contas e outra questão é que ele é paralel tá ele é paraliz porque como uma

transação ela explica Quais são as entradas e eu consigo se eu tenho duas transações tento usar a mesma eu sei que eu não consigo executar elas em paralelo então é mais paraliz esse modelo legal então Seguindo aqui vamos falar sobre locking locking scripts que agora finalmente a gente vai entrar na parte de programação do bit uma uma dúvida eu não sei se falou isso Eu me perdi no meio mas quando quando gera transação por exemplo o Bob tá fazendo transação PR Carol aham caso a transação não vai ter um output troco entre ASP essa transação essa essa

utex não é gerada então certo tipo di aqui você diz a transação aqui do Bob pra Carol sim ele não gerou uma uma am zer porque ele gastou o valor completo das transações que estão aqui se a gente pensasse para ver no mundo real tá no mundo real isso aqui seria alguma coisa por exemplo nove porque ele teria que pagar TX de transação senão nenhum minerador iria aceitar incluir a transação dele no bloco sim é então sim aqui ele não tem troco porque não sobrou troco para ele ah das contas perfeito eh Então vamos seguir ali então agora acho que ficou claro né Porque que o Bitcoin ele não tem saldo

você não tem saldo no Bitcoin você tem oxos e eh E essas utxos Elas têm saldo então você pode acabar tendo na sua carteira milhares de texs se você tá especialmente se você é criou uma aplicação de pagamentos você recebe pagamentos pequenos Você pode ter milhares de texs e para você conseguir calcular o seu saldo Você precisa olhar para todas os o texs que pertencem a você para você conseguir saber o seu saldo da carteira Então não é tão simples né e mas o client do Bitcoin faz isso pra gente né E na verdade é mais complicado ainda que o Bitcoin ele

Locking and Unlocking Scripts

é só um adendo aqui ele incentiva a questão de privacidade Então quer dizer que quando você vai cobrar de uma pessoa para de pagar a maioria das carteiras vai gerar um Endereço Novo para cada pagamento que é feito então você vai ter um caso ali que o endereço que você recebe o pagamento de uma pessoa você vai gerar um outro endereço para outra pessoa então você vai ter várias o texol com endereços diferentes mas todas elas pertencem a você isso aumenta a privacidade só que você pode ver que como isso aumenta a complexidade né na questão das carteiras para verificar o saldo de uma pessoa eh legal então ok Deu para entender né então contas tem o texos é isso ah não o contas não existe contas no

Bitcoin não o conceito de conta não existe dentro do da arquitetura do Bitcoin mas tá vocês têm carteiras vocês têm eh você consegue pagar outras pessoas então se não tem uma carteira como que eu transfiro o dinheiro para alguém se isso não existe eh Então vamos entrar ali agora na parte mais na minha opinião mais interessante sobre o Bitcoin eh Rodolfo perguntou se o minerador pode colocar a taxa zero no eh do broc na verdade Rodolfo ele deve colocar ele ele é obrigado a colocar taxa zero nas

transações dele porque o o minerador né no caso ele é a única pessoa que não tem tem nenuma entrada mas ele Obrigatoriamente a soma das saídas da transação dele tem que ser igual a soma dos fis do bloco e as taxas de transação então ele ele não pode gerar uma a transação inválida se ele não gastar exatamente essa quantidade de tokens tá saído tá então ele tem que a soma que ele tem que gastar ali é perdi aqui o bloco é a soma do reward que é o quanto os bitcoins que foram criados a partir do nada com com as taxas de transação a única transação que

tem esse requisito tá E ele não pode pagar taxa a primeira transação do bloco ah perfeito vamos espero que tenha esclarecido essa dúvida Rodolfo Então vamos entender tá como que exatamente funciona uma blockchain que não tem contas e não tem saldos então nos exemplos anteriores que eu mostrei para vocês tava simplificando tá eu tô estou introduzindo um conceito de cada vez para vocês aqui eh nos exemplos tava falando para vocês que a transação e ela pertence ao minerador mas isso aqui não existe não existe eh essa texo pertence a essa

conta o que existe no Bitcoin são locking scripts o locking script eh e é locking scripts e unlocking scripts que são um é a saída da transação está aqui e você coloca um código aqui como se fosse um código de um Smart Contract isso aqui são os Smart cont do Bitcoin e esse Smart você pode pensar como se ele fosse um Puzzle né um quebra-cabeça que a pessoa que souber resolver esse quebra-cabeça consegue gastar os Fundos dessa transação

Então temos aqui a saída e temos uma transação de entrada né a entrada ela sempre referencia uma saída sempre então aqui a gente consegue ver transaction ID 52 a67 aqui é transação 52 AF me Mea perdão é Mea eh e a utex Zone no índex zero índex zero índex zero que tá aqui e aqui a gente tem o unlocking script o unlock script é o que resolve esse Puzzle que tá aqui é o que vai executar e se isso aqui for válido conseguir desbloquear os Fundos Então essa transação que tá aqui ela consegue criar as saídas que ela quiser para gastar os Fundos e dessa

otex Zone então aqui no caso o amount é 20 Se eu conseguir desbloquear essa utex Soul resolver esse Puzzle eu consigo gastar e criar saída que eu quiser tá eh então a gente consegue basicamente eh ver isso como se fosse isso aqui fosse uma eh um volt né uma um cofre os valores e a transação de entrada ela é a chave que desbloqueia os fundos da de uma saída tá eh então o que que é uma transação no Bitcoin é isso aqui esses são os componentes de uma transação no Bitcoin

uma transação no Bitcoin possui entradas entradas sempre referenciam saídas a única exceção é coinbase transaction que não tem nenhuma entrada com exceção da coinbase transaction todas as transações vão ter pelo menos uma ou mais eh entradas com esse unlock script e uma vez que você consegue desbloquear isso aqui você consegue construir saídas que gastam a entrada das transações Eh agora vai um entrar pra parte vai ficar Talvez um pouquinho mais denso Tá mas eu espero que eu consiga explicar de uma maneira esclarecedora como que funciona então vou pegar aqui um script bem simples Tá então vamos imaginar um

Puzzle que você tenha que resolver essa condição que está aqui então temos essa função e ela tem que retornar true para você conseguir gastar os Fundos do mtex soul bom eh então no caso do Bitcoin eh então x x 3 + 5 di 2 tem que ser igual a 10 eh quem for bom de matemática aí já conseguiu ver que eu consigo substituir esse valor que tá aqui eh por cinco Se eu colocar isso aqui igual a c eu consigo retornar verdadeiro então primeira coisa que eu tenho que fazer é construir uma stack Machine né então o Bitcoin ele utiliza op codes tá

os opcodes do Bitcoin foram o que inspirou os opcodes da ethereum tá inclusive o próprio Vit buttering ele trabalhou né no protocolo do Bitcoin e né ele reutilizou o mesmo modelo e não confunda tá a stack do Bitcoin com uma stack e de uma linguagem de programação Tipo C tá é completamente diferente ISO aqui é uma stack Machine e as máquinas que a gente utiliza são bem diferentes tá maneira como funciona então E como que funciona temos aqui o unlock script e temos aqui o locking script então Conseguimos ver aqui isso aqui é a saída da transação isso aqui é o que

como que você tá tentando gastar os Fundos que estão aqui o que você tá tentando fazer para desbloquear ele você poderia simplesmente colocar cinco aqui tá mas para eu deixar mais interessante isso aqui eu coloquei uma eh um script para ser executado Então vamos ver passo a passo como que funciona tá uma stack Machine ela funciona Ela é bem simples você tem um op code o que que um op code faz ele tira Ou coloca valores na stack e sempre do topo da stack tá e enquanto no computador você consegue acessar qualquer região da stack não uma stack Machine você só pode acessar o topo o n n eh itens do Topo dela então aqui a

gente tem uma stack e ela vai crescer de baixo para cima tá e você então vamos ver como que funcionaria isso aqui primeiramente a gente executa o unlock script então push 2 eh aqui a gente tá jogando na stack o valor 2 push 3 Estamos jogando o valor 3 na stack E então a gente vai executar o opcode add o que que o opcode addd faz ele tira dois valores da stack ele vai tirar o valor 3 E5 e ele vai jogar na stack então ele vai fazer o push do da soma desses dois valores que ele tirou da stack então ele tira dois e joga um valor na stack e então ele tirou o dois e o TR e

julgou a soma que é C Então a partir do momento que a gente executa o locking script a gente faz uma cópia da stack dele que sobrou e a gente eh executa aí o o locking script eh tinha uma vulnerabilidade n primeiras versões do Bitcoin que eles meio que concatenam o unlock e o lock script mas gerava alguns problemas Quando eu poderia fazer um push aqui que eu podia dizer que ele é parte do locking script eu poderia fazer uma versão de SQL injection eh do Bitcoin então eles separaram ele só executa esse aqui apaga e então

executa o próximo e manter o valor da stack de outro vamos vamos ver então como função execução Então vamos executar aqui o lock script pu faz o push do valor TR na stack Então vai executar o operador de multiplicação op p multiply o operador multiply ele tira dois valores da stack e joga a multiplicação dos dois fica ficou com 15 aí a gente vai jogar o valor 5 na stack E aí vamos executar o o opcode add o operador add ele tira dois valores da stack e devolve a soma legal ficou com 20 vamos executar agora o push 2 jogamos o valor dois na stack e aqui a gente chegou num momento bem interessante

Lembra que eu falei que a gente só executa e o que está no topo da stack mas aqui a gente quer dividir esses valores esse valor por dois né a gente quer dividir só que a gente quer dividir 20 por 2 Então a maneira que a steack ela é feita né então a gente sabe que 2 2 div por 20 é diferente de 20 div por 2 então é no caso do opcode de divisão o multiplicador é sempre o primeiro desculpa o divisor é o segundo elemento que a gente tira do topo da stack então o divisor aqui é 20 então a gente precisa executar um outro opcode para fazer essa eh cálculo na ordem certa que é o operador Swap o Swap ele vai tirar dois itens da stack e vai

jogar eles em ordem invertida de volta na stack então ele vai ou seja alterar a ordem dos dois elementos no topo é é sempre interessante você imaginar no sentido de que ele não tá trocando a ordem Ele está tirando dois trocando a ordem jogando dois ordem invertida tá isso ajuda a entender alguns Alguns conceitos então mudou a ordem e agora eu consigo efetuar a divisão dos dois operadores eh jogo 10 e aí eu executo o operador equal o operador equal ele vai tirar dois valores da stack vai comparar os dois e se os dois valores forem iguais ele vai jogar um na stack se os dois

valores forem diferentes ele vai jogar zero na stack Chegamos aqui no final da execução do programa e a condição para você desbloquear os Fundos deex é que o item no topo da stack quando ao final da execução do unlock unlock script precisa ser um valor podia ser 20 podia ser 30 qualquer valor positivo aqui a gente considera que você conseguiu desbloquear com sucesso essa a partir de agora a pessoa que criou transação ela consegue gastar os Fundos

dessa geralmente essa aqui é a parte mais difícil ent o script no Bitcoin parce para você uma você poderia repetir a parte da concatenação do Danilo e você diz a parte deação do um Lock com o lock script tá eh então aqui só para vocês entenderem tá isso aqui é uma transação que a pessoa criou uma saída um Lock script isso aqui na direita é uma outra transação tá que foi executada posteriormente que a pessoa tem um criou um Lock um unlock gente consegue desbloquear o que tá aqui

na esquerda eh então sempre executado nessa ordem a gente sempre executa o unlocking script antes do locking script e não tem concatenação tá e o que eu tinha dito antes é que existe uma vulnerabilidade no Bitcoin que eles pegavam isso aqui e juntavam os dois sabe deixa eu trazer isso aqui para pra frente Ah não consigo levar pra frente Eles simplesmente pegavam o unlock script concatenam no Lock script executava como se fosse um script só só que tinha algumas vulnerabilidades que isso causava que você poderia eh ter alguns opcodes aqui que você dizia que esse

três e esse multiply aqui ele é parte de um push que tá aqui em cima por exemplo e o é o opcat tá eu não sei se eu vou ter tempo de falar do opcat hoje tá o opcat é o que tem causado bastante discussão tá ele é um opcode bem alto nível mas basicamente ele permite você copiar aqui no script no seu Lock script eh não tem nenhum up code no Bitcoin que permite isso Tá Mas o opcat em suma ele permite você copiar a saída do Lock script dessa transação Então você consegue pegar o que a saída da a transação e jogar aqui no seu Lock

script Ou seja você consegue condicionar a saída da transação isso é uma coisa que é impossível no Bitcoin agora tá no Bitcoin você você não uma vez que a pessoa consegue desbloquear os Fundos A pessoa ela consegue gastar do jeito que ela quiser os bitcoins com opcat você consegue condicionar como a pessoa vai gastar os Fundos e isso gera algumas controvérsias no Bitcoin tá eh que por ISO por isso que se eu tiver tempo é é mais avançado tá a parte do opcat mas é se tiver tempo eu explico mais AF fundo como ele funciona Ahã legal acho que espero que isso aqui

tenha ficado Claro só para vocês entenderem tá isso aqui é um é um Lock script extremamente eh inseguro por quê Porque você pode fazer o broadcast dessa transação ou seja você manda essa transação pra blockchain a pessoa vai ver o seu un Lock script e ela pode criar uma transação dela aqui né então aqui eu vou criar uma transação minha e eu vou mandar os fundos para mim tá então eu consigo tipo basicamente qualquer pessoa pode vir aqui e gastar esses fundos da maneira que ela quiser tá então isso aqui é simplesmente para exemplificar para vocês como que funciona o Smart cont do Bitcoin isso aqui é o smartc do Bitcoin tá e você consegu ver que é bem diferente da

etherium a maneira como ele funciona Então vamos mas você consegue fazer algumas coisas bem algumas coisas bem interessantes tá com isso aqui ã já antes de eu falar sobre P Channel né deixa eu mostrar para vocês aqui um exemplo Ah o Danilo mandou mais uma pergunta sempre que eu Gero um novo utxo eu preciso definir o lock script sim Danilo Obrigatoriamente você precisa definir um Lock script então só para esclarecer uma coisa que eu acabei de perceber quando coloquei aqui aqui nos slides Então como que eu transfiro dinheiro para alguém né Tá eu queria tá o que que é transferir dinheiro para alguém aqui no Bitcoin é você criar um

tipo específico de lock script que só pode ser gasto por uma pessoa que tem a chave privada de uma chave pública né você tem ali no Sea na sua conta do da ethereum você tem o seu endereço esse endereço ele está lado uma chave pública e você tem chave privada você consegue gerar uma assinatura digital então é em suma o script mais comum que é utilizar no Bitcoin porque você transferir Fundos é um script que bloqueia esses fundos para uma assinatura digital Então deixa eu ver se eu consigo mostrar para vocês como isso funciona Ô legal já tem um pronto aqui isso aqui é uma ferramenta bem interessante tá ide

Bitcoin out eh eu poderia dizer que seria o remix do Bitcoin mas não é e ele só facilita entender alguns conceitos tá ele é é o mais próximo gente tem um Remix Tá Bitcoin então e aqui a gente tem o nosso unlock script e aqui a gente tem o nosso locking script então geralmente tá o tipo de mais e comum que você vai ver vai ser algo parecido com isso aqui deixa eu só deixar isso aqui mais

legível e isso aqui eles TM essa linguagem de programação isso que é eles chamam de Cash assembly tá isso aqui não é Bitcoin script baixo nível mas em suma é a gente cria uma assinatura digital e tá aqui então eu quero gastar os fundos de uma transação Primeira coisa eu tenho que fazer é eu tenho que assinar essa transação o que que é assinar transação Você assina uma versão do hash Deixa eu só voltar aqui no exemplo Você assina as saídas tá então basicamente você pega uma transação a transação ela tem input e tem output

você pode ver que aqui eu tenho que incluir uma assinatura que tá aqui uma assinatura digital eh O que você vai fazer você vai essa assinatura ela é uma assinatura com base nas saídas dessa transação que tá aqui então é calculado um hash com base nas saídas sem incluir a entrada porque você não consegue assinar uma assinatura porque para você assinar uma assinatura você precisa saber qual vai ser a assinatura então é uma coisa recursiva e você eh tem que remover isso aqui funciona a mesma coisa na it quando você cria uma transação você nunca assena a transação com assinatura eh E então isso aqui vai gerar para você uma eh uma assinatura digital E você também submete aqui a sua chave pública já vou explicar o porquê e E no

caso do Bitcoin Isso aqui vai gerar pra gente um eh ele vai executar esse algoritmo aqui chamado hash 160 O has 160 ele seria o equivalente a Como que você transforma uma chave pública em um address no Bitcoin se a gente pegar ethereum o que que é ser o endereço na ethereum ele é simplesmente uma fórmula de calcular a de transformação chave pública em um endereço menor que uma chave pública ela é muito grande né ela tem se eu não me engano 64 65 bytes eh e aqui a gente consegue transformar em uma coisa de 20 bytes né que é muito mais fácil você memorizar e mandar paraas pessoas então ele vai

calcular isso aqui ele vai verificar se os dois são iguais se os dois forem iguais ele vai executar o op code op check signature esse op code ele recebe duas entradas ele tira dois valores da stack ele vai tirar qual que é a chave pública Então qual que a chave pública que e eu quero ver a assinatura e a assinatura e ele vai verificar com base na assinatura tem algumas propriedades aqui que dizem eh a Quais elementos da transação eu eu estou assinando e se a assinatura bater um resto da transação Então ela é válida daí ele vai fazer um p de um se a

transação for inválida vai fazer o zero então eh você pode ver que ele é um picode bem alto nível tá ele faz muita coisa eh o que tá aqui então deixa eu ver se eu consigo jogar esse cara aqui vamos jogar ele aqui que aqui eu consigo mostrar Então aqui tem um outro e aí temos esses opcodes que estão aqui e a chave pública é o que está aqui show legal então assinatura eh aqui é

assinatura digital e aqui é a chave pública Então vamos executar esse cara esse aqui é uma famento bem interessante que diferente dessa aqui essa aqui não permite a gente executar passo a passo ela já dá o resultado aqui final essa aqui é Primar passo a passo então fica mais fácil de visualizar o que está acontecendo aqui deixa só eu jogar ah provavelmente eu coloquei Ah sim não tem 0x aqui na frente Deixa eu só tirar o 0x então ele jogou ele fez um push desse valor na stack fez um push da chave pública então ele vai executar ess

operador de duplicação ele vai duplicar o valor que tá no topo da stack duplica o valor então a gente tem uma cópia dos dois valores aqui agora na stack eh o motivo pelo qual ele faz isso é porque eu vou precisar dessa desse valor aqui no ch signature vou precisar de duas vezes desse valor então daí eh ele vai pegar e ele vai calcular o endereço dessa chave pública então ele vai transformar essa chave pública que tá aqui que é um valor Grande o endereço Bitcoin então ele vai executar o Code agora tem endereço eu acabei de perceber que eu cometi um erro aqui mas

já vou corrigir aqui deixar do começo vamos lá do começo aqui agora sim eu já explico por que aqui tem o endereço tá já expli por Então vamos lá executou então aqui temos a chave pública aí ó ele calculou o endereço e ele comparou os dois endereços ele vai comparar esses dois endereços se os dois endereços batem se bater ele vai retornar um sucesso e então a gente sobrou dois valores da stc sobrou a a chave pública que é o que tá aqui e sobrou a assinatura ele vai pegar e vai

verificar e bateu sucesso a assinatura é válida eh Então por que que tem um endereço aqui porque parece que ficou meio redundante né o motivo pelo que esse endereço tá aqui porque se não tivesse isso aqui eu poderia fazer só isso aqui e Daia o o resultado seria exatamente o mesmo eu poderia simplesmente ter um check signature que tá aqui eh primeiro isso aqui seria inseguro porque eu poderia alterar a chave é pública que tá aqui então seria o primeiro problema e dois isso aqui ajuda a gente a saber

quem pertence essa utex porque eu tenho aqui uma aex que tá aqui então aex o lock perdão aqui o locking script dela tem a chave pública então eu olhando essa eu sei que o dono dela esse endereço que tá aqui então o que que uma carteira de Bitcoin faz a carteira de Bitcoin ela fica procurando as utex que tem esse padrão aqui ela sabe que na maioria dos casos a chave pública vai est nesse terceiro elemento aqui consequentemente eu sei que essex per ess usu se vocês não acreditam dá para aqui numa transação qualquer e a gente CONSEG ver

o aqui é um pouquinho mais complicado que eles usam esse witness mas aqui temos o script que tá aqui E esse script aqui se eu jogar ele aqui a gente vai conseguir fazer o Decode dele a gente consegue ver que ele tem esse op false e isso aqui é o é um tópico que vou ver se vai dar tempo de explicar hoje mas eh no Bitcoin você não paga por instrução executada no Bitcoin você paga por byte de transação então quanto maior sua transação Não não é necessariamente bite tá isso era na versão antiga do Bitcoin ele tem um negócio chamado weight é um pouquinho mais complicado mas em suma eh quanto maior su transação

mais caro você vai pagar por ela e não é por execução porque não tem como se fazer um loop aqui tá no Bitcoin não tem como se fazer um loop então consequentemente todos os scripts eles têm um tempo de execução bem mínimo e determinístico eh consequentemente você consegue eh fazer algumas verificações aqui ah alguma dúvida até aqui V beber aqui uma aguinha Enquanto vocês pensam eu tenho se ninguém tiver eu tenho são duas na verdade a primeira é mais básica assim é quando você rodou lá

no no segundo ali segundo site Esse daí é quando você fez o o verify ele deu um e tirou da Esse é o comportamento padrão e se desse zero sabe se desse zero vamos vamos fazer o teste e deixa eu só voltar aqui quando você pode 160 aí né compara e tal ISO vamos testar aqui então então aqui temos a essa aqui é assinatura digital Uhum E isso aqui é a chave pública da conta então chave pública da conta E aí então então isso aqui é o nosso essa parte aqui é o nosso locking script

aqui em cima e aqui agora nós vamos perdão é unlock script e agora vamos jogar aqui o nosso unlock script e deixa eu só pegar aqui o endereço do usuário que eu acho que é esse aqui confirmar se é isso mesmo que sim então vamos só executar ess aqui passo a passo para ver se tá tudo certo ok executou o nosso Agora vamos começar a executar aqui o nosso locking script vai pegar vai calcular a chave pública e o endereço que tá ali tá errado Deixa eu só jogar aqui de volta e

aí vamos começar de novo legal ele vai jogar esse valor aí então ele vai Isso aqui é uma coisa interessante aqui a gente tá executando tem dois operadores tem o operador op equal Ah o op equal Obrigado por falar sobre isso o op equal ele só vai comparar e jogar na steack o op equal verify se retornar zero ele já falha oex aqui mesmo ele nem executa o resto Hum então tem alguns operadores aqui que eles quebram fluxo mesma coisa o de assinatura o de assinatura tem o check sig e tem o check

verify Porque aqui no caso não tem diferença tá eu usar o check sig e o check sig verify porque no final das contas esse aqui é o último op code ser executado mas se eu tivesse outros op codes aqui depois desse eu eu preferiria utilizar o verify por quê Porque daí se ess que falhasse aqui não executar o resto tá então você pode ver que o controle de fluxo é bem diferente lá no no Script Bitcoin eh Engraçado que o nome dessa linguagem aqui é script acho que o pessoal não tinha muita é eu chamo de Bitcoin script mas o nome mesmo não é bitco script só script

da linguagem e e assinatura né então se eu vim aqui né e executar o op code E verify se eles forem diferentes já vai falhar aqui mesmo então Ah legal então eles bateram aqui o valor E aí foi o que você falou né pegou e já tirou o valor que tá ali e dá um isso é é por causa que aqui é o verify né e o verify ele só verifica se é igual e já tira o valor e então aí o último operador né o o opcode sig E se eu tivesse colocar aqui o verify ele ia ter o mesmo comportamento e eu seria obrigado a colocar aqui por exemplo um push um aqui

no final então o script el ficaria maior e seria mais caro executar ele né porque teria um bte a mais de informação ali então ele executaria executaria aí ele ia verificar a a assinatura iria bater aí ia fazer E aí aí ele tirou ia jogar o um e sucesso ah né então então sempre ter eh e é bem interessante isso aqui porque a gente consegue ver também então utilizar que o o cheque segue é mais eficiente porque a transação fica menor E se a gente ver o código em assembly né você consegue ver que tá aqui ó ele começa com 9e tá aqui eu sei que tem 704 by Se não me engano 74 by mas a

gente consegue ver que ele começa com esse 41 tá esse é o 41 aqui ele é um operador de p ele fala que olha os próximos 74 bytes Eles são um número tá eles representam um número então ele sabe que isso aqui que tá aqui não é o Code é um número isso aqui é o que eu falei para vocês que podia ter causado um e causado vulnerabilidade no Bitcoin quando a gente só juntava os dois scripts tá E foi resolvido deixa eu ver aqui Danilo Então quando você envia uma transação você envia o unlock Script o novo Lock script per quando você envia uma transação você envia o unlock script sim a transação ela tem que terlock script de saída sempre é isso Aí você envia o lock

script nidas da transação E como que você define como os dexos vão ser quebrados eh arbitrário você você decide isso eh por conta tá eh você pode ir lá a única regra que você tem é que você tá desbloqueando alguns fundos de entrada então digamos tá se você somar todas as entradas tem quantos bitcoins você tem 0,3 você tem um Bitcoin a única regra é que a saída não pode ser maior que o valor da entrada se você colocar um valor igual você tá pagando zero taxa se você colocar um valor menor a diferença é a taxa de transação eh se você quiser criar centenas de saídas você pode é o

que vai acontecer é que sua transação vai ficar maior e por ficar maior você vai pagar mais taxa de transação tá porque quando o minerador a a maneira que você limita o tamanho de um bloco no eh eu vou simplificar aqui tá não é mais verdade isso Mas é pelo tamanho das transações você pode colocar 1 MB de transação no Bitcoin significa que eh significa que transações maiores ocupam mais espaço do bloco consequentemente consequentemente o minerador vai conseguir colocar menos transações no bloco consequentemente quando ele for ver sua transação ele não vai ver o valor absoluto que você vai pagar de taxa ele vai ver ele vai pegar

o valor que tá pagando deitar de transação e vai dividir pelo tamanho da sua transação né é a mesma coisa você pensar que você tem uma transação na ethereum que vai consumir mais Gas eh espero que isso eh tenha respondido a pergunta ã uma dúvida do Yuri se der zer zer então falhou vamos fazer o teste aqui eu posso simplesmente vir aqui e alterar a assinatura vou alterar um caracter da assinatura por exemplo tá V colocar aqui quatro então presumo que agora a a assinatura é inválida né então vamos ver o que acontece vai lá comparou tá executando agora esse duplicate executou esse aqui

agora vai fazer mais um push desse cara aqui agora vai executar O econ verify os dois valores tê que bater perfeito eh os valores bateram agora ele vai executar o check signature e a princípio a assinatura é inválida e deixa eu só confirmar se eu deixa eu terrar outras coisas aqui da assinatura que eu também não confesso que eu não testei se esse cara aqui hum pelo jeito nessa ideia aqui ele só aceita a assinatura mas se eu fizer aqui no final um push zero por exemplo colocar um zero

eh só só para vocês entenderem tá que essa ideia que ela é bem limitada porque ela não consegue verificar a assinatura da transação porque em suma a assinatura da transação Ela depende do hash da saída de quem tá gastando essa transação então ele não sabe o que que eu tô assinando tá ele não sabe que eu tô assinando consequentemente ele faz um bypass aqui de tudo é válido já que ele não sabe o que eu tô assinando ele só acho que se só colocar aqui por exemplo uma assinatura eh um tamanho menor do que deveria ter eu acho que ele vai falhar Daí vamos ver se vai falhar daí no caso assinatura em si seria

inválida e ainda se ele passa Vamos só lugar um zero aqui essa aqui a outra solução aqui ela Verifica a assinatura tá essa outra ideia ela chega ela fala pra gente se deu certo Ou se deu errado essa aqui ela é bem mais limitada porque ela não tem contexto da transação Então vamos lá aí e zero aí é sempre o valor do topo da steack se o valor do topo da stack for zero falhou se for qualquer coisa diferente de zero passou só para vocês entenderem também que é bem limitada essa ferramenta tá a maneira como a

gente usa ela essa aqui é um pouquinho mais completa mas ela não tem essa visualiza são um passo a passo que nessa que tem hum aí quando ele fala ele fala de tudo mesmo né normal é é a gente consegue ver aqui por exemplo que ele utiliza nomes né pras coisas em vez de ele mostrar assinatura eu tenho que colocar meu mouse aqui em cima daí ele mostra o que é de fato assinatura e ele tem aqui por exemplo o contexto da transação eh então é uma ferramenta mais eh é é interessante mas ela não tem essa questão do passo a passo que é interessante também Esse p2pk é tipo outro outro nome para locking unlocking trans certo

é o tipo do unlock script que a gente tá executando aqui então até legal você trazer esse ponto de volta porque tem algumas vezes você pode ter um script complexo aqui né Você pode ter um script bem complexo bem grande e no caso do Bitcoin você paga por taxa de transação então você paga por taxa de transação consequentemente a pessoa que tá gerando um Lock script vai acabar pagando mais taxa de transação do que a pessoa que está gerando o unlock script porque aqui o script é muito menor então

existem alguns tipos de script que ele permite a gente inverter isso permite eu dizer pra pessoa que tá aqui tá que é o pay to hash que ela que tem que definir o script que tá aqui então ela que tem que vir aqui e em suma ela tem que fazer aqui um push de valor gigante que tá aqui que é o script é vai tá aqui num formato específico Então vai começar com script e vai tá com Lock script e a gente vai ter aqui o pay to hash o que que ele vai fazer para eu garantir que a pessoa não pode alterar um Lock script então ele vai calcular o rest do scrip a pessoa colocou na saída e ele vai

executar então um tipo especial de script que eu basicamente eu delego pra pessoa que for desbloquear as taxas de transação do Bitcoin porque ela obrigada a tenho colocar aqui um hash que é o p hash que a gente fala né P has e a pessoa que for executar o script ela Obrigatoriamente vai ter colocar o script na no unlock script mas o unlock Script o hash dele tem que bater com o hash do unlock script isso no final das contas D no mesmo A única diferença é que a quem vai pagar quem vai pagar a taxa da transação maior é quem for desbloquear os Fundos

eh e o que que eu falei foi interessante ter trazido isso porque o Bitcoin tá eu não vou ter tempo de explorar isso aqui ele é muito mais difícil do que isso se a gente for pegar ethereum a ethereum ela a gente tem aquele aquela questão que quando tem coisa nova ela vai lá e coloca ela não liga muito paraa retrocompatibilidade se você for pegar os recibos de transações da ethereum no bloco Zero ao 100.000 é 100.000 não é é por aí 100.000 Elas têm um formato se você for pegar o revert não exist revert na primeira versão da ethereum o invert

acontecia quando uma transação gastava todo o Gas dela eh eles não se preocuparam em manter retrocompatibilidade só que quando a gente tá falando do sistema de pagamentos né que nem o Bitcoin O Bitcoin ele é utilizado em hard Wallet a gente tem atm de Bitcoin a gente tem eh sistemas embarcados o pessoal que Minera Bitcoin eles utilizam a six né que são os as mineradoras Então você incluiu uma coisa que quebra pro protocolo eh é inviável então Muitas das coisas que foram feitas no protocolo do Bitcoin eles tentaram introduzir features novas mas que ao mesmo tempo não quebrasse pessoas que tivessem usado

versões antigas como sistema embarcado o que fosse então questões como eh por exemplo esses esse witness que tá aqui né Isso aqui foi a maneira que o pessoal encontrou de deixar o Bitcoin mais eficiente porque a gente consegue ver que esse script que tá aqui é muito bite de informação que tá aqui é muita informação e tem um problema no Bitcoin a gente chama isso aqui deg weakness seg Bitcoin Isso aqui acho que tá no próprio isso aqui basicamente

Pens a gente tem o seguinte problema a gente tem que eu preciso saber quais foram as utx que foram gastas só que quando a gente vai ver o bloco do Bitcoin O bloco do Bitcoin ele não tem um que a gente chama de commitment não tem uma hash uma merc 3 de texo não existe isso só tem uma merc de só que e só transações daquele bloco não de blocos não de transações passadas então a o Bitcoin ele tem aqui uma merc 3 não sei se já ouviram falar de merc 3 se não ouviram falar é bem interessante pesquisar porque todos os blockchains usam isso mas basicamente ele gera para mim uma maneira de eu provar que uma

transação está no bloco só que eu provar que uma transação está no bloco não me diz se se essa transação ela foi gasta ou não depois então legal eu sei que tem uma transação que tá enviando bitcoins para mim no bloco 100 mas eu sou no bloco 200 como que eu sei essa transação foi gasta eu tenho que olhar do bloco 100 ao bloco 200 ela não foi gasta eh Então eu preciso incluir uma coisa nova aqui no hash que me permita verificar isso de maneira eficiente mas se eu fizer isso eu vou quebrar um monte de coisa que já usa o Bitcoin há anos como que eu consigo fazer isso de uma maneira que não quebre nada então aqui na primeira transação de cada bloco

também deixa eu vir aqui eh vamos entrar ali no bloco de volta vamos voltar aqui só a página principal vamos pegar o último bloco do errado eles têm o que a gente chama de cgate que eles conseguiram incluir uma uma informação no uma sem ter que alterar o Block hash como que eles fazem isso primeira transação do bloco quem que cria primeira transação do bloco o minerador é sempre

o minerador que cri essa transação se a gente for ver aqui tem uma saída que tá aqui que é bem interessante que é esse return aqui E esse return ele tem esse PK script que tá aqui se eu jogar esse cara aqui tem o op return e aqui tem o hash da meric Tree então eles incluíram a meric 3 na primeira transação de cada bloco sem ter que alterar tudo isso para quê parece uma gambiarra mas isso aqui é para manter a compatibilidade do Bitcoin Então quer dizer que se você uma coisa que é impossível na etherum e poss no Bitcoin

Se você pegar uma versão do Bitcoin O Bitcoin tenta evitar ao máximo hard Forks ao máximo ele tenta evitar hard Forks então aqui quer dizer você usar uma versão muito antiga do cliente do Bitcoin ele vai olhar para isso aqui e vai falar Ah tá isso aqui é só eh tá um op code normal tanto que a gente consegue ver que tem zero o valor Aqui tá zero dessa utex Então essa aqui é uma utex que tem uma informação indexada nela Então eles conseguiram estender o header do Bitcoin colocando informações na uto então eles incluíram uma merc Tree Aqui tá um header tá aqui sem quebrar compatibilidade com ele então então por isso que eu falei que eh

Quando você vai olhar o Bitcoin tem muita coisa que não faz sentido se você para pensar que eles tão ao máximo evitar que as coisas quebrem ã Ok eh eu sei que eu eu não sei quanto tempo a gente tem ainda eh thago porque eu também não sei se as pessoas já estão cansadas né que eu como eu falei o conteúdo é denso mas tem algumas coisas interessantes como payment channels que dá para falar ainda tem questão de time lock eh hash time Locks Como que você troca bitcoins e Lite coins Como que você payment chs basicamente explica como que Network e assim na teoria at nove mas se tu tiver de boa eu tô de boa se a galera

tiver tranquila a gente já passou um pinho tem até à n é então fica fica por vocês aí se vocês querem saber como que funciona Light network ou se vocês querem fazer perguntas né com tempo que resta aqui é o pessoal tá falando Bora para cima aí ó Opa estão estão inspirados aí Então beleza vamos lá então É bem interessante entender como Light Network Funciona porque o conceito dela não se aplica perm não é uma coisa do Bitcoin é um conceito que dá para aplicar na eum também e é aplicado de fato na eum Ah então né Eh quando vocês ouvem falar do do Bitcoin tá

Payment Channels and Timelocks

eh vocês percebem que as pessoas geralmente falam Bitcoin é caro a finalidade demora 10 minutos mas se eu falar para vocês que você consegue fazer micropagamentos instantâneos do Bitcoin eh vocês vão falar tá eh magia negra o que que é feito então vamos entender aqui como que isso é feito tá hã Então nesse exemplo aqui vamos imaginar que a gente tem hélice e tem um serviço de pagamentos como Netflix perdão um serviço de streaming u Netflix e a hélice ela quer utilizar o Bitcoin para pagar o Netflix só que ela quer pagar por segundo de stream eh assistido

em tempo real Quando eu digo em tempo real não quer dizer que ela vai comprar um minuto e vai assistir um minuto não ela vai assistir um segundo e vai pagar por esse segundo assistido vai assistir um segundo vai pagar por um segundo assistido tudo isso em tempo real Eh vamos ver como que é possível fazer isso no no Bitcoin Ahã Então temos aqui né a blockchain e a gente cria ali o que a gente chama de eh funding transaction tá a funding transaction ela é uma transação em que ela vai pegar lá e ela vai depositar aqui eu chamei de nfx tá que é um token

Mas você pode imagar que é Bitcoin aqui ela foi lá e ela criou uma uma transação multi assinatura como a gente viu o lock script aqui no Bitcoin agora fica fácil entender como a gente consegue criar uma carteira multi assinatura A gente só precisa criar um script que valida duas Chaves públicas em vez de uma tá então eh acho que espero que tenha ficado eh que é bem fácil fazer caras naturas no ã e consequentemente significa que para Ela Gastar esses Fundos que estão nessa carteira ela precisa de uma assinatura do Netflix e da hélice então uma carteira muit dos dois e ela foi lá e ela bloqueou

3.600 bitcoins eh ou sates nessa carteira eh e significa então que precisa da aprovação dos dois para os Fundos serem movidos O que que a Elice vai fazer eh ela vai vai pegar e ela vai criar uma transação que saca dessa aex Zone então você pode imaginar que isso aqui é uma autex Zone multi assinatura que tem duas Chaves públicas e tem esse saldo que tá aqui né então tem duas Chaves públicas nessa oex e ela envia uma transação off chain ela não envia PR blockchain ela não envist pro Bitcoin ela envia off ch pro Netflix uma transação que saca 359

bitcoins para ela e um para Netflix E então é uma transação que tem duas saídas né isso aqui para ela e isso aqui pro pro Netflix então e ela envia essa transação com a assinatura dela então Eh então tem a assinatura dela mas está faltando a assinatura do Netflix para essa transação o Netflix ele vai olhar essa transação vai verificar que ela é válida legal maravilha e ele sabe que ele a qualquer momento pode incluir i a assinatura dele aqui para enviar essa tração para blockchain mas ele não vai enviar o que ele vai fazer é ele vai enviar para hlice um segundo de vídeo um segundo de streaming para ela um pacote de 1

segundo mais a assinatura dele nessa transação Então a partir desse momento tanto a hélice quanto o Netflix eles têm essa transação os dois tem a mesma transação assinada e tá aqui eh e a hélice vai lá e ela vai repetir esse eh processo né então ela quer tá legal se me um segundo de vídeo agora querer o próximo segundo de vídeo ela vai lá e ela vai criar uma outra transação isso aqui é importante essa transação que ela tá criando ela está gastando a mesma utxo que essa aqui é a mesma

significa que se eu fizer broadcast dessa transação só uma das duas vai ser válida porque tem aquela regra que não só uma transação pode usar a mesma aex ela vai pegar agora vai falar agora o seu saldo Netflix é dois é netfli tokens e o meu é menos do né A diferença vai fazer isso o Netflix vai validar vai enviar mais um segundo de vídeo e eles vão essas localmente Quando eu digo localmente é no computador tá eles estão fazendo tud isso aqui é off isso aqui eles estão mandando via rede e não via blockchain transação e ao final tá eles vão repetio

esse processo e digamos que ao final a el assistiu a 45 minutos de streaming então Ela assistiu 45 minutos de streaming resultando em 2700 transações significa que temos 2700 ações aqui que elas foram assinadas que os dois t aqui acesso mas que não foi envi blockchain né ao final a ela deci que ela terminou de assistir aos vídeos e ela cria o que a gente chama de S transaction que é o a transação final no final eu assisti a tantos segundos Netflix 2700 segundos e sobrou tantos tokens da minha funding

transaction eh e acabou não sei se deu para entendeu o que aconteceu aqui aconteceu que só teve duas transações da perspectiva do Bitcoin na blockchain a hélice ela pagou por a hlice ela pagou por duas transações ela pagou pela funding transaction que ela enviou no começo e pagou pela set transaction que termina e nesse meio tempo offin teve mais de 2700 transações que aconteceram eh esse modelo aqui tá eh por mais que ele seja simples ele tem algumas alguns

problemas que nada previne a hélice de gastar né nada previne a hélice de lá e gastar esses tokens eh antes por exemplo eh eu ela ir lá e submeter a primeira transação sabe essa aqui por exemplo que ela tem um fundo maior tipo que que que previne ela de jogar essa transação né em vez de jogar outra por exemplo a a outra questão é que o Netflix também consegue ferrar a hélice o Netflix ele pode vir aqui criar uma carteira multi assinatura E aí sumir

E se ele sumir a hélice ela não consegue gastar os Fundos dessa carteira porque ela Obrigatoriamente prisa assinatura do Netflix então esses Fundos que estão aqui eles vão ficar perdidos para sempre e eh então tem essa vulnerabilidade vem eh então são então basicamente o protocolo da Bandeira que eu descrevi aqui eles precisam confiar um nos outros para funcionar é possível e que eu vou mostrar a seguir transformar is aqui no protocolo trustless né Eh a maneira que isso funcionaria então a gente tem aqui a hélice e ela não pode arriscar ter os Fundos bloqueados então

o que que ela vai fazer ela vai enviar ela vai criar uma fund transaction e ela vai enviar pro Netflix uma refund transaction e essa refunding transaction é basicamente eh uma transação que que permite ela recuperar os Fundos dela e ela tem um time Lock isso é uma coisa que não existe na eum tá se a gente olhar as transações do Bitcoin Deixa eu só pegar um exemplo que eu tenho pronto aqui e eles têm um parâmetro chamado n loock esse n loock ele diz que uma transação ela só

pode ser válida depois de um bloco x Então quer dizer que nenhuma se eu Digamos que o bloco atual é o bloco 1000 e eu coloco um n loock de 10000 significa que os mineradores são proibidos de incluir essa transação antes do bloco 100 eh é um Field aqui da transação deixa eu pegar aqui no exemplo chamado é n loock tá isso aqui é um script que ele basicamente decoda uma transação que eu tenho aqui e a gente consegue ver esse Lock time que tá aqui na verdade a gente consegue ver até na própria blockchain do Bitcoin qualquer transação que tá aqui tem esse time que tá aqui

isso aqui é a partir de qual transação que meu bloco ele é válido e depois disso antes disso el não pode ser incluído tá então componente da transação consequentemente você pode imaginar que isso aqui é como se fosse um cheque ia da hélice isso aqui é como se fosse um cheque que ele só pode ser compensado Daqui uma semana por que que isso que é importante significa que pra hélice antes dela bloquear os Fundos Ela já tem uma garantia que se o Netflix desaparecer Daqui uma semana ou dois dias ela consegue recuperar os Fundos dela tá então ela tem essa garantia que tá aqui e o Netflix tem uma garantia que

a Elice não consegue não consegue recuperar os Fundos dela Antes desse tempo que tá aqui então ela vai assistir um streaming Beleza ela vai assistir um streaming hoje ela não vai levar duas semanas para assistir o streaming e a Elice Então ela sabe que ela não vai perder os Fundos dela então ela envia essa transação primeiro pro Netflix ou esse Lock time eh e a partir daí que ela cria fund transaction Então só agora que ela vai permitir o n ela vai criar essa transação que tá aqui que bloqueia os Fundos dela com Netflix e ela tem uma garantia que se o Netflix desaparecer ela consegue recuperar oos Fundos só que agora tem um segundo problema né Então ela tá atualizando o saldo dela com Netflix mas o Netflix ele

também ele precisa de uma garantia que a Elice ela não vai eh gastar o ela não vai tipo submeter a transação que beneficie ela mais a tração que beneficia ela mais é a tração que ela tem um maior saldo como que eles fazem isso a cada transação enviada eh que atualiza saldo ela decrementa o time Lock então Dando um exemplo seria que a funding transaction que a elc ela saca os Fundos dela estamos agora no bloco 1000 ela só pode executar essa transação no bloco 2000 então tem 1000 blocos de buffer ali que ela não consegue executar essa

transação ela envi uma transação atualizando o saldo do Netflix para um e ela decrementa o time Lock significa que essa transação vai passar a ser válida a partir do Bloco Eh 1999 Então quer dizer que essa transação que tá aqui ela consegue ser executada antes da transação que recupera os fundos da hélice e ela vai continuar fazendo isso vai continuar fazendo isso vai continuar fazendo isso e cada transação subsequente ela decrementa o time Lock dela consequentemente eh a maneira como isso aqui funciona É como se a a transação mais recente pudesse sobrescrever a transação anterior sem eu

ter que fazer um broadcast dela para blockchain né então porque a transação mais recente ela é válida antes né na na eh e aí então a Elice Ela assistiu E aí no final das contas né ela terminou de assistir o Ch de streaming e Ela Quer recuperar os fundos da dela e o Netflix Quer recuperar os Fundos dele eles não querem ter que esperar o time loock pirar o que que eles fazem os dois eles pegam o valor final que tá ali né falei ó terminei de ver meu streaming beleza os dois juntos vão lá e criam uma transação com time Lock zero Ou seja que pode ser feita o broadcast agora eh consequentemente a Alice e o Netflix

não precisam mais confiar nos outros para fazer transações eh chain eles só eles só precisam estar monitorando a blockchain e saber que tipo Eles precisam terminar essa transação antes do prazo estabelecido aqui esse modelo ele ainda tem alguns problemas tá eh que são solucionados na eh na Light Network eh aqui a gente tá falando de um time loock a gente fala de absoluto quando a gente fala absoluto é esse time loock expira a partir do bloco 10.000 20.000 eh existem no Bitcoin O que a gente chama de relative time loock ou seja

time loock relativo quer dizer que é um time loock a gente consegue colocar na transação que ele só é válido a partir do momento que a transação foi executada Então seria algo parecido com eh tem até um exemplo aqui que vai ser interessante do do Rec recover aqui aqui é um exemplo bem interessante é digamos que eu você tem você tem sua esposa e vocês têm uma conta conjunta essa conta conjunta eh vocês armazenam Fundos ali e precisa da autorização de vocês dois para mover os

Fundos dessa conta só que o que acontece se por exemplo uma de um dos dois perder a chave ou se acontecer alguma coisa que o outro vai perder os Fundos então é é possível a gente colocar aqui o que a gente chama de time Lock relativo esse time Lock relativo ele é um valor que ele assume a partir do momento que o que a transação é incluída em um bloco Então quer dizer que essa transação ela foi incluída no bloco 6.000 então eu consigo falar assim ó a partir do bloco que essa transação foi incluída mais 1000 blocos eh a pessoa consegue só um dos dois pode mover os

Fundos tipo Então antes de 1000 blocos precisa dos dois para mover os Fundos se levar mais que 1000 blocos ou sei lá três meses um ano e ninguém mexe nessa carteira só precisa de um dos dois para mover os Fundos Então você consegue criar regras baseadas em tempo né Então a partir de tal tempo você faz tal coisa seria o equivalente a você usar o Block Number para fazer algumas ações no smart Contract eh na ethereum ah usando a o bloco atual como referência então a light Network conseguiu eliminar esse problema de bloco absoluto usando blocos relativos com a introdução da revocation Key que basicamente você permite a hélice fazer

um broadcast de uma transação que eh permite ela recuperar os fundos mas ela vai perder os Fundos se ela deu uma revocation que pro Netflix né em suma em suma ela antes deles atualizarem o próximo estado ela dá a chance do Netflix poder roubar os Fundos dela se ela tentar roubar no protocolo né então basicamente utiliza teoria dos jogos eh o eu coloquei algumas referências aqui no slide tá Caso vocês queiram ver bem a fundo como que funciona tá os detalhes Capítulo 14 do livro Bitcoin book que essa questão do payment

channels e a gente consegue ver por que isso aqui é tão poderoso né porque aqui o custo que eu tenho para executar uma transação é custo de rede essa transação não parece na blockchain então quantas transações consigo executar Network quanto seu internet permite executar eh o porque no final das contas a blockchain só vai ver duas transações a funding e a sellum transaction ah eu perdi o o chat aqui deixa eu só abrir de volta eh ui muito rápido deu para pelo menos entender alto nível como que funciona deixa

Dúvidas

só Maravilha perfeito eh acho que a gente já tá né bem próximo do final do horário acho que eu vou deixar aberto para perguntas sei que todo mundo tá meio cansado e muito obrigado eh de novo thago pelo convite Opa que isso só uma pergunta rapidinho Eh quantos quantos temas aí tipo teriam ainda para assim que você acha interessante evocation que você comentou agora no final htlc é htlc é como que você faz para porque PM é aplicação disso que você falou né não é

o é utiliza alguns conceitos é o o payment Channel é para você ter transações baratas para eu conseguir transferir bitcoins de a para B sem ter que pagar taxas absurdas e instantaneamente né Eh que utiliza o light client do desculpa a light Network do Bitcoin em soma eh o hash time Lock contracts é como que você consegue trocar bitcoins por etherum sem você precisar por exemplo confiar na pessoa que você tá trocando você consegue fazer uma troca de Atomic Swap né uma troca atômica uma blockchain que não tá no Bitcoin se você precisa confiar num terceiro para essa

troca e ISS aqui é uma outra aplicação bem comum do do Bitcoin e muitas assinaturas toop são esses dois outros conteúdos que tem disponíveis aqui que eu preparei algo acabei não tendo tempo de colocar sobre runes aqui né foi uma coisa que eu acabei comentando ali mas quando eu vi que já tava com mais de 110 slides eu falei ok Acho que até aqui tá bom deixa eu ver quantas pessoas sobraram aqui Sobreviventes Ah tem até bastante

gente o mesmo mesma quantidade de gente que começou V isso é muito legal muito maneiro bom Espero que tenham eh esclarecido eu acho que né esse Talk aqui sobre # contas acho que dá pra gente e que esse aqui é bem extenso também né a gente pode até talvez no futuro marcar um segundo tal que eu tenho bastante material aqui sobre como eu trabalho né com croch Bridge Isso aqui é uma das técnicas de você conseguir teleportar Token de a para B né você devem ter ouvido falar de Rapid ethereum é Rapid Bitcoin eh como que isso funciona então são técnicas

criptográficas que a gente utiliza para conseguir fazer ISO de maneira segura e descentralizada então isso aqui é é uma dessas técnicas né Ok deixa eu parar de compartilhar aqui minha tela colocar ch aí é tá hã deixa eu ver aqui quem que mandou a pergunta um pouco complexo isso é eh a parte de Light Network é bastante complexa mas basicamente você consegue criar regras que a pessoa não consegue roubar né pelo pelo fato de você condicionar a

execução de uma transação ao bloco que ela é incluído ã o Danilo perguntou o que você acha do bit VM Eu já ouvi falar eh Danilo do bit VM tem várias propostas para você conseguir trazer o que a gente fala de linguagens de programação avançadas para eh pro Bitcoin e inclusive Isso é uma das das pessoas criticam muito né eu não consegui fazer um Smart cont tão avançado no Bitcoin mas o ponto é que o Bitcoin ele é bom para uma coisa ele é para pagamentos se e eh existe bastante resiliência na no mundo do Bitcoin você conseguir trazer

que a gente fala de tur in complete Smart contracts como a bit VM para ele Exatamente porque isso pode aumentar a o custo da transação para pagamentos né e o Bitcoin ele quer ser bom em uma coisa não em várias Ahã mas e eu confesso que eu não tive oportunidade de olhar a fundo a proposta do bvm mas eu já vi outras propostas no mesmo eh patamar ali né o opat é uma delas né permite contas mais avançados permite pagamentos mais avançados mas também e é perigoso porque você pode acabar fazendo com que as pessoas usem o Bitcoin para um propósito que ele não foi criado né a gente não quer criar nft

no Bitcoin O Bitcoin ele é para pagamentos é esse é o ponto do a do pessoal né tanto que o Bitcoin ele ajuda tanto a etherium ajuda muito o Bitcoin quanto o Bitcoin ajuda muito etherum na questão de liquidez né Eh De reserva De valor eu acho que o Bitcoin ele é muito superior na questão de arquitetura para pagamentos comparado a arquitetura de outras blockchains que tem um foco diferente ã consegue terminar os slides a explicação está incrível eh eu vou eu vou acabar finalizando nesse slide aqui porque esse conteúdo que tá aqui ou eh ele é bem mais denso que os outros assim eu acho que não

conseguiria explicar ele em menos de uma hora é eu imaginei e p já fica aberto uma parte dois Vel assim ah pô foi bom demais o pessoal já falou até que você perguntou se era para continuar todo mundo falou que vamos vamos eh pô vamos com certeza fazer uma parte dois e eu particularmente quero ouvir muito você falando de de gtlc que é uma parada que eu já estudei assim no passado mas V de você vai ser bom deis mais e é isso o Daniel fez uma pergunta também aí Daniel quando vai executar o ser Qual a transação que ele usa como entrada a a founding transaction é sempre a

founding Então deixa eu só compartilhar a tela aqui de volta ah vamos lá payment channels então tem aqui a founding transaction todas as transações né que a gente chama de commitment transaction que são as acontecem entre a founding e a sment todas elas referenciam a founding transaction todas elas utilizam a essa Tex aqui então isso quer dizer que se eu fazer um BR transações apenas uma delas vai ser válida incluindo aent aent é simplesmente uma Wi Draw transaction nesse primeiro modelo

que todas elas gastam a founding todas elas estão aqui gastam a founding exceto que por que a gente chama de sment faz mais sentido aqui nesse modelo que ela é a única transação que não tem um time Lock então ela não precisa você não precisa esperar ela para você gastar a found trans então aqui no começo dessa chain aqui a gente tem a founding né A founding transaction tá eh e todas essas transações estão aqui tá elas não tão não tá tipo uma gastando a outra tá eh talvez tenha ficado meio estranho nesse exemplo mas todas elas estão gastando a founding todas estão gastando a mesma consequentemente por

mais que eu tenha 20.000 transações aqui 10.000 milhões de transações aqui apenas uma delas é válida se eu fazer broadcast dela na blockchain Ah isso esclarece essa dúvida deixa eu perdi o chat aqui de novo deixa eu encontrar Opa obrigado Yuri bom bom saber que temo esclarecedor para vocês eu queria mostrar um pouquinho de código também como você cria uma transação como você usa o Bitcoin client Como que você cria o Smart Contract mas e é bem mais técnico eu uso Rust eu não sei se todo mundo aqui programa em Rust Então pode acabar

ficando eh não não ficar um conteúdo tão atrativo para todo mundo né porque você pode usar você pode usar C pode usar Rush pode usar PHP pode usar o que você quiser para programar em criar um client né que você cria transações no Bitcoin eh eu uso Rush por isso que eu não mostrei aqui para vocês um pouquinho mais de código boa o Rodolfo colocou no quando você tava falando do bit VM lá que o Dan tinha perguntado se RS seria um caminho ele botou aqui no chat também deixa eu não encontrei essa mensagem aqui no

chat foi o Danilo que postou legal que acha do bit não depois Daniel depois já você respondeu agora não sei se consigo Ah tá achei aqui do do Rodolfo né isso eh eu confesso também Rodolfo que eu não eh olhei também muito a fundo mas eh eu estudei algumas tecnologias tá de escalabilidade eh do Bitcoin mas a bit VM e rsk né não está entre elas vou ficar te devendo Esse é um parecer sobre esse eh mas assim n da minha experiência né todo ano tem uma tecnologia nova todo

todo ano tem alguém tentando trazer smartc pro Bitcoin todo ano tem uma tecnologia nova e eh opcat é uma das mais antigas e eh geralmente tem uma resistência exatamente por questão de foco né a gente prefere fazer uma o Bitcoin prefere fazer uma coisa bem feita do que tentar fazer um pouquinho de tudo mas uma parte dois né Se for um assunto interessante eu posso dar uma estudada ali e trazer para vocês