транзакция командной строки pycoin

Есть ли быстрый способ выполнять транзакции, зная только закрытый ключ (секретный показатель) и адрес назначения, предпочтительно из утилиты командной строки, такой как pycoin?

Я использую Debian/Ubuntu и Python 2.7.

Вам нужно будет уточнить, какую версию ОС и Python вы используете. Предполагая, что Win/Posix, Python 2.7 pybitcointools имеет отличный интерфейс командной строки. Хотя я согласен, что Pycoin — отличный инструмент для простоты. Более сложные варианты использования в posix могут использовать SX/libbitcoin.
В настоящее время я использую Ubuntu с Python 2.7.6.

Ответы (4)

Чтобы создать транзакцию, вам нужна цепочка блоков или, по крайней мере, транзакции в цепочке блоков, которые принадлежат определенному адресу (технический термин — неизрасходованные выходы транзакций или UTXO для определенного скрипта). Это может произойти тремя способами:

  1. У вас установлен локальный биткойн или btcd, который позволит вам запрашивать транзакции за счет загрузки всего блокчейна.

  2. Вы используете электрум или какой-либо другой сервер SPV для запроса транзакций за счет подключения к этим узлам.

  3. Вы используете централизованную службу, такую ​​как blockchain.info, для сбора всех транзакций за счет необходимости доверять централизованной службе, чтобы она работала все время и не была повреждена.

В любом случае вы не сможете получить данные транзакции из библиотеки Python, которая не подключается к какой-либо другой службе. Следовательно, такие инструменты, как pybitcointools или pycoin, не дадут вам того, что вам нужно. sx имеет несколько инструментов для поиска utxos с помощью метода №3.

Вы можете установить Armory или bitcoind и импортировать закрытый ключ и использовать метод № 1 выше или использовать что-то вроде pi-wallet и использовать метод № 2.

Для Ubuntu, Python 2.7 (такая же установка, как у меня) я настоятельно рекомендую:

  1. pybitcointools (установите с помощью pip install pybitcointools для версии 1.1.15 или pip install bitcoin для версии 1.1.25 (рекомендуется)
  2. сх/libbitcoin . Возможно, потребуется установить с помощью сценария mastercoin install.sh , в зависимости от того, работают ли зависимости (у меня были проблемы с использованием Tasty Tahr Ubuntu 14.04).

Оба являются интерфейсами командной строки, и оба работают одинаково, позволяя передавать переменные и т. д. Однако pybitcointools , похоже, поддерживает функцию истории адресов (вызов API для Blockchain.info/Blockr.io), а документация поддержки для pybitcointools кажется более понятной, чем краткое руководство по сексу .

+1 У вас случайно нет примера, как выполнить транзакцию, зная только WIF и адрес назначения?
Из справочной страницы мне не очень понятно, как указывается адрес назначения.
Конечно. Я сделаю это, как только уйду с iOS. Мне нужно поиграться, и я опубликую это здесь через ~ 12 часов.
@Sebi, просто чтобы уточнить, вы хотите создать необработанный Txn и отправить BTC со своего адреса (то есть с закрытым ключом) на другой адрес, верно?
да, это то, что я хочу
Хорошо, я отредактирую соответственно. Инструменты SX — это то, как я поступал в прошлом. Прочтите bitcoin.stackexchange.com/questions/32219/… , если у вас есть проблемы с зависимостями, так как я добавлю процедуры как для SX, так и для pybitcointools.

Использование инструментов SX.

В командной строке bash создайте файл закрытого ключа WIF с именем private.key1MBngSqZbMydscpzSoehjP8kznMaHAzh9y со следующими данными внутри: 5HvofFG7K1e2aeWESm5pbCzRHtCSiZNbfLYXBvxyA57DhKHV4U3. К вашему сведению, закрытый ключ (как обсуждалось здесь ) — это мозговой кошелек mrbubbymrbubbymrbubby! (что круто, т.к. 1МБ ≈ фраза брейнволнета)

Хорошо, теперь мы запускаем эти псевдонимы/команды в точном указанном порядке (комментарии узла объясняют каждый шаг):

  1. DECODED_ADDR=$(cat private.key | sx addr | sx decode-addr) # hash160
  2. PREVOUT_SCRIPT=$(sx rawscript dup hash160 [ $DECODED_ADDR ] equalverify checksig) # hash160 + script padding
  3. SIGNATURE=$(cat private.key | sx sign-input txfile.tx 0 $PREVOUT_SCRIPT) # 72 digit der signature
  4. SIGNATURE_AND_PUBKEY_SCRIPT=$(sx rawscript [ $SIGNATURE ] [ $(cat private.key | sx pubkey) ]) # 278 digit script/sig/pubkey
  5. sx set-input txfile.tx 0 $SIGNATURE_AND_PUBKEY_SCRIPT > txfile.tx.signed # 192 digit signed txn

В этом случае псевдонимы дают следующее:

  • DECODED_ADDR=dd6cce9f255a8cc17bda8ba0373df8e861cb866e
  • PREVOUT_SCRIPT=76a914dd6cce9f255a8cc17bda8ba0373df8e861cb866e88ac
  • SIGNATURE=3045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e01
  • SIGNATURE_AND_PUBKEY_SCRIPT=483045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9

ОКОНЧАТЕЛЬНЫЙ ПОДПИСАННЫЙ TXN:

Вот окончательный необработанный Txn, который отправляет BTC на 14zWNsgUMmHhYx4suzc2tZD6HieGbkQi5s.

0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396000000008b483045022100da43201760bda697222002f56266bf65023fef2094519e13077f777baed553b102205ce35d05eabda58cd50a67977a65706347cc25ef43153e309ff210a134722e9e0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000

Содержимое файла:

private.key = 5HvofFG7K1e2aeWESm5pbCzRHtCSiZNbfLYXBvxyA57DhKHV4U3txfile.tx = 0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d53960000000000ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000rawscript.sigpubkey.tx = 473044022054f60e8ae19411541597167362d12fc132e081a546c766bfd69c16d9d58e268a022048055c7fd8bf78e48543e8756bb3b26336df35b812a184119ba0e9d525bbb8aa0141042daa93315eebbe2cb9b5c3505df4c6fb6caca8b756786098567550d4820c09db988fe9997d049d687292f815ccd6e7fb5c1b1a91137999818d17c73d0f80aef9signed.tx =0100000001be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396000000000b00000c0000000000000000ffffffff0123ce0100000000001976a9142bc89c2702e0e618db7d59eb5ce2f0f147b4075488ac00000000

вот пример транзакции на testnet( https://github.com/suhailvs/bitcoin-code/tree/testnet ) , которая вам нужна private keyи имеет выходной адрес, который относится к данному приватному ключу:destination addressprevious transacion hash

import hashlib
import txnUtils
from keyUtils import keyToAddr, addrToScriptPubkey

# From --> one input
privateKey = hashlib.sha256('abcdefghijklmnop').hexdigest() # mpSyb71528U8dQjuTCeDCcJqH8dQTyY13c
from_address= keyToAddr(privateKey,testnet=True)
txn_hash = "3c24ca820100153fb43434191d10464dd2dcd13f0c9aa07d15f7330e8bcd0596"

# To --> android testnet wallet
to_address = 'miD4PnSDWC2M725hvFBoBhNn8fbowoHnnS'

# Sign the Transction
signed_txn = txnUtils.makeSignedTransaction(
    privateKey, txn_hash, 0, addrToScriptPubkey(from_address), # input: has balance 0.01btc
    [[900000,addrToScriptPubkey(to_address)]] # outputs: 0.009btc 
)

print 'SIGNED TXN', signed_txn

# Broadcast this transaction(ie: signed_txn) at:
# https://testnet.blockexplorer.com/tx/send