예제 #1
0
def getinfo(args):
    for filename in args:
        print "----------------"
        print "Filename: ", filename
        privateKey = readPrivateKey(filename)
        k = Key()
        k.setPrivateKey(privateKey)
        print "Public key: ", k.getPublicKey().encode("hex")
        print "Address: ", getAddress(k)
예제 #2
0
def makekey(args):
    k = Key()
    k.makeNewKey(compressed=True)

    privateKey = k.getPrivateKey()
    privateKey = base58.encodeBase58Check(privateKey, 128)  #PRIVKEY = 128

    address = getAddress(k)

    with open(address, "wb") as f:
        f.write(privateKey + "\n")
    print "Saved as ", address
예제 #3
0
def spend(args):
    #Load the keys
    keys = []
    for filename in args:
        privateKey = readPrivateKey(filename)
        k = Key()
        k.setPrivateKey(privateKey)
        keys.append(k)

    def getKey(question):
        for i in range(len(keys)):
            print i + 1, getAddress(keys[i])
        i = int(raw_input(question)) - 1
        return keys[i]

    #Ask for input information:
    inputs = []
    totalAmount = 0
    while True:
        txid = raw_input("Transaction ID of unspent output (Enter to stop): ")
        txid = txid.strip()
        if txid == "":
            break
        txid = binascii.unhexlify(txid)[::-1]

        vout = int(raw_input("Output index of unspent output: "))
        k = getKey("Address of unspent output: ")
        inputs.append((txid, vout, k))

        totalAmount += int(
            decimal.Decimal(raw_input("Amount in unspent output (mBTC): ")) *
            mBTC)

    print "Total of amounts: %s mBTC" % str(
        decimal.Decimal(totalAmount) / mBTC)

    fee = int(0.01 * mBTC)
    print "Transaction fee is set to: %s mBTC" % str(
        decimal.Decimal(fee) / mBTC)

    destAddress = raw_input("Destination address: ")
    destHash = base58.decodeBase58Check(destAddress, 0)  #PUBKEY_ADDRESS = 0
    destAmount = int(
        decimal.Decimal(raw_input("Amount to send to destination (mBTC): ")) *
        mBTC)
    if destAmount < 0:
        print "Negative amount is not allowed"
        sys.exit(2)
    if destAmount > totalAmount - fee:
        print "Not enough funds"
        sys.exit(1)

    changeKey = getKey("Address to send change amount to: ")
    changeAddress = getAddress(changeKey)
    changeHash = base58.decodeBase58Check(changeAddress,
                                          0)  #PUBKEY_ADDRESS = 0

    tx = btx.Transaction(
        tx_in=[btx.TxIn(x[0], x[1]) for x in inputs],
        tx_out=[btx.TxOut(destAmount, btx.Script.standardPubKey(destHash))])
    changeAmount = totalAmount - destAmount - fee
    if changeAmount < 0:
        raise Exception("Error: got negative change amount")
    elif changeAmount == 0:
        print "Note: change amount is zero - no change is sent"
    else:
        tx.tx_out.append(
            btx.TxOut(changeAmount, btx.Script.standardPubKey(changeHash)))

    for i in range(len(inputs)):
        #print tx.tx_in[i].previousOutputHash.encode("hex"), tx.tx_in[i].previousOutputIndex
        key = inputs[i][2]
        address = getAddress(key)
        hash = base58.decodeBase58Check(address, 0)  #PUBKEY_ADDRESS = 0
        scriptPubKey = btx.Script.standardPubKey(hash)
        tx.signInput(i, scriptPubKey, [None, key.getPublicKey()], [key])

    print "Serialized transaction:"
    print tx.serialize().encode("hex")
    print "Transaction ID:", tx.getTransactionID()[::-1].encode("hex")