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