示例#1
0
    def test_tx_unsigned(self):
        expected = {
            'inputs': [{
                'type':
                'p2pkh',
                'address':
                'XSxxwxa1hbpEGUmedjrovbE947qp3zmw1w',
                'num_sig':
                1,
                'prevout_hash':
                '9d24f0c7a62af51a3a1876ebdf9540403d08cfd03b0173dc7db6c80f66cfad97',
                'prevout_n':
                0,
                'pubkeys': [
                    '029f3eca8539b84a43f7b270e68bd7620338c4af7b825f279c526ac39ab4363483'
                ],
                'scriptSig':
                '01ff4c53ff022d2533000000000000000000d6f1f7cd3d082daddffc75e8e558e4d33efc1c2f0b1cf6d52cd8719621e7c49e03123e1dc268988db79c47f91dfc00b328f666c375dd9e7b5d1d2bb7658a3b027e00000100',
                'sequence':
                4294967294,
                'signatures': [None],
                'x_pubkeys': [
                    'ff022d2533000000000000000000d6f1f7cd3d082daddffc75e8e558e4d33efc1c2f0b1cf6d52cd8719621e7c49e03123e1dc268988db79c47f91dfc00b328f666c375dd9e7b5d1d2bb7658a3b027e00000100'
                ]
            }],
            'lockTime':
            68727,
            'outputs': [{
                'address': 'XT7HHh55Pepd9RcVKGqxhfNVPKjSQGiXjL',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914acde39ecdffccdb347458750c36c2315342cf6bc88ac',
                'type': TYPE_ADDRESS,
                'value': 109998080
            }],
            'version':
            1
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEqual(tx.deserialize(), expected)
        self.assertEqual(tx.deserialize(), None)

        self.assertEqual(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False,
            'final': True
        })
        self.assertEqual(tx.get_outputs(),
                         [('XT7HHh55Pepd9RcVKGqxhfNVPKjSQGiXjL', 109998080)])
        self.assertEqual(tx.get_output_addresses(),
                         ['XT7HHh55Pepd9RcVKGqxhfNVPKjSQGiXjL'])

        self.assertTrue(tx.has_address('XT7HHh55Pepd9RcVKGqxhfNVPKjSQGiXjL'))
        self.assertTrue(tx.has_address('XSxxwxa1hbpEGUmedjrovbE947qp3zmw1w'))
        self.assertFalse(tx.has_address('Xn6ZqLcuKpYoSkiXKmLMWKtoF2sNExHwjT'))

        self.assertEqual(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob)
        self.assertEqual(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEqual(transaction.deserialize(blob), expected)
    def test_tx_unsigned(self):
        expected = {
            'inputs': [{
                'type':
                'p2pkh',
                'address':
                'XdjwdihsyoLpoCHFUpd8x3iH1rsMsS2q5P',
                'num_sig':
                1,
                'prevout_hash':
                '3140eb24b43386f35ba69e3875eb6c93130ac66201d01c58f598defc949a5c2a',
                'prevout_n':
                0,
                'pubkeys': [
                    '02e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6'
                ],
                'scriptSig':
                '01ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000',
                'sequence':
                4294967295,
                'signatures': [None],
                'x_pubkeys': [
                    'ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000'
                ]
            }],
            'lockTime':
            0,
            'outputs': [{
                'address': 'Xdt8NqE5wSX9ytfP958t4tKdXoZDo6Bm6T',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914230ac37834073a42146f11ef8414ae929feaafc388ac',
                'type': TYPE_ADDRESS,
                'value': 1000000
            }],
            'partial':
            True,
            'version':
            1,
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEqual(tx.deserialize(), expected)
        self.assertEqual(tx.deserialize(), None)

        self.assertEqual(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False,
            'final': True
        })
        self.assertEqual(tx.get_outputs(),
                         [('Xdt8NqE5wSX9ytfP958t4tKdXoZDo6Bm6T', 1000000)])
        self.assertEqual(tx.get_output_addresses(),
                         ['Xdt8NqE5wSX9ytfP958t4tKdXoZDo6Bm6T'])

        self.assertTrue(tx.has_address('Xdt8NqE5wSX9ytfP958t4tKdXoZDo6Bm6T'))
        self.assertTrue(tx.has_address('XdjwdihsyoLpoCHFUpd8x3iH1rsMsS2q5P'))
        self.assertFalse(tx.has_address('Xn6ZqLcuKpYoSkiXKmLMWKtoF2sNExHwjT'))

        self.assertEqual(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob_signatures)
        self.assertEqual(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEqual(transaction.deserialize(blob), expected)
示例#3
0
    def test_tx_unsigned(self):
        expected = {
            'inputs': [{
                'type':
                'p2pkh',
                'address':
                '1446oU3z268EeFgfcwJv6X2VBXHfoYxfuD',
                'num_sig':
                1,
                'prevout_hash':
                '3140eb24b43386f35ba69e3875eb6c93130ac66201d01c58f598defc949a5c2a',
                'prevout_n':
                0,
                'pubkeys': [
                    '02e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6'
                ],
                'scriptSig':
                '01ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000',
                'sequence':
                4294967295,
                'signatures': [None],
                'x_pubkeys': [
                    'ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000'
                ]
            }],
            'lockTime':
            0,
            'outputs': [{
                'address': '14CHYaaByjJZpx4oHBpfDMdqhTyXnZ3kVs',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914230ac37834073a42146f11ef8414ae929feaafc388ac',
                'type': TYPE_ADDRESS,
                'value': 1000000
            }],
            'version':
            1
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEqual(tx.deserialize(), expected)
        self.assertEqual(tx.deserialize(), None)

        self.assertEqual(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False,
            'final': True
        })
        self.assertEqual(tx.get_outputs(),
                         [('14CHYaaByjJZpx4oHBpfDMdqhTyXnZ3kVs', 1000000)])
        self.assertEqual(tx.get_output_addresses(),
                         ['14CHYaaByjJZpx4oHBpfDMdqhTyXnZ3kVs'])

        self.assertTrue(tx.has_address('14CHYaaByjJZpx4oHBpfDMdqhTyXnZ3kVs'))
        self.assertTrue(tx.has_address('1446oU3z268EeFgfcwJv6X2VBXHfoYxfuD'))
        self.assertFalse(tx.has_address('1CQj15y1N7LDHp7wTt28eoD1QhHgFgxECH'))

        self.assertEqual(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob)
        self.assertEqual(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEqual(transaction.deserialize(blob), expected)
示例#4
0
 def test_txid_input_p2wsh_p2sh_not_multisig(self):
     tx = transaction.Transaction('0100000000010160f84fdcda039c3ca1b20038adea2d49a53db92f7c467e8def13734232bb610804000000232200202814720f16329ab81cb8867c4d447bd13255931f23e6655944c9ada1797fcf88ffffffff0ba3dcfc04000000001976a91488124a57c548c9e7b1dd687455af803bd5765dea88acc9f44900000000001976a914da55045a0ccd40a56ce861946d13eb861eb5f2d788ac49825e000000000017a914ca34d4b190e36479aa6e0023cfe0a8537c6aa8dd87680c0d00000000001976a914651102524c424b2e7c44787c4f21e4c54dffafc088acf02fa9000000000017a914ee6c596e6f7066466d778d4f9ba633a564a6e95d874d250900000000001976a9146ca7976b48c04fd23867748382ee8401b1d27c2988acf5119600000000001976a914cf47d5dcdba02fd547c600697097252d38c3214a88ace08a12000000000017a914017bef79d92d5ec08c051786bad317e5dd3befcf87e3d76201000000001976a9148ec1b88b66d142bcbdb42797a0fd402c23e0eec288ac718f6900000000001976a914e66344472a224ce6f843f2989accf435ae6a808988ac65e51300000000001976a914cad6717c13a2079066f876933834210ebbe68c3f88ac0347304402201a4907c4706104320313e182ecbb1b265b2d023a79586671386de86bb47461590220472c3db9fc99a728ebb9b555a72e3481d20b181bd059a9c1acadfb853d90c96c01210338a46f2a54112fef8803c8478bc17e5f8fc6a5ec276903a946c1fafb2e3a8b181976a914eda8660085bf607b82bd18560ca8f3a9ec49178588ac00000000')
     self.assertEqual('e9933221a150f78f9f224899f8568ff6422ffcc28ca3d53d87936368ff7c4b1d', tx.txid())
    def test_tx_unsigned(self):
        expected = {
            'overwintered':
            False,
            'inputs': [{
                'type':
                'p2pkh',
                'address':
                'RCLHsywGcuvoiG3s67J3C3MgwnkGUhAWQV',
                'num_sig':
                1,
                'prevout_hash':
                '3140eb24b43386f35ba69e3875eb6c93130ac66201d01c58f598defc949a5c2a',
                'prevout_n':
                0,
                'pubkeys': [
                    '02e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6'
                ],
                'scriptSig':
                '01ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000',
                'sequence':
                4294967295,
                'signatures': [None],
                'x_pubkeys': [
                    'ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000'
                ]
            }],
            'lockTime':
            0,
            'outputs': [{
                'address': 'RCUUd6TUaZ78txRzkMonJsy3TjS8R2uYhW',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914230ac37834073a42146f11ef8414ae929feaafc388ac',
                'type': TYPE_ADDRESS,
                'value': 1000000
            }],
            'version':
            1
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEqual(tx.deserialize(), expected)
        self.assertEqual(tx.deserialize(), None)

        self.assertEqual(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False,
            'final': True
        })
        self.assertEqual(tx.get_outputs(),
                         [('RCUUd6TUaZ78txRzkMonJsy3TjS8R2uYhW', 1000000)])
        self.assertEqual(tx.get_output_addresses(),
                         ['RCUUd6TUaZ78txRzkMonJsy3TjS8R2uYhW'])

        self.assertTrue(tx.has_address('RCUUd6TUaZ78txRzkMonJsy3TjS8R2uYhW'))
        self.assertTrue(tx.has_address('RCLHsywGcuvoiG3s67J3C3MgwnkGUhAWQV'))
        self.assertFalse(tx.has_address('t1VHL1RP9LS7otTAqQJqFncJvfMUkwHriZr'))

        self.assertEqual(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob)
        self.assertEqual(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEqual(transaction.deserialize(blob), expected)
示例#6
0
 def test_txid_p2sh_to_p2wpkh(self):
     tx = transaction.Transaction('010000000001018689476c4604a65b76f4bc416bd3f3337ea59748ac81fa3b3e5082ba98d4e1170100000023220020ae40340707f9726c0f453c3d47c96e7f3b7b4b85608eb3668b69bbef9c7ab374fdffffff0218b2cc1d0000000017a914f2fdd81e606ff2ab804d7bb46bf8838a711c277b870065cd1d0000000016001496ad8959c1f0382984ecc4da61c118b4c8751e5104004730440220387b9e7d402fbcada9ba55a27a8d0563eafa9904ebd2f8f7e3d86e4b45bc0ec202205f37fa0e2bf8cbd384f804562651d7c6f69adce5db4c1a5b9103250a47f73e6b01473044022074903f4dd4fd6b32289be909eb5109924740daa55e79be6dbd728687683f9afa02205d934d981ca12cbec450611ca81dc4127f8da5e07dd63d41049380502de3f15401475221025c3810b37147105106cef970f9b91d3735819dee4882d515c1187dbd0b8f0c792103e007c492323084f1c103beff255836408af89bb9ae7f2fcf60502c28ff4b0c9152aeca010000')
     self.assertEqual('6f294c84cbd0241650931b4c1be3dfb2f175d682c7a9538b30b173e1083deed3', tx.txid())
示例#7
0
 def test_txid_p2wpkh_to_p2sh(self):
     tx = transaction.Transaction('010000000001013c3dbf620453be41a50f69290d69cd9a5b65683acbb0a2643a2a9e4900e129ed0000000000fdffffff02002f68590000000017a914c7c4dcd0ddf70f15c6df13b4a4d56e9f13c49b2787a0429cd000000000160014e514e3ecf89731e7853e4f3a20983484c569d3910247304402205368cc548209303db5a8f2ebc282bd0f7af0d080ce0f7637758587f94d3971fb0220098cec5752554758bc5fa4de332b980d5e0054a807541581dc5e4de3ed29647501210233717cd73d95acfdf6bd72c4fb5df27cd6bd69ce947daa3f4a442183a97877efc8010000')
     self.assertEqual('390b958bffb024e508c17ab0caf6e311e5f41170a681dce758d135af873f82f9', tx.txid())
示例#8
0
 def test_txid_coinbase_to_p2pkh(self):
     tx = transaction.Transaction('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff25033ca0030400001256124d696e656420627920425443204775696c640800000d41000007daffffffff01c00d1298000000001976a91427a1f12771de5cc3b73941664b2537c15316be4388ac00000000')
     self.assertEqual('4328f9311c6defd9ae1bd7f4516b62acf64b361eb39dfcf09d9925c5fd5c61e8', tx.txid())
示例#9
0
 def test_txid_segwit_coinbase_to_p2pk(self):
     tx = transaction.Transaction('020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cd010101ffffffff0240be402500000000232103f4e686cdfc96f375e7c338c40c9b85f4011bb843a3e62e46a1de424ef87e9385ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000')
     self.assertEqual('fb5a57c24e640a6d8d831eb6e41505f3d54363c507da3733b098d820e3803301', tx.txid())
示例#10
0
    def test_tx_unsigned(self):
        self.maxDiff = None
        expected = {
            'inputs': [{
                'address':
                'fHAQLnNMUE9ULRvtwnxCARtDySmHNgqEev',
                'is_coinbase':
                False,
                'num_sig':
                1,
                'prevout_hash':
                '3140eb24b43386f35ba69e3875eb6c93130ac66201d01c58f598defc949a5c2a',
                'prevout_n':
                0,
                'pubkeys': [
                    '02e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6'
                ],
                'scriptSig':
                '01ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000',
                'sequence':
                4294967295,
                'signatures': [None],
                'x_pubkeys': [
                    'ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000'
                ]
            }],
            'lockTime':
            0,
            'outputs': [{
                'address': 'fHJb5ttZRsKoX8K2c3TwHGVaVPT9NE2f5u',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914230ac37834073a42146f11ef8414ae929feaafc388ac',
                'type': TYPE_ADDRESS,
                'value': 1000000
            }],
            'version':
            1
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEquals(tx.deserialize(), expected)
        self.assertEquals(tx.deserialize(), None)

        self.assertEquals(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False,
            'final': True
        })
        self.assertEquals(tx.get_outputs(),
                          [('fHJb5ttZRsKoX8K2c3TwHGVaVPT9NE2f5u', 1000000)])
        self.assertEquals(tx.get_output_addresses(),
                          ['fHJb5ttZRsKoX8K2c3TwHGVaVPT9NE2f5u'])

        self.assertTrue(tx.has_address('fHJb5ttZRsKoX8K2c3TwHGVaVPT9NE2f5u'))
        self.assertTrue(tx.has_address('fHAQLnNMUE9ULRvtwnxCARtDySmHNgqEev'))
        self.assertFalse(tx.has_address('fRX2YQHNpFMSyzNAnjfQii4kCcmHhwFdQq'))

        self.assertEquals(
            tx.inputs_to_sign(),
            set(x_pubkey for i in expected['inputs']
                for x_pubkey in i['x_pubkeys']))
        self.assertEquals(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob)
        self.assertEquals(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEquals(transaction.deserialize(blob), expected)
示例#11
0
 def test_txid_coinbase_to_p2pk(self):
     tx = transaction.Transaction('01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4103400d0302ef02062f503253482f522cfabe6d6dd90d39663d10f8fd25ec88338295d4c6ce1c90d4aeb368d8bdbadcc1da3b635801000000000000000474073e03ffffffff013c25cf2d01000000434104b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e6537a576782eba668a7ef8bd3b3cfb1edb7117ab65129b8a2e681f3c1e0908ef7bac00000000')
     self.assertEqual('dbaf14e1c476e76ea05a8b71921a46d6b06f0a950f17c5f9f1a03b8fae467f10', tx.txid())
示例#12
0
 def test_txid_p2sh_to_p2sh(self):
     tx = transaction.Transaction('01000000018695eef2250b3a3b6ef45fe065e601610e69dd7a56de742092d40e6276e6c9ec00000000fdfd000047304402203199bf8e49f7203e8bcbfd754aa356c6ba61643a3490f8aef3888e0aaa7c048c02201e7180bfd670f4404e513359b4020fbc85d6625e3e265e0c357e8611f11b83e401483045022100e60f897db114679f9a310a032a22e9a7c2b8080affe2036c480ff87bf6f45ada02202dbd27af38dd97d418e24d89c3bb7a97e359dd927c1094d8c9e5cac57df704fb014c69522103adc563b9f5e506f485978f4e913c10da208eac6d96d49df4beae469e81a4dd982102c52bc9643a021464a31a3bfa99cfa46afaa4b3acda31e025da204b4ee44cc07a2103a1c8edcc3310b3d7937e9e4179e7bd9cdf31c276f985f4eb356f21b874225eb153aeffffffff02b8ce05000000000017a9145c9c158430b7b79c3ad7ef9bdf981601eda2412d87b82400000000000017a9146bf3ff89019ecc5971a39cdd4f1cabd3b647ad5d8700000000')
     self.assertEqual('2caab5a11fa1ec0f5bb014b8858d00fecf2c001e15d22ad04379ad7b36fef305', tx.txid())
示例#13
0
 def test_txid_p2sh_to_p2pkh(self):
     tx = transaction.Transaction('0100000001b98d550fa331da21038952d6931ffd3607c440ab2985b75477181b577de118b10b000000fdfd0000483045022100a26ea637a6d39aa27ea7a0065e9691d477e23ad5970b5937a9b06754140cf27102201b00ed050b5c468ee66f9ef1ff41dfb3bd64451469efaab1d4b56fbf92f9df48014730440220080421482a37cc9a98a8dc3bf9d6b828092ad1a1357e3be34d9c5bbdca59bb5f02206fa88a389c4bf31fa062977606801f3ea87e86636da2625776c8c228bcd59f8a014c69522102420e820f71d17989ed73c0ff2ec1c1926cf989ad6909610614ee90cf7db3ef8721036eae8acbae031fdcaf74a824f3894bf54881b42911bd3ad056ea59a33ffb3d312103752669b75eb4dc0cca209af77a59d2c761cbb47acc4cf4b316ded35080d92e8253aeffffffff0101ac3a00000000001976a914a6b6bcc85975bf6a01a0eabb2ac97d5a418223ad88ac00000000')
     self.assertEqual('0ea982e8e601863e604ef6d9acf9317ae59d3eac9cafee6dd946abadafd35af8', tx.txid())
示例#14
0
        easy_typeing2 = [objects['vout']]
        easy_typeing = [objects['txid']]
        list_of_ids.extend(easy_typeing)
        list_of_vouts.extend(easy_typeing2)
        amount = amount + objects['amount']

amount = round(amount, 10)

#key = rpclib.importprivkey(rpc_connect, privkey)

res = rpclib.createrawtransaction(rpc_connect, list_of_ids, list_of_vouts,
                                  address, amount)

final_res = rpclib.signrawtx(rpc_connect, res)

tx = transaction.Transaction(res)

test1 = tx.sign(privkey)

print(final_res)
print(tx)

final_res = final_res['hex']

params = {'rawtx': final_res}

url = "http://seed.juicydev.coingateways.com:24711/insight-api-komodo/tx/send"

try:
    res = requests.post(url, data=params)
except Exception as e:
示例#15
0
 def test_txid_p2sh_to_p2pkh(self):
     tx = transaction.Transaction('01000000000101f9823f87af35d158e7dc81a67011f4e511e3f6cab07ac108e524b0ff8b950b39000000002322002041f0237866eb72e4a75cd6faf5ccd738703193907d883aa7b3a8169c636706a9fdffffff020065cd1d000000001976a9148150cd6cf729e7e262699875fec1f760b0aab3cc88acc46f9a3b0000000017a91433ccd0f95a7b9d8eef68be40bb59c64d6e14d87287040047304402205ca97126a5956c2deaa956a2006d79a348775d727074a04b71d9c18eb5e5525402207b9353497af15881100a2786adab56c8930c02d46cc1a8b55496c06e22d3459b01483045022100b4fa898057927c2d920ae79bca752dda58202ea8617d3e6ed96cbd5d1c0eb2fc02200824c0e742d1b4d643cec439444f5d8779c18d4f42c2c87cce24044a3babf2df0147522102db78786b3c214826bd27010e3c663b02d67144499611ee3f2461c633eb8f1247210377082028c124098b59a5a1e0ea7fd3ebca72d59c793aecfeedd004304bac15cd52aec9010000')
     self.assertEqual('17e1d498ba82503e3bfa81ac4897a57e33f3d36b41bcf4765ba604466c478986', tx.txid())
示例#16
0
 def test_txid_segwit_coinbase_to_p2pkh(self):
     tx = transaction.Transaction('020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c3010101ffffffff0240be4025000000001976a9141ea896d897483e0eb33dd6423f4a07970d0a0a2788ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000')
     self.assertEqual('ed3d100577477d799107eba97e76770b3efa253c7200e9abfb43da5d2b33513e', tx.txid())
示例#17
0
 def test_txid_p2sh_to_p2sh(self):
     tx = transaction.Transaction('01000000000101b58520acb479ab656a3c03263af0567380aff6b67a8db98543870b695adf2b170000000017160014cfd2b9f7ed9d4d4429ed6946dbb3315f75e85f14fdffffff020065cd1d0000000017a91485f5681bec38f9f07ae9790d7f27c2bb90b5b63c87106ab32c0000000017a914ff402e164dfce874435641ae9ac41fc6fb14c4e18702483045022100b3d1c89c7c92151ed1df78815924569446782776b6a2c170ca5d74c5dd1ad9b102201d7bab1974fd2aa66546dd15c1f1e276d787453cec31b55a2bd97b050abf20140121024a1742ece86df3dbce4717c228cf51e625030cef7f5e6dde33a4fffdd17569eac7010000')
     self.assertEqual('ead0e7abfb24ddbcd6b89d704d7a6091e43804a458baa930adf6f1cb5b6b42f7', tx.txid())
示例#18
0
 def test_txid_p2pk_to_p2pkh(self):
     tx = transaction.Transaction('010000000118231a31d2df84f884ced6af11dc24306319577d4d7c340124a7e2dd9c314077000000004847304402200b6c45891aed48937241907bc3e3868ee4c792819821fcde33311e5a3da4789a02205021b59692b652a01f5f009bd481acac2f647a7d9c076d71d85869763337882e01fdffffff016c95052a010000001976a9149c4891e7791da9e622532c97f43863768264faaf88ac00000000')
     self.assertEqual('90ba90a5b115106d26663fce6c6215b8699c5d4b2672dd30756115f3337dddf9', tx.txid())
示例#19
0
 def test_txid_p2wpkh_to_p2pkh(self):
     tx = transaction.Transaction('0100000000010197e6bf4a70bc118e3a8d9842ed80422e335679dfc29b5ba0f9123f6a5863b8470000000000fdffffff02402bca7f130000001600146f579c953d9e7e7719f2baa20bde22eb5f24119200e87648170000001976a9140cd8fa5fd81c3acf33f93efd179b388de8dd693388ac0247304402204ff33b3ea8fb270f62409bfc257457ca5eb1fec5e4d3a7c11aa487207e131d4d022032726b998e338e5245746716e5cd0b40d32b69d1535c3d841f049d98a5d819b1012102dc3ce3220363aff579eb2c45c973e8b186a829c987c3caea77c61975666e7d1bc8010000')
     self.assertEqual('c721ed35767a3a209b688e68e3bb136a72d2b631fe81c56be8bdbb948c343dbc', tx.txid())
示例#20
0
 def test_txid_p2pk_to_p2sh(self):
     tx = transaction.Transaction('0100000001e4643183d6497823576d17ac2439fb97eba24be8137f312e10fcc16483bb2d070000000048473044022032bbf0394dfe3b004075e3cbb3ea7071b9184547e27f8f73f967c4b3f6a21fa4022073edd5ae8b7b638f25872a7a308bb53a848baa9b9cc70af45fcf3c683d36a55301fdffffff011821814a0000000017a9143c640bc28a346749c09615b50211cb051faff00f8700000000')
     self.assertEqual('172bdf5a690b874385b98d7ab6f6af807356f03a26033c6a65ab79b4ac2085b5', tx.txid())
示例#21
0
 def test_txid_p2wpkh_to_p2wpkh(self):
     tx = transaction.Transaction('010000000001010d350cefa29138de18a2d63a93cffda63721b07a6ecfa80a902f9514104b55ca0000000000fdffffff012a4a824a00000000160014b869999d342a5d42d6dc7af1efc28456da40297a024730440220475bb55814a52ea1036919e4408218c693b8bf93637b9f54c821b5baa3b846e102207276ed7a79493142c11fb01808a4142bbdd525ae7bdccdf8ecb7b8e3c856b4d90121024cdeaca7a53a7e23a1edbe9260794eaa83063534b5f111ee3c67d8b0cb88f0eec8010000')
     self.assertEqual('51087ece75c697cc872d2e643d646b0f3e1f2666fa1820b7bff4343d50dd680e', tx.txid())
示例#22
0
 def test_txid_p2pk_to_p2wpkh(self):
     tx = transaction.Transaction('01000000015e5e2bf15f5793fdfd01e0ccd380033797ed2d4dba9498426ca84904176c26610000000049483045022100c77aff69f7ab4bb148f9bccffc5a87ee893c4f7f7f96c97ba98d2887a0f632b9022046367bdb683d58fa5b2e43cfc8a9c6d57724a27e03583942d8e7b9afbfeea5ab01fdffffff017289824a00000000160014460fc70f208bffa9abf3ae4abbd2f629d9cdcf5900000000')
     self.assertEqual('ca554b1014952f900aa8cf6e7ab02137a6fdcf933ad6a218de3891a2ef0c350d', tx.txid())
示例#23
0
def main():
    # Creating a preferences object
    prefs = preferences.Preferences()

    # Defining arguments
    parser = argparse.ArgumentParser(allow_abbrev=False)
    parser.add_argument(
        'action',
        type=str,
        default='analysis',
        help=
        'Perform analysis, show a statement, generate Makefile rule, or create a new transaction.'
    )
    parser.add_argument(
        '--rule',
        type=str,
        help='Year and month used to create a new Makefile rule (e.g. 2019-dec)'
    )
    parser.add_argument('--start',
                        type=str,
                        default='2016-01-01',
                        help='Start date')
    parser.add_argument('--end',
                        type=str,
                        default=datetime.now().strftime('%Y-%m-%d'),
                        help='End date')
    parser.add_argument('--statement',
                        type=str,
                        help='Path of the statement to use')
    parser.add_argument('--all',
                        action='store_true',
                        default=False,
                        help='Take all statements or not')
    args = parser.parse_args()

    # Casting dates
    date_start = datetime.strptime(args.start, "%Y-%m-%d")
    date_end = datetime.strptime(args.end, "%Y-%m-%d")

    # Action: generate a new rule for Makefile
    if args.action == 'generate':
        date_rule = datetime.strptime(args.rule, "%Y-%b")
        prefs.generate_makefile_rule(date_rule.year, date_rule.month)

    # Action: create a new transaction
    elif args.action == 'create':
        trans = transaction.Transaction()
        trans.create()

    # Action: show a statement
    elif args.action == 'statement':
        # Selection: all statements
        if args.all:
            # Showing dates
            prefs.show_dates(args.start, args.end)
            # Getting all statement paths
            statements = prefs.get_statements()
            # For each statement found, showing account details and transactions
            for statement_file in statements:
                stat = statement.Statement(
                    statement_file,
                    date(date_start.year, date_start.month, date_start.day),
                    date(date_end.year, date_end.month, date_end.day))
                stat.show_account()
                stat.show_transactions()
        # Selection: one statement
        else:
            # Defining statement
            stat = statement.Statement(
                args.statement,
                date(date_start.year, date_start.month, date_start.day),
                date(date_end.year, date_end.month, date_end.day))
            # Showing dates, account details and transactions
            prefs.show_dates(args.start, args.end)
            stat.show_account()
            stat.show_transactions()

    # Action: show an analysis
    elif args.action == 'analysis':
        # Selection: all statements
        if args.all:
            # Showing dates
            prefs.show_dates(args.start, args.end)
            # Getting all statement paths
            statements = prefs.get_statements()
            # For each statement found, showing account details and analysis
            for statement_file in statements:
                stat = statement.Statement(
                    statement_file,
                    date(date_start.year, date_start.month, date_start.day),
                    date(date_end.year, date_end.month, date_end.day))
                analy = analysis.Analysis(
                    statement_file,
                    date(date_start.year, date_start.month, date_start.day),
                    date(date_end.year, date_end.month, date_end.day))
                stat.show_account()
                analy.show_totals()
        # Selection: one statement
        else:
            # Defining statement and analysis
            stat = statement.Statement(
                args.statement,
                date(date_start.year, date_start.month, date_start.day),
                date(date_end.year, date_end.month, date_end.day))
            analy = analysis.Analysis(
                args.statement,
                date(date_start.year, date_start.month, date_start.day),
                date(date_end.year, date_end.month, date_end.day))
            # Showing dates, account details and analysis
            prefs.show_dates(args.start, args.end)
            stat.show_account()
            analy.show_totals()
示例#24
0
 def test_txid_p2pkh_to_p2pkh(self):
     tx = transaction.Transaction('0100000001f9dd7d33f315617530dd72264b5d9c69b815626cce3f66266d1015b1a590ba90000000006a4730440220699bfee3d280a499daf4af5593e8750b54fef0557f3c9f717bfa909493a84f60022057718eec7985b7796bb8630bf6ea2e9bf2892ac21bd6ab8f741a008537139ffe012103b4289890b40590447b57f773b5843bf0400e9cead08be225fac587b3c2a8e973fdffffff01ec24052a010000001976a914ce9ff3d15ed5f3a3d94b583b12796d063879b11588ac00000000')
     self.assertEqual('24737c68f53d4b519939119ed83b2a8d44d716d7f3ca98bcecc0fbb92c2085ce', tx.txid())
 def _run_naive_tests_on_tx(self, raw_tx, txid):
     tx = transaction.Transaction(raw_tx)
     self.assertEqual(txid, tx.txid())
     self.assertEqual(raw_tx, tx.serialize())
     self.assertTrue(tx.estimated_size() >= 0)
示例#26
0
 def test_txid_p2pkh_to_p2sh(self):
     tx = transaction.Transaction('010000000195232c30f6611b9f2f82ec63f5b443b132219c425e1824584411f3d16a7a54bc000000006b4830450221009f39ac457dc8ff316e5cc03161c9eff6212d8694ccb88d801dbb32e85d8ed100022074230bb05e99b85a6a50d2b71e7bf04d80be3f1d014ea038f93943abd79421d101210317be0f7e5478e087453b9b5111bdad586038720f16ac9658fd16217ffd7e5785fdffffff0200e40b540200000017a914d81df3751b9e7dca920678cc19cac8d7ec9010b08718dfd63c2c0000001976a914303c42b63569ff5b390a2016ff44651cd84c7c8988acc7010000')
     self.assertEqual('155e4740fa59f374abb4e133b87247dccc3afc233cb97c2bf2b46bba3094aedc', tx.txid())
示例#27
0
 def test_version_field(self):
     tx = transaction.Transaction(v2_blob)
     self.assertEqual(
         tx.txid(),
         "b97f9180173ab141b61b9f944d841e60feec691d6daab4d4d932b24dd36606fe")
示例#28
0
 def test_txid_p2pkh_to_p2wpkh(self):
     tx = transaction.Transaction('0100000001ce85202cb9fbc0ecbc98caf3d716d7448d2a3bd89e113999514b3df5687c7324000000006b483045022100adab7b6cb1179079c9dfc0021f4db0346730b7c16555fcc4363059dcdd95f653022028bcb816f4fb98615fb8f4b18af3ad3708e2d72f94a6466cc2736055860422cf012102a16a25148dd692462a691796db0a4a5531bcca970a04107bf184a2c9f7fd8b12fdffffff012eb6042a010000001600147d0170de18eecbe84648979d52b666dddee0b47400000000')
     self.assertEqual('ed29e100499e2a3a64a2b0cb3a68655b9acd690d29690fa541be530462bf3d3c', tx.txid())
    def test_tx_unsigned(self):
        expected = {
            'inputs': [{
                'type':
                'p2pkh',
                'address':
                'LNH44gMp6kNHu4Npo5JDNY6FPjewvMKDnz',
                'num_sig':
                1,
                'prevout_hash':
                '3140eb24b43386f35ba69e3875eb6c93130ac66201d01c58f598defc949a5c2a',
                'prevout_n':
                0,
                'pubkeys': [
                    '02e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6'
                ],
                'scriptSig':
                '01ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000',
                'sequence':
                4294967295,
                'signatures': [None],
                'x_pubkeys': [
                    'ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000'
                ]
            }],
            'lockTime':
            0,
            'outputs': [{
                'address': 'LNREont24PYd5kkxTKoxVNhbugLowNb7H8',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914230ac37834073a42146f11ef8414ae929feaafc388ac',
                'type': TYPE_ADDRESS,
                'value': 1000000
            }],
            'version':
            1
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEquals(tx.deserialize(), expected)
        self.assertEquals(tx.deserialize(), None)

        self.assertEquals(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False,
            'final': True
        })
        self.assertEquals(tx.get_outputs(),
                          [('LNREont24PYd5kkxTKoxVNhbugLowNb7H8', 1000000)])
        self.assertEquals(tx.get_output_addresses(),
                          ['LNREont24PYd5kkxTKoxVNhbugLowNb7H8'])

        self.assertTrue(tx.has_address('LNREont24PYd5kkxTKoxVNhbugLowNb7H8'))
        self.assertTrue(tx.has_address('LNH44gMp6kNHu4Npo5JDNY6FPjewvMKDnz'))
        self.assertFalse(tx.has_address('LWdgGJGqSmaGYcp6e21RvpGmcuexJorNEH'))

        self.assertEquals(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob)
        self.assertEquals(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEquals(transaction.deserialize(blob), expected)
示例#30
0
    def test_tx_unsigned(self):
        expected = {
            'inputs': [{
                'address':
                'bFnNVhPUNRWiA6Y2hbd1KBAMgQBrFsc5u3',
                'is_coinbase':
                False,
                'num_sig':
                1,
                'prevout_hash':
                '3140eb24b43386f35ba69e3875eb6c93130ac66201d01c58f598defc949a5c2a',
                'prevout_n':
                0,
                'pubkeys': [
                    '02e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6'
                ],
                'scriptSig':
                '01ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000',
                'sequence':
                4294967295,
                'signatures': [None],
                'x_pubkeys': [
                    'ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000'
                ]
            }],
            'lockTime':
            0,
            'outputs': [{
                'address': 'bFvZEougL4h3LnvAMr8kS1miCLsiJCpLpB',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914230ac37834073a42146f11ef8414ae929feaafc388ac',
                'type': TYPE_ADDRESS,
                'value': 1000000
            }],
            'version':
            1
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEquals(tx.deserialize(), expected)
        self.assertEquals(tx.deserialize(), None)

        self.assertEquals(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False
        })
        self.assertEquals(tx.get_outputs(),
                          [('bFvZEougL4h3LnvAMr8kS1miCLsiJCpLpB', 1000000)])
        self.assertEquals(tx.get_output_addresses(),
                          ['bFvZEougL4h3LnvAMr8kS1miCLsiJCpLpB'])

        self.assertTrue(tx.has_address('bFvZEougL4h3LnvAMr8kS1miCLsiJCpLpB'))
        self.assertTrue(tx.has_address('bFnNVhPUNRWiA6Y2hbd1KBAMgQBrFsc5u3'))
        self.assertFalse(tx.has_address('bScaWvgzAzFXzAcVgDDARfo9RFhdrm4pVc'))

        self.assertEquals(
            tx.inputs_to_sign(),
            set(x_pubkey for i in expected['inputs']
                for x_pubkey in i['x_pubkeys']))
        self.assertEquals(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob)
        self.assertEquals(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEquals(transaction.deserialize(blob), expected)