github.com/0chain/gosdk@v1.17.11/zcncore/sample/0Wallet.go (about) 1 //go:build ignore 2 // +build ignore 3 4 // Sample usage of the Wallet SDK - do not use. 5 package main 6 7 import ( 8 "encoding/json" 9 "flag" 10 "fmt" 11 "sync" 12 13 "github.com/0chain/gosdk/zcncore" 14 ) 15 16 type StatusUI struct { 17 i int 18 wg sync.WaitGroup 19 txnout map[string]json.RawMessage 20 } 21 22 // const ChainConfig = `{ 23 // "miners": [ 24 // "http://localhost:7071", 25 // "http://localhost:7072", 26 // "http://localhost:7073" 27 // ], 28 // "sharders": [ 29 // "http://localhost:7171" 30 // ], 31 // "signaturescheme": "bls0chain" 32 // }` 33 34 const ChainConfig = `{ 35 "miners": [ 36 "http://ohio.devi.testnet-0chain.net:7071", 37 "http://ohio.devi.testnet-0chain.net:7072", 38 "http://ohio.devi.testnet-0chain.net:7073", 39 "http://ohio.devi.testnet-0chain.net:7074" 40 ], 41 "sharders": [ 42 "http://ohio.devi.testnet-0chain.net:7171" 43 ], 44 "signaturescheme": "bls0chain" 45 }` 46 47 var wallet = ` 48 {"client_id":"0bc96a0980170045863d826f9eb579d8144013210602e88426408e9f83c236f6", 49 "client_key":"a4e58c66b072d27288b650db9a476fe66a1a4f69e0f8fb11499f9ec3a579e21e5dc0298b8c5ae5baa205730d06bc04b07a31943ab3bd620e8427c15d5c413b9e", 50 "keys":[ 51 { 52 "public_key":"a4e58c66b072d27288b650db9a476fe66a1a4f69e0f8fb11499f9ec3a579e21e5dc0298b8c5ae5baa205730d06bc04b07a31943ab3bd620e8427c15d5c413b9e", 53 "private_key":"c0f3a3100241888ea9c2cc5c7300e3e510a8e7190c2c20b03f80e3937a91530d" 54 }], 55 "mnemonics":"snake mixed bird cream cotton trouble small fee finger catalog measure spoon private second canal pact unable close predict dream mask delay path inflict", 56 "version":"1.0", 57 "date_created":"2019-06-19 13:37:50.466889 -0700 PDT m=+0.023873276"}` 58 59 func (s *StatusUI) OnWalletCreateComplete(status int, w string, err string) { 60 defer s.wg.Done() 61 if status == zcncore.StatusError { 62 fmt.Println("Error: ", err) 63 } else { 64 fmt.Println("Wallet:", w) 65 } 66 } 67 68 func (s *StatusUI) OnTransactionComplete(t *zcncore.Transaction, status int) { 69 defer s.wg.Done() 70 fmt.Println("========== TxnCompleted Status: ", status, "=======") 71 fmt.Println(" Txn Hash:", t.GetTransactionHash()) 72 } 73 74 func (s *StatusUI) OnVerifyComplete(t *zcncore.Transaction, status int) { 75 defer s.wg.Done() 76 fmt.Println("========== VerifyCompleted Status: ", status, "=======") 77 fmt.Println(t.GetVerifyOutput()) 78 } 79 80 func (s *StatusUI) OnBalanceAvailable(status int, value int64) { 81 defer s.wg.Done() 82 fmt.Println("=========== Balance Status:", status, "Value:", value, 83 "Token:", zcncore.ConvertToToken(value), 84 "Value:", zcncore.ConvertToValue(zcncore.ConvertToToken(value))) 85 } 86 87 func (zcn *StatusUI) OnAuthComplete(t *zcncore.Transaction, status int) { 88 fmt.Println("Authorization complete on zauth.", status) 89 } 90 91 func main() { 92 var cmd string 93 flag.StringVar(&cmd, "cmd", "", "create|recover|validate|send|store|faucet|getbalance|verify") 94 95 var mnemonic string 96 flag.StringVar(&mnemonic, "mnemonic", "", "Mnemonic used for wallet creation.\nMandatory for -cmd recover") 97 98 var value uint64 99 flag.Uint64Var(&value, "value", 0, "Value to send") 100 101 var txnhash string 102 flag.StringVar(&txnhash, "txnhash", "", "Transaction hash to verify.\nMandatory for -cmd verify") 103 104 var txndata string 105 flag.StringVar(&txndata, "txndata", "", "Data to store.\nMandatory for -cmd store") 106 107 var toclientID string 108 flag.StringVar(&toclientID, "toclientID", "", "Receipient client ID.\nMandatory for -cmd send") 109 110 flag.Parse() 111 112 switch cmd { 113 case "create": 114 case "faucet": 115 case "getbalance": 116 case "recover": 117 fallthrough 118 case "validate": 119 if mnemonic == "" { 120 flag.Usage() 121 return 122 } 123 case "send": 124 if value == 0 && toclientID == "" { 125 flag.Usage() 126 return 127 } 128 case "verify": 129 if txnhash == "" { 130 flag.Usage() 131 return 132 } 133 case "store": 134 if txndata == "" { 135 flag.Usage() 136 return 137 } 138 default: 139 fmt.Println("Unsupported command:", cmd) 140 flag.Usage() 141 return 142 } 143 144 err := zcncore.Init(ChainConfig) 145 if err != nil { 146 fmt.Println("Init failed") 147 return 148 } 149 err = zcncore.SetWalletInfo(wallet, false) 150 if err != nil { 151 fmt.Println("set wallet info failed: ", err) 152 return 153 } 154 155 s := &StatusUI{i: 1} 156 switch cmd { 157 case "create": 158 s.wg.Add(1) 159 err = zcncore.CreateWallet(s) 160 if err != nil { 161 fmt.Printf("Error create wallet: %v\n", err) 162 } 163 s.wg.Wait() 164 case "recover": 165 s.wg.Add(1) 166 err = zcncore.RecoverWallet(mnemonic, s) 167 if err != nil { 168 fmt.Printf("Error recover wallet %v\n", err) 169 } 170 s.wg.Wait() 171 case "validate": 172 ok := zcncore.IsMnemonicValid(mnemonic) 173 if ok != true { 174 fmt.Println("Validate mnemonic failed") 175 return 176 } 177 fmt.Println("**** Mnemonic is Valid ****") 178 case "send": 179 txn, err := zcncore.NewTransaction(s, 0, 0) 180 if err != nil { 181 fmt.Println(err) 182 return 183 } 184 s.wg.Add(1) 185 err = txn.Send(toclientID, value, "From 0Wallet sample app") 186 if err != nil { 187 fmt.Println("send failed: ", err) 188 return 189 } 190 s.wg.Wait() 191 s.wg.Add(1) 192 txn.Verify() 193 s.wg.Wait() 194 case "store": 195 txn, err := zcncore.NewTransaction(s, 0, 0) 196 if err != nil { 197 fmt.Println(err) 198 return 199 } 200 s.wg.Add(1) 201 err = txn.StoreData(txndata) 202 if err != nil { 203 fmt.Printf("store data failed: %v\n", err) 204 return 205 } 206 s.wg.Wait() 207 s.wg.Add(1) 208 txn.Verify() 209 s.wg.Wait() 210 case "faucet": 211 txn, err := zcncore.NewTransaction(s, 0, 0) 212 if err != nil { 213 fmt.Println(err) 214 return 215 } 216 s.wg.Add(1) 217 faucetAddress := "faucet smart contract address" 218 methodName := "pour" 219 jsonInput := "{}" 220 value = 0 221 err = txn.ExecuteSmartContract(faucetAddress, methodName, jsonInput, value) 222 if err != nil { 223 fmt.Printf("execute faucet smart contract failed: %v\n", err) 224 return 225 } 226 s.wg.Wait() 227 s.wg.Add(1) 228 txn.Verify() 229 s.wg.Wait() 230 case "getbalance": 231 s.wg.Add(1) 232 err = zcncore.GetBalance(nil) 233 if err != nil { 234 fmt.Println("get balance failed: ", err) 235 return 236 } 237 s.wg.Wait() 238 case "getnonce": 239 s.wg.Add(1) 240 err = zcncore.GetNonce(nil) 241 if err != nil { 242 fmt.Println("get balance failed: ", err) 243 return 244 } 245 s.wg.Wait() 246 case "verify": 247 txn, err := zcncore.NewTransaction(s, 0, 0) 248 if err != nil { 249 fmt.Println(err) 250 return 251 } 252 txn.SetTransactionHash(txnhash) 253 s.wg.Add(1) 254 txn.Verify() 255 s.wg.Wait() 256 } 257 }