Bitcoin Forum
May 01, 2024, 09:55:08 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Suche jemanden der Phyton 2.7 nach 3.4 portiert  (Read 3077 times)
cagrund (OP)
Legendary
*
Offline Offline

Activity: 1372
Merit: 1000


CTO für den Bundesverband Bitcoin e. V.


View Profile WWW
January 31, 2016, 01:30:42 PM
 #1

Hallo zusammen,

wie der Titel schon sagt suche ich jemanden der mir ein Pyhton Script 2.7 (ca. 120 Zeilen) nach Pyhton 3.4 portiert.

Vllt. findet sich hier ja ein Python-Spezialist der dass so aus dem Handgelenk schütteln kann.


Hier mal der Code:

Quote

#!/usr/bin/python
#
# linearize.py:  Construct a linear, no-fork, best version of the blockchain.
#
#
# Copyright (c) 2013 The Bitcoin developers
# Distributed under the MIT/X11 software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
#

import json
import struct
import re
import base64
import httplib
import sys

ERR_SLEEP = 15
MAX_NONCE = 1000000L

settings = {}

class BitcoinRPC:
   OBJID = 1

   def __init__(self, host, port, username, password):
      authpair = "%s:%s" % (username, password)
      self.authhdr = "Basic %s" % (base64.b64encode(authpair))
      self.conn = httplib.HTTPConnection(host, port, False, 30)
   def rpc(self, method, params=None):
      self.OBJID += 1
      obj = { 'version' : '1.1',
         'method' : method,
         'id' : self.OBJID }
      if params is None:
         obj['params'] = []
      else:
         obj['params'] = params
      self.conn.request('POST', '/', json.dumps(obj),
         { 'Authorization' : self.authhdr,
           'Content-type' : 'application/json' })

      resp = self.conn.getresponse()
      if resp is None:
         print "JSON-RPC: no response"
         return None

      body = resp.read()
      resp_obj = json.loads(body)
      if resp_obj is None:
         print "JSON-RPC: cannot JSON-decode body"
         return None
      if 'error' in resp_obj and resp_obj['error'] != None:
         return resp_obj['error']
      if 'result' not in resp_obj:
         print "JSON-RPC: no result in object"
         return None

      return resp_obj['result']
   def getblock(self, hash, verbose=True):
      return self.rpc('getblock', [hash, verbose])
   def getblockhash(self, index):
      return self.rpc('getblockhash', [index])

def getblock(rpc, settings, n):
   hash = rpc.getblockhash(n)
   hexdata = rpc.getblock(hash, False)
   data = hexdata.decode('hex')

   return data

def get_blocks(settings):
   rpc = BitcoinRPC(settings['host'], settings['port'],
          settings['rpcuser'], settings['rpcpassword'])

   outf = open(settings['output'], 'ab')

   for height in range(settings['min_height'], settings['max_height']+1):
      data = getblock(rpc, settings, height)

      outhdr = settings['netmagic']
      outhdr += struct.pack("<i", len(data))

      outf.write(outhdr)
      outf.write(data)

      if (height % 1000) == 0:
         sys.stdout.write("Wrote block " + str(height) + "\n")

if __name__ == '__main__':
   if len(sys.argv) != 2:
      print "Usage: linearize.py CONFIG-FILE"
      sys.exit(1)

   f = open(sys.argv[1])
   for line in f:
      # skip comment lines
      m = re.search('^\s*#', line)
      if m:
         continue

      # parse key=value lines
      m = re.search('^(\w+)\s*=\s*(\S.*)$', line)
      if m is None:
         continue
      settings[m.group(1)] = m.group(2)
   f.close()

   if 'netmagic' not in settings:
      settings['netmagic'] = 'f9beb4d9'
   if 'output' not in settings:
      settings['output'] = 'bootstrap.dat'
   if 'host' not in settings:
      settings['host'] = '127.0.0.1'
   if 'port' not in settings:
      settings['port'] = 8332
   if 'min_height' not in settings:
      settings['min_height'] = 0
   if 'max_height' not in settings:
      settings['max_height'] = 279000
   if 'rpcuser' not in settings or 'rpcpassword' not in settings:
      print "Missing username and/or password in cfg file"
      sys.exit(1)


   settings['netmagic'] = settings['netmagic'].decode('hex')
   settings['port'] = int(settings['port'])
   settings['min_height'] = int(settings['min_height'])
   settings['max_height'] = int(settings['max_height'])

   get_blocks(settings)






Gruß Carsten.

1714600508
Hero Member
*
Offline Offline

Posts: 1714600508

View Profile Personal Message (Offline)

Ignore
1714600508
Reply with quote  #2

1714600508
Report to moderator
1714600508
Hero Member
*
Offline Offline

Posts: 1714600508

View Profile Personal Message (Offline)

Ignore
1714600508
Reply with quote  #2

1714600508
Report to moderator
No Gods or Kings. Only Bitcoin
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
psycodad
Legendary
*
Offline Offline

Activity: 1604
Merit: 1564


精神分析的爸


View Profile
January 31, 2016, 02:16:31 PM
 #2

Folgende Schritte sollten das erreichen:
Alle print "" durch print("") ersetzen,
L Deklaration weglassen (ist in Python3 nicht vorhanden, es gibt nur noch long)
httplib durch http.client ersetzen

Soweit ich das beurteilen kann, nichts drin was 2to3 nicht automatisch könnte:

Code:
2to3 -w xy.py

cagrund (OP)
Legendary
*
Offline Offline

Activity: 1372
Merit: 1000


CTO für den Bundesverband Bitcoin e. V.


View Profile WWW
January 31, 2016, 05:40:21 PM
 #3

Folgende Schritte sollten das erreichen:
Alle print "" durch print("") ersetzen,
L Deklaration weglassen (ist in Python3 nicht vorhanden, es gibt nur noch long)
httplib durch http.client ersetzen

Soweit ich das beurteilen kann, nichts drin was 2to3 nicht automatisch könnte:

Code:
2to3 -w xy.py

Hallo psycodad,

jepp soweit hatte ich es schon gebracht. - Problem besteht dann mit:

Quote
   settings['netmagic'] = settings['netmagic'].decode('hex')

Scheinbar gibt's das decode auch nicht mehr. - 2to3 konnte das nicht lösen.  Huh


Gruß Carsten.

psycodad
Legendary
*
Offline Offline

Activity: 1604
Merit: 1564


精神分析的爸


View Profile
January 31, 2016, 06:16:35 PM
 #4

Folgende Schritte sollten das erreichen:
Alle print "" durch print("") ersetzen,
L Deklaration weglassen (ist in Python3 nicht vorhanden, es gibt nur noch long)
httplib durch http.client ersetzen

Soweit ich das beurteilen kann, nichts drin was 2to3 nicht automatisch könnte:

Code:
2to3 -w xy.py

Hallo psycodad,

jepp soweit hatte ich es schon gebracht. - Problem besteht dann mit:

Quote
   settings['netmagic'] = settings['netmagic'].decode('hex')

Scheinbar gibt's das decode auch nicht mehr. - 2to3 konnte das nicht lösen.  Huh


Gruß Carsten.


Kanns leider nicht selber testen, aber mit dem decode Problem sollte Dir der untenstehende Link weiterhelfen:
http://stackoverflow.com/questions/3283984/decode-hex-string-in-python-3



cagrund (OP)
Legendary
*
Offline Offline

Activity: 1372
Merit: 1000


CTO für den Bundesverband Bitcoin e. V.


View Profile WWW
February 01, 2016, 11:31:42 PM
 #5

Also den Link habe ich mir angeschaut, aber irgendwie stehe ich total auf dem Schlauch.

Eigentlich ist alles klar, es ist "nur" noch diese verdammte Zeile ...

Code:
   settings['netmagic'] = settings['netmagic'].decode('hex')

Kann mal jemand schauen? - Danke & Gruß, Carsten.

psycodad
Legendary
*
Offline Offline

Activity: 1604
Merit: 1564


精神分析的爸


View Profile
February 02, 2016, 08:42:43 PM
 #6

Also den Link habe ich mir angeschaut, aber irgendwie stehe ich total auf dem Schlauch.

Eigentlich ist alles klar, es ist "nur" noch diese verdammte Zeile ...

Code:
   settings['netmagic'] = settings['netmagic'].decode('hex')

Kann mal jemand schauen? - Danke & Gruß, Carsten.


Was gibts denn für einen Fehler mit dem Befehl aus dem Stackoverflow Link ?
Code:
  settings['netmagic'] = bytes.fromhex(settings['netmagic']).decode('utf-8')

scriptfarm
Member
**
Offline Offline

Activity: 116
Merit: 11


View Profile
March 24, 2016, 04:22:10 PM
 #7

Das ist eine einfache Zeichenketten Operation die mit den meisten Websprachen wie Perl, PHP und Javascript funktionieren.
Der erste ist der Zuweisungsoperator, der zweite der Vereinigungs-Operator.

Das ist eine ganz normale Array Zuweisungen (a=c.b)




Spenden an das Tierheim Berlin, sind ausdrücklich erwünscht : 1H6B4GaxPTQKSysvrmjKgjwycUZonzf4Cp - Alle Tiere sagen Danke.
MrLehmann
Member
**
Offline Offline

Activity: 93
Merit: 10


View Profile
May 10, 2016, 04:24:41 PM
 #8

Also aus dem Kopf würde ich sagen du brauchst dafür in python3 codecs.decode

Also etwa so:

Code:
import codecs

.
.
.
settings['netmagic']  = codecs.decode( settings['netmagic'] , "hex_codec")

Also den Link habe ich mir angeschaut, aber irgendwie stehe ich total auf dem Schlauch.

Eigentlich ist alles klar, es ist "nur" noch diese verdammte Zeile ...

Code:
   settings['netmagic'] = settings['netmagic'].decode('hex')

Kann mal jemand schauen? - Danke & Gruß, Carsten.

Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!