utils.gno
0.78 Kb · 41 lines
1package lziface
2
3import (
4 "chain"
5
6 "crypto/bech32"
7
8 "gno.land/p/nt/ufmt/v0"
9)
10
11func Bytes32ToAddress(bz32 [32]byte) address {
12 bz20 := bz32[12:]
13 encoded, err := bech32.EncodeFromBase256("g", bz20)
14 if err != nil {
15 panic("bech32 encode failed: " + err.Error())
16 }
17 return address(encoded)
18}
19
20func AddressToBytes32(addr address) [32]byte {
21 _, bz, err := bech32.DecodeToBase256(string(addr))
22 if err != nil {
23 panic("invalid bech32: " + err.Error())
24 }
25 return MakeBytes32(bz)
26}
27
28func PkgPathToLZAddress(pkgPath string) [32]byte {
29 addr := chain.PackageAddress(pkgPath)
30 return AddressToBytes32(addr)
31}
32
33func MakeBytes32(bz []byte) [32]byte {
34 if len(bz) > 32 {
35 panic(ufmt.Sprintf("expected length <= 32, got %d", len(bz)))
36 }
37 bz32 := [32]byte{}
38 copy(bz32[32-len(bz):], bz)
39 return bz32
40}
41