Ejemplo n.º 1
0
Archivo: miner.py Proyecto: youht88/bc
def checkScript():
  script = request.form.get('script',default="")
  contract = Contract(script)
  result = contract.check()
  if result["errCode"]==0:
    return result["result"]
  else:
    return result["errText"]
Ejemplo n.º 2
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
Ejemplo n.º 3
0
 def canbeUnlockWith(self, address):
     if self.outAddr == address:
         if self.script == "":
             return True
         else:
             contract = Contract(self.script)
             result = contract.check()
             if result["errCode"] == 0:
                 if result["result"] == "True":
                     return True
                 else:
                     return False
             else:
                 return False
     else:
         return False