def who_signed_tx(self, tx, tx_in_idx):
        """
        Given a transaction (tx) an input index (tx_in_idx), attempt to figure
        out which addresses where used in signing (so far). This method
        depends on tx.unspents being properly configured. This should work on
        partially-signed MULTISIG transactions (it will return as many
        addresses as there are good signatures).
        Returns a list of (public_pairs, sig_type) pairs.
        """
        public_pair_sig_type_list = self.public_pairs_signed(tx, tx_in_idx)
        sig_type_list = [pp[-1] for pp in public_pair_sig_type_list]
        hash160_list = [public_pair_to_hash160_sec(pp[0]) for pp in public_pair_sig_type_list]
        address_list = [self._address.for_p2pkh(h160) for h160 in hash160_list]
        return list(zip(address_list, sig_type_list))
Given a transaction (tx) an input index (tx_in_idx), attempt to figure
        out which addresses where used in signing (so far). This method
        depends on tx.unspents being properly configured. This should work on
        partially-signed MULTISIG transactions (it will return as many
        addresses as there are good signatures).
        Returns a list of (public_pairs, sig_type) pairs.