Categorias
Como funcionam? Mastering Bitcoin

Transacções Avançadas – Faça as suas Operações como Desejar

Um dos objectivos de utilização da Bitcoin é ser um sistema que possibilita trocas de valor. Além das transacções simples que já vimos, a Bitcoin permite executar transacções mais avançadas que podem satisfazer várias necessidades. Sejam de atraso no tempo, incluir condições ou controlo por mais do que uma pessoa.

Multi-assinatura

As transacções multi-assinatura definem que o valor enviado através delas apenas possa ser desbloqueado por um conjunto de assinaturas.

Neste tipo de operações, são necessárias mais do que uma assinatura para se poder aceder aos fundos. De forma a aumentar a segurança, distribui-se a responsabilidade de desbloquear esse dinheiro por várias entidades. Serão necessários M chaves públicas de uma lista de N que foram identificadas como as que podem aceder. Cria-se assim um esquema M-de-N chaves necessárias. Por exemplo, uma transacção 2-de-3 significa que estão identificadas 3 chaves públicas como as que podem aceder ao dinheiro e são necessárias pelo menos 2 em simultâneo para os desbloquear.

De facto, esta ideologia pode também ser aplicada a endereços criando uma espécie de conta-conjunta. Pode ser usado para uma conta de um casal ou para criar um nível adicional de segurança para a conta de uma empresa em que apenas na presença das chaves de todos os sócios se podem movimentar determinados fundos.

Pagamentos a Dispersão de Código – P2SH

As transacções P2SH (do inglês Pay-to-Script-Hash, que numa tradução livre se podem chamar Pagar-a-Dispersão-de-Código) permitem simplificar significativamente operações complexas que seriam muito pesadas para a rede. Deste modo, conseguimos reduzir taxas, uso de memória e utilizar apenas o software já existente.

Esta capacidade permite fazer um pagamento a um pedaço de código complexo que está condensado numa dispersão mais curta que o representa (uma função codificadora que transforma um qualquer número de caracteres numa expressão de 20 bytes). Ou seja, o dinheiro fica bloqueado ao código que consiga transformar-se na expressão definida. Da forma como esta função funciona só permite que exista uma expressão de código de programação cujo resultado seja o que está definido. Assim, garante-se que a transacção ficará sempre destinada a quem o emissor pretendia.

Por exemplo, uma transacção multi-assinatura 2-de-5 poderia ser representada no código da Bitcoin, como está abaixo. Aqui estão especificados cada um dos 5 endereços que podem assinar para receber o dinheiro enviado.

check_multisig

Através deste método é possível reduzir o código acima, para apenas:

p2sh

No segundo pedaço de código, também estão representados os 5 endereços. A diferença é não estarem explícitos. Esta expressão mais curta é o resultado de se ter aplicado uma função de dispersão ao código anterior. Esta linha representa “pagar ao código que for igual ao valor 54c55… depois de ser feita a função de dispersão”.

As vantagens deste método são:

  • reduzir o tamanho dos dados transmitidos na rede, libertando-a para outras transacções. Este benefício é passado para os utilizadores através de taxas mais baixas.
  • operações complexas podem ser “mascaradas” como endereços. Desta forma, o emissor não precisa ter software mais complexo que suporte transacções avançadas.
  • o peso do código complexo é passado do presente (pagamento) para o futuro (quando for gasto).

No entanto, a grande evolução criada por este avanço é a sua maleabilidade. Permite que sejam criadas transacções mais complexas e diversas de forma a que se possam criar todas as operações que os utilizadores pretendam.

Trancas de Tempo

As trancas de tempo (Timelocks) permitem incluir nas operações o factor tempo fazendo com que fiquem bloqueadas e não possam ser executadas até que se atinja o tempo definido pelos intervenientes.

Existem trancas de vários tipos. Cada um obedece a regras específicas e tem objectivos diferentes. É possível bloquear as transacções ou os outputs, e, para ambos, tanto em tempo absoluto como em tempo relativo.

Podemos definir uma data específica para a transacção ficar destrancada. Mas, na rede Bitcoin, o tempo é lido em blocos. Por isso, também é possível definir-se o bloco a partir do qual se pode efectuar. Da mesma forma, pode definir-se um atraso. Implementando a ideia: a transacção A só pode ser activada 2 meses depois da data de sua construção.

As trancas de tempo a nível de outputs definem que os fundos disponibilizados na transacção A só podem ser utilizados quando se atingir a data/bloco determinado ou tiver passado o tempo ou número de blocos definido. Esta capacidade é especialmente atractiva para operações que são mantidas fora da blockchain. Algo que será muito útil para a Rede Relâmpago (Lightning Network), que vamos ver noutro artigo mais à frente. No caso dos outputs o raciocínio será, por exemplo: os fundos disponibilizados pela transacção A só podem ser usados numa transacção B quando tiverem passado 10 dias.

Transacções Condicionais

Este tipo de transacções permitem incorporar condições específicas para que sejam activadas. Através delas podem construir-se operações com vários resultados possíveis. O mesmo dinheiro pode ser endereçado a um destinatário se acontecer a condição A ou enviada para outro utilizador se acontecer a condição B.

Por exemplo, podemos construir transacções para um jogo de poker online: se ganhar a Maria o pagamento é feito a ela, se ganhar o Manuel o pagamento é-lhe endereçado.

É possível ainda criar tantas condições quanto o utilizador desejar, obedecendo aos limites estabelecidos pelas regras de consenso que definem o tamanho máximo de uma transacção em bytes.

De referir que nada disto acontece de forma visível aos olhos do utilizador final. Nem o utilizador tem que se preocupar em programar as transacções. Devido ao desenvolvimento que tem existido na comunidade estas serão fáceis de utilizar e deverão apresentar-se como simples escolhas que o utilizador poderá fazer caso deseje adicionar níveis avançados de complexidade à sua operação. Ainda assim, o código não é explícito mas está disponível devido à característica da transparência da rede. Estas transacções são melhorias às capacidades da Bitcoin que aumentam as possibilidades para o utilizador. São as maquinações que acontecem por detrás das aplicações com que os utilizadores finais interagem, na grande maioria dos casos, uma carteira Bitcoin.

3 replies on “Transacções Avançadas – Faça as suas Operações como Desejar”

[…] No último artigo, vimos como funciona um canal de pagamento. No entanto, esse exemplo dependia da boa-fé dos intervenientes. Quando o objectivo é instalar uma rede que consiga transmitir valor, sem ter uma autoridade central a controlar, as transmissões têm que ser independentes de quaisquer valores éticos e puramente matemáticas para garantir o bom funcionamento da rede. A forma mais eficaz de conseguir resolver este problema é a aplicação de transacções avançadas que já vimos num artigo anterior. […]

Gostar

Deixe uma resposta para Utilizar Transacções Avançadas em Canais de Pagamento – Parte 2 – André Barros – O Aprendiz de Cripto Cancelar resposta