Transações

Os clientes podem invocar programas enviando uma transação para um cluster. Uma única transação pode incluir várias instruções, cada uma visando seu próprio programa. Quando uma transação é enviada, o Tempo de Execução (Runtime)open in new window da Solana processará suas instruções em ordem e atomicamente. Se qualquer parte de uma instrução falhar, toda a transação falhará.

Fatos

Ficha Informativa

  • As instruções são as unidades operacionais mais básicas na Solana
  • Cada instrução contém:
    • O identificador do programa (program_id) desejado
    • Uma lista de todas as contas (accounts) que pretende ler ou escrever
    • Um array de bytes com os dados da instrução (instruction_data), específico para o programa desejado
  • Múltiplas instruções podem ser agrupadas em uma única transação
  • Cada transação contém:
    • Uma lista de todas as contas (accounts) que pretende ler ou escrever
    • Uma ou mais instruções (instructions)
    • Um hash recente de bloco (blockhash)
    • Uma ou mais assinaturas (signatures)
  • As instruções são processadas de forma ordenada e atômica
  • Se qualquer parte de uma instrução falhar, a transação inteira falha
  • As transações são limitadas a 1232 bytes

Mergulho Profundo

O tempo de execução da Solana exige que tanto as instruções quanto as transações especifiquem uma lista de todas as contas que pretendem ler ou escrever. Ao exigir essas contas com antecedência, o tempo de execução é capaz de executar em paralelo todas as transações.

Quando uma transação é enviada para um cluster, o tempo de execução processa suas instruções em ordem e atomicamente. Para cada instrução, o programa receptor interpretará seu array de dados e operará em suas contas especificadas. O programa retornará com sucesso ou com um código de erro. Se ocorrer um erro, a transação inteira falhará imediatamente.

Qualquer transação que tenha como objetivo debitar uma conta ou modificar seus dados requer a assinatura do titular da conta. Qualquer conta que será modificada é marcada como writable (gravável). Uma conta pode ser creditada sem a permissão do titular, desde que o pagador da taxa de transação cubra o aluguel e as taxas de transação necessárias.

Antes da submissão, todas as transações devem referenciar um hash de bloco recenteopen in new window. O hash de bloco é usado para evitar duplicidades e eliminar transações obsoletas. A idade máxima do hash de bloco de uma transação é de 150 blocos, ou cerca de ~1 minuto e 19 segundos a partir do momento em que esta mensagem está sendo escrita.

Taxas

A rede Solana recolhe dois tipos de taxas:

Na Solana, as taxas de transação são determinísticas: não há conceito de mercado de taxas em que os usuários possam pagar taxas mais altas para aumentar suas chances de serem incluídos no próximo bloco. No momento em que este texto foi escrito, as taxas de transação são determinadas apenas pelo número de assinaturas necessárias (ou seja, lamports_per_signature), não pelo uso de recursos. Isso ocorre porque atualmente há um limite rígido de 1232 bytes em todas as transações.

Todas as transações requerem pelo menos uma conta gravável (writable) para assinar a transação. Uma vez enviada, a conta de signatário gravável que é serializada primeiro será a pagadora da taxa. Esta conta pagará o custo da transação, independentemente de a transação ter sucesso ou falhar. Se o pagador da taxa não tiver um saldo suficiente para pagar a taxa de transação, a transação será descartada.

No momento em que este texto foi escrito, 50% de todas as taxas de transação são coletadas pelo validador que produz o bloco, enquanto os 50% restantes são queimados. Essa estrutura funciona para incentivar os validadores a processar o maior número possível de transações durante seus slots no cronograma do líder.

Outros Recursos

Last Updated:
Contributors: Daniel Cukier