github.com/piotrnar/gocoin@v0.0.0-20240512203912-faa0448c5e96/wallet/wallet_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"testing"
     8  )
     9  
    10  const (
    11  	SECRET      = "test_secret"
    12  	SEED_PASS   = "qwerty12345"
    13  	CONFIG_FILE = "test_wallet.cfg"
    14  
    15  	OTHERS = "test_others"
    16  )
    17  
    18  func start() error {
    19  	PassSeedFilename = SECRET
    20  	RawKeysFilename = OTHERS
    21  	os.Setenv("GOCOIN_WALLET_CONFIG", CONFIG_FILE)
    22  	return ioutil.WriteFile(SECRET, []byte(SEED_PASS), 0600)
    23  }
    24  
    25  func reset_wallet() {
    26  	keys = nil
    27  }
    28  
    29  func stop() {
    30  	os.Remove(SECRET)
    31  	os.Remove(OTHERS)
    32  }
    33  
    34  func mkwal_check(t *testing.T, exp string) {
    35  	reset_wallet()
    36  	make_wallet()
    37  	if int(keycnt) != len(keys) {
    38  		t.Error("keys - wrong number")
    39  	}
    40  	if keys[keycnt-1].BtcAddr.String() != exp {
    41  		t.Error("Expected address mismatch", keys[keycnt-1].BtcAddr.String(), exp, keycnt)
    42  	}
    43  }
    44  
    45  func TestMakeWallet(t *testing.T) {
    46  	defer stop()
    47  	if start() != nil {
    48  		t.Error("start failed")
    49  	}
    50  
    51  	keycnt = 300
    52  
    53  	// Type-3
    54  	waltype = 3
    55  	testnet = false
    56  	mkwal_check(t, "1M8UbAaJ132nzgWQEhBxhydswWgHpASA2R")
    57  
    58  	testnet = true
    59  	mkwal_check(t, "n1eRtDfGp4U3mnz1xGALXtrCoWGzhjrDDr")
    60  
    61  	// Type-4 / 0
    62  	testnet = false
    63  	waltype = 4
    64  	hdpath = "m/0'"
    65  	keycnt = 20
    66  	mkwal_check(t, "1FvWLNinb9RfQ4pFanWVMZJKq3DiB817X9")
    67  
    68  	// Type-4 / Electrum
    69  	hdpath = "m/0/0"
    70  	mkwal_check(t, "13M4ypZeacDM2rZ62rqG8jZNg1LVRHhSGy")
    71  
    72  	bip39wrds = 12
    73  	mkwal_check(t, "1PP9HRai5dfWW8JByuP8jBEeu42b7AFRfR")
    74  
    75  	bip39wrds = 15
    76  	mkwal_check(t, "1DvsyQDNhnX1wSWBnaFfhaBCTMAiGAG6ig")
    77  
    78  	bip39wrds = 18
    79  	mkwal_check(t, "1BAkYsi4CzAjvgMBUe78QEVYhPJnmkNAyQ")
    80  
    81  	bip39wrds = 21
    82  	mkwal_check(t, "192TT86GEBkhRJUT6qD2YPgAVzKRU3f6V6")
    83  
    84  	bip39wrds = 24
    85  	mkwal_check(t, "1JRQ1zkTSuWkmVFDtz9A9ErD9x4BNNAYmY")
    86  
    87  	// Type-4 / Bitcon Core
    88  	hdpath = "m/0'/0'/0'"
    89  	bip39wrds = 12
    90  	mkwal_check(t, "14iD1SLEFL9SHWoo8WrT9Wa6Mde3b2R79j")
    91  
    92  	// Type-4 / Multibit HD, BRD Wallet
    93  	hdpath = "m/0'/0/0"
    94  	bip39wrds = 0
    95  	mkwal_check(t, "1HDTrCbonnRdN6dBmhEDmLstkDxTT6BEQM")
    96  
    97  	// Type-4 / 4
    98  	hdpath = "m/44'/0'/0'/0"
    99  	bip39wrds = 0
   100  	mkwal_check(t, "1ABhTNjkFGquAo9Wq8yj2UirN65oUSiKWR")
   101  
   102  	// Type-4: BIP84
   103  	hdpath = "m/84'/0'/0'/0/0"
   104  	bip39wrds = 12
   105  	keycnt = 10
   106  	segwit_mode = true
   107  	bech32_mode = true
   108  	mkwal_check(t, "1DCw8Gjgy3pfAh2NWQvgJEXHBjZvB4PAoD")
   109  	if segwit[9].String() != "bc1qsh35g0djgwj7yw6evkhlkajke3twaua30ke3em" {
   110  		t.Error("Expected address mismatch", segwit[9].String())
   111  	}
   112  
   113  	segwit_mode = false
   114  	bech32_mode = false
   115  	bip39wrds = 0
   116  }
   117  
   118  func import_check(t *testing.T, pk, exp string) {
   119  	ioutil.WriteFile(OTHERS, []byte(fmt.Sprintln(pk, exp+"lab")), 0600)
   120  	reset_wallet()
   121  	make_wallet()
   122  	if int(keycnt)+1 != len(keys) {
   123  		t.Error("keys - wrong number")
   124  	}
   125  	if keys[0].BtcAddr.Extra.Label != exp+"lab" {
   126  		t.Error("Expected label mismatch", keys[0].BtcAddr.String(), exp)
   127  	}
   128  
   129  	if keys[0].BtcAddr.String() != exp {
   130  		t.Error("Expected address mismatch", keys[0].BtcAddr.String(), exp)
   131  	}
   132  }
   133  
   134  func TestImportPriv(t *testing.T) {
   135  	defer stop()
   136  	if start() != nil {
   137  		t.Error("start failed")
   138  	}
   139  
   140  	waltype = 3
   141  	uncompressed = false
   142  	testnet = false
   143  	keycnt = 1
   144  
   145  	// compressed key
   146  	import_check(t, "KzAqX6gJsmvZmJjNrHk3UDZrgDytgF88KzE21TnGVXPC6e3zRHGi", "1M8UbAaJ132nzgWQEhBxhydswWgHpASA2R")
   147  	if !keys[0].BtcAddr.IsCompressed() {
   148  		t.Error("Should be compressed")
   149  	}
   150  
   151  	// uncompressed key
   152  	import_check(t, "5HqNqndG7xYfJu8KkkJ7AjVUfVsiWxT5AyLUpBsi2Upe5c2WaRj", "1AV28sMrWe81SgBK21o3KjznwUd5dTngnp")
   153  	if keys[0].BtcAddr.IsCompressed() {
   154  		t.Error("Should be uncompressed")
   155  	}
   156  }