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 }
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"),
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!