github.com/piotrnar/gocoin@v0.0.0-20240512203912-faa0448c5e96/lib/btc/addr_test.go (about) 1 package btc 2 3 import ( 4 "bytes" 5 "encoding/hex" 6 "encoding/json" 7 "io/ioutil" 8 "strings" 9 "testing" 10 ) 11 12 func TestAddr(t *testing.T) { 13 var ta = []string{ 14 "mhXjRE6owowGYs8TocxRWw3n1TzCgvSkMA", 15 "mqMmY5Uc6AgWoemdbRsvkpTes5hF6p5d8w", 16 "mmS8FqnakrybtSzXSHXcGjeMfHUQqojx6Q", 17 "mpu4t3bSgcWneVDKdjB8JHcGu2RgXT6QhJ", 18 "mwZSC78JGfS6NY7R57aFeJQp4HgRCadHze", 19 "mtGE6YtAVfCJ13QsudWCxKXBa893hQqnbi", 20 "moY4DavYucRFGvExYPb9HX1jeHGBA4cWTX", 21 "mqFh6A8tmZu5LBMYGFEJg2zCp3VSrNRvNN", 22 "mqFh6A8tmZu5LBMYGFEJg2zCp3VSrNRvNN", 23 "mtGE6YtAVfCJ13QsudWCxKXBa893hQqnbi", 24 "mtGE6YtAVfCJ13QsudWCxKXBa893hQqnbi", 25 26 "1F5rEq8JZnDYkjGPZgtfSxjaY4KQknAVpf", 27 "17FpGMVndZUUwayXMsantBmyb3Pbe5Wq4c", 28 "1JgV28xpDzpK4QXrgaZ6c9dxNoKQHVsLwZ", 29 "1Mq2Q1BMicK4ECE6GNR6mDTPdkxwxDe3mc", 30 "19ntWSdcFqBRfxdgXm95Q3G9Mviu3Yvwjn", 31 "1BrjM9kqGry1cgL7pKutdtGHxiUszfSjND", 32 "1KgeSeM9TS1XVsybdvChR7rh3ddHqU57xY", 33 "12mwAvJywtQF5rJXHzdBQd4yq8EVD7NZqX", 34 "1FtjnusT4cHCEvh2bezA4V95jTh2xBiP4", 35 "1CGPxUjd82XNwMk1pJPimzumbxdkneKfZz", 36 "1Bgu2w4vBTXDDkpWkjAeomVnRRYASnCaJV", 37 "1MHZZ4vTsvtbEACHYDyvtK34qyLaXhcVNV", 38 "15cEMwTeSCKgoQqL2sYaSruSnwU8z9dzpt", 39 "15BJS6GqnSw5L7UFXUJNCNz6SDyi9vh4s9", 40 "17RcRhWHjZnrFCp2pay3YRjyhQYUU5fSAm", 41 "1Gq49ewtMAnXTD2nsU4nb3Dj5zpGgMGCQa", 42 "13kq3JsH7kw6u6icKmwePHkexHs5UrabF9", 43 "13A46EHyLvX6Ss8Kf7hsxSwxqQuM5mdUYL", 44 "1MDypxCYTtaCp56Lqfc7BxuDFNsRFK9h5E", 45 "18q9J5iMkvU8kgmYm2oShdPPbaLZWHTAns", 46 "1591TioQC4j8iUnkEmxMHbhbaH9vZ5xnBo", 47 "1AdraNiQ1wAdFUaJ3fcnw5WJGutgK8jXXh", 48 "1GLadosEkeAsLReqS3yQ51E1R3wVtbJCDF", 49 "1LhhedZHAtYPRcCvNwSedbh335ZAgFMoFq", 50 "12wEJ6Tj46JDs8LUDHZrc2bbVHpZoTchNg", 51 "1E2efCrpH6cFJBze9VCR7bTTVsrTfrRV2s", 52 "1AHpyCoucKqE5FhLSaS1ysHZLM9fyAEQxX", 53 "19bfaunL2LB7v3KKmVtK5WbWbEZGVyvTGo", 54 "1EB6ubsAGvC7PR2eTUiikpVtXjRXymXDLE", 55 "1AXKZp4KU4tA4yPoFtHQPHoUi2DmWgHdEd", 56 "12iKAxgiU45J7wpERFvopT4DnXrtxj5Cnt", 57 "1QCXT5GDVrCZyAeD2752QuUjM9b1xRaeoJ", 58 "1HSWmDg3e1KRnwaWDPutMnNmKqVB2uY6v7", 59 "1FxoPFyMtAonhpAg9N7nvWwTkfsXbuUGP9", 60 "1Pp6es67oM884HnvCro8Fc3VpRr9YLJG1h", 61 "1ADRkScDqBHLMdmJY3211Y5Mk5W4c8GQwt", 62 "1ZKrazKLvfxNCYqk4BbboxiPonB9U3Pwh", 63 "1LaW6vXiSEKGDqmJgovPho9yLcosGUPE3m", 64 "1Q6BQNUyhB3U5DryX8o7MWzDXG7hBc45VH", 65 "1G9muwbHvJBbqofznm7ECyXY6fKDGXmhNV", 66 "1NJJAWtYEHXBFPuU7vCouGWwtRVmeccd82", 67 "196uPpfZD8Dw14gDx5sM8eoBbTDrtNyYoT", 68 "19vPUYV7JE45ZP9z11RZCFcBHU1KXpUcNv", 69 "16nENzntoWJHBB4Pk1KKwLH2536A5xUuY2", 70 "1PHxLcD7w3hGMxZz3LXrmL7zfRdcPh3Asf", 71 "1NfXM69erAWPDdNrZ2k2UkuV7HDPc6Ebwk", 72 "1DcyjVKb6HyFXLYNLgVtGxXciiydq4c1B1", 73 "19KDwaNX9xk6aHaBzt2DjZRk6wLj4vAtfF", 74 "13GZwHAPgnvb8z5KrYVmrMTUdTp25Mo7bJ", 75 "17Gt94xaBPy6KrNWnDRsbmtzdnBVnbtBzz", 76 "1FVwrwLeRgZx1XKJTisyT6EQsvUHDoyHt6", 77 "115tTroRo3B9ZDQ6ATJGDCHcNEVbjJoZnF", 78 } 79 80 for l := 0; l < 10; l++ { 81 for i := range ta { 82 //println(ta[i], "...") 83 a, e := NewAddrFromString(ta[i]) 84 if e != nil { 85 t.Error("NewAddrFromString caused error", e.Error()) 86 return 87 } 88 89 a3 := NewAddrFromHash160(a.Hash160[:], a.Version) 90 if a3.String() != ta[i] { 91 t.Error("NewAddrFromHash160 failed") 92 return 93 } 94 } 95 } 96 } 97 98 func TestBase58(t *testing.T) { 99 d, _ := ioutil.ReadFile("../test/base58_encode_decode.json") 100 var vecs [][2]string 101 e := json.Unmarshal(d, &vecs) 102 if e != nil { 103 t.Fatal(e.Error()) 104 return 105 } 106 for i := range vecs { 107 bin, _ := hex.DecodeString(vecs[i][0]) 108 str := Encodeb58(bin) 109 if str != vecs[i][1] { 110 t.Error("Encode mismatch at vector", i, vecs[i][0], vecs[i][1]) 111 } 112 113 d = Decodeb58(vecs[i][1]) 114 if !bytes.Equal(bin, d) { 115 t.Error("Decode mismatch at vector", i, vecs[i][0], vecs[i][1]) 116 } 117 } 118 } 119 120 func test_one_segwit(t *testing.T, s string, valid bool, ver int, plen int) { 121 ad, er := NewAddrFromString(s) 122 if valid { 123 if ad == nil || er != nil { 124 t.Error(s, "- Address not decoded") 125 } else { 126 if ad.Version != 0 { 127 t.Error(s, "- Address Version mismatch", ad.Version, ver) 128 } 129 if len(ad.Program) != plen { 130 t.Error(s, "- Address Program length mismatch", len(ad.Program), plen) 131 } 132 } 133 } else { 134 if ad != nil || er == nil { 135 t.Error(s, "- Address somehow decoded", ad, er) 136 } 137 } 138 } 139 140 func test_both_segwit(t *testing.T, s string, valid bool, ver int, plen int) { 141 test_one_segwit(t, strings.ToLower(s), valid, ver, plen) 142 test_one_segwit(t, strings.ToUpper(s), valid, ver, plen) 143 } 144 145 func TestSegwit(t *testing.T) { 146 test_both_segwit(t, "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4", true, 0, 20) 147 test_both_segwit(t, "BC1QW508D6QEJXTDG4Y5R3ZARVAYR0C5XW7KV8F3T4", false, 0, 0) 148 test_both_segwit(t, "bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3", true, 0, 32) 149 test_both_segwit(t, "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0", true, 1, 32) 150 test_both_segwit(t, "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqh2y7hd", false, 0, 0) 151 }