2014-11-07 1 views
1

이 나는 ​​비트 코인 주소 유효성 검사기를 작성하는 것을 시도하고있다, 그리고 나는 파이썬 2와 함께 작동하도록 노력하고, 3사용`bytes` 3

import codecs 
from hashlib import sha256 

digits58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' 

def to_bytes(n, length): 
    s = '%x' % n 
    s = s.rjust(length*2, '0') 
    s = codecs.decode(bytes(s, 'UTF-8'), 'hex_codec') 
    return s 

def decode_base58(bc, length): 
    n = 0 
    for char in bc: 
     n = n * 58 + digits58.index(char) 
    return to_bytes(n, length) 

def check_bc(bc): 
    bcbytes = decode_base58(bc, 25) 
    return bcbytes[-4:] == sha256(sha256(bcbytes[:-4]).digest()).digest()[:4] 

if __name__ == '__main__': 
    print(check_bc('1111111111111111111114oLvT2')) 

이 코드 실행 및 인쇄 True한다 . 파이썬 2에서이 라인 대신, 오류 :

s = codecs.decode(bytes(s, 'UTF-8'), 'hex_codec') 

오류 : 나는 'UTF-8'부분을 제거하면, 대신 파이썬 3으로 나누기

TypeError: str() takes at most 1 argument (2 given) 

. 나는 모두 bytes에 호출을 제거하면, 그것은 대신 bytes를 호출하는 파이썬 3

답변

4

IIUC에서 휴식을 수행 할 수 있습니다 encode 직접 :

[email protected]:~/coding$ python2.7 bitcoin.py 
True 
[email protected]:~/coding$ python3.4 bitcoin.py 
True 
을 제공
s = codecs.decode(s.encode("UTF-8"), 'hex_codec') 

하는