Heim >Backend-Entwicklung >Golang >Wie berechnet Solana die Seed-Adresse?
Ich habe kürzlich Golang verwendet, um den Solana-Vertrag aufzurufen, und festgestellt, dass er nicht so einfach ist wie Rust und Ts, und es gab einige kleine Fehler, die dazu führten, dass die von mir berechnete Seed-Adresse berechnet wurde etwas anders sein als von ts berechnet, also habe ich nach einer Weile eine eingehende Studie durchgeführt.
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 }
Die Bedeutung dieses Codes besteht darin, dass Sie das Seed-Byte-Array verbinden und „ProgramDerivedAddress“ hinzufügen. Rufen Sie dann sha256.Sum256 auf, um die Hash-Adresse zu berechnen Ob in ed25519 Wenn es auf der Kurve nicht vorhanden ist, ändert es den letzten Parameter Ihrer Seeds, nämlich den Wert von BumpSeed. Dieser Wert beginnt bei 255 und nimmt ab.
Nachrichten in der Kryptowelt sind grundsätzlich vollgestopft, einschließlich Signaturen
keccak256("\x19\x01"),
Es ist besser, Code zu haben, Sie werden es immer wissen, wenn Sie den Code lesen.
Ich habe außerdem zwei Fehler behoben und einen Link gesendet:
https://github.com/daog1/solana-anchor-go
Dies ist ein Projekt, das Go-Aufrufcode basierend auf Anker-IDL generiert.
Wenn du mich eines Tages triffst, wirst du es verstehen
Das obige ist der detaillierte Inhalt vonWie berechnet Solana die Seed-Adresse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!