11.2 Identificatore Account


11.2.1 Intro

Ogni account utente ha un identificatore generato in funzione della PublicKey dell'utente utilizzando la seguente formula:

AccountId = Base58 ( MultihashHeader | SHA256 ( ProtobufHeader | ASN1Header | DecompressedRawPublicKey  )  )

Proprietà:

  • legato alla chiave pubblica del titolare dell'account.
  • generato tramite un algoritmo hash crittograficamente sicuro con collisione proprietà di resistenza.
  • breve ed è facilmente scambiabile tra utenti blockchain.
  • a prova di futuro poiché lascia aperta l'opportunità di aggiornare l'algoritmo (agilità di protocollo).
  • allineato al libp2p Metodo di generazione PeerId.

11.2.2 Procedura per la chiave ECDSA

Chiave pubblica decompressa grezza:

    04 (decompressed form)
    X: 5936d631b849bb5760bcf62e0d1261b6b6e227dc0a3892cbeec91be069aaa25996f276b271c2c53cba4be96d67edcadd
    Y: 66b793456290609102d5401f413cd1b5f4130b9cfaa68d30d0d25c3704cb72734cd32064365ff7042f5a3eee09b06cc1

Anteponi l'intestazione ASN.1 (come definito dallo standard x509)

    30 76   // strucure (bytes count = 118)
      30 10   // structure (bytes len = 16)
        06072a8648ce3d0201      // EC public key OID
        06052b81040022         // secp384r1 curve OID
      03 62 00  // bitstring (bytes count = 98)
        04
        5936d631b849bb5760bcf62e0d1261b6b6e227dc0a3892cbeec91be069aaa25996f276b271c2c53cba4be96d67edcadd
        66b793456290609102d5401f413cd1b5f4130b9cfaa68d30d0d25c3704cb72734cd32064365ff7042f5a3eee09b06cc1

Anteponi intestazione Protobuf (come definito da libp2p)2p)

    08 03  // Algorithm type identifier (ECDSA)
    12 78  // Content Length
      3076301006072a8648ce3d020106052b81040022036200
      04
      5936d631b849bb5760bcf62e0d1261b6b6e227dc0a3892cbeec91be069aaa25996f276b271c2c53cba4be96d67edcadd
      66b793456290609102d5401f413cd1b5f4130b9cfaa68d30d0d25c3704cb72734cd32064365ff7042f5a3eee09b06cc1

Calcola lo SHA256 del buffer complessivo

    sha = SHA256(buffer)
    sha = 93d8a1e44a9d179238b598458f5293666890e8c0fcec0cce682522398d726dd5

Anteponi l'intestazione "multihash" allo sha risultante.

    12      // hash algorithm identifier (0x12 = SHA256)
    20      // hash length (0x20 = 32)
    93d8a1e44a9d179238b598458f5293666890e8c0fcec0cce682522398d726dd5

Risultato finale in base58

    AccountId = "QmYHnEQLdf5h7KYbjFPuHSRk2SPgdXrJWFh5W696HPfq7i"

11.2.3 Dettagli Multihash

Aggiunge all'hash puro una breve intestazione con l'identificatore e la lunghezza dell'algoritmo.

Reference https://github.com/multiformats/multihash