def newTransaction(inPrvkey, inPubkey, outPubkey, amount, utxo, script=""): if script: contract = Contract(script) result = contract.check() if result["errCode"] != 0: return result ins = [] outs = [] inAddr = Wallet.address(inPubkey) outAddr = Wallet.address(outPubkey) todo = utxo.findSpendableOutputs(inAddr, amount) #todo={"acc":3,"unspend":{"3453425125":{"index":0,"amount":"3"}, # "2543543543":{"index":0,"amount":"2"} # } # } #print("newTransaction.todo","\n",todo) amount = round(amount, 4) if todo["acc"] < amount: Transaction.logger.warning("%s not have enough money." % inAddr) return {"errCode": 1, "errText": "not enough money."} for hash in todo["unspend"]: output = todo["unspend"][hash] prevHash = hash index = output["index"] toSign = prevHash + str(index) + inAddr sign = utils.sign(message=toSign, prvkey=inPrvkey) ins.append( TXin({ "prevHash": prevHash, "index": index, "inAddr": inAddr, "pubkey": inPubkey, "sign": sign })) outs.append( TXout({ "amount": round(amount, 4), "outAddr": outAddr, "script": script })) if todo["acc"] > amount: outs.append( TXout({ "amount": round(todo["acc"] - amount, 4), "outAddr": inAddr, "script": "" })) TX = Transaction(ins=ins, outs=outs) utxoSet = copy.deepcopy(utxo.utxoSet) if not utxo.updateWithTX(TX, utxoSet): return { "errCode": 1, "errText": "double spend!!,Maybe not enough money." } utxo.utxoSet = utxoSet return TX