def parse_decoded_txout_script(chain, decoded): if deserialize.match_decoded(decoded, SCRIPT_ADDRESS_TEMPLATE): pubkey_hash = decoded[2][1] if len(pubkey_hash) == PUBKEY_HASH_LENGTH: return SCRIPT_TYPE_ADDRESS, pubkey_hash elif deserialize.match_decoded(decoded, SCRIPT_PUBKEY_TEMPLATE): pubkey = decoded[0][1] return SCRIPT_TYPE_PUBKEY, pubkey elif deserialize.match_decoded(decoded, SCRIPT_P2SH_TEMPLATE): script_hash = decoded[1][1] assert len(script_hash) == PUBKEY_HASH_LENGTH return SCRIPT_TYPE_P2SH, script_hash elif deserialize.match_decoded(decoded, SCRIPT_BURN_TEMPLATE): return SCRIPT_TYPE_BURN, None elif len(decoded) >= 4 and decoded[-1][0] == opcodes.OP_CHECKMULTISIG: # cf. bitcoin/src/script.cpp:Solver n = decoded[-2][0] + 1 - opcodes.OP_1 m = decoded[0][0] + 1 - opcodes.OP_1 if 1 <= m <= n <= MAX_MULTISIG_KEYS and len(decoded) == 3 + n and \ all([ decoded[i][0] <= opcodes.OP_PUSHDATA4 for i in range(1, 1+n) ]): return SCRIPT_TYPE_MULTISIG, \ { "m": m, "pubkeys": [ decoded[i][1] for i in range(1, 1+n) ] } # Namecoin overrides this to accept name operations. return SCRIPT_TYPE_UNKNOWN, decoded
def get_multichain_op_drop_data(script): """ Get OP DROP data. :param script: script byte data :return: """ try: decoded = [x for x in deserialize.script_GetOp(script)] except Exception: return None data = None if deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_TEMPLATE): data = decoded[5][1] elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_P2SH_TEMPLATE): data = decoded[3][1] # 4th element contains the OP_DROP data. return data
def get_multichain_op_drop_data(script): """ Get OP DROP data. :param script: script byte data :return: """ try: decoded = [x for x in deserialize.script_GetOp(script)] except Exception: return None data = None if deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_TEMPLATE): data = decoded[5][1] elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_P2SH_TEMPLATE): data = decoded[3][1] # 4th element contains the OP_DROP data. elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_STREAM_ITEM_TEMPLATE): data = decoded[0][1] # 1st element contains the creation txid OP_DROP data elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_STREAM_FORMATTED_ITEM_TEMPLATE): data = decoded[0][1] # 1st element contains the creation txid OP_DROP data elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_STREAM_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_SPKN_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_FOLLOW_ON_ISSUANCE_METADATA_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. elif len(decoded) >= 3 and decoded[-2][1] and decoded[-2][1].startswith("spkq"): data = decoded[-2][1] # element before last contains the OP_DROP data. return data
def get_gamechain_op_drop_data(script): """ Get OP DROP data. :param script: script byte data :return: """ try: decoded = [x for x in deserialize.script_GetOp(script)] except Exception: return None data = None if deserialize.match_decoded(decoded, Chain.SCRIPT_GAMECHAIN_TEMPLATE): data = decoded[5][1] elif deserialize.match_decoded(decoded, Chain.SCRIPT_GAMECHAIN_P2SH_TEMPLATE): data = decoded[3][1] # 4th element contains the OP_DROP data. elif deserialize.match_decoded( decoded, Chain.SCRIPT_GAMECHAIN_STREAM_ITEM_TEMPLATE): data = decoded[0][ 1] # 1st element contains the creation txid OP_DROP data elif deserialize.match_decoded(decoded, Chain.SCRIPT_GAMECHAIN_STREAM_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. elif deserialize.match_decoded(decoded, Chain.SCRIPT_GAMECHAIN_SPKN_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. elif deserialize.match_decoded( decoded, Chain.SCRIPT_GAMECHAIN_FOLLOW_ON_ISSUANCE_METADATA_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. return data
def get_multichain_op_drop_data(script): ''' Get OP DROP data. :param script: script byte data :return: ''' try: decoded = [x for x in deserialize.script_GetOp(script)] except Exception: return None data = None if deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_TEMPLATE): data = decoded[5][1] return data
def get_gamechain_op_return_data(script): """ Get OP_RETURN data. :param script: script byte data :return: """ try: decoded = [x for x in deserialize.script_GetOp(script)] except Exception: return None data = None if deserialize.match_decoded(decoded, Chain.SCRIPT_GAMECHAIN_STREAM_TEMPLATE): data = decoded[3][1] # 4th element contains the OP_RETURN data. return data
def get_multichain_op_drop_data(script): """ Get OP DROP data. :param script: script byte data :return: """ try: decoded = [x for x in deserialize.script_GetOp(script)] except Exception: return None data = None if deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_TEMPLATE): data = decoded[5][1] elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_P2SH_TEMPLATE): data = decoded[3][1] # 4th element contains the OP_DROP data. elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_STREAM_ITEM_TEMPLATE): data = decoded[0][1] # 1st element contains the creation txid OP_DROP data elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_STREAM_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_SPKN_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. elif deserialize.match_decoded(decoded, Chain.SCRIPT_MULTICHAIN_FOLLOW_ON_ISSUANCE_METADATA_TEMPLATE): data = decoded[0][1] # 1st element contains the OP_DROP data. return data