def getScriptSigMessage(tx, i): # -> bytes rawTx = "" rawTx += key.encode(tx["version"], 256, 4)[::-1] #rawTx += setCompactInt(len(prevTxs)) rawTx += setCompactInt(1) #for i in range(len(prevTxs)): rawTx += key.changeBase(tx["txIns"][i]["prevOutTxid"], 16, 256)[::-1] rawTx += key.encode(tx["txIns"][i]["prevOutIndex"], 256, 4)[::-1] tempScriptPubKey = key.changeBase(tx["txIns"][i]["prevOutScriptPubKey"], 16, 256)[::-1] rawTx += setCompactInt(len(tempScriptPubKey)) rawTx += tempScriptPubKey[::-1] rawTx += key.encode(tx["txIns"][i]["sequence"], 256, 4)[::-1] rawTx += setCompactInt(tx["numOut"]) for i in range(tx["numOut"]): rawTx += setTxOut(tx["txOuts"][i]) rawTx += key.encode(tx["lockTime"], 256, 4)[::-1] rawTx += key.encode(tx["sigHashCode"], 256, 4)[::-1] print 'rawTx' + binascii.hexlify(rawTx) return rawTx
def createTx(self, UTXOs, toAddr, amount): self._tx = {} self._tx["version"] = 1 self._tx["numIn"] = len(UTXOs) self._tx["txIns"] = [] for UTXO in UTXOs: tempTxIn = {} tempTxIn["prevOutTxid"] = UTXO["txid"] tempTxIn["prevOutIndex"] = UTXO["index"] tempTxIn["prevOutScriptPubKey"] = UTXO["scriptPubKey"] tempTxIn["lenScript"] = 0 tempTxIn["scriptSig"] = None tempTxIn["sequence"] = 0xffffffff self._tx["txIns"].append(tempTxIn) self._tx["numOut"] = 1 self._tx["txOuts"] = [] for i in range(self._tx["numOut"]): tempTxOut = {} tempTxOut["value"] = amount pubKeyHash = key.changeBase(toAddr, 58, 256)[1:-4] tempTxOut["scriptPubKey"] = setScriptPubKey(pubKeyHash) tempTxOut['lenScript'] = len( key.changeBase(tempTxOut['scriptPubKey'], 16, 256)) self._tx["txOuts"].append(tempTxOut) self._tx["lockTime"] = 0 self._tx["sigHashCode"] = 1
def setTxIn(txIn): # -> bytes _rawTxIn = "" _rawTxIn += key.changeBase(txIn["prevOutTxid"], 16, 256)[::-1] _rawTxIn += key.encode(txIn["prevOutIndex"], 256, 4)[::-1] _rawTxIn += setCompactInt(txIn["lenScript"]) #scriptSig = setScriptSig(prevTxs, tx) #_rawTxIn += setCompactInt(len(scriptSig)) #_rawTxIn += scriptSig _rawTxIn += key.changeBase(txIn["scriptSig"], 16, 256) _rawTxIn += key.encode(txIn["sequence"], 256, 4)[::-1] return _rawTxIn
def setTxOut(txOut): # -> bytes _rawTxOut = "" _rawTxOut += key.encode(txOut["value"], 256, 8)[::-1] _rawTxOut += setCompactInt(txOut["lenScript"]) _rawTxOut += key.changeBase(txOut["scriptPubKey"], 16, 256) return _rawTxOut
def __init__(self, privKey=None): if privKey == None: self._privKey = key.getPrivKeyFromSeed(str(random.randrange(1,100000)+9218912379821897321978231892137)) # object else: self._privKey = key.getPrivKey(key.changeBase(privKey,16,256)) self._pubKey = key.getPubKey(self._privKey, raw=False) # object self._address = key.getAddress(self._pubKey, raw=False) # bytes
def __init__(self, rawTx=None): # hex if rawTx != None: self._rawTx = key.changeBase(rawTx, 16, 256) self._tx = txDeserialize(self._rawTx)