code: def who_signed_tx(self, tx, tx_in_idx):
          
          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))
docs: 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.