def new_transaction(self, from_addr, to_addr, amount, fee): inputs = [] outputs = [] ifname = 'ens33' # enp2s0 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ip = socket.inet_ntoa( fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', bytes(ifname[:15], 'utf-8')))[20:24]) wallets = Wallets() from_wallet = wallets[from_addr] pub_key = from_wallet.public_key acc, valid_outpus = self._find_spendable_outputs(from_addr, amount) # if acc < amount + fee: # change # raise NotEnoughAmountError(u'not enough coin') for fout in valid_outpus: index = fout.index txid = fout.txid input = TXInput(txid, index, pub_key) inputs.append(input) output = TXOutput(amount, to_addr) outputs.append(output) if acc > amount + fee: # change # a change outputs.append(TXOutput(acc - amount - fee, from_addr)) # change tx = Transaction(inputs, outputs, fee, ip) # change tx.set_id() self.sign_transaction(tx, from_wallet.private_key) return tx