FA2 de / para a serialização

Aug 24 2020

No padrão FA2.0, o remetente e o destinatário são enviados como Bytes (em vez de enviar como string para FA1.2).

Resultado esperado: ao decodificar os endereços (string) para sua representação hash de chave pública, eu presumiria que o formato P2P é seguido: https://tezos.gitlab.io/api/p2p.html#public-key-hash-21-bytes-8-bit-tag. Por exemplo, tz1ij8gUYbMRUXa4xX3mNvKguhaWG9GGbURn seria '00fd41f8dd065c16d8bfe0d6aa932b765f5b23f5c0' (21 bytes)

Resultado visto: ao verificar uma transação existente, os bytes têm comprimento 22 com um prefixo '00' '0000fd41f8dd065c16d8bfe0d6aa932b765f5b23f5c0' (https://better-call.dev/carthagenet/opg/oosHQxzosTdzizkPDvaDYDjjHeRCu4uG3MnfeH6SeceDoZJLNby/contents => rawJSON)

Para que é usado o byte extra? Devo esperar que seja sempre '00'?

Respostas

5 RaphaëlCauderlier Aug 24 2020 at 19:30

No padrão FA2.0, o remetente e o destinatário são enviados como Bytes (em vez de enviar como string para FA1.2).

Ambos os padrões de token dizem que o remetente e o destinatário são endereços de Michelson. Os endereços de Michelson têm duas representações permitidas, como strings (representação legível) e como bytes (representação otimizada).

Para que é usado o byte extra?

O byte extra é usado para distinguir contas implícitas de contratos inteligentes.

Devo esperar que seja sempre '00'?

Não, é apenas '00' para contas implícitas.

Para obter uma descrição detalhada do esquema de codificação binária dos endereços Tezos, você pode usar o seguinte comando:

$ tezos-codec describe alpha.contract binary schema