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 }