Bitcoin Forum
May 22, 2024, 07:58:58 AM *
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.

psycodad
Legendary
*
Offline Offline

Activity: 1608
Merit: 1591


精神分析的爸


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: 1608
Merit: 1591


精神分析的爸


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: 1608
Merit: 1591


精神分析的爸


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!