O código de operação nSequence é um sistema que permite bloqueios de tempo em Bitcoin. Nos ajuda a programar certas condições nas transações que devem ser atendidas em primeiro lugar, para que essa transação possa ser aceita definitivamente na rede. Um enorme poder de programação que o Bitcoin nos oferece para um grande número de casos de uso.
Unão de time locks ou TimeLock mais particular de Bitcoin es nSequence. Este é um bloqueio de tempo relativo operando no nível da transação e isso permite o uso dos números de sequência de entrada para programar um bloqueio de tempo no Transações Bitcoin.
NSequências permitem que uma entrada especifique a primeira vez que pode ser adicionada a um bloco. Ou seja, impedem a confirmação de uma transação até que tenha decorrido uma certa idade nas saídas da transação. Essa idade pode ser medida em blocos confirmados ou no tempo decorrido.
Da mesma forma, nSequences permitem a criação e programação de várias condições de tempo na mesma transação de Bitcoin usando Bitcoin Script. As quais, apesar de diferentes, estarão relacionadas entre si, devendo ser integralmente cumpridas para que a transação seja validada e incluída em um bloco do blockchain. Caso todas as condições estabelecidas não sejam atendidas, a transação simplesmente não pode ser validada. Portanto, esta transação será rejeitada pela rede.
Como funcionam as nSequences?
Os nSequence eles usam apenas 18 bits dos 32 bits disponíveis no campo de sequência de cada transação. Isso mantém os 14 bits restantes em reserva para implementações futuras. Então o nSequence é um dos bloqueios de tempo ou TimeLock mais leves que existem na rede Bitcoin.
Da mesma forma, dos 18 bits que usam, 16 bits são usados para configurar os tempos de bloqueio. O que torna esses bloqueios de tempo limitados a um total de 65.535 unidades de bloco disponíveis. Ou a um tempo de 18 horas, o que equivale a 64.800 segundos.
Portanto, embora inicialmente as nSequences tenham sido implementadas para permitir a modificação de transações dentro do mempool bitcoin. E permitir a substituição de uma transação antes de ser finalizada ou confirmada. Quer dizer, eles são usados atualmente como um tempo de bloqueio relativo. Isso evita que uma transação seja extraída até que as condições estabelecidas sejam atendidas. Essas condições podem ser um intervalo de tempo definido ou uma altura de bloco. Isso se aplica mesmo quando suas assinaturas digitais são totalmente válidas.
Nesse caso, se o valor de nSequence é maior que 0xEFFFFFFF, não há consenso sobre o número de sequência, portanto a transação pode ser incluída em qualquer bloco com todas as circunstâncias possíveis. Considerando que se o valor de nSequence é menor ou igual a 0xEFFFFFFF, isso significa que há um tempo de bloqueio. Onde o bit número 22 da sequência é quem determina se o bloqueio é baseado em um intervalo de tempo ou na altura do bloco.
Se esse bit tiver o valor "1", o tempo de bloqueio será baseado em um intervalo de tempo; enquanto se seu valor não for estabelecido, é considerado "0" e se refere a um número ou altura de bloco.
Iniciando o nSequences: ativando o BIP 68
El BIP 68 que é chamado "Tempo de bloqueio relativo usando números de sequência impostos por consenso”. Isso deu um novo conceito e definição para os números de sequência para transações Bitcoin com uma versão maior ou igual a "2". Permitir que esses números de sequência sejam reutilizados para novos casos de uso. Bem como para futuras implementações sem quebrar sua funcionalidade.
Da mesma forma, no BIP 68 É definido que o intervalo de tempo seja medido iniciando com a mediana do tempo passado (MTP) do bloco antes da saída e finalizando com a mediana do tempo passado (MTP) do bloco anterior. O tempo médio no passado (MTP) é definido no BIP 113, que especifica MTP como o ponto final para cálculos de tempo de bloco.
Interpretação de um nSequence
A interpretação do tempo de bloqueio é feita contando os bits que começam no bit número 16 na seqüência nSequence.
Por outro lado, quando o tempo de bloqueio é baseado em um intervalo de tempo, então o bloqueio se desenvolve como uma limitação mínima do tempo de bloqueio na idade da entrada. Já se o tempo de bloqueio for baseado em blocos, isso é interpretado como uma limitação mínima da altura do bloco na idade da entrada.
No primeiro caso, uma nSequência baseada em um tempo “n” pode ser incluída em qualquer um dos blocos que são produzidos 512 * n segundos após a data de extração da saída gasta ou do MTP do bloco anterior que a extraiu. Para bloqueios de tempo baseados em tempo, uma escala de 512 segundos foi escolhida, pois os blocos de Bitcoin são produzidos a cada 10 minutos, o que equivale a 600 segundos. Isso permite que a mesma quantidade de tempo seja codificada com o número de bits disponíveis em ambos os casos. Quando usar bloqueios de tempo baseados em bloco ou quando usar bloqueios de tempo baseados em intervalo de tempo.
Para o segundo caso, onde o tempo de bloqueio é baseado em bloco, o nSequence indica uma entrada que pode ser incluída após “n” número de blocos após a data de extração da saída gasta ou qualquer bloco posterior.
Quanto você sabe, cryptonuta?
O nSequence pode significar um problema de segurança porque permite modificar transações no mempool?FALSO!
As nSequences não representam nenhum risco para o Bitcoin ao permitir a modificação de transações dentro do mempool, isso porque essas transações são na verdade substituídas por novas, com um novo conjunto de condições se forem programadas dessa forma.
Implementações NSequence
CHECKSEQUENCEVERIFY bloqueio de tempo
O bloqueio de tempo relativo nSequence pode ser implementado no código OP_CHECKSEQUENCESSEVERIFY. Este código permite que você faça um bloqueio de gastos em uma saída específica de uma transação. Isso até que certas condições não sejam atendidas. Como atingir determinados blocos ou um intervalo de tempo definido desde a extração da transação que contém a referida saída.
Nesse caso, quando um usuário usa e gasta UTXOs em uma entrada de transação, o valor de nSequence nessa entrada deve ser definido como maior ou igual ao parâmetro definido como CHECKSEQUENCEVERIFY. Assim como o formato do valor de nSequence deve corresponder ao valor de CHECKSEQUENCEVERIFY. Ou seja, se CHECKSEQUENCEVERIFY for especificado em termos de blocos, o valor de nSequence também deve ser baseado em bloco.
Colored Coins
Os colored coins Eles são um método de identificação que permite representar e reconhecer certos ativos do mundo real no blockchain Bitcoin. Para evitar as manipulações e falsificações que podem sofrer esses bens, eles aproveitam as propriedades e características que a tecnologia blockchain oferece para sua proteção e salvaguarda.
Embora atualmente tenha perdido muita popularidade com o nascimento de Ethereum e os Tokens ERC-20, esse tipo de transação que é criado no blockchain do Bitcoin é marcado de forma que possa ser distinguido do resto das transações que ocorrem dentro do blockchain do Bitcoin. Para o qual um valor de rótulo é usado no campo nSequence da primeira entrada da transação. E embora nSequence esteja sempre presente nas transações, neste caso não é usado como um bloqueio, mas como um identificador, utilizando 6 de seus bits para formar e codificar o valor do tag.
Canais de pagamento Decker-Wattenhofer
Os canais de pagamento Os duplexes são descritos pela primeira vez nos artigos de Christian Decker e Roger Wattenhofer. Este tipo de canal de pagamento requer o uso de nSequence. Como o nome indica, um canal de pagamento duplex é composto de dois canais de pagamento unilateral, um em ambas as direções.
Esses canais usam uma estrutura chamada "árvore de invalidação" de transações off-chain. Uma propriedade entre a transação de financiamento e as transações de conclusão do canal de pagamento. As transações da árvore de invalidação também usam o tempo de bloqueio relativo; a primeira versão da transação tem um tempo de bloqueio relativo grande. E a próxima versão da transação (que invalida a primeira) usa um tempo de bloqueio relativo um pouco menor e assim por diante. Há também uma transação "iniciar" que inicia o tempo limite para o tempo de bloqueio relativo.
A sequência de transações é assim:
Financiamento -> Home -> Árvore de anulação -> Canal de pagamento.
Graças a isso, é possível criar canais de pagamento seguros com uma operação semelhante à oferecida pela Rede Lightning, embora tecnicamente mais complexa em seu funcionamento.