Maison > développement back-end > Golang > Comment Solana calcule-t-il l'adresse de départ ?

Comment Solana calcule-t-il l'adresse de départ ?

DDD
Libérer: 2024-12-19 01:48:08
original
740 Les gens l'ont consulté

Comment Solana calcule-t-il ladresse de départ ?

J'ai récemment utilisé Golang pour appeler le contrat Solana, et j'ai découvert que ce n'était pas aussi simple que Rust et Ts, et qu'il y avait quelques petites erreurs, ce qui a fait que l'adresse de départ que j'ai calculée être quelque peu différent de celui calculé par ts, j'ai donc fait une étude approfondie après un certain temps.

const PDA_MARKER = "ProgramDerivedAddress"
// Create a program address.
// Ported from https://github.com/solana-labs/solana/blob/216983c50e0a618facc39aa07472ba6d23f1b33a/sdk/program/src/pubkey.rs#L204
func CreateProgramAddress(seeds [][]byte, programID PublicKey) (PublicKey, error) {
    if len(seeds) > MaxSeeds {
        return PublicKey{}, ErrMaxSeedLengthExceeded
    }

    for _, seed := range seeds {
        if len(seed) > MaxSeedLength {
            return PublicKey{}, ErrMaxSeedLengthExceeded
        }
    }

    buf := []byte{}
    for _, seed := range seeds {
        buf = append(buf, seed...)
    }

    buf = append(buf, programID[:]...)
    buf = append(buf, []byte(PDA_MARKER)...)
    hash := sha256.Sum256(buf)

    if IsOnCurve(hash[:]) {
        return PublicKey{}, errors.New("invalid seeds; address must fall off the curve")
    }

    return PublicKeyFromBytes(hash[:]), nil
}
Copier après la connexion

La signification de ce code est que vous connectez le tableau d'octets seed et ajoutez "ProgramDerivedAddress", qui est le message d'origine. Ensuite, appelez sha256.Sum256 pour calculer l'adresse de hachage. La fonction IsOnCurve consiste à déterminer si le hachage est présent. Que ce soit dans ed25519 Sur la courbe, s'il n'est pas là, cela changera le dernier paramètre de vos graines, qui est la valeur de bumpSeed. Cette valeur commence à 255 et diminue.

Les messages dans le monde de la cryptographie sont essentiellement remplis, y compris les signatures

keccak256("\x19\x01"),
Copier après la connexion

Il vaut mieux avoir du code, vous le saurez toujours lorsque vous lirez le code.

J'ai également corrigé deux bugs et envoyé un lien :
https://github.com/daog1/solana-anchor-go
Il s'agit d'un projet qui génère du code d'appel basé sur l'idl d'ancrage.
Un jour tu me rencontreras, tu comprendras

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal