|
Post by tedskyvell on Apr 24, 2018 20:47:08 GMT 1
EDIT: Blev inte så snyggt när jag skickade in inlägget, alla indentioner och sånt försvann. Kanske bättre jag skickar fil till någon av er handledare? Eller hur brukar ni göra? Jag försöker först och främst skicka BTE från en egengenererad address till en annan egengenerarad innan jag skriver ihop något snyggare. Jag har skrivit in lite frågetecken som kommentarer i koden nedan Detta har jag fått ihop: import requests import json import os rpc_user = 'Ted' rpc_pass = 'Skyvell' url = 'http://{}:{}@localhost:8332'.format(rpc_user, rpc_pass) headers = {'content-type': 'application/json'} def getrawtransaction(txid): payload = {'method': "getrawtransaction", 'params': [txid, True]} response = requests.post(url, data=json.dumps(payload), headers=headers) response = response.json()['result'] return response #Transaktionen for outputen jag vill spendera "n":1 rawtxdata = getrawtransaction("e1aa381730cbe2a58fd73fd577af4f9a48a86be1429eec9187d102d90af2d09c") def createrawtransaction(tx_inputs, tx_outputs): """ Generates a raw transaction with previous output specified as input. Arguments inputs (list) -- A list containing elements of dictionary objects, each specifying an output to use as inputs. Each dictionary requires txid and vout. output (list) -- A dictionary specifying adress (key) to recieve payment and amount (value). return Unsigned raw transaction in serialized transaction format encoded as hex (str). """ payload = {'method': "createrawtransaction", 'params': [tx_inputs, tx_outputs]} response = requests.post(url, data=json.dumps(payload), headers=headers) response = response.json()['result'] return response #Outputs to use as input tx_inputs = [ { 'txid': "e1aa381730cbe2a58fd73fd577af4f9a48a86be1429eec9187d102d90af2d09c", 'vout': 1 } ] #address and amount to send to tx_outputs = {'17yv2R3sPxavAr8hdEP7BAdEFxbzb4M4v1': 1} #generate a transaction with hex-encoding. Här händer något konstigt... #kör jag rawtx (nedan) i tex blockchain.info/sv/decode-tx så får jag en #output på "value":100000000 vilket verkar rätt skumt .. Står något om att createrawtransaction kräver P2SH addresser --> problem? rawtx = createrawtransaction(tx_inputs, tx_outputs) #Kan väl ta en titt på koden nedan och se så inget ser tokigt ut, får ett värde None på signedtx variabeln nedan, men kan ju bero på att det spökar lite i koden ovan .. def signrawtransaction(rawtx_hex, tx_outputs, pvkey): payload = {'method': "signrawtransaction", 'params': [tx, tx_outputs, pvkey]} response = requests.post(url, data=json.dumps(payload), headers=headers) response = response.json()['result'] return response tx_outputs2 = [ { 'txid': "e1aa381730cbe2a58fd73fd577af4f9a48a86be1429eec9187d102d90af2d09c", 'vout': 1, 'scriptPubKey': "76a91429b05346bd6dff1b6c09579d31e2d1747e6ef49788ac" } ] pvkey = ["L4tN8ZDJTBG655XhF5V3WdbzJZtUV2Yex1AfVYaBHj3XX5BjrFp5"] signedtx = signrawtransaction(rawtx, tx_outputs2, pvkey)
|
|
|
Post by thomaslundqvist on Apr 25, 2018 15:20:18 GMT 1
EDIT: Blev inte så snyggt när jag skickade in inlägget, alla indentioner och sånt försvann. Kanske bättre jag skickar fil till någon av er handledare? Eller hur brukar ni göra? Ibland är epost bättre men forum helt okej. Använd gärna code-knappen för att formatera kod lite snyggare... Det kan vara smart att lägga till ett test om response['error'] finns definierat och skriva ut felet i så fall... Tja, värdet anges nog i satoshis och då stämmer det nog fint. Det borde gå fint att avkoda men den är ju osignerad, kanske blir lite konstigt... Jag skulle hoppat över tx_outputs. De behövs inte när den tidigare transaktionen redan finns i blockkedjan, skicka med None istället... Borde fungera, men kolla gärna 'error' i svaren...
|
|
|
Post by tbergstrom on Apr 28, 2018 19:58:07 GMT 1
Hej, det är kanske senaste laget, men vad jag än gör så kan jag inte signera den andra transaktionen. Första transaktionen som jag gör från blockkedjan kommer jag förbi signeringen med hjälp av "walletpassphrase". Dock när jag ska göra den andra transaktionen från den txid jag får som svar efter första så lyckas jag inte signera hur jag än gör.
{'hex': '0200000001a602be0014b5437cbe9ff82c825cf0563a939b43714ba1106b8db0f8ace317640000000000ffffffff0140548900000000001976a914dec27d3d1c22062781663be9d623d45aa442531188ac00000000', 'complete': False, 'errors': [{'txid': '6417e3acf8b08d6b10a14b71439b933a56f05c822cf89fbe7c43b51400be02a6', 'vout': 0, 'witness': [], 'scriptSig': '', 'sequence': 4294967295, 'error': 'Unable to sign input, invalid stack size (possibly missing key)'}]}
Alltså 'Unable to sign input, invalid stack size (possibly missing key)' får jag oavsett om jag skickar en private key eller inte. Mina RPC-metoder ser ut som följande:
def create_raw_transaction(txid, vout, outputs): payload = { "method": "createrawtransaction", "params": [[{'txid': txid, 'vout': vout}], outputs], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result']
def sign_raw_transaction(tx, outputs, key): payload = { "method": "signrawtransaction", "params": [tx, outputs, key], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result']
def send_raw_transaction(tx): payload = { "method": "sendrawtransaction", "params": [tx], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result']
|
|
geir
New Member
Posts: 9
|
Post by geir on Apr 28, 2018 20:45:34 GMT 1
Hej, det är kanske senaste laget, men vad jag än gör så kan jag inte signera den andra transaktionen. Första transaktionen som jag gör från blockkedjan kommer jag förbi signeringen med hjälp av "walletpassphrase". Dock när jag ska göra den andra transaktionen från den txid jag får som svar efter första så lyckas jag inte signera hur jag än gör. {'hex': '0200000001a602be0014b5437cbe9ff82c825cf0563a939b43714ba1106b8db0f8ace317640000000000ffffffff0140548900000000001976a914dec27d3d1c22062781663be9d623d45aa442531188ac00000000', 'complete': False, 'errors': [{'txid': '6417e3acf8b08d6b10a14b71439b933a56f05c822cf89fbe7c43b51400be02a6', 'vout': 0, 'witness': [], 'scriptSig': '', 'sequence': 4294967295, 'error': 'Unable to sign input, invalid stack size (possibly missing key)'}]} Alltså 'Unable to sign input, invalid stack size (possibly missing key)' får jag oavsett om jag skickar en private key eller inte. Mina RPC-metoder ser ut som följande: def create_raw_transaction(txid, vout, outputs): payload = { "method": "createrawtransaction", "params": [[{'txid': txid, 'vout': vout}], outputs], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] def sign_raw_transaction(tx, outputs, key): payload = { "method": "signrawtransaction", "params": [tx, outputs, key], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] def send_raw_transaction(tx): payload = { "method": "sendrawtransaction", "params": [tx], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] Jag har brottats med samma problem själv i några dagar nu, utan att ha kommit fram till varför och vad detta felet beror på Men du skall kunna signera en transaktion utan att ange en privat nyckel (är väl inte helt rätt enligt uppgift - Ange None bara), men då får jag ett " absurdly-high-fee" fel i SendRawTransaction metoden.
|
|
|
Post by tbergstrom on Apr 28, 2018 21:02:17 GMT 1
Hej, det är kanske senaste laget, men vad jag än gör så kan jag inte signera den andra transaktionen. Första transaktionen som jag gör från blockkedjan kommer jag förbi signeringen med hjälp av "walletpassphrase". Dock när jag ska göra den andra transaktionen från den txid jag får som svar efter första så lyckas jag inte signera hur jag än gör. {'hex': '0200000001a602be0014b5437cbe9ff82c825cf0563a939b43714ba1106b8db0f8ace317640000000000ffffffff0140548900000000001976a914dec27d3d1c22062781663be9d623d45aa442531188ac00000000', 'complete': False, 'errors': [{'txid': '6417e3acf8b08d6b10a14b71439b933a56f05c822cf89fbe7c43b51400be02a6', 'vout': 0, 'witness': [], 'scriptSig': '', 'sequence': 4294967295, 'error': 'Unable to sign input, invalid stack size (possibly missing key)'}]} Alltså 'Unable to sign input, invalid stack size (possibly missing key)' får jag oavsett om jag skickar en private key eller inte. Mina RPC-metoder ser ut som följande: def create_raw_transaction(txid, vout, outputs): payload = { "method": "createrawtransaction", "params": [[{'txid': txid, 'vout': vout}], outputs], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] def sign_raw_transaction(tx, outputs, key): payload = { "method": "signrawtransaction", "params": [tx, outputs, key], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] def send_raw_transaction(tx): payload = { "method": "sendrawtransaction", "params": [tx], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] Jag har brottats med samma problem själv i några dagar nu, utan att ha kommit fram till varför och vad detta felet beror på Men du skall kunna signera en transaktion utan att ange en privat nyckel (är väl inte helt rätt enligt uppgift - Ange None bara), men då får jag ett " absurdly-high-fee" fel i SendRawTransaction metoden. Precis, har provat utan privat nyckel men just det problemet kvarstår för mig då, så det gör ingen skillnad :/ När du får absurdly-high-fee, hur stort belopp är tillgängligt från den output du vill betala med? T.ex. om det är 50 BTE och du bara vill göra en betalning på 1 BTE så återstår 49, så du får ta och skicka tillbaka 48.9 eller något åt det hållet till din egna plånbok. Så här t.ex: outputs = {address_to_pay: 1, my_address: 48.9}. Det var iaf så jag gjorde för att bli av med det felet under första transaktionen jag gör
|
|
|
Post by satoshi on Apr 28, 2018 23:14:07 GMT 1
def sign_raw_transaction(tx, outputs, key): payload = { "method": "signrawtransaction", "params": [tx, outputs, key], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] Jag har också haft problem, fått felet "Input not found or already spent." och "Unable to sign input, invalid stack size (possibly missing key)". tbergstrom , om jag inte misstar mig, är det inte input, dvs tidigare transaktioner som skickas, och inte output? se funktionen sign_raw_transaction, andra argumentet. Den är inte heller ett måste, man kan skicka med värdet None. Jag fick mitt och fungera när jag la till scriptPubKey : hex-värdet, i input. Aldrig varit med om att det är så svårt att hitta hjälp på nätet, känner ni också så?
|
|
|
Post by tbergstrom on Apr 29, 2018 9:34:02 GMT 1
def sign_raw_transaction(tx, outputs, key): payload = { "method": "signrawtransaction", "params": [tx, outputs, key], } return requests.post(url, data=json.dumps(payload), headers=headers).json()['result'] Jag har också haft problem, fått felet "Input not found or already spent." och "Unable to sign input, invalid stack size (possibly missing key)". tbergstrom , om jag inte misstar mig, är det inte input, dvs tidigare transaktioner som skickas, och inte output? se funktionen sign_raw_transaction, andra argumentet. Den är inte heller ett måste, man kan skicka med värdet None. Jag fick mitt och fungera när jag la till scriptPubKey : hex-värdet, i input. Aldrig varit med om att det är så svårt att hitta hjälp på nätet, känner ni också så? Ok, ja jag har provat med att bara skicka txid och None för både outputs och key utan success, men du skickar alltså in scriptPubKey i outputs? Ska ta och testa, tack för tipset! Jag instämmer, lite svårt att hitta hjälp är det!
|
|
|
Post by thomaslundqvist on May 1, 2018 15:03:10 GMT 1
Hej! Dokumentationen på nätet är lite splittrad, ibland är det bra Några saker att tänka på: - Se till att txindex är igång, annars hittar bara noden de transaktionsid som tillhör plånboken
- Om txindex är igång så behövs ingen pubscript vid create, noden letar upp rätt transaktion och output som ska spenderas
- När man signerar så ska det räcka med den privata nyckeln som hör till inputen, om adressen tillhör plånboken kan man fuska och strunta i att skicka med något
Normalt ska ju våra egengenererade adresser inte tillhöra plånboken. Alltså borde man behöva skicka med den privata nyckeln...
|
|
l8
New Member
Posts: 31
|
Post by l8 on May 1, 2018 18:40:50 GMT 1
Hej, Jag har lite problem med createrawtransaction där jag skickar in värden på txid, vout, address (address använder jag en som jag precis genererat). def make_rawtransaction_call(txid, vout, address, amount): payload = { "method": "createrawtransaction", "params": [[{'txid': str(txid), 'vout': int(vout)}], [{str(address): float(amount)}]] } response = get_response(payload) print(response) Följande fel får jag så jag gissar det är något fel i syntaxen? Expected type object, got Array
Värdena på txid och vout har jag plockat från en av raderna jag får ut när jag gör: listunspent.
Någon som ser något uppenbarligt fel?
|
|
l8
New Member
Posts: 31
|
Post by l8 on May 1, 2018 21:58:05 GMT 1
Nu verkar detfunka iaf...
def make_rawtransaction_call(txid, vout, address, amount): param1 = {"txid": str(txid), "vout": int(vout)} param2 = {str(address): float(amount)} payload = { "method": "createrawtransaction", "params": [[param1], param2] }
|
|
l8
New Member
Posts: 31
|
Post by l8 on May 2, 2018 6:42:16 GMT 1
Hej! Dokumentationen på nätet är lite splittrad, ibland är det bra Några saker att tänka på: - Se till att txindex är igång, annars hittar bara noden de transaktionsid som tillhör plånboken
- Om txindex är igång så behövs ingen pubscript vid create, noden letar upp rätt transaktion och output som ska spenderas
- När man signerar så ska det räcka med den privata nyckeln som hör till inputen, om adressen tillhör plånboken kan man fuska och strunta i att skicka med något
Normalt ska ju våra egengenererade adresser inte tillhöra plånboken. Alltså borde man behöva skicka med den privata nyckeln...
|
|
l8
New Member
Posts: 31
|
Post by l8 on May 2, 2018 6:44:33 GMT 1
Hej, Jag förstår inte ”se till atttxindex är igång”. Hur ser man till att txindex är igång? Mvh L8
|
|
|
Post by thomaslundqvist on May 2, 2018 15:53:11 GMT 1
Jag förstår inte ”se till atttxindex är igång”. Hur ser man till att txindex är igång? txindex=1 i bitcoin.conf
|
|
l8
New Member
Posts: 31
|
Post by l8 on May 2, 2018 16:31:49 GMT 1
OK. Tack!
|
|
l8
New Member
Posts: 31
|
Post by l8 on May 2, 2018 17:23:17 GMT 1
Hej, Hmmm - jag tror inte jag riktigt förstår hur det funkar med APIet... Nu får jag fel när jag försöker signa: def make_sign_raw_transaction_call(id, txid, vout, address, amount): param1 = str(id) param2 = {"txid": str(txid), "vout": int(vout)} payload = { "method": "signrawtransaction", "params": [param1, param2] } I detta fall använder jag en transaction som input som finns i plånboken så då behövs ingen nyckel? {'result': None, 'error': {'code': -3, 'message': 'Expected type array, got object'}, 'id': None}
|
|