Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
def setCompactInt(value):  # -> bytes

    if value <= 252:
        return key.encode(value, 256)
    elif value <= 0xffff:
        return '\xfd' + key.encode(value, 256, 2)[::-1]
    elif value <= 0xffffffff:
        return '\xfe' + key.encode(value, 256, 4)[::-1]
    else:
        return '\xff' + key.encode(value, 256, 8)[::-1]
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    def signTx(self, privKeys):
        for i in range(len(privKeys)):
            signedMessage = key.signMessage(getScriptSigMessage(self._tx, i),
                                            privKeys[i]) + '\x01'

            pubKey = privKeys[i].pubkey.serialize()
            scriptSig = key.encode(len(signedMessage),
                                   256) + signedMessage + key.encode(
                                       len(pubKey), 256) + pubKey

            self._tx["txIns"][i]["lenScript"] = len(scriptSig)
            self._tx["txIns"][i]["scriptSig"] = binascii.hexlify(scriptSig)

            print binascii.hexlify(signedMessage[:-1])
            print binascii.hexlify(getScriptSigMessage(self._tx, i))

        print self._tx
        self._rawTx = txSerialize(self._tx)
Ejemplo n.º 6
0
def setScriptPubKey(pubKeyHash):  # -> hex
    rawScriptPubKey = '76a9'

    rawScriptPubKey += key.encode(len(pubKeyHash), 16)
    rawScriptPubKey += binascii.hexlify(pubKeyHash)

    rawScriptPubKey += '88ac'

    return rawScriptPubKey
Ejemplo n.º 7
0
def txSerialize(tx):

    rawTx = ""

    rawTx += key.encode(tx["version"], 256, 4)[::-1]

    rawTx += setCompactInt(tx["numIn"])

    for i in range(tx["numIn"]):
        rawTx += setTxIn(tx["txIns"][i])

    rawTx += setCompactInt(tx["numOut"])

    for i in range(tx["numOut"]):
        rawTx += setTxOut(tx["txOuts"][i])

    rawTx += key.encode(tx["lockTime"], 256, 4)[::-1]

    return rawTx