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  }