130 / 736CSV

CSV

Esperar desde a confirmação de moedas específicas

Às vezes você quer esperar que as moedas passem certo tempo na cadeia, em vez de aguardar uma data fixa. CSV ajuda a impor esse intervalo. A contagem não começa ao criar uma carteira nem ao assinar um pagamento.

CSV abrevia OP_CHECKSEQUENCEVERIFY em Bitcoin Script. Com BIP 68, permite um bloqueio relativo: um caminho de gasto só fica disponível quando a saída confirmada tem idade suficiente. Uma saída é uma quantia recebida com condições de gasto. Esperar não substitui a assinatura nem envia dinheiro.

Anna e Pedro podem gastar de comum acordo as moedas que guardam juntos. Também querem um caminho de recuperação que Anna use sozinha, mas apenas após um intervalo contado desde a confirmação da saída correspondente. CSV ajuda a impor essa condição. Ao contrário de CLTV, que aponta para uma altura ou um horário fixo, seu limite não é um ponto predeterminado de todo o histórico. Depende de moedas específicas. Criar uma carteira, preparar uma assinatura ou deixar uma transação sem confirmação esperando não substitui esse início. Uma carteira é um aplicativo ou dispositivo para receber e enviar bitcoins. [1] [2] [8]

Um bloco reúne transações em um lote acrescentado ao histórico compartilhado. A altura de um bloco indica sua posição na cadeia. Imagine uma saída confirmada na altura 900000 e um intervalo obrigatório de 10 blocos. Para esse bloqueio, o primeiro bloco possível para gastá-la é 900010. Um intervalo de apenas 9 blocos não basta. Isso não promete uma quantidade exata de minutos: os blocos não chegam em intervalos regulares. Ter idade suficiente também não equivale à confirmação do pagamento. A transação precisa ser válida nos demais aspectos e um minerador deve realmente incluí-la em um bloco. [2] [4] [9]

O intervalo também pode ser codificado em passos de 512 segundos. O código 2 representa então 1024 segundos. Mas não se comparam dois relógios de computador. O início é o Median Time Past do bloco anterior ao que confirmou a saída; a outra ponta é o Median Time Past do bloco anterior ao candidato. Trata-se do horário central dos últimos até 11 blocos depois de ordenados. A diferença entre essas medianas precisa atingir o intervalo exigido. Não é um alarme exato pelo horário local. [2] [4] [7]

Uma carteira pode combinar várias quantias recebidas antes para fazer um pagamento. Cada entrada da transação aponta para uma saída recebida anteriormente, cuja idade é contada desde a confirmação na cadeia. O campo nSequence pertence à própria entrada. Esse campo contém a informação usada para a espera relativa. Não basta que só parte do dinheiro tenha idade suficiente: todos os bloqueios aplicáveis à transação devem ser satisfeitos. Uma reorganização da cadeia também pode mudar o ponto de confirmação. Por isso, ter sido possível gastar antes não é uma propriedade irreversível da moeda. Em uma reorganização, a rede adota outro ramo válido da cadeia, substituindo parte do histórico anterior de blocos. [2] [4] [9]

Um Full Node verifica as regras por conta própria, com checagens relacionadas. CSV, conforme BIP 112, compara o argumento do script com nSequence da entrada que gasta a saída. Ele não calcula a idade sozinho; BIP 68 faz isso na validação da transação. Para um argumento comum sem o sinalizador de desativação, a versão da transação deve ser pelo menos 2 e o bit 31 de nSequence deve estar desligado. Um bit é um pequeno interruptor dentro de um campo numérico. Um argumento negativo, uma versão anterior ou um nSequence incompatível fazem a checagem falhar. [1] [2] [3]

O bit 22 determina como interpretar o intervalo. Desligado, indica blocos; ligado, indica passos de 512 segundos. O argumento do script e nSequence precisam usar o mesmo tipo. Pense em comparar medidas: um número maior não basta se um lado conta quilômetros e o outro horas. Aqui, a incompatibilidade é entre uma quantidade de blocos e um intervalo de tempo. [1] [2] [3]

Os 16 bits inferiores carregam a duração. A máscara 0x0000ffff seleciona essa parte do campo numérico. CSV compara essa parte junto com o tipo de intervalo; não considera qualquer nSequence grande como uma espera maior. Depois de selecionar os bits relevantes, a exigência do script não pode superar o valor da entrada. É um limite técnico importante para quem desenvolve carteiras. O usuário comum não deve configurá-lo manualmente sem entender o procedimento completo. [1] [2] [3]

Um intervalo zero não acrescenta espera, mas as outras checagens do CSV comum continuam valendo. Outro caso ocorre quando o próprio argumento não negativo do script tem o bit 31 ligado. CSV se comporta então como NOP, uma instrução sem efeito sobre o bloqueio relativo. Esse argumento não impõe espera. É preciso distingui-lo do mesmo sinalizador em nSequence da entrada: com um argumento comum, o sinalizador da entrada deve estar desligado. [1] [3]

Se o caminho de recuperação de Anna exige sua assinatura, ela precisa fornecê-la mesmo após o intervalo. A chave privada é um valor numérico secreto usado para criar essa assinatura. Uma chave privada perdida não reaparece, e outro ramo ainda pode permitir gastar antes. Ao executar o script, CSV deixa seu argumento na pilha, um espaço de trabalho com dados empilhados; por isso OP_DROP costuma vir depois para removê-lo. Remover esse dado não autoriza ninguém a pegar o dinheiro. As assinaturas e as demais condições do caminho escolhido é que determinam isso. [1] [3] [5]

BIP 112 introduziu CSV no lugar de OP_NOP3, junto com BIP 68 e BIP 113. É uma função ativa, não apenas um plano. Seus usos incluem canais de pagamento da Lightning Network, nos quais um intervalo pode dar à outra parte tempo para reagir; ele não providencia a reação. Depois da espera, a transação ainda precisa ser transmitida e confirmada. Taxas, dados disponíveis e o estado da cadeia continuam importando. Bitcoin Core v29.0 e as especificações indicadas documentam as verificações. [1] [2] [6]

Para ter uma visão mais completa, leia este verbete junto com CLTV, Opcode, Timelock, Bitcoin Script, Bitcoin, Full Node. Também há referências a este verbete em Confirmação, Timelock, HTLC, Opcode.

DOC · 001BIP 112 — OP_CHECKSEQUENCEVERIFYEspecificação DOC · 002BIP 68 — Relative lock-timeEspecificação DOC · 003Bitcoin Core v29.0 — Script interpreterDocumentação DOC · 004Bitcoin Core v29.0 — Transaction sequence locksDocumentação DOC · 005Bitcoin Developer Reference — TransactionsDocumentação DOC · 006Bitcoin Core 0.12.1 — BIP 68/112/113 release notesDocumentação DOC · 007BIP 113 — Median time-past lock-time calculationsEspecificação DOC · 008BIP 65 — OP_CHECKLOCKTIMEVERIFYEspecificação DOC · 009Bitcoin Developer Guide — Block ChainDocumentação
Revisto em: Fontes em primeiro lugar · Não é recomendação de investimento