Loading

Module 1: Mecânica de Bloco

Nota de Estudos
Study Reminders
Support
Text Version

Bitcoin Scripting Language

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Introdução à Tecnologia de Blockchain e Aplicações Prof. Sandeep Shukla Department of Computer Science and Engineering Indian Institute of Technology-Kanpur  
Palestra No. 10 Blockchain Technology and Applications  
Bem-vindo de volta. Então estávamos discutindo a linguagem de scripting bitcoin e terminamos dizendo  
que a linguagem de script bitcoin não está se turing completa. E o que isso significa é que não podemos  
expressar funcionalidades arbitrárias com linguagem de script bitcoin, coisas muito, simples podem ser  
apenas expressa com tal, você sabe, linguagem restrita. Agora, o que aconteceu é que nós  
foram quando os usuários do bitcoin viram isso, as limitações disso.  
Então os caras do Ethereum entraram, e disseram que nós precisamos de um   muito mais expressivo  
linguagem. Por isso, criaram uma nova linguagem chamada solidez. E em athereum, eles começaram a usar  
solidez para escrever este tipo de funções complexas. E aqueles são chamados de contratos inteligentes. Então  
contrato inteligente, os scripts do bitcoin são realmente precursores de contrato inteligente.  
(Consulte O Tempo De Deslizamento: 01 :13)  
E nós, veremos em poucos dentro de alguns slides, que o script bitcoin, apesar de ser muito  
restrito, ainda pode expressar uma série de coisas que são muito úteis e interessantes. Mas antes  
que, vejamos o que a execução do script bitcoin parece. Por isso, digamos que eu tenho isso depois  
concatenando, o script da CIG. E então há uma chave pub de script, eu tenho isso para que esta parte seja  
realmente parte do script SIG.  
E esta é a chave pub script e nós os concatenamos para que este seja o meu script completo  
e eu quero executar isso em uma máquina baseada em pilha. Então o que acontece é que o, este agora um  
coisas que são expressas com os colchetes angulares são dados porque este é apenas um apenas um  
exemplo de protótipo. Por isso, não tínhamos dados reais aqui no caso real, haverá um  
assinatura ali será uma chave pública que será realmente dados.  
E, portanto, e isso também serão dados e instruções de registro. Então, sempre que estamos vendo  
esses colchetes angulares, esses são dados. Assim como eu disse que quando encontrei dados enquanto  
executando, eu os empurrei em cima de uma pilha. Por isso, olhemos para a pilha. Então quando eu encontrei  
empilhar, colocarei isso na pilha. Agora a seguir, eu vejo que há um outro pedaço de dados então eu tenho  
para colocar isso em cima disso. Então eu vou colocar que também em cima da pilha, a pilha cresce.  
Agora encontrei um OPT de instrução para cima, então, quando vejo OPT up, o que ele faz é duplicata  
a parte superior da pilha, portanto, quando ela duplicar a parte superior da pilha sem remover o que estava em  
topo da pilha, algumas instruções removem a entidade em cima da pilha, mas a OPT up  
basicamente mantém a entidade em cima da pilha. Então ele cria outra cópia dessa chave e nós  
vai entender muito em breve por que ele fez isso.  
Agora, o próximo é outra instrução esta instrução está dizendo que hash seja o que for no  
topo da pilha. Então, vai hash essa parte de cima da pilha. Então, e este substitui o que  
estava em cima da pilha. Então agora temos o hash da chave pública na parte superior da pilha.  
Agora, encontrei outro dado. Então eu coloquei em cima da pilha. Então eu tenho agora esses dados e  
esses dados. Em seguida, tenho outra instrução que diz a equivalência verificar.  
Então, o que significa que levam os 2 principais elementos da pilha esta semântica de instrução é que você  
leve os 2 elementos sobre a parte superior da pilha e verifique se eles são iguais. Se eles forem iguais, então  
você irá ele retornará true, o que significa que aquelas 2 coisas desaparecerão da pilha, mas  
nada será empurrado sobre a pilha. Então, agora, eu fiz isso. Então agora eu tenho apenas o público  
chave e a assinatura.  
E então encontrei a próxima instrução que diz, confira a assinatura. A assinatura é  
feito com a chave privada então se esta chave pública é a chave pública correta para esta chave privada,  
então nós estaremos obtendo uma verificação caso contrário a verificação falhará. Portanto, se assumindo que  
a verificação passa, então ela vai ser pilha vazia ou será tudo verdade. E então eu tenho  
conseguiu executar este script inteiro.  
Agora, vamos ter um olhinho para isso um pouco mais de perto. Então o cara que está gastando o  
dinheiro ele faz uma assinatura e ele nos dá chave pública porque sem a chave pública um  
não pode mudar, verifique a assinatura. Então ele dá a sua chave pública. Agora se os usuários quiserem, eles  
pode verificar de outros lugares, porque a chave pública é uma informação pública de que este é realmente o seu  
chave pública. Então ele coloca a chave pública, e ele assina com a chave privada.  
Assim, esta é a parte de entrada da transação dá a parte de saída da transação é suposta  
para apenas lhe dar o hash de chave pública, da pessoa que deve receber o dinheiro. O que ele  
faz é que eu vou verificar se este hash de chave pública corresponde com a chave pública  
do destinatário. Então, para isso, o que eu vou fazer é que eu vou duplicar o público  
key, e então eu vou fazer um hash e eu vou comparar.  
E então eu vou verificar a verificação da igualdade e se eles combinam então nós sabemos que  
este é o hash correto, e então eu vou verificar a assinatura, eu tenho a chave pública do  
assinatura, para que eu possa conferir a assinatura. Então, é assim que essa coisa de fato se certificar de que o  
spender do dinheiro é realmente o spender correto tem a autoridade para gastar esse dinheiro.  
(Consulte O Tempo De Deslizamento: 06 :26)  
Agora, lembre-se, uma coisa que eu esqueci de dizer é que você realmente toma a, esta parte assim quando  
você coloca junto isso, você tira isso da sua transação atual e esta parte você tira de  
a transação anterior. Por quê? Porque veja, esta é a transação atual de peça na entrada  
parte eu coloquei isso eu assinei e esta é a na parte de saída da transação anterior, que eu  
estou tentando usar.  
Então, esta não é a saída da transação atual. Esta é a saída do   anterior  
transação. E esta é uma transação que está sendo usada para como entrada e esta parte é  
a partir da entrada so na entrada coloquei minha assinatura dizendo que estou me referindo a so responder  
transação em que tanto e assim a saída 0 ou 1 ou 2 seja o que for eu vou resgatar. Então, o que  
isto tem que fazer é que ele tem que tirar essas saídas correspondentes da transação anterior  
saídas correspondentes, chave de script de script de saída e, em seguida, concatená-las juntas.  
Então, não é que a entrada desta e da saída da corrente uma nossa entrada e saída do  
transação atual são concatenadas é a parte de entrada da transação atual e esta parte  
nesta parte é proveniente da saída da transação referida na entrada. Então, isso é muito  
importante caso contrário você será confundido quando nós quando você tentar entender esta parte. Então,  
esta é a forma como a execução acontece. Por isso, é completamente baseado em pilha.  
(Consulte O Tempo De Deslizamento: 08 :03)  
E o script script bitcoin instruções de 8 bits de comprimento. E assim há 2 para o 8 que é 256  
diferentes opcodes possíveis. Mas agora há 15. É claro que eles não são usados, eles são  
deficientes, e 75 são reservados, mas esses opcodes ainda não deram nenhuma funcionalidade. Então, fora  
de 256, você subtrava 90, assim você tem 166, possíveis opcodes. Por isso, alguns dos opcodes são apenas  
aritmética. Em nosso exemplo, ele não viu nenhuma aritmética.  
Também alguns se então algum manejo de dados lógicos e funções criptomoedas como hash computação hash,  
verificando a assinatura, e verificando a assinatura múltipla, coisas assim. Então é isso que o muito,  
linguagem simples e pequena.  
(Consulte O Tempo De Deslizamento: 08 :55)  
Então o multi SIG é um importante opcode so, o que ele faz é que especifica n chaves públicas e  
especificar um número T e se você deseja verificar assinaturas conjuntas, você registra que t delas  
deve verificar. Então, nem tudo em necessariamente tem que estar assinando para verificá-lo mas pelo menos 80 deles  
deve verificar. Agora se você especificar TSN então você exigiria que todas as entidades em entidades assinem o  
transação para que a transação seja válida.  
Agora, há um bug que estava lá e no começo de que havia um valor de dados extra  
que é estourado da pilha e ele é ignorado quando o up multi SIG é executado. Lembre-se,  
cada opcode quando nós quando eu obtenho o opcode eu muitas vezes fico com a parte superior da pilha ou 2 toppings em  
a pilha são 3 toppings na pilha e usá-la para executar a instrução. Mas, neste caso,  
eles desnecessariamente estouram outro valor extra. E, portanto, quando você escreve seu script, você  
tem que adicionar que repetir esse valor de dados que isso fica desnecessariamente estourado, que é um  
annoyance, mas pode ser feito.  
(Consulte O Tempo De Deslizamento: 10 :22)  
Então, na prática, a maioria dos nós whitelist scripts conhecidos com 160 bits ou so opcodes, você pode escrever  
muitos, muitos scripts, alguns deles realmente foram provavelmente sem sentido. Mas você pode escrever um lote  
de scripts. Alguns dos scripts são talvez maliciosos fazendo algo que você não iria querer  
fazer e você não sabia que ele é malicioso. Então a maioria dos nós o que eles fazem é que eles  
whitelista uma série de scripts.  
E se o script se algum script padronizar de seu conjunto de scripts whitelisted, então eles realmente  
nem sequer validou a transação e declarou a transação a ser inválida 99,9% scripts  
são realmente assinatura simples check the one que vimos. E executamos nos slides. E  
cerca de 1 em 100 é o script MULTISIG. E há outra coisa chamada paga para hash de script que  
discutiremos em breve. Essa é outra parte outro tipo de roteiro que vemos cerca de 100. E  
então, restos ou erros e algo chamado prova de queimadura, assim também veremos o que isso  
meios.  
(Consulte O Tempo De Deslizamento: 11 :31)  
Assim, a prova de queimadura é uma instrução. Então o que é uma queimadura? Burn significa que você está queimando  
dinheiro. Então, se você pegar algum bitcoin como insumos, e então você diz isso, mas você não especificou  
quem o obtém, mas o script executa, então esse bitcoin torna-se irrelevante, irremediável qual  
significa que você não pode redimi-lo nunca mais. Porque depois de tê-lo usado como entrada, você  
não pode usá-lo como entrada para outra moeda.  
Por outro lado nesta transação, você não criou uma saída. Assim, você não pode se referir a  
essa saída para fazer a próxima transação. Para que aquele bitcoin vá, mas você não sabe em lugar nenhum assim,  
ninguém pode usá-lo. Então, dizemos que queimamos essa quantidade de bitcoin. Então, por que  
Eu preciso fazer isso? A razão é que a forma como a prova de queimadura acontece é que você aí é um  
opcode chamado op return que retorna sem erro.  
Agora, dissemos que se quando eu executar o script na máquina baseada em pilha, então se eu não tiver  
erros, então presumimos que a transação é válida. Então, neste caso, a entrada vai embora, mas  
a saída não se foi não está indo para qualquer um. Por isso, portanto, o dinheiro se foi. Mas  
o que acontece é que operador é tal que qualquer coisa escrita depois que o operador é ignorado,  
porque operado basicamente retorna o script da execução.  
Então, você pode arbitrar dados após o operador e então a transação será válida e então  
esta transação será eventualmente entrar em um bloco e tornar-se-á permanente no  
blockchain. Então, se você quer manter alguns dados para sempre no blockchain então você usa um  
prova de queimadura você paga uma quantidade muito pequena de bitcoin talvez 0,00001 quantidade de bitcoin  
queimá-lo e, em seguida, basicamente h os dados para sempre em um dos blocos.  
Então, muitas vezes você vai ouvir que as pessoas hoje em dia estão dando como seu certificado de curso em  
o blockchain em bitcoin, é assim que isso é feito. Esses dados sobre seu certificado serão  
realmente gravada em uma transação usando uma prova de transação de burn e então ela estará em alguns  
bloco e assim, se alguém quiser no futuro quiser verificar se você tem o certificado, eles  
pode realmente ir para o blockchain do bitcoin e recuperar essas informações.  
E como isso é suposto ser não temporal e supostamente ser permanente, então este é um  
prova de que você realmente conseguiu o certificado e não forjou o certificado. Então é assim que  
isto é feito.  
(Consulte O Tempo De Deslizamento: 14 :17)  
Então, há uma outra questão que vimos que o script que vimos como a chave pub script foi  
bastante longa e não muito longa, mas foi longa e tem várias instruções e valores de dados  
nos lugares e assim por diante