decred.org/dcrwallet/v3@v3.1.0/wallet/mixing_test.go (about)

     1  package wallet
     2  
     3  import (
     4  	"encoding/hex"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/decred/dcrd/wire"
     9  )
    10  
    11  func MsgTxFromHex(hexTx string) (*wire.MsgTx, error) {
    12  	tx := new(wire.MsgTx)
    13  	err := tx.Deserialize(hex.NewDecoder(strings.NewReader(hexTx)))
    14  	if err != nil {
    15  		return nil, err
    16  	}
    17  
    18  	return tx, nil
    19  }
    20  
    21  func TestIsMixTx(t *testing.T) {
    22  	t.Parallel()
    23  
    24  	// 11x 2.68435456
    25  	tx0, err := MsgTxFromHex(mix0Hex)
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  
    30  	coinbaseTx, err := MsgTxFromHex(coinbaseTxHex)
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  
    35  	tests := []struct {
    36  		name         string
    37  		tx           *wire.MsgTx
    38  		want         bool
    39  		wantDenom    int64
    40  		wantMixTotal uint32
    41  	}{
    42  		{
    43  			"ok",
    44  			tx0,
    45  			true,
    46  			268435456,
    47  			11,
    48  		},
    49  		{
    50  			"no, coinbase",
    51  			coinbaseTx,
    52  			false,
    53  			0,
    54  			0,
    55  		},
    56  	}
    57  	for _, tt := range tests {
    58  		tt := tt
    59  		t.Run(tt.name, func(t *testing.T) {
    60  			t.Parallel()
    61  
    62  			got, mixDenom, mixTotal := PossibleCoinJoin(tt.tx)
    63  			if got != tt.want {
    64  				t.Errorf("IsMixTx() got = %v, want %v", got, tt.want)
    65  			}
    66  			if mixDenom != tt.wantDenom {
    67  				t.Errorf("IsMixTx() mixDenom = %v, want %v", mixDenom, tt.wantDenom)
    68  			}
    69  			if mixTotal != tt.wantMixTotal {
    70  				t.Errorf("IsMixTx() mixTotal = %v, want %v", mixTotal, tt.wantMixTotal)
    71  			}
    72  		})
    73  	}
    74  }
    75  
    76  const (
    77  	// https://dcrdata.decred.org/tx/ab70b9b3fc88feb7be0c1a1b9ba47cac9dea10f158911fd9cfaf3af3f80878f3
    78  	mix0Hex = "010000000774cfd12c8a901bd9b0e5cd972c138e181339f3eef3429928e10851ca0bf436d306000000" +
    79  		"000000000074cfd12c8a901bd9b0e5cd972c138e181339f3eef3429928e10851ca0bf436d30d000000" +
    80  		"000000000074cfd12c8a901bd9b0e5cd972c138e181339f3eef3429928e10851ca0bf436d305000000" +
    81  		"000000000042273af8bb2efe115c386772ff5b0d8d0a6575ad15c6041024db801c6fc73ef100000000" +
    82  		"000000000074cfd12c8a901bd9b0e5cd972c138e181339f3eef3429928e10851ca0bf436d30f000000" +
    83  		"00000000000b3ce6daca6a00d7c5e46a337e2aa90715329571682cf17784ff87c92517602a02000000" +
    84  		"000000000074cfd12c8a901bd9b0e5cd972c138e181339f3eef3429928e10851ca0bf436d30e000000" +
    85  		"000000000012000000100000000000001976a914409e179d979916e02f62eb50cd78c3ad18e5da7188" +
    86  		"ac000000100000000000001976a9141c5ef6cffd8b9bd71307e3e31593dbd9dde8e11b88ac00000010" +
    87  		"0000000000001976a914a7e73f5770db11bd485d0ff3207204088640cd7888ac67949b080000000000" +
    88  		"001976a91410137cd3bc70bc3e4a5b928ff96d7bd4ceeb900d88ac000000100000000000001976a914" +
    89  		"99dc818cef04904c7bd448b3687e39e2e5b1d7f488ac000000100000000000001976a91413449fa707" +
    90  		"d58f73cc26dfbbd71ac57be6f471b888ac000000100000000000001976a914c525a4b9fa8044db4188" +
    91  		"f549495a4d4820b4227a88ac000000100000000000001976a914d1289d8e26dabeabe6240d077d32db" +
    92  		"4c54c0e13688acf384880e0000000000001976a914c687d7fce0075dd2ca7d2c41fb2cf3593d4136f8" +
    93  		"88aced745b0a0000000000001976a91445a6a04c897c7b0de650a1e3ff1786b9114f85e388ac74dc1f" +
    94  		"030000000000001976a9147173915721ec13a190d0fea40f218cc6630b1fe388ac929b820a00000000" +
    95  		"00001976a914dcfe63662b191222cb35bfc3e27eb1a553a528ea88ac000000100000000000001976a9" +
    96  		"1479e46b964fc1d630a500254160add87c79249d4288ac8509ab0c0000000000001976a914eba47f95" +
    97  		"0415bee6a69333d70972e08ed054f05488ac000000100000000000001976a914017d1e00b46c6bdf85" +
    98  		"9a191365b8f0b771434c8688ac3040cc030000000000001976a914a2fb33165f035329e2a065ddcf7a" +
    99  		"53374ab102b388ac000000100000000000001976a9142a022b71c68a4b172ded65544f7bdc76b9fc2c" +
   100  		"9488ac000000100000000000001976a914e65f8ddc1a9d436f63de09acb353458d5bf4312b88ac0000" +
   101  		"0000000000000756e61f1300000000e30b0600020000006b483045022100feba46c31970f59f7a781e" +
   102  		"4c7b04108d5a6dd1f717b103e6eda0bd5d4d26becb02207d3b310691196840a7143d529f2653f3693b" +
   103  		"1ac512c47a3aa9fbb93c7e40570b0121039156b5ea23156f39e6dec5513ae0c5aad5f200f0e25029e6" +
   104  		"439987ce6fc43f3f499e9b1800000000e30b0600020000006b483045022100ceac02bbe68b08734b5c" +
   105  		"c5cbbe505fddbd5d7c7c3834bba29060cf7bcfbaf5350220649a6228c3346781b5027fe55c1a7291a8" +
   106  		"c52fb78b318044f31f031f9ec75a30012102e69f908fa65d96015f3b9185a40976b61e7c3e7aeec7ff" +
   107  		"2056aa70aa22feae33cf14ab2c00000000e30b0600020000006a4730440220186f3006d499120c7ac0" +
   108  		"c915b62b4f24eb5f0223ca1238bb4e5bc94acec24e800220168a4b6574c14df2e1e6c8d694c81a4a2d" +
   109  		"b7fdb6d4ff3aff5dba5fa8d45f31d4012102a60330816caa5072884476c097fea65a7b2119ff31c7e5" +
   110  		"677a4a61195c940580e24ccc3300000000db0b0600050000006b483045022100d173015d3094489a66" +
   111  		"db9e3c4df3d6c90cc42410b267abfaf5dbb0e824232c8f02200f33e951f5bb03fafb50a5dcc2dc2289" +
   112  		"5eb251f557139b1213100abb440c9bdd012103129bf6311a66c66d53a14bf0339cf02c9335b03bbdbf" +
   113  		"4864589c1e1536ba3d1acf7e5b1a00000000e30b0600020000006a473044022057b174cd2e7b94b774" +
   114  		"48b414cd6d00416d13795e2fff3056cf94174f471055bc022016279190821ecb5bf128568f6e3e17e5" +
   115  		"683837f0ebb4c39e30e07498197ef011012102cf310775b1795eb7dd103efbf016a4d41ebe9ed7b984" +
   116  		"ece6874d047e164f17f874a5821a00000000d70b0600070000006b483045022100fd7147d2b7b925e2" +
   117  		"56f837dab0eeeb9a3596b730d613b21807b1e385c15a638102206e77ca5c955e13ad05e6d9f2b108eb" +
   118  		"e0c0a6a39e7642399826e05361281c71540121024d8eb3ea439f5bd1f352c94be3e35c5f77ad51fec0" +
   119  		"400531cbe90e3d70fce8853d90882e00000000e30b0600020000006b48304502210084f10cf8efaf2e" +
   120  		"9cc8a04d4a7a50bdc8cb442a0f2f0778ddc2c2f5d5d758ca9d022005c842f757964a4a7a14deff8bc7" +
   121  		"6ff61c98a1f9ace3fc4924ba3b4a31f46f1f012102f29679b95edfd36df4cf76a46ac89015a928098f" +
   122  		"68808700298357682cad4cd3"
   123  
   124  	coinbaseTxHex = "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff" +
   125  		"00ffffffff037bf5d50900000000000017a914f5916158e3e2c4551c1796708db8367207ed13bb8700" +
   126  		"0000000000000000000e6a0c120c0600de23ddae861cb0a3ecec033b0000000000001976a91465b788" +
   127  		"9832ade1d1a90c0bb6f582f369cfdc446988ac0000000000000000015eb6d9440000000000000000ff" +
   128  		"ffffff0800002f646372642f"
   129  )