decred.org/dcrwallet/v3@v3.1.0/rpc/rpc_example/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"encoding/hex"
     6  	"encoding/json"
     7  	"fmt"
     8  	"io/ioutil"
     9  	"os"
    10  	"path/filepath"
    11  
    12  	"decred.org/dcrwallet/v3/rpc/client/dcrwallet"
    13  	"decred.org/dcrwallet/v3/rpc/jsonrpc/types"
    14  	"github.com/decred/dcrd/chaincfg/v3"
    15  	"github.com/decred/dcrd/dcrutil/v4"
    16  	"github.com/decred/dcrd/rpcclient/v8"
    17  )
    18  
    19  const (
    20  	host = "localhost:9113"
    21  	user = "user"
    22  	pass = "pass"
    23  )
    24  
    25  var (
    26  	certFile = filepath.Join(dcrutil.AppDataDir("dcrwallet", false), "rpc.cert")
    27  	params   = chaincfg.TestNet3Params()
    28  )
    29  
    30  func main() {
    31  	if err := run(); err != nil {
    32  		fmt.Println(err)
    33  		os.Exit(1)
    34  	}
    35  	os.Exit(0)
    36  }
    37  
    38  func connectWallet(host, user, pass, certFile string) (*dcrwallet.Client, error) {
    39  	cert, err := ioutil.ReadFile(certFile)
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  	connCfg := &rpcclient.ConnConfig{
    44  		Host:         host,
    45  		Endpoint:     "ws",
    46  		User:         user,
    47  		Pass:         pass,
    48  		Certificates: cert,
    49  	}
    50  	client, err := rpcclient.New(connCfg, nil)
    51  	if err != nil {
    52  		return nil, err
    53  	}
    54  	return dcrwallet.NewClient(dcrwallet.RawRequestCaller(client), params), nil
    55  }
    56  
    57  func run() error {
    58  	ctx, cancel := context.WithCancel(context.Background())
    59  	defer cancel()
    60  	client, err := connectWallet(host, user, pass, certFile)
    61  	if err != nil {
    62  		return err
    63  	}
    64  
    65  	for _, script := range importScripts {
    66  		scriptB, err := hex.DecodeString(script)
    67  		if err != nil {
    68  			return err
    69  		}
    70  		// NOTE: These scripts will forever be imported into your
    71  		// testing wallet.
    72  		err = client.ImportScript(ctx, scriptB)
    73  		if err != nil {
    74  			return err
    75  		}
    76  	}
    77  
    78  	// Add an owned address to validated addresses.
    79  	addr, err := client.GetNewAddress(ctx, "default")
    80  	if err != nil {
    81  		return err
    82  	}
    83  	validateAddrs = append(validateAddrs, addr.String())
    84  
    85  	for _, addr := range validateAddrs {
    86  		var res types.ValidateAddressResult
    87  		err := client.Call(ctx, "validateaddress", &res, addr)
    88  		if err != nil {
    89  			return err
    90  		}
    91  		b, err := json.MarshalIndent(res, "", "  ")
    92  		if err != nil {
    93  			return err
    94  		}
    95  		fmt.Println(string(b))
    96  	}
    97  	return nil
    98  }
    99  
   100  var importScripts = []string{
   101  	// TSPEND
   102  	"c376a914d17043c104a57393aa7353e1510e39eab811e3db88ac",
   103  	// 2 of 2 multisig
   104  	"522103d484eb60ad03549e731ae9045281f8ee14ff6ea11b697f32cde3d8a18992261b210342b0b9c0ecb53cb9761beb0d010bbf08b5049d2a4d3bea5d3a1d95eb664931cb52ae",
   105  	// NonStandard
   106  	"01",
   107  }
   108  
   109  var validateAddrs = []string{
   110  	"abcd", // invalid address
   111  	"TkKkYvSrnu8orwhtedcJGkD7guarvZUbUAtjr4iKqD9Y8pNEf8iHu",              // PubKeyEcdsaSecp256k1V0
   112  	"Tsp18L8qTcjzigYXrD5GSdwDmhVYBpKmfUL",                                // PubKeyHashEcdsaSecp256k1V0
   113  	"TkKnVfd6EvzEYAqiELWstkASHgVyYH8JK3gNvAxUX79C9CrnsV8W6",              // PubKeyEd25519V0
   114  	"Tead9n1wLBgaUR7AZrrtt6WWeDfetbF3dpy",                                // PubKeyHashEd25519V0
   115  	"TkKpSQoKgxqfDPyXp3RTWk7ktTR69zn19vU1zHCdD18r9bMTvDKT3",              // PubKeySchnorrSecp256k1V0
   116  	"TSs3jHQMbbZGPyftUh4cgaALzgDZhfXGtxn",                                // PubKeyHashSchnorrSecp256k1V0
   117  	"TcvVou7ooM4rJRWNeJYwehJ9fQq1HTc5pbK",                                // ScriptHashV0
   118  	"020000000000000000000000000000000000000000000000000000000000000001", // PubKeyEcdsaSecp256k1V0 by pubkey
   119  
   120  	// These are owned imported scripts.
   121  	"TcfdqCrK2fiFJBZnGj5N6xs6rMsbQBsJBYf", // TSPEND
   122  	"TcrzaAVMbFURm1PpukWru8yE2uBTjvQePoa", // 2 of 2 multisig
   123  	"TckSpBht36nMZgnDDjv7xaHUrgCyJpxQiLA", // NonStandard
   124  }