decred.org/dcrdex@v1.0.3/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  }