이 코드의 의미는 시드 바이트 배열을 연결하고 원본 메시지인 "ProgramDerivedAddress"를 추가한 다음 sha256.Sum256을 호출하여 해시 주소를 계산한다는 것입니다. ed25519에 있는지 여부 곡선에 없으면 시드의 마지막 매개변수인 범프 시드 값이 변경됩니다. 이 값은 255에서 시작하여 감소합니다.
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 }
코드가 있는 것이 더 좋습니다. 코드를 읽어보면 항상 알 수 있습니다.
keccak256("\x19\x01"),
Anchor idl을 기반으로 go 호출 코드를 생성하는 프로젝트입니다.
언젠가 저를 만나보시면 이해하실 겁니다
위 내용은 솔라나는 시드 주소를 어떻게 계산하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!