Heim >Backend-Entwicklung >Golang >Wie berechnet Solana die Seed-Adresse?

Wie berechnet Solana die Seed-Adresse?

DDD
DDDOriginal
2024-12-19 01:48:08741Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn