Exemple #1
0
 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