def test_address_from_base58addr(self): #TESTNET addr1 = BitcoinAddress.from_base58addr( "n4MsBRWD7VxKGsqYRSLaFZC6hQrsrKLaZo") self.assertEquals(hexstr(addr1.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr1.get_addr_version(), AddressVersion(PUBKEY_ADDRESS_TEST)) #TESTNET script address addr2 = BitcoinAddress.from_base58addr( "2NG68seqhTqLnniguW6efUDKyCHm4LYEFRa") self.assertEquals(hexstr(addr2.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr2.get_addr_version(), AddressVersion(SCRIPT_ADDRESS_TEST)) #MAIN addr2 = BitcoinAddress.from_base58addr( "1PqutNREJUX4VmMvhsNCRdymqRGAzifdsx") self.assertEquals(hexstr(addr2.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr2.get_addr_version(), AddressVersion(PUBKEY_ADDRESS_MAIN)) #MAIN Script address addr2 = BitcoinAddress.from_base58addr( "3QXvouufrNqSaw4Mpy2nrGLhywYtXx6wsi") self.assertEquals(hexstr(addr2.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr2.get_addr_version(), AddressVersion(SCRIPT_ADDRESS_MAIN))
def test_decrypt_private_key(self): master_key = MasterKey(crypted_key=decodehexstr("be4afa6923ad06790b0f8c3345131499cf2b149ca422bd11a7e67a76347c51a456a2d626f75da1ff809632fca7165d71"), salt=decodehexstr("8cdcbd8a494b0eeb"), derivation_method=MasterKey.DERIVMETHOD_EVP_SHA512, derive_iterations=45193, other_derivation_parameters="") #Decrypt the master crypted_key using the passphrase plain_masterkey = decrypt_masterkey(master_key, "hello") print "plain_masterkey:", hexstr(plain_masterkey) assert hexstr(plain_masterkey) == "56722b42c4b9f8689fe9b38745fe75af92d0a50d6fd94b34de6b6d5e287bbed3" #Decrypt a crypted_secret public_key = decodehexstr("046a82d73af2cc093e3df7ae0185f045946970bcd5f0ef26f82d4f9a24e0d50f977c51e311e079e3183cfadd67d9b3f089fe7ba94a196c365fbd9e03b8c423787d") crypted_secret = decodehexstr("ff914ab69f58af92ac56de85051441e729cc51e11608d563e2a266ce3b8c59f573ed6a1828ff98fadb345890b6ed2626") crypter2 = Crypter() crypter2.set_key(plain_masterkey, doublesha256(public_key)) secret = crypter2.decrypt(crypted_secret) print "secret:", hexstr(secret) assert hexstr(secret) == "1c7552a9b755d29d081efd71f7811cc8ab2c9f2c634f489e6b45700711c8a304" #Test the secret k = KEY() k.set_secret(secret) assert k.get_pubkey() == public_key sig1 = k.sign("sign something") k2 = KEY() k2.set_pubkey(public_key) assert k2.verify("sign something", sig1) == 1
def test_serialize_inv_message(self): inv_message = InvMessage([Invitem(INV_TX, Uint256.from_hexstr("f6eea3dd4f6536350344a535e37a4178170bba18b871a424d696e196d4d3b555")), Invitem(INV_BLOCK, Uint256.from_hexstr("0000000040a24e14497879bdd67db948cf30edc5d0a5833e8cb2736582157b49"))]) serialized_msg = MessageSerializer(MAIN).serialize(inv_message) self.assertEquals(hexstr(serialized_msg), "f9beb4d9696e76000000000000000000490000008be920f5020100000055b5d3d496e196d624a471b818ba0b1778417ae335a544033536654fdda3eef602000000497b15826573b28c3e83a5d0c5ed30cf48b97dd6bd797849144ea24000000000") serialized_msg = MessageSerializer(TESTNET).serialize(inv_message) self.assertEquals(hexstr(serialized_msg), "fabfb5da696e76000000000000000000490000008be920f5020100000055b5d3d496e196d624a471b818ba0b1778417ae335a544033536654fdda3eef602000000497b15826573b28c3e83a5d0c5ed30cf48b97dd6bd797849144ea24000000000")
def test_wallet_database_encrypted(self): wallet = BSDDBWalletDatabase(self.dbenv, "wallet_encrypted_hello.dat") wallet.open() print wallet.get_master_keys() for public_key, crypted_secret in wallet.crypted_keys.iteritems(): print "public_key", hexstr(public_key) print "crypted_secret", hexstr(crypted_secret)
def test_invitem_serialize(self): blockitem = Invitem(INV_BLOCK, Uint256.from_hexstr("00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008")) txitem = Invitem(INV_TX, Uint256.from_hexstr("84eb3cf3a391a0a0b70e05a3a54d8385f7dcb3809aaf274d392622205b27f288")) self.assertEquals(hexstr(InvitemSerializer().serialize(blockitem)), "0200000008b067b31dc139ee8e7a76a4f2cfcca477c4c06e1ef89f4ae308951907000000") self.assertEquals(hexstr(InvitemSerializer().serialize(txitem)), "0100000088f2275b202226394d27af9a80b3dcf785834da5a3050eb7a0a091a3f33ceb84")
def decode_base58check(data, preserve_leading_zeros=True): raw = preserve_leading_zeros and (count_leading_base58_zeros(data) * "\0") or "" raw += base256encode(base58decode(data)) if len(raw) < 4: raise Exception("base58check: format error") content, check = raw[:-4], raw[-4:] digest2 = doublesha256(content) if (digest2[:4] != check): raise Exception("base58check: checksum error %s != %s" % (hexstr(digest2[:4]), hexstr(check))) return (content)
def test_serialize_chunk_header(self): chunkheader = ChunkHeader("name", 23324432, 87312313, 478498) serialized = ChunkHeaderSerializer.serialize(chunkheader) self.assertEquals(hexstr(serialized), "6e616d650163e710053447b900074d22")
def test_timenetaddr_serialize(self): self.assertEquals( hexstr(TimenetaddrSerializer().serialize( Timenetaddr(timestamp=1355658677, netaddr=Netaddr(SERVICES_NONE, "178.3.5.12", 2007)))), "b5b5cd50000000000000000000000000000000000000ffffb203050c07d7")
def test_txin_serialize(self): txin = TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("17c5cb687ba453ab65e12cdc0d8721c70ab4678665eb200c50cb9f1e3207090e"), index=0), script=Script([Instruction(72, decodehexstr("3045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c01")), Instruction(65, decodehexstr("04b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3e"))]), sequence=TxIn.NSEQUENCE_FINAL) self.assertEquals(hexstr(TxinSerializer().serialize(txin)), "0e0907321e9fcb500c20eb658667b40ac721870ddc2ce165ab53a47b68cbc517000000008b483045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c014104b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3effffffff")
def on_show_hide_private_keys(self, event): if self.are_shown_private_keys: for public_key, is_crypted, address, description in self.account.wallet.iterkeys( ): self.wallet_view.set_key_private_key(public_key, "***") self.are_shown_private_keys = not self.are_shown_private_keys else: crypted = False for public_key, is_crypted, address, description in self.account.wallet.iterkeys( ): crypted = crypted or is_crypted try: if crypted: passphrase = yield self.wallet_view.enter_passphrase_view.get_passphrase( ) self.account.wallet.unlock([passphrase]) for public_key, is_crypted, address, description in self.account.wallet.iterkeys( ): private_key = self.account.wallet.get_private_key_secret( public_key) self.wallet_view.set_key_private_key( public_key, hexstr(private_key)) self.are_shown_private_keys = not self.are_shown_private_keys except KeyDecryptException: self.messages_view.error( "Unable to decrypt the private keys: please verify the passphrase and try again." ) except ActionCancelledException: pass except Exception: traceback.print_exc() finally: self.account.wallet.lock()
def test_serialize_getblocks_message(self): getblocks_msg = GetblocksMessage(BlockLocator(32200, [Uint256.from_hexstr("000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")]), Uint256.zero()) serialized_msg = GetblocksMessageSerializer().serialize(getblocks_msg) self.assertEquals(hexstr(serialized_msg), "c87d0000016fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000000000000000000000000000000000000000000000000000000000000000000")
def test_blockheader_serialize(self): h = BlockHeader(version=1, hash_prev=Uint256.from_hexstr("1e4baab89f3a3251818c31bc87f6a33b4a5a88ef76673e2cc77ab2127b7afded"), #hash_prev hash_merkle=Uint256.from_hexstr("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"), #merkle time=1237006505, bits=486605799, nonce=2083236893) self.assertEquals(hexstr(BlockheaderSerializer().serialize(h)), "01000000edfd7a7b12b27ac72c3e6776ef885a4a3ba3f687bc318c8151323a9fb8aa4b1e3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4aa938bb49e703011d1dac2b7c")
def test_varstr_script_serialize(self): script = Script([Instruction(OP_DUP), Instruction(OP_HASH160), Instruction(20, decodehexstr("fadad27c40adbe230f5e3c04d44a292975084831")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG)]) self.assertEquals(hexstr(VarstrScriptSerializer().serialize(script)), "1976a914fadad27c40adbe230f5e3c04d44a29297508483188ac")
def test_serialize_pubkey_outpoint(self): pubkey_outpoint = PubKeyOutpoint(PublicKey.from_hexstr("022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f"), is_pubkey_hash=True) serialized = PubKeyOutpointSerializer.serialize(pubkey_outpoint) self.assertEquals(hexstr(serialized), "022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f")
def test_address_from_base58addr(self): #TESTNET addr1 = BitcoinAddress.from_base58addr("n4MsBRWD7VxKGsqYRSLaFZC6hQrsrKLaZo") self.assertEquals(hexstr(addr1.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr1.get_addr_version(), AddressVersion(PUBKEY_ADDRESS_TEST)) #TESTNET script address addr2 = BitcoinAddress.from_base58addr("2NG68seqhTqLnniguW6efUDKyCHm4LYEFRa") self.assertEquals(hexstr(addr2.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr2.get_addr_version(), AddressVersion(SCRIPT_ADDRESS_TEST)) #MAIN addr2 = BitcoinAddress.from_base58addr("1PqutNREJUX4VmMvhsNCRdymqRGAzifdsx") self.assertEquals(hexstr(addr2.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr2.get_addr_version(), AddressVersion(PUBKEY_ADDRESS_MAIN)) #MAIN Script address addr2 = BitcoinAddress.from_base58addr("3QXvouufrNqSaw4Mpy2nrGLhywYtXx6wsi") self.assertEquals(hexstr(addr2.get_hash160()), 'fa92e151722c0ebca07059a505252218b4c50e7a') self.assertEquals(addr2.get_addr_version(), AddressVersion(SCRIPT_ADDRESS_MAIN))
def test_blockheader_template(self): """ Change nonce and extra_nonce in a blockheader_template """ template = BlockheaderTemplate( Uint256.from_hexstr( "0009d8ab497a46a0d6a2b9b302993bd26613b145695d986be50e0b6e68c5b524" ), 1, # version 2 blocks see BIP-34 [ TxOut( 5000000000, Script([ Instruction( OP_PUSHDATA, decodehexstr( "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f" )), Instruction(OP_CHECKSIG) ])) ], [], time=1356447036, bits=524287999, nonce=0, extra_nonce=0, coinbase_flags=["/P2SH/"]) self.assertEquals( hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900ad7af2ede803ff129e66775d56153a7a649721e524eecad69a437ecdc01e29343cbdd950ffff3f1f00000000" ) template.set_nonce(8) self.assertEquals( hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900ad7af2ede803ff129e66775d56153a7a649721e524eecad69a437ecdc01e29343cbdd950ffff3f1f08000000" ) template.set_nonce(492498294) self.assertEquals( hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900ad7af2ede803ff129e66775d56153a7a649721e524eecad69a437ecdc01e29343cbdd950ffff3f1f76ed5a1d" ) template.set_extra_nonce(2) template.set_nonce(0) self.assertEquals( hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900e1cc38b530e20307a310a57a6e2e22985ce2e292bfc73b28a723dd77f8e8f0ca3cbdd950ffff3f1f00000000" )
def test_outpoint_serialize(self): self.assertEquals( hexstr(OutpointSerializer().serialize( Outpoint(hash=Uint256.from_hexstr( "17c5cb687ba453ab65e12cdc0d8721c70ab4678665eb200c50cb9f1e3207090e" ), index=0))), "0e0907321e9fcb500c20eb658667b40ac721870ddc2ce165ab53a47b68cbc51700000000" )
def test_txout_serialize(self): txout = TxOut(value=24990000000, script=Script([Instruction(OP_DUP), Instruction(OP_HASH160), Instruction(20, decodehexstr("4d8b17fbce571614be89df4bd872de892a479844")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG)])) self.assertEquals(hexstr(TxoutSerializer().serialize(txout)), "802385d1050000001976a9144d8b17fbce571614be89df4bd872de892a47984488ac")
def test_blocklocator_serialize(self): loc = BlockLocator(version=1, blockhashlist=[Uint256.from_hexstr("0000000002ae3d2db6477a04ad37bdcbc111c06050effb0ceab2376016e129a3"), Uint256.from_hexstr("00000000074150f20eb97a8aec12a8dc7f93ddebb3b2df0d8022a60213b4bd70"), Uint256.from_hexstr("0000000025345b019b2ee713a995dfc3250d88232e2253f95ec42c4bb2528039"), Uint256.from_hexstr("000000007dbb8690940f40293832c46b90a20bfef681b52979115fb1049a7366"), Uint256.from_hexstr("00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008")]) self.assertEquals(hexstr(BlockLocatorSerializer().serialize(loc)), "0100000005a329e1166037b2ea0cfbef5060c011c1cbbd37ad047a47b62d3dae020000000070bdb41302a622800ddfb2b3ebdd937fdca812ec8a7ab90ef250410700000000398052b24b2cc45ef953222e23880d25c3df95a913e72e9b015b34250000000066739a04b15f117929b581f6fe0ba2906bc4323829400f949086bb7d0000000008b067b31dc139ee8e7a76a4f2cfcca477c4c06e1ef89f4ae308951907000000")
def test_shamir_share_private_key(self): ssl_add_system_seeds() k = KEY() k.generate() pkey_bignum = k.get_privkey_bignum() pubkey = k.get_pubkey() numshares = 600 threshold = 100 sharenum_bytes = 2 print "private_key_bignum:", pkey_bignum print "public_key:", hexstr(pubkey) print "address:", BitcoinAddress.from_publickey(pubkey, MAIN) field = ZpField() V = field.value_type ZpPkey = V(pkey_bignum) sharer = SecretSharer(field, ZpRandom(field)) shares = sharer.share(ZpPkey, threshold, [V(i+1) for i in range(numshares)]) # print shares print "Shamir Shares: (%d/%d):" % (threshold, numshares) shares_hex = [hexstr(base256encode(int(pt), sharenum_bytes) + base256encode(int(value), 32)) for pt, value in shares] for share in shares_hex: print share # Try to reconstruct the private key using the hex encoded shares. recombiner = SecretRecombiner(field) for i in range(10): random4_hex = random.sample(shares_hex, threshold) random4_decoded = [decodehexstr(h) for h in random4_hex] random4 = [(V(base256decode(data[:sharenum_bytes])), V(base256decode(data[sharenum_bytes:]))) for data in random4_decoded] recombined_pkey_bignum = recombiner.recombine(random4, V(0)) assert recombined_pkey_bignum == ZpPkey k2 = KEY() k2.set_privkey_bignum(int(recombined_pkey_bignum)) assert k2.get_pubkey() == pubkey print i # With threshold-1 shares this fails for i in range(10): random4_hex = random.sample(shares_hex, threshold-1) random4_decoded = [decodehexstr(h) for h in random4_hex] random4 = [(V(base256decode(data[:sharenum_bytes])), V(base256decode(data[sharenum_bytes:]))) for data in random4_decoded] recombined_pkey_bignum = recombiner.recombine(random4, V(0)) assert recombined_pkey_bignum != ZpPkey
def test_varint_serialize(self): self.assertEquals(hexstr(VarintSerializer().serialize(5)), "05") self.assertEquals(hexstr(VarintSerializer().serialize(252)), "fc") self.assertEquals(hexstr(VarintSerializer().serialize(253)), "fdfd00") self.assertEquals(hexstr(VarintSerializer().serialize(65535)), "fdffff") self.assertEquals(hexstr(VarintSerializer().serialize(65536)), "fe00000100") self.assertEquals(hexstr(VarintSerializer().serialize(4294967295)), "feffffffff") self.assertEquals(hexstr(VarintSerializer().serialize(4294967296)), "ff0000000001000000")
def test_invitem_serialize(self): blockitem = Invitem( INV_BLOCK, Uint256.from_hexstr( "00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008" )) txitem = Invitem( INV_TX, Uint256.from_hexstr( "84eb3cf3a391a0a0b70e05a3a54d8385f7dcb3809aaf274d392622205b27f288" )) self.assertEquals( hexstr(InvitemSerializer().serialize(blockitem)), "0200000008b067b31dc139ee8e7a76a4f2cfcca477c4c06e1ef89f4ae308951907000000" ) self.assertEquals( hexstr(InvitemSerializer().serialize(txitem)), "0100000088f2275b202226394d27af9a80b3dcf785834da5a3050eb7a0a091a3f33ceb84" )
def __pushdata__str__(self): datastr = hexstr(self.data) if OP_PUSHDATA1_75_MIN <= self.opcode <= OP_PUSHDATA1_75_MAX: return ("OP_PUSHDATA(%d):%s" % (self.opcode, datastr)) if self.opcode == OP_PUSHDATA1: return ("OP_PUSHDATA1:%s" % (datastr)) if self.opcode == OP_PUSHDATA2: return ("OP_PUSHDATA2:%s" % (datastr)) if self.opcode == OP_PUSHDATA4: return ("OP_PUSHDATA4:%s" % (datastr))
def __pushdata__str__(self): datastr = hexstr(self.data) if OP_PUSHDATA1_75_MIN <= self.opcode <= OP_PUSHDATA1_75_MAX: return "OP_PUSHDATA(%d):%s" % (self.opcode, datastr) if self.opcode == OP_PUSHDATA1: return "OP_PUSHDATA1:%s" % (datastr) if self.opcode == OP_PUSHDATA2: return "OP_PUSHDATA2:%s" % (datastr) if self.opcode == OP_PUSHDATA4: return "OP_PUSHDATA4:%s" % (datastr)
def decode_base58check(data, preserve_leading_zeros=True): raw = preserve_leading_zeros and (count_leading_base58_zeros(data) * "\0") or "" raw += base256encode(base58decode(data)) if len(raw) < 4: raise Exception("base58check: format error") content, check = raw[:-4], raw[-4:] digest2 = doublesha256(content) if digest2[:4] != check: raise Exception("base58check: checksum error %s != %s" % (hexstr(digest2[:4]), hexstr(check))) return content
def test_serialize_multisig_outpoint(self): outpoint = MultiSigOutpoint(2, 3, [PublicKey.from_hexstr("022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f"), PublicKey.from_hexstr("022dc45c9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f"), PublicKey.from_hexstr("029ce0129ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f")]) serialized = MultiSigOutpointSerializer.serialize(outpoint) self.assertEquals(hexstr(serialized), "0000000200000003022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f022dc45c9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f029ce0129ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f")
def test_blockheader_template(self): """ Change nonce and extra_nonce in a blockheader_template """ template = BlockheaderTemplate(Uint256.from_hexstr("0009d8ab497a46a0d6a2b9b302993bd26613b145695d986be50e0b6e68c5b524"), 1, # version 2 blocks see BIP-34 [TxOut(5000000000, Script([Instruction(OP_PUSHDATA, decodehexstr("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f")),Instruction(OP_CHECKSIG)]))], [], time=1356447036, bits=524287999, nonce=0, extra_nonce=0, coinbase_flags=["/P2SH/"]) self.assertEquals(hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900ad7af2ede803ff129e66775d56153a7a649721e524eecad69a437ecdc01e29343cbdd950ffff3f1f00000000") template.set_nonce(8) self.assertEquals(hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900ad7af2ede803ff129e66775d56153a7a649721e524eecad69a437ecdc01e29343cbdd950ffff3f1f08000000") template.set_nonce(492498294) self.assertEquals(hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900ad7af2ede803ff129e66775d56153a7a649721e524eecad69a437ecdc01e29343cbdd950ffff3f1f76ed5a1d") template.set_extra_nonce(2) template.set_nonce(0) self.assertEquals(hexstr(template.get_serialized()), "0200000024b5c5686e0b0ee56b985d6945b11366d23b9902b3b9a2d6a0467a49abd80900e1cc38b530e20307a310a57a6e2e22985ce2e292bfc73b28a723dd77f8e8f0ca3cbdd950ffff3f1f00000000")
def add_key(self, id, public_key, private_key, address, description): itemid = self.keylist_idpool.get_id() self.keys[itemid] = (public_key, private_key, address, description) self.key_itemids[id] = itemid index = self.keylist.InsertStringItem(self.keylist.GetItemCount(), hexstr(public_key)) self.keylist.SetItemData(index, itemid) self.keylist.SetStringItem(index, 1, private_key) self.keylist.SetStringItem(index, 2, address) self.keylist.SetStringItem(index, 3, description)
def test_serialize_version_message(self): version_message = VersionMessage(version=32200, services=SERVICES_NODE_NETWORK, timestamp=1356475129, addr_me=Netaddr(SERVICES_NODE_NETWORK, "213.25.6.223", 2332), addr_you=Netaddr(SERVICES_NONE, "68.25.6.32", 8973), nonce=16928363815861062023, sub_version_num="/coinpy:0.1/", start_height=189) serialized_msg = VersionMessageSerializer().serialize(version_message) self.assertEquals(hexstr(serialized_msg), "c87d00000100000000000000f92ada5000000000010000000000000000000000000000000000ffffd51906df091c000000000000000000000000000000000000ffff44190620230d8789f94033a1edea0c2f636f696e70793a302e312fbd000000")
def test_varstr_script_serialize(self): script = Script([ Instruction(OP_DUP), Instruction(OP_HASH160), Instruction( 20, decodehexstr("fadad27c40adbe230f5e3c04d44a292975084831")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG) ]) self.assertEquals( hexstr(VarstrScriptSerializer().serialize(script)), "1976a914fadad27c40adbe230f5e3c04d44a29297508483188ac")
def test_serialize_pubkey_outpoint(self): pubkey_outpoint = PubKeyOutpoint(PublicKey.from_hexstr( "022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f" ), is_pubkey_hash=True) serialized = PubKeyOutpointSerializer.serialize(pubkey_outpoint) self.assertEquals( hexstr(serialized), "022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f" )
def test_serialize_outpoint_index(self): outpoint = OutpointIndex(12, Uint256.from_hexstr("2af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f"), 3, OutpointIndex.PUBKEY_HASH, 4, PubKeyOutpoint(PublicKey.from_hexstr("022af4cc9ec3358354345c91691031a1fcdbe9a9064197521814e8a20fe018eb5f"), is_pubkey_hash=True)) serialized = OutpointIndexSerializer.serialize(outpoint) self.assertEquals(hexstr(serialized), "0000000c2af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f030200000004022af4cc9ec3358354345c91691031a1fcdbe9a9064197521814e8a20fe018eb5f")
def test_serialize_tx_message(self): # TX 1 from block 389 on testnet 3 tx_message = TxMessage(Tx(version=1, in_list=[TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("f519f238c54e20bb418bb4513ce75484546d198200a901be55152e12cfa82652"),index=1), script=Script(instructions=[Instruction(73, decodehexstr("3046022100b96e2fd2015bb3fe22c23c712c3ac4a8636d4a78df7d669babd64eaba314c236022100f402d7e3392d1770ce2be0c823eab0122bb83ee0bd65f5de54a1feb53e452eed01")),Instruction(65, decodehexstr("04c4bee5e6dbb5c1651437cb4386c1515c7776c64535077204c6f24f05a37d04a32bc78beb2193b53b104c9954c44b0ce168bc78efd5f1e1c7db9d6c21b3016599"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("d748009c88abacfbd8d0dafb5552f0700a16f9a35ff41583988d9f70618c1971"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("304502210092e96f4185fc1bb74b4d9c258219dc5ffc71afb43e73ec0e78bdd91bafbe386e022019fc5b3d9602005b61f5dc75e7bd4dde1c19a0700c0a7958503528014d39019101")),Instruction(33, decodehexstr("02274eae01d391bbec32d4b60e24d5d24f9cc23ca8da6708cf6c062381bfa71006"))]), sequence=4294967295)], out_list=[TxOut(value=5000000000, script=Script(instructions=[Instruction(OP_DUP),Instruction(OP_HASH160),Instruction(20, decodehexstr("dbf89509176a975e41d04cc0af24cfc8de4394a9")),Instruction(OP_EQUALVERIFY),Instruction(OP_CHECKSIG)]))], locktime=0)) serialized_msg = TxMessageSerializer().serialize(tx_message) self.assertEquals(hexstr(serialized_msg), "01000000025226a8cf122e1555be01a90082196d548454e73c51b48b41bb204ec538f219f5010000008c493046022100b96e2fd2015bb3fe22c23c712c3ac4a8636d4a78df7d669babd64eaba314c236022100f402d7e3392d1770ce2be0c823eab0122bb83ee0bd65f5de54a1feb53e452eed014104c4bee5e6dbb5c1651437cb4386c1515c7776c64535077204c6f24f05a37d04a32bc78beb2193b53b104c9954c44b0ce168bc78efd5f1e1c7db9d6c21b3016599ffffffff71198c61709f8d988315f45fa3f9160a70f05255fbdad0d8fbacab889c0048d7000000006b48304502210092e96f4185fc1bb74b4d9c258219dc5ffc71afb43e73ec0e78bdd91bafbe386e022019fc5b3d9602005b61f5dc75e7bd4dde1c19a0700c0a7958503528014d390191012102274eae01d391bbec32d4b60e24d5d24f9cc23ca8da6708cf6c062381bfa71006ffffffff0100f2052a010000001976a914dbf89509176a975e41d04cc0af24cfc8de4394a988ac00000000")
def test_tx_serialize(self): tx = Tx( version=1, in_list=[ TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr( "17c5cb687ba453ab65e12cdc0d8721c70ab4678665eb200c50cb9f1e3207090e" ), index=0), script=Script([ Instruction( 72, decodehexstr( "3045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c01" )), Instruction( 65, decodehexstr( "04b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3e" )) ]), sequence=TxIn.NSEQUENCE_FINAL) ], out_list=[ TxOut(value=24990000000, script=Script([ Instruction(OP_DUP), Instruction(OP_HASH160), Instruction( 20, decodehexstr( "4d8b17fbce571614be89df4bd872de892a479844")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG) ])), TxOut(value=5000000000, script=Script([ Instruction(OP_DUP), Instruction(OP_HASH160), Instruction( 20, decodehexstr( "fadad27c40adbe230f5e3c04d44a292975084831")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG) ])) ], locktime=0) self.assertEquals( hexstr(TxSerializer().serialize(tx)), "01000000010e0907321e9fcb500c20eb658667b40ac721870ddc2ce165ab53a47b68cbc517000000008b483045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c014104b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3effffffff02802385d1050000001976a9144d8b17fbce571614be89df4bd872de892a47984488ac00f2052a010000001976a914fadad27c40adbe230f5e3c04d44a29297508483188ac00000000" )
def test_serialize_inv_message(self): inv_message = InvMessage([ Invitem( INV_TX, Uint256.from_hexstr( "f6eea3dd4f6536350344a535e37a4178170bba18b871a424d696e196d4d3b555" )), Invitem( INV_BLOCK, Uint256.from_hexstr( "0000000040a24e14497879bdd67db948cf30edc5d0a5833e8cb2736582157b49" )) ]) serialized_msg = MessageSerializer(MAIN).serialize(inv_message) self.assertEquals( hexstr(serialized_msg), "f9beb4d9696e76000000000000000000490000008be920f5020100000055b5d3d496e196d624a471b818ba0b1778417ae335a544033536654fdda3eef602000000497b15826573b28c3e83a5d0c5ed30cf48b97dd6bd797849144ea24000000000" ) serialized_msg = MessageSerializer(TESTNET).serialize(inv_message) self.assertEquals( hexstr(serialized_msg), "fabfb5da696e76000000000000000000490000008be920f5020100000055b5d3d496e196d624a471b818ba0b1778417ae335a544033536654fdda3eef602000000497b15826573b28c3e83a5d0c5ed30cf48b97dd6bd797849144ea24000000000" )
def deserialize(self, data, cursor=0): result, cursor = self.MESSAGE_HEADER.deserialize(data, cursor) magic, command, length = result pos = string.find(command, "\0") if (pos != -1): command = command[0:pos] if (command not in COMMANDS_TYPES): raise FormatErrorException("Error: unknown command : %s" % (command)) if (ENCODERS[COMMANDS_TYPES[command]] == None): raise FormatErrorException("Error: Unsupported command : %s" % (command)) msg_type = COMMANDS_TYPES[command] #if (msg_type != MSG_VERSION and msg_type != MSG_VERACK): checksum = data[cursor:cursor + 4] cursor += 4 startplayload = cursor #raise FormatErrorException("Checksum error in command: %s %s != %s" % (command, hexdump1(checksum,""), hexdump1(verify,""))) if (magic != MAGICS[self.runmode]): raise FormatErrorException( "Error: wrong magic : expected:%s received:%s" % (MAGICS[self.runmode], magic)) if (len(data) - cursor < length): raise MissingDataException("Command incomplete: %s" % (command)) #self.log.debug("Decoding: %s" % (command)) res, cursor = ENCODERS[COMMANDS_TYPES[command]].deserialize( data, cursor) #verify checksum after decoding (required to identify message boundaries) #if (msg_type != MSG_VERSION and msg_type != MSG_VERACK): verify = sha256checksum(data[startplayload:cursor]) if (checksum != verify): #raise FormatErrorException("Checksum error in command: %s %s != %s" % (command, hexdump1(checksum,""), hexdump1(verify,""))) raise FormatErrorException( "Checksum error in command: %s %s != %s" % (command, hexstr(checksum), hexstr(verify))) return (res, cursor)
def test_decrypt_private_key(self): master_key = MasterKey(crypted_key=decodehexstr( "be4afa6923ad06790b0f8c3345131499cf2b149ca422bd11a7e67a76347c51a456a2d626f75da1ff809632fca7165d71" ), salt=decodehexstr("8cdcbd8a494b0eeb"), derivation_method=MasterKey. DERIVMETHOD_EVP_SHA512, derive_iterations=45193, other_derivation_parameters="") #Decrypt the master crypted_key using the passphrase plain_masterkey = decrypt_masterkey(master_key, "hello") print "plain_masterkey:", hexstr(plain_masterkey) assert hexstr( plain_masterkey ) == "56722b42c4b9f8689fe9b38745fe75af92d0a50d6fd94b34de6b6d5e287bbed3" #Decrypt a crypted_secret public_key = decodehexstr( "046a82d73af2cc093e3df7ae0185f045946970bcd5f0ef26f82d4f9a24e0d50f977c51e311e079e3183cfadd67d9b3f089fe7ba94a196c365fbd9e03b8c423787d" ) crypted_secret = decodehexstr( "ff914ab69f58af92ac56de85051441e729cc51e11608d563e2a266ce3b8c59f573ed6a1828ff98fadb345890b6ed2626" ) crypter2 = Crypter() crypter2.set_key(plain_masterkey, doublesha256(public_key)) secret = crypter2.decrypt(crypted_secret) print "secret:", hexstr(secret) assert hexstr( secret ) == "1c7552a9b755d29d081efd71f7811cc8ab2c9f2c634f489e6b45700711c8a304" #Test the secret k = KEY() k.set_secret(secret) assert k.get_pubkey() == public_key sig1 = k.sign("sign something") k2 = KEY() k2.set_pubkey(public_key) assert k2.verify("sign something", sig1) == 1
def test_serialize_outpoint_index(self): outpoint = OutpointIndex( 12, Uint256.from_hexstr( "2af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f" ), 3, OutpointIndex.PUBKEY_HASH, 4, PubKeyOutpoint(PublicKey.from_hexstr( "022af4cc9ec3358354345c91691031a1fcdbe9a9064197521814e8a20fe018eb5f" ), is_pubkey_hash=True)) serialized = OutpointIndexSerializer.serialize(outpoint) self.assertEquals( hexstr(serialized), "0000000c2af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f030200000004022af4cc9ec3358354345c91691031a1fcdbe9a9064197521814e8a20fe018eb5f" )
def test_blockheader_serialize(self): h = BlockHeader( version=1, hash_prev=Uint256.from_hexstr( "1e4baab89f3a3251818c31bc87f6a33b4a5a88ef76673e2cc77ab2127b7afded" ), #hash_prev hash_merkle=Uint256.from_hexstr( "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b" ), #merkle time=1237006505, bits=486605799, nonce=2083236893) self.assertEquals( hexstr(BlockheaderSerializer().serialize(h)), "01000000edfd7a7b12b27ac72c3e6776ef885a4a3ba3f687bc318c8151323a9fb8aa4b1e3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4aa938bb49e703011d1dac2b7c" )
def test_txout_serialize(self): txout = TxOut( value=24990000000, script=Script([ Instruction(OP_DUP), Instruction(OP_HASH160), Instruction( 20, decodehexstr("4d8b17fbce571614be89df4bd872de892a479844")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG) ])) self.assertEquals( hexstr(TxoutSerializer().serialize(txout)), "802385d1050000001976a9144d8b17fbce571614be89df4bd872de892a47984488ac" )
def test_serialize_multisig_outpoint(self): outpoint = MultiSigOutpoint(2, 3, [ PublicKey.from_hexstr( "022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f" ), PublicKey.from_hexstr( "022dc45c9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f" ), PublicKey.from_hexstr( "029ce0129ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f" ) ]) serialized = MultiSigOutpointSerializer.serialize(outpoint) self.assertEquals( hexstr(serialized), "0000000200000003022af4cc9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f022dc45c9ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f029ce0129ec3358354345c91694031a1fcdbe9a9064197521814e8a20fe018eb5f" )
def test_tx_serialize(self): tx = Tx(version=1, in_list=[TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("17c5cb687ba453ab65e12cdc0d8721c70ab4678665eb200c50cb9f1e3207090e"), index=0), script=Script([Instruction(72, decodehexstr("3045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c01")), Instruction(65, decodehexstr("04b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3e"))]), sequence=TxIn.NSEQUENCE_FINAL )], out_list=[TxOut(value=24990000000, script=Script([Instruction(OP_DUP), Instruction(OP_HASH160), Instruction(20, decodehexstr("4d8b17fbce571614be89df4bd872de892a479844")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG)])), TxOut(value=5000000000, script=Script([Instruction(OP_DUP), Instruction(OP_HASH160), Instruction(20, decodehexstr("fadad27c40adbe230f5e3c04d44a292975084831")), Instruction(OP_EQUALVERIFY), Instruction(OP_CHECKSIG)]))], locktime=0) self.assertEquals(hexstr(TxSerializer().serialize(tx)), "01000000010e0907321e9fcb500c20eb658667b40ac721870ddc2ce165ab53a47b68cbc517000000008b483045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c014104b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3effffffff02802385d1050000001976a9144d8b17fbce571614be89df4bd872de892a47984488ac00f2052a010000001976a914fadad27c40adbe230f5e3c04d44a29297508483188ac00000000")
def test_merkletx_serialize(self): # This is tx 37 of block 429 on testnet3 merkle_tx = MerkleTx( Tx(version=1, in_list=[TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("88c844570a227fe89d82e4e20d41576b95df8aa790a799bf7114dbed83b788b0"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("3045022100813a4dfdfda02946bf9fddc59ffd0b8d2feaa618518a3015fd5e65dd88a0d4480220137b25ea7531e103405bfe1617cb92f524e88c86e66a79c1e3c62558d019528201")),Instruction(33, decodehexstr("03cf163e38520a7b390305528eca2fa1c620f0da225a044017fd92b30067875dc8"))]), sequence=4294967295)], out_list=[TxOut(value=4899704976, script=Script(instructions=[Instruction(OP_DUP),Instruction(OP_HASH160),Instruction(20, decodehexstr("10170e3f7c3b0c93d2e07e90e307d3fb21811702")),Instruction(OP_EQUALVERIFY),Instruction(OP_CHECKSIG)])),TxOut(value=887733, script=Script(instructions=[Instruction(OP_HASH160),Instruction(20, decodehexstr("184cd0a38ac3b1357d07179553788375a9e8a3b8")),Instruction(OP_EQUAL)]))], locktime=0), blockhash=Uint256.from_hexstr("00000000e080223655db52d2c35a37f6aa17a3f2efefa6794fd9831374cff09f"), merkle_branch=[Uint256.from_hexstr("88c844570a227fe89d82e4e20d41576b95df8aa790a799bf7114dbed83b788b0"), Uint256.from_hexstr("225dd6a6857be59dbf2d72d4d5cca1325053dd66a9c3a35a16c51de04a1b0d03"), Uint256.from_hexstr("74f79002e7c2cbbf40581aa56d8037cb32844d34ae049629a757b6ff709a10fa"), Uint256.from_hexstr("02099d8b6bf46c3f87ccc922dec8c18a9dc420e17ebc672030145bd8ee33ab34"), Uint256.from_hexstr("15b202c47b1ad2638c4ea260611839be7cdf15e13e6de50861f41e46a5e9f8cf"), Uint256.from_hexstr("007e2166afda37ce696e971ac530a7cc22e183b37acf57c79cb0ee21a9de2179"), Uint256.from_hexstr("a7d06d9452a65fae2662ae63c9b450ba4ce22dfab76d22624a95d97d294421d4")], nindex=37) self.assertEquals(hexstr(MerkleTxSerializer().serialize(merkle_tx)), "0100000001b088b783eddb1471bf99a790a78adf956b57410de2e4829de87f220a5744c888000000006b483045022100813a4dfdfda02946bf9fddc59ffd0b8d2feaa618518a3015fd5e65dd88a0d4480220137b25ea7531e103405bfe1617cb92f524e88c86e66a79c1e3c62558d0195282012103cf163e38520a7b390305528eca2fa1c620f0da225a044017fd92b30067875dc8ffffffff0290900b24010000001976a91410170e3f7c3b0c93d2e07e90e307d3fb2181170288acb58b0d000000000017a914184cd0a38ac3b1357d07179553788375a9e8a3b887000000009ff0cf741383d94f79a6efeff2a317aaf6375ac3d252db55362280e00000000007b088b783eddb1471bf99a790a78adf956b57410de2e4829de87f220a5744c888030d1b4ae01dc5165aa3c3a966dd535032a1ccd5d4722dbf9de57b85a6d65d22fa109a70ffb657a7299604ae344d8432cb37806da51a5840bfcbc2e70290f77434ab33eed85b14302067bc7ee120c49d8ac1c8de22c9cc873f6cf46b8b9d0902cff8e9a5461ef46108e56d3ee115df7cbe39186160a24e8c63d21a7bc402b2157921dea921eeb09cc757cf7ab383e122cca730c51a976e69ce37daaf66217e00d42144297dd9954a62226db7fa2de24cba50b4c963ae6226ae5fa652946dd0a725000000")
def test_txin_serialize(self): txin = TxIn( previous_output=Outpoint(hash=Uint256.from_hexstr( "17c5cb687ba453ab65e12cdc0d8721c70ab4678665eb200c50cb9f1e3207090e" ), index=0), script=Script([ Instruction( 72, decodehexstr( "3045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c01" )), Instruction( 65, decodehexstr( "04b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3e" )) ]), sequence=TxIn.NSEQUENCE_FINAL) self.assertEquals( hexstr(TxinSerializer().serialize(txin)), "0e0907321e9fcb500c20eb658667b40ac721870ddc2ce165ab53a47b68cbc517000000008b483045022100ab2dc8932ca1d26f4cdac1feae09020a60ccc4d17b14e5fc5b21f3ab8c3a9cee022040a7208c172d19a19902280d66201c7fe2c3d8b2df7e23cc4e5b70fd52ecba2c014104b77dd1f3a21cb3d067a7e76982a609d7310f8692f5d61346f3225323c425604a0c12862755335c49e392673106adfc5dfdee1e4d367f10353e8911fac687db3effffffff" )
def test_blocklocator_serialize(self): loc = BlockLocator( version=1, blockhashlist=[ Uint256.from_hexstr( "0000000002ae3d2db6477a04ad37bdcbc111c06050effb0ceab2376016e129a3" ), Uint256.from_hexstr( "00000000074150f20eb97a8aec12a8dc7f93ddebb3b2df0d8022a60213b4bd70" ), Uint256.from_hexstr( "0000000025345b019b2ee713a995dfc3250d88232e2253f95ec42c4bb2528039" ), Uint256.from_hexstr( "000000007dbb8690940f40293832c46b90a20bfef681b52979115fb1049a7366" ), Uint256.from_hexstr( "00000007199508e34a9ff81e6ec0c477a4cccff2a4767a8eee39c11db367b008" ) ]) self.assertEquals( hexstr(BlockLocatorSerializer().serialize(loc)), "0100000005a329e1166037b2ea0cfbef5060c011c1cbbd37ad047a47b62d3dae020000000070bdb41302a622800ddfb2b3ebdd937fdca812ec8a7ab90ef250410700000000398052b24b2cc45ef953222e23880d25c3df95a913e72e9b015b34250000000066739a04b15f117929b581f6fe0ba2906bc4323829400f949086bb7d0000000008b067b31dc139ee8e7a76a4f2cfcca477c4c06e1ef89f4ae308951907000000" )
def __str__(self): return ("RawScript:" + hexstr(self.data))
if __name__ == '__main__': """print cast_to_number("\xff\xff\xff\xff") print 0xffffffff print cast_to_number("\xff\xff\xff\x7f") print cast_to_number("\x82") print "a" """ #OP_PUSHDATA(4):ffffff7f,OP_NEGATE,OP_DUP,OP_ADD,OP_PUSHDATA(5):feffffff80,OP_EQUAL #OP_PUSHDATA(4):ffffff7f,OP_DUP,OP_ADD OP_PUSHDATA(5):feffffff00,OP_EQUAL valtype_from_number(0) print cast_to_number("\xff\xff\xff\x7f") * 2 print cast_to_number("\x02") print cast_to_number("\x82") print "V", valtype_from_number(0), "V" print hexstr(valtype_from_number(4294967294)) print hexstr(valtype_from_number(cast_to_number("\xff\xff\xff\xff"))) print hexstr( valtype_from_number( cast_to_number("\xff\xff\xff\xff") + cast_to_number("\xff\xff\xff\xff"))) print cast_to_number("\xff\xff\xff\x7f") a = -cast_to_number("\xff\xff\xff\x7f") print "-a:", hexstr( valtype_from_number(-cast_to_number("\xff\xff\xff\x7f"))) print "2a:", a + a print "2a_hex:", hexstr(valtype_from_number(a + a)) print cast_to_number("\xff\xff\xff\x7f") print hexstr(valtype_from_number(-cast_to_number("\xff\xff\xff\x7f"))) #print cast_to_number("\xfe\xff\xff\xff\x80")
def test_serialize_block_message(self): #block 381 on testnet 3 (first block with exactly 2 transactions) block_msg = BlockMessage( Block(blockheader=BlockHeader(version=1, hash_prev=Uint256.from_hexstr("00000000d2a17cbe6e38439f60111911c2cca0a551ccfac41a7efa659048b9c5"), hash_merkle=Uint256.from_hexstr("83c4a9e0d7b0bc6be667bf916e3d3dea5949c235e3db841d44a8a222bb3bdba0"), time=1296728938, bits=486604799, nonce=1712527364), transactions=[ Tx(version=1, in_list=[TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("0000000000000000000000000000000000000000000000000000000000000000"),index=4294967295), script=Script(instructions=[Instruction(4, decodehexstr("6a834a4d")),Instruction(1, decodehexstr("7e")),Instruction(6, decodehexstr("2f503253482f"))]), sequence=4294967295)], out_list=[TxOut(value=5000000000, script=Script(instructions=[Instruction(33, decodehexstr("03dac3fb8de40965f42fb4afb3baa07d3304bc2aa28cfc25f12b52f1523681451d")),Instruction(OP_CHECKSIG)]))], locktime=0), Tx(version=1, in_list=[TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("6749762ae220c10705556799dcec9bb6a54a7b881eb4b961323a3363b00db518"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("3046022100e49de3c89180769db346145cdda48323ddecc2af0041293432528767b18407650221009f7878deb054e4f9c0e6aecbe6de15f5d829041c11f7952d33e96c76ada1258b01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("c04c413576307737f3ad48efe5d509ebc883e1d04822b3a2eccf6a80a4482932"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("3046022100ba88d34e4d4fd85ab5e4d77cb74f71c87a24235bcbe39cf4334633f70ff27233022100b5aa1b96bab59457d3d837473de1e4f9f89ba3ee39964463952271c5b4140fa001"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("72d4fc43ac576a4b2f1f35e1b310a2d83a1012a36fdc7813ec237646950233cf"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("3046022100b21560dfda52352c4416c1e48496659ea3d29e4e25706a991986864210bc759e0221009c1e45af6e2eba0883a862442d85a2b48c3395e35a4276f535cd70d45a971c7401"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("2d34482568c53b9831ef765280f59fd151c3f8ec09f88867f6b85d974d0fedee"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("3045022100e02cc0b4bf8a126807b1577819944c1bb13e8f4028cf7df0a0729013d511b071022010a1bcdefca334588939f9fe40e0d8607588191684fce0f46180a139305b8b4001"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("a5dd9470792c9ad6fda110d4b19c9f2b2b07eb96d239530a0e1ec0b12f0aacc8"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("3045022016ba8f50d7f30be7e4a68c3d50368d577e2ef6c8b60842725ae636b2985776fc022100bb39d47d1955ffca47920d743bcd6f05b31ea2bf3dc7ede225eb4c901126b48901"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("1b24cec4ce0519df028af441934f161c3fdbc6bbf611d33ff39e0b68f03cb0f1"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("304502201dbbfabc47f6da84ceedbc92b792d4a8ef632f0bddf7ebfad5ca21f3731f450502210098751ccf37fd97ff82446486d4c1d62860c2080a1128ea5ddb0d30bfde3cd7a801"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("ed97bd0230c4fc9e53e6acd280a873db5639a087ff5874fe80a674c08a89e61f"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("3046022100f8a83fadb06af9c0cc730f17ae47fe7a09cada9eae623b8dd86bf365ef0e20480221009a10b073b2a8b313d975f801213efdf12b94141d7b6a8e98de3b0c67ee1cef4c01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("a45f9a24d946feda1b6c2e571ba941ac09155f4d6a59733586e9cf13025cd86f"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("3046022100f3e98f3e76cc0f533b0e1cccd82650b704e31e3e7e62bf81bb474cf2add58ebf022100f77003eec814a3336cc305b8461cf3ccb19b1f18f06f66208ed31c3e468466ed01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("dd6e072eb7e092acac3826c1d346218c188d70789504fc16795e51a656a0939e"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("30460221008ee8d7348aed82a8d074753ab4c8dbdd28a668da821269c4cd0c5c253738cab7022100b06a0208d60af1be6303dd883fd05f964a42f7de317761641ec1158944f52b6b01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("d3d98f948569afdd86421523a954854773346ebb36d8747d375dcdd8737bcc0e"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("30450221008159ed783bc717ff5a6502cd87a8d8144fae74c6fc6943a5a38da7170203cb3802207e31577a576bc01510cb2280f918a371f63eee44cd2b4490c0994d261787916e01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("5cc0a6a52aa841918915d039f0045a321afba69f241824ab52442d0a9f6e9678"),index=0), script=Script(instructions=[Instruction(71, decodehexstr("304402206655b13198e413ac8f1aa8926d4617560758cf8b5045afdfc9116da0873ed89802205db55cf3f398467bfc6997f68c881e5f2a7225293ebbd2af40d15df6de4ef87701"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("7c2703dfb6b2c74d07c3f54a7f1b6484d07d7d7f30fbe2fe1570debe6b09f269"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("3046022100c9199296673a1beae598a6d2348ef13ad1b9f15eebaa825d2282adf017cbb5f0022100b54934e40ff0194a53dcaa9d017c36a93dbb53aa45fe21ab93b07fbb58570d5501"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("3083cb9808088da30888073f5ac952c3a02ba54239736bc32ed63fd446b1113c"),index=0), script=Script(instructions=[Instruction(71, decodehexstr("3044022004c64773b9e6a17cfca7ff583be650104c0538940289b2da8f8bebbd32e486b302200174d8f0938a0f9eeab4c4b137581e032f06d4740e3b0ad9d0423a0a8de65af101"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("763c1bef6943e02d9c0696ebe183922e26575c489def07a9b989faad373cac59"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("30450220306f3ac72de9dbeb1ec139e4e89cc3b3b9bcb63747bf0e165fcfc773f3669832022100c00a16800f16bf1c71ac6c2989b42d974b0ec2f3e3671325fb2cae52a1c569d801"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("b77bfe8240e197a3c004e3144613ab29cc5cbd6df382abe586d98d81eeecbbb4"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("3046022100ed68e0303052b41ffd80c1e905cee5547e92422d43b73e473a615e4a47146bb5022100ecab3f92c62477350753b4efea19d608fcce15b1b2c38fbe905e9d1f9ad7631f01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("8404eec9135a198ff37ff2f3b605f34deb68b354c1e8a60d98c8e19aacbb4675"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("304502202288566af2b68b6982d1244e293ea3d7c156a425329b7f61b272e4deec317bea022100d9739976b442d35c32830cb2c105e0d7275f7efaa99eaeea4b24a553267a31fc01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("77b6bab82fa6183f1a83b70551e22b7a55240b479f0872af9d34bae5d15458d1"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("304502206e3a23075e0248ea8cabc7c875b4cfd9f036c1c4f358a00ec152fc96d1cb6cf8022100d34c018815f63c65f5364061369382b31d579cd6d8a4afe9ec1f03ba66d7717801"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("7e9ece75efbb59dfb38e4245fa19474336636db25385606adec1c2317f6a68df"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("304502200a22a24a8f817a2f24d3f8c2670f3cb25cd389ce25e0d45eeb0aea08563c5c9802210081ff14edb230a44e5b52e35f573676096a937fc27cc830b153b229b92cac75c101"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("27b2f3eafa9e5696eb76a8960c95502e727b640f344d031aa3c5991ba9fe26d2"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("30460221009684e60a7fd61362d0dad79858044aa4a7b878b3f0bd432e384fe4c7e6c90bde0221009883e4f739cffe574bac5bed0a4e69708433973a2490d9415d303614fc31be4701"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("718f8928d46e07dfad7ce17e4747ef23536f83699859480002dc38a40ec640f6"),index=0), script=Script(instructions=[Instruction(72, decodehexstr("30450220028eb7617dc161a282512c81975d41a1594c05f34cb26fb759682bf784da7071022100a0913abea7229b3c465a4fa32dc861f72ef684e8dd3f19aac5f0f74ea39c03cf01"))]), sequence=4294967295),TxIn(previous_output=Outpoint(hash=Uint256.from_hexstr("cc61baf9815306f8da8f9de105023fde0ddc49269d8ac67a6f3c88b1492a9dd5"),index=0), script=Script(instructions=[Instruction(73, decodehexstr("30460221009f5b27dfd397423a04cab52ee6e8215e290e9666309f0f59f5bc5f6c207d3639022100f5a79133db2cc786140aeee0bf7c8a81adca6071928e8210f1c9f0c653e2f04201"))]), sequence=4294967295)], out_list=[TxOut(value=4989000000, script=Script(instructions=[Instruction(OP_DUP),Instruction(OP_HASH160),Instruction(20, decodehexstr("944a7d4b3a8d3a5ecf19dfdfd8dcc18c6f1487dd")),Instruction(OP_EQUALVERIFY),Instruction(OP_CHECKSIG)])),TxOut(value=100011000000, script=Script(instructions=[Instruction(OP_DUP),Instruction(OP_HASH160),Instruction(20, decodehexstr("32040178c5cf81cb200ab99af1131f187745b515")),Instruction(OP_EQUALVERIFY),Instruction(OP_CHECKSIG)]))], locktime=0)])) serialized_msg = BlockMessageSerializer().serialize(block_msg) self.assertEquals(hexstr(serialized_msg), "01000000c5b9489065fa7e1ac4facc51a5a0ccc2111911609f43386ebe7ca1d200000000a0db3bbb22a2a8441d84dbe335c24959ea3d3d6e91bf67e66bbcb0d7e0a9c4836a834a4dffff001d041813660201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e046a834a4d017e062f503253482fffffffff0100f2052a01000000232103dac3fb8de40965f42fb4afb3baa07d3304bc2aa28cfc25f12b52f1523681451dac00000000010000001518b50db063333a3261b9b41e887b4aa5b69becdc9967550507c120e22a764967000000004a493046022100e49de3c89180769db346145cdda48323ddecc2af0041293432528767b18407650221009f7878deb054e4f9c0e6aecbe6de15f5d829041c11f7952d33e96c76ada1258b01ffffffff322948a4806acfeca2b32248d0e183c8eb09d5e5ef48adf33777307635414cc0000000004a493046022100ba88d34e4d4fd85ab5e4d77cb74f71c87a24235bcbe39cf4334633f70ff27233022100b5aa1b96bab59457d3d837473de1e4f9f89ba3ee39964463952271c5b4140fa001ffffffffcf330295467623ec1378dc6fa312103ad8a210b3e1351f2f4b6a57ac43fcd472000000004a493046022100b21560dfda52352c4416c1e48496659ea3d29e4e25706a991986864210bc759e0221009c1e45af6e2eba0883a862442d85a2b48c3395e35a4276f535cd70d45a971c7401ffffffffeeed0f4d975db8f66788f809ecf8c351d19ff5805276ef31983bc5682548342d0000000049483045022100e02cc0b4bf8a126807b1577819944c1bb13e8f4028cf7df0a0729013d511b071022010a1bcdefca334588939f9fe40e0d8607588191684fce0f46180a139305b8b4001ffffffffc8ac0a2fb1c01e0e0a5339d296eb072b2b9f9cb1d410a1fdd69a2c797094dda50000000049483045022016ba8f50d7f30be7e4a68c3d50368d577e2ef6c8b60842725ae636b2985776fc022100bb39d47d1955ffca47920d743bcd6f05b31ea2bf3dc7ede225eb4c901126b48901fffffffff1b03cf0680b9ef33fd311f6bbc6db3f1c164f9341f48a02df1905cec4ce241b000000004948304502201dbbfabc47f6da84ceedbc92b792d4a8ef632f0bddf7ebfad5ca21f3731f450502210098751ccf37fd97ff82446486d4c1d62860c2080a1128ea5ddb0d30bfde3cd7a801ffffffff1fe6898ac074a680fe7458ff87a03956db73a880d2ace6539efcc43002bd97ed000000004a493046022100f8a83fadb06af9c0cc730f17ae47fe7a09cada9eae623b8dd86bf365ef0e20480221009a10b073b2a8b313d975f801213efdf12b94141d7b6a8e98de3b0c67ee1cef4c01ffffffff6fd85c0213cfe9863573596a4d5f1509ac41a91b572e6c1bdafe46d9249a5fa4000000004a493046022100f3e98f3e76cc0f533b0e1cccd82650b704e31e3e7e62bf81bb474cf2add58ebf022100f77003eec814a3336cc305b8461cf3ccb19b1f18f06f66208ed31c3e468466ed01ffffffff9e93a056a6515e7916fc049578708d188c2146d3c12638acac92e0b72e076edd000000004a4930460221008ee8d7348aed82a8d074753ab4c8dbdd28a668da821269c4cd0c5c253738cab7022100b06a0208d60af1be6303dd883fd05f964a42f7de317761641ec1158944f52b6b01ffffffff0ecc7b73d8cd5d377d74d836bb6e3473478554a923154286ddaf6985948fd9d300000000494830450221008159ed783bc717ff5a6502cd87a8d8144fae74c6fc6943a5a38da7170203cb3802207e31577a576bc01510cb2280f918a371f63eee44cd2b4490c0994d261787916e01ffffffff78966e9f0a2d4452ab2418249fa6fb1a325a04f039d015899141a82aa5a6c05c000000004847304402206655b13198e413ac8f1aa8926d4617560758cf8b5045afdfc9116da0873ed89802205db55cf3f398467bfc6997f68c881e5f2a7225293ebbd2af40d15df6de4ef87701ffffffff69f2096bbede7015fee2fb307f7d7dd084641b7f4af5c3074dc7b2b6df03277c000000004a493046022100c9199296673a1beae598a6d2348ef13ad1b9f15eebaa825d2282adf017cbb5f0022100b54934e40ff0194a53dcaa9d017c36a93dbb53aa45fe21ab93b07fbb58570d5501ffffffff3c11b146d43fd62ec36b733942a52ba0c352c95a3f078808a38d080898cb83300000000048473044022004c64773b9e6a17cfca7ff583be650104c0538940289b2da8f8bebbd32e486b302200174d8f0938a0f9eeab4c4b137581e032f06d4740e3b0ad9d0423a0a8de65af101ffffffff59ac3c37adfa89b9a907ef9d485c57262e9283e1eb96069c2de04369ef1b3c7600000000494830450220306f3ac72de9dbeb1ec139e4e89cc3b3b9bcb63747bf0e165fcfc773f3669832022100c00a16800f16bf1c71ac6c2989b42d974b0ec2f3e3671325fb2cae52a1c569d801ffffffffb4bbecee818dd986e5ab82f36dbd5ccc29ab134614e304c0a397e14082fe7bb7000000004a493046022100ed68e0303052b41ffd80c1e905cee5547e92422d43b73e473a615e4a47146bb5022100ecab3f92c62477350753b4efea19d608fcce15b1b2c38fbe905e9d1f9ad7631f01ffffffff7546bbac9ae1c8980da6e8c154b368eb4df305b6f3f27ff38f195a13c9ee0484000000004948304502202288566af2b68b6982d1244e293ea3d7c156a425329b7f61b272e4deec317bea022100d9739976b442d35c32830cb2c105e0d7275f7efaa99eaeea4b24a553267a31fc01ffffffffd15854d1e5ba349daf72089f470b24557a2be25105b7831a3f18a62fb8bab677000000004948304502206e3a23075e0248ea8cabc7c875b4cfd9f036c1c4f358a00ec152fc96d1cb6cf8022100d34c018815f63c65f5364061369382b31d579cd6d8a4afe9ec1f03ba66d7717801ffffffffdf686a7f31c2c1de6a608553b26d6336434719fa45428eb3df59bbef75ce9e7e000000004948304502200a22a24a8f817a2f24d3f8c2670f3cb25cd389ce25e0d45eeb0aea08563c5c9802210081ff14edb230a44e5b52e35f573676096a937fc27cc830b153b229b92cac75c101ffffffffd226fea91b99c5a31a034d340f647b722e50950c96a876eb96569efaeaf3b227000000004a4930460221009684e60a7fd61362d0dad79858044aa4a7b878b3f0bd432e384fe4c7e6c90bde0221009883e4f739cffe574bac5bed0a4e69708433973a2490d9415d303614fc31be4701fffffffff640c60ea438dc020048599869836f5323ef47477ee17caddf076ed428898f7100000000494830450220028eb7617dc161a282512c81975d41a1594c05f34cb26fb759682bf784da7071022100a0913abea7229b3c465a4fa32dc861f72ef684e8dd3f19aac5f0f74ea39c03cf01ffffffffd59d2a49b1883c6f7ac68a9d2649dc0dde3f0205e19d8fdaf8065381f9ba61cc000000004a4930460221009f5b27dfd397423a04cab52ee6e8215e290e9666309f0f59f5bc5f6c207d3639022100f5a79133db2cc786140aeee0bf7c8a81adca6071928e8210f1c9f0c653e2f04201ffffffff0240195e29010000001976a914944a7d4b3a8d3a5ecf19dfdfd8dcc18c6f1487dd88acc0c01e49170000001976a91432040178c5cf81cb200ab99af1131f187745b51588ac00000000")
def __str__(self): return ("AlertMessage(signature:%s,payload:%s)" % (hexstr(self.signature), self.payload))
def test_serialize_verack_message(self): verack_message = VerackMessage() serialized_msg = VerackMessageSerializer().serialize(verack_message) self.assertEquals(hexstr(serialized_msg), "")
def test_serialize_ping_message(self): ping_message = PingMessage() serialized_msg = PingMessageSerializer().serialize(ping_message) self.assertEquals(hexstr(serialized_msg), "")
return self.wallet_database.get_block_locator().highest() def is_change(self, txout): # Fix to be implemented in main client, see wallet.cpp:390 # current bad assumption is that any payment to a TX_PUBKEYHASH that # is mine but isn't in the address book is change. address = extract_txout_address(txout, self.runmode) return self.is_mine(txout) and (address not in self.get_names()) def get_master_keys(self): return self.wallet_database.get_master_keys() if __name__ == '__main__': from coinpy.model.protocol.runmode import MAIN, TESTNET, TESTNET3 from coinpy.lib.wallet.formats.bitcoinqt.bsddb_wallet_database import BSDDBWalletDatabase dbenv = BSDDBEnv(r"C:\bitcoin-0.7.2\data\testnet\testnet3") wallet_db = BSDDBWalletDatabase(dbenv, "wallet.dat") wallet = Wallet(wallet_db, TESTNET3) wallet.open() for tx, outpoint, txout in wallet.iter_my_outputs(): print extract_txout_address(txout, TESTNET3), (txout.value / COIN) for date, address, name, amount in wallet.iter_transaction_history(): print date, address, name, amount for (public_key, is_crypted, address, description) in wallet.iterkeys(): print hexstr(public_key) #print wallet.get_balance() * 1.0 / COIN # encode_base58check(chr(ADDRESSVERSION[runmode]) + hash160(public_key))
def deserialize(self, data, cursor=0): result, cursor = self.MESSAGE_HEADER.deserialize(data, cursor) magic, command, length = result pos = string.find(command, "\0") if (pos != -1): command = command[0:pos] if (command not in COMMANDS_TYPES): raise FormatErrorException("Error: unknown command : %s" % (command)) if ( ENCODERS[COMMANDS_TYPES[command]] == None): raise FormatErrorException("Error: Unsupported command : %s" % (command)) msg_type = COMMANDS_TYPES[command] #if (msg_type != MSG_VERSION and msg_type != MSG_VERACK): checksum = data[cursor:cursor+4] cursor += 4 startplayload = cursor #raise FormatErrorException("Checksum error in command: %s %s != %s" % (command, hexdump1(checksum,""), hexdump1(verify,""))) if (magic != MAGICS[self.runmode]): raise FormatErrorException("Error: wrong magic : expected:%s received:%s" % (MAGICS[self.runmode], magic)) if (len(data) - cursor < length): raise MissingDataException("Command incomplete: %s" % (command)) #self.log.debug("Decoding: %s" % (command)) res, cursor = ENCODERS[COMMANDS_TYPES[command]].deserialize(data, cursor) #verify checksum after decoding (required to identify message boundaries) #if (msg_type != MSG_VERSION and msg_type != MSG_VERACK): verify = sha256checksum(data[startplayload:cursor]) if (checksum != verify): #raise FormatErrorException("Checksum error in command: %s %s != %s" % (command, hexdump1(checksum,""), hexdump1(verify,""))) raise FormatErrorException( "Checksum error in command: %s %s != %s" % (command, hexstr(checksum), hexstr(verify))) return (res, cursor)
return (template.get_block(), template) if __name__ == '__main__': from coinpy.model.genesis import GENESIS from coinpy.model.protocol.runmode import UNITNET from coinpy.lib.blocks.difficulty import uint256_difficulty from coinpy.tools.hex import decodehexstr from coinpy.model.scripts.instruction import Instruction from coinpy.model.scripts.opcodes import OP_CHECKSIG from coinpy.model.scripts.opcodes import OP_PUSHDATA from coinpy.model.scripts.script import Script import struct from coinpy.tools.hex import hexstr print hexstr(struct.pack("<I", 213566)) print uint256_difficulty(524287999) time_source = SystemTimeSource() miner = BitcoinMiner() block = miner.mine_block( hash_prev=Uint256.from_hexstr( "0000000000000000000000000000000000000000000000000000000000000000" ), block_height=0, time_source=time_source, difficulty_bits=524287999, transactions=[], coinbase_txout_list=[ TxOut( 5000000000,
import os import ctypes import ctypes.util if os.name == 'nt': import _winreg def get_perfmon_data(): value, type = _winreg.QueryValueEx(_winreg.HKEY_PERFORMANCE_DATA, "Global") return value if __name__ == '__main__': from coinpy.tools.hex import hexstr print hexstr(get_perfmon_data()[0:100])
import hashlib def doublesha256(data): return hashlib.sha256(hashlib.sha256(data).digest()).digest() def double_sha256_2_input(data1, data2): h = hashlib.sha256() h.update(data1) h.update(data2) return hashlib.sha256(h.digest()).digest() def sha256checksum(data): return (doublesha256(data)[0:4]) if __name__ == '__main__': from coinpy.tools.hex import hexstr print hexstr(sha256checksum(""))