decred.org/dcrdex@v1.0.5/client/asset/firo/exx_test.go (about) 1 package firo 2 3 import ( 4 "bytes" 5 "encoding/hex" 6 "testing" 7 8 "decred.org/dcrdex/client/asset/btc" 9 dexfiro "decred.org/dcrdex/dex/networks/firo" 10 "github.com/btcsuite/btcd/btcutil" 11 ) 12 13 const ( 14 exxAddress = "EXXKcAcVWXeG7S9aiXXGuGNZkWdB9XuSbJ1z" 15 scriptAddress = "386ed39285803b1782d0e363897f1a81a5b87421" 16 expectedScriptStr = "e076a914386ed39285803b1782d0e363897f1a81a5b8742188ac" 17 testnetExtAddress = "EXTSnBDP57YoFRzLwHQoP1grxh9j52FKmRBY" 18 testnetScriptAddress = "963f2fd5ee2ee37d0b327794fc915d01343a4891" 19 testnetExpectedScriptStr = "e076a914963f2fd5ee2ee37d0b327794fc915d01343a489188ac" 20 21 // Example: e0 76a914 386ed39285803b1782d0e363897f1a81a5b87421 88ac 22 scriptLenEXX = 1 + 3 + ripemd160HashSize + 2 23 ) 24 25 /////////////////////////////////////////////////////////////////////////////// 26 // Mainnet 27 /////////////////////////////////////////////////////////////////////////////// 28 29 func TestDecodeExxAddress(t *testing.T) { 30 addr, err := decodeExxAddress(exxAddress, dexfiro.MainNetParams) 31 if err != nil { 32 t.Fatalf("addr=%v - %v", addr, err) 33 } 34 35 switch ty := addr.(type) { 36 case btcutil.Address, *addressEXX: 37 t.Logf("type=%T\n", ty) 38 default: 39 t.Fatalf("invalid type=%T", ty) 40 } 41 42 if !addr.IsForNet(dexfiro.MainNetParams) { 43 t.Fatalf("IsForNet failed") 44 } 45 scriptAddressB, err := hex.DecodeString(scriptAddress) 46 if err != nil { 47 t.Fatalf("hex decode error: %v", err) 48 } 49 if !bytes.Equal(addr.ScriptAddress(), scriptAddressB) { 50 t.Fatalf("ScriptAddress failed") 51 } 52 s := addr.String() 53 if s != exxAddress { 54 t.Fatalf("String failed expected %s got %s", exxAddress, s) 55 } 56 enc := addr.EncodeAddress() 57 if enc != exxAddress { 58 t.Fatalf("EncodeAddress failed expected %s got %s", exxAddress, enc) 59 } 60 } 61 62 func TestBuildExxPayToScript(t *testing.T) { 63 addr, err := decodeExxAddress(exxAddress, dexfiro.MainNetParams) 64 if err != nil { 65 t.Fatalf("addr=%v - %v", addr, err) 66 } 67 var script []byte 68 if scripter, is := addr.(btc.PaymentScripter); is { 69 script, err = scripter.PaymentScript() 70 if err != nil { 71 t.Fatal(err) 72 } 73 } else { 74 t.Fatal("addr does not implement btc.PaymentScripter") 75 } 76 if len(script) != scriptLenEXX { 77 t.Fatalf("wrong script length - expected %d got %d", scriptLenEXX, len(script)) 78 } 79 expected, _ := hex.DecodeString(expectedScriptStr) 80 if !bytes.Equal(script, expected) { 81 t.Fatalf("wrong script - expected %x got %x", expected, script) 82 } 83 } 84 85 /////////////////////////////////////////////////////////////////////////////// 86 // Testnet 87 /////////////////////////////////////////////////////////////////////////////// 88 89 func TestDecodeExtAddress(t *testing.T) { 90 addr, err := decodeExxAddress(testnetExtAddress, dexfiro.TestNetParams) 91 if err != nil { 92 t.Fatalf("testnet - addr=%v - %v", addr, err) 93 } 94 95 switch ty := addr.(type) { 96 case btcutil.Address: 97 t.Logf("testnet - type=%T\n", ty) 98 default: 99 t.Fatalf("testnet - invalid type=%T", ty) 100 } 101 102 if !addr.IsForNet(dexfiro.TestNetParams) { 103 t.Fatalf("testnet - IsForNet failed") 104 } 105 testnetScriptAddressB, err := hex.DecodeString(testnetScriptAddress) 106 if err != nil { 107 t.Fatalf("testnet - hex decode error: %v", err) 108 } 109 if !bytes.Equal(addr.ScriptAddress(), testnetScriptAddressB) { 110 t.Fatalf("testnet - ScriptAddress failed") 111 } 112 s := addr.String() 113 if s != testnetExtAddress { 114 t.Fatalf("testnet - String failed expected %s got %s", testnetExtAddress, s) 115 } 116 enc := addr.EncodeAddress() 117 if enc != testnetExtAddress { 118 t.Fatalf("testnet - EncodeAddress failed expected %s got %s", testnetExtAddress, enc) 119 } 120 } 121 122 func TestBuildExtPayToScript(t *testing.T) { 123 addr, err := decodeExxAddress(testnetExtAddress, dexfiro.TestNetParams) 124 if err != nil { 125 t.Fatalf("testnet - addr=%v - %v", addr, err) 126 } 127 var script []byte 128 if scripter, is := addr.(btc.PaymentScripter); is { 129 script, err = scripter.PaymentScript() 130 if err != nil { 131 t.Fatal(err) 132 } 133 } else { 134 t.Fatal("testnet - addr does not implement btc.PaymentScripter") 135 } 136 if len(script) != scriptLenEXX { 137 t.Fatalf("testnet - wrong script length - expected %d got %d", scriptLenEXX, len(script)) 138 } 139 expected, _ := hex.DecodeString(testnetExpectedScriptStr) 140 if !bytes.Equal(script, expected) { 141 t.Fatalf("testnet - wrong script - expected %x got %x", expected, script) 142 } 143 }