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 }