github.com/mavryk-network/mvgo@v1.19.9/examples/addr/main.go (about) 1 // Copyright (c) 2020-2021 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc 3 4 // Address examples 5 // 6 // tz1KzpjBnunNJVABHBnzfG4iuLmphitExW2p 7 // tz3gN8NTLNLJg5KRsUU47NHNVHbdhcFXjjaB 8 // KT1GyeRktoGPEKsWpchWguyy8FAf3aNHkw2T 9 package main 10 11 import ( 12 "encoding/hex" 13 "flag" 14 "fmt" 15 "log" 16 "os" 17 18 "github.com/mavryk-network/mvgo/mavryk" 19 ) 20 21 var ( 22 flags = flag.NewFlagSet("addr", flag.ContinueOnError) 23 verbose bool 24 ) 25 26 func init() { 27 flags.Usage = func() {} 28 flags.BoolVar(&verbose, "v", false, "be verbose") 29 } 30 31 func main() { 32 if err := flags.Parse(os.Args[1:]); err != nil { 33 if err == flag.ErrHelp { 34 fmt.Println("Address Test") 35 flags.PrintDefaults() 36 os.Exit(0) 37 } 38 log.Fatalln("Error:", err) 39 } 40 41 if err := run(); err != nil { 42 log.Fatalln("Error:", err) 43 } 44 } 45 46 func run() error { 47 if flags.NArg() < 1 { 48 return fmt.Errorf("Address required") 49 } 50 if flags.NArg() == 2 { 51 return blinded() 52 } 53 54 var ( 55 key mavryk.Key 56 addr mavryk.Address 57 err error 58 ) 59 // try decoding as key 60 if key, err = mavryk.ParseKey(flags.Arg(0)); err != nil { 61 // try decoding an address 62 if addr, err = mavryk.ParseAddress(flags.Arg(0)); err != nil { 63 // try decoding as hex 64 buf, err := hex.DecodeString(flags.Arg(0)) 65 if err != nil { 66 return err 67 } 68 err = addr.Decode(buf) 69 if err != nil { 70 if err = key.UnmarshalBinary(buf); err != nil { 71 return fmt.Errorf("Not a valid key or address") 72 } 73 } 74 } 75 } else { 76 addr = key.Address() 77 } 78 79 if key.IsValid() { 80 fmt.Printf("Key %s\n", key.String()) 81 fmt.Printf("ReKey %s\n", mavryk.NewKey(addr.KeyType(), key.Data)) 82 fmt.Printf("KeyData %x\n", key.Data) 83 addr = key.Address() 84 } 85 fmt.Printf("Address %s\n", addr.String()) 86 fmt.Printf("Short %s\n", mavryk.Short(addr)) 87 fmt.Printf("PkType %s\n", addr.Type()) 88 fmt.Printf("PkHash %x\n", addr.Hash()) 89 return nil 90 } 91 92 func blinded() error { 93 // Example 94 // "pkh": "tz1T1rRqmAk4XtGadNJuNpq8dUdWqLv2Gtq4", 95 // "secret": "06da1e038224114366831e47aee7f128f4675311", 96 97 // try decoding an address 98 addr, err := mavryk.ParseAddress(flags.Arg(0)) 99 if err != nil { 100 return err 101 } 102 // try blinding with secret 103 secret, err := hex.DecodeString(flags.Arg(1)) 104 if err != nil { 105 return err 106 } 107 blind, err := mavryk.BlindAddress(addr, secret) 108 if err != nil { 109 return err 110 } 111 fmt.Printf("Address %s\n", addr.String()) 112 fmt.Printf("Hash %x\n", addr.Hash()) 113 fmt.Printf("Blinded %s\n", blind.String()) 114 return nil 115 }