Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Solana mengira alamat benih?

Bagaimanakah Solana mengira alamat benih?

DDD
Lepaskan: 2024-12-19 01:48:08
asal
740 orang telah melayarinya

Bagaimanakah Solana mengira alamat benih?

Saya baru-baru ini menggunakan golang untuk memanggil kontrak solana, dan mendapati ia tidak semudah karat dan ts, dan terdapat beberapa kesilapan kecil, yang menyebabkan alamat benih yang saya kira untuk agak berbeza daripada yang dikira oleh ts, jadi saya melakukan kajian mendalam Selepas beberapa ketika.

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
}
Salin selepas log masuk

Maksud kod ini ialah anda menyambungkan tatasusunan bait seeds dan menambah "ProgramDerivedAddress", yang merupakan mesej asal Kemudian hubungi sha256.Sum256 untuk mengira alamat cincangan Fungsi IsOnCurve adalah untuk menentukan sama ada cincangan itu berada Sama ada dalam ed25519 Pada lengkung, jika ia tidak ada, ia akan menukar parameter terakhir benih anda, iaitu nilai bumpSeed Nilai ini bermula dari 255 dan berkurangan.

Mesej dalam dunia crypto pada dasarnya disumbat, termasuk tandatangan

keccak256("\x19\x01"),
Salin selepas log masuk

Adalah lebih baik untuk mempunyai kod, anda akan sentiasa tahu apabila anda membaca kod tersebut.

Saya juga membetulkan dua pepijat dan menghantar pautan:
https://github.com/daog1/solana-anchor-go
Ini ialah projek yang menjana kod panggilan pergi berdasarkan idl anchor.
Satu hari nanti awak jumpa saya, awak akan faham

Atas ialah kandungan terperinci Bagaimanakah Solana mengira alamat benih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan