-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsend_tx.py
More file actions
92 lines (77 loc) · 2.67 KB
/
send_tx.py
File metadata and controls
92 lines (77 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import sys
import time
import json
import hashlib
import base64
from ecdsa import SigningKey, SECP256k1
try:
import requests
except ImportError:
print("Erro: instale a biblioteca requests com 'pip install requests'")
sys.exit(1)
def gerar_chave_publica_hex(chave_privada_hex):
sk = SigningKey.from_string(bytes.fromhex(chave_privada_hex), curve=SECP256k1)
vk = sk.get_verifying_key()
return vk.to_string("compressed").hex()
def gerar_assinatura(chave_privada_hex, mensagem):
sk = SigningKey.from_string(bytes.fromhex(chave_privada_hex), curve=SECP256k1)
hash_msg = hashlib.sha256(mensagem.encode()).digest()
assinatura = sk.sign(hash_msg)
return base64.b64encode(assinatura).decode()
def send_transaction_http(tx, url='http://127.0.0.1:8082/enviar_transacao'):
try:
resp = requests.post(url, json=tx)
print("Status Code:", resp.status_code)
print("Resposta:", resp.text)
except Exception as e:
print("Erro ao enviar transação:", e)
def main():
if len(sys.argv) < 5:
print("Uso:")
print(" python send_tx.py <de> <chave_privada> <para> <quantidade>")
print(" python send_tx.py nft <de> <chave_privada> <para> <url_do_nft>")
return
if sys.argv[1] == "nft":
sender = sys.argv[2]
chave_privada = sys.argv[3]
recipient = sys.argv[4]
nft_url = sys.argv[5]
descricao = "Transferência NFT"
chave_publica = gerar_chave_publica_hex(chave_privada)
mensagem = f"nft_transfer:{sender}->{recipient};url:{nft_url}"
assinatura = gerar_assinatura(chave_privada, mensagem)
tx = {
"tipo": "nft_transfer",
"de": sender,
"para": recipient,
"nft_url": nft_url,
"descricao": descricao,
"assinatura": assinatura,
"chave_publica": chave_publica,
"timestamp": int(time.time())
}
send_transaction_http(tx)
return
# Transação padrão (moeda)
sender = sys.argv[1]
chave_privada = sys.argv[2]
recipient = sys.argv[3]
try:
amount = float(sys.argv[4])
except ValueError:
print("Quantidade inválida!")
return
chave_publica = gerar_chave_publica_hex(chave_privada)
mensagem = f"remetente:{sender};destinatario:{recipient};quantidade:{amount}"
assinatura = gerar_assinatura(chave_privada, mensagem)
tx = {
"de": sender,
"para": recipient,
"quantidade": amount,
"assinatura": assinatura,
"chave_publica": chave_publica,
"timestamp": int(time.time())
}
send_transaction_http(tx)
if __name__ == "__main__":
main()