This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
moneroutil/transaction_test.go

409 lines
176 KiB
Go
Raw Permalink Normal View History

2017-04-27 23:21:44 +00:00
package moneroutil
import (
"bytes"
"encoding/hex"
"testing"
)
2017-05-03 02:55:03 +00:00
func TestCoinbaseTransaction(t *testing.T) {
2017-04-27 23:21:44 +00:00
2017-05-03 02:55:03 +00:00
tests := []struct {
name string
txHex string
hashHex string
version uint32
outputSum uint64
inputHex string
blockNum uint64
outputKeys []string
2017-05-03 02:55:03 +00:00
}{
{
name: "block 15",
txHex: "014b01ff0f098fd61702a3ef0df2a51b14891676b39f18d6c0b8c52bfc3f6ba5f63f792e993f73b900df8092f40102204e4d5992876b76cc8a30760c8fd82dbaf948cb2d858278a08f4d8db326682a8087a70e027a2328c2d86a1f84335010d183d0eef067195da4a57169ac9d1c8c1f84ec74a580d293ad03023c6411e620104487402583db89dd15245448092f339a30a4982e076c7ba0a7578094ebdc0302861696af6e92cea973fa217f3b4df3e8c43a2a1cb888b515e23d2d5d3d41ba688088aca3cf0202d3087348abe2dffa189c79f82e032f14cbd12cfd6ece0a5192ec235a4cf2c96e8090cad2c60e02feb619b90856473e906295252cc9a87abbb7f5db409579d3169be5ee23b35ab680e08d84ddcb010275cd0dbe02a00558669ef424c2d5f8cbefc8c4af711f1afde0404628c401b13580c0caf384a30202b1bb2e13bf7c1d88885b7ebf2be56e5064af24d69f3c92d9264550122eed1a0b2101bbac13803d9b7941444cc817292b91a9634fa6cee88ced917571df2e0c87ad79",
hashHex: "e3a799da24d9f41aac231ba2efb853ae649283feaf5e1ba46b5fc2c194414c5d",
version: 1,
outputSum: 17591934387855,
blockNum: 15,
outputKeys: []string{
"a3ef0df2a51b14891676b39f18d6c0b8c52bfc3f6ba5f63f792e993f73b900df",
"204e4d5992876b76cc8a30760c8fd82dbaf948cb2d858278a08f4d8db326682a",
"7a2328c2d86a1f84335010d183d0eef067195da4a57169ac9d1c8c1f84ec74a5",
"3c6411e620104487402583db89dd15245448092f339a30a4982e076c7ba0a757",
"861696af6e92cea973fa217f3b4df3e8c43a2a1cb888b515e23d2d5d3d41ba68",
"d3087348abe2dffa189c79f82e032f14cbd12cfd6ece0a5192ec235a4cf2c96e",
"feb619b90856473e906295252cc9a87abbb7f5db409579d3169be5ee23b35ab6",
"75cd0dbe02a00558669ef424c2d5f8cbefc8c4af711f1afde0404628c401b135",
"b1bb2e13bf7c1d88885b7ebf2be56e5064af24d69f3c92d9264550122eed1a0b",
2017-05-03 02:55:03 +00:00
},
},
{
name: "block 1000",
txHex: "01a40801ffe80709d9f53102b68a80f92240fca8c0456db6aeb065c264f5b9c319ae478171e115fd04a0297c809bee0202c4abb05169a7188f37e4fcbca954cda85887ecd651ea986ca66748cf2cfed60480ade20402bdda1625687fad38c89473db3a0eb77294ca39e71f4771dcdf4e13bd124ff62d8088debe010276910ddc3da7c84b2d6ac9edc640d70025dd10e972d646670d453b6b9576bfca80e497d0120264ec845e5e738fa650d4d109c8c8972cbe657edc8494d0040d40abec1f2c0d7a80f8cce284020267c9d11fccc47abd45fe2b9cab90ee625ce7c0f63d19193a57fcb6971e9241628090cad2c60e02d66329f76861f0390a21d3133194aa2ac674b657743036fad3dcce1e1e87e82a80e08d84ddcb010205de735f3a734a84032b418f48d2520c7e1a7111767b937a1fe18cd4739b088880c0caf384a30202efb9148c55da56343bb95f4cf1f4b81965979e15f5365fc1d5701be197d6fa942101df90bfecd9e549ad895b79f9313a8cc43139c0b30c0258b0f41173e729ca9457",
hashHex: "80be5324c155542182a73bf29480d4c1d5cf71eb4931c1934b55699e56c2bbb2",
version: 1,
outputSum: 17575416817881,
blockNum: 1000,
outputKeys: []string{
"b68a80f92240fca8c0456db6aeb065c264f5b9c319ae478171e115fd04a0297c",
"c4abb05169a7188f37e4fcbca954cda85887ecd651ea986ca66748cf2cfed604",
"bdda1625687fad38c89473db3a0eb77294ca39e71f4771dcdf4e13bd124ff62d",
"76910ddc3da7c84b2d6ac9edc640d70025dd10e972d646670d453b6b9576bfca",
"64ec845e5e738fa650d4d109c8c8972cbe657edc8494d0040d40abec1f2c0d7a",
"67c9d11fccc47abd45fe2b9cab90ee625ce7c0f63d19193a57fcb6971e924162",
"d66329f76861f0390a21d3133194aa2ac674b657743036fad3dcce1e1e87e82a",
"05de735f3a734a84032b418f48d2520c7e1a7111767b937a1fe18cd4739b0888",
"efb9148c55da56343bb95f4cf1f4b81965979e15f5365fc1d5701be197d6fa94",
2017-05-03 02:55:03 +00:00
},
},
{
name: "block 8888",
txHex: "01f44501ffb84509febd1c0248b0d7b09734048effc6b1569d7b05151758be513e5453ef88fd95820343b57280897a02b22e6274bdd728d08b24c007cc4a9e91bcdfd310f1c9cc3875d31c9c8206b0fa808ece1c02bfb5c533d2ac90d4d14d060fe371efa32190e96d06d1803db5cd4307ffc7b4b680cee4cd02026140a3a863a74bdc7a262580cc01baf4828d8b3937291aaeb6aabbbb6e9f57c080bcc1960b021c9b3b52b902d43a4f76ef89e752bb2c578deef154fd88ebefe10d9b24a30ac880a0be81950102fed41abd242c982d9f208d56bc1d9e22d07d682e048c2335401354da98aeb06180c0ee8ed20b023e1a313da690b4fdbb89032c97c75984ebd967e219102cc12bede3bfcf44c07b80e08d84ddcb01028a415ad5926c7c4d9792e5d107ce3af9069d785dc38366b6e2bf32ba8c5837e280c0caf384a302025233b2401a9ae95654b0bd9da298fc101b0ae49da8db765caef045b2da21367a210178598f5650a92b7bfb1fee24cbb49e989479e5aa37448eb2f0827189be58827a",
hashHex: "f6afe8b7c122722612c550d169fcf532cc9d7fafff29de1ae95129fdd9194a91",
version: 1,
outputSum: 17443762466686,
blockNum: 8888,
outputKeys: []string{
"48b0d7b09734048effc6b1569d7b05151758be513e5453ef88fd95820343b572",
"b22e6274bdd728d08b24c007cc4a9e91bcdfd310f1c9cc3875d31c9c8206b0fa",
"bfb5c533d2ac90d4d14d060fe371efa32190e96d06d1803db5cd4307ffc7b4b6",
"6140a3a863a74bdc7a262580cc01baf4828d8b3937291aaeb6aabbbb6e9f57c0",
"1c9b3b52b902d43a4f76ef89e752bb2c578deef154fd88ebefe10d9b24a30ac8",
"fed41abd242c982d9f208d56bc1d9e22d07d682e048c2335401354da98aeb061",
"3e1a313da690b4fdbb89032c97c75984ebd967e219102cc12bede3bfcf44c07b",
"8a415ad5926c7c4d9792e5d107ce3af9069d785dc38366b6e2bf32ba8c5837e2",
"5233b2401a9ae95654b0bd9da298fc101b0ae49da8db765caef045b2da21367a",
2017-05-03 02:55:03 +00:00
},
},
{
name: "block 65000",
txHex: "01a4fc0301ffe8fb0308adb32602daeb7d2fb79539dbd28b16295db665c31551eb96c02d7fdb638b524a2bda74428092f40102e547e5609175ba6f206dfb480d991f7d1ff6cfe001aa57440474359c1869087e80ade20402338ddf2a19c7455dc1c51e14f3bf07e16b353119f6226dafc4369d010fcc5c4d80b4c4c321021d1486e4d33e95da67bfdb75e5555b19e31d17a84217a11f7f2aa38900e4532180f8cce284020249147ecd5f4fbc64ec9b9eb17f044ac13e7c5f196dbd7206d8c0ad595dd83c0b80c0ee8ed20b0216c402a1c00c00997b6bb250747cfa809be45a7bf9a503339a768c3ec09908ce80c0f9decfae0102c396f8b1ad626c31ac39b5daceaec904dff69265b8f734563cfb946814c3173280c0caf384a30202ee1a068ee5d4bfe3414e89f9ba05b5b1d899060dc609025f03a49ef9a4d9daa350017fe72e842760bc591d4e03c82b9e4b7de49c85c92b702bb779ae3553b7f4db28020800000001169200a200000000000000000000000000000000000000000000000000000000000000000000000000",
hashHex: "afe70adf7d09948952e9a968137bf09b19e05b1fd880883762bcb6dc9aeac7f9",
version: 1,
outputSum: 16479014629165,
blockNum: 65000,
outputKeys: []string{
"daeb7d2fb79539dbd28b16295db665c31551eb96c02d7fdb638b524a2bda7442",
"e547e5609175ba6f206dfb480d991f7d1ff6cfe001aa57440474359c1869087e",
"338ddf2a19c7455dc1c51e14f3bf07e16b353119f6226dafc4369d010fcc5c4d",
"1d1486e4d33e95da67bfdb75e5555b19e31d17a84217a11f7f2aa38900e45321",
"49147ecd5f4fbc64ec9b9eb17f044ac13e7c5f196dbd7206d8c0ad595dd83c0b",
"16c402a1c00c00997b6bb250747cfa809be45a7bf9a503339a768c3ec09908ce",
"c396f8b1ad626c31ac39b5daceaec904dff69265b8f734563cfb946814c31732",
"ee1a068ee5d4bfe3414e89f9ba05b5b1d899060dc609025f03a49ef9a4d9daa3",
2017-05-03 02:55:03 +00:00
},
},
2017-05-13 03:37:42 +00:00
{
name: "block 1302238",
txHex: "029abe4f01ffdebd4f01a3caca99eaea01021804724f0b0938d83473fcb7fbb93a2991ec98139020b2fe8e8dcaf65888d3dd2b0141d60c73bd6cfd6eddd30039279aefba252747167e5e77ad1fd373916d2a273f020800000049259da0dd00",
hashHex: "be30ee0ac38d83c86d84326c64b13eea5b40897a321004d17e589241d49199f7",
version: 2,
outputSum: 8068686587171,
blockNum: 1302238,
outputKeys: []string{
"1804724f0b0938d83473fcb7fbb93a2991ec98139020b2fe8e8dcaf65888d3dd",
},
},
2017-04-27 23:21:44 +00:00
}
2017-05-03 02:55:03 +00:00
for _, test := range tests {
serializedTx, _ := hex.DecodeString(test.txHex)
buffer := new(bytes.Buffer)
buffer.Write(serializedTx)
transaction, err := ParseTransaction(buffer)
if err != nil {
t.Errorf("%s: error parsing tx: %s", test.name, err)
}
2017-05-14 00:36:32 +00:00
wantHash := HexToHash(test.hashHex)
2017-05-13 03:37:42 +00:00
gotHash := transaction.GetHash()
if wantHash != gotHash {
t.Errorf("%s: want %x, got %x", test.name, wantHash, gotHash)
}
2017-05-03 02:55:03 +00:00
if test.version != transaction.version {
t.Errorf("%s: version: want %d, got %d", test.name, test.version, transaction.version)
}
wantUnlockTime := uint64(test.blockNum + 60)
if wantUnlockTime != transaction.unlockTime {
t.Errorf("%s: unlock: want %d, got %d", test.name, wantUnlockTime, transaction.unlockTime)
}
gotSum := transaction.OutputSum()
if test.outputSum != gotSum {
t.Errorf("%s: sum: want %d, got %d", test.name, test.outputSum, gotSum)
}
gotLen := len(transaction.vin)
if 1 != gotLen {
t.Errorf("%s: input len: want %d, got %d", test.name, 1, gotLen)
}
wantIn := append([]byte{0xff}, Uint64ToBytes(test.blockNum)...)
gotIn := transaction.vin[0].TxInSerialize()
2017-05-03 02:55:03 +00:00
if bytes.Compare(wantIn, gotIn) != 0 {
t.Errorf("%s: input 0: want %x, got %x", test.name, wantIn, gotIn)
}
wantLen := len(test.outputKeys)
2017-05-03 02:55:03 +00:00
gotLen = len(transaction.vout)
if wantLen != gotLen {
t.Errorf("%s: output len: want %d, got %d", test.name, wantLen, gotLen)
}
for i, outputKey := range test.outputKeys {
wantKey, _ := hex.DecodeString(outputKey)
2017-05-20 10:04:57 +00:00
txOut := transaction.vout[i]
gotKey := txOut.key[:]
if bytes.Compare(wantKey, gotKey) != 0 {
t.Errorf("%s: output %d: want %x, got %x", test.name, i, wantKey, gotKey)
2017-05-03 02:55:03 +00:00
}
}
gotSerialized := transaction.Serialize()
if bytes.Compare(serializedTx, gotSerialized) != 0 {
t.Errorf("%s: serialized: want %x, got %x", test.name, serializedTx, gotSerialized)
}
2017-04-27 23:21:44 +00:00
}
}
func TestTransaction(t *testing.T) {
tests := []struct {
name string
hashHex string
prefixHashHex string
version uint32
inputSum uint64
outputSum uint64
2017-05-03 19:31:17 +00:00
mixinLength int
lenSigs int
inputKeyImages []string
outputKeys []string
txHex string
}{
{
name: "17 inputs form block 40646",
hashHex: "ca9ea576d67af4926e31ebeb159aaee58950aea18e5e0ad0bae23b2d85ede8c1",
prefixHashHex: "aeecb4170b276d2ac69a7abca86f82621f56d943c8d4a8900cd56192da8d442d",
version: 1,
inputSum: 11808810000000,
outputSum: 11808809000000,
mixinLength: 1,
lenSigs: 17,
inputKeyImages: []string{
"c9679ba9ca8a6fa87a1352985e46ea3723489d3699ab1af075532f711739b9c5",
"0e99a2f46b383802f04a7f231047a2ed414e861b1d2a3494b371c04759cc270d",
"74b213379239558f5d4628a48a43a36ce9cdbe673453608719836664f7e80949",
"f61c2293448c98e77ccf1165638e908986de0789917fd291f9bc32491360360b",
"04d0d8575cdde390173e269f61e8edb9406a76e479106987adc714c14f453015",
"58dc8327b8c0b944b05024863ecd64bceac940001e93e3acabfc570bff548362",
"4b8ff554752b31af4ad50f7edcaec088b4f7ee2693a59661c06890119fc48121",
"a1b66ceefb3af10b0184798a78a3a26d0bd1d762366927540fb053634a8b97b0",
"9388ec3806bf2f3997d76f7e05820330068598deea35dd8eefcc31fced30b867",
"45905146e79364df9fffa56da7fa37e1534acaeaac951cc6d754516c5b808510",
"47e6864c2c086c13dcde36e360e3adcc3bbe295a893b9f6183020e3da1920e8a",
"f1ea44fc891f7d5ea914abefd964f46147eb650585825731e6ecbd33e469952c",
"22f06bb1b9ec96b84763f07c554469b8c2d9ae7bae97ccb7602a960302bcf69b",
"a044522fb61ddfc366666b9de517d2901c3b821ffb1aa09e8932dad3f2e42727",
"1253cf28f88eaa38cce28d43d6d076780e1d85b14eeccb65b76f6b79d6e079a0",
"a06b60e2069a79706e442cb60b9c1c66d018a9222dd03205527c9ab94c2a2053",
"94f83724e913891d5add7d7a4256f17a9fd76fb91f6600289bcc42e83ccdb79e",
},
outputKeys: []string{
"eebdccc569747e7ad5787d1a88f7b67dd753b86b03c331bc93dbbcffd413ee36",
"d5d6274573883a2a1231b15701e2447e4c5ad3f4a6901701ea1ab477ba8d502e",
"9c6a48ca222ac5b4f037828166b95929b766b8d71582ddf8dbc718983e6626b8",
"50ec4b429b04fa717bab4c315660862137848064536f9a02bb1d4e5894e36f33",
"00197ee25626aa3cc0adc1c372ce8e58c5a3f3cb97f341412306cdbf1a5f25e3",
"ebc842713e4bd0124917c34c361d2b31dd2343db91c24e44a23653d800aa2199",
},
txHex: "01001102809bee0201d11fc9679ba9ca8a6fa87a1352985e46ea3723489d3699ab1af075532f711739b9c50280b4c4c32101c6210e99a2f46b383802f04a7f231047a2ed414e861b1d2a3494b371c04759cc270d028095f52a01882074b213379239558f5d4628a48a43a36ce9cdbe673453608719836664f7e809490280c0a8ca9a3a01b102f61c2293448c98e77ccf1165638e908986de0789917fd291f9bc32491360360b0280897a01d12004d0d8575cdde390173e269f61e8edb9406a76e479106987adc714c14f4530150280d88ee16f01eb1d58dc8327b8c0b944b05024863ecd64bceac940001e93e3acabfc570bff5483620280b4c4c32101bd204b8ff554752b31af4ad50f7edcaec088b4f7ee2693a59661c06890119fc48121028090bcfd0201cf1fa1b66ceefb3af10b0184798a78a3a26d0bd1d762366927540fb053634a8b97b00280b09dc2df0101a6239388ec3806bf2f3997d76f7e05820330068598deea35dd8eefcc31fced30b8670280d293ad0301b92045905146e79364df9fffa56da7fa37e1534acaeaac951cc6d754516c5b808510028080a2a9eae80101880147e6864c2c086c13dcde36e360e3adcc3bbe295a893b9f6183020e3da1920e8a0280b4c4c32101b620f1ea44fc891f7d5ea914abefd964f46147eb650585825731e6ecbd33e469952c0280b081daaf1401aa0222f06bb1b9ec96b84763f07c554469b8c2d9ae7bae97ccb7602a960302bcf69b02809bee0201d51ea044522fb61ddfc366666b9de517d2901c3b821ffb1aa09e8932dad3f2e4272702809bee0201d61e1253cf28f88eaa38cce28d43d6d076780e1d85b14eeccb65b76f6b79d6e079a00280d0b8e1981a01b810a06b60e2069a79706e442cb60b9c1c66d018a9222dd03205527c9ab94c2a2053028088aca3cf0201812194f83724e913891d5add7d7a4256f17a9fd76fb91f6600289bcc42e83ccdb79e06c0a8a50402eebdccc569747e7ad5787d1a88f7b67dd753b86b03c331bc93dbbcffd413ee368090bcfd0202d5d6274573883a2a1231b15701e2447e4c5ad3f4a6901701ea1ab477ba8d502e80a0d9e61d029c6a48ca222ac5b4f037828166b95929b766b8d71582ddf8dbc718983e6626b88080dd9da4170250ec4b429b04fa717bab4c315660862137848064536f9a02bb1d4e5894e36f3380a094a58d1d0200197ee25626aa3cc0adc1c372ce8e58c5a3f3cb97f341412306cdbf1a5f25e380c0caf384a30202ebc842713e4bd0124917c34c361d2b31dd2343db91c24e44a23653d800aa2199440221003fe2d8b0f49996be3fdf4bc732ad0fda3fde42488bd9a6dc3fef018c4b77aa53015f641367cb5d2c4c40f5b7dc726ce1ac651623b8082746221e468a47c46556cd11b4d1bd92e85f38152848cbf100c6f8b15c9de5278e4506bb9131230807d60e658188593715e7980a9d9e188d2114f2a3b71541cfe66fb94413237edf36dc0aa15a56d12471a2cf2e25be43a3ee48571602dd19ebf4e4e266aec5fe3102650e1a60e1343243d80083df37004a1f2854276d3c4c0f2aca56c39ae7b1d254180036f40c9af0528811fea9037b5d622f8c8c35df908e1603e3ba6e68ce8cb75809f6d08eb841a31d9ba3431c67449cef0892347c1e04c69dec0e09d29b522ac50bab5482839d1cb11a87f7725fe5e8783becb0ea0fa72a78de4971c0322b7923042d8160d8328228ba25a2da542c2405317f5bb5e1a2c9bb5feb46c9c2b037d40ab1c98c70cb8734070bf96fd84125180b8b89906335eab6b09e3ca0a5687c9807fd24038e8ae0e7eaacae4c5bfbaaaea58aad3b0d412bf1018232826eafc40c00eb495e5cb3471025744818fcf6b816dd817f64d5eea8947f847e180bf8607e068e3ea474372d1fa6403b936841f53ec3de8b46c844f2e448e32d64c6767c4909938010d942fe8443326196ce93046d99a0c215182d3db9ede168e28380833002e78a7366b2150946ec2bf63796dd978fad325236c97ab7141b8dcec316b07a0269ccff03c6b402f4f9403f88b00b778f8468ec1e00a8528492b49a8b7cfa6e042ce6cde5341618d5f6a019db385644c598332dcd68e4f16166af3a6c824a8801ea768e60ff37038e78958e68b423c5510c98d86482af42c1c1df33a967ab8c0a6cfd56986640333b75f0ff31922d5ff70829799340cc0d18f494f7a38a27b30b099b882b67da4fb48e245c6456241c19eff98f066c0fe1d7a0995b3b5e14de0cdf2ac0f8ffe135d0710b7854df42f990ffc9bf260a4656a51aadb64eecfd6600df7aad92c9fc0d6d377e05ab10286cf86501b77929bb2c4939dc88b1b0001e0f040d0a1260b8f38d2f68a7052267d43e389bb0365982e63c6e347c8c4109430fff86011fa605ff377f4c626c7178f1f5938da6305730e52ee19bfc4335ce87001e90adda866adfbbd662376871fdb9680b2d03c0b43a4195e9e3a1111c24c40c25e8cb88df2f983fbd0894513bd50d7f6ab17e3ec3d93a9dd5d0dff27e6110038b5c05dd084dd957eef2d9fb0de7ca67d75e1b8a81b10dc3edf099a020536f0cfd6a1a7294ab1db71d78486324d2e7baf84147e304ba450d07ae6b97624dd9009bc3a3d857d80c2af5729707522f5fca14a07deaa73e16b2429b0a5d35a8970b0dadafdcd67834f0241443b935d57f77cd4cf6f309235e71c987c9a5bb15110818f4d46aa56d6c55dcb07b49b899d617be4237b98282e2dfbff86365c3d532077f7fa7550dc29c79419410132dc1a2f2f0598212b483fa59d56ecbc662c09e0d3d944ad18d9a5a55ec9b8af82a1d148f0677de4526d26ce7fe123bdd809c0c06f60b6cceb8c694da13a8ac807258a8dc
},
{
name: "50 inputs from block 58272",
hashHex: "53ce4b3a565aa697c5fb3ea06c77cc9dd1ccecea13062d6eb6d90f438de49455",
prefixHashHex: "1fd8a75d094aa8979466b79432cb45b59e0fe925685c9537146ea0c45404d408",
version: 1,
inputSum: 10185065000000,
outputSum: 10185064000000,
mixinLength: 11,
lenSigs: 50,
inputKeyImages: []string{
"820a17337a978d77f5d4a18394b7f51db488e0750a1d7783b36de3448336ba45",
"c6e213f3d4af612ad251ab6113ab2d372e14ada5dc8aa1885a8aa50b6a331b5a",
"88f8a8d9f23e17e3fdc6f016b205c437044b21cf57e795b1ac527f9dd5cc9097",
"ddfb6faa63a63dbf85d5aa269f8ceb6792d800cf380aca351d7a88fdea5b74ee",
"f8d87f38cfc5f5545baf06fc6c9374924497604413b7a579e00d18301a25e267",
"0b209585caa385b2e05bc19af684505509f006b05a59eefc1076fe7e7d7917a5",
"8b5fca06589be976c5185b5f08b9f5f60c8cda546aa548b7afa3ee08cd214515",
"5e01e3d4eb65fd63b8d0896b6d178366be439f160d588463e5b03a9030e869c7",
"6566751ea354cf7e92cec883d266c540e5941949320b57b6297546676fb94f24",
"daf286a570841e37683c58d0342f1cf44b8bf5442bfbb9de703e45330761a5d6",
"c08debe40a7afa705a96156a6bd660de5da981c31a5eec2ebb17d675c9e87015",
"b06063a6c667c97d3e7355aaa56f5d87e45cc9da1b958122b94952b995a7df23",
"b3437b63ed0d550cdbce557e9e20ca7c94dc5c241638f2589e7c61cf57f546e6",
"ceb56bea2d4aa428021d8d6120ebf80d42df6cae882e3d3353472d05e78e77b4",
"b8f7de03726e195f906a6f7455e279b45bf116684eb48b25e3e653a81b38e578",
"14531686204cebf33d64c8ccf68c3d4860841bdc414bab232e7b66a46cd6b335",
"311c0ddcebc24e7d54d725b9558bed562769a3db4a36e4ec563d5a10a348101e",
"8ac433cf139f78db1a63200c004c40c7dc82f772ca83e57f73fa28c443ede9ba",
"475ed1bad6e1b7cc14f23e3339984e1040bf41dfdea91d92972b66a4bf72c2bc",
"b9d5accc4e4973906870594b5ad97f16a45a802dd276f20af9506c498585e93c",
"a357ae4548f9fd11bfe47c31220921f4e96eef952856db58ed4cf89f322ae4c3",
"7eb1b4d05c9de0031306b915fedd14fdfb589cbc4e15d531ea902baa42d6ba7c",
"47f8f4cf86a1585c19c5917ee7a5e3e2fba3294d164e0a11080ec06cc5beecbb",
"f110ac0e87fc49e2fc857e8e3351d9f8e538dbdc18cd7674fcc6357c1a746a43",
"86563121501def13ed4da0ba1d1d16dcafe3cfcf87882aeb990f11192a3919c8",
"1e6c03f9640648c04ffebb1849159fa078521690a561af00ea998947566c8685",
"6b342f9398b1525258fdc211ba1499db6c7cfef8d9739223f7d612c171386cb0",
"1a03ea7fe56248001714b2a5f8ec45e38770028c574b35feb0861c795b95643a",
"068b21594b115a747eec6f7364fd635508dc76c2bcb4c7399d1c4bcde9b38781",
"094c30dd1de99a245915f4a4913cde2ca48653b78824780fae7df1c97a5c1e8b",
"542abc427d7c35c991ebfe8067db68f5470720b2cd821e1fa5f1a2b00512a672",
"73d179cd40dfa9e27cd4939f1c2991596f91bdb5b58f98002bbfca49dbfef337",
"b15efb3ee06b37a3986f865a08e278544746f73780dfadbb849fa73ba1613ee5",
"bc51ab789902924ced64de0175a677586a39c12a4f0db51d5925dca588656902",
"47b61cdf019e28708e1c21a99e02ad0dedf262034951ea00a7c1232fdb14529d",
"b2a10d56c9145db527ac6004ba3b3f368aa9ea39ec1bc381a347658b288701e9",
"6dfa6e146842df153f875fe92d84bc3fb3815d2732e54c3e6532eb5276f52686",
"ccbc1eb8324dcd448c13260b34352ef5ad372b24dcd06e71f7bedb6cea206a19",
"1421e9f3755ccfcc1569fb7cc106ec299f45af10c4451b90b5ddce256895c9b6",
"2816b9ace5d720daaaf5d34293b6c8973b6066613267adfa164f4bee113a328c",
"c6061807a29263057f14c62c7f7b4df632131615ef639f30904427794544f051",
"cdcff48bc19a81795d9d72aec9cdb18ab47b73a65a23dff84385cab06478ad2f",
"8d3f55d98e85afc12b74011ba68dd2d34452eb157b78f9e3675640dfadcfa1dd",
"0e5f3443b035bada3624c6d645cfbc432bfb53ad67de24e393fe53f5189a8bdb",
"cb66c22f1c2f79d5d826aa85b0a3ba081a30444a553fdbd12fda6c390347455c",
"4050873291a2f4a3c44f4cbcf51e764f1609c8d59475d04b8d0c289cb5485438",
"683614bdcd4c85acd80691a9584f222eafdc15925b0ebe823cae53998eb60915",
"a3be100329027c704f12652919a56508b2b99da4d9cecb8bfcfcfc015200d9d3",
"952e20e503fb840247a305d39a36aef642d53f292272bb21d141d40117b10441",
"43450539500506a9bb0fd5b408a86324ae2f195b20bfa1ccefb032785d3feb53",
},
outputKeys: []string{
"298c6ce060956751984781bf5b9ced27595082232ad48aec2cefaf6f010d5ac5",
"6a8ce1805ba113dcef4985ffaa36837cf8d84ad9f6fcbd515ce5030123be78de",
"0f19c004a21f85e987ab567d6d1c484568cf05176debcedd8649c9ea48ca5e47",
"fbaad619f98d23e216357211cc7bcaadd244b33a0e4febc911ea0381530adeef",
"bfae014409db5bbb21cfe04224b42a6476697df719ecc8b0d8ac65245c05482a",
"2898f95d657d0fb76ebf551bea861d63657d71d53887df7f2aaa455c46488aaa",
},
txHex: "0100320280a094a58d1d0b8e038304ba07ee01d202c102ec0116d801ce0738820a17337a978d77f5d4a18394b7f51db488e0750a1d7783b36de3448336ba450280f8cce284020b68d4089014f80703c801b70baa048001bc099712c6e213f3d4af612ad251ab6113ab2d372e14ada5dc8aa1885a8aa50b6a331b5a0280a094a58d1d0bd001f103fb04bf04da01ea01900b9101c3011d1f88f8a8d9f23e17e3fdc6f016b205c437044b21cf57e795b1ac527f9dd5cc909702c0a8a5040b60c80ca101c20eda028e06dd0ddc0fbb069202db1bddfb6faa63a63dbf85d5aa269f8ceb6792d800cf380aca351d7a88fdea5b74ee0280b09dc2df010be305a705c2089006fc068b09c40dda02fe0fc304c007f8d87f38cfc5f5545baf06fc6c9374924497604413b7a579e00d18301a25e267028094ebdc030be601b2039203b535d61eff0a8b18ff0fd327de1aaa0b0b209585caa385b2e05bc19af684505509f006b05a59eefc1076fe7e7d7917a50280a0be8195010bcc1eeb03d4048c30d302709204b209960117458b5fca06589be976c5185b5f08b9f5f60c8cda546aa548b7afa3ee08cd2145150280e0a596bb110b8204da0365741a75ea096afb045db1065e01e3d4eb65fd63b8d0896b6d178366be439f160d588463e5b03a9030e869c70280a094a58d1d0bf501b604b6024730b102df048801ac0c49f8026566751ea354cf7e92cec883d266c540e5941949320b57b6297546676fb94f240280d293ad030b970eba059f07e20b9e01b80dd409862dd513f42b8103daf286a570841e37683c58d0342f1cf44b8bf5442bfbb9de703e45330761a5d60280e8eda1ba010bc803eb07c905da05a801e1174eb6078409af07a918c08debe40a7afa705a96156a6bd660de5da981c31a5eec2ebb17d675c9e870150280a094a58d1d0bae01c3019201488001af06a904d702d00501ef07b06063a6c667c97d3e7355aaa56f5d87e45cc9da1b958122b94952b995a7df2302c09fab030bb402b811ca03d50334be04119a05ee06e403a824b3437b63ed0d550cdbce557e9e20ca7c94dc5c241638f2589e7c61cf57f546e60280ade2040bbb0aab03a803971eeb09e208e7679e038b01cc0130ceb56bea2d4aa428021d8d6120ebf80d42df6cae882e3d3353472d05e78e77b40280d293ad030bac16af11a512ad09b90ed116b206ac16e20145b628b8f7de03726e195f906a6f7455e279b45bf116684eb48b25e3e653a81b38e5780280c0ee8ed20b0bee05d808f10ba803cf05d70372bd09e6038c01b40d14531686204cebf33d64c8ccf68c3d4860841bdc414bab232e7b66a46cd6b3350280b081daaf140bad0101f01d83048c02b5030f9004f5018702910b311c0ddcebc24e7d54d725b9558bed562769a3db4a36e4ec563d5a10a348101e0280b09dc2df010bbb02ee04dc0441f505b413c710c605940dc005dc0a8ac433cf139f78db1a63200c004c40c7dc82f772ca83e57f73fa28c443ede9ba028090cad2c60e0be006e101d6029402b0028e012b05940f8604a41b475ed1bad6e1b7cc14f23e3339984e1040bf41dfdea91d92972b66a4bf72c2bc028080dd9da4170be70613eb0a3cb507af02fb108704a303f9058102b9d5accc4e4973906870594b5ad97f16a45a802dd276f20af9506c498585e93c028094ebdc030b9701bf06a106a30fb70a802ef209dc0aa402ce16cc65a357ae4548f9fd11bfe47c31220921f4e96eef952856db58ed4cf89f322ae4c30280c8afa0250bfe08d504cf0ee614d332c018c409f909f0079113d26b7eb1b4d05c9de0031306b915fedd14fdfb589cbc4e15d531ea902baa42d6ba7c028088aca3cf020b8e09f109a20a13e101a607e60bb6020fcd02ed1847f8f4cf86a1585c19c5917ee7a5e3e2fba3294d164e0a11080ec06cc5beecbb0280d0dbc3f4020be102a404480c8f13a21de406cc03228707b22ff110ac0e87fc49e2fc857e8e3351d9f8e538dbdc18cd7674fcc6357c1a746a430280f882ad160b9d1da505db16c2098b01bf04ff0832e304f623bf1d86563121501def13ed4da0ba1d1d16dcafe3cfcf87882aeb990f11192a3919c80280bcc1960b0bd907dd01f90c8e0ccf029102d859a414568c0fcd171e6c03f9640648c04ffebb1849159fa078521690a561af00ea998947566c86850280b4c4c3210b3fed10d203e907bc03ac1df408fc068514aa12991b6b342f9398b1525258fdc211ba1499db6c7cfef8d9739223f7d612c171386cb00280f8cce284020ba509e901b607ec0a8807a70110cd10af12e906a0041a03ea7fe56248001714b2a5f8ec45e38770028c574b35feb0861c795b95643a0280c6868f010baf068403b729dd03b703aa01cf13bc14f70fa736a30c068b21594b115a747eec6f7364fd635508dc76c2bcb4c7399d1c4bcde9b387810280cab5ee010ba001c102b3228206ce06d405d806f907bf14c410f53f094c30dd1de99a245915f4a4913cde2ca48653b78824780fae7df1c97a5c1e8b0280f8cce284020bf107a11ccc0b5ac904af0464ec04b0021bd612542abc427d7c35c991ebfe8067db68f5470720b2cd821e1fa5f1a2b00512a672028095f52a0b8703a30596059f0bb50fb825e304e12588249115e30a73d179cd40dfa9e27cd4939f1c2991596f91bdb5b58f98002bbfca49dbfef337028087a70e0be302ae019f0d9615f003b003b90182058506c605b970b15efb3ee06b37a3986f865a08e278544746f73780dfadbb849fa73ba1613ee50280b4c4c3210b88092ca81db8118401d2019615b005b513fe01c51abc51ab789902924ced64de0175a677586a39c12a4f0db51d5925dca5886569
},
{
2017-05-20 10:04:57 +00:00
name: "2 inputs/3 outputs from 1302238",
hashHex: "be9d2cf9b473dbbb2c59ffb07b5d812516f94d64121d87ad61956386a4bc3843",
prefixHashHex: "1bbfda600fa6affc80dae05b1124bf05ed0e20890aa42601441dbe0f6fa81f4b",
version: 2,
inputSum: 0,
outputSum: 0,
mixinLength: 2,
lenSigs: 0,
inputKeyImages: []string{
"3006bd371b1f0896e8288565a6ee338cc1bf8d49377c4ee6fb4edec941b469ff",
"c4d6e57d433bea03e84602181ec725b2a5e26b39f690f34fa4344cfe5e0af6e6",
},
outputKeys: []string{
"e8043835f159904ba847435bb264b268bccb72182103e36fe107c667c978c5c2",
"9c9fe087f1c89be13f2b350678054326f83732e0c0ee3d1f679f6007b5d7d84f",
"6276a1056f82a31f15c8f417b47c7227e89f6084644f21dc84a6935eeecf19a5",
},
txHex: "020002020003eeb724ffb209dd81013006bd371b1f0896e8288565a6ee338cc1bf8d49377c4ee6fb4edec941b469ff020003deec249bf008df50c4d6e57d433bea03e84602181ec725b2a5e26b39f690f34fa4344cfe5e0af6e6030002e8043835f159904ba847435bb264b268bccb72182103e36fe107c667c978c5c200029c9fe087f1c89be13f2b350678054326f83732e0c0ee3d1f679f6007b5d7d84f00026276a1056f82a31f15c8f417b47c7227e89f6084644f21dc84a6935eeecf19a5210111a67c084c7c71d2ee4458d2d7f213ae6b79a00147e3d3637adc084b098b5fb60280aef0815ce1848e3c587524f501f927d7dfa329782ed9b12447bd6c5435e6d4380c61394eeb91361a6c60f8a1414a3f001a3855c1e881348588ba5c4c0d8c5ffb387f9ff6646682c579ca9bcd82dcc79238bd3ac9cd1d7d95cae4f7e51e3a959e9cb8390974283a0bcd7022fb79d56c48456b7173f511d801116ac823d551ed740f866a06d07a4f86404a55f359659acfad67614d5b8c3adaf29cf07e0198faee3683100e0806eaa766dbaf09c93d577503e9eac4e7d1850dc9c6e8f7221be13f1c36670bdc96e7e6b973d409d5ea3f81972b844f083db6352c51def090cf3e0c2082100d30d5bf7f0602ae45eeb8361c0fc61d159e2b8581871d936a8d70e623f1bec102f63090f4b6e620fff2749a79c9556ee03cc02dcdd7200379e667941ef691d490f615c8405ab8b8024eb7f3b8a1f5eae543b0122db8321785556063e36a892f21e4ec30fd051afad9691d759f12aa5411c14257f8fd3caecb0e859dba3516d0a3ea16669bee122c55182a8673566c6afc38c93ace2650ce06b41a14b62eabea08a99c3b8b09f334b9bda5906f1e481b3fdc41cebfd7c45a139e8c156b68bddb04a7f7c617fd88e2bb066abfb91cb9c708c39ef6005b37a7f3472357dcdc500f039b15c7a871ea9c975ae1993345d9a7536bb3d8f1fb9d764643b354eb11f788021d295e331a5c60cd5ea56b85fc18840037e9cf6d25b5f09a9d99718a260ce908464ff548f0e8a247072aebd17e7b614949794f46f38b79c1a506ca6d567f0d002f9c9649eab343ad7da5755118623f8ee5dc628ee50f1a5d02ee13bccedb080aab365eadd3125fc8297355bce4c32d7eaef730961e958fbb6bbfc4022b59f909bbe7b7fde33c9f3eb0fb87531f8b24f6c5fddf12848b7539d4cb4a4ed68a2c093cc73a3c71e0992873f66030737a3d10d276678c28144e81fb40832d52693c07c96c24f680a627a8ea8f8d76f61f9403dacefc07fd3187102b32d4ecbe5bae035fd85b6ddad623ff9e081890e15d47398cab231cd40b2a94da28f65a6c36e20861c5a7af0cce66128eab0c2d8461c47d3a30698110be15895174b72e0fbe9e09ddbb9325806e682a6bab52608c37b292bd02836c8188751b13e09a21c0bcf607595009f6d1d5b8940f94a506ec58fd1b79c353855e0db2ecf3048c2f7224520e72cf02272cc7dc999f7675fa3269606f6be3119147914c73b1c0cb779fa3a60f144856042cf8a7d930d5d74052042a2590b2232383ee8fd44e63453f37549f0c50a6358f077cc7cc1af7e1515f9efda750f7887d04ffe728b1f1cfaa63da0f0aea5848a5871a9617edd9d414c0b249fbe9f1103a17fbc08d794f1c7660078100c54f3700d8df0a3c5ec1447694179039287ac8c392e884542a0e12413f4bd60c85aeac6b7bc0b51a419b3291a4f1234db9648b301e966b723aafd2381c45f80e3ba5ea209db729330091e03eda426bb08c6d0d15d8a31b2aa1470b1ec2aa9b0f4890bce254b5ffa8c07128d0450a8533695d774398985ddc7399db3472592605a58b9700066a060dfe2ae6681eb2ea195ae87c3859d1db28a12e99f166d2f508303395a4145f85a5c6e21b4809d4e95af7e2569ee835af71675486581e443e01073a7ab3ed80c083cb628447450fde4ab33e19c35d406b46dc2d6c04d24f610be25e852ff7be104369072715eb3098cfa4182a1292576f97eb8eb996d0f9800c1eb35876e019ef8b1f3f4f0cc46b7f25f50d0df7f53451fe17a8d245e0cca0022449bd26846074a351ea000fc9393f56022869498f2dc9627fb710b50ed1a5006e235da7eb3d8e930e7f9be82d16e9bf99d5e51b5067342f104832b262e6b8046519e6d914c33ba037fd94d1e37a251597e14be3a4a50743fcc56726a1229c030bb3bfd3015fc95ff5a128d586d783e68bfd958e63d83a9daf700ec22492cf06acf546097351b35ad68ba245abf4169f99d253f616c42819218987fffe192c0e9c7f2bb74b31e00ad302fb9cdd8ee3ce2bdf38bcf2bd76921c780a9180825e0e40caa0854b19ed6f007a248517d244ce34ab8e0dcd7ebf18a61ad2d0e2b7330fd35df106d1cc436c318a6cd88c0aed3a7aec4307cb7e6bfb99923ef09a71af07536f39db13e261f61221d3302f6757214b0c33aca327b658d659c5d00d8e5902bf773d09c204c941789a4168200fe897a465e8c30020f98cb66864f98f9a46064520a4ac94ffaa29477b6cfc5ada48b4d422e64f7768fb0aeacc15b5c0038c070ffc28941673707c3bc49d3979364a0d50027a836a910390ce80b651c2fb47041ad40c202a3f982db0502cb834ba3b8642c2e3395354fdd443227f954063390cd229b6e84d0c579ace647f83d0883fd77628c1329f7942f91c0ca1a7916a720c3491f23a7c9f0ab21ff2ee74729d38469804894f46fb6cd217af31618eb1b002ba4483a786b9241325c84ec7c37e9ed4748d2f802a176d156f293f05e3cca10ab6ab08b5ca156da77f5010c78d6c237984ff550a7ebb9943b3f698bb8d61e80ea5b1135aad3d386a6fdbfc0163517e5eb7
},
{
name: "3 more inputs from 1302238",
hashHex: "7197cbfd111e8c2174d8833b3a87c723dc8b394abc1faa9175bd73ff5f4d16b5",
prefixHashHex: "25d4258c209eae157de84508cc35e5b9cb5369210e55d255a4b0feae4788e3f4",
version: 2,
inputSum: 0,
outputSum: 0,
mixinLength: 2,
lenSigs: 0,
inputKeyImages: []string{
"101168bda2047709a950de3473adc8775883e9442beb6dfa0cca023d82ea8958",
"41b669d5f9c1d6211dcd816be9ac2c4b9df4711aaae9f1b762b5ea45b59e7712",
},
outputKeys: []string{
"64d3ed9b6ca4a0ddb4f1eca8360d37dbbb9da7c807caa327037799538c9d6cc5",
"eeab751583cfff1b387d4422f3466a0350fa22da8abc1d025b9502713e109407",
"369cc87c270e3a7be9aaaf611f28bba88983450786524370ce655da8c301ac2b",
},
txHex: "020002020003dd8b1cb8d307e1870b101168bda2047709a950de3473adc8775883e9442beb6dfa0cca023d82ea8958020003c4f91ee836deba0f41b669d5f9c1d6211dcd816be9ac2c4b9df4711aaae9f1b762b5ea45b59e771203000264d3ed9b6ca4a0ddb4f1eca8360d37dbbb9da7c807caa327037799538c9d6cc50002eeab751583cfff1b387d4422f3466a0350fa22da8abc1d025b9502713e1094070002369cc87c270e3a7be9aaaf611f28bba88983450786524370ce655da8c301ac2b2101f0a05b68101fddb37f87ded0b89ded89918b2ae750e87db3b0f84614e531898e0280aef0815ca07f3bb05444b33096dcfdd08cdd88c2a8e20f358fb1b350d34d6ea2b034c8d6b2c966f5b68528349eac7914cad1d063f2b35c143ebcc8c60edeeb37a070ce44dab824435e5188996505b0af5c55a7d81ea069dbf4a238499b454dd2c457980ca561025c89aeb1d2bfc14b7a163cde9faa777de9e61a77c65d5e3005fdfc3a0500baff5c45858c1f94b8f78d3ba7fb3371a7c18010bae796732cb2133795880260b2372f3ce5db8c35f536d5329651fc0b6417ef2c7b2e440a21bbeaf4628f04946494dcfb900b1f675b57d3cc085819a1080096b67854526366e3071284070378225b0bef1f1336e84d1fb649674d00817ebdb4ca24ddcc94a2e4ca9b242b063e49928375b585459bd7b5ae3f70b8019287898deb384abe5f2ff11bb98ceb4633fbe66b9f592ae59cbcf8e9a0874eab49988179a53fdd01088bd885adad4c0a8b041ebc08e7dbe566697630da9e3b25d5360ff5c05c9a65f782e271bcc2eb1a5478fa4a556ef6fcb18d45a120d985ee8232eae49fbe9605367e7f86d833ab033eaa7ef596ecfea6cf0aa74b0e702c4ebcff3093fd6b6b50efb126e8b1845500522fb5e53f277099df162f9195b40d1bf52e99d1127dcac7db5067caa427f80ea13abfcbcaf550fa3c694905de1bbef0b1ba4eb5e0c91ceb86c53897a8de6307cae488f6031c44f693040cb2da6497270c51648b17fac48d9d081df400ef0809907f2b40f1430f7a536d6a74aa0a1cf19e6b08ea793f22931357737882a7e009573db2abb4f57fa455dab91018111081b3dc301658f7ef8b870c4b27e9a79307b5e8df7f19337fd57332b50515bd1cc56314bf290f05576d661398e0adc39007416457ebf428b954d643b19badf2bdd95dc27fb3c388db0bb80dd1f03507cf01876435e4118034b055c003960590b305bd606edfd3baf74b0045f779797e95092e4e6f1f462767c1f3fb7db455827b79ecfe6f5d35e95b245b794d6344339b0c8ee626ae4844705cf413d7585fa8ed4dd1a99746f95babf929f36679893dbe0f014fd7a8269f8a2ac69dec0f12847708ec570c4704ade002a119f2938631190da71d19dfd0f62157cebf8311bd0ab75917c9a39ffa8f414d2c662cb6587f5705cc77f299f8b7a9e40fd319c8555958a85262df1cc683d5d7f4549f188a509b02ceddee25522091cb723843fb518e1d3a437903f287bb41dbf1254e781522e20d48590ae99f88e28bd950dd36a1c42fcd147772a2214530487bccf2d2cf019d078244f874684a990f8df577fac9643084a7215a791990f809f75c3efd061c3d086dd695a23e91cba52a2201b562da546861e330df6c331fba46eabdf60a1a5005ce6a99490b87742ffac169f269db8b7b33e2fd0240c54b42799e1bfb8473e30424d0cd328e848bbc94d4fbbea542d5796376dfbbb866018f6ad5e0139e8659019e04c61c964a1eaedb94d4c90f2e0f4207bf1ae83042124a83ede75a8f67f40e3ac4dedab5c6d5dfa78e359436df0ab50c5d258b7af45ac151fd632782e02a078ebced1a088e7ab8cb955cf4083a595464db34b36e6f5d18572b2ba9f514c50e6265424d8e30712c0cf80e188163c1949799a62591cb82e4f2b6e7cc37aa3b01bf614c57fc2b512dba2dcf8bdc1869e62bcaab41058b301b8197ab0b4f99fd007ef4adb9721509ea2d4e9aa49a705501c6109a51300c3acda80d699ef8963506c985aba70207fd7cdcc01d5de3a14a5d9287e1277418594aa7da4ca28e07d20d09e283d87c687f2e9da46ffdb40da2e7a77644cda90bfcb4bf6381988255d202a05b062951c1eb417af4e55a1bdccb7e5f166e900eb1d6123d11e5645799a60facc8c6cd32ad30b9604cffd2b47152a813e534fb963d12ae6c835df35b84cf0da6f25d3fe5edb29ad7340c42b39687cee805aac01e419e37f795af1c5cc7b30bd3a729258d6a37dec95a6cae96dfcf9c6ffa53c3a1e96be5c1cf9454afb8270330d6b86dc98555c8ccbd77141ea54cfe14eaed9ea1437b00205432d74f2dbf0adb1a34839f03f1da2472750ab836fae40e257ec8970c90aa1a833a48d5da510e642b5370cdd49bb9274a56fb107c9f11f1657b4bee58777a6075a1c96abee807fb92f8cfb5498fffb1d4ec4fa2e4f78788f11c4ca1bb573687b9160b2b0cba015a3a30e363c2638b27aeaae44971cc5c045c7238cb3f608e02fce412168b7803533e324b2237cd7211a3cba52bd18533ece205c653665111b6f6b8a862eca104513c8221443803b4a2d4f30326ad724c77363681ffd05b794a3403ea3d886b0348fc019051ac715d1ce6981d51c4fd52d56f4675b6bb97c19bfdb16a45182303775073aa18c45bf5d643f9813514960a05c8bd61d09424372b80a9a42a29730def7c31253ee9a67b16ef798cd8037dd471e9820b821eb536f2ab7dcde42e8e0838726bac36dfd4a91bdf0b11a138cac29eaab7e199d0ffc16d11d83ab48ae609eee186f7ac4e7d5bb76f40f3467925e01a3ed7bfe4af13bae77745342e7bda087779adf1e9dae19d7c36716318130ca0d6
},
}
for _, test := range tests {
serializedTx, _ := hex.DecodeString(test.txHex)
buffer := new(bytes.Buffer)
buffer.Write(serializedTx)
transaction, err := ParseTransaction(buffer)
if err != nil {
t.Errorf("%s: error parsing tx: %s", test.name, err)
}
2017-05-14 00:36:32 +00:00
wantHash := HexToHash(test.hashHex)
gotHash := transaction.GetHash()
if wantHash != gotHash {
t.Errorf("%s: want %x, got %x", test.name, wantHash, gotHash)
}
gotHash = transaction.PrefixHash()
2017-05-14 00:36:32 +00:00
wantHash = HexToHash(test.prefixHashHex)
if wantHash != gotHash {
t.Errorf("%s: want %x, got %x", test.name, wantHash, gotHash)
}
if test.version != transaction.version {
t.Errorf("%s: version: want %d, got %d", test.name, test.version, transaction.version)
}
wantUnlockTime := uint64(0)
if wantUnlockTime != transaction.unlockTime {
t.Errorf("%s: unlock: want %d, got %d", test.name, wantUnlockTime, transaction.unlockTime)
}
gotSum := transaction.OutputSum()
if test.outputSum != gotSum {
2017-05-03 16:27:49 +00:00
t.Errorf("%s: output sum: want %d, got %d", test.name, test.outputSum, gotSum)
}
wantLen := len(test.inputKeyImages)
gotLen := len(transaction.vin)
if wantLen != gotLen {
t.Errorf("%s: input len: want %d, got %d", test.name, wantLen, gotLen)
}
2017-05-03 16:27:49 +00:00
var gotInputSum uint64
for i, keyImage := range test.inputKeyImages {
wantImage, _ := hex.DecodeString(keyImage)
2017-05-03 16:27:49 +00:00
txIn, ok := transaction.vin[i].(*txInToKey)
if !ok {
t.Errorf("%s: input %d: not txInToKey", test.name, i)
continue
}
gotImage := txIn.keyImage[:]
if bytes.Compare(wantImage, gotImage) != 0 {
t.Errorf("%s: input key image %d: want %x, got %x", test.name, i, wantImage, gotImage)
}
2017-05-03 16:27:49 +00:00
gotInputSum += txIn.amount
}
if test.inputSum != gotInputSum {
t.Errorf("%s: input sum: want %d, got %d", test.name, test.inputSum, gotInputSum)
}
wantLen = len(test.outputKeys)
gotLen = len(transaction.vout)
if wantLen != gotLen {
t.Errorf("%s: output len: want %d, got %d", test.name, wantLen, gotLen)
}
for i, outputKey := range test.outputKeys {
wantKey, _ := hex.DecodeString(outputKey)
2017-05-20 10:04:57 +00:00
txOut := transaction.vout[i]
gotKey := txOut.key[:]
if bytes.Compare(wantKey, gotKey) != 0 {
t.Errorf("%s: output key %d: want %x, got %x", test.name, i, wantKey, gotKey)
}
}
wantLen = test.lenSigs
2017-05-03 19:31:17 +00:00
gotLen = len(transaction.signatures)
if wantLen != gotLen {
t.Errorf("%s: signature len: want %d, got %d", test.name, wantLen, gotLen)
}
for i, mixins := range transaction.signatures {
wantLen = test.mixinLength
gotLen = len(mixins)
if wantLen != gotLen {
t.Errorf("%s: mixin len for %d: want %d, got %d", test.name, i, wantLen, gotLen)
}
}
gotSerialized := transaction.Serialize()
2017-05-03 19:31:17 +00:00
wantSerialized := serializedTx
if bytes.Compare(wantSerialized, gotSerialized) != 0 {
t.Errorf("%s: serialized: want %x, got %x", test.name, wantSerialized, gotSerialized)
}
}
}