From dacb6270d0568c70981f12f97e9b94f9f238a6bc Mon Sep 17 00:00:00 2001 From: Konrad Feldmeier Date: Sat, 30 Dec 2017 13:04:51 +0100 Subject: [PATCH] Import v0.0.1 --- MANIFEST.in | 1 + README.md | 33 +++++- blockies/__init__.py | 4 + blockies/blockies.py | 203 +++++++++++++++++++++++++++++++++++ blockies/vanity.py | 247 +++++++++++++++++++++++++++++++++++++++++++ setup.py | 21 ++++ 6 files changed, 507 insertions(+), 2 deletions(-) create mode 100644 MANIFEST.in create mode 100644 blockies/__init__.py create mode 100644 blockies/blockies.py create mode 100644 blockies/vanity.py create mode 100644 setup.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..d0dcb5b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +recursive-include blockies diff --git a/README.md b/README.md index e26ba62..d8f20fa 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,31 @@ -# blockies-py -blockies identicon python port for ANSI terminal output +# Blockies Identicons for ANSI Terminal + +python port of https://github.com/ethereum/blockies + +## Demo + +[![asciicast](https://asciinema.org/a/Ps8rtHqL8z8Ur9xx5OP6MfIYO.png)](https://asciinema.org/a/Ps8rtHqL8z8Ur9xx5OP6MfIYO) + +### Dependencies + +- python3 + +### Installation + + pip install git+https://github.com/konradkonrad/blockies-py.git + +### Usage + +#### Commandline + + blockies 0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359 + +#### From python + +```python +from blockies import create_blockie +rows = create_blockie('0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359') +# `rows` contains ansi escaped strings +for row in rows: + print(row) +``` diff --git a/blockies/__init__.py b/blockies/__init__.py new file mode 100644 index 0000000..bc225c8 --- /dev/null +++ b/blockies/__init__.py @@ -0,0 +1,4 @@ +__all__ = [ + 'blockies' +] +from blockies.blockies import create_blockie diff --git a/blockies/blockies.py b/blockies/blockies.py new file mode 100644 index 0000000..87bfdfb --- /dev/null +++ b/blockies/blockies.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python +""" +python port of https://github.com/ethereum/blockies for terminal output + +author: konrad@brainbot.com +""" +import sys +import math +import random +from itertools import islice +import colorsys +import ctypes + +LOWER = chr(9604) +RESET = '\033[39;49m' + + +def int32(num): + return ctypes.c_int32(num).value + + +def triple_shift(num): + """Emulate js `num >>> 0` behaviour""" + return int( + hex(num & 0xFFFFFFFF), + 16 + ) + + +class XORshiftPRNG(object): + """The random number is a port of the js implementation + of the Xorshift PRNG""" + def __init__(self, seed): + # Xorshift: [x, y, z, w] 32 bit values + self.randseed = [int32(0)] * 4 + self.seedrand(seed) + + def seedrand(self, seed): + for i in range(len(seed)): + self.randseed[i % 4] = int32( + self.randseed[i % 4] << 5 + ) - self.randseed[i % 4] + ord(seed[i]) + + def rand(self): + # based on Java's String.hashCode(), expanded to 4 32bit values + t = int32(self.randseed[0] ^ (self.randseed[0] << 11)) + self.randseed[0] = self.randseed[1] + self.randseed[1] = self.randseed[2] + self.randseed[2] = self.randseed[3] + self.randseed[3] = int32( + self.randseed[3] ^ (int32(self.randseed[3]) >> 19) ^ t ^ (t >> 8) + ) + + result = int32(triple_shift(self.randseed[3])) / triple_shift((1 << 31)) + return result + + +def sanity_check(): + # Sanity check (test that RNG has same result as js version) + first_rand = 0.2292061443440616 + seed = '0xfadc801b8b7ff0030f36ba700359d30bb12786e4' + test = XORshiftPRNG(seed) + assert test.rand() == first_rand + +sanity_check() + + +class Color(object): + def __init__(self, hue, light, saturation): + self.hue = hue + self.saturation = saturation + self.light = light + + @staticmethod + def createColor(prng): + # saturation is the whole color spectrum + hue = prng.rand() + + # saturation goes from 40 to 100, it avoids greyish colors + saturation = ((prng.rand() * .6) + .4) + # lightness can be anything from 0 to 100, but probabilities are a + # bell curve around 50% + light = ((prng.rand() + prng.rand() + prng.rand() + prng.rand()) * .25) + return Color(hue, light, saturation) + + @property + def numeric_rgb(self): + rgb = list(map(lambda c: math.floor(c * 256), colorsys.hls_to_rgb(*self.hls))) + return rgb + + @property + def hex_rgb(self): + rgb_hex = ''.join('{:02x}'.format(math.floor(c * 256)) for c in self.numeric_rgb) + return rgb_hex + + @property + def hls(self): + return (self.hue, self.light, self.saturation) + + +def createImageData(size, prng): + width = size # Only support square icons for now + height = size + + dataWidth = math.ceil(width / 2) + mirrorWidth = width - dataWidth + + data = [] + for y in range(height): + row = [] + for x in range(dataWidth): + # this makes foreground and background color to have a 43% (1/2.3) + # probability, spot color has 13% chance + row.append(math.floor(prng.rand() * 2.3)) + r = row[0:mirrorWidth] + r.reverse() + row.extend(r) + + for i in range(len(row)): + data.append(row[i]) + return data + + +class Options(object): + def __init__(self, + seed=None, + size=8, + color=None, + bgcolor=None, + spotcolor=None + ): + self.seed = seed or hex( + math.floor((random.random() * math.pow(10, 16))) + ) + self.prng = XORshiftPRNG(seed) + self.size = size + self.color = color or Color.createColor(self.prng) + self.bgcolor = bgcolor or Color.createColor(self.prng) + self.spotcolor = spotcolor or Color.createColor(self.prng) + + +def draw_two(first, second): + """ + Draws two rows with upper pixel as ANSI background color and + lower pixel as HALF_LOWER_BLOCK with ANSI foreground color. + """ + first = '\033[48;2;{};{};{}m'.format(*first) + second = '\033[38;2;{};{};{}m'.format(*second) + LOWER + return first + second + RESET + + +def renderANSI(opts, _print=False): + imageData = createImageData(opts.size, opts.prng) + width = opts.size + rowsData = iter( + [imageData[i: i + width] for i in range(0, len(imageData), width)] + ) + rows = [] + odd, even = list(islice(rowsData, 2)) + color_by_field = { + 0: opts.bgcolor.numeric_rgb, + 1: opts.color.numeric_rgb, + 2: opts.spotcolor.numeric_rgb, + } + while len(odd): + upper = None + lower = None + row = '' + for i in range(width): + upper = color_by_field[odd[i]] + lower = color_by_field[even[i]] + row += draw_two(upper, lower) + rows.append(row) + odd, even = list(islice(rowsData, 2)) or ([], []) + if _print: + for row in rows: + print(row) + else: + return rows + + +def create_blockie(seed, _print=False): + """main method: creates a blockie with standard + options from `seed` and optionally print it to stdout.""" + opts = Options(seed) + return renderANSI(opts, _print=_print) + + +def main(): + if len(sys.argv) != 2: + print('Usage:\n\t{} '.format(sys.argv[0])) + elif sys.argv[1] == '--test': + from blockies.vanity import vanity + for a in vanity: + create_blockie(a, True) + print(a) + else: + seed = sys.argv[1].lower() + create_blockie(seed, True) + + +if __name__ == '__main__': + main() diff --git a/blockies/vanity.py b/blockies/vanity.py new file mode 100644 index 0000000..b4aaa11 --- /dev/null +++ b/blockies/vanity.py @@ -0,0 +1,247 @@ +# vanity address examples from https://github.com/ethereum/blockies/blob/master/vanity-address-sampler.html +vanity = [ + '0x000528583ba0c881f4d26a1ff50886fc89efc03f', + '0x01122df2b7d1c0a6ad94589da045af3885bedbbc', + '0x000ba5e704c33c58b5e7949f67344821fa54bd29', + '0x000587ac53175fc48d7b3e36d9c62f87275e1f2f', + '0x000a9a0c2fb94536452aba2d199f11c404d508d3', + '0x12333e7c757cf270bd55bf988ca267014aaa463c', + '0x068899cceb463ed483b79b565dde3bdbc90f598a', + '0x000eace0089e5d3c984bbd84bd4290426b0d71d1', + '0x0009a464895f4ddd47595da98d38e9e9ec110fff', + '0x01235557747af9cd120aca462dac992c329304bd', + '0x000b82bb1f7db0eed2a69b78ba4dc655ca8086d6', + '0x00112ba39c66a00926aa1852e6f721f4f6505e72', + '0x000f7474c7236159bf7d51e8d260c388f7567ea9', + '0x000217dd5ce5985880567e8832ecba9a4cec7bb6', + '0x00098e3e0fdb9ca774645eba75331af5c072f848', + '0x000738aa02f0a97baddb03aafba537ca1244ca7c', + '0x000bda3063fce7699bf70ce31ff7f8ff69d9ccb7', + '0x0002bad45b918ab01e931ab049806530180aed8a', + '0x0008a0d473810aa819b471eef3d95743eb32ea89', + '0x0008e430ca209924db554c8efe125479272538ea', + '0x07999deff8024f153d1a34bcd1372c7162f76d07', + '0x0009e6974cab530b6545da1e3d8354ff5f059a9f', + '0x0001c190d5f71d37113c043498f8d69cd59bb7ba', + '0x0006420ab90cef889b016960f39d47cd38d9bba3', + '0x0003e7fa7d6be9660a276024f72a69f0b29f0d67', + '0x011114d14934fbc78ae9eb28e25f864258c6b2de', + '0x0009fb14a9974180d3046ce9288e4647f51dad08', + '0x000f4aa5c45fb4ad826169c3ae6abb4b9a69f2eb', + '0x0001730e6ba230171ab884854e028c9643e95a74', + '0x000f56c5419d31e1b200fdee093cd4e50d02da5e', + '0x000607bdfa87924ef4af03b81d20ba73430f5d06', + '0x0006cd0df96455d49fb6c0e798cc7f00a91b2179', + '0x0123394608c85d9c840decc70f20f9be8fef67c6', + '0x00091ad19ce77aa474b01d767f99a4a1e50b836a', + '0x0008f13fe427f07292f7714e7bdd1b13fe6efae5', + '0x367cdddee96ebb6b859d53972ec1dbb2ea6bae6c', + '0x0005679c4de2ea7fa7d4f478c0e5e55eaa71ac8e', + '0x122232ddf2dece76e1aaf24de6196d0adfcd3c17', + '0x000bbbd8c2857ec74c51afebbd7f793a841474c6', + '0x0003b57953163d9fb26073c1fd039aa409a0c17d', + '0x000509b49286b0bfa2554c54d698558d5e3a1b61', + '0x00032421a35b4c8d9326318bef2efe3bc781df8d', + '0x000cd9e17497f7250ba537fe07216877ee4b4c84', + '0x000e23c96f08e43f2323b81b234bcb46239068c5', + '0x000e2768778d9baa0cff4a64b2b34c6de1e9f094', + '0x00018c72699940fbedcdf4e8d83643d591c961f4', + '0x01112b958435960e71cd8907747fb98d00c2ed41', + '0x155689abc90bda6644f9e646d9c1dfa89b5eab97', + '0x000e31ac8ac68a68227bba96340226c24090b4e2', + '0x000e25e9e6e9c9531f238069c714753c34202bd2', + '0x00084c85a9331707dd3069bba144ff5737356ab3', + '0x000dfae1f66714ec5808c1376395325f0e1dc3f1', + '0x00068aa3f8a9fab72a5bbdb2644ed26b40f420c0', + '0x0009cd364cd04bd0ff08fbd096449eba2f974f26', + '0x000747313d3b8cbfc99a473c0693c2bf7833d776', + '0x000371d57684ba121be46de2f8dca9005c651845', + '0x11335669fcf5d9cab18dadf5c0997424bb5ee0c9', + '0x000f5382b0881dfd32f486a8524b05e80c3df621', + '0x000e7dd5dc320f0eb632c490ce87344e76132e55', + '0x000b98e76190ed008c0880f82b8c76826a950b0a', + '0x0004cfe1aac5db72e9a13266831afcceda92d249', + '0x000384e0416ba08951e7134948c9458baf606b3f', + '0x00030ef74a084ef1a701c563e7046fae95222371', + '0x000cf27337774a984fdad54b0559a712483e48f4', + '0x00016b395a327a4735af65710ad52d61d9b8c716', + '0x0066aadddbbeb4b121bc3fded4d3abc4e23d7621', + '0x000293d767c473a7543d62c91cf40f1f649e46e9', + '0x000e55278a4f21a45d99605e6c0ec65bc446a72d', + '0x0005caf106941e6cfcb412b96e07b01539aea77b', + '0x000235411c22046e98640029905b7db165adffb2', + '0x0008af6f27ad40bbd9efc73e004645f066658924', + '0x0000341d2b72a0a307ed142517870473a1242157', + '0x12222092926b52f595c3d709be342b9052240b51', + '0x0223cddde25066796141104f2f6cefaf5ab82bc8', + '0x012340674baa5becbae5ab0a5deeaf86e2cb917d', + '0x12344753154a3d9f657ee4ea3b7363d442430ae6', + '0x000089498b7ab6f29240422f868d92c6a3771529', + '0x00009d11514871f84d8fae6d965fe9a589ad8560', + '0x233344aad4980b29bc3509663e9506096f5a66b0', + '0x1223404763586aeb95272f968676259b183eb9d3', + '0x000081d5e389866f0eb04a07e1da6dada442c50e', + '0x0123361e6529aa8ccc907f9eee639f7519c92081', + '0x23355778e62f644f897d0704caf75aa1b971c9e3', + '0x00011a0eceb8a9b6049bc6b055e24e04d2a08801', + '0x123336fa44f434880da923174e8b050f749d5756', + '0x00003c3eb877d3901cdd7ef828d8797b29a1fbb8', + '0x0000b0bb3dec5bc94452efe88a87bbe3fc0cdb34', + '0x0000ee9675ff7fb6edfd2dcacaf51ca18b1723a8', + '0x122238b3748db1bd75a5e0af352c3bf14eff4b46', + '0x3334558adc1b63fd5c333080ed091304d57f83b2', + '0x00008964b978141a557bc2765f1fc49f750f3b29', + '0x012aaaeef4b4f01106ad5332bb4cc97daca7005d', + '0x0000ad7204ce8d922241a8ffdaec61809e6cd625', + '0x01123a24f072a0271eb3023fe6a065a4401f690d', + '0x01111e97a623ed65e2d5cdf3309b03ca9a42c064', + '0x122341e9c482ec312134135e701d35f74cf29402', + '0x12234df44089c2d6843389060abe82f0f14090c1', + '0x00007bec7ca27ce222a50dcd068cc975eabc9393', + '0x000129b1a4befff13db657a154d0027284d028eb', + '0x00111081ad7803a9d25d4dbd87383543ac2d48c1', + '0x11222d4c10ef0948b8f6816796c82abff77e83f8', + '0x00001180c26b137ca555da9843e707fee1343df2', + '0x011111d7598298b8af045773322e977c6521e302', + '0x00007b7e0018e4c540fabfd75041bcf993769f09', + '0x2366aadff2b0fd2bce6d939eaab361b0e909d770', + '0x00006f83d2d96ec052e0914705f0beab902798b8', + '0x0000930eb21411f9b9dc401e5a9a06a8746c783b', + '0x588aabbbb4d70078c136c55c41f3c9fbd9807bc7', + '0x0235688aac3cd335e6fb5b1a86d8b2f30c1e3323', + '0x339aacccef950a89d371cbde800d8bdbfade04f4', + '0x1122227fbea33bfecc77ae85f792295028eca681', + '0x00006c333dfa31e1212f9c9b1411118d4e224ab9', + '0x0000ce0969df0892de85af13e8711f6283437c2e', + '0x000082827e94e25c16e8495e8388cb9af265a7cc', + '0x00007df6afa3749a2f962c251ee8ba26654eea80', + '0x1223340808b4db51013029d2dba5cea9bb73dcc4', + '0x0000eb549b148be71a225b4d0ac24718b1bf44b2', + '0x0112341500f02889e9b67f6734f1ada01d31f506', + '0x0000105d0c201af921332974f31760d29ba1e437', + '0x0000ebfc0120d700c4ff36df2838d48b0161c927', + '0x0000412f8d6353fda1a9e5a9c099d1add0e5fca4', + '0x001122cf5ba7d8bf39b55bcc5fc2f9d6936f012f', + '0x111234ca9a8d4d812a1145b870a03c42b36e34af', + '0x012334bf73cd57a79aa06fa9dca62be7fa34d691', + '0x00006193dd1f10f57b638edc507d7885856e9e1d', + '0x23337cceee6462549e08c5a5899d3ac424073168', + '0x0000c13d3292fb5838c36a0dd4a95007b6b610a3', + '0x00003ea48b6b063a7d13e3d53d8f3155a56710ce', + '0x00006afd30c8b03f25fea71e36d2b4295e990836', + '0x000054378763303d0b892ec7b056e8a8b87f318b', + '0x000004f8113245061f9685711d2c65fbe8be6799', + '0x111223adf136efc6830cda427c98f0417d91f3dc', + '0x199bbdeeff499f9c18bd97f6f070642cc5915387', + '0x044444556bf19b7f29d00128209f8e1e0b01c6ed', + '0x112222757aec32dae863927110c460045354c909', + '0x011222094a7a30f6eb9cb97e0d56287cc14b1e41', + '0x0112339b5835a53d8e7a3affd8107addd5f5ebe8', + '0x0122239f12f47f746e06153701cc1d8799fe53ec', + '0x0122349f78bba3b2e92e622f4360f3e1cb3aff64', + '0x0000054f4dde13aa75c4b451c0ab7327923950ce', + '0x111223bc193329067d3026a2e0971817e8a3bcbd', + '0x123334d38791135be1817e08ab9502d4e96a52aa', + '0x012233c2684ea1ef4153444a4b8cc07bbcbca864', + '0x12233469c2dd2516ed94e9f78aeb8534613f9696', + '0x1222220072e12a01ec5d0892d329d06b2a80dc62', + '0x00000aad172293252b3352528ccfb6a97bb06d1a', + '0x001233fa23965f53fbdc3d39cd8a232e159dd0e2', + '0x111112abdd30048fd8743b5a4b2abdefb1c15ca8', + '0x11367aaaeff290c832bf2fb3417298e29bef8d09', + '0x12334500b64be823eae3067925503e0d6750d789', + '0x0122220780f5cb6c42547522e3419edecb4b12c2', + '0x0012347f280f6341d3c96eba8979c415f4e09f21', + '0x00011273882229624f0ebd2b21972e3a853fa250', + '0x001123461f23d63e77433759e509daebafb5cc84', + '0x0000078a43ee0b35f2fb8ee3ebbbf76e1cd3ea27', + '0x00000cd7560b9d2b7279bf3cf802d63183536487', + '0x11223457fb6bed6e4b411959f47a1b17b36d4561', + '0x023789ddddf33ad0f57d510d7a3d40ca79253051', + '0x2444445669c6d903be9c90e6ba20341c29261a0a', + '0x11233343b4fb11f2976178f3ccc03b85ef7c92ae', + '0x000000f20d1c5f3b2bdaa79d9c8d99366b674065', + '0x00449bcffff6e7c16a55dc6eb216110715885c88', + '0x11111115a0802eaf036596c08231da5ae3abcb2f', + '0x145678899ce51dd670253faf5b7ea94a253be8a3', + '0x124466ccdde567566543c687fa7db44b79b55eaa', + '0x344455588af918e1dc01e07f746f3b7bd5211fe7', + '0x00123448f34ce16499d64334b77b78782fca32fd', + '0x14479cccddd72b947a0c20283402c2b5783f4997', + '0x11235ddeeffc1511fe9ea68fcc9a601915c26677', + '0x11122239b7ac6489a1ffa299c4682e89305d1247', + '0x1234455f583613d9df47f48335b1ea0c37ae3693', + '0x25678aadeff411e69672b40c04df174e23f2a6a3', + '0x000123353ae7f7f4d54f82c0a4da9f73c021d916', + '0x12488bbbdffcc57cae5d1fd2f0b79a553c0f664c', + '0x012334425c19eef36ade767a51c555f8b43fd989', + '0x66888899abe55750e55d52c6010705a1891e0e16', + '0x0123333d2085f02c57ee7d24fc88287dd9e12cb6', + '0x1233333ba88973791ea8f049565cda63f00a2a32', + '0x4558889abff293a2a42e9a201603899fed1bd672', + '0x12333341242e989a11a4cf73e820356d83c5f21e', + '0x1222233734ba972eac61f8d4e9768b553101aa1d', + '0x11155779ccc300ee3bc8fec526bbed83862355bf', + '0x001222287513528b41972149c99f836545bdc864', + '0x000111168ab2b1aed0376ebd2160a1710b2adcd2', + '0x11111122394a9de5ecc32cb84566b4791e508862', + '0x333446789dec1e05e76f13d61e9873727a875b5a', + '0x003455ccdddbfca82cb75cf500a0e487977b936a', + '0x223449addef83f549e89571c4d77811aa5b40fe7', + '0x023699abbbb62dab74da5a1c4b17378480046cb9', + '0x444567addff983861bd2a00eec161d1c89f607d1', + '0x122223556ae29562188eef52fdc2503d32e56f7c', + '0x12466cfffff13ed6e12351377b534ac52d7b1778', + '0x0000003eb26f00698cfc4c59ceb72ff35a11e422', + '0x666667accdd4b3f5e86fd1fdb9251f5a8d156076', + '0x12333bccccf6b416076131472585aa4da3051cb2', + '0x1357abbceeff1cd597b6db5410e6b5c6ac656ec9', + '0x000000e0f5786731846c191308cc3e6eb19b9755', + '0x568bddddddff91a0a5a5bfd3336fddf9aebc9b9b', + '0x2245889999ff5366953046d489d9a6bb6b0e57fb', + '0x00355777cddda213dd51a806f65074864803cd8d', + '0x0001111239eea4b11fec205786bf944fc7585ac7', + '0x0001699accdec0989085e13ef5ce9216f62bed5c', + '0x156aabcccccd8a66db786f3e18cdde5d9b1bcfe7', + '0x12229abbccff116d6880da5049b31197fa8cf1d1', + '0x000000aed177b1aea612f22dd5b200ef16360ef7', + '0x13333589aeee9dbef6388ff97ea7b507407f7f9b', + '0x003335678899bae82915db29bf74208f6f9da499', + '0x000000d081a3c36e93bdbf4282d50fbfd0dd5d22', + '0x00000061204f2e25ca5fda1445ae0a894b00ed0f', + '0x222333335555ecbb6c21f313a5ed41dbc8651ae7', + '0x11222334552df2223a3419a9aab3628031916deb', + '0x000000c75201b2c41de99e07dbc18eb3cd88dc1d', + '0x000000d5505f879a58ed92ad6f02352b2973fedc', + '0x000000354406be1e7823917c87a9aaa94d6709d0', + '0x000000e237d0b7e36cd39362da549b7467c2dced', + '0x0000003b6a5b611adf5ce96cb382655193e9d350', + '0xb04091fba38dd78a7e96d082507f33f6a20ab689', + '0xc2b92c661dd875c947350c21e1df3c6cb3be8ec4', + '0x4e0e8f7f890e05459b42e25224ff845ae71cd00d', + '0x500ffd37648c8161e0d644e627469716a4315b85', + '0xd04b2d6402eb0ee04d44db0de1dd2c9d8de28fd0', + '0x24a4c1771ff308a3d5ac0d89678d310dd9a48a3d', + '0x071750d0bfe8ee8f5e70fdf217468807ff3c9a51', + '0x00b6c66ff465d9168b3f2086276b1dff1ac2d71e', + '0x1208da5d6c0282b7b920950bc07ed58717d816da', + '0x12ecf77f489abcf86045ba2947f1239f76a36ee1', + '0x11591b292f6fdd68b4eef29828b6e58553d9d1dc', + '0x110538a9d8df91ff455ee6f761767c7bd6e2c39d', + '0x0199437d877d0b6dd37141120e86b7007bc3ec7a', + '0x0073c4011da9839112587e9adf42fd02ccc0039a', + '0x01511cd71ad4d1ac769502082df7eb39566464eb', + '0x12301a48060a832da63dd1a5938a427ffabe2f08', + '0x0012a4419a2c233793622f6f52b56d5e242c5c63', + '0x0012d6e9ff599f820efa30b711fb3bb810fa9733', + '0x1223018baa4a7d364cf9d496ed804c290dcf23bb', + '0x12349b0204285381a2215f1c4848269b528d176e', + '0x00013ebf8a4662918421c57d19ae9593975c5880', + '0x111122e565988f7e36072a1227ac1c41f1237be8', + '0x122234a1731ec0fb076ae32a45d0a697d08450a3', + '0x00000168b69a8265dbe855ce67f967d9748037f0', + '0x0111225a91173e5197b9c01f41c8789348b43c17', + '0x012233b3c8177f0778d910ed88170b82de3bfe57', + '0x00000186ffcb70194bd8a63019ce8310a493f75b', + '0x00112266bcfc3ce2a72a7211fff9ef200e30178d' +] diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..8a04dcd --- /dev/null +++ b/setup.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + +try: + from setuptools import setup +except ImportError: + from distutils.core import setup + +version = '0.0.1' + +config = { + 'packages': ['blockies'], + 'scripts': [], + 'version': version, + 'name': 'blockies-py', + 'entry_points': { + 'console_scripts': [ + 'blockies=blockies.blockies:main', + ] + }, +} +setup(**config)