Pular para conteúdo

EIP-4844

EIP-4844 ("Proto-Danksharding") é a proposta de melhoria específica de Ethereum que introduziu blobs, ativado como parte da atualização de março de 2024 Dencun. Este capítulo funciona diretamente através da sua fórmula de taxa de base, o mesmo padrão de ajuste exponencial já abrangido para o gás comum em Preço do gás e taxas, aplicado aqui para gás blob.

A fórmula blob base taxa

Como a taxa de base de gás normal da EIP-1559, a taxa de base de blob ajusta automaticamente com base na procura, utilizando um excess_blob_gas rastreador: por mais que o uso de gás blob tenha ultrapassado o alvo por bloco, acumulado ao longo do tempo. A fórmula é uma função exponencial desse excesso:

// EIP-4844's fake_exponential, computed via Taylor series for
// deterministic, consensus-safe results (no floating point).
function fakeExponential(factor: number, numerator: number, denominator: number): number {
  let i = 1;
  let output = 0;
  let numeratorAccum = factor * denominator;
  while (numeratorAccum > 0) {
    output += numeratorAccum;
    numeratorAccum = Math.floor((numeratorAccum * numerator) / (denominator * i));
    i += 1;
  }
  return Math.floor(output / denominator);
}

const MIN_BASE_FEE_PER_BLOB_GAS = 1;
const BLOB_BASE_FEE_UPDATE_FRACTION = 3_338_477;
const GAS_PER_BLOB = 131_072; // 2^17, matching each blob's 128 KB size

function blobBaseFee(excessBlobGas: number): number {
  return fakeExponential(MIN_BASE_FEE_PER_BLOB_GAS, excessBlobGas, BLOB_BASE_FEE_UPDATE_FRACTION);
}

Verificado: quão rápido a taxa realmente cresce sob demanda excessiva sustentada

for (const blobsOverTarget of [0, 50, 100, 200, 300, 400, 500]) {
  const excess = blobsOverTarget * GAS_PER_BLOB;
  console.log(blobsOverTarget, "blobs sustained excess:", blobBaseFee(excess), "wei per blob gas");
}
// 0:   1 wei
// 50:  7 wei
// 100: 50 wei
// 200: 2,571 wei
// 300: 130,392 wei
// 400: 6,612,064 wei
// 500: 335,290,595 wei

A taxa mal se move para as primeiras dúzias de blobs de demanda excessiva sustentada, em seguida, aumenta extremamente acentuadamente. Este é o mesmo mecanismo de autocorrecção que o preço normal do gás EIP-1559: BLOB_BASE_FEE_UPDATE_FRACTION limita o quão rápido a taxa pode mudar por bloco (para aproximadamente o mesmo ~12,5% máximo por bloco de mudança EIP-1559 usa para gás comum), mas a demanda sustentada acima dos compostos alvo que limitam por bloco aumentar em crescimento dramático ao longo de muitos blocos, empurrando o uso de volta para o alvo da mesma forma que a taxa base comum de gás faz.

Hashes versionados: como a execução-camada contrata dados de blob de referência

O conteúdo real de um blob não está diretamente acessível à execução do EVM; um contrato inteligente não pode ler os bytes de um blob da forma como ele lê calldata. Em vez disso, uma transação blob inclui uma hash versionado (um compromisso polinomial KZG com os dados da blob, prefixado com um byte de versão) como parte de seus campos de transação comuns, que é acessível à execução do contrato através da BLOBHASH Opcode. Isso permite que o contrato de verificador L1 do rollup confirme quais dados específicos de blob que um lote alega corresponder, e verifique uma prova contra esse compromisso, sem que o próprio contrato precise processar diretamente os 128 KB completos de dados brutos da blob.

Conceitos errôneos comuns

O EIP-4844 não reduziu os custos normais de gás de transação da Ethereum. Acrescentou um novo mercado de taxas separado especificamente para os dados de blob; uma transferência simples de ETH ou o custo normal da chamada de gás não é afectado pela procura de blob, uma vez que os dois mercados de taxas são independentes (ver Blobs).

"Proto-Danksharding" não é a forma final da escala de disponibilidade de dados de Ethereum. EIP-4844 é explicitamente um trampolim em direção ao danksharding completo, que adiciona uma amostragem de disponibilidade de dados e uma contagem de blob muito maior; o próprio nome sinaliza que esta é uma fase deliberadamente incompleta, anterior de um roteiro mais longo.

Outras leituras


← Anterior: Blobs · Voltar à Camada 2 · Próximo: Pontes →