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  }