diff --git a/bchain/coins/bch/bcashrpc_test.go b/bchain/coins/bch/bcashrpc_test.go index d5fb5788..8185fd05 100644 --- a/bchain/coins/bch/bcashrpc_test.go +++ b/bchain/coins/bch/bcashrpc_test.go @@ -25,7 +25,7 @@ func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) { var rpcTest *rpc.Test func init() { - t, err := rpc.NewTest("bch", getRPCClient) + t, err := rpc.NewTest("Bcash Testnet", getRPCClient) if err != nil { panic(err) } diff --git a/bchain/coins/btc/bitcoinrpc_test.go b/bchain/coins/btc/bitcoinrpc_test.go index c7920bad..52b09898 100644 --- a/bchain/coins/btc/bitcoinrpc_test.go +++ b/bchain/coins/btc/bitcoinrpc_test.go @@ -4,295 +4,42 @@ package btc import ( "blockbook/bchain" - "encoding/hex" + "blockbook/bchain/tests/rpc" "encoding/json" - "flag" - "fmt" - "reflect" "testing" ) -var rpcURL = flag.String("rpcURL", "http://localhost:18030", "RPC URL of backend server") -var rpcUser = flag.String("rpcUser", "rpc", "RPC user of backend server") -var rpcPass = flag.String("rpcPass", "rpc", "RPC password of backend server") -var rpcClient *BitcoinRPC - -func getRPCConfig() string { - config := `{ - "coin_name": "Bitcoin", - "rpcURL": "%s", - "rpcUser": "%s", - "rpcPass": "%s", - "rpcTimeout": 25, - "parse": true - }` - - return fmt.Sprintf(config, *rpcURL, *rpcUser, *rpcPass) -} - -func getRPCClient() (*BitcoinRPC, error) { - if rpcClient == nil { - cfg := json.RawMessage(getRPCConfig()) - c, err := NewBitcoinRPC(cfg, nil) - if err != nil { - return nil, err - } - cli := c.(*BitcoinRPC) - cli.Parser = NewBitcoinParser(GetChainParams("main"), cli.ChainConfig) - if err != nil { - return nil, err - } - rpcClient = cli +func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) { + c, err := NewBitcoinRPC(cfg, nil) + if err != nil { + return nil, err } - return rpcClient, nil + cli := c.(*BitcoinRPC) + cli.Parser = NewBitcoinParser(GetChainParams("test"), cli.ChainConfig) + if err != nil { + return nil, err + } + return cli, nil } -const blockHeight = 1325168 -const blockHash = "000000000000004ed0834f3de922e66d024ec4da9fcc2da17be61369cb6dc041" -const blockHex = "00000020624870e3ea6036a9a6e52a8eeaf8e0ff03e4eaee2b72469932000000000000008c585ae9e2acab0020e2440caaf9f73e7c8060d3bd689c646b5a919208d99058aa751f5b00ec5a19231e565d21010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff200370381404aa751f5b084000000df7684a000d2f6e6f64655374726174756d2f00000000020000000000000000266a24aa21a9edcd297ed00be6d425c1b41e459bcfd25fd75a9c2ad8925e35f78dcda0ef4d5e01e10ebe04000000001976a9143d27951af09911d3f49f0211f78c894b66866d2788ac0120000000000000000000000000000000000000000000000000000000000000000000000000010000000001019d30178fe7557de700fb002bfd1cfb10b325be057ff46aeefe710f3b19292cf00100000017160014ff9e86fefd867d091ca4d5750998040bbf33107effffffff02c03b47030000000017a9148ebfcc7875903512f703362726cf55472e21dad687f4ea880a0100000017a9149da77b5b6e81f202a07e3ea00582e3046b26c8488702473044022055ebeb662dd15d3205c334b95d9d577a966b5ba2cc52f25cf3c61929193412950220279d2a50ac872803d4741c3bbcbd204fce2458cfed5841368bafbf22966d5e8e012103cd75ac2da3c97389a4422d7480cfe637fd1c5ce19a5f4df7b2931bafeb573d100000000001000000000101fe098f0844bba5202ce15a804123aa8fc52589080cd22a5a0ac4169ed92df75c01000000171600147b8404baf3b3d1416e71d5ecda84cf0c7e79ad30ffffffff02c03b47030000000017a9140853f99f8cbfead897e5d3834e036495386acd3d87b96c04fd0000000017a914647507f0caedaed6df36757ad28d170f29b95fe58702483045022100bde094da370bb2aeb191fa397570fbb2b26dde09d36e757a0a1df877c67fbeb4022007dc1e0b43448a89cbb919c90e7d036ab8e4e11d3b8affb53c88358cb8bf081c012103d24b1ddc91d69d08c2089e97b0202d134a799ab4aae3251d81e420f776f547b00000000001000000000101a687153d9a4519971077f6bb7088325b197c58d9f95c742512b5a7b8559609530100000017160014c62bbe3e5d4def22263450229f43d9a61339115cffffffff02391a0000000000001976a91441d8f7a941dca4c34e00d50ca6be574d642a3ad488acd017aa0e0100000017a914e36b5a4e4df8b8f9a10cce386447b5e671ead6e38702473044022016b0eff1ae82ed2c5a32fb1335f22fd51d60b0392bdb063a3d506a88de5292bf022024bc55ffa619bd0c5a36b6c69913dab4d1b34f2e5aa8fa548e0d564619770e0c0121039fddd73578117cd57f0b99bddf39dc94f265219dee040372942ebe964aa36ef30000000001000000000101b1922f0cab9698947e436d20bbecb8a15fdbdba7b8e2ad6a25be5ab78b9b1b7301000000171600148365fcacd3199e0cd70d98dc1e9ad7c0b5d279eeffffffff0280a4bf07000000001976a914bc7d3a15afb9a04b13efdf024b83442e7e07f3f488ac7afcd6030100000017a914743c3e586bb3b631464d20e01860f297c085f7348702483045022100d4a4088ea1096da3f95305616245fdd64b6ad3400d21480501b5fc444245cabe02205ce8abe30c4b45c0f25a1ac9975ae6eaef98b6c45c2450a3cf8858389993faf2012102a8cae4050b0b8301599ef4b6948ee813f07f758a3a0965a6af1f862e81a6df540000000001000000000101ce4fabd36456f17417e2068419183f2650379839618458aa2322e047286ffc580100000017160014eb101fb798eca9333ccc0b6984d1054abdd60002ffffffff0240d2df03000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac8fb855090100000017a914c79fb05db54493d0e3ede7e1b6d710b042b3459f8702483045022100d55b3174cf031a409fad139ada8486005bdbce2ae425a67aec3a41a8a18f8d26022012b116f82985e382a1e8f5a766b38d531a4d8682202ae5c055aae4cc4a94b4a00121038f4d77101c53039712b4450117624d2d9310d1843185f647bc8628ec2fa64b9000000000010000000001012e6d38e1cf684d537dad988362159f03de685d6c3dd7479d468ab9066f6395d601000000171600140afef30070c9befac220f898be117e33c44d3789ffffffff0224fd3d00000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac20b905140100000017a914a698131430776e0bd219832919fc85e2df6dd9d987024830450221009fb50e10f85ad349e4648fe71973815b9183f1a6b808ab3873d0307a2bd71b6c02206f80e7c431e6b3dc35848f7fe366a8a2f5dda1a9846e28fd5a88241b67ffd8800121032282b3b5a8077b73c3e2ee159810f021505c0ff3ba218b91047086fa873da99200000000010000000001015e8bd40d2153a20725dc5eb12cfde24e282e0e1bfbec66106eb255c064a13d02010000001716001433a8c4e5e52900b2fc57ebcd03ea34c3e28d6814ffffffff0220e9ef01000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac6e7f200e0100000017a9143618c14d1aa2bb46bee0a59c377bc552d027cb3e870247304402203da945cc37c79ce5eec1d75adc0567473a12c2686663f8e832314100ad997492022017a7458b5b2c06dda4a5cece75e861aece1ecc55080e6f8043b606d9e592a94c012102584027b3b9ff3e64cd57baf50da0957c34336def87b98f61665dfe6d45705e420000000001000000000101fe304cca760fe189d79a8e5e311830d017bc8812161b9d24283c297a1ebbdbbe0100000017160014bce31ed63169644d9a227edd85d3405455001a99ffffffff0248fa7b00000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac91af6f020100000017a914808b2cc1237ea31e19c60dba6e46c5d2bb6fa3bb8702473044022034732925a5c01e22cee03a544bd5fbe8d05a7be08e829a457872d1855377c186022012c7145f93af3553a524a30356b7d5a900a1c0c0ad6d14519f82a9febf8c1b24012102b53ad54b9b9e192bed46c24da6a8906cb176c5ad3679e12ce351317e55e81a40000000000100000000010123c6bdad841a097b93ccfa302330b4c70309c2a122847d62d3b4bfe3772601bc01000000171600149b71a55c68f56bf1bbe05910350808a9227d3411ffffffff0290f4f700000000001976a914e0365f8cf2319332778ec3cce6dc492a00b1856e88ac92449cff0000000017a914bce9a8c401614a26e8a85bd669239e076530712a870247304402201cfc6353c6f19d6df56c98f2068c9a948efa13b63958649a56313744c70de5a402206521a961ca5416df75422a48776be0eb38d6d1046897457a75d16047de1c4c38012103dab9885a7269b971886e819021f27dd2a4dcbcd0187d62bbbe38476cb444eb35000000000200000001ce48fcdbfc566ea622aa2da336657acceccf54f1d9ca7c79028b86cdd7caa283000000006a47304402204291e9e39a4867a430a65493a011ceb5cf2d26bc46a046e2ffb87cd0a386a88502201483f622a50b6ff4c72ace2ad0d2e22cd31ab0dde78e2eeb2f6190e42484f8c901210321bac8d9a7e4864cce64ddbef48f288e4211fca13831e7a12602c0539e98ea3afeffffff028a8b72030000000017a914c6953688a93ef58e65730492188115627ae0137287abc6e556260000001976a914e4fce41cd713b9ef2c5bedf1bb9927a22860b26088ac6f3814000200000001b4b685356ab5552f5cf2e7e92cc2c16a4618ed12d1f0887e4e4af6d428edf0ab000000006b483045022100c76cf3081c04eecbfd569c1859ad6dd0a5fec8b8ff6019be1c95a2aafcba000a02203649c3aaa7a478b9d530bb101d6a62322e6a18857e7e295d24b612c41fc2b8560121032aaec129afa2e84e9c7b4bebbc01ac95685c5d3c8e01a4e29df765476369115cfeffffff021c1dfb070000000017a914c695362d23fe7b1185504314afca7eae585e134a8794acda68000000001976a914a1bb4528486172f1cbdc67b234c81eb73232a4f888ac6f38140001000000000102ede32062d23747785d356984dc67c14c8ff75bb04d90ae47dd7bb5d5b8f9417d00000000171600147edbcdda98080eeb6e8a63c63da135498295c3cdffffffffb1c1e45760312e8a3852db2040d55ddcfca8574e399f91b788302c426ed24b97010000001716001464acbc88e62af1e51e3c31ad94433947f34b9cbeffffffff0280a4bf07000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988aca4717efc0000000017a914fbda2c7bb5843b6e65b3ad246938df982891700987024830450221009019de71babe335456ed9336dddd0ec16dd0bd5f5c90a868a640e99f5d3ca98902202c60f4e83348ed8c19dfd4a92eeab2589e47945e3dca047890d40309ee3bb059012102b45e239d96f8504ae45a32af7c80f6164f7b9658166e318521ee822192fee3ef024730440220210c71905180fde5f9ae88a31326db690f96b2c5daf8fff5570ac298dee0a689022041f5f18dc6f364eb6f16c1fd5ed281094f06c36047f1290ef87df969394ebe2e01210289ffee9a06624297a176daf8198868ae5de59fdf5196f905bd4312b0b87ec3250000000001000000000102a4b8c14f271cfa77d5ecaed9c3026472a55ea6bca119e2ff7b04975326f5974001000000171600147edbcdda98080eeb6e8a63c63da135498295c3cdffffffffabcdf96b8ba187c24d70f98a2edfbf100821506212637f28b30a08efa970a4eb0100000017160014df7d60680e984aae4052e24bce8f17e4bfdcc532ffffffff0292fe1e00000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac13e796110100000017a914c9e67d2b78a38857c786ea9a2fc3e64cb6e775648702483045022100a6910d3a3b64545a44e097a3739b1206095602fa796afc51f81b249d1293ad0a02206cdae51853b59ca52003f4e54ea8ae418b6b4d036cbe1fdd78677efe8eddb318012102b45e239d96f8504ae45a32af7c80f6164f7b9658166e318521ee822192fee3ef0247304402202684a6f59ee255f3f5e9a9209a735bf2aaa818d47add7c3f7a5590623bd2211c0220452bf2fb8d0dc0380862988f0f098c21e861004e02da7bd1fc6bea4e7f33d2dc012103f308867fda821467f77d372791644225174ae16daba86e55754c150a8d5aa40d0000000001000000000102c997f74e9ad52a44446302381e0fa6de080dadadf55842588bde1be8a47b438000000000171600147edbcdda98080eeb6e8a63c63da135498295c3cdffffffff563c9674a40bf1aa1063f767a50d2288146116fe869012ad3dad03d71e74a8800100000017160014af97d082fd5de049bce2991d9dcaa5d3035a1b04ffffffff0290f4f700000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac74b77b030100000017a914fb1e0f36e2d8e91a43c7faba7dae18a610070c4a87024730440220538fcd8fbbf39b813372a7ff6251f1d22c9e940f54272ab525e1d1dc5f03049b022066cc5a1c445573e7e069fdaf3aa33d6665ef5f7936cb155cfd9093e888ca9461012102b45e239d96f8504ae45a32af7c80f6164f7b9658166e318521ee822192fee3ef0248304502210089e579ce52f765c8de6033e1cee93c94aa9a5ef3a194fec12885ed163dc60688022050aadd6aa170c6cfb58f406497949b0140327b4889ca7e082bdcfa8cc03d487f012103fb1a838f38d587dea0532f4a15a39b96e411cdb37c5160ba576a4cb0072db019000000000100000001945db9278cf52925f081c248718e8cfda14e6e6fa3927f995c931fcd46c34e31010000006b483045022100be6f7c570fbea321589921a68f36d15083037d485391e9747fc5a8575b39a686022058424c9bc0953f6e5025dfb2e1e871ec4251b8c23edaa74209084a80fa672876012102d8e60ae936d05571a895e87153d4e9e6cd1edda25027082827c48be1732eea0cffffffff0240420f00000000001976a914d98c258af45dac58c9dfae48467a42a6abae80b588ac5087e605000000001976a9145cd00e25286f599b113955a4df4ea4652c9c1f7888ac000000000100000001efc34b31c654016863b41387a427ef3244c327baee28328aa774ab98778b3ae9010000006a47304402202688e2cf2405141ba26daae44c38dd01eb843174ecc8eeced9e1eebb625e5a4f02206f73df2befc0488aae2332c8b9218e2b68eb7d16c9866e5356454cf69b3e8ba20121035bfe51970a53fc082496bee793e0867ccfd3300ed1daa31c72b2b6758a808054ffffffff02404b4c00000000001976a91416d70844e7edc66c6310b43e2542794936554fb688ac4ba24a05000000001976a914e5db6283f20c0f46cc7bcb513c585db342fb5a2988ac000000000100000001515b21ee49f5ccf9ac47f3ac48f0583d85047cc9d61d94a9dd5302b523fed5a2010000006a47304402200bf35a5c489d82099d5e88f76b39c741909512a5f364962e21c1212e547a9e8a022069d7a437c4f1ad7cfe0a0222e8bda2f0e4c3e96af9d8686fbcc3778ebc4d1663012102be0e658dfe2fc44dfb002ded5b940b7652c337fae5d0bb6e9d03eef015122d74ffffffff02404b4c00000000001976a91462c53f3d55fa12c2c29b19abeb0628bbdfdada2788acb951fe04000000001976a9144de5927116991ba650517b269113143a4f28a70c88ac0000000001000000010c019de34ce1a570afcf91f868f67d5b096d7f1c7c87db21058566c8ce2c7c01010000006a473044022037b5f8a4c6093776ef9620ce4e507c127e8f7ea02a957d53a6651e65db29d5d302200505154be5f75d58c0b3ef281377c505efdcf93486709e9bf0e7dfd1c1a0295701210338635752203772f6e9439b6c3a938ac2fb0d4b3899f362d404eed74e6411671effffffff02404b4c00000000001976a914590cac3835df1b828525c5ef8d68c764132211d488ac2701b204000000001976a9149bf15f5d0b330b7d0e8e95876f4c57d00752c9e788ac0000000001000000018a252a4cb4c3eaee96207be472c8b8015dffd019dd7bc8dfc41c837a46d301d1010000006a4730440220111bd379c5f3159c782a8929d0d926a4032ed370fafb166f382c78a9462521a6022046f300312aec1dde470a9738535ff9030ba10d1900c1af48f16e14543ba03e2c0121021026601cca75ae27974c43b99bbcd63e0a00d6c5bf66c2fc7831636eb1280f6dffffffff02404b4c00000000001976a914cdc8204f4f50e94f735bd80fa8b1a33271acd2ab88ac95b06504000000001976a91466aa2c28ca122d84205eba70cf9fa320974aec6f88ac0000000001000000016918f2e5ce992d39e517a6188a77ecce5a00b012d08a8a49f0d062ab0b188438010000006a47304402204258d87bfa00cd1d770a4dbd8a175764f035d5097359b24e426928de9d017b92022079ee80d17f99d68e53b623fc9a07415371f8676428cf36325ba82fd9e7da7764012102ec26bcc4b6e199d1dfbeeabf95825ea9350ace8101a00835c08907564a2e5784ffffffff02404b4c00000000001976a914860a65e5c4999b75141c287cec136faa0859878c88ac03601904000000001976a9144816ed809550c2b1d0d1dd068fef8942e4fc964b88ac000000000100000001f2ade65ef33bd72a49bfd815eed2ed00e29b0b2a57a716575e9edd39bb7bc8b8010000006a4730440220122dcb5648cbb7c436d39eac58a62c5d0d5a3c6f11f99244e7b039e1f973006902207da8fc6025a03fdf5db1731aea6cc582d0c1afb0d2844c5e4e937f632d24475701210358af44865cdfbf2745110f2bdd28c0880e33c7ebe7fe7963a0edfcbc2f5660e3ffffffff0180edfa02000000001976a914517feda2b1dfd61ee9f249e2da87d4681e1b5e1088ac0000000001000000000101253811808c41ee6c23ed34eb4664c6c9bf1791fb9efc92f56a0f3d5d66fd40f00000000023220020aa6d49a975b86eab9198687218bd78b5ad426d0b8e5e0e5c94ffa7f1267cc719ffffffff02201d9a000000000017a9148a0170de7d432cf459f7e4bdced2578ab6e4cf788746b152010000000017a9143e60cf49cf2529d22db15c7809879b4071860f8f870400473044022020be7d3c62ff4ac3f14c36962c16cb2e9ea9d2b746176ff715073f942e4014f9022013dd805d9b76066e3787298c384441117c952af6fc0c9501405e61459486e22801483045022100b178e9d2808fa9db15aca9bcbc29c513512fa0145cbdde4174090d1cf1e58c2a02200c2a4f2a7bb5c9fb6c7bcfa30f13704e2df5c930695598874ba14b04938bf5a20169522103ad3fd310fef767d07d98f646a75357a42d687f8b3d26dc74426b7a35e001d2f521027485713dd3e8c0eebf1904c860f2e44876d9076ba1ba28df310e7e653d48d4da2103c2ea101de6f0fbfadce02bf94bb5b52ccceb576c2f4c1a36086b5e34a817db1d53ae7038140001000000025b0551bd0fffcf55881e285e15b364ab9a831d2494d2eb7a163a4bbd6f551151000000006b483045022100dff500e8c060a9c8810483d4ada8f91c0b844e92778cc762300040870109c0be02207029fa781ec37ddeb0ffbfa7160e625afdd126f30ec11fb9bc25f4d2164933bb0121023c6017ab9f471a69157180c5e30b9aef2ff73ea2a1a774c53a975e2557536314ffffffffd49a58913818610b0aa065d4f32995863d216c44040a49d454f6b7eeb65c9adc010000006b483045022100dce24b819b70f920d0bb60fa1241fa14f2500412a60aceeaae2610e1593b5e3c022041fdc5a02dc26af043bea27713f1245340b98bd47aa283e23b96ecc4aae157a4012102d18a88bcf5f65d937de7d9bc24d2f492a55216087262bf4683d0055dd0521a56feffffff02da869800000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac80fe210a000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac000000000100000001dcdc6e02bf826f5c783176abc6842f130cc309e5a5be994bc83d86711b0a23e900000000fd670100483045022100cdaf94a9a3aed27f5ecd9f2517525ace8483d45010ebc2f61c6b854e07a0164f02203c746ae190011b987aa56e483d2baff1181a60480a714dacea36981df9b39011014730440220127b08db48809a3cee3d9bb6fae327f25196a94535dbe2dbf9f58c3078bc67260220091c1afb5a782e19b390c544216ec2c0379efc314a9d3a44e36d1a4a770358370147304402203f71b8d47b12eb29b9d5da23c1361fe0577ecef7ccadbbe61d004513f89e084202206b6bbf7a29b6f7f346a11123c090ee60b96428585dd5e31339a853d6883a6547014c8b5321022666ff58d872f45d5f38022af3e8ad21f7a109d70d718171111b035542332f202102378f6c2051e46ac2f8db79929bf24440e45c9fb985bfd5e8a71026440623f5e92103ced1ba9b2f46b49168b38f3f950a5a3cdf15d5d13e8e5a2ebf6a28d1beb6b2562103528901b8cd76a4b9fb270d020706619543d9a75dc2a9c717d397d3838b69e98654aeffffffff02309e08010000000017a914a3d3eea26a00225d76b089a690ae5f48471e5733870000000000000000326a3045584f4e554d01007445140000000000c5a6986d65b7ae36ef88ed04321f5f97eb542c41aed81287300ab679121e04eb000000000100000004d02217d980e9d05b7b4ee19c1f7a62865253af470b829d73915be5e30c70e6f9010000006a473044022027c8099b947fab212c6c545c34e91f7711e005f7868a1f7b3b503fd3cc3a6f7102207961d6d1e57506fbbce9bb6eb896b10742e7ff6c2929150a313ee7c0cd019754012102de34ad2750f245b6062d9855a81bb8efc59623a1a24a5c75493e6e7af9f821d3ffffffffd058ace6bd41eaf20cf492250415256d77838fdb0ad6a11a526cc3a8b91cd8c1010000006b483045022100b0ae22e62379380d0c1c27a5198fb1d5fe07da04263d7a90e873ea842001c8b402200b5aa6672ed3e61a231147939c1cd0fc9ba0ae8e0b720cf43fd9ccdffa842bb0012102de34ad2750f245b6062d9855a81bb8efc59623a1a24a5c75493e6e7af9f821d3ffffffffa727c367ed7a856c7c8cf2c0feeb0e77ce74608039fd43708479abd3103bede7000000006b483045022100bb39f9953d2c619d1535196ff6aacf0ba9698dba0e08961a30c66c931b4091c6022062f4a0a74250fb492d57a58599da1ff78e75d88bb5afa0bafd4e939f7b167ee5012102de34ad2750f245b6062d9855a81bb8efc59623a1a24a5c75493e6e7af9f821d3ffffffff6927ed42617e5822ee33d01de069e51f4c99cfb411259b27b9d9ff48db685093000000006a4730440220553a42bbaf6c69e7020465c7806497fe635d105ae9009d583dcd72474a19d727022013e4a1fc7880f7b69bfb9ef1ec02156b838278da9078f7d9d134933997842af4012102de34ad2750f245b6062d9855a81bb8efc59623a1a24a5c75493e6e7af9f821d3ffffffff02f0b9f505000000001976a9149b578a521259a9c5c95b5aa61d80f3568728324688acb51f0000000000001976a914cd47750be480bf39d8424b5c72b1275d64c7b86688ac0000000001000000014a64e0a420f2cebcf06c246bb53740ca72a821e4774d8d08d1a8fb7982b60582010000006a47304402201611a4a8df48f5742d21dcef2681c15c34d8a5a14fe716fb0fe672067c38270802206c57a79e2ebc0d437d978065a2236588f7c6196cf218af5d02eaa33a605a0d130121028960fbedf80dd4e6550b97238e401f91365f11f0bfe38a7084935ec520ea2441feffffff0210270000000000001976a914b0f47436699555443eb64b8df066fa9eb19a586188ac40cd8003000000001976a914a32a9f5699e088fb908bdcea3468c3615724298d88ac6f3814000100000001da4031ba4a0571cfd6d437359563ec594560ee91bb85632e8d03256448321699000000006a47304402201a0c705f42f916933c27a9aa7f6c9dcace7b44fafa55e09c38b4ffacb33d8a970220137df5bc65341d0cb37620ed94c7c164ac1d7410a320309853dccea7fbd4c728012102db7f8f083a60f48ff7e499a5458d5ed8188d5f7c8299c51077bc6dd0f6221857ffffffff01a2a3bf070000000017a914a9974100aeee974a20cda9a2f545704a0ab54fdc87000000000100000001a89f1120aa1d2c8eaddcacaa498d9b31089a127475325ff8ba30abd8beaf1ac0010000006a473044022057e2bdfb92b58ec20e5a753cee265c36a7bfce4a8ec2062954a0d6e3659bb21f02203a47b1de095a7fbd3e24f4759d44c64a2155c1a385e364e60ae5af8995621b5d012102b0932b4625f1995e23b1a30d287343aa52051d19ab49584aecca6dffa3bf02fdffffffff02822d4904000000001976a9147b7cb7f07e14d218b3358a0a710d5d5b254e82be88acb8500100000000001976a9146d8c28e1ebaac2f0520a9b3a1a3424fb2b22996e88ac000000000100000001a855dfc4a656a9e2e95b489cc72b98d65238d96a2573f592f9123cf089463b40010000006b483045022100e242b0fcfdda1527683793c16c2e6898e2b750c10bc3c458fd904f202c2d25780220017993d6ab2ae289574b9d4e2e9d85491a6ba7d0bc9a636a5826eef770299967012103d5ec209d89bfaa92eb510af8aaec1b85dfc62f812516a49de598bc8d7babbc64ffffffff0237ec4a06000000001976a9144211fd785fb0ee468000a2345246daca6bf3a4c888ac30284300000000001976a914a8005a43e2e02d2330867ca4aab2d242d8cde25a88ac0000000002000000000101134db4ebf51f62c2334ceac117698ceb16b10323d2bd7c6c10bb6ac7af4559bb0100000017160014ba4121faf7d7b542931120e62b423bc374507860feffffff029ce00000000000001976a9142745c02c63537727c5d4cbd5eebb47d494fbd68c88acea7279020000000017a914ab074e8ce89023c0b8f70e486561ed2ae3704ec6870247304402205d8ba08ce38df9cceafbbe3dd0e10173527e7f5b5ca28273635536707b539be702203e71f885c2e3572b537f1c2a0694b06849ce74eaf0f77c7bdff6f45b996cab0c012103aac4ccd91b48bbd7220bc008f5d3d1328f21d4e8908f64d6c5b0bfa5da1c7b0d6f38140002000000000101408b540a6de3509ecf520da4659d84e4a170c87f16f0966cce1dc7e27c64f1700000000017160014362c24189a5ff392fbe1293ad8ab988352bebd14fdffffff0262dc01010000000017a91483b0e44e3ccbf3a3c1f8ea1ecb2c8d06e206163687809698000000000017a914d5d4a8105ddf4cf5b02f17285c52203a761cadb58702483045022100a6e4b296db064e2da8f9fc43b704c26f0fb8429c4fc4e98baf31b6fd4d1ea91a0220290f45e2d1d1fc23b000a9e468aebfdcb78cbb18c69d73c90d8a4ce58209b9b2012103b76d2bc1d902389a4784bf39dc092f4656b2ef17efa6f2a15dcd71f88682550f6f38140002000000000101df3cdc246ee4735be54fe15ab2eedcc49bba0a34072581d8c0e98b2b0903952801000000171600147a423b2f4a4c0ca5f44e851c9717f481579fae44feffffff0220bb5600000000001976a9142745c02c63537727c5d4cbd5eebb47d494fbd68c88ace46fcf050000000017a91478f93f16c50054fce588f208a095003df18ca4858702483045022100a8f978153194a940371f59e0b6976d7e298e1135fe15eb1e0082e7f382a7095302206660f64d7436899f117bafee8939e3b4aa79c6f333e9ddc8fda4d526cff573170121034ca9661305158562edd6458860528682e669c856b2080457fa0ea1371bb67cb56f381400" - -var blockTxs = []string{ - "e1179f205aabbf48dc2ce4ebd9ed255571b0578e4de551f6574a50cb81120007", - "00a5aa2891d41af9eb1dc30c940f142a609ecab8f370eb0874ba7d32252d1b1b", - "1c519d80804dd17258cfc801bf2c875607956fc9f065a664f43e88d53f80af6f", - "b10c1e2f7c8a6b10fddf94260aff0f8a5f56e33c8d0de48c49a72eb8418c3f6e", - "ba85ca543b290deb84cde9c4ca53614dbe557a3dede5d0adb141f803f8e82f34", - "60dfc2c9cc184ae68ca9e540ab4393d9d2179d060e2ac290f29560c6a1360f51", - "3a40bca678653ae8f7f6d2771b571d5ace1a258056b99e3fd361a10f1016bc53", - "4d4e495f3329801d92c7e3dc9874a372576bf3548decf884ede388143980ecab", - "74ba4bee8d559e4d8b4859c086b0ea5f2c36bcabc95d8578e775f065f70943b8", - "32bcc281f081e172dcb40ad137564724bd9486095813b78990d1d986173ac3c6", - "b6e77c59f4a988731d9b8520e0f4971223e622946eb12e28cc2bab72f1e9c2f8", - "0bc8f39da5d5300a2728b45edb18c8219e94a8b27a2e8074f6c5c10a00d99788", - "8329b31d2a490d57980afcf5c7df4574ce57f952aef6f5aecb3b7786f5c9f255", - "e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470", - "3005378ee85fc905a1812bdfae4b2e0e9bb09f5867a53fd73237bb319a1774aa", - "ebea245b9e4d96fab65c938547a9b3ffd03659b92b8ae4fcdfe4ac9bc325c0a2", - "a2d5fe23b50253dda9941dd6c97c04853d58f048acf347acf9ccf549ee215b51", - "017c2ccec866850521db877c1c7f6d095b7df668f891cfaf70a5e14ce39d010c", - "d101d3467a831cc4dfc87bdd19d0ff5d01b8c872e47b2096eeeac3b44c2a258a", - "3884180bab62d0f0498a8ad012b0005aceec778a18a617e5392d99cee5f21869", - "a00200e57bed4fbd193c4cad49549d311282fee9a82956083353a2874f9bfd9f", - "d32ce7a9413111fb2e3578472d520eb1437db701f20256e3afd37b7c0a6d67e6", - "fed1df6d23a40e1a1f26820bbe35febb668aa2240902f1fd17b31a84dde6eb39", - "5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114", - "411e7f3f4cae4125c8933403809771ebfcaa088f6ef773e5a412ead8639fb515", - "d53858bbbbde4518ea92abda93ac5d01e5122d420a468e6d076244edd99bcea1", - "b5fc4d963805b439d11f06b5d5d89ce3aac225e7145d1673d20d3d37a12c61dd", - "c8d7332377d4bf43c232bc7afc3d7e3aacf13523d1c8488f68f530e58e6cfd88", - "3c21a6b7e3810ca10efac45446cd2b7ef0c9848ac589be7375b61ea5aabbbea4", - "5a25c2b70e2194e05a6208c99343ebe0fad970dd19f3f9cca88aaf77ab9e4658", - "031e3c08ebdcafccf6dc5d7ff1161cd5314424d0a943d2c22a5a2109286e332d", - "4992d16008aa3050b3e2e4aab67e488eb338850ff1c348367ae3d089d8d67a52", - "beb3e71b8da7da7917228f5ce8a88afdc45836c421b053dde24d367865326bd7", -} - -var txDetails map[string]*bchain.Tx +var rpcTest *rpc.Test func init() { - var ( - addr1, addr2, addr3, addr4 bchain.Address - err error - ) - addr1, err = bchain.NewBaseAddress("mwAxva7xAiQ3VXFsCG6svsKQ2Teva7PBjJ") - if err == nil { - addr2, err = bchain.NewBaseAddress("2NBemvVdincDv9GLYRxXy1gXquZfx7SH4ZS") - } - if err == nil { - addr3, err = bchain.NewBaseAddress("mx1gsqbp2TBHkXaApMTncTamoWagYcDft8") - } - if err == nil { - addr4, err = bchain.NewBaseAddress("mx1gsqbp2TBHkXaApMTncTamoWagYcDft8") - } + t, err := rpc.NewTest("Bitcoin Testnet", getRPCClient) if err != nil { panic(err) } - - txDetails = map[string]*bchain.Tx{ - "e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470": &bchain.Tx{ - Hex: "01000000000102a4b8c14f271cfa77d5ecaed9c3026472a55ea6bca119e2ff7b04975326f5974001000000171600147edbcdda98080eeb6e8a63c63da135498295c3cdffffffffabcdf96b8ba187c24d70f98a2edfbf100821506212637f28b30a08efa970a4eb0100000017160014df7d60680e984aae4052e24bce8f17e4bfdcc532ffffffff0292fe1e00000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac13e796110100000017a914c9e67d2b78a38857c786ea9a2fc3e64cb6e775648702483045022100a6910d3a3b64545a44e097a3739b1206095602fa796afc51f81b249d1293ad0a02206cdae51853b59ca52003f4e54ea8ae418b6b4d036cbe1fdd78677efe8eddb318012102b45e239d96f8504ae45a32af7c80f6164f7b9658166e318521ee822192fee3ef0247304402202684a6f59ee255f3f5e9a9209a735bf2aaa818d47add7c3f7a5590623bd2211c0220452bf2fb8d0dc0380862988f0f098c21e861004e02da7bd1fc6bea4e7f33d2dc012103f308867fda821467f77d372791644225174ae16daba86e55754c150a8d5aa40d00000000", - Blocktime: 1528788394, - Time: 1528788394, - Txid: "e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470", - LockTime: 0, - Vin: []bchain.Vin{ - { - ScriptSig: bchain.ScriptSig{ - Hex: "1600147edbcdda98080eeb6e8a63c63da135498295c3cd", - }, - Txid: "4097f5265397047bffe219a1bca65ea5726402c3d9aeecd577fa1c274fc1b8a4", - Vout: 1, - Sequence: 4294967295, - }, - { - ScriptSig: bchain.ScriptSig{ - Hex: "160014df7d60680e984aae4052e24bce8f17e4bfdcc532", - }, - Txid: "eba470a9ef080ab3287f63126250210810bfdf2e8af9704dc287a18b6bf9cdab", - Vout: 1, - Sequence: 4294967295, - }, - }, - Vout: []bchain.Vout{ - { - Value: 0.02031250, - N: 0, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a914abba3808b854c70b63ff038fcddfbafcb707713988ac", - Addresses: []string{ - "mwAxva7xAiQ3VXFsCG6svsKQ2Teva7PBjJ", - }, - }, - Address: addr1, - }, - { - Value: 45.90069523, - N: 1, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "a914c9e67d2b78a38857c786ea9a2fc3e64cb6e7756487", - Addresses: []string{ - "2NBemvVdincDv9GLYRxXy1gXquZfx7SH4ZS", - }, - }, - Address: addr2, - }, - }, - }, - "5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114": &bchain.Tx{ - Hex: "01000000025b0551bd0fffcf55881e285e15b364ab9a831d2494d2eb7a163a4bbd6f551151000000006b483045022100dff500e8c060a9c8810483d4ada8f91c0b844e92778cc762300040870109c0be02207029fa781ec37ddeb0ffbfa7160e625afdd126f30ec11fb9bc25f4d2164933bb0121023c6017ab9f471a69157180c5e30b9aef2ff73ea2a1a774c53a975e2557536314ffffffffd49a58913818610b0aa065d4f32995863d216c44040a49d454f6b7eeb65c9adc010000006b483045022100dce24b819b70f920d0bb60fa1241fa14f2500412a60aceeaae2610e1593b5e3c022041fdc5a02dc26af043bea27713f1245340b98bd47aa283e23b96ecc4aae157a4012102d18a88bcf5f65d937de7d9bc24d2f492a55216087262bf4683d0055dd0521a56feffffff02da869800000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac80fe210a000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac00000000", - Blocktime: 1528788394, - Time: 1528788394, - Txid: "5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114", - LockTime: 0, - Vin: []bchain.Vin{ - { - ScriptSig: bchain.ScriptSig{ - Hex: "483045022100dff500e8c060a9c8810483d4ada8f91c0b844e92778cc762300040870109c0be02207029fa781ec37ddeb0ffbfa7160e625afdd126f30ec11fb9bc25f4d2164933bb0121023c6017ab9f471a69157180c5e30b9aef2ff73ea2a1a774c53a975e2557536314", - }, - Txid: "5111556fbd4b3a167aebd294241d839aab64b3155e281e8855cfff0fbd51055b", - Vout: 0, - Sequence: 4294967295, - }, - { - ScriptSig: bchain.ScriptSig{ - Hex: "483045022100dce24b819b70f920d0bb60fa1241fa14f2500412a60aceeaae2610e1593b5e3c022041fdc5a02dc26af043bea27713f1245340b98bd47aa283e23b96ecc4aae157a4012102d18a88bcf5f65d937de7d9bc24d2f492a55216087262bf4683d0055dd0521a56", - }, - Txid: "dc9a5cb6eeb7f654d4490a04446c213d869529f3d465a00a0b61183891589ad4", - Vout: 1, - Sequence: 4294967294, - }, - }, - Vout: []bchain.Vout{ - { - Value: 0.09995994, - N: 0, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac", - Addresses: []string{ - "mx1gsqbp2TBHkXaApMTncTamoWagYcDft8", - }, - }, - Address: addr3, - }, - { - Value: 1.7, - N: 1, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac", - Addresses: []string{ - "mx1gsqbp2TBHkXaApMTncTamoWagYcDft8", - }, - }, - Address: addr4, - }, - }, - }, - } + rpcTest = t } func TestBitcoinRPC_GetBlockHash(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - hash, err := cli.GetBlockHash(blockHeight) - if err != nil { - t.Error(err) - return - } - - if hash != blockHash { - t.Errorf("GetBlockHash() got %q, want %q", hash, blockHash) - } -} - -func TestBitcoinRPC_GetBlockRaw(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - d, err := cli.GetBlockRaw(blockHash) - if err != nil { - t.Error(err) - return - } - - blk := hex.EncodeToString(d) - - if blk != blockHex { - t.Errorf("GetBlockRaw() got %q, want %q", blk, blockHex) - } + rpcTest.TestGetBlockHash(t) } func TestBitcoinRPC_GetBlock(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - blk, err := cli.GetBlock(blockHash, 0) - if err != nil { - t.Error(err) - return - } - - if len(blk.Txs) != len(blockTxs) { - t.Errorf("GetBlock() number of transactions: got %d, want %d", len(blk.Txs), len(blockTxs)) - } - - for ti, tx := range blk.Txs { - if tx.Txid != blockTxs[ti] { - t.Errorf("GetBlock() transaction %d: got %s, want %s", ti, tx.Txid, blockTxs[ti]) - } - } - + rpcTest.TestGetBlock(t) } func TestBitcoinRPC_GetTransaction(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - for txid, want := range txDetails { - got, err := cli.GetTransaction(txid) - if err != nil { - t.Error(err) - return - } - - // Confirmations is variable field, we just check if is set and reset it - if got.Confirmations > 0 { - got.Confirmations = 0 - } else { - t.Errorf("GetTransaction() has empty Confirmations field") - continue - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("GetTransaction() got %#v, want %#v", got, want) - } - } + rpcTest.TestGetTransaction(t) } diff --git a/bchain/coins/dash/dashrpc_test.go b/bchain/coins/dash/dashrpc_test.go index e90de99a..90c09bb4 100644 --- a/bchain/coins/dash/dashrpc_test.go +++ b/bchain/coins/dash/dashrpc_test.go @@ -4,280 +4,39 @@ package dash import ( "blockbook/bchain" - "encoding/hex" + "blockbook/bchain/tests/rpc" "encoding/json" - "flag" - "fmt" - "reflect" "testing" ) -var rpcURL = flag.String("rpcURL", "http://localhost:18033", "RPC URL of backend server") -var rpcUser = flag.String("rpcUser", "rpc", "RPC user of backend server") -var rpcPass = flag.String("rpcPass", "rpc", "RPC password of backend server") -var rpcClient *DashRPC - -func getRPCConfig() string { - config := `{ - "coin_name": "Dash", - "rpcURL": "%s", - "rpcUser": "%s", - "rpcPass": "%s", - "rpcTimeout": 25, - "parse": true - }` - - return fmt.Sprintf(config, *rpcURL, *rpcUser, *rpcPass) -} - -func getRPCClient() (*DashRPC, error) { - if rpcClient == nil { - cfg := json.RawMessage(getRPCConfig()) - c, err := NewDashRPC(cfg, nil) - if err != nil { - return nil, err - } - cli := c.(*DashRPC) - cli.Parser = NewDashParser(GetChainParams("main"), cli.ChainConfig) - rpcClient = cli +func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) { + c, err := NewDashRPC(cfg, nil) + if err != nil { + return nil, err } - return rpcClient, nil + cli := c.(*DashRPC) + cli.Parser = NewDashParser(GetChainParams("test"), cli.ChainConfig) + return cli, nil } -const blockHeight = 139521 -const blockHash = "000000000296ea05e13b5479f6c041de575eec90759f58f57d311a8918b0af17" -const blockHex = "00000020ef45a540a35144679286a8af8aa7944b698dde61ea5e1f06cf937505000000003aa6e325f4d456f125b68a5fc19a68397b0fc9f33f324f3b69067e95dd844da422521e5be7d3061c0cb7bad71501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4c030121020422521e5b08fabe6d6d3130343838393564323065633562323330336330376538666136636166326362010000000000000057ffffff010300000d2f6e6f64655374726174756d2f00000000052c8bc310000000001976a914c982406f087057a97456e48d335546ae8d93a03c88aca32c0e43000000001976a91434c32f942cf3e7b81d6ab8b6917235817fa9813888ac2b8bc310000000001976a914c2c29ebc787954ef99d01c5f79115abf7012fb8e88ac2b8bc310000000001976a914d7b47d4b40a23c389f5a17754d7f60f511c7d0ec88ac2b8bc310000000001976a914dc3e0793134b081145ec0c67a9c72a7b297df27c88ac00000000020000000109d37a59b7da8902b8822547c927e35554b16667ffd698daae985c58c71616a4010000006b483045022100f3ef92ae1c8442eff171bd2dbc69373db384c86617032917b3bb2c5cd892bb2702207485cf5f8e6aa9fe245f5708a5c6ec37580c1c35e54429c6b43b322678f54cad012102ba7dbd059cc4f03e9fa4b6007b407279a154a8fc2103241511df155a52b7ea58feffffff02a055e18e170000001976a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88ac8cb65df0440000001976a9141ed486862342afd134f96a6cee5ca105801375df88ac0021020002000000017d50060376941a898edaeac3861473de5b2657b28baa470ddaf636b0ff3190fb010000006a473044022003b663185d43a0f347a8359b91497159a94e1e8281a803d286706e5ea5fc512c02203e11e27d203175fc4c22c04f49b2dbfcf90cb0c0ef0d10e54798adc1f33ccf96012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff025e7c7982000000001976a914130c4d66b9ae50d3863a297c7281bd9bc11bb49a88acc06692d1010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac00210200020000000110d8c1402eb9ffdca121dee4fad5436674975e7f40a96d66fe727ede3d3ee632010000006a473044022027ba38cbf5e0f6e0a94a1e9a2a78efd2f3b5e80b85f54bbbd38beb0e65ec991502207369cf2de044b089e1fc756853bfd048d7378e7b682fcfbaac0d2075a0b6939b012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff029ee29e24010000001976a914ac0d571dbffbeebb3c26ce9b118e0a28aba81c2f88ac80006d2f010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac002102000200000001ff06583ae94458b579a49aeba5ab57ac27a4663a60753476799634cd5d64ad4d010000006a47304402202f383e81456b59206b6faead6b83b6ed229e3761d208b0f2a5e6631046e0b7ff022031f89dadb2d7faae8e61dc93d513ac6e28573fe0210de46c2ae18b3c3c887cf8012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff027019cbe6000000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888acaec9406d010000001976a914b60b7763d5b321b7fa061494d998eaa0cfd3f0f288ac00210200020000000179fa3df11708289d6a78a8b76eb884adb98931301b7bf5fefc604728e3b3eb6e010000006a473044022074adcf3df1804b8437f1d2b321cdbbd15c76aec0a44aa664420bf247f8706be002200ea08d5acf4bd81589862a3d475e4ea33a7aa15b8871a099d4562e4afcc44784012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff02d03e5555000000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac4ea4b6fe010000001976a91447d2c0b1e21f2c36d130c3e975cadd3bf6c6ce8288ac00210200020000000169c8effd31ba59a10ad75a6e374d3290f991ecdbbb10d28698a4871def12deb0010000006b483045022100b0e0273c39d81dcdd0bd2492311faca54da084c037656fefc93fd1249f63d3f802201ddbd4bf92e51e40ee7cc59646f38f8dd526f7e25b043dfcbcad3d585933c7b1012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff02809f8108010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac9e438a4b010000001976a914c70c6486ed98f72e7c523c296f3991d86e2a7bb588ac002102000200000001a1213c0f47d00a7c93c1b3dd34c886917c59a6318d00676a2b146751155c1577000000006946304302202b04b35b2aaab34cc0dbf285dc3b7b8ad3e1d5c4ffe867b49e9382835b9fd0a3021f2bf807068c6eef2815d541c6d1a3154b0d3724818a281a2ad5d1d74f687411012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff028e7de512000000001976a914313f01738ea31d3fb0bb26ac182975945ca9ef2a88ac90652641020000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac002102000200000001e7cbfc69314e6d6b3944cb34b7ef19993a45e6a59879c18c32cdab88cc4c6a1b010000006b483045022100dc1f84af6da9ca63bd5d92d106a764aa4df4cb37a30f1dbf9d07f8b066ce2818022011f5e729a903a557d2105c3841a62770f43539748f33aa55e4b9dbd6f99f77de012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff026e5355a6000000001976a9146d4f4c6f848a139f89120a5e3e8f92f718c8229d88acb08fb6ad010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac002102000200000001184242c203c4b091944369b9bed727284fe897e2d372ab47885cd7118cfbb3a3010000006b483045022100ddf663d3828c1c98bad65e1fc958e135da0c78b13fb42bc5a0cc6dc1d2a4888d022007e176b4e0a39bd90d3e0edbccd9aae93f6deadd86703686c566e11814154099012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff024e4b8b1f010000001976a9147acc906cdae8955574eaa7fc6366bbc42902a2e188acd0978034010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac002102000200000001e35e955d7765c19d04a699c98e3ed0d1507b6fb86f98e0330091b9612ec9f7df010000006b483045022100d3cc944c0ce021c6a3e2c5cb9284c21fa2a27fb30903e5712c3d4f175f18d9a702203f4281911f033aa5c7b263875111d947e8356505a8720e320c690c656b4d6e0c012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff02a01fce76000000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac7ec33ddd010000001976a914f75a3de06209430583c23b71669bf5df8c1c643f88ac002102000200000001754bdc58be116c685ea2f539c049ce4c1a38f7dbb8ee458d6b98830e3a2af8e2010000006b483045022100da544fd1c3225ad4402ba16ede27c201a23b637963789f5190c6ad48d68aea8e022065489bab58de50174b1d6458ad7533805fea39122e5b213ef49e5114d8d2ea35012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff02ae51aab8000000001976a914cc2586f922dc54d5266ddacca54bf6f350c5287388ac7091619b010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac0021020002000000018fcbd82d4adbf8499450c1fcdd9d56ce11bc2fac6af8e70c3032b5ce02d59884010000006a4730440220451d5e1062e59fd8d5bc9852ca355c37207fbd9ea32a69156ae44d69ebd31f9802204fc26e7bf199c46bda4712b599cd18a1e09ecc2962ef89cd80426e4eb5c29eae012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff021e6ca132000000001976a914b284c168d27529145da7e78c0b07c948170cdacf88ac00776a21020000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac002102000200000001c186468c4a674322f74c32b056848fddd0c9390c20bbf85a9e847f2255ce485b010000006b483045022100aafad4b02781f9a132d42d6d5a9ea3b22fdd67f16bf517c03ddf26be6a90a6a802203b06dc2977cc4b3058b0266a3a3c16ac3b6bdceb72877adb9dbcb9b3b30bd993012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff023e5db50c010000001976a9149173fc4e4834e63e3a01a14ad5ab1b3ed4dd33fe88ace0855647010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac0021020002000000017187e2a6bb7890f5b7ecffdba3590fed709b0b1fdc5fb6d1928be295f3cb9bb2010000006a473044022005b37f92e5ea9cb2180f5ded09ebf4d2f0a8d3f04004ca0683078a5d54180659022057aa8c1024ba21cc39c08d5dd1304a602475113e0ff895dbbb5525dd3508154c012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff02d02eb8bb000000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac4eb45398010000001976a9147724133db7ec4c4960cfe92b697f226db2ed7d2e88ac0021020002000000010c87c69351a06be7a2e72ac5ca76914fa3acabb0af8bf32905ac43d9703f4b8f010000006b483045022100e64b1d3d9ea80a1ba5bd932a745c8679d824be05842424dd9e64d420c186fc8102206dc3aefa2daa97bb0a432025d0849226b9d79d93b70110852f839589f9bc06a1012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff0250a2d5cd000000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888acce403686010000001976a914bda34c000d0970e44b570e3ae99e714fc4e5234988ac002102000200000001b4d10c0b88242ffccd8e4c69189475e699a6341afe754ed12da6dc842d85bd28010000006a4730440220426695c12ebf8f452c25ebd2d3515316b4d490750a864c5d02ca2d3940650cbf02203ab566745846e136ea9f14033508276a992bb4e2d8229733474c33dd4fc6b57a012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff02106b2315010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac0e78e83e010000001976a914549d59ef4d9f68bab8231ebeabe3b1c28c741f5088ac002102000200000001b141ff2096ab524c1c5b1310c63c35fea7b3aee3ddd1cc6b4d63af388a8024a9010000006a473044022035ffb0d2ae5da0532d11f4cf8c4f48ca5e8e3be67961f7765248ab9e28f26c7b02200d3e2d4ae42e744ca6f68dd1ce381fcbf04a36f611573f730ef8a70bbf107ffd012102931ec69676be99a4b481f26b9c745197bda02bb5ac43286d5eab2581d771963dfeffffff0220b18a44000000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888acfe31810f020000001976a91484b4f613e2e5e7b54baf6dda54931d5bb90f621888acd5200200020000000327ee9a2a360c6304fda56fa029670a95db595f70ae185a6f76ff1de415e07a18000000006a473044022011e7aed7a1cf187a9b6ca294bb76e3576cadebce48b5b944ad8393a60e8aa485022000818546dc7ba47c625258223dcefd6e84dc3faa8d54c646bfc0f55c4506c8f00121023fe7680caadc7bf3f796936de04d77e1007dea53880621c01d7b34720345d4ecfeffffff1ae8beeed571f491410ed327a6821b683d8ae571aea56057634da7aa8ce1041f000000006b4830450221009277cfac065a076814e18613d89c7d85a6461cf5283f2a9cee7254ec83fce637022023cf7186be7714921fe24719450e65a204d803738a1cb9fe35f30753f0696b8b012102aff34da05a74891899aace72f2e650ec1c039bfc519c192e6c231a2b7fa05749feffffff6388454ad1e5718af92def6fe307e64e97c43324d30c322b31edf85088020dc9000000006a47304402204435602e00d22417ff489302758a246df5fbc05e9bc4d0025464556ae7f77e70022036e30d2d46937ee0fc0cdf9a63e7baf8351bd16454ec02311cac52655ac4c32801210395fbe30126fc97a2c8b1e29bc27028a5a6885e4a4116d13e2cbe32c9d71e7f03feffffff02ce177e09000000001976a91437617547a3e0ba0adeead7c8c33c03970341404088acd0f7aad1010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac002102000200000001b792e355e878df60982c967051581118561e08e475fa9c852e2bb66e146f5856010000006a47304402203aa597338441045e0203e033fccdb13182f44a27fe7d8d1258420903172754d8022014e13789708cbf46e171725191e074bad6cb65ced12d86a53b7fbb2093063b4c012102c024dbdeb04678f3bc3799231347ee8d0d2a1c8575e9700b7f15705beb1c85cffeffffff02c086e1c2000000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac8c5265cd000000001976a914fd1bfe89ca75cea2a003d415e5d737f90cf9e8b788ac00210200020000000120c4c8eccae876a644b960c74fac98521a85bc3ee77c4d23e3af7fce03a92856000000006a47304402206140098393f8ea920d0181fa96274e97fa8ece62d0751293b7b68c0a54d0e417022061e99761aec73147b6a8e26bdc6a9ffd59679e9272e99ffac526d48da4635164012102ef126bc0394e7d67502a5349c41c8167a664ad1adbd381baa7e9faf2538a6a66feffffff029a890722000000001976a914e974612a090bc5d4caea5354d95679aa19c6ebdf88ac004afa74000000001976a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88acdc200200" - -var blockTxs = []string{ - "cfe2d2c5bd9929349a9d8f3d8f2423f4f0c9b408ed41b3002be5e7437a20aa7d", - "3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942", - "3f296b929f6ee4f0ad3d6fce35873d6aeacbdf06aaf2abe384beb6e3f2a4dd03", - "5ef4f9b7e4c0240687c3a6e6a073e0fbc753645d231ca35435b95325778b7186", - "805b5ba055227b0f7dbbdef8e603632c4d25b93f0e87c59fc74cbe8ad8dbe806", - "392785b88f03c82492172827f30cbed4761de3098a0faaa740999b412ff15e46", - "13fafd7c8afc6fd2c860d342eaf0cfe0edd2b994bb836898c02830b2f688155e", - "26bc95fcc71380f0d66e437314c72999c0848cab81fe1f91c9c95bf15b74855c", - "7873d8d774f2aae72100620a21b38ea681b488b328802b6ec3271b1d727c6b73", - "23147585fd4ed3970118027ce9b2e190e264f26fbf5d8c9708a483cee6cada43", - "e079894b2545eca7184a2f0eaccf4b069242f18fa0721aedc8f66b73112a1e8f", - "b36284854fa1947844ecc5d62768be3e14cc44c430db87b1b90184364b30dbf4", - "1fd3ad5d0392cedf318600908270986c801cac161ef06f660591634cc2a29652", - "7a5b8944589b0cfba9c408b24b095648b0040a37fd769a9785982603bb7ca1f7", - "7da1811ec3f2c6381d89e59f40957d36c898ba1bb70b976e0b5490d3b9fa8952", - "dbcfa65bdfe758353305eaff11b300463018efb7fa8f17c6c6a98bb8dba6bcc9", - "c046821e5503770304359792c20c1ed3e71509a19a867acf1dae113bf52d2a6f", - "d3cea11e1a4937323cc94172f93a2e0edc0981a706f2d2c3315ace94b01b375a", - "6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e", - "53834414d8a88afe4268b85f959e526a0c677ac6b7dedba9a796d1549852fd41", - "b761ebaccfb6d0eeaa5350ccafdf6a7633e59d6baadc932c6d78491cb08052a6", -} - -var txDetails map[string]*bchain.Tx +var rpcTest *rpc.Test func init() { - var ( - addr1, addr2, addr3, addr4 bchain.Address - err error - ) - addr1, err = bchain.NewBaseAddress("ygvnHYy5TZgvS2LK2L7CBcRRnR52bJCv7k") - if err == nil { - addr2, err = bchain.NewBaseAddress("yP8TiVEB5X95MCfiDCuwnpd9SVDJ6cSPpp") - } - if err == nil { - addr3, err = bchain.NewBaseAddress("yRNGmGCjSKA42KHRZsVbByua3VgbZjLKfg") - } - if err == nil { - addr4, err = bchain.NewBaseAddress("yiGAWAWmZsULK2iyhGQhMdNsCiAYRA1bCt") - } + t, err := rpc.NewTest("Dash Testnet", getRPCClient) if err != nil { panic(err) } - - txDetails = map[string]*bchain.Tx{ - "3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942": &bchain.Tx{ - Hex: "020000000109d37a59b7da8902b8822547c927e35554b16667ffd698daae985c58c71616a4010000006b483045022100f3ef92ae1c8442eff171bd2dbc69373db384c86617032917b3bb2c5cd892bb2702207485cf5f8e6aa9fe245f5708a5c6ec37580c1c35e54429c6b43b322678f54cad012102ba7dbd059cc4f03e9fa4b6007b407279a154a8fc2103241511df155a52b7ea58feffffff02a055e18e170000001976a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88ac8cb65df0440000001976a9141ed486862342afd134f96a6cee5ca105801375df88ac00210200", - Blocktime: 1528713762, - Time: 1528713762, - Txid: "3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942", - LockTime: 139520, - Vin: []bchain.Vin{ - { - ScriptSig: bchain.ScriptSig{ - Hex: "483045022100f3ef92ae1c8442eff171bd2dbc69373db384c86617032917b3bb2c5cd892bb2702207485cf5f8e6aa9fe245f5708a5c6ec37580c1c35e54429c6b43b322678f54cad012102ba7dbd059cc4f03e9fa4b6007b407279a154a8fc2103241511df155a52b7ea58", - }, - Txid: "a41616c7585c98aeda98d6ff6766b15455e327c9472582b80289dab7597ad309", - Vout: 1, - Sequence: 4294967294, - }, - }, - Vout: []bchain.Vout{ - { - Value: 1011.81380000, - N: 0, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88ac", - Addresses: []string{ - "ygvnHYy5TZgvS2LK2L7CBcRRnR52bJCv7k", - }, - }, - Address: addr1, - }, - { - Value: 2960.90449548, - N: 1, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a9141ed486862342afd134f96a6cee5ca105801375df88ac", - Addresses: []string{ - "yP8TiVEB5X95MCfiDCuwnpd9SVDJ6cSPpp", - }, - }, - Address: addr2, - }, - }, - }, - "6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e": &bchain.Tx{ - Hex: "020000000327ee9a2a360c6304fda56fa029670a95db595f70ae185a6f76ff1de415e07a18000000006a473044022011e7aed7a1cf187a9b6ca294bb76e3576cadebce48b5b944ad8393a60e8aa485022000818546dc7ba47c625258223dcefd6e84dc3faa8d54c646bfc0f55c4506c8f00121023fe7680caadc7bf3f796936de04d77e1007dea53880621c01d7b34720345d4ecfeffffff1ae8beeed571f491410ed327a6821b683d8ae571aea56057634da7aa8ce1041f000000006b4830450221009277cfac065a076814e18613d89c7d85a6461cf5283f2a9cee7254ec83fce637022023cf7186be7714921fe24719450e65a204d803738a1cb9fe35f30753f0696b8b012102aff34da05a74891899aace72f2e650ec1c039bfc519c192e6c231a2b7fa05749feffffff6388454ad1e5718af92def6fe307e64e97c43324d30c322b31edf85088020dc9000000006a47304402204435602e00d22417ff489302758a246df5fbc05e9bc4d0025464556ae7f77e70022036e30d2d46937ee0fc0cdf9a63e7baf8351bd16454ec02311cac52655ac4c32801210395fbe30126fc97a2c8b1e29bc27028a5a6885e4a4116d13e2cbe32c9d71e7f03feffffff02ce177e09000000001976a91437617547a3e0ba0adeead7c8c33c03970341404088acd0f7aad1010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac00210200", - Blocktime: 1528713762, - Time: 1528713762, - Txid: "6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e", - LockTime: 139520, - Vin: []bchain.Vin{ - { - ScriptSig: bchain.ScriptSig{ - Hex: "473044022011e7aed7a1cf187a9b6ca294bb76e3576cadebce48b5b944ad8393a60e8aa485022000818546dc7ba47c625258223dcefd6e84dc3faa8d54c646bfc0f55c4506c8f00121023fe7680caadc7bf3f796936de04d77e1007dea53880621c01d7b34720345d4ec", - }, - Txid: "187ae015e41dff766f5a18ae705f59db950a6729a06fa5fd04630c362a9aee27", - Vout: 0, - Sequence: 4294967294, - }, - { - ScriptSig: bchain.ScriptSig{ - Hex: "4830450221009277cfac065a076814e18613d89c7d85a6461cf5283f2a9cee7254ec83fce637022023cf7186be7714921fe24719450e65a204d803738a1cb9fe35f30753f0696b8b012102aff34da05a74891899aace72f2e650ec1c039bfc519c192e6c231a2b7fa05749", - }, - Txid: "1f04e18caaa74d635760a5ae71e58a3d681b82a627d30e4191f471d5eebee81a", - Vout: 0, - Sequence: 4294967294, - }, - { - ScriptSig: bchain.ScriptSig{ - Hex: "47304402204435602e00d22417ff489302758a246df5fbc05e9bc4d0025464556ae7f77e70022036e30d2d46937ee0fc0cdf9a63e7baf8351bd16454ec02311cac52655ac4c32801210395fbe30126fc97a2c8b1e29bc27028a5a6885e4a4116d13e2cbe32c9d71e7f03", - }, - Txid: "c90d028850f8ed312b320cd32433c4974ee607e36fef2df98a71e5d14a458863", - Vout: 0, - Sequence: 4294967294, - }, - }, - Vout: []bchain.Vout{ - { - Value: 1.59258574, - N: 0, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a91437617547a3e0ba0adeead7c8c33c03970341404088ac", - Addresses: []string{ - "yRNGmGCjSKA42KHRZsVbByua3VgbZjLKfg", - }, - }, - Address: addr3, - }, - { - Value: 78.12610000, - N: 1, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a914f0b3dff509993e0b7035ce997b52763ce501d67888ac", - Addresses: []string{ - "yiGAWAWmZsULK2iyhGQhMdNsCiAYRA1bCt", - }, - }, - Address: addr4, - }, - }, - }, - } + rpcTest = t } func TestDashRPC_GetBlockHash(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - hash, err := cli.GetBlockHash(blockHeight) - if err != nil { - t.Error(err) - return - } - - if hash != blockHash { - t.Errorf("GetBlockHash() got %q, want %q", hash, blockHash) - } -} - -func TestDashRPC_GetBlockRaw(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - d, err := cli.GetBlockRaw(blockHash) - if err != nil { - t.Error(err) - return - } - - blk := hex.EncodeToString(d) - - if blk != blockHex { - t.Errorf("GetBlockRaw() got %q, want %q", blk, blockHex) - } + rpcTest.TestGetBlockHash(t) } func TestDashRPC_GetBlock(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - blk, err := cli.GetBlock(blockHash, 0) - if err != nil { - t.Error(err) - return - } - - if len(blk.Txs) != len(blockTxs) { - t.Errorf("GetBlock() number of transactions: got %d, want %d", len(blk.Txs), len(blockTxs)) - } - - for ti, tx := range blk.Txs { - if tx.Txid != blockTxs[ti] { - t.Errorf("GetBlock() transaction %d: got %s, want %s", ti, tx.Txid, blockTxs[ti]) - } - } - + rpcTest.TestGetBlock(t) } func TestDashRPC_GetTransaction(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - for txid, want := range txDetails { - got, err := cli.GetTransaction(txid) - if err != nil { - t.Error(err) - return - } - - // Confirmations is variable field, we just check if is set and reset it - if got.Confirmations > 0 { - got.Confirmations = 0 - } else { - t.Errorf("GetTransaction() has empty Confirmations field") - continue - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("GetTransaction() got %v, want %v", got, want) - } - } + rpcTest.TestGetTransaction(t) } diff --git a/bchain/coins/eth/ethrpc_test.go b/bchain/coins/eth/ethrpc_test.go index 1fec9032..f4794edc 100644 --- a/bchain/coins/eth/ethrpc_test.go +++ b/bchain/coins/eth/ethrpc_test.go @@ -4,37 +4,42 @@ package eth import ( "blockbook/bchain" - "flag" + "blockbook/bchain/tests/rpc" + "encoding/json" "reflect" "testing" - "time" ethtypes "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/rpc" ) -var rpcURL = flag.String("rpc", "ws://localhost:18036", "URL of geth server") -var ethClient *ethclient.Client -var ethRPCClient *rpc.Client +func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) { + c, err := NewEthereumRPC(cfg, nil) + if err != nil { + return nil, err + } + return c, nil +} -func setupEthRPC() *EthereumRPC { - if ethClient == nil { - rc, err := rpc.Dial(*rpcURL) - if err != nil { - panic(err) - } - ec := ethclient.NewClient(rc) - ethRPCClient = rc - ethClient = ec - } - return &EthereumRPC{ - client: ethClient, - rpc: ethRPCClient, - timeout: time.Duration(25) * time.Second, - rpcURL: *rpcURL, - Parser: NewEthereumParser(), +var rpcTest *rpc.Test + +func init() { + t, err := rpc.NewTest("Ethereum Testnet", getRPCClient) + if err != nil { + panic(err) } + rpcTest = t +} + +func TestEthRPC_GetBlockHash(t *testing.T) { + rpcTest.TestGetBlockHash(t) +} + +func TestEthRPC_GetBlock(t *testing.T) { + rpcTest.TestGetBlock(t) +} + +func TestEthRPC_GetTransaction(t *testing.T) { + rpcTest.TestGetTransaction(t) } func TestEthRPC_getBestHeader(t *testing.T) { @@ -50,7 +55,7 @@ func TestEthRPC_getBestHeader(t *testing.T) { { name: "1", fields: fields{ - b: setupEthRPC(), + b: rpcTest.Client.(*EthereumRPC), }, }, } @@ -79,7 +84,7 @@ func TestEthRPC_GetBestBlockHash(t *testing.T) { { name: "1", fields: fields{ - b: setupEthRPC(), + b: rpcTest.Client.(*EthereumRPC), }, want: 66, }, @@ -112,7 +117,7 @@ func TestEthRPC_GetBestBlockHeight(t *testing.T) { { name: "1", fields: fields{ - b: setupEthRPC(), + b: rpcTest.Client.(*EthereumRPC), }, want: 1000000, }, @@ -131,68 +136,8 @@ func TestEthRPC_GetBestBlockHeight(t *testing.T) { } } -func TestEthRPC_GetBlockHash(t *testing.T) { - type fields struct { - b *EthereumRPC - } - type args struct { - height uint32 - } - tests := []struct { - name string - fields fields - args args - want string - wantErr error - }{ - { - name: "1000000", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - height: 1000000, - }, - want: "0x6e6b2e771a3026a1981227ab4a4c8d018edb568494f17df46bcddfa427df686e", - }, - { - name: "2870000", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - height: 2870000, - }, - want: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895", - }, - { - name: "ErrBlockNotFound", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - height: 1 << 31, - }, - want: "", - wantErr: bchain.ErrBlockNotFound, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := tt.fields.b.GetBlockHash(tt.args.height) - if err != tt.wantErr { - t.Errorf("EthRPC.GetBlockHash() error = %v, wantErr %v", err, tt.wantErr) - return - } - if got != tt.want { - t.Errorf("EthRPC.GetBlockHash() = %v, want %v", got, tt.want) - } - }) - } -} - func TestEthRPC_GetBlockHeader(t *testing.T) { - bh, err := setupEthRPC().getBestHeader() + bh, err := rpcTest.Client.(*EthereumRPC).getBestHeader() if err != nil { panic(err) } @@ -212,7 +157,7 @@ func TestEthRPC_GetBlockHeader(t *testing.T) { { name: "2870000", fields: fields{ - b: setupEthRPC(), + b: rpcTest.Client.(*EthereumRPC), }, args: args{ hash: "eccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895", @@ -226,7 +171,7 @@ func TestEthRPC_GetBlockHeader(t *testing.T) { { name: "ErrBlockNotFound", fields: fields{ - b: setupEthRPC(), + b: rpcTest.Client.(*EthereumRPC), }, args: args{ hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903896", @@ -248,204 +193,6 @@ func TestEthRPC_GetBlockHeader(t *testing.T) { } } -func TestEthRPC_GetBlock(t *testing.T) { - bh, err := setupEthRPC().getBestHeader() - if err != nil { - panic(err) - } - type fields struct { - b *EthereumRPC - } - type args struct { - hash string - height uint32 - } - tests := []struct { - name string - fields fields - args args - want *bchain.Block - wantTxCount int - wantErr error - }{ - { - name: "2870000 by hash", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - hash: "eccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895", - }, - want: &bchain.Block{ - BlockHeader: bchain.BlockHeader{ - Hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895", - Height: 2870000, - Confirmations: int(uint32(bh.Number.Uint64()) - 2870000 + 1), - }, - }, - wantTxCount: 12, - }, - { - name: "2870000 by height", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - height: 2870000, - }, - want: &bchain.Block{ - BlockHeader: bchain.BlockHeader{ - Hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895", - Height: 2870000, - Confirmations: int(uint32(bh.Number.Uint64()) - 2870000 + 1), - }, - }, - wantTxCount: 12, - }, - { - name: "ErrBlockNotFound", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903896", - }, - wantErr: bchain.ErrBlockNotFound, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := tt.fields.b.GetBlock(tt.args.hash, tt.args.height) - if err != tt.wantErr { - t.Errorf("EthRPC.GetBlock() error = %v, wantErr %v", err, tt.wantErr) - return - } - if got == nil && tt.want == nil { - return - } - if got.Hash != tt.want.Hash { - t.Errorf("EthRPC.GetBlock().Hash = %v, want %v", got.Hash, tt.want.Hash) - return - } - if got.Height != tt.want.Height { - t.Errorf("EthRPC.GetBlock().Height = %v, want %v", got.Height, tt.want.Height) - return - } - if got.Confirmations != tt.want.Confirmations { - t.Errorf("EthRPC.GetBlock().Confirmations = %v, want %v", got.Confirmations, tt.want.Confirmations) - return - } - if len(got.Txs) != tt.wantTxCount { - t.Errorf("EthRPC.GetBlock().Txs = %v, want %v", len(got.Txs), tt.wantTxCount) - return - } - }) - } -} - -func TestEthRPC_GetTransaction(t *testing.T) { - var ( - addr1, addr2 bchain.Address - err error - ) - addr1, err = bchain.NewBaseAddress("0x682b7903a11098cf770c7aef4aa02a85b3f3601a") - if err == nil { - addr2, err = bchain.NewBaseAddress("0x555ee11fbddc0e49a9bab358a8941ad95ffdb48f") - } - if err != nil { - panic(err) - } - - bh, err := setupEthRPC().getBestHeader() - if err != nil { - panic(err) - } - type fields struct { - b *EthereumRPC - } - type args struct { - txid string - } - tests := []struct { - name string - fields fields - args args - want *bchain.Tx - wantErr bool - }{ - { - name: "1", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - txid: "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d", - }, - want: &bchain.Tx{ - Blocktime: 1521515026, - Confirmations: uint32(bh.Number.Uint64()) - 2870000 + 1, - Hex: "7b226e6f6e6365223a2230783239666165222c226761735072696365223a223078313261303566323030222c22676173223a2230786462626130222c22746f223a22307836383262373930336131313039386366373730633761656634616130326138356233663336303161222c2276616c7565223a22307830222c22696e707574223a223078663032356361616630303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030323235222c2268617368223a22307865366231363864366262336438656437386530336462663832386236626664316662363133663665313239636261363234393634393834353533373234633564222c22626c6f636b4e756d626572223a223078326263616630222c2266726f6d223a22307864616363396336313735346130633436313666633533323364633934366538396562323732333032222c227472616e73616374696f6e496e646578223a22307831222c2276223a2230783162222c2272223a22307831626434306133313132326330333931386466366431363664373430613661336132326630386132353933346365623136383863363239373736363163383063222c2273223a22307836303766626331356331663739393561343235386635613962636363363362303430333632643139393164356566653133363163353632323265346361383966227d", - Time: 1521515026, - Txid: "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d", - Vin: []bchain.Vin{ - { - Addresses: []string{"0xdacc9c61754a0c4616fc5323dc946e89eb272302"}, - }, - }, - Vout: []bchain.Vout{ - { - ScriptPubKey: bchain.ScriptPubKey{ - Addresses: []string{"0x682b7903a11098cf770c7aef4aa02a85b3f3601a"}, - }, - Address: addr1, - }, - }, - }, - }, - { - name: "2", - fields: fields{ - b: setupEthRPC(), - }, - args: args{ - txid: "cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b", - }, - want: &bchain.Tx{ - Blocktime: 1521533434, - Confirmations: uint32(bh.Number.Uint64()) - 2871048 + 1, - Hex: "7b226e6f6e6365223a22307862323663222c226761735072696365223a223078343330653233343030222c22676173223a22307835323038222c22746f223a22307835353565653131666264646330653439613962616233353861383934316164393566666462343866222c2276616c7565223a22307831626330313539643533306536303030222c22696e707574223a223078222c2268617368223a22307863643634373135313535326235313332623261656637633962653030646336663733616663353930316464653135376161623133313333356261616138353362222c22626c6f636b4e756d626572223a223078326263663038222c2266726f6d223a22307833653361336436396463363662613130373337663533316564303838393534613965633839643937222c227472616e73616374696f6e496e646578223a22307861222c2276223a2230783239222c2272223a22307866373136316331373064343335373361643963386437303163646166373134666632613534386135363262306463363339323330643137383839666364343035222c2273223a22307833633439373766633930333835613237656661303033326531376234396664353735623238323663623536653364316563663231353234663261393466393135227d", - Time: 1521533434, - Txid: "0xcd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b", - Vin: []bchain.Vin{ - { - Addresses: []string{"0x3e3a3d69dc66ba10737f531ed088954a9ec89d97"}, - }, - }, - Vout: []bchain.Vout{ - { - ScriptPubKey: bchain.ScriptPubKey{ - Addresses: []string{"0x555ee11fbddc0e49a9bab358a8941ad95ffdb48f"}, - }, - Address: addr2, - }, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := tt.fields.b.GetTransaction(tt.args.txid) - if (err != nil) != tt.wantErr { - t.Errorf("EthRPC.GetTransaction() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("EthRPC.GetTransaction() = %v, want %v", got, tt.want) - } - }) - } -} - func TestEthRPC_EstimateFee(t *testing.T) { type fields struct { b *EthereumRPC @@ -463,7 +210,7 @@ func TestEthRPC_EstimateFee(t *testing.T) { { name: "1", fields: fields{ - b: setupEthRPC(), + b: rpcTest.Client.(*EthereumRPC), }, args: args{ blocks: 10, @@ -498,7 +245,7 @@ func TestEthRPC_GetMempool(t *testing.T) { { name: "1", fields: fields{ - b: setupEthRPC(), + b: rpcTest.Client.(*EthereumRPC), }, }, } diff --git a/bchain/coins/zec/zcashrpc_test.go b/bchain/coins/zec/zcashrpc_test.go index 0d9f2664..a69ffa77 100644 --- a/bchain/coins/zec/zcashrpc_test.go +++ b/bchain/coins/zec/zcashrpc_test.go @@ -4,254 +4,39 @@ package zec import ( "blockbook/bchain" - "encoding/hex" + "blockbook/bchain/tests/rpc" "encoding/json" - "flag" - "fmt" - "reflect" "testing" ) -var rpcURL = flag.String("rpcURL", "http://localhost:18032", "RPC URL of backend server") -var rpcUser = flag.String("rpcUser", "rpc", "RPC user of backend server") -var rpcPass = flag.String("rpcPass", "rpc", "RPC password of backend server") -var rpcClient *ZCashRPC - -func getRPCConfig() string { - config := `{ - "coin_name": "Zcash", - "rpcURL": "%s", - "rpcUser": "%s", - "rpcPass": "%s", - "rpcTimeout": 25, - "parse": true - }` - - return fmt.Sprintf(config, *rpcURL, *rpcUser, *rpcPass) -} - -func getRPCClient() (*ZCashRPC, error) { - if rpcClient == nil { - cfg := json.RawMessage(getRPCConfig()) - c, err := NewZCashRPC(cfg, nil) - if err != nil { - return nil, err - } - cli := c.(*ZCashRPC) - cli.Parser = NewZCashParser(cli.ChainConfig) - rpcClient = cli +func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) { + c, err := NewZCashRPC(cfg, nil) + if err != nil { + return nil, err } - return rpcClient, nil + cli := c.(*ZCashRPC) + cli.Parser = NewZCashParser(cli.ChainConfig) + return cli, nil } -const blockHeight = 251102 -const blockHash = "001335906f981bbf0633e124e2fa8afef3d882e34a0306a4e0c55162e57e673d" -const blockHex = "04000000dae072724713c60408a643775f15f58a37088bea7a51165880fbed47346b0c00cce3aae2d297be2838c5d4829b682b4fbbe8a09f9a10da8222b8256b2b1f20df0000000000000000000000000000000000000000000000000000000000000000d15b1f5baf71151f040019290a7a71036c73966bf61b685bd50dd09e095ef4680224901a53050000fd4005008d152c3b0d8adeee94b01ce9d9ebeec96098779a1a9782005ec849d1198482c1eb2c9234d8100b2d560c1bae8798c6c15add6082e9b871bc751792aedbce2f086ad7aa914537318d846af7e6c9ede26856c9440874d981c8d5f48eff38e5f81ef76585ca6c3b774f0b5ffc7676054c246d5704e9bfdc0f3e29aefa913a16bb1505f3cc44aaae9d7170569fe120d4146ad98f242c52e334e40599cdaab24455d95e12abf7fb283009647baa27a04a79ac45d0dddfc70106baa8dfb34d105b1da71fbac3c3dca4718a97b976b9e4c4b56dea0c2f0f73d258e435e3156125a3a85574b0e06a5cb22ab6d77d900c0d82a73db6b147f1378286885f4b8d11e15cb9bbee80abb90ff49addd3d995e1727c6d751c15d964ca0a199b3fd1821d97685f793ebeb82e1a173f3d4b21535004e9edc511f2f8595e467cd3dd5117df2ff8cb0e928ffadbe33a2838d914d22e709ed000f267538f88287858f062edab5f7dbe079ab6f5e8252ee356155eea1d99b8b8bc9a778f3e3f4c15716408f4d6d4b0d6739fa5900622dc72fff6d0c79ae43118727bb533c81930a3bc85dea97574ee678d7546c4060d1ee526359e8ff6b0809ff4e218e54c8233411d5d1316861c698a13bc95862adf3eda6360367fe18519eea495294990bb2f0db3a7e9dd1e064ba1d3a0fc2c4489be1d52a2fbfac665adb93d84ae806d9e1ed704aae1e140156f4f113fd2aa88db1fa98c7a903e29115b1a37b5f53b57e0b5350231630603057d7f47ab05c5a9b8e78976d73f6be1f39eef207ef665bba21910b4333592cd23af144fd32cbeb29f5d8f734f5c7f062e4a0a0d5abb236588a3a604657231adc10e07910cccd6b075c73bb4d53311b076be2ac22f2a75c98719f857b2bddfbcfbb99314cdacbdb9cbb4ea3f532f5f9a1c93256f83b7b933f7857675eb56e57d395c2a009214f706c371b13d706221161161914f61927ed3435f641b851cc2c35a56f68aa0367db22e24bf7c4608317135e65422f5023391bc2893eb45cf0f3762648bec5e2c3f649a5b2ffd69555668c1525d7f1cc19104793ccb1c14360b5f3f4790bfe0f60ed882189567058e29c0fe67428db64721e5880fef24d9b696a5f10972740e5ed8eedd365876662555ace71bbebb8b9b200621e6d2ef28e5eaac935521c621bd6533b725f001ef494f6ba94cad6e8b4810937a2642fa97fddf59606e9d43762e1eff7badf6b0274354864df0f97cfb0362c324de02d694c83356b0f6e273f20cfad339fe0883da29e58715663d03b1d6c5fa0b9615cef7377507aa43c06c70d5f1cc48a6f449be2956481b33309911edb77effc8fea728fa04544c7f04a1d3f7b365a310c7ed63034528890c6bc23118dd01cad7a096c1fb15b2df445fdfb3a146a881f424254d44dc0caa20e501f5edaf3eba4881ef6380937cb1eb50488a0aef365d49d40aeaa7bd754231973ad1cc6716a5babcfed810f60db313172583b34c237057f1a3991436f6b40c3bd2374cbf1d8b0ef2af73fbdf60623a51841a256617d0829e6b338fddeca9948a0fde177d7a04def4e858ad56388e660a25a405d6397bdc0cce6287b3906a2a2167fbb08ee5828dda75cd3dd61af2a8eb971ea72a515df331ce595b15113368fd30dd36a7ca77d2ac149f049ca55e37cdf95a7316c6686eba6e5a152a6f289983d470314681d331b36b5ff5a1a93915bc309a1f2c0be8eed10a39548ee7b48cbedcb6622c13b0f134136f1bead1dc7ae29118048064119252721b5446192ca1a77eac7f2592fc34bc8eeae98633a21a17b3220ef93d58e28fc9e9b922e4f7ea3bf10f1dd5da9e327fbdfbe79765bf6cc0e37f3c9eceed203d8f80083b8b2a2c0f6a5b0d5a52c8d541e60632a666bcad5c03030000807082c403010000000000000000000000000000000000000000000000000000000000000000ffffffff0603ded4030101ffffffff0267cc9a3b000000001976a914550cef2cf048a294415d0c5893e653ac529c404388ac80b2e60e0000000017a914a71e4588c50c86f4669e0da43db37cbd7428a9f287000000000000000000030000807082c40301601ade5f535f62f3da01e0c88b16beb916877fa0fa43299a9e2398b813d0a119020000006a4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2feffffff02ea5e2c1c000000001976a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac00a3e1110000000017a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e8794d40300f1d4030000030000807082c40302eac0139a677c07b6fcdddd205f4bf538d9cc9fb586565fe77440f93cf1b5ca9a010000006b4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727feffffff6a1ed49e62634ab5a60b23ec73f9014ad1c9d3bd3bf023333c8eb311c802f298000000006b4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1feffffff0200a3e111000000001976a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac3176a002000000001976a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488acd2d40300f1d4030000" - -var blockTxs = []string{ - "f02aa1c4c86e1d0cef6ccbbc48b2b7b38355bc3612d8f77dd58d04be1ec6ba19", - "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63", - "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202", -} - -var txDetails map[string]*bchain.Tx +var rpcTest *rpc.Test func init() { - var ( - addr1, addr2, addr3, addr4 bchain.Address - err error - ) - addr1, err = bchain.NewBaseAddress("tmGunyrqeeHBKX3Jm23zKLokRogrS51Qzqh") - if err == nil { - addr2, err = bchain.NewBaseAddress("t2GGEpYQUKiTsb9WYKD9AKNEriao84tVsr5") - } - if err == nil { - addr3, err = bchain.NewBaseAddress("tmPuzhaxL3vzTqkyJ6wn48Q4ZfAo6PBvHKC") - } - if err == nil { - addr4, err = bchain.NewBaseAddress("tmBbamgVqVBTAsEzPmEymbczdoaQvE5qwaR") - } + t, err := rpc.NewTest("Zcash Testnet", getRPCClient) if err != nil { panic(err) } - - txDetails = map[string]*bchain.Tx{ - "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63": &bchain.Tx{ - Hex: "030000807082c40301601ade5f535f62f3da01e0c88b16beb916877fa0fa43299a9e2398b813d0a119020000006a4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2feffffff02ea5e2c1c000000001976a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac00a3e1110000000017a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e8794d40300f1d4030000", - Blocktime: 1528781777, - Time: 1528781777, - Txid: "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63", - LockTime: 251028, - Vin: []bchain.Vin{ - { - ScriptSig: bchain.ScriptSig{ - Hex: "4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2", - }, - Txid: "19a1d013b898239e9a2943faa07f8716b9be168bc8e001daf3625f535fde1a60", - Vout: 2, - Sequence: 4294967294, - }, - }, - Vout: []bchain.Vout{ - { - Value: 4.72669930, - N: 0, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac", - Addresses: []string{ - "tmGunyrqeeHBKX3Jm23zKLokRogrS51Qzqh", - }, - }, - Address: addr1, - }, - { - Value: 3.0, - N: 1, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e87", - Addresses: []string{ - "t2GGEpYQUKiTsb9WYKD9AKNEriao84tVsr5", - }, - }, - Address: addr2, - }, - }, - }, - "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202": &bchain.Tx{ - Hex: "030000807082c40302eac0139a677c07b6fcdddd205f4bf538d9cc9fb586565fe77440f93cf1b5ca9a010000006b4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727feffffff6a1ed49e62634ab5a60b23ec73f9014ad1c9d3bd3bf023333c8eb311c802f298000000006b4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1feffffff0200a3e111000000001976a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac3176a002000000001976a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488acd2d40300f1d4030000", - Blocktime: 1528781777, - Time: 1528781777, - Txid: "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202", - LockTime: 251090, - Vin: []bchain.Vin{ - { - ScriptSig: bchain.ScriptSig{ - Hex: "4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727", - }, - Txid: "9acab5f13cf94074e75f5686b59fccd938f54b5f20ddddfcb6077c679a13c0ea", - Vout: 1, - Sequence: 4294967294, - }, - { - ScriptSig: bchain.ScriptSig{ - Hex: "4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1", - }, - Txid: "98f202c811b38e3c3323f03bbdd3c9d14a01f973ec230ba6b54a63629ed41e6a", - Vout: 0, - Sequence: 4294967294, - }, - }, - Vout: []bchain.Vout{ - { - Value: 3.0, - N: 0, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac", - Addresses: []string{ - "tmPuzhaxL3vzTqkyJ6wn48Q4ZfAo6PBvHKC", - }, - }, - Address: addr3, - }, - { - Value: 0.44070449, - N: 1, - ScriptPubKey: bchain.ScriptPubKey{ - Hex: "76a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488ac", - Addresses: []string{ - "tmBbamgVqVBTAsEzPmEymbczdoaQvE5qwaR", - }, - }, - Address: addr4, - }, - }, - }, - } + rpcTest = t } func TestZCashRPC_GetBlockHash(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - hash, err := cli.GetBlockHash(blockHeight) - if err != nil { - t.Error(err) - return - } - - if hash != blockHash { - t.Errorf("GetBlockHash() got %q, want %q", hash, blockHash) - } -} - -func TestZCashRPC_GetBlockRaw(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - d, err := cli.GetBlockRaw(blockHash) - if err != nil { - t.Error(err) - return - } - - blk := hex.EncodeToString(d) - - if blk != blockHex { - t.Errorf("GetBlockRaw() got %q, want %q", blk, blockHex) - } + rpcTest.TestGetBlockHash(t) } func TestZCashRPC_GetBlock(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - blk, err := cli.GetBlock(blockHash, 0) - if err != nil { - t.Error(err) - return - } - - if len(blk.Txs) != len(blockTxs) { - t.Errorf("GetBlock() number of transactions: got %d, want %d", len(blk.Txs), len(blockTxs)) - } - - for ti, tx := range blk.Txs { - if tx.Txid != blockTxs[ti] { - t.Errorf("GetBlock() transaction %d: got %s, want %s", ti, tx.Txid, blockTxs[ti]) - } - } - + rpcTest.TestGetBlock(t) } func TestZCashRPC_GetTransaction(t *testing.T) { - cli, err := getRPCClient() - if err != nil { - t.Fatal(err) - } - - for txid, want := range txDetails { - got, err := cli.GetTransaction(txid) - if err != nil { - t.Error(err) - return - } - - // Confirmations is variable field, we just check if is set and reset it - if got.Confirmations > 0 { - got.Confirmations = 0 - } else { - t.Errorf("GetTransaction() has empty Confirmations field") - continue - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("GetTransaction() got %v, want %v", got, want) - } - } + rpcTest.TestGetTransaction(t) } diff --git a/bchain/tests/rpc/config.json b/bchain/tests/rpc/config.json index 97345646..086a0105 100644 --- a/bchain/tests/rpc/config.json +++ b/bchain/tests/rpc/config.json @@ -1,25 +1,25 @@ { - "bch": { + "Bcash Testnet": { "url": "http://localhost:18031", "user": "rpc", "pass": "rpc" }, - "btc": { + "Bitcoin Testnet": { "url": "http://localhost:18030", "user": "rpc", "pass": "rpc" }, - "dash": { + "Dash Testnet": { "url": "http://localhost:18033", "user": "rpc", "pass": "rpc" }, - "eth": { + "Ethereum Testnet": { "url": "ws://localhost:18036", "user": null, "pass": null }, - "zec": { + "Zcash Testnet": { "url": "http://localhost:18032", "user": "rpc", "pass": "rpc" diff --git a/bchain/tests/rpc/data.go b/bchain/tests/rpc/data.go index 2d75dc59..7d50460a 100644 --- a/bchain/tests/rpc/data.go +++ b/bchain/tests/rpc/data.go @@ -38,6 +38,7 @@ func readDataFile(dir, relDir, filename string) ([]byte, error) { if !ok { return nil, errors.New("Path not found") } + filename = strings.Replace(filename, " ", "_", -1) path = filepath.Join(path, filename) return ioutil.ReadFile(path) } diff --git a/bchain/tests/rpc/testdata/bch.json b/bchain/tests/rpc/testdata/Bcash_Testnet.json similarity index 54% rename from bchain/tests/rpc/testdata/bch.json rename to bchain/tests/rpc/testdata/Bcash_Testnet.json index c59acf85..99d94025 100644 --- a/bchain/tests/rpc/testdata/bch.json +++ b/bchain/tests/rpc/testdata/Bcash_Testnet.json @@ -1,7 +1,6 @@ { "blockHeight": 1239639, "blockHash": "0000000075dd9708c23f5830de27c5d644983bb877c575c52926f19be7d80fe2", - "blockHex": "00000020fb79eebaff373687fdd612fd8ffb1717b866f7a7748cef7d6994198000000000bbaec06df359e98bd122726c9f178f4fdaa0fb59b3b86d18e465d53acc33bfda06941f5bffff001d7a6681650f01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0a0357ea12055374617368ffffffff0157966009000000001976a914014dc11b35cafe7605b4c1798a5b86efd788cff488ac0000000002000000014071f84a20eaeac1ba417ba63257087999a1c6401b94cdcf898079036aa00949000000006a4730440220600c88cf5f283d4b607253c1345e9d20bc4d67dc523070ad2f27f4ec337da44a02200f80a2dc8a0b501fb9c7fcb85851e05e83acbaf24b7a0cec5c1026c9cf004383412102e5e90f37c8a8f9ba15c3cce80f2f823bcc222063b7bc46e88ed7cd7d335d110afeffffff0200e1f5050000000017a914ac90ed8510c9a7445b104fd1602341dc2f890d1587795e27ea160000001976a91488f18e19e4a62fce9ab0db1cfb29cc22a058562588ac22ea12000200000001b2c673aede02a4054a8c23e456e581d684f47dadb54083317d6152949d55d94e010000006b483045022100f31a23984a44f485a570a102899e3a25cdf6d1234259e602dbe61f2c3e77e490022069a6a7b013452bd66ed3c11aba22a64559134cd1af3d283730a9b7fb33631cca412103cb05918b81d36c387c791d2accfaefead287a4a30427387fb1095fc0c363ef8efeffffff0200c2eb0b0000000017a914ac90ed8510c9a7445b104fd1602341dc2f890d15878906e1e1160000001976a9147f7ed17e71afc40beac9b8d0b0fb53731161339c88ac56ea1200020000000103365f2950d5d427beac98e2e5658cab90ce9b48350c62c5747dcb14d70f7602010000006b4830450221009acfe9bce502d2ad19d10c9278887f041e07a4f8277d1837733841ff6ea201cc022065a757b167b1b842211531b0b6ee891da19025e692dcb138add4738e8ad9524d412102a69b92783a38bc29c7f669818d922cf8566f41dbc8dd4992e72b69480a8766adfeffffff02b4b157fe160000001976a91414fba45042c5d32455a02e97f5e3c12874df267088ac00e1f505000000001976a9148c5d5ba49d1661f3c07261fe25ce6d849cd40d3c88ac56ea12000200000001768dcdaa8e733e9de87bd4762567e16e362746ff6752a393f5b62f9e1760209b000000006b483045022100df684fea9661ff797aa9e977d6b223e3cff4b661b1f49b61ae4590e48c0f1ebc0220635ebec87bd291b8263f0500797e2de573f94d7ee69dad63ce19add5abf273d5412103639049ceb22afb8c9070fe00562833a4e367c45c5c632daf75e81ea101cc6f2bfeffffff0298f7d3d1160000001976a914bbcd80aacaa6d8fe22bded7fec4746eb605dbf2388ac00e1f505000000001976a9146010d148212eabdec987af9568ed3c16bc8565c388ac56ea12000200000001e06d5b80b1dc384515b51accb247cfe74da3652c204758aeb48b9447e061d624000000006a47304402200252a79712e87e0212802e064dae51b0b93cc27642f6a521f84f522f9713f90702207234f37a4db14b0678d3301c67b7eaadde293394128c346c619aa2baeccfdf4b412103e8ec57f9d6f63d46ff1a83df3463048c5a1f77de7648da8d11d98347e79d260dfeffffff0230932c7f160000001976a91471707ab51d344b3996c4056a9f86659c8452592d88ac20bcbe00000000001976a914cd14f744df519aa04553b65c20a2fd0f7d653cc688ac56ea12000200000001d4d209bc5fb71b8d15a2a97846cec3cca73dc1d86ea66072a5478e59317017cc000000006a47304402207f6dbce56aa6548859bac719fb410859f366f190f63787b2a22339b1a1b338cf02204fee90094758a40e34726018a43b23e9789f1dcfc2da2515684d409c057818f741210372c26fba05c5bd542c1f8ff5bb2d2bebc26565bccd0731a4b6b7cd304eb50ca0feffffff028ecc1a4f160000001976a914e71a68a6fdf8badab6f8639dde10bdc436c4a40988ac00c2eb0b000000001976a914a28bc738fc7af8e0545edc40407cfb05077c60b888ac36ea120002000000013a047d9af4ecc4e7f8fdfded63af66f4e6a6e952f6ac95d905ea234b0a5152d3010000006a473044022028cd96dbaba2c72d36c3bdb5ec2ceff9520142ab045ddbd76732dd0a81147c1c0220394ab87587374ad48153def50abff43e410462456f04147a8b7af141274fa55c412102c01655518abdf62b4f6898d1ab9b90496cf97ee2ed9a4f949e695472fd45d1e0feffffff02ffad805f150000001976a9148c0c65371147f8f7e63e3ff1319be62a554dca9988ac00c2eb0b000000001976a9148c5d5ba49d1661f3c07261fe25ce6d849cd40d3c88ac56ea12000200000001ba548aa7f7d4342e4ba8ba4d0657b06778fb77d1258240be8f42f9f0415da359010000006b483045022100a42c83bf0bb95adc29f63b4c4d4831c0cbf8bb44f2a836db227be6f0208b2a550220746f3a9da3cec8308ff8f1907cdbd7b3d1c7462db5a54abfe68d207ffa159d53412103653ece38ad97d96f6782d5f8ea83a0bb861f69f4bad444c6bfbcac449666e7b4feffffff0240787d01000000001976a914cd14f744df519aa04553b65c20a2fd0f7d653cc688ac9a107ef2120000001976a914b3e12112e6c3614ecd980b76e519ce9c3deaa0f488ac56ea12000200000001b4ac666e5203231dd64a46b34cfd011a5936db53255660eaaae556db6289bb4601000000fdfd00004730440220632ccac4e480f6b911e298ed5e609db9d72c6eda9efa387cb26b5e9ef700163a02203edc214365c311dd7d19569360df806794eb9c2274469105b2bf338f7143a58141483045022100ca577f10fbfd29bca371c557bad428b01ae77f7914db285b61c0b499c5ff4b3d022001767845813496ded9b80a21b60b622219e0a08f3a92df0805047a8f3f12ca3b414c69522103472fe9fd7e726102894e84437e837b95f21913fd84804052228de77eae2a07bb2103203cab654b45e67c748e5adc91070fb5a166ff51378949d256808476c8e96bb021029fd0b61c762122b1a7e7c2f1fce53e6be52a0d486ec000635e757696a75120ca53aeffffffff01d6b02d00000000001976a91409fed3e08e624b23dbbacc77f7b2a39998351a6888ac000000000100000001074065abfdb5251f7fbb04c8a2700c1d1a497d07af8f0fff048535483418cd34010000006b483045022100eef073308d9a2e3031f2ae18511ffbe4ea84174036c7716b540c57b55268ee1d0220433acc4c47adeb89f3fd64163b22e61e3379f99fb75aa053c01ac020504fb864412103579c40a982ea207d7c8e99a4ad401ab17db47d8a24f2c63cc82a328a5d23d63bffffffff029c040200000000001976a914fad6c38dca5b36b443c2cc49389c3e1c7556354488acfdc40200000000001976a914b7e34815d2d9fc710cb603873f8c21b66033917588ac000000000100000001a37a930deb7dc18970d56be44165b8f58ffdad9c02519f261a8f5d8e311235de010000006a47304402203acfa68bfb3125cac57cb1b8e6483ef9ac901889cfc3da04893549ed8c1ddee102203b1d702161d9266707e4f9a026c84afd144d5fe28dfe5f2026ab2abc317b717a4121031872714bba791e1f80a604ec0fb170c6bb0110c509cbd35c7e92568f47a922b3ffffffff0280969800000000001976a914a8a6a3ed17b4a75bf8045fa9921771cb51bc948b88ac007e5603000000001976a9143769137f82fb4d8d1f8cb3c799f26139760d09ff88ac0000000001000000013ad31893160296f0a24fbbddb2f1f1bc5a6cec247158d1fe37c95289b22c480b000000006a4730440220364e2f5cdbd70453df3218532039acd2b6954b40db565f4657c8b4a4062e08f00220240022d4e2129e8847c835b1d61047a527b9c8d477020bbe9c5cfdc661e8b21d412102b3691c3d09206dd5a3fd9b97fc87904b859ad3c63d67c1751d45135e5f4ae434ffffffff01561d0f00000000001976a91498a7c0c7781de807e59185c540032744eb4b7f2d88ac000000000200000001f7e703143b521d0bf653e07a1a28f5b0cb84a7dd797e5b66183e50e5aebc5bb4010000006a473044022024ececc22b6a47bac0c5cfca8008b9ba5de49c6424f3ebfa236696f38e6d6bf9022069cb594fa8be28fa35128c2c05c96408da27165d7dcc0ef776cc838b858fed45412102b46e6d35aeae03348578220d21cb182e36599fa393a3150886c37ec16a10c58cfeffffff0240420f00000000001976a914f43c36964b237d6bc8e3165c551980059bdd75e888ac40f82200000000001976a914384b7137cc464a632961c74bd077e0ec5fb44a1888ac56ea12000200000008349c1ef994e931d4da1f545d2e578f898ddf457392c5485dc75378de8f36bef4010000006a4730440220351f1566e3ef02e900942103c60cba5a768cd710d3d1afbc75406099ad2d9e4702206e0f639a9991c7afb2136fb2e437629103ad0989898d1c90078ded5f08f5cb3341210303ae341929bdb242226a9a8c15cdbed5b89fa286842714d8be7e3f16c63abe11feffffff4ae685c8efc7f090e75b80f1b705d7bf5fa6dbbcf88c5f5cf2dc0678a9646fb4000000006b483045022100b8dae1825b0d0ccbe212e8da6767ea049bad9acfc737e5c5ef3dc5eeef6d313c02207e4c669956f871a4a5f71903bf38a8c587b81940943682364b11fb1cd9c078d7412103c9bd0064d2759628c1f6e5ad9d6345a5bce64dc4f4bb0675162f77acd557e4e2feffffff1ac21ded05387165cb7d0d95e2036a82f79a314575f065407e0c32a6b24b2f1d010000006b483045022100ef4a9469a5b3dbc0f03e8d8c5f254ad86f2c1e92e75a5ee737c3b3186b5edd95022076abcdfa976c3c78d2b196fb79699057248fad6d3d5e782524b85d84704394cc412103882df93f092501520bb36206703dadb65b25a3fbd0323c690dc8e72f5ee4a770feffffffea6905abb313a2aa3f6c8a056294abe06774dbf75688b03b96b8a2132aaf0cbf010000006b483045022100e4ab9dd0a75bc76c6c2cf549fb37c5577bad7f58953a7103abe4a77a95b873c10220545aa0c2b2869d444fb99d237549d6ac270c711d60788a6463ef4fee63ebd8fc4121031adea1da6e87b0771ea8c2a4723127d8cc9328b0594d159570ebe97b1e021c9efeffffff8c9a7a668dad3766f953d9779861f9c007b0a06f6ea2afbf8ab30137f34300fa000000006a47304402207253f724d891f5e1e66ec0c8084ade910a52257a1257933c23bd1b4da862e33a0220363df96e31dffa0a599b56c5049519a4d8ed34e96dc1fefecfd2bc31fc6d79d9412103186a4fc8445b3b437587c71f00fc9da7a267c0a38915fcf567528e310a73c0bdfeffffff82445d5b10b84b5256ef028615465e2d139c45584884c06e68bc38930d826e72010000006a47304402204846adc41599336307a087d4fa779a059ffe12c69456c82fa4b03942c901284002203e5f0c5e72b9ded7f48b4d22cbdb39390bea33003d46d8b4652c8ede1f13b3e54121031adea1da6e87b0771ea8c2a4723127d8cc9328b0594d159570ebe97b1e021c9efeffffffb8816c2c3b95aa8126f6d2d04798632b3167e6e2144d5f4e84cfb29e9d6f442d010000006a473044022078b1aff9a4ed3452f782db38341d846edd295f9a907c7373519408fb33eeb3240220578da5e91ec0c82604982b09cbd1f44e28260fcd640bcc55f086ce296ef32ef7412103c9bd0064d2759628c1f6e5ad9d6345a5bce64dc4f4bb0675162f77acd557e4e2feffffff70628ac9b2814f99fe4cd5f67a76047af533774ae90331fa8cb68e4dcbff1cb0010000006b483045022100cd88592589ab3bbd6e23920770a067a37ffbff3a31238167731377f11903676202202cb1c019365870dad3113abb3b0bc68ab9e65d9d60592f3315ffa444dfd88be741210393bd44ad6ed9295bf408e01bcdbdf6e4e8fd4a573ad20f37e54ff6e9b1596028feffffff027f766c02000000001976a9149f96c6e6c3aabf438eef5c589c47fa4b4f96592a88ac1c3d0f00000000001976a914e2ffd7cf2fe9468512878196d1b48fee9e9d003288ac56ea1200", "blockTxs": [ "f12d490ad439ff37c91e9ec5ecd5440c2d4a96653f2668402c5ebacc6d07dcf8", "0e78e3276bd59dd403306334ab05b2d58167b4cf04dbb94ae76dc189db5bf3df", diff --git a/bchain/tests/rpc/testdata/Bitcoin_Testnet.json b/bchain/tests/rpc/testdata/Bitcoin_Testnet.json new file mode 100644 index 00000000..0eb09a8a --- /dev/null +++ b/bchain/tests/rpc/testdata/Bitcoin_Testnet.json @@ -0,0 +1,123 @@ +{ + "blockHeight": 1325168, + "blockHash": "000000000000004ed0834f3de922e66d024ec4da9fcc2da17be61369cb6dc041", + "blockTxs": [ + "e1179f205aabbf48dc2ce4ebd9ed255571b0578e4de551f6574a50cb81120007", + "00a5aa2891d41af9eb1dc30c940f142a609ecab8f370eb0874ba7d32252d1b1b", + "1c519d80804dd17258cfc801bf2c875607956fc9f065a664f43e88d53f80af6f", + "b10c1e2f7c8a6b10fddf94260aff0f8a5f56e33c8d0de48c49a72eb8418c3f6e", + "ba85ca543b290deb84cde9c4ca53614dbe557a3dede5d0adb141f803f8e82f34", + "60dfc2c9cc184ae68ca9e540ab4393d9d2179d060e2ac290f29560c6a1360f51", + "3a40bca678653ae8f7f6d2771b571d5ace1a258056b99e3fd361a10f1016bc53", + "4d4e495f3329801d92c7e3dc9874a372576bf3548decf884ede388143980ecab", + "74ba4bee8d559e4d8b4859c086b0ea5f2c36bcabc95d8578e775f065f70943b8", + "32bcc281f081e172dcb40ad137564724bd9486095813b78990d1d986173ac3c6", + "b6e77c59f4a988731d9b8520e0f4971223e622946eb12e28cc2bab72f1e9c2f8", + "0bc8f39da5d5300a2728b45edb18c8219e94a8b27a2e8074f6c5c10a00d99788", + "8329b31d2a490d57980afcf5c7df4574ce57f952aef6f5aecb3b7786f5c9f255", + "e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470", + "3005378ee85fc905a1812bdfae4b2e0e9bb09f5867a53fd73237bb319a1774aa", + "ebea245b9e4d96fab65c938547a9b3ffd03659b92b8ae4fcdfe4ac9bc325c0a2", + "a2d5fe23b50253dda9941dd6c97c04853d58f048acf347acf9ccf549ee215b51", + "017c2ccec866850521db877c1c7f6d095b7df668f891cfaf70a5e14ce39d010c", + "d101d3467a831cc4dfc87bdd19d0ff5d01b8c872e47b2096eeeac3b44c2a258a", + "3884180bab62d0f0498a8ad012b0005aceec778a18a617e5392d99cee5f21869", + "a00200e57bed4fbd193c4cad49549d311282fee9a82956083353a2874f9bfd9f", + "d32ce7a9413111fb2e3578472d520eb1437db701f20256e3afd37b7c0a6d67e6", + "fed1df6d23a40e1a1f26820bbe35febb668aa2240902f1fd17b31a84dde6eb39", + "5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114", + "411e7f3f4cae4125c8933403809771ebfcaa088f6ef773e5a412ead8639fb515", + "d53858bbbbde4518ea92abda93ac5d01e5122d420a468e6d076244edd99bcea1", + "b5fc4d963805b439d11f06b5d5d89ce3aac225e7145d1673d20d3d37a12c61dd", + "c8d7332377d4bf43c232bc7afc3d7e3aacf13523d1c8488f68f530e58e6cfd88", + "3c21a6b7e3810ca10efac45446cd2b7ef0c9848ac589be7375b61ea5aabbbea4", + "5a25c2b70e2194e05a6208c99343ebe0fad970dd19f3f9cca88aaf77ab9e4658", + "031e3c08ebdcafccf6dc5d7ff1161cd5314424d0a943d2c22a5a2109286e332d", + "4992d16008aa3050b3e2e4aab67e488eb338850ff1c348367ae3d089d8d67a52", + "beb3e71b8da7da7917228f5ce8a88afdc45836c421b053dde24d367865326bd7" + ], + "txDetails": { + "e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470": { + "hex": "01000000000102a4b8c14f271cfa77d5ecaed9c3026472a55ea6bca119e2ff7b04975326f5974001000000171600147edbcdda98080eeb6e8a63c63da135498295c3cdffffffffabcdf96b8ba187c24d70f98a2edfbf100821506212637f28b30a08efa970a4eb0100000017160014df7d60680e984aae4052e24bce8f17e4bfdcc532ffffffff0292fe1e00000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac13e796110100000017a914c9e67d2b78a38857c786ea9a2fc3e64cb6e775648702483045022100a6910d3a3b64545a44e097a3739b1206095602fa796afc51f81b249d1293ad0a02206cdae51853b59ca52003f4e54ea8ae418b6b4d036cbe1fdd78677efe8eddb318012102b45e239d96f8504ae45a32af7c80f6164f7b9658166e318521ee822192fee3ef0247304402202684a6f59ee255f3f5e9a9209a735bf2aaa818d47add7c3f7a5590623bd2211c0220452bf2fb8d0dc0380862988f0f098c21e861004e02da7bd1fc6bea4e7f33d2dc012103f308867fda821467f77d372791644225174ae16daba86e55754c150a8d5aa40d00000000", + "txid": "e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470", + "blocktime": 1528788394, + "time": 1528788394, + "locktime": 0, + "vin": [ + { + "txid": "4097f5265397047bffe219a1bca65ea5726402c3d9aeecd577fa1c274fc1b8a4", + "vout": 1, + "sequence": 4294967295, + "scriptSig": { + "hex": "1600147edbcdda98080eeb6e8a63c63da135498295c3cd" + } + }, + { + "txid": "eba470a9ef080ab3287f63126250210810bfdf2e8af9704dc287a18b6bf9cdab", + "vout": 1, + "sequence": 4294967295, + "scriptSig": { + "hex": "160014df7d60680e984aae4052e24bce8f17e4bfdcc532" + } + } + ], + "vout": [ + { + "value": 0.02031250, + "n": 0, + "scriptPubKey": { + "hex": "76a914abba3808b854c70b63ff038fcddfbafcb707713988ac" + } + }, + { + "value": 45.90069523, + "n": 1, + "scriptPubKey": { + "hex": "a914c9e67d2b78a38857c786ea9a2fc3e64cb6e7756487" + } + } + ] + }, + "5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114": { + "hex": "01000000025b0551bd0fffcf55881e285e15b364ab9a831d2494d2eb7a163a4bbd6f551151000000006b483045022100dff500e8c060a9c8810483d4ada8f91c0b844e92778cc762300040870109c0be02207029fa781ec37ddeb0ffbfa7160e625afdd126f30ec11fb9bc25f4d2164933bb0121023c6017ab9f471a69157180c5e30b9aef2ff73ea2a1a774c53a975e2557536314ffffffffd49a58913818610b0aa065d4f32995863d216c44040a49d454f6b7eeb65c9adc010000006b483045022100dce24b819b70f920d0bb60fa1241fa14f2500412a60aceeaae2610e1593b5e3c022041fdc5a02dc26af043bea27713f1245340b98bd47aa283e23b96ecc4aae157a4012102d18a88bcf5f65d937de7d9bc24d2f492a55216087262bf4683d0055dd0521a56feffffff02da869800000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac80fe210a000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac00000000", + "txid": "5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114", + "blocktime": 1528788394, + "time": 1528788394, + "locktime": 0, + "vin": [ + { + "txid": "5111556fbd4b3a167aebd294241d839aab64b3155e281e8855cfff0fbd51055b", + "vout": 0, + "sequence": 4294967295, + "scriptSig": { + "hex": "483045022100dff500e8c060a9c8810483d4ada8f91c0b844e92778cc762300040870109c0be02207029fa781ec37ddeb0ffbfa7160e625afdd126f30ec11fb9bc25f4d2164933bb0121023c6017ab9f471a69157180c5e30b9aef2ff73ea2a1a774c53a975e2557536314" + } + }, + { + "txid": "dc9a5cb6eeb7f654d4490a04446c213d869529f3d465a00a0b61183891589ad4", + "vout": 1, + "sequence": 4294967294, + "scriptSig": { + "hex": "483045022100dce24b819b70f920d0bb60fa1241fa14f2500412a60aceeaae2610e1593b5e3c022041fdc5a02dc26af043bea27713f1245340b98bd47aa283e23b96ecc4aae157a4012102d18a88bcf5f65d937de7d9bc24d2f492a55216087262bf4683d0055dd0521a56" + } + } + ], + "vout": [ + { + "value": 0.09995994, + "n": 0, + "scriptPubKey": { + "hex": "76a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac" + } + }, + { + "value": 1.7, + "n": 1, + "scriptPubKey": { + "hex": "76a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac" + } + } + ] + } + } +} diff --git a/bchain/tests/rpc/testdata/Dash_Testnet.json b/bchain/tests/rpc/testdata/Dash_Testnet.json new file mode 100644 index 00000000..d86f0bee --- /dev/null +++ b/bchain/tests/rpc/testdata/Dash_Testnet.json @@ -0,0 +1,111 @@ +{ + "blockHeight": 139521, + "blockHash": "000000000296ea05e13b5479f6c041de575eec90759f58f57d311a8918b0af17", + "blockTxs": [ + "cfe2d2c5bd9929349a9d8f3d8f2423f4f0c9b408ed41b3002be5e7437a20aa7d", + "3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942", + "3f296b929f6ee4f0ad3d6fce35873d6aeacbdf06aaf2abe384beb6e3f2a4dd03", + "5ef4f9b7e4c0240687c3a6e6a073e0fbc753645d231ca35435b95325778b7186", + "805b5ba055227b0f7dbbdef8e603632c4d25b93f0e87c59fc74cbe8ad8dbe806", + "392785b88f03c82492172827f30cbed4761de3098a0faaa740999b412ff15e46", + "13fafd7c8afc6fd2c860d342eaf0cfe0edd2b994bb836898c02830b2f688155e", + "26bc95fcc71380f0d66e437314c72999c0848cab81fe1f91c9c95bf15b74855c", + "7873d8d774f2aae72100620a21b38ea681b488b328802b6ec3271b1d727c6b73", + "23147585fd4ed3970118027ce9b2e190e264f26fbf5d8c9708a483cee6cada43", + "e079894b2545eca7184a2f0eaccf4b069242f18fa0721aedc8f66b73112a1e8f", + "b36284854fa1947844ecc5d62768be3e14cc44c430db87b1b90184364b30dbf4", + "1fd3ad5d0392cedf318600908270986c801cac161ef06f660591634cc2a29652", + "7a5b8944589b0cfba9c408b24b095648b0040a37fd769a9785982603bb7ca1f7", + "7da1811ec3f2c6381d89e59f40957d36c898ba1bb70b976e0b5490d3b9fa8952", + "dbcfa65bdfe758353305eaff11b300463018efb7fa8f17c6c6a98bb8dba6bcc9", + "c046821e5503770304359792c20c1ed3e71509a19a867acf1dae113bf52d2a6f", + "d3cea11e1a4937323cc94172f93a2e0edc0981a706f2d2c3315ace94b01b375a", + "6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e", + "53834414d8a88afe4268b85f959e526a0c677ac6b7dedba9a796d1549852fd41", + "b761ebaccfb6d0eeaa5350ccafdf6a7633e59d6baadc932c6d78491cb08052a6" + ], + "txDetails": { + "3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942": { + "hex": "020000000109d37a59b7da8902b8822547c927e35554b16667ffd698daae985c58c71616a4010000006b483045022100f3ef92ae1c8442eff171bd2dbc69373db384c86617032917b3bb2c5cd892bb2702207485cf5f8e6aa9fe245f5708a5c6ec37580c1c35e54429c6b43b322678f54cad012102ba7dbd059cc4f03e9fa4b6007b407279a154a8fc2103241511df155a52b7ea58feffffff02a055e18e170000001976a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88ac8cb65df0440000001976a9141ed486862342afd134f96a6cee5ca105801375df88ac00210200", + "txid": "3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942", + "blocktime": 1528713762, + "time": 1528713762, + "locktime": 139520, + "vin": [ + { + "txid": "a41616c7585c98aeda98d6ff6766b15455e327c9472582b80289dab7597ad309", + "vout": 1, + "sequence": 4294967294, + "scriptSig": { + "hex": "483045022100f3ef92ae1c8442eff171bd2dbc69373db384c86617032917b3bb2c5cd892bb2702207485cf5f8e6aa9fe245f5708a5c6ec37580c1c35e54429c6b43b322678f54cad012102ba7dbd059cc4f03e9fa4b6007b407279a154a8fc2103241511df155a52b7ea58" + } + } + ], + "vout": [ + { + "value": 1011.81380000, + "n": 0, + "scriptPubKey": { + "hex": "76a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88ac" + } + }, + { + "value": 2960.90449548, + "n": 1, + "scriptPubKey": { + "hex": "76a9141ed486862342afd134f96a6cee5ca105801375df88ac" + } + } + ] + }, + "6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e": { + "hex": "020000000327ee9a2a360c6304fda56fa029670a95db595f70ae185a6f76ff1de415e07a18000000006a473044022011e7aed7a1cf187a9b6ca294bb76e3576cadebce48b5b944ad8393a60e8aa485022000818546dc7ba47c625258223dcefd6e84dc3faa8d54c646bfc0f55c4506c8f00121023fe7680caadc7bf3f796936de04d77e1007dea53880621c01d7b34720345d4ecfeffffff1ae8beeed571f491410ed327a6821b683d8ae571aea56057634da7aa8ce1041f000000006b4830450221009277cfac065a076814e18613d89c7d85a6461cf5283f2a9cee7254ec83fce637022023cf7186be7714921fe24719450e65a204d803738a1cb9fe35f30753f0696b8b012102aff34da05a74891899aace72f2e650ec1c039bfc519c192e6c231a2b7fa05749feffffff6388454ad1e5718af92def6fe307e64e97c43324d30c322b31edf85088020dc9000000006a47304402204435602e00d22417ff489302758a246df5fbc05e9bc4d0025464556ae7f77e70022036e30d2d46937ee0fc0cdf9a63e7baf8351bd16454ec02311cac52655ac4c32801210395fbe30126fc97a2c8b1e29bc27028a5a6885e4a4116d13e2cbe32c9d71e7f03feffffff02ce177e09000000001976a91437617547a3e0ba0adeead7c8c33c03970341404088acd0f7aad1010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac00210200", + "txid": "6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e", + "blocktime": 1528713762, + "time": 1528713762, + "locktime": 139520, + "vin": [ + { + "txid": "187ae015e41dff766f5a18ae705f59db950a6729a06fa5fd04630c362a9aee27", + "vout": 0, + "sequence": 4294967294, + "scriptSig": { + "hex": "473044022011e7aed7a1cf187a9b6ca294bb76e3576cadebce48b5b944ad8393a60e8aa485022000818546dc7ba47c625258223dcefd6e84dc3faa8d54c646bfc0f55c4506c8f00121023fe7680caadc7bf3f796936de04d77e1007dea53880621c01d7b34720345d4ec" + } + }, + { + "txid": "1f04e18caaa74d635760a5ae71e58a3d681b82a627d30e4191f471d5eebee81a", + "vout": 0, + "sequence": 4294967294, + "scriptSig": { + "hex": "4830450221009277cfac065a076814e18613d89c7d85a6461cf5283f2a9cee7254ec83fce637022023cf7186be7714921fe24719450e65a204d803738a1cb9fe35f30753f0696b8b012102aff34da05a74891899aace72f2e650ec1c039bfc519c192e6c231a2b7fa05749" + } + }, + { + "txid": "c90d028850f8ed312b320cd32433c4974ee607e36fef2df98a71e5d14a458863", + "vout": 0, + "sequence": 4294967294, + "scriptSig": { + "hex": "47304402204435602e00d22417ff489302758a246df5fbc05e9bc4d0025464556ae7f77e70022036e30d2d46937ee0fc0cdf9a63e7baf8351bd16454ec02311cac52655ac4c32801210395fbe30126fc97a2c8b1e29bc27028a5a6885e4a4116d13e2cbe32c9d71e7f03" + } + } + ], + "vout": [ + { + "value": 1.59258574, + "n": 0, + "scriptPubKey": { + "hex": "76a91437617547a3e0ba0adeead7c8c33c03970341404088ac" + } + }, + { + "value": 78.12610000, + "n": 1, + "scriptPubKey": { + "hex": "76a914f0b3dff509993e0b7035ce997b52763ce501d67888ac" + } + } + ] + } + } +} diff --git a/bchain/tests/rpc/testdata/Ethereum_Testnet.json b/bchain/tests/rpc/testdata/Ethereum_Testnet.json new file mode 100644 index 00000000..cef9511f --- /dev/null +++ b/bchain/tests/rpc/testdata/Ethereum_Testnet.json @@ -0,0 +1,38 @@ +{ + "blockHeight": 2870000, + "blockHash": "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895", + "blockTxs": [ + "0x17ee235fc0359155b25419e0e4c65d9c500df6e71e8288d6ef020d04cc2f2cb3", + "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d", + "0xe14e6628e866555091fda44f934dfc6bfbbcd8a81e1281bb682eaf293d248be8", + "0xcffe6d5f4022822ba5f1e64f5b413c7f91c3a48c3739429d72065ec1a8b82e91", + "0x1d261bf23077b7e68ad9300ce9d88e7f4f95075fe98ea76b70534acaf5cf891b", + "0x92f73c26c99ea3b15535829cf686541a1318623baf8c49fe2bf0168bf3c3e272", + "0x392394bb4e4463c9ed59182797b5dbf23aa41c6f6edd7f4b5025d82acf43c357", + "0x3dd838b8d5d9b7155c960f8a138a9c499b87d84b7c9d9a513d8022b1991f959c", + "0x4889b4d1ad3652f6c410a6b6c05a459b86e68363d795f38ec13d5dc6d595d977", + "0xd1e1ff22a80135d904d119252c5d56a8c5b07af9d26de79fd3dda8aeffccf9ae", + "0xd1c3b7835c6032eb9eb07fdce90944f26d470b1c027adf2951b329a783e8e628", + "0x7f0d140329941f120b5b3fc751e30adeb87b2aebbfce5adcd0216604a34b6cc0" + ], + "txDetails": { + "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d": { + "hex": "7b226e6f6e6365223a2230783239666165222c226761735072696365223a223078313261303566323030222c22676173223a2230786462626130222c22746f223a22307836383262373930336131313039386366373730633761656634616130326138356233663336303161222c2276616c7565223a22307830222c22696e707574223a223078663032356361616630303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030323235222c2268617368223a22307865366231363864366262336438656437386530336462663832386236626664316662363133663665313239636261363234393634393834353533373234633564222c22626c6f636b4e756d626572223a223078326263616630222c2266726f6d223a22307864616363396336313735346130633436313666633533323364633934366538396562323732333032222c227472616e73616374696f6e496e646578223a22307831222c2276223a2230783162222c2272223a22307831626434306133313132326330333931386466366431363664373430613661336132326630386132353933346365623136383863363239373736363163383063222c2273223a22307836303766626331356331663739393561343235386635613962636363363362303430333632643139393164356566653133363163353632323265346361383966227d", + "txid": "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d", + "blocktime": 1521515026, + "time": 1521515026, + "vin": [ + { + "addresses": ["0xdacc9c61754a0c4616fc5323dc946e89eb272302"] + } + ], + "vout": [ + { + "scriptPubKey": { + "addresses": ["0x682b7903a11098cf770c7aef4aa02a85b3f3601a"] + } + } + ] + } + } +} diff --git a/bchain/tests/rpc/testdata/Zcash_Testnet.json b/bchain/tests/rpc/testdata/Zcash_Testnet.json new file mode 100644 index 00000000..aca84131 --- /dev/null +++ b/bchain/tests/rpc/testdata/Zcash_Testnet.json @@ -0,0 +1,89 @@ +{ + "blockHeight": 251102, + "blockHash": "001335906f981bbf0633e124e2fa8afef3d882e34a0306a4e0c55162e57e673d", + "blockTxs": [ + "f02aa1c4c86e1d0cef6ccbbc48b2b7b38355bc3612d8f77dd58d04be1ec6ba19", + "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63", + "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202" + ], + "txDetails": { + "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63": { + "hex": "030000807082c40301601ade5f535f62f3da01e0c88b16beb916877fa0fa43299a9e2398b813d0a119020000006a4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2feffffff02ea5e2c1c000000001976a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac00a3e1110000000017a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e8794d40300f1d4030000", + "txid": "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63", + "blocktime": 1528781777, + "time": 1528781777, + "locktime": 251028, + "vin": [ + { + "txid": "19a1d013b898239e9a2943faa07f8716b9be168bc8e001daf3625f535fde1a60", + "vout": 2, + "sequence": 4294967294, + "scriptSig": { + "hex": "4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2" + } + } + ], + "vout": [ + { + "value": 4.72669930, + "n": 0, + "scriptPubKey": { + "hex": "76a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac", + "addresses": ["tmGunyrqeeHBKX3Jm23zKLokRogrS51Qzqh"] + } + }, + { + "value": 3.0, + "n": 1, + "scriptPubKey": { + "hex": "a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e87", + "addresses": ["t2GGEpYQUKiTsb9WYKD9AKNEriao84tVsr5"] + } + } + ] + }, + "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202": { + "hex": "030000807082c40302eac0139a677c07b6fcdddd205f4bf538d9cc9fb586565fe77440f93cf1b5ca9a010000006b4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727feffffff6a1ed49e62634ab5a60b23ec73f9014ad1c9d3bd3bf023333c8eb311c802f298000000006b4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1feffffff0200a3e111000000001976a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac3176a002000000001976a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488acd2d40300f1d4030000", + "txid": "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202", + "blocktime": 1528781777, + "time": 1528781777, + "locktime": 251090, + "vin": [ + { + "txid": "9acab5f13cf94074e75f5686b59fccd938f54b5f20ddddfcb6077c679a13c0ea", + "vout": 1, + "sequence": 4294967294, + "scriptSig": { + "hex": "4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727" + } + }, + { + "txid": "98f202c811b38e3c3323f03bbdd3c9d14a01f973ec230ba6b54a63629ed41e6a", + "vout": 0, + "sequence": 4294967294, + "scriptSig": { + "hex": "4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1" + } + } + ], + "vout": [ + { + "value": 3.0, + "n": 0, + "scriptPubKey": { + "hex": "76a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac", + "addresses": ["tmPuzhaxL3vzTqkyJ6wn48Q4ZfAo6PBvHKC"] + } + }, + { + "value": 0.44070449, + "n": 1, + "scriptPubKey": { + "hex": "76a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488ac", + "addresses": ["tmBbamgVqVBTAsEzPmEymbczdoaQvE5qwaR"] + } + } + ] + } + } +}