Processamento de UINT256

Nesta página, você encontra informações sobre como processar tipos de dados UINT256 de blockchain no Blockchain Analytics.

Colunas sem perda

O Blockchain Analytics não é compatível com colunas NUMERIC UINT256, mas alguns tipos de dados de blockchain têm precisão numérica até UINT256.

Para preservar a precisão numérica, os conjuntos de dados do Blockchain Analytics apresentam valores UINT256 em duas colunas separadas:

  • Uma coluna NUMERIC UINT128 com possível perda de precisão.
  • Uma coluna STRING que contém o valor decimal completo em formato de string. As colunas de string são marcadas com o prefixo _lossless.

Funções definidas pelo usuário (UDF) do BigQuery

O Google Cloud hospeda uma biblioteca de utilitários de análise de blockchain que contém UDF para processar cálculos e agregações de UINT256. As UDFs a seguir são relevantes para a computação de UINT256.

  • bqutil.fn.bignumber_add
  • bqutil.fn.bignumber_sub
  • bqutil.fn.bignumber_mul
  • bqutil.fn.bignumber_div
  • bqutil.fn.bignumber_sum
  • bqutil.fn.bignumber_avg

Consulte o repositório do GitHub de UDFs do BigQuery para detalhes sobre UDFs do BigQuery gerenciadas pela comunidade.

Consulte a documentação de UDFs do BigQuery para instruções sobre como usar essas funções.

Exemplo sem perda com solução alternativa de UDF para UINT256

No console do Google Cloud , acesse a página BigQuery.

Ir para o BigQuery

A seguinte consulta é carregada no campo Editor:

WITH withdrawals AS (
  SELECT
    w.amount_lossless AS amount,
    DATE(b.block_timestamp) AS block_date
  FROM
    bigquery-public-data.blockchain_analytics_ethereum_mainnet_us.blocks AS b
    CROSS JOIN UNNEST(withdrawals) AS w
)
SELECT
  block_date,
  bqutil.fn.bignumber_div(bqutil.fn.bignumber_sum(ARRAY_AGG(amount)), "1000000000") AS eth_withdrawn
FROM
  withdrawals
GROUP BY 1 ORDER BY 1 DESC