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  }