π ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±ΠΈΡΠΊΠΎΠΈΠ½ python: ΠΎΠ±Π·ΠΎΡ ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ Π³Π°ΠΉΠ΄
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±ΠΈΡΠΊΠΎΠΈΠ½ Π² Python
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π±ΠΈΡΠΊΠΎΠΈΠ½ Π² Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ bitcoinlib. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
from bitcoinlib.transactions import Transaction, TxInput, TxOutput
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
transaction = Transaction()
# ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ
ΠΎΠ΄Π° Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ
input = TxInput(previous_output="previous_tx_hash", index=0)
transaction.add_input(input)
# ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΡ
ΠΎΠ΄Π° ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
output = TxOutput(address="recipient_address", value=0.01)
transaction.add_output(output)
# ΠΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ
private_key = "your_private_key"
transaction.sign(private_key)
# ΠΡΠ²ΠΎΠ΄ ΡΡΡΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
raw_tx = transaction.serialize()
print(raw_tx)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π²Ρ ΠΎΠ΄ ΠΈ Π²ΡΡ ΠΎΠ΄, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΡΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ.
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ "previous_tx_hash", "recipient_address" ΠΈ "your_private_key" Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±ΠΈΡΠΊΠΎΠΈΠ½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Python
ΠΠΈΡΠΊΠΎΠΈΠ½ (Bitcoin) - ΡΡΠΎ ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π»ΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½ (blockchain) Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±ΠΈΡΠΊΠΎΠΈΠ½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python.
1. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Python, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²Π°ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±ΠΈΡΠΊΠΎΠΈΠ½ΠΎΠΌ. ΠΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ - ΡΡΠΎ bitcoinlib. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pip install bitcoinlib
2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π±ΠΈΡΠΊΠΎΠΈΠ½ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΈΡΠΊΠΎΠΈΠ½-Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Ρ ΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π²Π°ΡΠ΅Π³ΠΎ Π±ΠΈΡΠΊΠΎΠΈΠ½-ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°. ΠΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ ΠΈ Π½Π΅ ΡΠ°ΡΠΊΡΡΠ²Π°ΠΉΡΠ΅ Π΅Π³ΠΎ Π½ΠΈΠΊΠΎΠΌΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° Python, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±ΠΈΡΠΊΠΎΠΈΠ½:
from bitcoinlib.wallets import Wallet
from bitcoinlib.transactions import Transaction
# ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°
private_key = "ΠΠ°Ρ_ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ_ΠΊΠ»ΡΡ"
wallet = Wallet.import_privkey(private_key)
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
tx_data = {
'inputs': [{'address': 'ΠΠ°Ρ_Π°Π΄ΡΠ΅Ρ_ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°'}],
'outputs': [{'address': 'ΠΠ΄ΡΠ΅Ρ_ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ', 'value': 0.01}],
}
tx = Transaction.create(wallet, **tx_data)
tx.sign(wallet)
tx.serialize()
# ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
tx.send(rawtx=True)
Π ΠΊΠΎΠ΄Π΅ Π²ΡΡΠ΅ ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ bitcoinlib. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ². ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅Π΅ Π² ΡΠΎΡΠΌΠ°Ρ, ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Ρ, ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ.
3. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
ΠΠΎΡΠ»Π΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΅Π΅ ΡΡΠ°ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΡΠΊΠΎΠΈΠ½-Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»ΠΈ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ blockchain.com ΠΈΠ»ΠΈ blockexplorer.com. ΠΡΠΎΡΡΠΎ Π²Π²Π΅Π΄ΠΈΡΠ΅ Ρ ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ, ΠΈ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±ΠΈΡΠΊΠΎΠΈΠ½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python. ΠΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π΅Π΅. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π±ΠΈΡΠΊΠΎΠΈΠ½ΠΎΠΌ.