> 백엔드 개발 > Golang > 솔라나는 시드 주소를 어떻게 계산하나요?

솔라나는 시드 주소를 어떻게 계산하나요?

DDD
풀어 주다: 2024-12-19 01:48:08
원래의
740명이 탐색했습니다.
솔라나는 시드 주소를 어떻게 계산하나요?

이 코드의 의미는 시드 바이트 배열을 연결하고 원본 메시지인 "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"),
로그인 후 복사
https://github.com/daog1/solana-anchor-go

Anchor idl을 기반으로 go 호출 코드를 생성하는 프로젝트입니다.

언젠가 저를 만나보시면 이해하실 겁니다



위 내용은 솔라나는 시드 주소를 어떻게 계산하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿