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 )