-
Notifications
You must be signed in to change notification settings - Fork 9
/
burn-homeless
91 lines (66 loc) · 2.18 KB
/
burn-homeless
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
#! /usr/bin/env python
"""
burn-homeless: create a HTH Homeless coin burn address.
This script was used to create the burn address for unswapped premine coins: hThBurnHTHinvaLidCoinBurNeDXZZGJjn
Original: burn-btc By James C. Stroud
This program requries base58 (https://pypi.python.org/pypi/base58/0.2.1).
Call the program with a template burn address as the only argument::
% burn-homeless hThBurnHTHinvaLidCoinBurNeDXXXXXXX
hThBurnHTHinvaLidCoinBurNeDXZZGJjn
For instructions, call the program with no arguments::
% burn-homeless
usage: burn-homeless TEMPLATE
TEMPLATE - 34 letters & numbers (no zeros)
the first two are coin specific
An example template is accessible using "test" as the argument::
% burn-homeless test
hThBurnHTHinvaLidCoinBurNeDXZZGJjn
Validate bitcoin burn addresses at http://uncaptcha.net/bitcoin.php
"""
import sys
import binascii
from hashlib import sha256
from base58 import b58encode, b58decode
ABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
class BurnBTCError(Exception):
pass
class AlphabetError(BurnBTCError):
pass
def hh256(s):
s = sha256(s).digest()
return binascii.hexlify(sha256(s).digest())
def b58ec(s):
unencoded = str(bytearray.fromhex(unicode(s)))
encoded = b58encode(unencoded)
return encoded
def b58dc(encoded, trim=0):
unencoded = b58decode(encoded)[:-trim]
return unencoded
def burn(s):
decoded = b58dc(s, trim=4)
decoded_hex = binascii.hexlify(decoded)
check = hh256(decoded)[:8]
coded = decoded_hex + check
return b58ec(coded)
def usage():
print "usage: burn-homeless TEMPLATE"
print
print " TEMPLATE - 34 letters & numbers (no zeros)"
print " the first two are coin specific"
raise SystemExit
if __name__ == "__main__":
if len(sys.argv) != 2:
usage()
if sys.argv[1] == "test":
template = "hThBurnHTHinvaLidCoinBurNeDXZZGJjn"
else:
template = sys.argv[1]
for c in template:
if c not in ABET:
raise AlphabetError("Character '%s' is not valid base58." % c)
tlen = len(template)
if tlen < 34:
template = template + ((34 - tlen) * "X")
else:
template = template[:34]
print burn(template)