Search Apps Documentation Source Content File Folder Download Copy Actions Download

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