diff --git a/README.md b/README.md index 3f245b0..d2dd322 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ mastercoin-tools * Package of mastercoin related tools. * The intention is to help finalizing the mastercoin spec, and enable easy further coding. +For API documentation, please [Read The Docs](http://mastercoin-tools-installer.readthedocs.org/en/latest/). ## Based on what? ## * The code uses the package sx, which is libbitcoin based. diff --git a/bootstrap_msc_per_address.py b/bootstrap_msc_per_address.py deleted file mode 100644 index 01ad607..0000000 --- a/bootstrap_msc_per_address.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/python - -####################################################### -# # -# Copyright Masterchain Grazcoin Grimentz 2013-2014 # -# https://github.com/grazcoin/mastercoin-tools # -# https://masterchain.info # -# masterchain@@bitmessage.ch # -# License AGPLv3 # -# # -####################################################### - -f=open('outputs/bootstrap.log','r') -lines=f.readlines() -f.close() - -d={} -for l in lines: - pair=l.strip().split(',') - address=pair[0] - amount=int(pair[1]) - if d.has_key(address): - d[address]+=amount - else: - d[address]=amount - -items = d.items() -items.sort() -for k in items: - print k diff --git a/general/.gitignore b/general/.gitignore deleted file mode 100644 index 88ced2e..0000000 --- a/general/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# json -*.json diff --git a/msc_bootstrap.py b/msc_bootstrap.py index beae3d0..bd54f94 100644 --- a/msc_bootstrap.py +++ b/msc_bootstrap.py @@ -16,17 +16,11 @@ import sys import operator import time -from msc_utils_bitcoin import * +from msc_utils_parsing import * def main(): - msc_globals.init() - # full story format or just csv - output_format='csv' - if len(sys.argv) > 1: - if sys.argv[1]=='story': - output_format='story' # a.k.a long format # get all tx of exodus address history=get_history(exodus_address) # sort @@ -47,9 +41,9 @@ def main(): if block_timestamp == None: error('failed to get timestamp: '+err) try: - tx_sec_before_deadline=exodus_bootstrap_deadline-block_timestamp + tx_sec_before_deadline=exodus_bootstrap_orig_deadline-block_timestamp except TypeError: - error('bad block timestamp') + error('bad block timestamp') # bonus is 10% for a week bonus=max((tx_sec_before_deadline+0.0)/(3600*24*7*10.0)*100,0) dacoins=str('{:.0f}'.format(int(value)*(100+bonus))) @@ -57,10 +51,9 @@ def main(): # give dacoins to highest contributing address. output_dict={} # dict to collect outputs per address for i in json_tx['inputs']: - prev_tx_hash=i['previous_output'].split(':')[0] - prev_tx_output_index=i['previous_output'].split(':')[1] - json_prev_tx=get_tx(prev_tx_hash) - output_value=json_prev_tx['outputs'][int(prev_tx_output_index)]['value'] + output_value=get_value_from_output(i['previous_output']) + if output_value==None: + error('failed get_value_from_output') if output_dict.has_key(i['address']): output_dict[i['address']]+=output_value else: @@ -76,17 +69,10 @@ def main(): parsed['invalid']=False parsed['tx_time']=str(block_timestamp)+'000' try: - filename='tx/'+parsed['tx_hash']+'.json' - try: - f=open(filename, 'w') - f.write('[') - json.dump(parsed, f) - f.write(']\n') - f.close() - except OSError: - info("dump to file error for "+tx_hash) + filename='tx/'+parsed['tx_hash']+'.json' + atomic_json_dump(parsed, filename) except IndexError: - info("cannot parse 'tx_hash' in "+tx_hash) + info("cannot parse 'tx_hash' in "+tx_hash) if __name__ == "__main__": diff --git a/msc_globals.py b/msc_globals.py index 1fcba4e..3d4f734 100644 --- a/msc_globals.py +++ b/msc_globals.py @@ -11,7 +11,9 @@ # globals.py def init(): + global s # silent mode global last_block global d # debug mode last_block=0 d=False + s=False diff --git a/msc_parse.py b/msc_parse.py index 0df8d7a..9c83163 100644 --- a/msc_parse.py +++ b/msc_parse.py @@ -22,7 +22,7 @@ def parse(): ###################################### # reading and setting options values # ###################################### - + info('Initializing globals...') msc_globals.init() parser = OptionParser("usage: %prog [options]") @@ -40,6 +40,7 @@ def parse(): (options, args) = parser.parse_args() msc_globals.d=options.debug_mode single_tx=options.single_tx + archive=options.archive requested_block_height=options.starting_block_height # show debug on @@ -47,6 +48,7 @@ def parse(): debug('debug is on') # don't bother parsing if no new block was generated since last validation + info('Determining last validated block...') last_validated_block=0 try: f=open(LAST_VALIDATED_BLOCK_NUMBER_FILE,'r') @@ -91,18 +93,18 @@ def parse(): # to catch chain reorgs, check 5 blocks back starting_block_height = int(starting_block_height) - 5 - - archive=options.archive - info('starting parsing at block '+str(starting_block_height)) if single_tx == None: + info('Retreiving history and sorting data...') # get all tx of exodus address history=get_history(exodus_address) history.sort(key=output_height) + # Oddly enough this next print statement corrects the parsing-behind bug + print "Last 5 transactions of Exodus", history[-5:] else: # build fake history of length 1 (debug purposes) - json_tx=get_json_tx(get_raw_tx(single_tx)) + json_tx=get_tx(single_tx) marker_number=-1 marker_value=-1 i=0 @@ -129,6 +131,8 @@ def parse(): # go over transaction from all history of 1EXoDus address last_block=0 + + info('Parsing transactions...') for tx_dict in history: value=tx_dict['value'] if starting_block_height != None: @@ -158,10 +162,6 @@ def parse(): outputs_list=json_tx['outputs'] (outputs_list_no_exodus, outputs_to_exodus, different_outputs_values, invalid)=examine_outputs(outputs_list, tx_hash, raw_tx) - if invalid != None: - info(str(invalid[1])+' on '+tx_hash) - parsed['invalid']=invalid - num_of_outputs=len(outputs_list) (block_timestamp, err)=get_block_timestamp(int(block)) @@ -184,7 +184,11 @@ def parse(): parsed['block']=str(block) parsed['index']=str(index) if not parsed.has_key('invalid'): - parsed['invalid']=False + if invalid != None: + info(str(invalid[1])+' on '+tx_hash) + parsed['invalid']=invalid + else: + parsed['invalid']=False parsed['tx_time']=str(block_timestamp)+'000' debug(str(parsed)) filename='tx/'+parsed['tx_hash']+'.json' @@ -196,15 +200,12 @@ def parse(): try: orig_json=json.load(f)[0] except (KeyError, ValueError): - try: - orig_json=json.load(f) - except ValueError: - error('failed loading json from '+filename) + error('failed loading json from '+filename) f.close() # verify bootstrap block if orig_json.has_key('block'): orig_block=orig_json['block'] - debug('found this tx already on (previous) block '+orig_block) + debug('found this tx already on (previous) block '+str(orig_block)) if int(orig_block)>last_exodus_bootstrap_block: debug('but it is post exodus - ignoring') orig_json=None @@ -213,12 +214,9 @@ def parse(): except IOError: pass if orig_json != None: # it was an exodus tx - if len(orig_json)==1: - new_json=[orig_json[0],parsed] - atomic_json_dump(new_json, filename, add_brackets=False) - info('basic tx was also exodus on '+tx_hash) - else: - info('basic tx is already present on exodus on '+tx_hash) + new_json=[orig_json,parsed] + atomic_json_dump(new_json, filename, add_brackets=False) + info('basic tx was also exodus on '+tx_hash) else: atomic_json_dump(parsed, filename) else: # num_of_outputs <= 2 and not multisig @@ -243,7 +241,11 @@ def parse(): parsed['block']=str(block) parsed['index']=str(index) if not parsed.has_key('invalid'): - parsed['invalid']=False + if invalid != None: + info(str(invalid[1])+' on '+tx_hash) + parsed['invalid']=invalid + else: + parsed['invalid']=False parsed['tx_time']=str(block_timestamp)+'000' debug(str(parsed)) filename='tx/'+parsed['tx_hash']+'.json' @@ -258,7 +260,11 @@ def parse(): parsed['block']=str(block) parsed['index']=str(index) if not parsed.has_key('invalid'): - parsed['invalid']=False + if invalid != None: + info(str(invalid[1])+' on '+tx_hash) + parsed['invalid']=invalid + else: + parsed['invalid']=False parsed['tx_time']=str(block_timestamp)+'000' debug(str(parsed)) filename='tx/'+parsed['tx_hash']+'.json' @@ -270,7 +276,8 @@ def parse(): if single_tx == None and block != None: msc_globals.last_block=block - rev=get_revision_dict( last_block, options.repository_path ) + info('Finished, dumping last_block and revision.json...') + rev=get_revision_dict(last_block, options.repository_path) atomic_json_dump(rev, 'www/revision.json', add_brackets=False) if archive: diff --git a/msc_utils_bitcoin.py b/msc_utils_bitcoin.py index 4ee99c4..1e50eff 100644 --- a/msc_utils_bitcoin.py +++ b/msc_utils_bitcoin.py @@ -38,58 +38,46 @@ def from_hex_satoshi(value): return formatted_decimal(float_number) def b58encode(v): - """ encode v, which is a string of bytes, to base58. -""" - - long_value = 0L - for (i, c) in enumerate(v[::-1]): - long_value += (256**i) * ord(c) - - result = '' - while long_value >= __b58base: - div, mod = divmod(long_value, __b58base) - result = __b58chars[mod] + result - long_value = div - result = __b58chars[long_value] + result - - # Bitcoin does a little leading-zero-compression: - # leading 0-bytes in the input become leading-1s - nPad = 0 - for c in v: - if c == '\0': nPad += 1 - else: break - - return (__b58chars[0]*nPad) + result - + """ encode v, which is a string of bytes, to base58. """ + long_value = 0L + for (i, c) in enumerate(v[::-1]): + long_value += (256**i) * ord(c) + result = '' + while long_value >= __b58base: + div, mod = divmod(long_value, __b58base) + result = __b58chars[mod] + result + long_value = div + result = __b58chars[long_value] + result + # Bitcoin does a little leading-zero-compression: + # leading 0-bytes in the input become leading-1s + nPad = 0 + for c in v: + if c == '\0': nPad += 1 + else: break + return (__b58chars[0]*nPad) + result def b58decode(v, length): - """ decode v into a string of len bytes - """ + """ decode v into a string of len bytes """ long_value = 0L for (i, c) in enumerate(v[::-1]): long_value += __b58chars.find(c) * (__b58base**i) - result = '' while long_value >= 256: - div, mod = divmod(long_value, 256) - result = chr(mod) + result - long_value = div + div, mod = divmod(long_value, 256) + result = chr(mod) + result + long_value = div result = chr(long_value) + result - nPad = 0 for c in v: - if c == __b58chars[0]: nPad += 1 - else: break - + if c == __b58chars[0]: nPad += 1 + else: break result = chr(0)*nPad + result if length is not None and len(result) != length: - return None - + return None return result - def hash_160_to_bc_address(h160): - vh160 = "\x00"+h160 # \x00 is version 0 + vh160 = '\x00'+h160 # \x00 is version 0 h3=hashlib.sha256(hashlib.sha256(vh160).digest()).digest() addr=vh160+h3[0:4] return b58encode(addr) @@ -101,22 +89,22 @@ def bc_address_to_hash_160(addr): def get_sha256(string): return hashlib.sha256(string).hexdigest() -def is_script_output(output): +def is_script_multisig(script): # check that the script looks like: - # 1 [ hex ] ... - return output.startswith('1 [ ') + # m [ pubkey1 ] .. [ hex ] n checkmultisig + return script.endswith('checkmultisig') -def is_script_multisig(output): +def is_script_paytopubkeyhash(script): # check that the script looks like: - # 1 [ pubkey1 ] .. [ hex ] [ 2 of 3 ] checkmultisig - return is_script_output(output) and output.endswith('checkmultisig') - + # dup hash160 [ hex ] equalverify checksig + return script.startswith('dup hash160') and script.endswith('equalverify checksig') + def is_pubkey_valid(pubkey): try: sec=encoding.binascii.unhexlify(pubkey) public_pair=encoding.sec_to_public_pair(sec) return curves.ecdsa.point_is_valid(ecdsa.generator_secp256k1, public_pair[0], public_pair[1]) - except TypeError: + except: return False def get_compressed_pubkey_format(pubkey): @@ -124,17 +112,18 @@ def get_compressed_pubkey_format(pubkey): return encoding.binascii.hexlify(encoding.public_pair_to_sec(public_pair)) def get_address_of_pubkey(pubkey): - public_pair=encoding.sec_to_public_pair(encoding.binascii.unhexlify(pubkey)) - return encoding.public_pair_to_bitcoin_address(public_pair) + sha = hashlib.sha256(pubkey.decode('hex')).digest() + h = hashlib.new('ripemd160') + h.update(sha) + h160 = h.digest() + return hash_160_to_bc_address(h160) def get_nearby_valid_pubkey(pubkey): valid_pubkey=pubkey l=len(pubkey) while not is_pubkey_valid(valid_pubkey): - info("trying "+valid_pubkey) next=hex(int(valid_pubkey, 16)+1).strip('L').split('0x')[1] valid_pubkey = next.zfill(l) - info("valid "+valid_pubkey) return valid_pubkey def is_valid_hash(h): @@ -148,8 +137,8 @@ def is_valid_hash(h): def is_valid_bitcoin_address(value): value = value.strip() - if re.match(r"[a-zA-Z1-9]{27,35}$", value) is None: - return False + if re.match(r'[a-zA-Z1-9]{27,35}$', value) is None: + return False version = get_bcaddress_version(value) if version != None: return True diff --git a/msc_utils_general.py b/msc_utils_general.py index b5716ab..3677063 100644 --- a/msc_utils_general.py +++ b/msc_utils_general.py @@ -19,6 +19,7 @@ import msc_globals LAST_BLOCK_NUMBER_FILE='last_block.txt' +msc_globals.init() def run_command(command, input_str=None, ignore_stderr=False): if ignore_stderr: @@ -65,12 +66,13 @@ def error(msg): exit(1) def info(msg): - func_name='unknown' - try: - func_name=inspect.stack()[1][3] - except IndexError: - pass - print '[I] '+func_name+': '+str(msg) + if msc_globals.s == False: + func_name='unknown' + try: + func_name=inspect.stack()[1][3] + except IndexError: + pass + print '[I] '+func_name+': '+str(msg) def debug(msg): if msc_globals.d == True: @@ -107,9 +109,10 @@ def format_time_from_epoch(epoch, short=False): def get_git_details(directory="~/mastercoin-tools"): repo = git.Repo(directory) assert repo.bare == False - head_commit=repo.head.commit - timestamp=format_time_from_epoch(int(head_commit.authored_date), True) - return(head_commit.hexsha,timestamp) + #head_commit=repo.head.commit + #timestamp=format_time_from_epoch(int(head_commit.authored_date), True) + #return(head_commit.hexsha,timestamp) + return("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXX") def archive_repo(directory="~/mastercoin-tools"): (commit_hexsha, timestamp)=get_git_details( directory ) @@ -134,14 +137,14 @@ def get_now(): def get_today(): return format_time_from_struct(time.gmtime(), True) -def get_revision_dict( last_block, directory="~/mastercoin-tools" ): +def get_revision_dict(last_block, directory="~/mastercoin-tools"): rev={} git_details=get_git_details( directory ) hexsha=git_details[0] commit_time=git_details[1] rev['commit_hexsha']=hexsha rev['commit_time']=commit_time - rev['url']='https://github.com/grazcoin/mastercoin-tools/commit/'+hexsha + rev['url']='https://github.com/mastercoin-MSC/mastercoin-tools/commit/'+hexsha rev['last_parsed']=get_now() rev['last_block']=last_block return rev diff --git a/msc_utils_obelisk.py b/msc_utils_obelisk.py index ed87b98..1434acf 100644 --- a/msc_utils_obelisk.py +++ b/msc_utils_obelisk.py @@ -10,28 +10,38 @@ # # ####################################################### +import requests import simplejson import re import os import msc_globals from msc_utils_bitcoin import * -MAX_COMMAND_TRIES=3 +MAX_COMMAND_TRIES=7 +TIMEOUT='timeout -s 9 60 ' def get_last_height(): - out, err = run_command("sx fetch-last-height") + out, err = run_command(TIMEOUT+"sx fetch-last-height") if err != None: return err else: + if out.strip()[:3]=='Ass': #assertion failed in mailbox.cpp + try: + last_height=requests.get('http://btc.blockr.io/api/v1/block/info/last').json()['data']['nb'] + return last_height + except Exception,e: + info(['failed getting height via sx']) + return '-1' return out.strip() def get_block_timestamp(height): - print height - raw_block, err = run_command("sx fetch-block-header "+str(height)) + if msc_globals.s == False: + print height + raw_block, err = run_command(TIMEOUT+"sx fetch-block-header "+str(height)) if err != None or raw_block == None: return (None, err) else: - block_details, err = run_command("sx showblkhead", raw_block) + block_details, err = run_command(TIMEOUT+"sx showblkhead", raw_block) if err != None or block_details == None: return (None, err) else: @@ -45,16 +55,22 @@ def get_block_timestamp(height): return (None, "empty block details") def get_raw_tx(tx_hash): - out, err = run_command("sx fetch-transaction "+tx_hash) + out, err = run_command(TIMEOUT+"sx fetch-transaction "+tx_hash) if err != None: return err else: return out def get_json_tx(raw_tx, tx_hash='unknown hash'): + if raw_tx != None and raw_tx.strip()[:3]=='Ass': #assertion failed in mailbox.cpp + if tx_hash!='unknown hash': + info('assertion failed, retry to get '+tx_hash) + raw_tx=get_raw_tx(tx_hash) + else: + error('assertion failed, no tx_hash provided') parsed_json_tx=None for i in range(MAX_COMMAND_TRIES): # few tries - json_tx, err = run_command("sx showtx -j", raw_tx) + json_tx, err = run_command(TIMEOUT+"sx showtx -j", raw_tx) if err != None or json_tx == None: if i == MAX_COMMAND_TRIES: error(str(json_tx)+' '+str(tx_hash)) @@ -72,7 +88,7 @@ def get_tx(tx_hash): return get_json_tx(raw_tx, tx_hash) def get_tx_index(tx_hash): - out, err = run_command("sx fetch-transaction-index "+tx_hash) + out, err = run_command(TIMEOUT+"sx fetch-transaction-index "+tx_hash) if err != None: info(err) return (-1, -1) @@ -81,12 +97,23 @@ def get_tx_index(tx_hash): s=out.split() height=s[1] index=s[3] - return(height,index) - except IndexError: + if height=='failed:': + url='http://btc.blockr.io/api/v1/tx/info/' + tx_hash + if msc_globals.s == False: + print url + try: + height=requests.get(url).json()['data']['block'] + return(height,-1) + except Exception,e: + info(['failed getting height for '+tx_hash,e]) + return (-1,-1) + else: + return(height,index) + except IndexError: return (-1,-1) def get_json_history(addr): - out, err = run_command("sx history -j "+addr) + out, err = run_command(TIMEOUT + "sx history -j "+addr) if err != None: return err else: @@ -114,8 +141,15 @@ def get_value_from_output(tx_and_number): rawtx=get_raw_tx(txid) json_tx=get_json_tx(rawtx) if json_tx == None: - info('json_tx is None') - return None + try: + #to satoshi + req=requests.get( 'http://btc.blockr.io/api/v1/tx/info/' + tx_hash ) + requestJson = req.json() + value=float(requestJson['data']['vouts'][number]['amount'])*100000000 + return int(value) #back to satoshi + except Exception,e: + info(['failed getting json_tx (None) for '+txid,e]) + return None try: all_outputs=json_tx['outputs'] except TypeError: # obelisk can give None @@ -133,21 +167,45 @@ def get_address_from_output(tx_and_number): rawtx=get_raw_tx(tx_hash) json_tx=get_json_tx(rawtx) if json_tx == None: - info('failed getting json_tx (None) for '+tx_hash) - return None + try: + address=str(requests.get('http://btc.blockr.io/api/v1/tx/info/' + tx_hash).json()['data']['vouts'][number]['address']) + return address + except Exception,e: + info(['failed getting json_tx (None) for '+txid,e]) + return None all_outputs=json_tx['outputs'] output=all_outputs[number] return output['address'] +def get_vout_from_output(tx_and_number): + try: + txid=tx_and_number.split(':')[0] + number=int(tx_and_number.split(':')[1]) + except IndexError: + info('index error') + return None + rawtx=get_raw_tx(txid) + json_tx=get_json_tx(rawtx) + if json_tx == None: + info('failed getting json_tx (None) for '+txid) + return None + try: + all_outputs=json_tx['outputs'] + except TypeError: # obelisk can give None + info('bad outputs parsing on: '+json_tx) + return None + output=all_outputs[number] + return output + def get_pubkey(addr): - out, err = run_command("sx get-pubkey "+addr) + out, err = run_command(TIMEOUT+"sx get-pubkey "+addr) if err != None: return err else: return out.strip('\n') def pubkey(key): - out, err = run_command("sx pubkey ",key) + out, err = run_command(TIMEOUT+"sx pubkey ",key) # the only possible error is "Invalid private key." if out.strip('\n') == "Invalid private key.": return None @@ -155,14 +213,14 @@ def pubkey(key): return out.strip('\n') def get_utxo(addr, value): - out, err = run_command("sx get-utxo "+addr+" "+str(value)) + out, err = run_command(TIMEOUT+"sx get-utxo "+addr+" "+str(value)) if err != None: return err else: return out def get_balance(addrs): - out, err = run_command("sx balance -j "+addrs) + out, err = run_command(TIMEOUT+"sx balance -j "+addrs) if err != None: return err else: @@ -173,19 +231,19 @@ def get_balance(addrs): return parsed_json_balance def rawscript(script): - out, err = run_command("sx rawscript "+script) + out, err = run_command(TIMEOUT+"sx rawscript "+script) if err != None: return err else: return out.strip('\n') def mktx(inputs_outputs): - out, err = run_command("sx mktx "+inputs_outputs, None, True) + out, err = run_command(TIMEOUT+"sx mktx "+inputs_outputs, None, True) # ignore err return out def get_addr_from_key(key): # private or public key - out, err = run_command("sx addr ", key) + out, err = run_command(TIMEOUT+"sx addr ", key) return out.strip('\n') def sign(tx, priv_key, inputs): @@ -202,9 +260,9 @@ def sign(tx, priv_key, inputs): # assumtion: that all inputs come from the same address (required in spec) n=0; for i in inputs: - signature=run_command('sx sign-input txfile.tx '+str(n)+' '+prevout_script, priv_key)[0].strip('\n') + signature=run_command(TIMEOUT+'sx sign-input txfile.tx '+str(n)+' '+prevout_script, priv_key)[0].strip('\n') signed_rawscript=rawscript('[ '+signature +' ] [ '+pubkey(priv_key)+' ]') - signed_tx=run_command('sx set-input txfile.tx '+str(n), signed_rawscript) + signed_tx=run_command(TIMEOUT+'sx set-input txfile.tx '+str(n), signed_rawscript) n+=1 # replace the file with the signed one f=open('txfile.tx','w') @@ -215,28 +273,28 @@ def sign(tx, priv_key, inputs): return signed_tx[0].strip('\n') def validate_sig(filename, index, script_code, signature): - out, err = run_command('sx validsig '+filename+' '+str(index)+' '+script_code+' '+signature) + out, err = run_command(TIMEOUT+'sx validsig '+filename+' '+str(index)+' '+script_code+' '+signature) if err != None: return err else: return out def validate_tx(filename): - out, err = run_command('sx validtx ' + filename) + out, err = run_command(TIMEOUT+'sx validtx ' + filename) if err != None: return err else: out = out.strip('\n') info('validated') info(out) - found_success = re.findall("Success",out) - if found_success != 0: + found_success = re.findall("Success|input not found",out) + if len(found_success) != 0: return None else: return out def send_tx(filename, host='localhost', port=8333): - out, err = run_command("sx sendtx "+filename+' '+host+' '+port) + out, err = run_command(TIMEOUT+"sx sendtx "+filename+' '+host+' '+port) if err != None: return err else: @@ -244,7 +302,7 @@ def send_tx(filename, host='localhost', port=8333): return None def broadcast_tx(filename): - out, err = run_command("sx sendtx-bci " + filename) + out, err = run_command(TIMEOUT+"sx sendtx-obelisk " + filename) if err != None: return err else: @@ -252,7 +310,7 @@ def broadcast_tx(filename): info('broadcasted') info(out) found_success = re.findall("Success",out) - if found_success != 0: + if len(found_success) != 0: return None else: return out diff --git a/msc_utils_parsing.py b/msc_utils_parsing.py index 84d2b26..66a0344 100644 --- a/msc_utils_parsing.py +++ b/msc_utils_parsing.py @@ -10,25 +10,37 @@ # # ####################################################### +import traceback,glob,json from msc_utils_obelisk import * currency_type_dict={'00000001':'Mastercoin','00000002':'Test Mastercoin'} reverse_currency_type_dict={'Mastercoin':'00000001','Test Mastercoin':'00000002'} -transaction_type_dict={'0000':'Simple send', '0014':'Sell offer', '0016':'Sell accept'} +transaction_type_dict={'0000':'Simple send', '0014':'Sell offer', '0016':'Sell accept', '0032':'Fixed property creation', '0033': 'Fundraiser property creation', '0035': 'Fundraiser cancellation'} sell_offer_action_dict={'00':'Undefined', '01':'New', '02':'Update', '03':'Cancel'} exodus_address='1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P' first_exodus_bootstrap_block=249498 last_exodus_bootstrap_block=255365 +exodus_bootstrap_orig_deadline=1377993600 exodus_bootstrap_deadline=1377993874 seconds_in_one_year=31556926 multisig_disabled=False -dust_limit=5555 +dust_limit=5757 MAX_PUBKEY_IN_BIP11=3 MAX_COMMAND_TRIES=3 features_enable_dict={'distributed exchange':290630} LAST_VALIDATED_BLOCK_NUMBER_FILE='last_validated_block.txt' max_payment_timeframe=255 +#remove unicode +def dehexify(hex_str): + temp_str=[] + for let in hex_str: + if ord(let) < 128: + temp_str.append(let) + else: + temp_str.append('?') + return ''.join(temp_str) + # used as a key function for sorting outputs of msc tx def get_dataSequenceNum(item): try: @@ -38,7 +50,17 @@ def get_dataSequenceNum(item): except KeyError, IndexError: return None +def refreshCurrencyIDs(): + try: + property_files = glob.glob('properties/*.json') + for property_file in property_files: + currency_type_dict[ hex(int(str(property_file.split('.')[0].split('-')[1])))[2:].rjust(8,"0") ] = 'Smart Property' + #reverse_currency_type_dict['Smart Property'] = str(property_file.split('.')[0].split('-')[1]) + except Exception,e: + error('error getting glob of properties',e) + def get_currency_type_from_dict(currencyId): + refreshCurrencyIDs() if currency_type_dict.has_key(currencyId): return currency_type_dict[currencyId] else: @@ -69,12 +91,12 @@ def parse_data_script(data_script): parse_dict['block_time_limit']=data_script[52:54] return parse_dict -def parse_2nd_data_script(data_script): +def parse_2nd_data_script(fee_req_p1,data_script): parse_dict={} if len(data_script)<42: info('invalid data script '+data_script.encode('hex_codec')) return parse_dict - parse_dict['fee_required']=data_script[4:10] + parse_dict['fee_required']=fee_req_p1 + data_script[4:10] parse_dict['action']=data_script[10:12] parse_dict['should_be_zeros']=data_script[12:54] try: @@ -185,26 +207,13 @@ def parse_simple_basic(tx, tx_hash='unknown', after_bootstrap=True): # collect all "from addresses" (normally only a single one) from_address='' try: - inputs=json_tx['inputs'] - inputs_values_dict={} - for i in inputs: - input_value=get_value_from_output(i['previous_output']) - if input_value == None: - error('failed get_value_from_output') - input_address=i['address'] - if inputs_values_dict.has_key(input_address): - inputs_values_dict[input_address]+=int(input_value) - else: - inputs_values_dict[input_address]=int(input_value) - # the from address is the one with the highest value - from_address=max(inputs_values_dict, key=inputs_values_dict.get) + from_address=select_input_reference(json_tx['inputs']) if from_address == None: info('invalid from address (address with largest value is None) at tx '+tx_hash) return {'invalid':(True,'address with largest value is None'), 'tx_hash':tx_hash} - ####################################################################### # follow Class A P&D https://github.com/mastercoin-MSC/spec/issues/29 # ####################################################################### @@ -270,77 +279,113 @@ def parse_simple_basic(tx, tx_hash='unknown', after_bootstrap=True): info('invalid mastercoin tx ('+str(e)+') at tx '+tx_hash) return {'invalid':(True,'bad parsing'), 'tx_hash':tx_hash} +# only pay-to-pubkey-hash inputs are allowed +# the sender is largest contributor of the transaction +def select_input_reference(inputs): + inputs_values_dict={} + for i in inputs: + prev_output=get_vout_from_output(i['previous_output']) + # skip, if input is not usable + if prev_output==None: + continue + # skip, if input is not pay-to-pubkey-hash + if not is_script_paytopubkeyhash(prev_output['script']): + return None + input_value=prev_output['value'] + input_address=i['address'] + if inputs_values_dict.has_key(input_address): + inputs_values_dict[input_address]+=int(input_value) + else: + inputs_values_dict[input_address]=int(input_value) + # no valid input found + if len(inputs_values_dict)==0: + return None + # the input reference is the one with the highest value + from_address=max(inputs_values_dict, key=inputs_values_dict.get) + return from_address + +# only non-exodus, pay-to-pubkey-hash outputs are considered +# other output types are ignores, sender may not be the receiver +# the receiver is derived from the last remaining output +def select_receiver_reference(input_addr, outputs): + to_address='unknown' + sender_references=0 + # filter outputs to consider only pay-to-pubkey-hash outputs + potential_recipients=[] + for o in outputs: + if is_script_paytopubkeyhash(o['script']): + address=o['address'] + # skip exodus outputs + if address==exodus_address: + continue + # count outputs to sender + if address==input_addr: + sender_references+=1 + potential_recipients.append(address) + # recipient is last output, but first reference to sender may be skipped + remaining=len(potential_recipients) + if remaining==1 or sender_references>1 or remaining>0 and potential_recipients[-1]!=input_addr: + to_address=potential_recipients[-1] + # strip change output + elif remaining>1 and potential_recipients[-1]==input_addr: + to_address=potential_recipients[-2] + return to_address + def get_obfus_str_list(address, length): - obfus_str_list=[] - obfus_str_list.append(get_sha256(address)) # 1st obfus is simple sha256 - for i in range(length): - if i 3: + if max_pubkeys < 2 or max_pubkeys > MAX_PUBKEY_IN_BIP11: info('error m-of-n with n out of range ('+str(max_pubkeys)+'). skipping tx '+tx_hash) return {'tx_hash':tx_hash, 'invalid':(True, 'error m-of-n with n out of range')} # parse the BIP11 pubkey list - data_script_list=[] - for i in range(MAX_PUBKEY_IN_BIP11-1): + for i in range(max_pubkeys-1): index=i+2 # the index of the i'th pubkey try: - data_script_list.append(fields[index].split(' ]')[0]) + data_script = fields[index].split(' ]')[0] + if data_script not in data_script_list: + data_script_list.append(data_script) except IndexError: break # prepare place holder lists for obfus,deobfus,data_dict dataHex_deobfuscated_list=[] data_dict_list=[] - - if input_addr == None: - info('none input address (BIP11 inputs are not supported yet)') - return {'tx_hash':tx_hash, 'invalid':(True, 'not supported input (BIP11/BIP16)')} list_length=len(data_script_list) obfus_str_list=get_obfus_str_list(input_addr, list_length) @@ -348,9 +393,6 @@ def parse_multisig(tx, tx_hash='unknown'): for i in range(list_length): dataHex_deobfuscated_list.append(get_string_xor(data_script_list[i][2:-2],obfus_str_list[i][:62]).zfill(64)+'00') - # deobfuscated list is ready - #info(dataHex_deobfuscated_list) - try: data_dict=parse_data_script(dataHex_deobfuscated_list[0]) except IndexError: @@ -404,7 +446,7 @@ def parse_multisig(tx, tx_hash='unknown'): parse_dict['formatted_block_time_limit']= str(int(data_dict['block_time_limit'],16)) if len(dataHex_deobfuscated_list)>1: # currently true only for Sell offer (?) - data_dict2=parse_2nd_data_script(dataHex_deobfuscated_list[1]) + data_dict2=parse_2nd_data_script(dataHex_deobfuscated_list[0][54:-2],dataHex_deobfuscated_list[1]) # verify positive sell offer amount if amount == 0: # this is allowed only on Cancel action @@ -456,16 +498,125 @@ def parse_multisig(tx, tx_hash='unknown'): # parse as bitcoin payment to get the tx fee bitcoin_dict=parse_bitcoin_payment(tx, tx_hash) parse_dict['formatted_fee']=bitcoin_dict['fee'] + else: + if data_dict['transactionType'] == '0032' or data_dict['transactionType'] == '0033': # Smart Property + if idx == len(potential_data_outputs)-1: # we are on last output + long_packet = '' + for datahex in dataHex_deobfuscated_list: + if len(datahex)<42: + info('invalid data script '+data_script.encode('hex_codec')) + parse_dict['invalid']=(True, 'datahex is not right length') + parse_dict['baseCoin']=datahex[0:2] # 00 for BTC + long_packet += datahex[4:-2].upper() + + #set these fields for validation + parse_dict['formatted_amount'] = 0 + parse_dict['currency_str'] = 'Smart Property' + parse_dict['currencyId'] = 0 + + #unneeded fields + parse_dict.pop('amount', None) + parse_dict.pop('bitcoin_amount_desired', None) + parse_dict.pop('block_time_limit', None) + + parse_dict['tx_hash'] = tx_hash + + #fixed fields + parse_dict['transactionVersion']=long_packet[0:4] + parse_dict['transactionType']=long_packet[4:8] + parse_dict['ecosystem']=long_packet[8:10] + parse_dict['property_type']=long_packet[10:14] + parse_dict['previous_property_id']=long_packet[14:22] + + #non-hex version for UI + parse_dict['formatted_transactionVersion']=int(long_packet[0:4],16) + parse_dict['formatted_transactionType']=int(long_packet[4:8],16) + parse_dict['formatted_ecosystem']=int(long_packet[8:10],16) + parse_dict['formatted_property_type']=int(long_packet[10:14],16) + parse_dict['formatted_previous_property_id']=int(long_packet[14:22],16) + #prepare var-fields for processing + + #var fields + try: + spare_bytes = [] + for i in range(0,len(long_packet[22:]),2): + spare_bytes.append(long_packet[22:][i] + long_packet[22:][i+1]) + + prop_cat = ''.join(spare_bytes[0:spare_bytes.index('00')]).decode('hex') + prop_cat=dehexify(prop_cat) + + spare_bytes = spare_bytes[spare_bytes.index('00')+1:] + prop_subcat = ''.join(spare_bytes[0:spare_bytes.index('00')]).decode('hex') + prop_subcat=dehexify(prop_subcat) + + spare_bytes = spare_bytes[spare_bytes.index('00')+1:] + prop_name = ''.join(spare_bytes[0:spare_bytes.index('00')]).decode('hex') + prop_name=dehexify(prop_name) + + spare_bytes = spare_bytes[spare_bytes.index('00')+1:] + prop_url = ''.join(spare_bytes[0:spare_bytes.index('00')]).decode('hex') + prop_name=dehexify(prop_name) + + spare_bytes = spare_bytes[spare_bytes.index('00')+1:] + prop_data = ''.join(spare_bytes[0:spare_bytes.index('00')]).decode('hex') + prop_data=dehexify(prop_data) + + parse_dict['propertyCategory']=prop_cat + parse_dict['propertySubcategory']=prop_subcat + parse_dict['propertyName']=prop_name + parse_dict['propertyUrl']=prop_url + parse_dict['propertyData']=prop_data + except Exception,e: + debug(['cannot parse smart property fields',e, traceback.format_exc(), tx_hash]) + return {'tx_hash':tx_hash, 'invalid':(True, 'malformed smart property fields')} + + #fixed fields after var fields + try: + if data_dict['transactionType'] == '0032': + spare_bytes = ''.join(spare_bytes[spare_bytes.index('00')+1:]) + parse_dict['numberOfProperties']=str(int(spare_bytes[:16],16)) + else: + spare_bytes = ''.join(spare_bytes[spare_bytes.index('00')+1:]) + parse_dict['currencyIdentifierDesired']=str(int(spare_bytes[:8],16)) + + spare_bytes = ''.join(spare_bytes[8:]) + parse_dict['numberOfProperties']=str(int(spare_bytes[:16],16)) + + spare_bytes = ''.join(spare_bytes[16:]) + parse_dict['deadline']=str(int(spare_bytes[:16],16)) + + spare_bytes = ''.join(spare_bytes[16:]) + parse_dict['earlybirdBonus']=str(int(spare_bytes[:2],16)) + + spare_bytes = ''.join(spare_bytes[2:4]) + parse_dict['percentageForIssuer']=str(int(spare_bytes[:2],16)) + except Exception,e: + debug(['cannot parse smart property fields',e, traceback.format_exc(), tx_hash]) + return {'tx_hash':tx_hash, 'invalid':(True, 'malformed smart property fields')} + + else: # non valid tx type + if data_dict['transactionType'] == '0035': # Smart Property Cancellation + #should only be one packet for this tx type + dataHex = dataHex_deobfuscated_list[0][4:] + parse_dict['transactionVersion']=dataHex[0:4] + parse_dict['transactionType']=dataHex[4:8] + parse_dict['property_type']=dataHex[8:16] + + #set these fields for validation + parse_dict['formatted_amount'] = 0 + parse_dict['currency_str'] = 'Smart Property' + parse_dict['currencyId'] = 0 + + #unneeded fields + parse_dict.pop('amount', None) + parse_dict.pop('bitcoin_amount_desired', None) + parse_dict.pop('block_time_limit', None) + else: + return {'tx_hash':tx_hash, 'invalid':(True, 'non supported tx type '+data_dict['transactionType'])} - else: # non valid tx type - return {'tx_hash':tx_hash, 'invalid':(True, 'non supported tx type '+data_dict['transactionType'])} - - else: # not the multisig output - # the output with dust - parse_dict['to_address']=o['address'] - - if parse_dict == {}: - error('Bad parsing of multisig: '+tx_hash) + if parse_dict == {}: # no valid transaction data found + info('bad parsing of multisig data at tx '+tx_hash) + return {'invalid':(True,'bad parsing of multisig data'), 'tx_hash':tx_hash} parse_dict['from_address']=input_addr parse_dict['to_address']=to_address @@ -478,6 +629,9 @@ def examine_outputs(outputs_list, tx_hash, raw_tx): outputs_to_exodus=[] different_outputs_values={} for o in outputs_list: + # ignore outputs which are not pay-to-pubkey-hash or multisig + if not (is_script_paytopubkeyhash(o['script']) or is_script_multisig(o['script'])): + continue if o['address']!=exodus_address: outputs_list_no_exodus.append(o) else: @@ -498,10 +652,7 @@ def examine_outputs(outputs_list, tx_hash, raw_tx): if i['address']==exodus_address: from_exodus=True break - if not from_exodus: - info("invalid tx with multiple 1EXoDus outputs not from 1EXoDus: "+tx_hash) - return (None, None, None, (True,'multiple 1EXoDus outputs not from 1EXoDus')) - else: # 1EXoDus has sent this tx + if from_exodus: # 1EXoDus has sent this tx # Maximal 2 values are valid (dust and change) if len(different_outputs_values.keys()) > 2: error("tx sent by exodus with more than 2 different values: "+tx_hash) @@ -531,24 +682,3 @@ def examine_outputs(outputs_list, tx_hash, raw_tx): outputs_list_no_exodus+=[dust_outputs_to_exodus[0]] outputs_to_exodus=non_dust_outputs_to_exodus+dust_outputs_to_exodus[1:] return (outputs_list_no_exodus, outputs_to_exodus, different_outputs_values, None) - -def get_tx_method(tx, tx_hash='unknown'): # multisig_simple, multisig, multisig_invalid, basic - json_tx=get_json_tx(tx) - outputs_list=json_tx['outputs'] - (outputs_list_no_exodus, outputs_to_exodus, different_outputs_values, invalid)=examine_outputs(outputs_list, hx_hash, tx) - - num_of_outputs=len(outputs_list) - - # check if basic or multisig - is_basic=True - for o in outputs_list: - if is_script_multisig(o['script']): - if num_of_outputs == 2: - return 'multisig_simple' - else: - if num_of_outputs > 2: - return 'multisig' - else: - return 'multisig_invalid' - # all the rest, which includes exodus and invalids are considered as basic - return 'basic' diff --git a/msc_validate.py b/msc_validate.py index bd9b7bf..7725a1d 100644 --- a/msc_validate.py +++ b/msc_validate.py @@ -11,6 +11,8 @@ ####################################################### import os +import sys +import pprint from optparse import OptionParser from msc_utils_validating import * @@ -22,10 +24,11 @@ addr_dict={} tx_dict={} -# invalidate tx due to "avoid changing history" issues -invalidate_tx_list=['13fb62038d98ca4680c6295ba10d17b63c050ccde9c4cee7579fd2e148f25581', \ - '67d6302a45380289de0097afdae8d21a84b0a41221ca14319b3e4cdd8952a53b', \ - '8593540888247a9772fbe0fbcdd765df179779ae0c728e1fe83051f1bf0efe2f'] +#create dict of active fundraisers +fundraisers_dict={} +fundraisers_metadata_dict={} +#create dict of divisible/non smart_properties +property_type_dict={ 'Bitcoin': '0002', 'Mastercoin': '0002', 'Test Mastercoin': '0002' } # prepare lists for mastercoin and test sorted_currency_tx_list={'Mastercoin':[],'Test Mastercoin':[]} # list 0 for mastercoins, list 1 for test mastercoins @@ -52,7 +55,7 @@ 'formatted_amount_requested', 'formatted_price_per_coin', 'bitcoin_required', \ 'payment_done', 'payment_expired', \ 'updating', 'updated_by', \ - 'status'] + 'status','fundraiser_send'] # all available properties of a currency in address addr_properties=['balance', 'reserved', 'received', 'sent', 'bought', 'sold', 'offer', 'accept', 'reward',\ @@ -67,6 +70,9 @@ # create modified tx dict which would be used to modify tx files offers_dict={} +# create a property dict +properties_dict={} + # global last block on the net last_height=get_last_height() @@ -186,7 +192,7 @@ def check_alarm(t, last_block, current_block): # reserved moves to balance. # but only if sell tx did not get upated - if not sell_tx_updated: + if not sell_tx_updated or current_sell_tx['action'] == '02': update_addr_dict(a['to_address'], True, a['currency_str'], reserved=-to_satoshi(amount_accepted), \ balance=to_satoshi(amount_accepted)) else: @@ -640,15 +646,30 @@ def update_addr_dict(addr, accomulate, *arguments, **keywords): # 'Mastercoin', 'Test Mastercoin', 'Bitcoin' or 'exodus' for exodus purchases # then come the keywords and values to be updated c=arguments[0] - if c!='Mastercoin' and c!='Test Mastercoin' and c!='exodus' and c!= 'Bitcoin': + if c!='Mastercoin' and c!='Test Mastercoin' and c!='exodus' and c!= 'Bitcoin' and c!='Smart Property': info('BUG: update_addr_dict called with unsupported currency: '+c) return False + + # get the property name for smart property + if c == 'Smart Property': + c = arguments[1] # is there already entry for this address? if not addr_dict.has_key(addr): # no - so create a new one addr_dict[addr]=new_addr_entry() + # smart property init for dict + if c not in addr_dict[addr]: + currency_dict={} + # initialize all properties + for property in addr_properties: + if property.endswith('_tx'): + currency_dict[property]=[] + else: + currency_dict[property]=0 + addr_dict[addr][c]=currency_dict + # update all given fields with new values keys = sorted(keywords.keys()) # allow only keys from addr_properties @@ -720,6 +741,13 @@ def add_offers(key, t): else: offers_dict[key]=[t['tx_hash']] +# add another property to the modified dict +def add_properties(key, t): + if properties_dict.has_key(key): + properties_dict[key].append(t['tx_hash']) + else: + properties_dict[key]=[t['tx_hash']] + # write back to fs all tx which got modified def write_back_modified_tx(): n=-1 # relevant is last tx on the list @@ -728,7 +756,11 @@ def write_back_modified_tx(): # remove update fs marker del tx_dict[k][n]['update_fs'] # save back to filesystem - atomic_json_dump(tx_dict[k], 'tx/'+k+'.json', add_brackets=False) + + if msc_globals.D != None: + pass + else: + atomic_json_dump(tx_dict[k], 'tx/'+k+'.json', add_brackets=False) # create offers json def update_offers(): @@ -738,7 +770,26 @@ def update_offers(): for b_hash in offers_dict[tx_hash]: offers.append(tx_dict[b_hash][-1]) # write updated offers - atomic_json_dump(offers, 'offers/offers-'+tx_hash+'.json', add_brackets=False) + if msc_globals.D != None: + if msc_globals.O != None: + pprint.pprint(offers) + else: + atomic_json_dump(offers, 'offers/offers-'+tx_hash+'.json', add_brackets=False) + +# create prop json +def update_properties(): + for prop_id in properties_dict.keys(): + # generate tx list for each id + properties=[] + for prop_hash in properties_dict[prop_id]: + properties.append(tx_dict[prop_hash][-1]) + # write updated props + + if msc_globals.D != None: + if msc_globals.P != None: + pprint.pprint(properties) + else: + atomic_json_dump(properties, 'properties/properties-'+prop_id+'.json', add_brackets=False) def update_bitcoin_balances(): if msc_globals.b == True: @@ -765,8 +816,48 @@ def update_bitcoin_balances(): # update addr_dict with bitcoin balance for b in balances: update_addr_dict(b['address'], False, 'Bitcoin', balance=b['paid']) - - + +def award_premine_to_issuer(issuer_addr): + active_fundraiser = fundraisers_dict[issuer_addr] + fundraiser_metadata = fundraisers_metadata_dict[active_fundraiser['tx_hash']] + + fundraiser_metadata['total_tokens_created'] = 0 + #percent for issuer calculation + percentage_issuer = (int(active_fundraiser['percentageForIssuer'])*0.01) + c = coins_dict.keys()[coins_dict.values().index(str(active_fundraiser['currencyId']))] + for transaction in fundraiser_metadata['funded_tx']: + bonus_seconds = int(active_fundraiser['deadline']) - int(transaction['tx_time'][:-3]) + bonus_percentage = float( bonus_seconds)/604800 * float(active_fundraiser['earlybirdBonus'])/100 + 1 + + amount_transfer=to_satoshi(transaction['formatted_amount']) + if int(active_fundraiser['property_type']) == 2: + #for property_type 2 (divisible) + tokens_created=((amount_transfer*10e-9)*int(active_fundraiser['numberOfProperties']))*bonus_percentage + fundraiser_metadata['total_tokens_created']+=tokens_created + else: + #for property_type 1(indivisible) note int type for calculation + tokens_created=int(amount_transfer*10e-9*int(active_fundraiser['numberOfProperties'])*bonus_percentage) + fundraiser_metadata['total_tokens_created']+=tokens_created + + #add Z% of Y Tokens and assign to issuer + total_tokens_premine=fundraiser_metadata['total_tokens_created']*percentage_issuer + + if int(active_fundraiser['property_type']) == 2: + total_tokens_missed=total_tokens_premine-fundraiser_metadata['current_premine'] + else: + total_tokens_missed=int(total_tokens_premine-fundraiser_metadata['current_premine']) + + info(["final total premined", total_tokens_premine, "tokens missed", total_tokens_missed, "metadata", fundraiser_metadata]) + update_addr_dict(issuer_addr, True,'Smart Property', c, balance=total_tokens_missed, received=total_tokens_missed, in_tx=active_fundraiser) + +def check_active_fundraisers(time_block): + import time + for address in fundraisers_dict.keys(): + deadline = int(fundraisers_dict[address]['deadline']) + if not (time_block < deadline): #fundraiser deadline has not been reached + debug(['Deleted fundraiser', address]) + award_premine_to_issuer(address) + del fundraisers_dict[address] # generate api json # address # general files (10 in a page) @@ -781,7 +872,13 @@ def generate_api_jsons(): balances_list=[] addr_dict_api={} addr_dict_api['address']=addr - for c in coins_list: + + #takes keys including smart properties minus exodus and btc + addr_keys = addr_dict[addr].keys() + addr_keys.remove('exodus') + addr_keys.remove('Bitcoin') + + for c in addr_keys: sub_dict={} sub_dict['received_transactions']=addr_dict[addr][c]['in_tx'] sub_dict['received_transactions'].reverse() @@ -805,7 +902,21 @@ def generate_api_jsons(): available_reward=get_available_reward(last_height, c) sub_dict['balance']=from_satoshi(available_reward+addr_dict[addr][c]['balance']) else: - sub_dict['balance']=from_satoshi(addr_dict[addr][c]['balance']) + #if c is in smart_property_dict and is divisible, otherwise just normal is fine + try: + property_type = property_type_dict[c] + if property_type == '0002': + sub_dict['balance']=from_satoshi(addr_dict[addr][c]['balance']) + else: + sub_dict['balance']=addr_dict[addr][c]['balance'] + except KeyError: + #assume normal divisible property like MSC or TMSC + sub_dict['balance']=from_satoshi(addr_dict[addr][c]['balance']) + + #DEBUG + #if len(property_type_dict) > 0: + # info(['property types', property_type_dict, c, sub_dict['balance'], sub_dict]) + sub_dict['total_reserved']=from_satoshi(addr_dict[addr][c]['reserved']) sub_dict['exodus_transactions']=addr_dict[addr][c]['exodus_tx'] sub_dict['exodus_transactions'].reverse() @@ -814,7 +925,14 @@ def generate_api_jsons(): addr_dict_api[coins_dict[c]]=sub_dict balances_list.append({"symbol":"BTC","value":from_satoshi(addr_dict[addr]['Bitcoin']['balance'])}) addr_dict_api['balance']=balances_list - atomic_json_dump(addr_dict_api, 'addr/'+addr+'.json', add_brackets=False) + + if msc_globals.D != None: + if msc_globals.A != None: + pprint.pprint(addr_dict_api) + else: + return True + else: + atomic_json_dump(addr_dict_api, 'addr/'+addr+'.json', add_brackets=False) # create files for msc and files for test_msc for k in tx_dict.keys(): @@ -939,8 +1057,7 @@ def get_available_reward(height, c): # validate a matercoin transaction def check_mastercoin_transaction(t, index=-1): - - debug('block '+t['block']) + debug('block '+str(t['block'])) # update icon and details update_initial_icon_details(t) @@ -972,16 +1089,36 @@ def check_mastercoin_transaction(t, index=-1): update_tx_dict(t['tx_hash'], color='bgc-done', icon_text='Exodus') else: c=currency - if c!='Mastercoin' and c!='Test Mastercoin': + if c!='Mastercoin' and c!='Test Mastercoin' and c!='Smart Property': debug('unknown currency '+currency+ ' in tx '+tx_hash) return False # left are normal transfer and sell offer/accept if t['tx_type_str']==transaction_type_dict['0000']: + transaction_smartProperty=False + # need to get actual currency name at this point + if c == 'Smart Property': + # print >> sys.stderr, 'Looking up smart property name' + transaction_smartProperty=True + try: + c = coins_dict.keys()[coins_dict.values().index(str(int(t['currencyId'],16)))] + except ValueError: + debug('invalid currency identifier'+tx_hash) + mark_tx_invalid(tx_hash, 'pay with a non existing currency') + return False + # print >> sys.stderr, 'Smart property name: ' + c + # print >> sys.stderr, ' currencyId: ' + str(int(t['currencyId'],16)) # heavy debug debug_address(from_addr,c, 'before simplesend') debug_address(to_addr,c, 'before simplesend') + #check active_raisers dict if to_addr has open fundraiser + if to_addr in fundraisers_dict.keys() and int(fundraisers_dict[to_addr]['currencyIdentifierDesired']) == int(t['currencyId'],16): + transaction_activeFundraiser=True + info(['active fundraiser send detected',t]) + else: + transaction_activeFundraiser=False + if tx_age <= blocks_consider_new: update_tx_dict(t['tx_hash'], color='bgc-new', icon_text='Simple send ('+str(tx_age)+' confirms)') else: @@ -1002,16 +1139,90 @@ def check_mastercoin_transaction(t, index=-1): available_reward=get_available_reward(t['block'], c) balance_from=available_reward+addr_dict[from_addr][c]['balance'] else: - balance_from=addr_dict[from_addr][c]['balance'] + # print >> sys.stderr, 'Getting keys from address: ' + str( from_addr ) + #for key in addr_dict[from_addr]: + # print >> sys.stderr, ' ' + str( key ) + + # print >> sys.stderr, 'Sending funds to: ' + str( to_addr ) + if c in addr_dict[from_addr]: + balance_from=addr_dict[from_addr][c]['balance'] + else: + debug( 'Property ' + c + ' does not exist on ' + from_addr + ' in ' + tx_hash ) + mark_tx_invalid( tx_hash, 'nonexistent property on source address' ) + return False + if amount_transfer > int(balance_from): debug('balance of '+currency+' is too low on '+tx_hash) mark_tx_invalid(tx_hash, 'balance too low') return False else: - # update to_addr - update_addr_dict(to_addr, True, c, balance=amount_transfer, received=amount_transfer, in_tx=t) - # update from_addr - update_addr_dict(from_addr, True, c, balance=-amount_transfer, sent=amount_transfer, out_tx=t) + if transaction_smartProperty == True and transaction_activeFundraiser == False: #simple send of smart property (not investment) + # update to_addr + update_addr_dict(to_addr, True,'Smart Property', c, balance=amount_transfer, received=amount_transfer, in_tx=t) + # update from_addr + update_addr_dict(from_addr, True,'Smart Property', c, balance=-amount_transfer, sent=amount_transfer, out_tx=t) + else: + if transaction_activeFundraiser == True: #investment send + # update the balances for the main currency + if transaction_smartProperty: + update_addr_dict(to_addr, True,'Smart Property', c, balance=amount_transfer, received=amount_transfer, in_tx=t) + update_addr_dict(from_addr, True,'Smart Property', c, balance=-amount_transfer, sent=amount_transfer, out_tx=t) + else: + update_addr_dict(to_addr, True, c, balance=amount_transfer, received=amount_transfer, in_tx=t) + update_addr_dict(from_addr, True, c, balance=-amount_transfer, sent=amount_transfer, out_tx=t) + + #update the balances for the smart property being funded + active_fundraiser = fundraisers_dict[to_addr] + fundraiser_hash = active_fundraiser['tx_hash'] + + if int(t['currencyId']) > 2: + #if divisible units are funding indivisible, convert units + if int(active_fundraiser['property_type']) == 2 and int(property_type_dict[c]) == 1: + amount_transfer = amount_transfer * 1e8 + + #bonus calculation + + bonus_seconds = int(active_fundraiser['deadline']) - int(t['tx_time'][:-3]) + info(["bonus calc", float(bonus_seconds)/604800, float(active_fundraiser['earlybirdBonus'])/100, active_fundraiser['earlybirdBonus'] ]) + bonus_percentage = float(bonus_seconds)/604800 * (float(active_fundraiser['earlybirdBonus'])/100) + 1 + #percent for issuer calculation + percentage_issuer = (int(active_fundraiser['percentageForIssuer'])*0.01) + + c = coins_dict.keys()[coins_dict.values().index(str(active_fundraiser['currencyId']))] + + if int(active_fundraiser['property_type']) == 2: + #for property_type 2 (divisible) + tokens_created=((amount_transfer*10e-9)*int(active_fundraiser['numberOfProperties']))*bonus_percentage + #add Z% of Y Tokens and assign to issuer + tokens_percent_issuer=tokens_created*percentage_issuer + + #add %bonus and assign to buyer here + update_addr_dict(from_addr, True,'Smart Property', c, balance=tokens_created, received=tokens_created, in_tx=active_fundraiser) + update_addr_dict(to_addr, True,'Smart Property', c, balance=tokens_percent_issuer, received=tokens_percent_issuer, in_tx=t) + + + info(["Bonus percentage", bonus_percentage, "percent for issuer", percentage_issuer,"total created", tokens_created, "tokens for issuer", tokens_percent_issuer]) + fundraisers_metadata_dict[fundraiser_hash]['funded_tx'].append(t) + fundraisers_metadata_dict[fundraiser_hash]['current_premine']+= tokens_percent_issuer + else: + #for property_type 1(indivisible) note int type for calculation + tokens_created=int(amount_transfer*10e-9*int(active_fundraiser['numberOfProperties'])*bonus_percentage) + #add Z% of Y Tokens and assign to issuer + tokens_percent_issuer=int(tokens_created*percentage_issuer) + + #for property_type 1 (non-divisible) use ints for calculating the amount_transfer + update_addr_dict(from_addr, True,'Smart Property', c, balance=tokens_created, received=tokens_created, in_tx=active_fundraiser) + update_addr_dict(to_addr, True,'Smart Property', c, balance=tokens_percent_issuer, received=tokens_percent_issuer, in_tx=t) + fundraisers_metadata_dict[fundraiser_hash]['funded_tx'].append(t) + fundraisers_metadata_dict[fundraiser_hash]['current_premine']+= tokens_percent_issuer + + info(["Bonus percentage", bonus_percentage, "percent for issuer", percentage_issuer,"total created", tokens_created, "tokens for issuer", tokens_percent_issuer]) + + update_tx_dict(t['tx_hash'], fundraiser_send=['true', active_fundraiser['currencyId']]) + else: + update_addr_dict(to_addr, True, c, balance=amount_transfer, received=amount_transfer, in_tx=t) + # update from_addr + update_addr_dict(from_addr, True, c, balance=-amount_transfer, sent=amount_transfer, out_tx=t) debug('simplesend '+str(amount_transfer)+' '+c+' from '+from_addr+' to '+to_addr+' '+tx_hash) @@ -1023,9 +1234,9 @@ def check_mastercoin_transaction(t, index=-1): else: # check history bugs (currently relevant for sell offer and accepts) - for tx_check in invalidate_tx_list: - if t['tx_hash'] == tx_check: - mark_tx_invalid(t['tx_hash'], 'avoid changing history') + #for tx_check in invalidate_tx_list: + # if t['tx_hash'] == tx_check: + # mark_tx_invalid(t['tx_hash'], 'avoid changing history') # sell offer if t['tx_type_str']==transaction_type_dict['0014']: @@ -1377,7 +1588,7 @@ def check_mastercoin_transaction(t, index=-1): update_tx_dict(t['tx_hash'], bitcoin_required=formatted_decimal(bitcoin_required), \ sell_offer_txid=sell_offer_tx['tx_hash'], \ formatted_price_per_coin=sell_offer_tx['formatted_price_per_coin'], \ - formatted_amount_accepted=str(amount_accepted), \ + formatted_amount_accepted=formatted_decimal(amount_accepted), \ formatted_amount_bought='0.0', btc_offer_txid='unknown') # heavy debug @@ -1386,7 +1597,7 @@ def check_mastercoin_transaction(t, index=-1): if amount_accepted > 0: # ignore 0 or negative accepts # update sell accept - update_tx_dict(t['tx_hash'], formatted_amount_accepted=amount_accepted, payment_done=False, payment_expired=False) + update_tx_dict(t['tx_hash'], formatted_amount_accepted=formatted_decimal(amount_accepted), payment_done=False, payment_expired=False) debug('add alarm for accept '+str(t)) add_alarm(t['tx_hash']) @@ -1421,8 +1632,135 @@ def check_mastercoin_transaction(t, index=-1): debug_address(to_addr,c, 'after sell accept') return True else: - info('unknown tx type: '+t['tx_type_str']+' in '+tx_hash) - return False + if t['tx_type_str']==transaction_type_dict['0032'] or t['tx_type_str']==transaction_type_dict['0033']: + transaction_type=t['tx_type_str'] + transaction_version=t['transactionVersion'] + if transaction_version != '0000' and transaction_version != '0001': + info('non supported property version with transaction version '+transaction_version) + mark_tx_invalid(t['tx_hash'], 'non supported sell offer with transaction version '+transaction_version) + return False + + debug('property creation from '+t['from_address']+' '+t['tx_hash']) + + ecosystem = int(t['ecosystem']) + if ecosystem == 1 and int(t['block']) >= 297110: + count=0 + for each in properties_dict.keys(): + if int(each) > 2 and int(each) < 2147483647: + count+=1 + prop_id=str(count + 3) # +3 to not collide with MSC/TMSC + elif ecosystem == 2: + count=0 + for each in properties_dict.keys(): + if int(each) > 2147483650: + count+=1 + #determine prop_id + prop_id=str(count + 2147483651) # +3 to not collide with MSC/TMSC + else: + mark_tx_invalid(tx_hash, 'TMSC/MSC are valid ecosystems only or MSC ecosystem before non-live block') + return False + + if transaction_type == transaction_type_dict['0033']: + fundraiser = True + else: + fundraiser = False + + if fundraiser: #active and valid fundraiser checks + if fundraisers_dict.has_key(from_addr): + mark_tx_invalid(t['tx_hash'],'already open fundraiser on this address at the current block') + return False + + curr_desired = t['currencyIdentifierDesired'] + if int(curr_desired) == 0: + mark_tx_invalid(tx_hash, 'Bitcoin cannot be the currency identifier desired') + return False + try: + if int(curr_desired) > 3: + valid_curr_desired=coins_dict.keys()[coins_dict.values().index(curr_desired)] + except ValueError: + debug('invalid currency identifier desired'+tx_hash) + mark_tx_invalid(tx_hash, 'desire non existing currency for fundraiser') + return False + + deadline = int(t['deadline']) + if deadline <= int(t['tx_time'][:-3]): + mark_tx_invalid(tx_hash, 'cannot have deadline less than the current block') + return False + + #used later in validation + + property_type = t['property_type'] + if int(property_type) > 2 or int(property_type) <= 0: + mark_tx_invalid(tx_hash, 'Property type > 2 and property type <= 0 not implemented') + return False + + #Add this test soon + prop_name = t['propertyName'] + #if prop_name = "": + # mark_tx_invalid(tx_hash, 'Property name is null') + # return False + + num_prop = t['numberOfProperties'] + if int(num_prop) >= 9223372036854775807: + mark_tx_invalid(tx_hash, 'Number of properties too large') + return False + + prev_prop_id = int(t['previous_property_id']) + #prop_cat = t['propertyCategory'] + #prop_subcat = t['propertySubcategory'] + + #prop_url = t['propertyUrl'] + #prop_data = t['propertyData'] + + + + #earlybird_bonus = t['earlybirdBonus'] + #percentage_for_issuer = t['percentageForIssuer'] + + #check and see if a coin exists with the same name + if prop_name in property_type_dict: + prop_name += '-' + str(prop_id) + + # add symbol to dict + property_type_dict[prop_name]=property_type + coins_dict[prop_name]=str(prop_id) + coins_short_name_dict[prop_name]='SP' + str(prop_id) + + # update property dict + t['currencyId'] = prop_id + add_properties(prop_id,t) + + # update to_addr + if not fundraiser: + update_addr_dict(from_addr, True, c, prop_name, balance=num_prop, in_tx=t) + + + if fundraiser: #active and valid fundraiser + info(['new fundraiser detected', from_addr, t]) + fundraisers_dict[from_addr] = t + fundraisers_metadata_dict[t['tx_hash']] = { 'funded_tx': [], 'current_premine': 0} + + return True + else: + if t['tx_type_str']==transaction_type_dict['0035']: + transaction_type=t['tx_type_str'] + transaction_version=t['transactionVersion'] + if transaction_version != '0000' and transaction_version != '0001': + info('non supported property version with transaction version '+transaction_version) + mark_tx_invalid(t['tx_hash'], 'non supported sell offer with transaction version '+transaction_version) + return False + + if fundraisers_dict.has_key(from_addr) and (fundraisers_dict[from_addr]['currencyId'] == str(int(t['property_type'],16))): + info(['fundraiser cancellation detected, deleting: ', from_addr, t['tx_hash'] ]) + award_premine_to_issuer(from_addr) + del fundraisers_dict[from_addr] + return True + else: + mark_tx_invalid(t['tx_hash'],'no open fundraisers on this address at the current block') + return False + else: + info('unknown tx type: '+t['tx_type_str']+' in '+tx_hash) + return False ######################################################################### @@ -1432,16 +1770,31 @@ def validate(): # parse command line arguments parser = OptionParser("usage: %prog [options]") + parser.add_option("-s", "--silent", action="store_true",dest='silent_mode', default=False, + help="silence info logging") parser.add_option("-d", "--debug", action="store_true",dest='debug_mode', default=False, help="turn debug mode on") parser.add_option("-b", "--skip-balance", action="store_true",dest='skip_balance', default=False, help="skip balance retrieval") + parser.add_option("-D", "--dump-data", action="store",dest='dump_data', + help="dump of state at particular block") + parser.add_option("-P", "--dump-prop", action="store_true",dest='dump_properties', default=None, + help="dump of properties at particular block") + parser.add_option("-O", "--dump-offer", action="store_true",dest='dump_offers', default=None, + help="dump of offers at particular block") + parser.add_option("-A", "--dump-addr", action="store_true",dest='dump_addresses', default=None, + help="dump of addresses at particular block") (options, args) = parser.parse_args() msc_globals.init() + msc_globals.s=options.silent_mode msc_globals.d=options.debug_mode - msc_globals.b=options.skip_balance + msc_globals.b=options.skip_balance or options.dump_data != None + msc_globals.D=options.dump_data + msc_globals.P=options.dump_properties + msc_globals.O=options.dump_offers + msc_globals.A=options.dump_addresses # for heavy debugging msc_globals.heavy_debug = True @@ -1476,12 +1829,30 @@ def validate(): # go over all tx for t in sorted_tx_list: - # check alarm (verify accept offers get payment in time) + #DEBUG add lines here to get state BEFORE processing block + + #if t['tx_hash'] == 'ae9c52320ab59cf633c23087c7efba9b870ea1fac53037951f4c9bcbde1dd3e5': + # print 'before ae9c52320ab59cf633c23087c7efba9b870ea1fac53037951f4c9bcbde1dd3e5' + # print 'balalnce', addr_dict['1BKpa19m5Xy9SvSzC5djPWtCfbuynSDwmb']['Test Mastercoin']['balance'] + # print 'reserved', addr_dict['1BKpa19m5Xy9SvSzC5djPWtCfbuynSDwmb']['Test Mastercoin']['reserved'] + # exit() + + # get current block from first tx try: current_block=int(t['block']) - except ValueError: + except ValueError,e: error('invalid block number during validation: '+t['block']) + + # break if we encounter the block to dump data on + if msc_globals.D != None and current_block > int(msc_globals.D): + break + + # check alarm (verify accept offers get payment in time) check_alarm(t, last_block, current_block) + + if current_block > 292636 and t['tx_hash'] != 'fake': #first SP transaction + current_timestamp=int(t['tx_time'][:-3]) + check_active_fundraisers(current_timestamp) # update last_block for next alarm check last_block=current_block @@ -1502,15 +1873,25 @@ def validate(): except OSError: error('error on tx '+t['tx_hash']) + #DEBUG add lines above here to get state AFTER processing block + + info('updating.. offers') # create json for offers update_offers() + info('updating.. properties') + # create json for properties + update_properties() + + info('updating.. transactions') # update changed tx write_back_modified_tx() + info('updating.. jsons') # generate address pages and last tx pages generate_api_jsons() + info('done...') # write last validated block f=open(LAST_VALIDATED_BLOCK_NUMBER_FILE,'w') f.write(str(last_block)+'\n') diff --git a/outputs/bootstrap.log b/outputs/bootstrap.log deleted file mode 100644 index 451bb00..0000000 --- a/outputs/bootstrap.log +++ /dev/null @@ -1,526 +0,0 @@ -1PA8qhEzW7to6EeqBAdhVZYGbVj2MfmN2n,231091243386 -1JvXUatqyiBs1gsp2vYopyc9QnStfVn2F1,72216013558 -1JRfc5W459i9PAPiGDvTUuJve9fn9z6YjK,14419591601 -1HETPNRFYqoXEEkpvNY4zVLsQcTumfhoJ2,72006679894 -1DmuFKdM3wpD9rDubQa75b8og2HdS6mD9g,1440052249 -1BV9k7VQbtddtLeWxkTSafcYHUsWLJoqWM,7194767692 -1LQzaHiedzHDqPW8q95SyEL7fAzahvrmTo,35938793816 -14CQGTcpq6pduhRUKC5SEShBZHiJJHiKMT,14372771164 -17hvZSX8rxn4oqWHvsWNd6BNq8jTftTvMj,1436649636 -1DoUJcTZMMHN7fMfg2aQE6ohZKXroyXyWW,17236738095 -14KxxiYghzaMiu6Ygcp1q8H4JGWViXLjua,1435843585 -13dFPB1ag1WsJKBWoUp6yUiKYDKvUGFEdz,35844283234 -15WrQhYhHts7jTMoGJ9rDCD12JuCTKy7MM,17519517794312 -16JbDstcRNzevcBSVu7XwUKJ3bB6btxWHh,114459047619 -172mDyjew7PnUpMRdNPjjv1bU1u4Ftgs3M,1429964285714 -15H4EyX75muU78MQTHgNj9S75RbGVtZjJW,28566481481 -196V2uB471HoMHwbkQRQRiwd3aYpU6RtWg,5994129166667 -1MbzgJ9fwqcu2HWByHpUXUxASyURvJ5AWu,14260408399 -1EPsEDXYuQV6nmHE5wgwtJmoiD3T1AXwsW,28417815104 -1AsX2fv1QRFgCYT3F1YMWm37nWnW8TkZnm,14525201389 -18ebxtqmwE2MMJtHbpAosrKEem8go9qc9,7070485284 -163dXoX3bfrM8t8DwbhzfHdGYNQfYfXhK6,703514632937 -1K9ETVUmDcfahqzoanBBmbaDqVmUmqrQJS,588810138889 -17tJw9CG4ufjA1yXd4TFR1wqdgMUFzi5n1,13855634921 -1nivsN37oY13sqNoxzPa3nZrDVQzWGBYD,4328703723 -19mSdN6s9iBHFyJ2ycHbzQ7dcnfgZHN8Cu,273714253 -1Pk3gL2UQGEVSLv6FUVLfx8QT6mfsDhDa,13452853836 -17kKzeuAMhV8Pw9R62CWkhi5pXKmigMJQa,13447939815 -17bGDJTMeiWx4LJdf8gECEPFMmCpY2jA66,336161142053 -1Fi4UdfU7Bw9CdX85K2rtzMoZuESvDPNS7,6694997210 -1AxxvjavPMEiyT7quRVrfWj9xjgv27PSCS,66971585648 -1Hkjo5N1CLb7XmUtCp4xWRder81CRfpdNd,133542873677 -1P2KXwVg2h4iDSqiQf4tCkSL2XEVTAyqrB,133340029762 -1KRaQh3k47P4Mu4XXviRGHrgYi7BK5hsAV,266625859788 -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU,9987256944 -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih,33239141038 -1NHaFCh2fYzqghh8S7YN5fX4xpSY6W3tBz,1322364477 -1DM8pdm1KbTfAcChuoawkEEbwEqGVzmqQ4,13154006283 -18bVHTir24mJdYfbUgpS3k9mkSSzZU3kp1,32877719907 -13aJiZTQYMYSkfT9E366jdKbZgPTtzA2kw,13055739087 -18hoYB6KH5nTu6iE1SH3fNKnnRKFe2vaxF,1303966270 -1CM9jmLrzSUXLRAwFUbcmN7tDiY4Wyi2VC,6508160549 -12jxqC2xCdwT35dCYiUQ9ad5rNCoehzyc2,32510178542 -1Q1sFqsi8S5DxV5hz6sWLamGBp9To93iG7,127723987298 -1NC9iRjQsXFQFQXS5RCqDvBEuNHVf7KHTG,25500486111 -15KPAgwFaRQYxqCV95r6qTHCZgtr9HJVtZ,6331183862 -1HxMra2tkzjD4FmGWyBCJdECL4iiM9oGSk,14292988127 -17xU8miooPMkdK9ZWuQr9NESpr38tHryjG,2013225295 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,52757493056 -1GPwJvMpB4vJPuMwHs9JDAZm9Lh66Y2qnS,249558201 -1PY5X3hbcy6timNa9CQJzzwLeJgvDJ4Dik,249558201 -1roLMd1dT3Arpsq6sqjProZU7vtKL8cx1,183263488609 -1KEr24zCxEwf4WAdwAQ8gy3grsXGfFPaGy,7394243 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7394243 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7392809 -158qYAqDu4GKeVHDiTYA2xAu5Ew4sEU2Ug,24601309524 -12bDX26J84x545pzfSZouULeqjfBtAe9Lv,366663144841 -1oC8H1TZ7JLrt5iD5QtEpBa4p1Nfh8oXG,6098439153 -1GwdoK2ep5sLGyeSuyHiXhJeQd3eogGjR5,1827629216 -1KaM6ANCsKgFnsTRUXnNZzHT5ZLpnRsf3t,60905935847 -13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,3045177745 -1ModAtK5caWTxktKr6EfnEsQQddfVGXaHX,121616700 -1Mt1tCGyJnD6SHzBgxtg6GRJLUhqQrc4ff,6056506283 -15XJoDF4xCUrWX3ES9ftWq3wnGhuRsqrLk,6055548942 -16rQVMZS9k6grNiMybYfznH2R3TViYNMC6,12056734458 -1ModAtK5caWTxktKr6EfnEsQQddfVGXaHX,12040770503 -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n,5949003803 -1DLyCnaUYVgux9L3MPWkH1VHQXTHoTUC9r,5944117890 -1FCVjvfKtLYpUq31S7CfMG9EqqEUtw2Pem,1425958333 -1G4viUH23ktwEBoistLTmCvN2DuWeBfaob,4864758466 -1J7Pzq1MvS6ti5YV6dfJ4NW9iZU4uhMEj6,1185397321 -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP,23519179894 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7048753 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7048753 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7047759 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7047759 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7045897 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7045897 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7044990 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7044990 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7044990 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7044990 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7044262 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7043487 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7042318 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7042318 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7041551 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7041551 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7041551 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7041551 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7041237 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7040591 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7040591 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,7040591 -1EDDiekhvJVCZpfrYSHPCitnzLgrXUXutt,52709918155 -1BMpnWtwT8yCaYrncb2K9HCeE1NMQKX5xv,23044887566 -1LX1Nv7C6RnR18ir3r5GrmyVvG1yy2EnRa,573773946346 -12VamRhmcgsWWKWdNuzWqVYTvnuk2Dsx9b,56848875661 -1B6cMHmdRnGgsAGzyBv4JeBjoxXgcrigk5,5649682540 -13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,563429563 -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n,2795608052 -12bDX26J84x545pzfSZouULeqjfBtAe9Lv,332956795635 -19feAR37pguLwDyEMc8oiW2WT4esrgR5z6,5544255126 -1DSeB9NW2VDeG26Th4fmRGMf6sxww215mZ,221693981 -16P9gkfoX54maGbX6x7EHz1qnY4n8d7rYh,3103611111 -17UDyggWFP6T3tUPTUEHMU8gxRtLZHG322,5522609127 -13PosdpaGPQTQ2TUkr37djsHqshpJ8k3NB,5521622024 -1CQqn1Rx55B5peP7WoucYFMptqM3ASZB6W,153047593 -13NRX88EZbS5q81x6XFrTECzrciPREo821,25649001234 -17crSnfzrevwmqQo7QavEFr4QcaYujbosE,32783859127 -13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH,10919496185 -1PBk85ohrvbiTpDCMxjufAbFfCg3ZdXn8e,5459414683 -1MxAnJim7cxBp6qwfcF99xiNGggTpCzWJd,10917018849 -1LB2AZvQrLaBxti8gkUHRfZ94oKF1dQmQS,13425348313 -19AJ7rVbFeeyeoWjjWm5xrGaoTwPH5bLpY,4365305556 -18chrWPjs9ug7Xq7xDiFkqbe9A8KQdG7eH,3110204340 -15bPHecc5crhXxLnWy11ED8epfGqeBeS5t,218259954 -1MTdEJZoTRbHyUGMjkQZWYBXMcusxkxLLR,2558251539 -18XcsA9AQQRWaFonAWECg6W1zZsmgYjioY,13617761380 -1B2aZeoqGVrZUJg36waug8dNiDK7yX4JoT,326956647 -1MR9wDhmKVRDcVcpm2c4BB71SR9yTYdBvg,32693640873 -1Q2kjs7MjWgCtf8CfVkXHUkAeKbaMqrK9R,10892384259 -1Fi5NGyKoLu1RGveRs9VvjRpVq3kAAoqMa,5442049438 -1ExeGhKKnTwMps5R8d4PyKvdp42dK8cKpx,10881421958 -13x2dka6tVhjsNNNomGJjUPi2iJQCb67bw,1087679398 -1HHTyQWtA8Y93CAGSHZ134yBErtxUoDAYV,3803219329 -1CsG4xVTbJe37gZioPTvPReaoUtWdBBvsq,10974594793 -1D5bcwsAvw8nNb66Pu2nw9BZyfg6kkUtUx,5305650674 -1MQCRE2ePC1M1AgseWar49ncY1Dyk5MGWN,21647609231 -1Fq37GNfyxSvnmye3QdxH6GpPAQ3enarfs,5406375661 -1J7Pzq1MvS6ti5YV6dfJ4NW9iZU4uhMEj6,968603407 -1PVKjb7QQKRZ1urGPmf7xz8ZgHJaqZM9DJ,17763374193 -1A14hK16TgHCYzyqHm2VNZDe8ShYuZ981x,11090075859 -1Ki1Uxc1P1HRfk7Awq8ayZghzwGCsYWe9o,54038037368 -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4,16208444940 -1EnVK4yMdfAQHoJ1q2WBSFXxbwERoeNfYc,108048843 -1EaMiS5stT6FKGEEWQCY3X3ujci3m5MP2m,10775650880 -12sVF4gaKPk1kmGaG8XxtoqgLMxWXr6ReE,5391898148 -1LQBddrjjUaMLHcd4cG9XnN4cCZbHfREJF,1078119709 -1NVwVUhm4tHxpGZg6AMSNmxYMUwkyQe1fn,5386860946 -1GXnFHXZ5FAqWYp2iT1rpnLm3XAiAh2fuq,10766020172 -1x9K9xAft1e9D7e1biMp77JSPQXUtWDwM,10763224206 -18Se5aMNvhYTJoVT4bARcJVVT51mHBwjbJ,32287207341 -12SdZk7Gd19zbvQZDF447PpHSpGY5SGYE2,480998334741 -1NQSMowgQVWprE1dwdbzTwCfFrVXK6sUh2,537222387566 -1RavenHqiZ7euZ1ETKkKP74h5SPLovdF6,1063476071 -1MR9wDhmKVRDcVcpm2c4BB71SR9yTYdBvg,10737222903 -18YwerNLcJhn1ZC55yoiYHevuuobmW3Pww,10741519511 -1RodtRU2EJ7DMgZCjgznivm5yqoeu8Lgh,47450662438 -1Ki1Uxc1P1HRfk7Awq8ayZghzwGCsYWe9o,53649818122 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -194iAz9vJw6tXbxpVZ22YWaYyWDL1QCBDz,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -17uK6u4nTbWv3h6WNKg7ejxmgXvy4qebBY,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,643798 -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih,5361550099 -1BhHGLm843e3kXyMoWr64UBq9Kh8upAY6K,18120686039 -1NZCgBRmEcidNNNCWiccVDEvVRkV2CD7q2,10710864749 -1GhwyPsMn2H47vWjJBAc5skZrdcWsyMDZL,1285254365 -1CQhTj5tAtvzGti2oUiBqF2D8gGvGkJbTo,110273405925 -1LjT88X7Zu8BdbqJw8vfRa83NJuzYL9kqm,10712380845 -12LSJoCAqvVQyvW5qaKGp6ZKMaaZpUcCv3,10700200066 -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n,1068916501 -1C438zHsaG3PZfjAdo3dwS7UrrHsBa7iUb,6372438084 -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU,7999849950 -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU,5332780258 -1nuMbaCBZhDsEe3oKnHY7FtFUtbd1fckf,10662311508 -1Gy2XEo7aF4SsTAjz6ZWfdkiRnDuNpnMP7,12994790766 -12VamRhmcgsWWKWdNuzWqVYTvnuk2Dsx9b,53274413029 -1CFQgs77DDuixrNYqkj4RoQGrSgJmVcaiH,10644222884 -1EfH4Sz6CKxpq8svB2ZfuYqNxZo1jHuwsx,10636585462 -1LLnRXbnVuq7h3Dtap64wXuw76nnjPnjYi,54686718948 -16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS,53168692130 -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n,1595070121 -17t1avq2qk3R4Q3qzSZgjj1FihTgS5JgvY,79739136905 -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU,31895654762 -1eZwsyQJbUhQduw1TJcWTbR7HjnbLgQTs,53157349537 -1JME1dvN2zAAgXhXPnWSWFGQ4Z1iHALFj9,3188535218 -1BFqkdUDwp7k1Qa43vmSWEfj6gaoUVswwZ,10628277116 -1JME1dvN2zAAgXhXPnWSWFGQ4Z1iHALFj9,10624208003 -16DQ4vNFBij4zZ3CURpgX1CCmxSw8yrZdr,2124172288 -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP,31854761905 -1KZmDQGzGJWYmPP9X3b7TA9dY91KBXgaG4,21224580094 -1KZmDQGzGJWYmPP9X3b7TA9dY91KBXgaG4,5304715 -12cBdcNSBHwhJy4oLWzWne2qGu74PsbhTT,2755469940 -19PeRXtHfA9qoQ6MFkR2U7QEFTfdSckE1,52958903770 -14FF284GJ7d9m7WnkhiosFLvwLQ2pqPFTG,10579720569 -1RjrXzEhSsbTMYw2XJrvt6fSiKU9mGeRZ,8271059380 -17nnHLr8gKn6quWJo2orbkxgPj8Y9vcMZj,41189316096 -13CsP5SArN7fPXcXkcH331PPEuzCXdo5i4,21079411376 -1FC9RHREEsUszQHapstfkFcHVwv9ye2QpR,10535380291 -1VP9VM2Kk9SNLRDTJzsEe3WtoKLwWfnmc,21042979497 -1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f,21555312748 -1C9RKyQ9X77iA6ARd182dRyGiacedGwYec,31535004960 -1MWs4JQHn9aY9BQXXqV9bnSZVX3Ecggz9i,26263277213 -1KZmDQGzGJWYmPP9X3b7TA9dY91KBXgaG4,10507412368 -1L83XWGbddEyabcipQNdcibc8q7pJSorYC,25095844590 -1EZnzK4XPwRjAGqyK6oQmy7NpT6uDhWf1U,36715888383 -1EZnzK4XPwRjAGqyK6oQmy7NpT6uDhWf1U,10458637527 -14vTNM7pZiG6qZbmf2A8J1x9wLdYTHvcPX,7867937748 -1JMKBtZbqhZFbJ9GdFdupTy4tGd2Q797JJ,1048728340 -1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH,1048099041 -1N67g4FERNdTrSTrRUcXCQPSyk1LW2ybHW,10480669643 -157FxpGB4ds4sXjSjXqwAXk7WQQSAojNFJ,19385907738 -1donutMH4L7kdRqh4xvSvesfd3KFu3UNm,10476380622 -139Dx25QXHBJD1tfLQMwASAAJrWFiM4BPz,173674178902 -18XV6qXP7U7HV22Y1PajAiuLfGbkBc3Jfg,13071480241 -18XV6qXP7U7HV22Y1PajAiuLfGbkBc3Jfg,13071480241 -1FriA74vipRm9QGQHoWREHHNTBJtS9tR1k,18801716326 -1Pohx6GPsnvnEsYWRRdaK7GVAUkHW56R2K,2089444444 -1AKQX7Qso4UQeAPD7rPWnDAQr43z6eByui,156612276786 -1BCMago5NxA8ga9GBDur8SRbagacvRhmU1,4384533333 -1FLyLEzRvV5ucRaHBcXfhqSQnwjsnCaVhH,208675000000 -1Fq37GNfyxSvnmye3QdxH6GpPAQ3enarfs,5215472884 -1JDNareT7T3DYQjp2L5oKHpQ9wRaDMuZ7p,27076571098 -1FjLKFH6BXB6NUUhpSUNendtjBNSmNNPZT,13724584979 -19x2pAiyH5SM3ubJyrKaEgfxVgRB9131wS,10380095055 -17czXHWXFLVUdgiQSc9FJDT6Fi7ooXj6Uf,15239064974 -18mPaJtGX2ots48KdQr4FZLhDSbgyzfnP9,20702394180 -1KFZmBqaJFnBuJLL9HyPdj19dfcW6gCdkZ,29392328307 -1Cnv5Nj6vtcm4Qb6dqawkLvwCTTZ43wqen,25868295304 -1CbYgvA148Ew5j22S2rbgFCKToQTwRnKfS,21721083333 -1J46wJTLYvhabzrVjVVwrUEUsYvLMbpNwK,3091806830 -1EuFaVybvZij2hAfmRcDYAEmBqRLGRQXan,30985218745 -1EXqpyc7sEVbH1dK8mdE35gM4ijiQ4kGXQ,1038350945 -18mPaJtGX2ots48KdQr4FZLhDSbgyzfnP9,30981493056 -1BQtQSNPhm7fJMQagc8BrEEvcDNLEkB4J9,5162691711 -1BV3rErytJmf17NNQfzHkHYakgweq4HzEx,51581299603 -1G3Cyx194o3yLbKFmzR4NtNE6fxJSRowkp,1028343584656 -1HXaE1qztaBnJJa43LNLzexhzzbefJkm3i,10418902116 -17XgPMQXbXr2RmPKKB5FJ3a2UFMw2Gxarh,16306044147 -14vTNM7pZiG6qZbmf2A8J1x9wLdYTHvcPX,10252384259 -12QfZDTatfAbfiFmpGmFrbNiiyX9PjtYb5,10246618717 -1D2UUm9noQ5eW7mQ8oMiqxvbFqB8wuvvWS,1024608135 -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4,35855630787 -16rUg4eijBqM6oYrSrUzvghe6QM9CHvTYW,53260166005 -13NRX88EZbS5q81x6XFrTECzrciPREo821,30694026435 -1DLwrAYgzMcbntvhmBHKajGEaSv9U2YGTq,10743267361 -1MVb5dBgeCVwpoSQKNkcA9bwq8anx7ydnd,10230834987 -14FaL26kCyEsN4NviMEv3wPQvQGuwodyDr,5931781217 -18rw5npF8gTGMNwk3hZNq3sqTT74Mm8zoh,10220762978 -13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH,10215331248 -16zqyiBKDsL1X39ip5aVHLsxgFmxUCBeKM,40863528651 -16akrvw2R2kREZtYET91bUyoPnyhQyur3E,20498392082 -1JME1dvN2zAAgXhXPnWSWFGQ4Z1iHALFj9,19396420800 -16Y1wE9WEGSySsUNMoKBicQV369C6E1fV,30625927579 -125ana9EZ9HJotBNnGsUqecsp7MzT9Z5Qe,19151128009 -1KDCt8VoY45ya3QnExwtZEdugAnRAncr1Z,102053654101 -165EtwPtp3dXeHBAXpdtKher8wpR7E4Vwh,10203215939 -1ALeLAXtnZrbJHNhWLW5BvNtL1uP5TqJU8,5098438327 -18QTFj5KmMSoYMrCuRGgxdywj3xXYtCvzd,53115530488 -1CbYgvA148Ew5j22S2rbgFCKToQTwRnKfS,577615695255 -134qMRPNjXbwnq73KBDyEzH3BWqgDSK8f4,29375370365 -1KJ8Q3PaVvyjV8GdVMha7VXPaBuipdEFG1,2257171726 -1HonwLhETda1hQc4uLA6bzhXH4CUaBmHGb,10145415013 -139Dx25QXHBJD1tfLQMwASAAJrWFiM4BPz,202899966931 -1KpSuQmkejZPKj18Gj6y2fUL9GZyWCTVuh,4565878253 -1G9mvD12ZAiAxMuXeiaUVDkMAC8C4FFoLG,10140458003 -1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH,9125251488 -19rKrjPfydDQtHfWHcFcnfXjhGzQjkAC6B,5068087798 -1AJzXcrPJbXudbRF43d9j2pympLo5k5Gut,253318511571 -13fBNvRz495auamuV9fNN95XDUdGtjXvfn,26070241812 -1NhAB2xGPosYjooSqJET6eJy2ks15A6CNm,1215738294 -17CoqK7cqNVLyv1CawzsGT12eTMP2fmHuy,202585582011 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,101292791 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,101292791 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,101292791 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,101292791 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,101292791 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,101278786 -1Bitcoin4yZjSSPoXUceJaiyQLABx7B2LL,10127878638 -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP,10127154431 -18WANHBTcj8u2GU1PY4h1iG4EbvgYJM4gL,303797619048 -14PVGnM5F8HfbiphzcSFSAgAcecUywadZQ,1012004299 -17LWEZqC2WyZaBo7pKADcsDkA6zFjY1iTC,2345930404 -17QqwZtZ221Dod33bY33SAZMXrSmi89rsP,6056807478 -1QEhcXxmkkBdcfDhcFU6pFVCdiXQgFZLLY,101159226190 -1HgwzP12Y8jvE6iT4TLWE96zPaFkXPSGL2,10120548817 -1tybxKF5QbtJ43kiV5gAFPNvs8WR6uUWK,10111698082 -1NHVAzYT2jQ8roRddYXhvZtiVjuMwuWBGn,20206713679 -1LfRqHRmJa2S2U4XGVWerta2yQhbvKLG2b,30319280754 -1MZH2ixqERRzuW9Ha7xqbyGoMZyfo4dv4h,10105335648 -1L5AUL3vEh2hvBbxJbtuwhbnWzid9W2gAW,10103731812 -13FrZaxxAWuFUqsmRVatp88h6EKTwmUrtj,11227826983 -1K5Tofy7UTfcrpWBnXcJhHZzvLTksDdasQ,10103326720 -1Jge9avkgP3zsSQsYeSpY5Pd7xBk3qehNv,10348198725 -1MA274fPpN7cBjiseaMtTmuQCq1UjAir5Z,50503654101 -1BhbBYtVSYqGifvPhien4B18MjMGLi8T6h,10100730820 -1EHjzwUwJokV4tZsugPFuHs22xoinaYQ9N,729794566 -1L9bbsESqmaKWsstrDETuZpD1BjLdy94ah,10097524802 -181mY7b9oWKsyf5Q1K4TaJA3JhNoxSrt1S,1504531195 -1Gz4NTCBJb7q5gEURNeGnEivEt2yDY93yK,10097524802 -142p4ML8aXvMAnVjEZMBzyP1c6nauhtufi,1008742728 -13qGRH1n7dFeroYhjd5xktmWo4uzbVPbcS,20188501984 -19V6mbsUWfKeRJyHvPpmjarUyj6Arm9zcQ,2018758267 -1AoYNhBr3F1yTumvtWB2bfsJ6gYZJXdDd9,10091784061 -13sbvde5fYHeM4UxKJpRxFv7a9MjaKdqPT,25881610614 -1MPUi31pLY3KyhMATYo1A2WJKmo8NcbYhz,30270079365 -1MR9wDhmKVRDcVcpm2c4BB71SR9yTYdBvg,10094062366 -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4,50439451058 -1CJcDhymhoMRqFHQzX9hxq7NBjrmy9EYEo,10084092262 -1D11zSkRGnn6VMgaipqNeD2rtQfN5ywos3,4033636904762 -1D11zSkRGnn6VMgaipqNeD2rtQfN5ywos3,1008409226190 -16uce8E7DuqC5QNmsjMLcbZEmLcUBRGqaj,1512488839 -1GuoNYVPUwePeYghvDP4gCny1YaFyMfTcM,15729396429 -19ABrTW1XhWErJxE3UvfNuBRzB4w6UcTRp,5040860615 -18fjRdAxg1aQbw1DeNM68nsD2PiEfayqfJ,302451636905 -1JASe981JUgzKgAoV4SYehenkHbVAT7Ja8,3326065526 -1DDhPhsydLh6dDgAg7GVT3xZuYd93tjqtp,10078986442 -1Na6CZdvTMzaq6f6Xn9jyEfmbf5NiEp65c,259695300198 -13kMuArrYxHpxiVtqUgtYK6viv6JvaBRt4,10075623347 -1QAJh4ZCuSsLErYnbtHqaGNTb5D9tiX2er,30226870040 -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP,70526273148 -16kPgvUbpsYfxj9mvpCQqsoZ4c2oJsNfH,10068911438 -1McQ3KF6eY69a1oJiJhCJj9GcJawFq3vUG,695102440 -1CJcDhymhoMRqFHQzX9hxq7NBjrmy9EYEo,10066636905 -1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD,200303700066 -13reFpj413XUoU3aHNbkPepd11Ha6Hi212,10063083664 -1JpK8eh4Egt3a1YhrSg932qBToSRM2bcvG,5028637566 -17ezCD79i6qmzPPBtD8acNbHgjsTRoJxni,40225271164 -16qiCQ4ocbM4zRceN8RYwWqBRQoiGCvcNa,10052809193 -17aRFk7cMSTuwpkmLk3Znzfeys2XKLVgML,20105555556 -17LWEZqC2WyZaBo7pKADcsDkA6zFjY1iTC,24726534623 -1DHF9MnvvM1zUNxKdu9hB2BfwFuBANPPoe,20101732804 -1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f,10221337649 -1PYXRp4Pj3PqNmyz8GA7qrhsMa1hvjjY7t,20097288360 -1JqNVmZBrCvT19he79L4F2YWxydWZ3mQ14,10046987434 -1NocfrxnLadDjfy5XR1JsSgdVsw8ChxCLA,1004658399 -14AqQW1tKzfRnMAgKxTdDedYJ3KoUVC9ei,10046583995 -1JqxEv4TH6XmMxCfRi9t3t9QhPnxp79UBH,409016530 -1Ao6nURcqduZzsHHPJyKa7kyzTASVPP66L,10045160384 -1Mxuru2YEg9dZ1jGSoEks3BfP7Ee1LaXAd,10045160384 -17dTm9LYvNzNT4AM1kum557L539YXS5y7S,16420711963 -1NgxPxvnswGG85FzjrBQ2tet1sCXpCzhg4,10043457341 -1MnW3JgujMavTzBCiZyfxigDhu9pnDE7dU,10040944114 -1BmPgrDRGJouzPJdtDzXb6KhYDbBi9fy9B,20081888228 -12VamRhmcgsWWKWdNuzWqVYTvnuk2Dsx9b,110439545304 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100376042 -1Dswt3PZQrR9NPcTDRjVZxZbEjpvDfHnjv,100376042 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1Eo6FGPytuYvuA3ZS6ToXqP8sScWWtKhWN,501780257937 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1CQhTj5tAtvzGti2oUiBqF2D8gGvGkJbTo,103372418105 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1NHVAzYT2jQ8roRddYXhvZtiVjuMwuWBGn,50600524771 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100356052 -1LoMxHHUzFXNoFFDjdjDuN6ciq8wrKGPSa,70247696759 -1MLPjJ4iDXpAnzgon9u34ZxnSjTHztxRCP,10034031085 -1AGFxUanxnWnrTiwLsY4NyvNZTv3RWFnfT,100336441799 -1HavyitVfgfbX6q9vprFgU8emXtixixEwY,16015267580 -15KDDJeiiZqSAy8ff2waWgagP82zUrj37c,3009574405 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100319147 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100319147 -18D38HyzBmzArrcHz1jBTVvatvxTnBKRCp,10031914683 -139Dx25QXHBJD1tfLQMwASAAJrWFiM4BPz,300957440476 -1B7GKDsgtgpxp87W1LHskh2Y9Qy8vMH8Ri,10031433532 -138deo1VUkgWmptS8NWnBqVwqWfZx1Q494,20062291667 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100301868 -16pdW8RQjJpF37FLMm7R65HBvn6WY33Pq8,1003018683862 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100301868 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100301868 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100301868 -15oxQoTsbrX7SJK86HHDY7qD8BzUday2dx,20060373677 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100301868 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100301868 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100301868 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100301868 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100301868 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100301868 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100301868 -1NemP5kiTYEj8SwvpVm2uiEwfsa5LNQPmZ,40119744336 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100295850 -1GeVYn8BY86jTgUYoWeLkWXULpJnYD3u87,3911190575 -1ApWmGDViVjTPqRKBhPydpBZ5DRjpuEEic,15142266518 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100279911 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100279911 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100279911 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100279911 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100279911 -18toyySRFSWc56EF6tRXMKQK5UCPgGz39T,997785112 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100279911 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100279911 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100268667 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100268667 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100268667 -15PmgreEf44t2sLwUohspit2DNdmf8nioa,50134334 -17kLc6ZYAbVPpZkCrvdUE3K4NBLSKGxtPb,25062153399 -1JSCYw7NxVbBhv8HCupYhgYqAwqTdRT4u5,20053733466 -1VDTthqUv8bjmFePNxEXTNttkaTWfKdDi,9520257202 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100266005 -1NJW7tJoDJboQQSUdPHQ2pAYm6gAy3SgdZ,701862037 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100266005 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100266005 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100266005 -1AGFxUanxnWnrTiwLsY4NyvNZTv3RWFnfT,50133002646 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100266005 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100262252 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100262252 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100262252 -1JU1GS7GyHg6XYqq5JjNUquzsWgHoUFAGR,238423635218 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100262252 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100262252 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100262252 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100262252 -1G6zjkpKHaDETbswWCJwyu3PQMesoCHvvz,50129208003 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100252910 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100252910 -1aTJa6dhYax5uHV249FA732BQDxABjSPd,5012645503 -1MstrCofqGJQ73bGwdTxj2Uo7EqRxUDWAo,2506322751 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100252910 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100252910 -1D8CrjDtEv3cHm91jjk15ix8yeS8oKDzmE,5011970899 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100239418 -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s,100239418 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100231366 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100231366 -1Dv1tvyWfvRK3QHb3dZAMWLUKzL6Ddad2F,72016089 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,250544560185 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100217824 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,250544560185 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,250544560185 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,250544560185 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,250544560185 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100217824 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,249542381944 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,250544560185 -18JLWH8smwG59zab7j4DqDLZULfK1iEUoH,6013069444 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,10021782407 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100217824 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100217824 -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s,250544560185 -1DbFbPdbDAHyhMat1cmatbPfySAULC7FL3,10021782407 -1BHQeERPiQfQbxc1NYgoYosWqWguKprhkH,220466081 -1DLjzpGMS5DHucLujKArriyp3S8y3aRMqa,10020692791 -18hTHcNvBrGduvG4hG55C6nzRWX5F43qam,3005833333 -1KpSuQmkejZPKj18Gj6y2fUL9GZyWCTVuh,16031111111 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100194444 -1AAciKr6aNMwcYrApgAp336e8EjBwrYPWj,132038340067 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100194444 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100194444 -1JYXwhzeTqrLXfg79EbQ95GpoDHxZWWE6d,100194444444 -1JqDHs9GiNckdTYRjwDQqwxajiRFQyuNcH,50097222222 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100194444 -14REHKxxXicArkZuvfA7DkXeoqgWXZ2pzo,10019444444 -1KA9SV5pyqpW3sqZbfAWhSRiVeeN552BXQ,8215945800 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100191567 -1KA9SV5pyqpW3sqZbfAWhSRiVeeN552BXQ,49092685185 -1F2KyKaLr1QbCgGGAjuBSQSJo8GQ6CaCwF,10018387897 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100159937 -13xyUnidQ1JhQk7hor17eQAPw96hwNZhHJ,100159937 -1Po9mw5bbgx3HxHZ8Vch24XcmHTiFTRDuW,200319874339 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100159937 -14MUti4hZhpnqeqswfHxLWFbYQ1GqezJEY,1001599372 -1DUGRxypnPrQ8t7umv1QPwmwwYnt6dFA3m,1001599372 -17czXHWXFLVUdgiQSc9FJDT6Fi7ooXj6Uf,20030985834 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100159937 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100159937 -15sv8nv5MweHeXnHPbiCaNNf8FDtsG3JdW,23672801150 -14MUti4hZhpnqeqswfHxLWFbYQ1GqezJEY,8092922923 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100146842 -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4,100146841931 -1DUGRxypnPrQ8t7umv1QPwmwwYnt6dFA3m,1001468419 -1Pd1ESY2Hfb8Mom6aTJnpJBEAnkzghgRJq,480704841270 -1Ls3wRUtiTv8fXcjXpT5LYjuxJ7rwWCEKb,100146842 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100140575 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100140575 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100140575 -1CooyTFrq7iUh6ATMxCE4nNgHdgJox8Fxd,20025469577 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100127348 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100127348 -1EYwqZCP6tZJhmADMQtKdex9gWdrsPd4Jo,50058667574 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100127348 -14S5bE4ZGbb4oMXsnNn4zErdKBN5Lyiihb,250305886243 -1GD6YyXnd7DKvfUKs22Fp3FSGuvK6n4F4j,250305886243 -1JzN8RsgCTbbJcjLa9dH93GkehcmNxxZTL,30107496694 -1NYdPSXbWxWQMXG8BhnXYUhFaLFAoyeHR3,15450215782 -17VP7dV8dxn3pDVxrjtgPiKhs37FLBBX7u,690814469 -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,100105589 -1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk,194783543229 -17dkzPoFrkw5V2sDsBqSbbbvygaPzWsz68,50052794 -13xyUnidQ1JhQk7hor17eQAPw96hwNZhHJ,135305780444 -15XDP6tMciP3xxBroJCPoqTAvZJz2x1kAx,60053546708 -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4,100094229497 -1HcQb16RSjdiH622sNs7Qsqt5vNWWa7oKV,1801450892857 -1MqAVaKzB9NKmxH1cGqmtWoUeeZuVTuy2d,50540705605 -18iT8DhkKDEMya2bDN1HRKEv6tWSQEgSbi,12259252821 -13xyUnidQ1JhQk7hor17eQAPw96hwNZhHJ,50034879299 -12y5do1mEWJcrawDq3p66Zd9NSUdWUAqYF,500348793 -1KGWhADxrefkLZHhthnJ4HkEsu5t9zVPF1,19963009722 -1Df8GTfWasZHJ4svNXR9sGrmXzTRt1Z5BT,50024603175 -112xdxgBpCV6TCAXrJ3Cfv3cXQwGyHbH6L,10004920635 -1LzbWC9xo4TC5j6P3tjYT3fJVQ5XpaYADE,5002460317 -15jY9nQsgzdkuj7Rw2KHGpDKoxv59gDJE8,30013784722 -144PHZQoDNfhGwUFtAKayDyJSVQm1YkyHm,20007218915 -1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD,100012119709 -17VP7dV8dxn3pDVxrjtgPiKhs37FLBBX7u,2995362985284 -1eLiRanANMyXjVGU9LMqzm9wGKdRAg8q4,9951205911 -13X7yRvpDf1NKLhzsYHaghfNJQ8JpXTa7N,89930898042 -18cSnNojZK11mLRk9ND3iosxrvZ9VBXtBh,10000000000 -16WsVPMRUCdMiT1rMxM9CEspdn7JYD2U5j,29995000000 -1H5i3Pz9y1mYnXqXDAxJPohggwyBT98oc1,10000000000 -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih,119995000000 -1KDCt8VoY45ya3QnExwtZEdugAnRAncr1Z,110000000000 -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih,156000000000 diff --git a/outputs/bootstrap_story.log b/outputs/bootstrap_story.log deleted file mode 100644 index b201cb5..0000000 --- a/outputs/bootstrap_story.log +++ /dev/null @@ -1,1052 +0,0 @@ -block 249498 tx hash 546a406a131089e7c2f27d34a93a4d27441d98d096404d6737c5ad5b5e61a09b value 1600000000 -> 231091243386 dacoins -1PA8qhEzW7to6EeqBAdhVZYGbVj2MfmN2n got 231091243386 dacoin -block 249498 tx hash bae553e46507edc10cf4d8a6b7101a6dee5b33d284f1dd5dfed6fb6cb16239b5 value 500000000 -> 72216013558 dacoins -1JvXUatqyiBs1gsp2vYopyc9QnStfVn2F1 got 72216013558 dacoin -block 249536 tx hash a1fc7a2786dd09d17b3a2c5e1bc6b193f4aa1a759a95f3094788b87a894d2dfb value 100000000 -> 14419591601 dacoins -1JRfc5W459i9PAPiGDvTUuJve9fn9z6YjK got 14419591601 dacoin -block 249559 tx hash 9fc7a388faa56326fb43cbe39130790fc0e17e2eaf9191d630b63552c8f21d36 value 500000000 -> 72006679894 dacoins -1HETPNRFYqoXEEkpvNY4zVLsQcTumfhoJ2 got 72006679894 dacoin -block 249560 tx hash 97d3cb22c0ac35b151681b0c8d1d5454df8dafabfcf45d61b61d6924e5359770 value 10000000 -> 1440052249 dacoins -1DmuFKdM3wpD9rDubQa75b8og2HdS6mD9g got 1440052249 dacoin -block 249571 tx hash 4a6d5e7178e5a5713a8960d2793ac6769b7aeb52dbec4259fe6b3c76eff85593 value 50000000 -> 7194767692 dacoins -1BV9k7VQbtddtLeWxkTSafcYHUsWLJoqWM got 7194767692 dacoin -block 249590 tx hash 3549762108ed6cda278038aa53790fa2d4f825a826aa2e65964b78e258d64312 value 250000000 -> 35938793816 dacoins -1LQzaHiedzHDqPW8q95SyEL7fAzahvrmTo got 35938793816 dacoin -block 249595 tx hash 7b520c71331a880955eff45d0c87c607a6ff9598c26d3fc0dd81775714244d63 value 100000000 -> 14372771164 dacoins -14CQGTcpq6pduhRUKC5SEShBZHiJJHiKMT got 14372771164 dacoin -block 249601 tx hash a96f47f7f954259a1ff29ec29bc2ed61447fdfcde1d5173dad35f05fff493c3a value 10000000 -> 1436649636 dacoins -17hvZSX8rxn4oqWHvsWNd6BNq8jTftTvMj got 1436649636 dacoin -block 249603 tx hash aef4b79eeab6aa7bc3cc4cee6aa97d116c3a61e814ec155142d9d613ec348210 value 120000000 -> 17236738095 dacoins -1DoUJcTZMMHN7fMfg2aQE6ohZKXroyXyWW got 17236738095 dacoin -block 249611 tx hash 2d8ccb128eb8c0eebceeb86ca049991bf0336124e7a44b4d718630298b4335ad value 10000000 -> 1435843585 dacoins -14KxxiYghzaMiu6Ygcp1q8H4JGWViXLjua got 1435843585 dacoin -block 249638 tx hash 42d3a3256c94be0f6817b908975c3f2687831c34291d5d004316643b9ca828d5 value 250000000 -> 35844283234 dacoins -13dFPB1ag1WsJKBWoUp6yUiKYDKvUGFEdz got 35844283234 dacoin -block 249639 tx hash 68c0677e3fc26286d2c83772f6e1f7b4b9e3072008995a884a8c1e943f4dbf99 value 122200000000 -> 17519517794312 dacoins -15WrQhYhHts7jTMoGJ9rDCD12JuCTKy7MM got 17519517794312 dacoin -block 249682 tx hash 7c63c2b9596a5da51a6cfeb89e17196105849bdf656f890c96f919020d38be44 value 800000000 -> 114459047619 dacoins -16JbDstcRNzevcBSVu7XwUKJ3bB6btxWHh got 114459047619 dacoin -block 249689 tx hash cf059ff53cec7b99881ef8e8edd9e6ed83622cd943382345e4dbe755f3ef70e1 value 10000000000 -> 1429964285714 dacoins -172mDyjew7PnUpMRdNPjjv1bU1u4Ftgs3M got 1429964285714 dacoin -block 249704 tx hash 1dd453cbf00d6909be5a3252f44e16e184781194c078536319df347f61ea221b value 200000000 -> 28566481481 dacoins -15H4EyX75muU78MQTHgNj9S75RbGVtZjJW got 28566481481 dacoin -block 249716 tx hash 52a875a46d7973760974b2ae8fa7bb71bfe7d06e0be8fd2bf2e20eaca182dbd7 value 42000000000 -> 5994129166667 dacoins -196V2uB471HoMHwbkQRQRiwd3aYpU6RtWg got 5994129166667 dacoin -block 249731 tx hash eb09e11086fb1bd8984aaf18d2c7c856d5c56799b52f676c45f85cab3a38e0b9 value 100000000 -> 14260408399 dacoins -1MbzgJ9fwqcu2HWByHpUXUxASyURvJ5AWu got 14260408399 dacoin -block 249757 tx hash 103397caef6dc9b31c944eaa3efecfe924dc4f830db815d9d1735cdc5f4354a5 value 199500000 -> 28417815104 dacoins -1EPsEDXYuQV6nmHE5wgwtJmoiD3T1AXwsW got 28417815104 dacoin -block 249763 tx hash 3bdce7ad4a1dd4abf1ec8dc5141f67b42be9243f86af42d6fe279b4af85f2b23 value 102000000 -> 14525201389 dacoins -1AsX2fv1QRFgCYT3F1YMWm37nWnW8TkZnm got 14525201389 dacoin -block 249895 tx hash 439f768546dcf5f5bf18baae568fcf60173133a2f0ce92e4808b419b2e513c88 value 50000000 -> 7070485284 dacoins -18ebxtqmwE2MMJtHbpAosrKEem8go9qc9 got 7070485284 dacoin -block 249998 tx hash 2093e07b55a3680b8eab7401db99ae7c15ad274733c98d2860839a67bc54d4ef value 5000000000 -> 703514632937 dacoins -163dXoX3bfrM8t8DwbhzfHdGYNQfYfXhK6 got 703514632937 dacoin -block 250039 tx hash 32048de8ab28e1aaf337c51b9c4779e01cfd3af21986172766054122c99edd69 value 4200000000 -> 588810138889 dacoins -1K9ETVUmDcfahqzoanBBmbaDqVmUmqrQJS got 588810138889 dacoin -block 250243 tx hash 4f1faadbad6c08cb2d37fdbba20f2cd8cef831704b7ddc7bdef75ca317fdbe51 value 100000000 -> 13855634921 dacoins -17tJw9CG4ufjA1yXd4TFR1wqdgMUFzi5n1 got 13855634921 dacoin -block 250364 tx hash 8e4c30cd597d95161888226c9d27eed745ba2f0c88cfecf42641e1fbdef5fd78 value 31415926 -> 4328703723 dacoins -1nivsN37oY13sqNoxzPa3nZrDVQzWGBYD got 4328703723 dacoin -block 250471 tx hash 99a9a9eb5c7b691d866836582c829bab0fcce68cd1e24211b062085ad8ea8b4e value 2000000 -> 273714253 dacoins -19mSdN6s9iBHFyJ2ycHbzQ7dcnfgZHN8Cu got 273714253 dacoin -block 250771 tx hash 4c9d084740b688dfd83301adc9f164c8ab49c6a2bb515757e8ff4e7d114e102f value 100000000 -> 13452853836 dacoins -1Pk3gL2UQGEVSLv6FUVLfx8QT6mfsDhDa got 13452853836 dacoin -block 250779 tx hash 881fd331147322b189f1ebed0f50953893efe9edba0c236b116311f3cb4bd792 value 100000000 -> 13447939815 dacoins -17kKzeuAMhV8Pw9R62CWkhi5pXKmigMJQa got 13447939815 dacoin -block 250780 tx hash 3304da05c7a8048b151b8ef3d3ce586a6252354c89929016b224ceb413e07aa5 value 2499950000 -> 336161142053 dacoins -17bGDJTMeiWx4LJdf8gECEPFMmCpY2jA66 got 336161142053 dacoin -block 250836 tx hash b2de5a2c37b9ee4ef6182662592912debbe25b8c75275f06853cb0f83b814f32 value 49950000 -> 6694997210 dacoins -1Fi4UdfU7Bw9CdX85K2rtzMoZuESvDPNS7 got 6694997210 dacoin -block 250850 tx hash 61956a585c5f62a324f707a0fce452deb70c451d073e4fce5af652cdb17c99e7 value 500000000 -> 66971585648 dacoins -1AxxvjavPMEiyT7quRVrfWj9xjgv27PSCS got 66971585648 dacoin -block 250911 tx hash b23037c9e680f0f7033f547bc1ddcb7eb08f8170bf7be221d90ad1f21050e2b5 value 1000000000 -> 133542873677 dacoins -1Hkjo5N1CLb7XmUtCp4xWRder81CRfpdNd got 133542873677 dacoin -block 250939 tx hash 7e04289e9a6bd5bae7ac3a54315bd8983472d0ef8dc68637bbaa1217c430af61 value 1000000000 -> 133340029762 dacoins -1P2KXwVg2h4iDSqiQf4tCkSL2XEVTAyqrB got 133340029762 dacoin -block 250946 tx hash 921c71e341b310d5c15bb9804fc922b719d897b06359849be6ecfe40e1930a5b value 2000000000 -> 266625859788 dacoins -1KRaQh3k47P4Mu4XXviRGHrgYi7BK5hsAV got 266625859788 dacoin -block 250966 tx hash 5f7ae7e8382062b8aa5029a8a169f72ecb4b8970d30a9baf3fb65c8f807a7e64 value 75000000 -> 9987256944 dacoins -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU got 9987256944 dacoin -block 250988 tx hash 59d820b072e1e460373d4a63753aa73e9602e83f5f48002e36fafca3b1f05236 value 250000000 -> 33239141038 dacoins -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih got 33239141038 dacoin -block 251192 tx hash c4d8779eca455e60bf7f78a506ab238d355fe8b09ae338d3e04dfff15d15868a value 10050000 -> 1322364477 dacoins -1NHaFCh2fYzqghh8S7YN5fX4xpSY6W3tBz got 1322364477 dacoin -block 251196 tx hash 7b7c233fb2ef60bdd4410d32176bb38dd42c4e8e6f6ebc2f05439c2434f009ec value 100000000 -> 13154006283 dacoins -1DM8pdm1KbTfAcChuoawkEEbwEqGVzmqQ4 got 13154006283 dacoin -block 251201 tx hash 13fa9bbfb290d39bac6bb5cac78576edb3a2eb736881263130a7dbfeaddfb211 value 250000000 -> 32877719907 dacoins -18bVHTir24mJdYfbUgpS3k9mkSSzZU3kp1 got 32877719907 dacoin -block 251335 tx hash ba1c8df94766190b62ee86152eb2bd917d7f650c3bd721414b38dbd947bb5d27 value 100000000 -> 13055739087 dacoins -13aJiZTQYMYSkfT9E366jdKbZgPTtzA2kw got 13055739087 dacoin -block 251358 tx hash 262d8ee2a6ca31f21d0dadbd1706a5e6ca72ae258f37c4dafd6894a2f717dc80 value 10000000 -> 1303966270 dacoins -18hoYB6KH5nTu6iE1SH3fNKnnRKFe2vaxF got 1303966270 dacoin -block 251391 tx hash 8a1c9fe66cebacb02b345e257463d027d13825d01b26ef19569798e789d20d62 value 50000000 -> 6508160549 dacoins -1CM9jmLrzSUXLRAwFUbcmN7tDiY4Wyi2VC got 6508160549 dacoin -block 251411 tx hash 5791edf5e2c4c5b00f38118d627b1b4b21fc9078317cd11c6188e20d096c43cc value 249990000 -> 32510178542 dacoins -12jxqC2xCdwT35dCYiUQ9ad5rNCoehzyc2 got 32510178542 dacoin -block 251778 tx hash caf5b6c01924031d72417620da4444eff9806cb40559efe12827fed57b33b24b value 999990000 -> 127723987298 dacoins -1Q1sFqsi8S5DxV5hz6sWLamGBp9To93iG7 got 127723987298 dacoin -block 251807 tx hash 94bc5dd2ceda5cb5865080e2af5355bc82624e2ad9ab07db123af61042cb3c91 value 200000000 -> 25500486111 dacoins -1NC9iRjQsXFQFQXS5RCqDvBEuNHVf7KHTG got 25500486111 dacoin -block 251911 tx hash 57709c4aac59f05c2cd1996a4d0f2407956a7246c4ca0577434b7358749c9a8b value 50000000 -> 6331183862 dacoins -15KPAgwFaRQYxqCV95r6qTHCZgtr9HJVtZ got 6331183862 dacoin -block 252025 tx hash 47969d143d94be89cd672c070ee4cbb5f069181909fa3d32cd3cfba710993f65 value 113607500 -> 14292988127 dacoins -1HxMra2tkzjD4FmGWyBCJdECL4iiM9oGSk got 14292988127 dacoin -block 252035 tx hash 41221128684474ab667ea0a2b2d2191e3aeb24662f1be7cd51538ba39fc8bd8d value 16020000 -> 2013225295 dacoins -17xU8miooPMkdK9ZWuQr9NESpr38tHryjG got 2013225295 dacoin -block 252041 tx hash b9fb3df0b70d0303c8f1d1ca194be9a796012693a53c17f0e6f428b8adec9970 value 420000000 -> 52757493056 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 52757493056 dacoin -block 252139 tx hash f0bdcc20283bb3d929365c558786400862221acc53ee8195ca11f51b38e170d7 value 2000000 -> 249558201 dacoins -1GPwJvMpB4vJPuMwHs9JDAZm9Lh66Y2qnS got 249558201 dacoin -block 252139 tx hash e5743a88fdd59c78fa1986bd9c2dee4ec207dd8a30cf1b5b4dba10e17ae90041 value 2000000 -> 249558201 dacoins -1PY5X3hbcy6timNa9CQJzzwLeJgvDJ4Dik got 249558201 dacoin -block 252203 tx hash 90c2d776636f341d72d464a4cd806d1e9ef5eeb6bc0d3278504a1dd259a88814 value 1474950000 -> 183263488609 dacoins -1roLMd1dT3Arpsq6sqjProZU7vtKL8cx1 got 183263488609 dacoin -block 252317 tx hash ab4adf577b9b88b264347b734dfce9d399ed985f76ca7c913338ca144238d3b8 value 60000 -> 7394243 dacoins -1KEr24zCxEwf4WAdwAQ8gy3grsXGfFPaGy got 7394243 dacoin -block 252317 tx hash 63c7eb7032645344a362bf729fb05217156d6d5d7e610e4e1953485dd1892d1c value 60000 -> 7394243 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7394243 dacoin -block 252320 tx hash 9e0b6bb921ff60de42125bd75c80ba68ceab3c649882fbd15d6f5190ecda0737 value 60000 -> 7392809 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7392809 dacoin -block 252353 tx hash d913902deaf4b64b7d8521c0f0aad9156200d58bec769fb0d6d15b636b4b2e95 value 200000000 -> 24601309524 dacoins -158qYAqDu4GKeVHDiTYA2xAu5Ew4sEU2Ug got 24601309524 dacoin -block 252443 tx hash daac3281efdfc35a2b49e47a21e270dc4003efe14833108f51e4a678b274b3c4 value 3000000000 -> 366663144841 dacoins -12bDX26J84x545pzfSZouULeqjfBtAe9Lv got 366663144841 dacoin -block 252465 tx hash c9b4ad5537eb90ccc71590eee2165abe51e10dc1385177bb7d665c5203d74481 value 50000000 -> 6098439153 dacoins -1oC8H1TZ7JLrt5iD5QtEpBa4p1Nfh8oXG got 6098439153 dacoin -block 252484 tx hash 24f604e12d73c60e22cc05b102e0c283ca4eb4cee8306ec62cd8ca756eb346f0 value 15000000 -> 1827629216 dacoins -1GwdoK2ep5sLGyeSuyHiXhJeQd3eogGjR5 got 1827629216 dacoin -block 252487 tx hash ce9899108a2f0d4633dfab183372da8669d35f646a2b9e7fe49564b3f1566734 value 500000000 -> 60905935847 dacoins -1KaM6ANCsKgFnsTRUXnNZzHT5ZLpnRsf3t got 60905935847 dacoin -block 252488 tx hash 1f18eb85eba2fc4cf2e288fcd8272ea97e90661a07b2f96f12d919eb8e1f7472 value 25000000 -> 3045177745 dacoins -13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v got 3045177745 dacoin -block 252514 tx hash 1b6f9fd39ed61b78977d2c5ee1974217ed8ac183bc0d7731072dde884b6a0ddd value 1000000 -> 121616700 dacoins -1ModAtK5caWTxktKr6EfnEsQQddfVGXaHX got 121616700 dacoin -block 252582 tx hash 407e0a6ae2986693c8e5d35b2e47f973af35239fc53e8561137ee5f320195682 value 50000000 -> 6056506283 dacoins -1Mt1tCGyJnD6SHzBgxtg6GRJLUhqQrc4ff got 6056506283 dacoin -block 252586 tx hash 37992e445c33dd74a1e4e00dabb6a66f16a5d39977a1f5fd1a6c0154e884eee2 value 50000000 -> 6055548942 dacoins -15XJoDF4xCUrWX3ES9ftWq3wnGhuRsqrLk got 6055548942 dacoin -block 252657 tx hash 6769187272ebe0fae45b8c0617fead121072e3447753fa1afa47c47d5f478cd0 value 100000000 -> 12056734458 dacoins -16rQVMZS9k6grNiMybYfznH2R3TViYNMC6 got 12056734458 dacoin -block 252673 tx hash 1780aaf442aa7912593cb29865ca3c72f6c6a177397d1e39caee8a284f364529 value 100000000 -> 12040770503 dacoins -1ModAtK5caWTxktKr6EfnEsQQddfVGXaHX got 12040770503 dacoin -block 252867 tx hash 6d918914ef98ea58a8db3860644b11ad891491eec2dc2469f8ef8f28075f0126 value 50000000 -> 5949003803 dacoins -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n got 5949003803 dacoin -block 252881 tx hash 8eb5c46b49929406396d03bd4b43be2c4d27faa5f3398fb8563e0a0af71f73d0 value 50000000 -> 5944117890 dacoins -1DLyCnaUYVgux9L3MPWkH1VHQXTHoTUC9r got 5944117890 dacoin -block 252889 tx hash b204a0bda1b19b193b1a75150f351da7e224c2d5cd7794a51d34d58f8d3c4f92 value 12000000 -> 1425958333 dacoins -1FCVjvfKtLYpUq31S7CfMG9EqqEUtw2Pem got 1425958333 dacoin -block 252906 tx hash f369981b6b28d3f3fff35955c02771d44e5a7bde34a760b9dbe0bed575e4187c value 41000000 -> 4864758466 dacoins -1G4viUH23ktwEBoistLTmCvN2DuWeBfaob got 4864758466 dacoin -block 252924 tx hash 147687964b3fb41b869505a59a62c78dea78529db21f51439d5822096102add8 value 10000000 -> 1185397321 dacoins -1J7Pzq1MvS6ti5YV6dfJ4NW9iZU4uhMEj6 got 1185397321 dacoin -block 253046 tx hash c360b915bca5128b13bb3ac8df64eb111a0c3ebf407bd7e459e64fcf299e3529 value 200000000 -> 23519179894 dacoins -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP got 23519179894 dacoin -block 253056 tx hash fa4486dc136fc8a741b69b015bfb6f1f7ca1898d4b6ce6c77b5d98ba59b6b1fb value 60000 -> 7048753 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7048753 dacoin -block 253056 tx hash 79fe07d288e1db4d4e06b101ca13dc9fb6a656edc27927a159d4f589bb823702 value 60000 -> 7048753 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7048753 dacoin -block 253058 tx hash 16ae9fb54c0a333ad1cda5deefbb4ca75501f9b04b229e3d5d85a02d0a7a6b93 value 60000 -> 7047759 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7047759 dacoin -block 253058 tx hash dfa827e4ddfa12ab05a18f5aace980eba23b1299c3c51080004600a04a9ca74b value 60000 -> 7047759 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7047759 dacoin -block 253062 tx hash dc5c346e1b7ee7de135a34eab255afc48e2d9092553f32c1a80030e0438b61ec value 60000 -> 7045897 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7045897 dacoin -block 253062 tx hash bfadadcbf9e67eda7359d628645473ce7753d4048964d94340e4acfbbf15de5c value 60000 -> 7045897 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7045897 dacoin -block 253065 tx hash 546802255d4d07ff823cb935b02706563536606d3546e76e16bc945a9a2198af value 60000 -> 7044990 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7044990 dacoin -block 253065 tx hash bfe12ea222779c5892b5e5fb127ce4e709867d3cf160b95b189ecf4e7e92fda5 value 60000 -> 7044990 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7044990 dacoin -block 253065 tx hash 38f7a303cef730b8257684d9a2950f5e170c3d75cd81a6ef11250bff31ffb81f value 60000 -> 7044990 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7044990 dacoin -block 253065 tx hash 755c9a40f4b8b7558e571b832efdad05a81eba442cb25e81b638c0c69d38a12d value 60000 -> 7044990 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7044990 dacoin -block 253068 tx hash a1633359d7264ceefd3557ca96798cff77e357a472c72be65cef9a729ab77ad9 value 60000 -> 7044262 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7044262 dacoin -block 253069 tx hash 3db59c2699a6ac17cc70b4501c358adec9de7f9460e5b107509c30b516e2573c value 60000 -> 7043487 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7043487 dacoin -block 253071 tx hash 5ebd99c3c556df0cae23ba3918a651b37a614dd972ba215e56589133fa1148e5 value 60000 -> 7042318 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7042318 dacoin -block 253071 tx hash 0f7e5512c969cce01cd061913b6ca67c894d81cb418e4346a7775d1d7a23f6b8 value 60000 -> 7042318 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7042318 dacoin -block 253074 tx hash 183a85d19059557b2ae0aba3cf987943c83aaa79ec68d18aa261c9c6fcdb1fe6 value 60000 -> 7041551 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7041551 dacoin -block 253074 tx hash f90073ddf621e936f897b277325a6c09a9024d4e87ff6a42bdd0b0022edd04d0 value 60000 -> 7041551 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7041551 dacoin -block 253074 tx hash 19ae118dc686e532953457bf2258a84e49b238f521cdb2aa96466614b2a590a0 value 60000 -> 7041551 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7041551 dacoin -block 253074 tx hash 2829192d5402664962255b191d79e14baa56a088ce731465a54fbb3b9c9527f3 value 60000 -> 7041551 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7041551 dacoin -block 253075 tx hash 85949f5d508249d0f0d80bb4e69fe7f096f0a640ec0078a23fbbcc8206965738 value 60000 -> 7041237 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7041237 dacoin -block 253077 tx hash 4b6e83e9a558a1949ac39a9aa274238ee793248548c642c085ebf11c4df05589 value 60000 -> 7040591 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7040591 dacoin -block 253077 tx hash 0ce5e9eaa64e4aa0873720edc9b251d700cc9164e95396bbf995d84d49d48e67 value 60000 -> 7040591 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7040591 dacoin -block 253077 tx hash e483f444e74d9fe6725b1ee3ea08990b3d83fca7ca4cea430719b7fa89f1c1d4 value 60000 -> 7040591 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 7040591 dacoin -block 253101 tx hash 7a0aea9d1425de3325ba3fe5a65ee4608879481321cf78e099b5f0c31645caab value 450000000 -> 52709918155 dacoins -1EDDiekhvJVCZpfrYSHPCitnzLgrXUXutt got 52709918155 dacoin -block 253365 tx hash 59359127365c6caa47bea15c93680c1e7ba62f0ee66bf8a069ee4a7d59364185 value 200000000 -> 23044887566 dacoins -1BMpnWtwT8yCaYrncb2K9HCeE1NMQKX5xv got 23044887566 dacoin -block 253462 tx hash f1c138adf8692f233108f7d77dd290b0cd7d92d4fa3b4dc7f9d683d9ff701255 value 5012500000 -> 573773946346 dacoins -1LX1Nv7C6RnR18ir3r5GrmyVvG1yy2EnRa got 573773946346 dacoin -block 253574 tx hash f3d53688fea3ec79703ebd70fc84b551f1cae3436c96a217115abdfdf36e41c8 value 500000000 -> 56848875661 dacoins -12VamRhmcgsWWKWdNuzWqVYTvnuk2Dsx9b got 56848875661 dacoin -block 253677 tx hash 4f06eaeac398df7c6808bb842ad0eb8092070a3f5832b702422c36f7222cc21d value 50000000 -> 5649682540 dacoins -1B6cMHmdRnGgsAGzyBv4JeBjoxXgcrigk5 got 5649682540 dacoin -block 253728 tx hash 22f21fc24f65fe33ba15656f2f17a0b2d73f6abb5848f6a004120291ded23cd2 value 5000000 -> 563429563 dacoins -13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v got 563429563 dacoin -block 253853 tx hash 96d32ba54f56ae3a63afc16f8cdc70b741f37aa5d80193118c5eabf65f6b2107 value 25000000 -> 2795608052 dacoins -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n got 2795608052 dacoin -block 253962 tx hash fdc0fb67a798353c961a722d2ac9b9b4f238b6e8559bb3956f2195ab8294214c value 3000000000 -> 332956795635 dacoins -12bDX26J84x545pzfSZouULeqjfBtAe9Lv got 332956795635 dacoin -block 253977 tx hash 10dced7b48aab2743fe620ea5a2ee77bde97e92b2346683b561a1f4ff1a889b7 value 50000000 -> 5544255126 dacoins -19feAR37pguLwDyEMc8oiW2WT4esrgR5z6 got 5544255126 dacoin -block 253980 tx hash d9c6f037fd056fe4f812d9c78509d4674a2bc6c924c03e7440d677d07ad69614 value 2000000 -> 221693981 dacoins -1DSeB9NW2VDeG26Th4fmRGMf6sxww215mZ got 221693981 dacoin -block 253981 tx hash fda45bc5330148d353bd3ccf233342a7bcb2d2019bdb46cfd27dc0576c697f44 value 28000000 -> 3103611111 dacoins -16P9gkfoX54maGbX6x7EHz1qnY4n8d7rYh got 3103611111 dacoin -block 254027 tx hash 2b71210cc7d735d943e5836cafde4bad78ded2ecbfd7854b64a8b4deaf32f231 value 50000000 -> 5522609127 dacoins -17UDyggWFP6T3tUPTUEHMU8gxRtLZHG322 got 5522609127 dacoin -block 254031 tx hash 9fd9c756bca3046f5352dd9a549232e4ccbf2a95b6b15c608f962db4e01203cf value 50000000 -> 5521622024 dacoins -13PosdpaGPQTQ2TUkr37djsHqshpJ8k3NB got 5521622024 dacoin -block 254150 tx hash c2da73da1822f58b07986c995fac590a5e4659deb685933886980722f4615ad9 value 1400000 -> 153047593 dacoins -1CQqn1Rx55B5peP7WoucYFMptqM3ASZB6W got 153047593 dacoin -block 254153 tx hash 5958db9cc1d3fb98edab0ba0a8574401835fecca05eed24b6cfd428b9900ed3f value 234657797 -> 25649001234 dacoins -13NRX88EZbS5q81x6XFrTECzrciPREo821 got 25649001234 dacoin -block 254156 tx hash 65b5cea9cf575625f69505e5dcc30bec69506121a1bd256b73f28f77b1d0f424 value 300000000 -> 32783859127 dacoins -17crSnfzrevwmqQo7QavEFr4QcaYujbosE got 32783859127 dacoin -block 254160 tx hash 4c55c968879d01c4daf3b247abc338c72987fee606be15d4a1c46d7e8e499e2b value 99950000 -> 10919496185 dacoins -13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH got 10919496185 dacoin -block 254165 tx hash b77834021121867985c77d78840f97061a91cc7fe4c9f70d242698ff74202330 value 50000000 -> 5459414683 dacoins -1PBk85ohrvbiTpDCMxjufAbFfCg3ZdXn8e got 5459414683 dacoin -block 254167 tx hash 7013fed1ead2efe9fb383d67c95543e949e752a052721829b97a23247a130616 value 100000000 -> 10917018849 dacoins -1MxAnJim7cxBp6qwfcF99xiNGggTpCzWJd got 10917018849 dacoin -block 254168 tx hash c858f6f09135ea9d33cc7b7401763e195c4e146239e60d4f9f8de2d0ef8b126d value 123000000 -> 13425348313 dacoins -1LB2AZvQrLaBxti8gkUHRfZ94oKF1dQmQS got 13425348313 dacoin -block 254172 tx hash df9929f9edfbbb7e376cee9d58e59ff4f7af6d56e65a1129bb5835b0d749bb92 value 40000000 -> 4365305556 dacoins -19AJ7rVbFeeyeoWjjWm5xrGaoTwPH5bLpY got 4365305556 dacoin -block 254173 tx hash 26742323a81830d74ba6bea87a3040170ab5be2d6a268f79ba8af9a78e17d68a value 28500000 -> 3110204340 dacoins -18chrWPjs9ug7Xq7xDiFkqbe9A8KQdG7eH got 3110204340 dacoin -block 254173 tx hash b3e3971ade0a90a0df0a9ae8261c17582d603383d5551e45d971dfc0d017a1a0 value 2000000 -> 218259954 dacoins -15bPHecc5crhXxLnWy11ED8epfGqeBeS5t got 218259954 dacoin -block 254175 tx hash 57e0d8095ca36bfcc57db22355838737337f584950419fddd07e85a936dcbc41 value 23450000 -> 2558251539 dacoins -1MTdEJZoTRbHyUGMjkQZWYBXMcusxkxLLR got 2558251539 dacoin -block 254179 tx hash 92499dc553bf6e24fb56a2cc7557ce2b093f24c3a76237a2630d5613db8491e3 value 124838792 -> 13617761380 dacoins -18XcsA9AQQRWaFonAWECg6W1zZsmgYjioY got 13617761380 dacoin -block 254186 tx hash f30618b96d377047987b8a7c36777666d15dc9267a01b102e212720d94170dcc value 3000000 -> 326956647 dacoins -1B2aZeoqGVrZUJg36waug8dNiDK7yX4JoT got 326956647 dacoin -block 254187 tx hash 5383018b76109c5f0c971b90e69e17e7e4c943c166be86d37b4e714a75f7f74a value 300000000 -> 32693640873 dacoins -1MR9wDhmKVRDcVcpm2c4BB71SR9yTYdBvg got 32693640873 dacoin -block 254194 tx hash 5d794861e2e5098d187b20dcb3fb5ed11844d7b1cf52bd896a5af0bebb3e7355 value 100000000 -> 10892384259 dacoins -1Q2kjs7MjWgCtf8CfVkXHUkAeKbaMqrK9R got 10892384259 dacoin -block 254204 tx hash b207ac3172506e4c896f3e463098d5204f33e8efef6af8b5df1692fa492e1e8b value 50000000 -> 5442049438 dacoins -1Fi5NGyKoLu1RGveRs9VvjRpVq3kAAoqMa got 5442049438 dacoin -block 254206 tx hash 36b063842503a2b8f82dd04dc8cea8d52c79797117eee18c799701a51d70048c value 100000000 -> 10881421958 dacoins -1ExeGhKKnTwMps5R8d4PyKvdp42dK8cKpx got 10881421958 dacoin -block 254211 tx hash fad2ac5469dde89a9033615ba46eeded090e1ae1c1b6c3c2bdc126058ab31ffc value 10000000 -> 1087679398 dacoins -13x2dka6tVhjsNNNomGJjUPi2iJQCb67bw got 1087679398 dacoin -block 254219 tx hash a6e12b31c102331e6822768932efe1da23c0068ec86bb99a3ae58ae75a112a89 value 35000000 -> 3803219329 dacoins -1HHTyQWtA8Y93CAGSHZ134yBErtxUoDAYV got 3803219329 dacoin -block 254249 tx hash 07e2cc8195c14ec822756140cf9fbfaf1755b948768b6a79ce333daaffc80acd value 101234500 -> 10974594793 dacoins -1CsG4xVTbJe37gZioPTvPReaoUtWdBBvsq got 10974594793 dacoin -block 254265 tx hash 50c4d7abdd230b8f3e2e0e39db4b2cf87d9bad985edac449f1b9cc6f34261713 value 48985203 -> 5305650674 dacoins -1D5bcwsAvw8nNb66Pu2nw9BZyfg6kkUtUx got 5305650674 dacoin -block 254274 tx hash c2d5abe2822b891d6aa6edb4b9a379c3c137f3a3bc50808473a12ebfe8aed175 value 199950000 -> 21647609231 dacoins -1MQCRE2ePC1M1AgseWar49ncY1Dyk5MGWN got 21647609231 dacoin -block 254285 tx hash 22a9c6807133e9743f19e7e484cdf49f67caff945d718250484c734c4d1b6bb8 value 50000000 -> 5406375661 dacoins -1Fq37GNfyxSvnmye3QdxH6GpPAQ3enarfs got 5406375661 dacoin -block 254288 tx hash b954b9d1d8f5cc2f2e921cb8fe42adf8023cb63d77672d47d3ef0c0ebf17c4ce value 8960000 -> 968603407 dacoins -1J7Pzq1MvS6ti5YV6dfJ4NW9iZU4uhMEj6 got 968603407 dacoin -block 254290 tx hash 4d316b339334ae1cf8b89080b4bdc760628c9b6b73348eb145e209e11194c0d2 value 164340000 -> 17763374193 dacoins -1PVKjb7QQKRZ1urGPmf7xz8ZgHJaqZM9DJ got 17763374193 dacoin -block 254291 tx hash d70e05e99ed1ce555f59ce29ba53107f7ab90609063ca7a0097be4fdb9e12045 value 102613607 -> 11090075859 dacoins -1A14hK16TgHCYzyqHm2VNZDe8ShYuZ981x got 11090075859 dacoin -block 254291 tx hash 77c1623e1e9414d40f14db09da182c25fdb961923ef07a1184c21070681b360e value 500000000 -> 54038037368 dacoins -1Ki1Uxc1P1HRfk7Awq8ayZghzwGCsYWe9o got 54038037368 dacoin -block 254292 tx hash b7b67ddb011a3673486c346f78a719fc1bef9f7e4e374c045b4f4e3a6cd66c0f value 150000000 -> 16208444940 dacoins -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4 got 16208444940 dacoin -block 254295 tx hash 0c0e54e2b770e9e509054883cb29770e3c8a431630e213c28fee5ebc89c8def0 value 1000000 -> 108048843 dacoins -1EnVK4yMdfAQHoJ1q2WBSFXxbwERoeNfYc got 108048843 dacoin -block 254303 tx hash 054c557d68d16888a991c14f49e5b4fda6b4fe5de2813291723881b906f3ecd5 value 99800000 -> 10775650880 dacoins -1EaMiS5stT6FKGEEWQCY3X3ujci3m5MP2m got 10775650880 dacoin -block 254315 tx hash 0f7b9ed1d96e5256ccdc2b6122ca0f3c20f79c5d95d048a72aadcc4e45712c80 value 50000000 -> 5391898148 dacoins -12sVF4gaKPk1kmGaG8XxtoqgLMxWXr6ReE got 5391898148 dacoin -block 254320 tx hash 37c879c64cb5d80c12bb299b82d48f45f5d33ed08ac48aab661d89ac67d4eea2 value 10000000 -> 1078119709 dacoins -1LQBddrjjUaMLHcd4cG9XnN4cCZbHfREJF got 1078119709 dacoin -block 254324 tx hash 45ff9339a33f13a811232d3ff11f685b8ca181c55ac1150e6e01410005b9b7ab value 50000000 -> 5386860946 dacoins -1NVwVUhm4tHxpGZg6AMSNmxYMUwkyQe1fn got 5386860946 dacoin -block 254330 tx hash 97d94e76455b23ff35bc8597770a9a6942cff38d68b0705984f334f66820e066 value 100000000 -> 10766020172 dacoins -1GXnFHXZ5FAqWYp2iT1rpnLm3XAiAh2fuq got 10766020172 dacoin -block 254336 tx hash 098d5d74587e32c369ebd43d952cb2adc6dff03efd1a9968ed602969d40b587e value 100000000 -> 10763224206 dacoins -1x9K9xAft1e9D7e1biMp77JSPQXUtWDwM got 10763224206 dacoin -block 254338 tx hash 420ed27923b2621d4e7e5cba1fe6944337270740a3a2af3acbd8aac0a74fcc5b value 300000000 -> 32287207341 dacoins -18Se5aMNvhYTJoVT4bARcJVVT51mHBwjbJ got 32287207341 dacoin -block 254351 tx hash 3c704437f60dbc7a8d196d234d66b5b1cbd9b0cbfc403645419e28b9ea9b15d1 value 4472135955 -> 480998334741 dacoins -12SdZk7Gd19zbvQZDF447PpHSpGY5SGYE2 got 480998334741 dacoin -block 254362 tx hash 0877a5f0ab220a42c16c31f51bbfe339218637765e36139e4abc8ccbaa32d84a value 5000000000 -> 537222387566 dacoins -1NQSMowgQVWprE1dwdbzTwCfFrVXK6sUh2 got 537222387566 dacoin -block 254364 tx hash 42b9157bbe2fe30d298244391fe20a99532814dc71f67752af534bc8606b0234 value 9900000 -> 1063476071 dacoins -1RavenHqiZ7euZ1ETKkKP74h5SPLovdF6 got 1063476071 dacoin -block 254365 tx hash 247d87270e9879cc4db31fe46841d2a1835db77c07c8829843cfb27d181abd90 value 99960000 -> 10737222903 dacoins -1MR9wDhmKVRDcVcpm2c4BB71SR9yTYdBvg got 10737222903 dacoin -block 254365 tx hash 0735b89ef909fced5eb9818c35bba57f15c072e3e289b013b87658bd96b5d44e value 100000000 -> 10741519511 dacoins -18YwerNLcJhn1ZC55yoiYHevuuobmW3Pww got 10741519511 dacoin -block 254365 tx hash 20e5b8b7b408a433fff1f39fbd4ae4b10de1cdf8b6dd9f31453e0fa14cac3f78 value 441750000 -> 47450662438 dacoins -1RodtRU2EJ7DMgZCjgznivm5yqoeu8Lgh got 47450662438 dacoin -block 254382 tx hash aa7997efbff24a69c190bf1e8fc92a135b7d3efb593746a9acfd3b60edb5d43b value 500000000 -> 53649818122 dacoins -1Ki1Uxc1P1HRfk7Awq8ayZghzwGCsYWe9o got 53649818122 dacoin -block 254382 tx hash b91ebba6649df4ea6bc98d412238b8cecbfb75ce6f680ac8d37d15f1314f3c74 value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash 012e60064d48dcf1757e69c0fcd5ef1c0fcaffe0b0ce0f953a25f13ea4bfeb25 value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash c7447cf2a33617aed6ce7ff6778a6cc6107a66180f70c53639aaa5ee7db9a26a value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash d10c50c7c12fe6cae4154610f38f1045ec08d10402c1b506bd9ec5fdf5f2f294 value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash c0ec94d6154edfa1dc250237693b74cf282695bb08042dfa6f35d5c7dfae5890 value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash cdfd4bbf985eefd5139cc23ce367b6a7a7fef0b2d3f1f72baf86ef3b37b61398 value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash f17d988c49732a1bb9f3022a4bb9f08daa256f7ad0a56ff1d517f49f278a09e3 value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash 1bce28bd47ae7622b16acf7736f18d4d83fd48eb7a61f796c08aeae1a8e3709c value 6000 -> 643798 dacoins -194iAz9vJw6tXbxpVZ22YWaYyWDL1QCBDz got 643798 dacoin -block 254382 tx hash 7d4eea4e30000701c730a06ba1212299a8b7be166202861f16eecb18086cb5bb value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash a2421fa6c90e253bcf6d2a3e7cb7740fbabb2bee51b5d07031ad1935b4990a19 value 6000 -> 643798 dacoins -17uK6u4nTbWv3h6WNKg7ejxmgXvy4qebBY got 643798 dacoin -block 254382 tx hash 4452003746886e1517da78419f39a8403b5896567ceb94ba0851dc1411fa637e value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash f993be9813e409ee1ce42b14c444af65b789350abe412fd2f8a289082b7b4870 value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254382 tx hash 75a33ab549f1980b2a10bd8b5641e01094dcfeaf5a116a82bdd48a4bb3c5c02d value 6000 -> 643798 dacoins -15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b got 643798 dacoin -block 254387 tx hash f4d70ec5b506237c46c423d548226dbb6dff34db959c6855cece079839057ca2 value 50000000 -> 5361550099 dacoins -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih got 5361550099 dacoin -block 254390 tx hash 0f77eb9754f6c1918a772a1dace0a5678638e13abed7c15e7985de9d404f2ce7 value 169010000 -> 18120686039 dacoins -1BhHGLm843e3kXyMoWr64UBq9Kh8upAY6K got 18120686039 dacoin -block 254403 tx hash 5bca0a59e0fd11e84d85a5b99958d0b9e99f2aee15c8d6cdce7cc4bb767d27b7 value 100000000 -> 10710864749 dacoins -1NZCgBRmEcidNNNCWiccVDEvVRkV2CD7q2 got 10710864749 dacoin -block 254405 tx hash ab9d821f9074206834e90bb30a18dcccc9c43b41c184f4724706a7129bbc89d8 value 12000000 -> 1285254365 dacoins -1GhwyPsMn2H47vWjJBAc5skZrdcWsyMDZL got 1285254365 dacoin -block 254410 tx hash afa29842f1f45a92e38f8f4513fea495eb15d4e83567fcd91cee61e1671a2615 value 1030056648 -> 110273405925 dacoins -1CQhTj5tAtvzGti2oUiBqF2D8gGvGkJbTo got 110273405925 dacoin -block 254411 tx hash 0f68401f63c06f03b875b25b68e7887b0aa875c0136b1e4039f2905180769679 value 100080000 -> 10712380845 dacoins -1LjT88X7Zu8BdbqJw8vfRa83NJuzYL9kqm got 10712380845 dacoin -block 254414 tx hash fb49eebdc1b6cd0f85352c13fd0fb5d5a82307501528a4f0e6f137f6768377f3 value 100000000 -> 10700200066 dacoins -12LSJoCAqvVQyvW5qaKGp6ZKMaaZpUcCv3 got 10700200066 dacoin -block 254428 tx hash 9b7436618ba42bee9ccb1923967d21a0d8004b4ae9da5def2e3af82bb6db3376 value 10000000 -> 1068916501 dacoins -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n got 1068916501 dacoin -block 254450 tx hash f148a7d00d65935928cc6a95e58fe91659089983bf096cab26b20ad25738bb7a value 59709703 -> 6372438084 dacoins -1C438zHsaG3PZfjAdo3dwS7UrrHsBa7iUb got 6372438084 dacoin -block 254453 tx hash d2585246f92f4543de41d72fed3111286b79b3a2581f9e340458294167e9591f value 75000000 -> 7999849950 dacoins -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU got 7999849950 dacoin -block 254455 tx hash 894feec39a7358d839b61d77e4851885fa1958dfc5e2d7ad6aac89df31c1c5c5 value 50000000 -> 5332780258 dacoins -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU got 5332780258 dacoin -block 254460 tx hash 2152c777a44d40f98922eaa52ab27f583740874272c44fae6e1ca8c3621d0986 value 100000000 -> 10662311508 dacoins -1nuMbaCBZhDsEe3oKnHY7FtFUtbd1fckf got 10662311508 dacoin -block 254466 tx hash 6e027a05674c78e2cf7c6f0d2d1d61f7527ee62e496a2bfcd799dc301f1f42b4 value 121950000 -> 12994790766 dacoins -1Gy2XEo7aF4SsTAjz6ZWfdkiRnDuNpnMP7 got 12994790766 dacoin -block 254467 tx hash 7520fb8b8e86e80a45e426aefee35a067ef611410831e5fb3b992dd3aa4407d0 value 500000000 -> 53274413029 dacoins -12VamRhmcgsWWKWdNuzWqVYTvnuk2Dsx9b got 53274413029 dacoin -block 254473 tx hash 4596af234177947b3a4d38282dbfec1f07255ca0de80d5d595b1bde8977a7085 value 100000000 -> 10644222884 dacoins -1CFQgs77DDuixrNYqkj4RoQGrSgJmVcaiH got 10644222884 dacoin -block 254475 tx hash 3e12ac69e7bdf08e141092fa2d33069ed3dc6cd27f07a57f54858397991987fb value 99950000 -> 10636585462 dacoins -1EfH4Sz6CKxpq8svB2ZfuYqNxZo1jHuwsx got 10636585462 dacoin -block 254480 tx hash 957c9bb02d2d7299fce59b809edf84c31a537b9c9f5e636e8eacd966f878d95b value 514000000 -> 54686718948 dacoins -1LLnRXbnVuq7h3Dtap64wXuw76nnjPnjYi got 54686718948 dacoin -block 254489 tx hash 407b1385e8a3c332b559a50fad0956c8f853a939e86f4662beed43d5ada8efa6 value 500000000 -> 53168692130 dacoins -16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS got 53168692130 dacoin -block 254491 tx hash f16b61cca7008fde0cd0fda5b8fa403ea8453e04408090f7b037eb067680613c value 15001000 -> 1595070121 dacoins -1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n got 1595070121 dacoin -block 254492 tx hash 468ee7bcfad3f850977e81ea1358d9c7fb924aebf3cf1647934a929f6cb2e8ed value 750000000 -> 79739136905 dacoins -17t1avq2qk3R4Q3qzSZgjj1FihTgS5JgvY got 79739136905 dacoin -block 254492 tx hash 6c874a43881fc0e6c9931a3658def848cc95a60ae109dbecad95d706cb687522 value 300000000 -> 31895654762 dacoins -1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU got 31895654762 dacoin -block 254494 tx hash 81932b2794a6c315dab5f0eb201631b94b52576acffc0bfbd32989824f653ca3 value 500000000 -> 53157349537 dacoins -1eZwsyQJbUhQduw1TJcWTbR7HjnbLgQTs got 53157349537 dacoin -block 254497 tx hash 1e319b1531794d6f2eda0cee2bba1ecfc30b84394a5c0e82420df6c2a8b991db value 30000000 -> 3188535218 dacoins -1JME1dvN2zAAgXhXPnWSWFGQ4Z1iHALFj9 got 3188535218 dacoin -block 254498 tx hash 7620192480e230b30a7eb3130208e306e40ed7999145df725b08d1141207ccad value 100000000 -> 10628277116 dacoins -1BFqkdUDwp7k1Qa43vmSWEfj6gaoUVswwZ got 10628277116 dacoin -block 254506 tx hash 31cc92f5620028f6afc4698737f9a04df5b2ab1de69a1ad3f22b11bd09d350b0 value 100000000 -> 10624208003 dacoins -1JME1dvN2zAAgXhXPnWSWFGQ4Z1iHALFj9 got 10624208003 dacoin -block 254510 tx hash 3845c03b0075d0a32b7da966be4249f2eb8fb96da6ac773dc1b7d77d6574d7af value 20000000 -> 2124172288 dacoins -16DQ4vNFBij4zZ3CURpgX1CCmxSw8yrZdr got 2124172288 dacoin -block 254512 tx hash 9d507ffdf8bbe6eadf37287f5c2d4dc23835c0af0f86a0022fa63380a03b7b76 value 300000000 -> 31854761905 dacoins -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP got 31854761905 dacoin -block 254514 tx hash c9c4350fbafa9b2e971c136a852c42adec9dd3ef0c997227d6996327c0607761 value 199950000 -> 21224580094 dacoins -1KZmDQGzGJWYmPP9X3b7TA9dY91KBXgaG4 got 21224580094 dacoin -block 254520 tx hash 130c5175d4f3e9add03bd1d115a87b26e613293fbe3815b970f8fc830f018ebc value 50000 -> 5304715 dacoins -1KZmDQGzGJWYmPP9X3b7TA9dY91KBXgaG4 got 5304715 dacoin -block 254538 tx hash f66fb3cd3d95ecaebcb071382644232b62cf6ed2fb448b2313635a690901e937 value 26000000 -> 2755469940 dacoins -12cBdcNSBHwhJy4oLWzWne2qGu74PsbhTT got 2755469940 dacoin -block 254550 tx hash 781a9f65e00aa120e52587b33ba26f3d561ffc23dfc01faf24147e69c8907618 value 500000000 -> 52958903770 dacoins -19PeRXtHfA9qoQ6MFkR2U7QEFTfdSckE1 got 52958903770 dacoin -block 254557 tx hash 1fb1836e750025aea7a66425787dade93968d027fccc8ec1e91caa9e28b40b10 value 100000000 -> 10579720569 dacoins -14FF284GJ7d9m7WnkhiosFLvwLQ2pqPFTG got 10579720569 dacoin -block 254572 tx hash 9346d424e3c4f4d6868a48f1a9f04baa6a935ba420e9480734c849566f648b6a value 78267380 -> 8271059380 dacoins -1RjrXzEhSsbTMYw2XJrvt6fSiKU9mGeRZ got 8271059380 dacoin -block 254581 tx hash af0dabbcb2003db3ba97911bf200f42a7045bd77ec8310bbd89417b78dce05c0 value 390100000 -> 41189316096 dacoins -17nnHLr8gKn6quWJo2orbkxgPj8Y9vcMZj got 41189316096 dacoin -block 254606 tx hash f197b580d492d07115113b8591d6462327e946bc59fd34c7bf317bc9b28eb8e2 value 200000000 -> 21079411376 dacoins -13CsP5SArN7fPXcXkcH331PPEuzCXdo5i4 got 21079411376 dacoin -block 254611 tx hash 1c2c674ac9375a6653e55c54e7da27d7d73f560c47269b6ac6e80545c675c8db value 100000000 -> 10535380291 dacoins -1FC9RHREEsUszQHapstfkFcHVwv9ye2QpR got 10535380291 dacoin -block 254619 tx hash fb461df383e9d08875b75b5cc335218cea1983d0b1f5539d62ec43a193750687 value 200000000 -> 21042979497 dacoins -1VP9VM2Kk9SNLRDTJzsEe3WtoKLwWfnmc got 21042979497 dacoin -block 254628 tx hash 05d709a3c50c9109fb551bf34faf60eca5e373cce8df420663890ba3e1d77898 value 205000000 -> 21555312748 dacoins -1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f got 21555312748 dacoin -block 254637 tx hash e2a2ada035f096ddccd60925f6c051aac56be7ccfe0865453ff7b28fefc02de3 value 300000000 -> 31535004960 dacoins -1C9RKyQ9X77iA6ARd182dRyGiacedGwYec got 31535004960 dacoin -block 254642 tx hash d621a3a0c66cede64dc2e7a3fc2c4b77aebf67a6ea17c1f9042fa51f00437ae3 value 249950000 -> 26263277213 dacoins -1MWs4JQHn9aY9BQXXqV9bnSZVX3Ecggz9i got 26263277213 dacoin -block 254642 tx hash 5f01def181b761f1d03bcd20590c5729a47b11c68955b364add9253d7aec5eb9 value 100000000 -> 10507412368 dacoins -1KZmDQGzGJWYmPP9X3b7TA9dY91KBXgaG4 got 10507412368 dacoin -block 254643 tx hash 1cce29a19b070c711231fa74c74a0b815790700450c60460ae6f747aa272f804 value 238900000 -> 25095844590 dacoins -1L83XWGbddEyabcipQNdcibc8q7pJSorYC got 25095844590 dacoin -block 254661 tx hash 13eb6485cee4786dd0e0184dcb1f28a32e5efaa357d6daf0e85e18906072087e value 349950000 -> 36715888383 dacoins -1EZnzK4XPwRjAGqyK6oQmy7NpT6uDhWf1U got 36715888383 dacoin -block 254661 tx hash 6b835d8ddb5036a5c9927d929c6a4035638e19cb9ae9ad80fffa13f389541e14 value 99684370 -> 10458637527 dacoins -1EZnzK4XPwRjAGqyK6oQmy7NpT6uDhWf1U got 10458637527 dacoin -block 254663 tx hash a61bcf97868a87c1f6cd1f98d206495e2f2d5773a8789f2f2682bfbac98586b9 value 75000000 -> 7867937748 dacoins -14vTNM7pZiG6qZbmf2A8J1x9wLdYTHvcPX got 7867937748 dacoin -block 254666 tx hash 542266f396e8d6725761788cb1e873ac9cccef1e5ec58a7554e6e95cbdda973d value 10000000 -> 1048728340 dacoins -1JMKBtZbqhZFbJ9GdFdupTy4tGd2Q797JJ got 1048728340 dacoin -block 254673 tx hash 98fb65296e54b6e81e44f97c9818d81b79c512f0b9371333d135cbfccb705a3f value 10000000 -> 1048099041 dacoins -1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH got 1048099041 dacoin -block 254674 tx hash e667b5e8dd3d6f88fae52384a8ec21194cc0675054f8f21ef21d105b1dae2bbf value 100000000 -> 10480669643 dacoins -1N67g4FERNdTrSTrRUcXCQPSyk1LW2ybHW got 10480669643 dacoin -block 254676 tx hash a7aaf93b455cdf4d6d65fb92a743c369ab9e95dc0a28fecddae943800d559a58 value 185000000 -> 19385907738 dacoins -157FxpGB4ds4sXjSjXqwAXk7WQQSAojNFJ got 19385907738 dacoin -block 254680 tx hash dc745152672879823402844a678fa1b9935fe79050c938557ba30d96188cf58a value 100000000 -> 10476380622 dacoins -1donutMH4L7kdRqh4xvSvesfd3KFu3UNm got 10476380622 dacoin -block 254697 tx hash cd72d0f17ac800600b9bb4ef758472ca709bb9eb4691b60251c937de81bd80dd value 1660000000 -> 173674178902 dacoins -139Dx25QXHBJD1tfLQMwASAAJrWFiM4BPz got 173674178902 dacoin -block 254705 tx hash d67076ffa5ee9b3816006e5147966fbab5308a221b3d626c2c6a7320e0823ab4 value 125000000 -> 13071480241 dacoins -18XV6qXP7U7HV22Y1PajAiuLfGbkBc3Jfg got 13071480241 dacoin -block 254705 tx hash d7ca46d71087fc50ac120ac012b23a6ac6f0a855758f1ad546b8c300fb7ddf52 value 125000000 -> 13071480241 dacoins -18XV6qXP7U7HV22Y1PajAiuLfGbkBc3Jfg got 13071480241 dacoin -block 254715 tx hash 592403d02e7d47d6b35b157094c9e8d2725ed88e4156367bc5a42f16b5341030 value 179950000 -> 18801716326 dacoins -1FriA74vipRm9QGQHoWREHHNTBJtS9tR1k got 18801716326 dacoin -block 254716 tx hash bc4004a0e5d109662403ceaf27afa6a2c7e310ece7e529d7dd7ab9b0c37d1ca7 value 20000000 -> 2089444444 dacoins -1Pohx6GPsnvnEsYWRRdaK7GVAUkHW56R2K got 2089444444 dacoin -block 254724 tx hash 9e2a7d9583753ae375c37055e0f91d8d94774533d374692c97fed2b7f72c8ea8 value 1500000000 -> 156612276786 dacoins -1AKQX7Qso4UQeAPD7rPWnDAQr43z6eByui got 156612276786 dacoin -block 254727 tx hash 7f676c9cb16e34017c896b84039d510e2d979c50e7fcf30e8457c24304ab58be value 42000000 -> 4384533333 dacoins -1BCMago5NxA8ga9GBDur8SRbagacvRhmU1 got 4384533333 dacoin -block 254735 tx hash 9773ae315fb8b385c9abad381aae3d23a0f568f8f16cd640bb7095eea2371739 value 2000000000 -> 208675000000 dacoins -1FLyLEzRvV5ucRaHBcXfhqSQnwjsnCaVhH got 208675000000 dacoin -block 254740 tx hash 14bc65df13250c8408108889e6ddab8a2ce69adcaaf049fdae56537c7036c4bf value 50000000 -> 5215472884 dacoins -1Fq37GNfyxSvnmye3QdxH6GpPAQ3enarfs got 5215472884 dacoin -block 254765 tx hash 688fe5ac60ed41d4f3bb9bb231b0552d3ba06f03114f0600b8eb84d8c108ce85 value 260000000 -> 27076571098 dacoins -1JDNareT7T3DYQjp2L5oKHpQ9wRaDMuZ7p got 27076571098 dacoin -block 254794 tx hash 8c4493059285f882cb0a94257a052d6293cb892e05d3664bb6358891e65c6738 value 132100000 -> 13724584979 dacoins -1FjLKFH6BXB6NUUhpSUNendtjBNSmNNPZT got 13724584979 dacoin -block 254801 tx hash e62f7d35036c74dafa0a4023f042abaaed29179a6d30a99ca029e269fc972b44 value 99950000 -> 10380095055 dacoins -19x2pAiyH5SM3ubJyrKaEgfxVgRB9131wS got 10380095055 dacoin -block 254848 tx hash a76fdb9b01f7970455b79c095959c5318a00147acbac3bc12140352d19d27293 value 147200000 -> 15239064974 dacoins -17czXHWXFLVUdgiQSc9FJDT6Fi7ooXj6Uf got 15239064974 dacoin -block 254850 tx hash 5a411838db6e0f9a18bf365d04bd0891a68f4bf9f0b78517bf9af210f21d8ab7 value 200000000 -> 20702394180 dacoins -18mPaJtGX2ots48KdQr4FZLhDSbgyzfnP9 got 20702394180 dacoin -block 254852 tx hash 26f5f9f39ec3fc74a4160bc8528f8185bc1c3251a40be91c76cc509649e76169 value 284000000 -> 29392328307 dacoins -1KFZmBqaJFnBuJLL9HyPdj19dfcW6gCdkZ got 29392328307 dacoin -block 254853 tx hash 699aaa52bd862b195aff1b82eed15e270533ef01cf1a86e39b5b4ef15115499f value 250000000 -> 25868295304 dacoins -1Cnv5Nj6vtcm4Qb6dqawkLvwCTTZ43wqen got 25868295304 dacoin -block 254860 tx hash 4aea6cadd325925ad7439a3a6b66fcecff8f3372618dc4a1734b644d586f42eb value 210000000 -> 21721083333 dacoins -1CbYgvA148Ew5j22S2rbgFCKToQTwRnKfS got 21721083333 dacoin -block 254866 tx hash c6cc02cc77b8f98488a9ac974b7e61cca1e803c7e50599c9cfa80c7923cf3959 value 29900000 -> 3091806830 dacoins -1J46wJTLYvhabzrVjVVwrUEUsYvLMbpNwK got 3091806830 dacoin -block 254875 tx hash 02663706b7e6a484a19d3f0687036dbcbf5fe9057eea311d9b80b446a45c35cc value 299900000 -> 30985218745 dacoins -1EuFaVybvZij2hAfmRcDYAEmBqRLGRQXan got 30985218745 dacoin -block 254875 tx hash c51438e8ef3eb859357bd2406201169fb0932e7746a1bc2daee9781bc15578a2 value 10050000 -> 1038350945 dacoins -1EXqpyc7sEVbH1dK8mdE35gM4ijiQ4kGXQ got 1038350945 dacoin -block 254884 tx hash 8790c64727703c0324debbeb8eb92eb8c1e53fae4c1e8790297772bc23fb8eea value 300000000 -> 30981493056 dacoins -18mPaJtGX2ots48KdQr4FZLhDSbgyzfnP9 got 30981493056 dacoin -block 254886 tx hash 9f93971f19366666bb3deac6cf85deeb9d7403e5ab149f4645844333827f89fe value 50001000 -> 5162691711 dacoins -1BQtQSNPhm7fJMQagc8BrEEvcDNLEkB4J9 got 5162691711 dacoin -block 254899 tx hash b82d81dda3973b04842e1dd8dead6f67ca21fec94ddee0574770ba91fd5d4b5e value 500000000 -> 51581299603 dacoins -1BV3rErytJmf17NNQfzHkHYakgweq4HzEx got 51581299603 dacoin -block 254934 tx hash 4ff007ea31dc6e1258188532e3c6fa7f7f411f2511154b780f9aeb69bca8b4be value 10000000000 -> 1028343584656 dacoins -1G3Cyx194o3yLbKFmzR4NtNE6fxJSRowkp got 1028343584656 dacoin -block 254944 tx hash 2dcac82298d5ffc2796b28d2caf8269b75904399e567c4b87f857cae4b159df2 value 101390000 -> 10418902116 dacoins -1HXaE1qztaBnJJa43LNLzexhzzbefJkm3i got 10418902116 dacoin -block 254983 tx hash ef9f128f3599c2cd67d67d03a963e225bc65d5ad69b03c6b15be5eb1b7444849 value 159000000 -> 16306044147 dacoins -17XgPMQXbXr2RmPKKB5FJ3a2UFMw2Gxarh got 16306044147 dacoin -block 254987 tx hash 2aca7fea45ec0d4e38452b198373f36e71ae664cfd1a0b197970ef61c80e0aa8 value 100000000 -> 10252384259 dacoins -14vTNM7pZiG6qZbmf2A8J1x9wLdYTHvcPX got 10252384259 dacoin -block 254997 tx hash 3123fe9253ff084c7cbe890e44c9ce2d12a990449ac2027ec91b526b25302702 value 100000000 -> 10246618717 dacoins -12QfZDTatfAbfiFmpGmFrbNiiyX9PjtYb5 got 10246618717 dacoin -block 254999 tx hash 502a936801823437ce1f886ff3955618bbd7f88e9863ddd182045a625028e9ed value 10000000 -> 1024608135 dacoins -1D2UUm9noQ5eW7mQ8oMiqxvbFqB8wuvvWS got 1024608135 dacoin -block 255002 tx hash afae2a902869051e07308ed194bc1153a9b634216513c2b18f30ba7813b28dfe value 350000000 -> 35855630787 dacoins -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4 got 35855630787 dacoin -block 255003 tx hash e88a84bdfea46915d77f1b1f68ad37f761bf91fb48abd6332ab2a390ac6cf362 value 520000000 -> 53260166005 dacoins -16rUg4eijBqM6oYrSrUzvghe6QM9CHvTYW got 53260166005 dacoin -block 255020 tx hash cf9030b1212076c275a7207820a549c7633416b4bdb3f7ebba99441f06a0b447 value 299990000 -> 30694026435 dacoins -13NRX88EZbS5q81x6XFrTECzrciPREo821 got 30694026435 dacoin -block 255020 tx hash 2dfb02d74224b5e52686ceefaf63a2362e18e164cdd53c147b677b83dc57e65c value 105000000 -> 10743267361 dacoins -1DLwrAYgzMcbntvhmBHKajGEaSv9U2YGTq got 10743267361 dacoin -block 255022 tx hash 9f666afbf830e05e13ebb06241c78b5fcde86c3476a71d997dceddc1de9cb01c value 100000000 -> 10230834987 dacoins -1MVb5dBgeCVwpoSQKNkcA9bwq8anx7ydnd got 10230834987 dacoin -block 255027 tx hash 0609f499bb21f8908c7dcdd31fad0fa453a7b7e0bff44ff7512fe6c70b558438 value 58000000 -> 5931781217 dacoins -14FaL26kCyEsN4NviMEv3wPQvQGuwodyDr got 5931781217 dacoin -block 255032 tx hash 72d2691a63cf846add6dec63240eb1013fcaadbd6f78738ce04ed807dca472c6 value 99980000 -> 10220762978 dacoins -18rw5npF8gTGMNwk3hZNq3sqTT74Mm8zoh got 10220762978 dacoin -block 255037 tx hash 5a88cd70c377ce00c4b6df5508e0d13122c41d40a8350420aef20447b0579b98 value 99950000 -> 10215331248 dacoins -13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH got 10215331248 dacoin -block 255040 tx hash bc231895c9e2d35240a190aabed82aba7ffcab83693905aed15954d9d432e3f4 value 399990000 -> 40863528651 dacoins -16zqyiBKDsL1X39ip5aVHLsxgFmxUCBeKM got 40863528651 dacoin -block 255043 tx hash b300988f76210a6c5adfeb828a3e823c3b951d8e83c197f828c7f50fdf83e697 value 200689244 -> 20498392082 dacoins -16akrvw2R2kREZtYET91bUyoPnyhQyur3E got 20498392082 dacoin -block 255049 tx hash ddb0ffe9b101a6789418d076bc636258fa83bc55527bdac8a332ebd18046aec8 value 190000000 -> 19396420800 dacoins -1JME1dvN2zAAgXhXPnWSWFGQ4Z1iHALFj9 got 19396420800 dacoin -block 255049 tx hash 372e20b06a18ecc3f64d48d30b69ef1020d00d5858da89fbb362e206108e7b69 value 300000000 -> 30625927579 dacoins -16Y1wE9WEGSySsUNMoKBicQV369C6E1fV got 30625927579 dacoin -block 255050 tx hash 09f281a274c131c0e8b5f8e995308385a972970d9d5698064f7c3cb38788809d value 187600000 -> 19151128009 dacoins -125ana9EZ9HJotBNnGsUqecsp7MzT9Z5Qe got 19151128009 dacoin -block 255053 tx hash 07da9df755a7163e9456a4b5ada45c9754f885e1a0e4299a4f1d54454de9baaa value 1000000000 -> 102053654101 dacoins -1KDCt8VoY45ya3QnExwtZEdugAnRAncr1Z got 102053654101 dacoin -block 255057 tx hash 9841c5f023bb41cb30d19ce97524b870f6c1230d81da2bd3d96ed333aa1eb192 value 100000000 -> 10203215939 dacoins -165EtwPtp3dXeHBAXpdtKher8wpR7E4Vwh got 10203215939 dacoin -block 255062 tx hash f7d0a4447bb90a63aaf557521a95f6e282dc01c923e8fe5aea5e069cb0bb1180 value 50000000 -> 5098438327 dacoins -1ALeLAXtnZrbJHNhWLW5BvNtL1uP5TqJU8 got 5098438327 dacoin -block 255062 tx hash 09e4f7d57d6abf44b6d38d8d1644775e36700569dc1a3fcf006176a61a777ab7 value 520900000 -> 53115530488 dacoins -18QTFj5KmMSoYMrCuRGgxdywj3xXYtCvzd got 53115530488 dacoin -block 255091 tx hash 298196f62a6fd89328c2de64b77da7bb2c68cdca50754923457ced0af9651a16 value 5677000000 -> 577615695255 dacoins -1CbYgvA148Ew5j22S2rbgFCKToQTwRnKfS got 577615695255 dacoin -block 255100 tx hash 962079531f47ab44e1331ba9c0da9ce448d7d67039f08345abc90f6591d9a3e8 value 288880000 -> 29375370365 dacoins -134qMRPNjXbwnq73KBDyEzH3BWqgDSK8f4 got 29375370365 dacoin -block 255111 tx hash 3c73686a1d948496e523015f6bf717ac4751642040d8279ec6fc7de74f5161c1 value 22222000 -> 2257171726 dacoins -1KJ8Q3PaVvyjV8GdVMha7VXPaBuipdEFG1 got 2257171726 dacoin -block 255134 tx hash 86e24ec86abe33c2a41335b0fad076cedf3a39043cb44a92f81e733ad224b85a value 100000000 -> 10145415013 dacoins -1HonwLhETda1hQc4uLA6bzhXH4CUaBmHGb got 10145415013 dacoin -block 255135 tx hash 78945c3a89cb967c3a8644289443afc7146cd6b3f276de91db27363997138b52 value 2000000000 -> 202899966931 dacoins -139Dx25QXHBJD1tfLQMwASAAJrWFiM4BPz got 202899966931 dacoin -block 255137 tx hash ad11ca38563d7e7384f76443aef815a6dc909f19160fb364381d6656298e3ed6 value 45010000 -> 4565878253 dacoins -1KpSuQmkejZPKj18Gj6y2fUL9GZyWCTVuh got 4565878253 dacoin -block 255141 tx hash 38193191812b1570629ab5fc372fab892935d83e4eb4d488dabd7fb31f04ff86 value 100000000 -> 10140458003 dacoins -1G9mvD12ZAiAxMuXeiaUVDkMAC8C4FFoLG got 10140458003 dacoin -block 255143 tx hash bfa7c143b8a322e3a309f07aa0d27190e96619ab1c3238660bfdfa565af291f7 value 90000000 -> 9125251488 dacoins -1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH got 9125251488 dacoin -block 255146 tx hash ea92cd3c53361bba23290b09b2ed584fd049dd774cc670f48510e04373d2dfd7 value 50000000 -> 5068087798 dacoins -19rKrjPfydDQtHfWHcFcnfXjhGzQjkAC6B got 5068087798 dacoin -block 255152 tx hash 8009c126befb5a5546fc3f117f400d6c83068a5c5fa7b46f0eb3abb2518f88dc value 2499950000 -> 253318511571 dacoins -1AJzXcrPJbXudbRF43d9j2pympLo5k5Gut got 253318511571 dacoin -block 255153 tx hash 43f17758b3d68c191aeb10e48b1ff1dc6b8be94fd8036e052855cecce42672c1 value 257300000 -> 26070241812 dacoins -13fBNvRz495auamuV9fNN95XDUdGtjXvfn got 26070241812 dacoin -block 255155 tx hash 8c499a60166adfc252ccf70e11ce4abef05dddea23f1baf25361e6276330b72e value 12000000 -> 1215738294 dacoins -1NhAB2xGPosYjooSqJET6eJy2ks15A6CNm got 1215738294 dacoin -block 255158 tx hash b09c0a3e8114ddb7ac84a72d818015aed82ab0af36a15f0c3158a0ed1be57afc value 2000000000 -> 202585582011 dacoins -17CoqK7cqNVLyv1CawzsGT12eTMP2fmHuy got 202585582011 dacoin -block 255158 tx hash 979587d316ab9d52e1d0c9afa2c49ec198faecc1f3c4918558f73193ed68b9bd value 1000000 -> 101292791 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 101292791 dacoin -block 255158 tx hash 799cbc743b3271054a2dc41a3e84bcce48d9b3606afc47d809155b3beb202b15 value 1000000 -> 101292791 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 101292791 dacoin -block 255158 tx hash 173186a9b9a86ad0a74037744fefced0574e296dd15bc543616a36b66116b63b value 1000000 -> 101292791 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 101292791 dacoin -block 255158 tx hash c7121bfee123b55a6cf8fd714f70ad96fdfbe31c96d5d85ae16b2b1b30e177f6 value 1000000 -> 101292791 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 101292791 dacoin -block 255158 tx hash 82d2035a5726bd950f1badf3df666c261abf228621f2dc65dad3fd8a980e87f0 value 1000000 -> 101292791 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 101292791 dacoin -block 255159 tx hash 1da9a84d098642b7536b100301026127dd44a9de9f18524ae55523c183a34f76 value 1000000 -> 101278786 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 101278786 dacoin -block 255159 tx hash 3979111f16d00b6a74f6af1722bb06eec084c09c71390ab667277105af824ba7 value 100000000 -> 10127878638 dacoins -1Bitcoin4yZjSSPoXUceJaiyQLABx7B2LL got 10127878638 dacoin -block 255160 tx hash 3ed6063ab9fe4b453bacdf8173c60377604df0bcfe3c0e3988b3bba006749079 value 100000000 -> 10127154431 dacoins -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP got 10127154431 dacoin -block 255161 tx hash 53c067c3022958558297b8525cb85822b70238853abbff79e95af0ca000652ea value 3000000000 -> 303797619048 dacoins -18WANHBTcj8u2GU1PY4h1iG4EbvgYJM4gL got 303797619048 dacoin -block 255165 tx hash 4e7323c8f32e9338a1bb94c245e0c09f5e694ece617d2b46ccbf0cb35672d3ea value 10000000 -> 1012004299 dacoins -14PVGnM5F8HfbiphzcSFSAgAcecUywadZQ got 1012004299 dacoin -block 255165 tx hash 21fab8ba2e49ffaac34411463bb34c51b5c8520898bcdd4a45f6c8ff449971bb value 23181032 -> 2345930404 dacoins -17LWEZqC2WyZaBo7pKADcsDkA6zFjY1iTC got 2345930404 dacoin -block 255171 tx hash d8c445e54fb45d8ee75d9c903983c9c8d94e4ad225fecfd492ff47025d4bbc27 value 59871289 -> 6056807478 dacoins -17QqwZtZ221Dod33bY33SAZMXrSmi89rsP got 6056807478 dacoin -block 255173 tx hash 7b25b230380525c4204f37212c4a4d53242244351f8ad439df4846530295999e value 1000000000 -> 101159226190 dacoins -1QEhcXxmkkBdcfDhcFU6pFVCdiXQgFZLLY got 101159226190 dacoin -block 255174 tx hash d088e1bea82613009556d2e17b837258b1cc0d55a141c642447debeca0873608 value 100050000 -> 10120548817 dacoins -1HgwzP12Y8jvE6iT4TLWE96zPaFkXPSGL2 got 10120548817 dacoin -block 255181 tx hash 9ad167ca2c5432a6bfdd60cac733bfad50700e1e9ff0b6361ba1147bc957a8d0 value 100000000 -> 10111698082 dacoins -1tybxKF5QbtJ43kiV5gAFPNvs8WR6uUWK got 10111698082 dacoin -block 255188 tx hash 7b69081d1f873bf8b78cfad98bf23af47859138069d894112851fd2e52eb6912 value 199900000 -> 20206713679 dacoins -1NHVAzYT2jQ8roRddYXhvZtiVjuMwuWBGn got 20206713679 dacoin -block 255191 tx hash 4ccd6fc50d6eb0781d54d1c2f063c70e1b4db70d6f1d3f047879a33718b11171 value 300000000 -> 30319280754 dacoins -1LfRqHRmJa2S2U4XGVWerta2yQhbvKLG2b got 30319280754 dacoin -block 255193 tx hash 5e96ad593fefecf7e7ef0c706bc95bd743d87cf8700684aa7774a6691e9a15e1 value 100000000 -> 10105335648 dacoins -1MZH2ixqERRzuW9Ha7xqbyGoMZyfo4dv4h got 10105335648 dacoin -block 255196 tx hash 9fc293925a45558d60f6f194d95278216f1abae4cf22aa9b665ee5e8d4a2ffa1 value 100000000 -> 10103731812 dacoins -1L5AUL3vEh2hvBbxJbtuwhbnWzid9W2gAW got 10103731812 dacoin -block 255198 tx hash e62467de28a974e457e0dcb63964decd0f292226483c63d038b978c2e6bd803e value 111130000 -> 11227826983 dacoins -13FrZaxxAWuFUqsmRVatp88h6EKTwmUrtj got 11227826983 dacoin -block 255198 tx hash 52d5bc62a89ba8aa47c5a2ba8dbea52a9d6c1b89e803c821a770b0d20533d67c value 100000000 -> 10103326720 dacoins -1K5Tofy7UTfcrpWBnXcJhHZzvLTksDdasQ got 10103326720 dacoin -block 255200 tx hash b511fd25b1d2cfefde9a66b73d263d3018320e5a609f27b9e8d47199676da869 value 102450000 -> 10348198725 dacoins -1Jge9avkgP3zsSQsYeSpY5Pd7xBk3qehNv got 10348198725 dacoin -block 255200 tx hash e12f73e88744b476bc4b8f6014d1a55f42880278d86e2bd9c41ad88e50db3029 value 500000000 -> 50503654101 dacoins -1MA274fPpN7cBjiseaMtTmuQCq1UjAir5Z got 50503654101 dacoin -block 255200 tx hash e94c89241e10b39aab406a50806e055b999a23886521589cc5a04dfd15c3e569 value 100000000 -> 10100730820 dacoins -1BhbBYtVSYqGifvPhien4B18MjMGLi8T6h got 10100730820 dacoin -block 255202 tx hash d2b45592b57cc546ee42fb29471c6ef5442053dae10a69a9678dcab28cda022d value 7227460 -> 729794566 dacoins -1EHjzwUwJokV4tZsugPFuHs22xoinaYQ9N got 729794566 dacoin -block 255202 tx hash e815c7a07bf9522f958ba52f53ca45dadbd46c7058b6eaac28ceb0aa557d62db value 100000000 -> 10097524802 dacoins -1L9bbsESqmaKWsstrDETuZpD1BjLdy94ah got 10097524802 dacoin -block 255202 tx hash aea3cb2eb67a008f20af0ce302dd2453ba688960c58b7db04fd49156edb53aae value 14900000 -> 1504531195 dacoins -181mY7b9oWKsyf5Q1K4TaJA3JhNoxSrt1S got 1504531195 dacoin -block 255202 tx hash 8bf8a43f59dbeabe6aaeda480a3552979b94bb23faf336647f38d184708ecb02 value 100000000 -> 10097524802 dacoins -1Gz4NTCBJb7q5gEURNeGnEivEt2yDY93yK got 10097524802 dacoin -block 255202 tx hash 33715bf229caea9ba1d15bc291cbcb167981021414b9e808ae30fed1101e07bb value 9990000 -> 1008742728 dacoins -142p4ML8aXvMAnVjEZMBzyP1c6nauhtufi got 1008742728 dacoin -block 255210 tx hash 1497f7545b1c1b85b28d623b2646343dcd8f8b2883dff7526d3fc04c4c103ce9 value 200000000 -> 20188501984 dacoins -13qGRH1n7dFeroYhjd5xktmWo4uzbVPbcS got 20188501984 dacoin -block 255213 tx hash 44edabb3624f5f91505ec1362db000c5fffd1ef676cb9a3e41d1001dd9776e3f value 20000000 -> 2018758267 dacoins -19V6mbsUWfKeRJyHvPpmjarUyj6Arm9zcQ got 2018758267 dacoin -block 255217 tx hash 441465c36af627942b3888c453197fa45cb565e8039d75e3e13f9f911fb01bde value 100000000 -> 10091784061 dacoins -1AoYNhBr3F1yTumvtWB2bfsJ6gYZJXdDd9 got 10091784061 dacoin -block 255217 tx hash 03efb950f6165f5191e93a7817a9a799a512f40454832a3bfe3f68c6745af3ac value 256462192 -> 25881610614 dacoins -13sbvde5fYHeM4UxKJpRxFv7a9MjaKdqPT got 25881610614 dacoin -block 255218 tx hash f9248e4b1fcc5e03b67c84c99f30d88920c7e7671d6ed58d61fd879f6827654e value 300000000 -> 30270079365 dacoins -1MPUi31pLY3KyhMATYo1A2WJKmo8NcbYhz got 30270079365 dacoin -block 255221 tx hash da9ed36f05586c1f4b979c949d92b48932dc9df5a50cc63cdc44b101ac03de90 value 100050000 -> 10094062366 dacoins -1MR9wDhmKVRDcVcpm2c4BB71SR9yTYdBvg got 10094062366 dacoin -block 255222 tx hash 542b57e22b16b9a579b35cf2179d0f73bc679d55261a3c73b0b5c2c3ccea096c value 500000000 -> 50439451058 dacoins -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4 got 50439451058 dacoin -block 255224 tx hash dc02a124b8c5c7091b4e645de72cc6c69fc98809433d10dffd1f00ebae8ec553 value 100000000 -> 10084092262 dacoins -1CJcDhymhoMRqFHQzX9hxq7NBjrmy9EYEo got 10084092262 dacoin -block 255224 tx hash 0427ee5f394c572c6257410cb51fe705d98002985eaa36a26de74670a1964b66 value 40000000000 -> 4033636904762 dacoins -1D11zSkRGnn6VMgaipqNeD2rtQfN5ywos3 got 4033636904762 dacoin -block 255224 tx hash 4d5afd1cdadcfe705096db15adf87a7fa4430ff8703f7eb4f41b180aaf25c5f5 value 10000000000 -> 1008409226190 dacoins -1D11zSkRGnn6VMgaipqNeD2rtQfN5ywos3 got 1008409226190 dacoin -block 255225 tx hash f52f76e93c404b4fd0c521a4d0bf2ef7feb18210b9c5caf00e48d1c8f93ecece value 15000000 -> 1512488839 dacoins -16uce8E7DuqC5QNmsjMLcbZEmLcUBRGqaj got 1512488839 dacoin -block 255226 tx hash a716fde27a1003b8a8910293b4762bf10734d64e249c06b94543892b2fbe8af4 value 156000000 -> 15729396429 dacoins -1GuoNYVPUwePeYghvDP4gCny1YaFyMfTcM got 15729396429 dacoin -block 255227 tx hash 54a380ec7332e73b639bb435d32abbc073e03e537d5adc9eb6168805453a7fda value 50000000 -> 5040860615 dacoins -19ABrTW1XhWErJxE3UvfNuBRzB4w6UcTRp got 5040860615 dacoin -block 255227 tx hash 152c6bd97491a589a4927bdb3a840134d5a765b937468ed2fa7e43e5df0438b7 value 3000000000 -> 302451636905 dacoins -18fjRdAxg1aQbw1DeNM68nsD2PiEfayqfJ got 302451636905 dacoin -block 255229 tx hash ffefb287797f79a1493d0148fc0b8a96c362284f41f6317a48010686297966d0 value 33000000 -> 3326065526 dacoins -1JASe981JUgzKgAoV4SYehenkHbVAT7Ja8 got 3326065526 dacoin -block 255229 tx hash 353b8b56a4e0d3cd55b8195e7895e90b28b10c9bb0a21524ef21c4fca803206b value 100000000 -> 10078986442 dacoins -1DDhPhsydLh6dDgAg7GVT3xZuYd93tjqtp got 10078986442 dacoin -block 255233 tx hash 22d0c0ebeb36be3f15650e266556d877884d9efb64558f877b20f96fafa5c6b3 value 2577000000 -> 259695300198 dacoins -1Na6CZdvTMzaq6f6Xn9jyEfmbf5NiEp65c got 259695300198 dacoin -block 255234 tx hash 499b798e8b673236be9c2af8b678e16a67c5574b54253e53ce9e483d5e851051 value 100000000 -> 10075623347 dacoins -13kMuArrYxHpxiVtqUgtYK6viv6JvaBRt4 got 10075623347 dacoin -block 255234 tx hash 983e4bdbf9259f8c9064182014435e35b0b2a863179394f801d9c3d6b302e586 value 300000000 -> 30226870040 dacoins -1QAJh4ZCuSsLErYnbtHqaGNTb5D9tiX2er got 30226870040 dacoin -block 255235 tx hash 3a92fb3f734c51a2867ee695083492d813a01bf08c03a634839da607f07be258 value 700000000 -> 70526273148 dacoins -1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP got 70526273148 dacoin -block 255236 tx hash 19395a476edc68204d392dc3afb8fe25d6cca6e6f2143e087e3a9cfb483eacf8 value 99950000 -> 10068911438 dacoins -16kPgvUbpsYfxj9mvpCQqsoZ4c2oJsNfH got 10068911438 dacoin -block 255236 tx hash 77983cc14b5a6320ebf8202ecac501f2041077e496980e2e8da9bd45c76f3f37 value 6900000 -> 695102440 dacoins -1McQ3KF6eY69a1oJiJhCJj9GcJawFq3vUG got 695102440 dacoin -block 255243 tx hash 63baac9a2d6dd9b0af3c78189c4edf949dfd9f2bf88814be17d43db1fa36b9ed value 100000000 -> 10066636905 dacoins -1CJcDhymhoMRqFHQzX9hxq7NBjrmy9EYEo got 10066636905 dacoin -block 255244 tx hash e05544996b9dd1c90891e3e4c468ab1324cceac2ca8b51a71ecbe65c165f0275 value 1990000000 -> 200303700066 dacoins -1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD got 200303700066 dacoin -block 255247 tx hash b8d9a2c15c68fd80680d9b67703be4326fd49ebbf906cdde36e2419875d4e984 value 100000000 -> 10063083664 dacoins -13reFpj413XUoU3aHNbkPepd11Ha6Hi212 got 10063083664 dacoin -block 255264 tx hash 22ff18ccf89ad33f0aaf916af8078889e8ed8643c29163add216fe8bf01361ef value 50000000 -> 5028637566 dacoins -1JpK8eh4Egt3a1YhrSg932qBToSRM2bcvG got 5028637566 dacoin -block 255266 tx hash 2ff014715685be9e761b7c050b1c7ef33da1babfff804d7879a4dc29adb2087f value 400000000 -> 40225271164 dacoins -17ezCD79i6qmzPPBtD8acNbHgjsTRoJxni got 40225271164 dacoin -block 255267 tx hash 8a6d19d8ec0d996fa6a478ef9276a33585ece9aa4e7f9d237e2a4bcf9bd88925 value 100000000 -> 10052809193 dacoins -16qiCQ4ocbM4zRceN8RYwWqBRQoiGCvcNa got 10052809193 dacoin -block 255268 tx hash 008723ee315339c621ce9d3009f756ac810ae05a9315c189ba8c803dfc33ea32 value 200000000 -> 20105555556 dacoins -17aRFk7cMSTuwpkmLk3Znzfeys2XKLVgML got 20105555556 dacoin -block 255274 tx hash 90c9f98d801f5469c98b7e2aef17122d9f4a91173bc102c24f4f28ede3ca8d19 value 246000000 -> 24726534623 dacoins -17LWEZqC2WyZaBo7pKADcsDkA6zFjY1iTC got 24726534623 dacoin -block 255275 tx hash 5f7b208838702960bc25b955f1a288033989038b52302beb79875047def58c04 value 200000000 -> 20101732804 dacoins -1DHF9MnvvM1zUNxKdu9hB2BfwFuBANPPoe got 20101732804 dacoin -block 255277 tx hash 61dcd3d9add23fee3a14a0abbd0640d06c5673550c7eae869463ab28eaf13993 value 101700000 -> 10221337649 dacoins -1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f got 10221337649 dacoin -block 255283 tx hash ade0d4e7341417636cbb5cdd2a02a50bdac30d2c47fc70491b5eb83ea97465d9 value 200000000 -> 20097288360 dacoins -1PYXRp4Pj3PqNmyz8GA7qrhsMa1hvjjY7t got 20097288360 dacoin -block 255286 tx hash 2fcc4a62b3cd9d1656c0ace66f4392e7dfba28092e852e1f7df7c8ec8a99b226 value 100000000 -> 10046987434 dacoins -1JqNVmZBrCvT19he79L4F2YWxydWZ3mQ14 got 10046987434 dacoin -block 255287 tx hash 88f358fe40d3edf3030cbef5c2e2a53850ae258c106f9edc96b00b23de9a4239 value 10000000 -> 1004658399 dacoins -1NocfrxnLadDjfy5XR1JsSgdVsw8ChxCLA got 1004658399 dacoin -block 255287 tx hash b56dc6dd89e19963ad8cc228139fe47fff14d3b188fed72ee2173efdd5e2ab51 value 100000000 -> 10046583995 dacoins -14AqQW1tKzfRnMAgKxTdDedYJ3KoUVC9ei got 10046583995 dacoin -block 255288 tx hash 56193e2e87e4df85f8ff1ea9d28843434c582fb5695869b7267ca510ab5193af value 4071777 -> 409016530 dacoins -1JqxEv4TH6XmMxCfRi9t3t9QhPnxp79UBH got 409016530 dacoin -block 255288 tx hash e0ab8a0f0f90b7a454cefe3a10f070367bfb2d9d1132f2eec7bb6304410a5aff value 100000000 -> 10045160384 dacoins -1Ao6nURcqduZzsHHPJyKa7kyzTASVPP66L got 10045160384 dacoin -block 255288 tx hash a69b20f854edb91cd0fb9caae05fa4db9a0e464d29a855dd95683077c1ee843e value 100000000 -> 10045160384 dacoins -1Mxuru2YEg9dZ1jGSoEks3BfP7Ee1LaXAd got 10045160384 dacoin -block 255289 tx hash 2d8d7b4fe2fb5563c1d0bebb883ecabe8ac6075c1ac367b56165470d618b9873 value 163476180 -> 16420711963 dacoins -17dTm9LYvNzNT4AM1kum557L539YXS5y7S got 16420711963 dacoin -block 255291 tx hash c84d89d9ead45bc12e0fa60a3f7da1efda3ad460fcf4b36b81a4333171a3d879 value 100000000 -> 10043457341 dacoins -1NgxPxvnswGG85FzjrBQ2tet1sCXpCzhg4 got 10043457341 dacoin -block 255296 tx hash 69fc95e4cf1b0f2e779c96f7c893fb3ff317975a5639dbae60854511895bc706 value 100000000 -> 10040944114 dacoins -1MnW3JgujMavTzBCiZyfxigDhu9pnDE7dU got 10040944114 dacoin -block 255296 tx hash 09f34b54376b898e317d3f7592caea90fab34657c8c97d39e875ff2f2a6d047d value 200000000 -> 20081888228 dacoins -1BmPgrDRGJouzPJdtDzXb6KhYDbBi9fy9B got 20081888228 dacoin -block 255297 tx hash 9145305bbb5d62d406fe1673d35de7c212afd875b886e2d670f05c1476d675a7 value 1100000000 -> 110439545304 dacoins -12VamRhmcgsWWKWdNuzWqVYTvnuk2Dsx9b got 110439545304 dacoin -block 255300 tx hash d62720f9bcd2a53bb7e148048fe35c3b948e4acaf067f86cff51acbd41295963 value 1000000 -> 100376042 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100376042 dacoin -block 255300 tx hash e4692bd914b4da8b1070b85b087f9bc4277ff7c23780cdcc3244717061ca7c70 value 1000000 -> 100376042 dacoins -1Dswt3PZQrR9NPcTDRjVZxZbEjpvDfHnjv got 100376042 dacoin -block 255302 tx hash 69eb97b8f39c207899dea98fcdafed0dbd2faf7ae0c5dbdd1fa3e2959e3b6b59 value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash f850ce24a5c646c66be16b534f144cadacfeb11e123adf6e2689644bc5bad445 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash fcb985c1285215af95fcca64f57e6c9d7a0ef242f992d93b0d2840e05b8f468b value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash a5d8b2035024efa96b87e08cf88a9bede16cb5f7be4347572b613b0b4353eedc value 5000000000 -> 501780257937 dacoins -1Eo6FGPytuYvuA3ZS6ToXqP8sScWWtKhWN got 501780257937 dacoin -block 255302 tx hash 1f866842a687b907f14be37a315a770010e133a3d36e96e05527b1c2f7ab3696 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash ab0c847ae6a82d82415a2143c248fd611cece50fcd94b4ad94c365d4535eabc1 value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash 98ca9435fcf14e795750a2c9889f8246b784861432ca897fe6dc5c6b2995a796 value 1030056648 -> 103372418105 dacoins -1CQhTj5tAtvzGti2oUiBqF2D8gGvGkJbTo got 103372418105 dacoin -block 255302 tx hash ff017d1a29265e1f594cc9ac55d53afe6f19144d70f230b0500e9b1aabcffb02 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash 3120d2bb539d57eb15abc8790e0f2940067dbf8c79efb77493660f40d45892b5 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash bfc647b4c23c6466a19f0f51f430db99e65187af3dec6cbdf03055cd54560c3a value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash 1888abd44594e4c481754cf8a61c14e5e139e5273e858970aa9bfaaa2d973477 value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash 92d6186c272118b6372db1a56a1bd58f46ba93198f00b59366fc9c487bcfa6e7 value 504210000 -> 50600524771 dacoins -1NHVAzYT2jQ8roRddYXhvZtiVjuMwuWBGn got 50600524771 dacoin -block 255302 tx hash 1c3d30ab26796d56b1de0abfc11f83ff3b8a7aff4c27d167b884c345af6ade54 value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash a9bd11cb77ef508f493b5be39ccd3617093e25b5826ce411fa166d04549343d1 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash da3c5c7973eebe976df751576658f0fdf293c55c4829f10e749bc938a2458b25 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash 426bed21e9f4fc018a8fc0facb90272f3f2693865fc91d0187a7057b7b77970d value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash 6c3aae44f2de6385565d4dfec455f3496d307bd399d999f26f9f5e51d1a72d45 value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash 2bae4c431190b2c8bad75feed56d5713d1bed54088baeee469995c69fd29ed61 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash b2736a809f5345a4a26d2b655486e9b7d707b9e7f21ba0e299d968b261c66440 value 1000000 -> 100356052 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100356052 dacoin -block 255302 tx hash 89d3b33d1a77a40102a75c624e8ab53f08d52e30c3c08620cb8f78fe9d993484 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255302 tx hash 284f898aaa648a6ddb60290e323a0f8335362bd0010eb676047a05ebc58af7c7 value 1000000 -> 100356052 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100356052 dacoin -block 255303 tx hash db6a1a461c13c08361afb553172166fd513ba44796a905ada5e2650649295a5a value 700000000 -> 70247696759 dacoins -1LoMxHHUzFXNoFFDjdjDuN6ciq8wrKGPSa got 70247696759 dacoin -block 255304 tx hash 0414039b2ced2c5e88dcd6f32c18371204c41dffdf7b01de001e7976899832ad value 100000000 -> 10034031085 dacoins -1MLPjJ4iDXpAnzgon9u34ZxnSjTHztxRCP got 10034031085 dacoin -block 255305 tx hash 1dc56b1abb899c0b613e3bdaf455aa5b379bfd3fd524cbcdd1de00355b52c61e value 1000000000 -> 100336441799 dacoins -1AGFxUanxnWnrTiwLsY4NyvNZTv3RWFnfT got 100336441799 dacoin -block 255305 tx hash 07fa0bc2b7fd01363d1481aef0494926cc024877a1c1e248f50ce2c8d05fa367 value 159615662 -> 16015267580 dacoins -1HavyitVfgfbX6q9vprFgU8emXtixixEwY got 16015267580 dacoin -block 255306 tx hash 8f8c7a7f049ded5e09ffe417b3ca28f5ddba5f5a6635d3088c3961cc48faa857 value 30000000 -> 3009574405 dacoins -15KDDJeiiZqSAy8ff2waWgagP82zUrj37c got 3009574405 dacoin -block 255306 tx hash c4bf0e82f0e5b74c088bd5015b6056fc20b7a926cb24b641ffa2995a99a9c61a value 1000000 -> 100319147 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100319147 dacoin -block 255306 tx hash f59551da0e8093930a2a5939c62a8527a21922c6d2ecbf4de6bb74f527fa14a5 value 1000000 -> 100319147 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100319147 dacoin -block 255306 tx hash 444ef048a2654ab08572375c1ee0f722af2e85c5f9b63930429795c90afa099e value 100000000 -> 10031914683 dacoins -18D38HyzBmzArrcHz1jBTVvatvxTnBKRCp got 10031914683 dacoin -block 255306 tx hash 47f58a000d951b8979d12527044ad5d780cc1d34d77f3140efee9021a280c17e value 3000000000 -> 300957440476 dacoins -139Dx25QXHBJD1tfLQMwASAAJrWFiM4BPz got 300957440476 dacoin -block 255307 tx hash e351517f8c85ef0e82c72f374d2b95a7e527353f6ec38035eb32d364578ff9a2 value 100000000 -> 10031433532 dacoins -1B7GKDsgtgpxp87W1LHskh2Y9Qy8vMH8Ri got 10031433532 dacoin -block 255309 tx hash f1910eee9c4b1aae010f46273b7bf90d97aabc26e35458a0e4965d9add4b0d7e value 200000000 -> 20062291667 dacoins -138deo1VUkgWmptS8NWnBqVwqWfZx1Q494 got 20062291667 dacoin -block 255311 tx hash 437b1cfaef2fdd883ddcabec9c65a9e4ba761c0cb1f535b3296d4d502c454360 value 1000000 -> 100301868 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100301868 dacoin -block 255311 tx hash 5647403ab0434495ebe5399633eac63ae28410a6defeea2ba3dd5bb357c29850 value 10000000000 -> 1003018683862 dacoins -16pdW8RQjJpF37FLMm7R65HBvn6WY33Pq8 got 1003018683862 dacoin -block 255311 tx hash 58ff99088f1d175e29effe9b6a03de40715fea4c5ffb3fdc2a8e61228b8ffe2a value 1000000 -> 100301868 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100301868 dacoin -block 255311 tx hash d4a68699fd4fafdad2f42a9b853b1b8b6314c2c484987ca77159a9e7ee88cdf7 value 1000000 -> 100301868 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100301868 dacoin -block 255311 tx hash 204fa046bf7b337160be8c36be1b205854145147c3732570699fe278408aa5e0 value 1000000 -> 100301868 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100301868 dacoin -block 255311 tx hash 7bbd3c8b0432146f20eaba34e74ad6cb9fd2566b77926d2e4cdaa9d1d468f740 value 200000000 -> 20060373677 dacoins -15oxQoTsbrX7SJK86HHDY7qD8BzUday2dx got 20060373677 dacoin -block 255311 tx hash 355f87a87b9adc27e8c8d567f05359a0b11256667a77099b6e921f255b3b020f value 1000000 -> 100301868 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100301868 dacoin -block 255311 tx hash f19508bb5d9b017f72a274eb7091fa52b857e54294f890ec83bda6b51c6f8e87 value 1000000 -> 100301868 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100301868 dacoin -block 255311 tx hash 1e57bbb0fcf3902e8494ef601c7db1caf7d33d40ad1329f1843450de8b090068 value 1000000 -> 100301868 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100301868 dacoin -block 255311 tx hash 44bd3a1b6cf26b01a951eea6ccfc69ba0378a29bec8c6bc258e14a546aa0c329 value 1000000 -> 100301868 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100301868 dacoin -block 255311 tx hash bec6eabafd156ba94d0c5b16edbc6d1c137045700237b5d26a13d417994a74a7 value 1000000 -> 100301868 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100301868 dacoin -block 255311 tx hash c1a4e31deaccc5af2c0a4814334f19c4b8250a24c93b22e52926ffdaf5beb9d1 value 1000000 -> 100301868 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100301868 dacoin -block 255311 tx hash 84635a1ffa77dc62dd39d732546b1d05c9aecbc8ba7232cc0daec77b7589b6dd value 1000000 -> 100301868 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100301868 dacoin -block 255311 tx hash 4388758ed631d79de2b5f788ac88a3e0dfa31fe3cfbe4328a782bed10b09f8c3 value 399990000 -> 40119744336 dacoins -1NemP5kiTYEj8SwvpVm2uiEwfsa5LNQPmZ got 40119744336 dacoin -block 255312 tx hash 9e86b3454caa84d8b38b667fa3276591411929402dc68635827565ee253dc7e8 value 1000000 -> 100295850 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100295850 dacoin -block 255314 tx hash 906cbcc55171f5fbf4510ff59a64eb7158b6797e0739b50ab8ca272724b438c9 value 39000000 -> 3911190575 dacoins -1GeVYn8BY86jTgUYoWeLkWXULpJnYD3u87 got 3911190575 dacoin -block 255315 tx hash 666ddbf017b57ebf55767c5a3a11a5985363942c0d023174d3fbf7fc06aab9d5 value 151000000 -> 15142266518 dacoins -1ApWmGDViVjTPqRKBhPydpBZ5DRjpuEEic got 15142266518 dacoin -block 255315 tx hash 5eb15f1db09880fa53cef7cd9978b8f5a3f03d965b8b7615205f48be9ec62bd5 value 1000000 -> 100279911 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100279911 dacoin -block 255315 tx hash 249e89caa1a17a577bc7a799a9c57c5e6c4db056ff111e094eff39480dabafba value 1000000 -> 100279911 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100279911 dacoin -block 255315 tx hash 74fe1b91c7bf970931aed1021290ae1552f80cd083ee38cdfc2367b53fc5018c value 1000000 -> 100279911 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100279911 dacoin -block 255315 tx hash e96561f5c53ec86f20ea4678211cf32f718080d488840f549d95b94e2bbb6e45 value 1000000 -> 100279911 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100279911 dacoin -block 255315 tx hash d848e8f6d911085e0f1eb4d53a151aa1ab0cf99f44436e6d28e7088bd7dbca2f value 1000000 -> 100279911 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100279911 dacoin -block 255315 tx hash da5c3deebd3faa3fa170f6710143e5cba95c98ce249d96841e31afb7aabecc8a value 9950000 -> 997785112 dacoins -18toyySRFSWc56EF6tRXMKQK5UCPgGz39T got 997785112 dacoin -block 255315 tx hash 433d02dbcddda3113d0cc07dbab16a68b6913178248a07a165f986ea0fdbcafc value 1000000 -> 100279911 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100279911 dacoin -block 255315 tx hash f5cd507575c29255dd65aa647e981821185c536b9dba7899f0f97b73641ba0f5 value 1000000 -> 100279911 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100279911 dacoin -block 255317 tx hash 6a2dacd5461c1b8ccd9b7a2b21d3f8d000dd3ec3ff31c537af154e1d0a41e5bb value 1000000 -> 100268667 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100268667 dacoin -block 255317 tx hash 95a5578e8b5374a0d15edbdedf3bdde885b8a4b4ddec118af32613268ecfefda value 1000000 -> 100268667 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100268667 dacoin -block 255317 tx hash 86a5bb41937335c841481919d93550996b1b270ce89be6ab59460f9ebc74fbea value 1000000 -> 100268667 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100268667 dacoin -block 255317 tx hash 1489b570a33f1bad46c9b44ce820f855792536a281b1ea9715fde50fef72ce19 value 500000 -> 50134334 dacoins -15PmgreEf44t2sLwUohspit2DNdmf8nioa got 50134334 dacoin -block 255317 tx hash f320a2a72d1bbaea50399cafc2ec846cadac959d93b8c617ef67ca7ee6f9bdaf value 249950000 -> 25062153399 dacoins -17kLc6ZYAbVPpZkCrvdUE3K4NBLSKGxtPb got 25062153399 dacoin -block 255317 tx hash ae4c35748303dcac6145d9b6b8e33d0e85af9c0ff71f66d5daafe97708972490 value 200000000 -> 20053733466 dacoins -1JSCYw7NxVbBhv8HCupYhgYqAwqTdRT4u5 got 20053733466 dacoin -block 255318 tx hash ff3f050cf285c6713f9344576b16c28cc68150264df67a8d427a262d9d7572f8 value 94950000 -> 9520257202 dacoins -1VDTthqUv8bjmFePNxEXTNttkaTWfKdDi got 9520257202 dacoin -block 255318 tx hash 57fdcbce01b1ce8bde960338527862e7e205670c26ba32bdbc42d683c3077d2c value 1000000 -> 100266005 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100266005 dacoin -block 255318 tx hash 7c5392838e22aa325b1421c92dc6c43680d6ade8710127b0a7fbb62d63a94497 value 7000000 -> 701862037 dacoins -1NJW7tJoDJboQQSUdPHQ2pAYm6gAy3SgdZ got 701862037 dacoin -block 255318 tx hash 0b33f83b564574afebd888f38394f4114d3279ca073f5d6315e3e091aeb1a95a value 1000000 -> 100266005 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100266005 dacoin -block 255318 tx hash df4126b28520837ed9f27fc7f6ee974ce4ffc51e8e4e606366708e50091c3825 value 1000000 -> 100266005 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100266005 dacoin -block 255318 tx hash c04f783531dce901e226e21690b79ad187e698e9ff89d41b4e4277aaca42f936 value 1000000 -> 100266005 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100266005 dacoin -block 255318 tx hash 2ba57d54d5220f1bf6cdc8930876b52c23d94052477202b6db7a07112a7ca328 value 500000000 -> 50133002646 dacoins -1AGFxUanxnWnrTiwLsY4NyvNZTv3RWFnfT got 50133002646 dacoin -block 255318 tx hash 511701301a2ee7fcb32e25e93267b3e4fe2b8388e1726e40b2952d14c8f846ec value 1000000 -> 100266005 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100266005 dacoin -block 255319 tx hash ccc057a3a0226ff628c63975c466ddb4dfcf535def12a83aae94b86ddb93c6e7 value 1000000 -> 100262252 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100262252 dacoin -block 255319 tx hash 558648b3ea9d9874ce392bc475f7a146e732b31f87a5764683ea35db6d729fc6 value 1000000 -> 100262252 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100262252 dacoin -block 255319 tx hash 6871c4781f60fe1e27c975234d32e3d6fdd7dc06f49017be4c40e45a0f8bf329 value 1000000 -> 100262252 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100262252 dacoin -block 255319 tx hash bcbce6ccabbc86a84350fdbdafd926b575adc3f4c9692af570b4f849595babff value 2378000000 -> 238423635218 dacoins -1JU1GS7GyHg6XYqq5JjNUquzsWgHoUFAGR got 238423635218 dacoin -block 255319 tx hash ba7ad080422056ba7dec0290a80e9153baff26ca4ebe779b335a7de1e096e238 value 1000000 -> 100262252 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100262252 dacoin -block 255319 tx hash a9e126248a7c2f23076d506ccb325d3712f4964e9d31685746a77e4860a5e91c value 1000000 -> 100262252 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100262252 dacoin -block 255319 tx hash 207c39a21ac5807778f233dbf892e561f63dc7a6b3881f545368245521f265a5 value 1000000 -> 100262252 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100262252 dacoin -block 255319 tx hash 45ad6d454583b2db869b387077d21626e80cd73d90d5ce7e986fb2882503e6c4 value 1000000 -> 100262252 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100262252 dacoin -block 255320 tx hash fc60a1b4b2b267b78c006cdd2cecbb61b8c6a30f2e0af116aab9cb3ef8a94ae2 value 500000000 -> 50129208003 dacoins -1G6zjkpKHaDETbswWCJwyu3PQMesoCHvvz got 50129208003 dacoin -block 255321 tx hash 5959302c0ab7963b53735c369382f9f54a6c0bcdf1d524ae4df466b2d51d55a7 value 1000000 -> 100252910 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100252910 dacoin -block 255321 tx hash 83ed761cb6fa32abdc46ddb82a76aeba9e6a28a201932e646c5b03b763f3a688 value 1000000 -> 100252910 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100252910 dacoin -block 255321 tx hash 521016c83815a94a55fea4b5f47bdbd3b01c56a2bc7f337eb50a2c43059ab294 value 50000000 -> 5012645503 dacoins -1aTJa6dhYax5uHV249FA732BQDxABjSPd got 5012645503 dacoin -block 255321 tx hash 260a2926bec88600eda15e3afc7cbc2f7b77efa2ffee65b394b921fe125d236f value 25000000 -> 2506322751 dacoins -1MstrCofqGJQ73bGwdTxj2Uo7EqRxUDWAo got 2506322751 dacoin -block 255321 tx hash a379701c757fb557070041cc9982f2ff02a5a89442900f3f7a842c1cc4ce9013 value 1000000 -> 100252910 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100252910 dacoin -block 255321 tx hash c2c1a73d1f5a72d7c30bb6e7effef17205f061187677580bdc5daec56563c116 value 1000000 -> 100252910 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100252910 dacoin -block 255322 tx hash 61ab68f24d63ab8271b334903e57a5939c0af8af4df305a94a58da19af2e8f0f value 50000000 -> 5011970899 dacoins -1D8CrjDtEv3cHm91jjk15ix8yeS8oKDzmE got 5011970899 dacoin -block 255322 tx hash dd6cd463437fb3654a6bc453b197751d5869f461504382bb7c904a1470b56d9c value 1000000 -> 100239418 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100239418 dacoin -block 255322 tx hash 2b227df72dffb502606b2a25b64760d95cba04d68c13568ed6e300ddbc7e5377 value 1000000 -> 100239418 dacoins -1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s got 100239418 dacoin -block 255323 tx hash 9c5c4b3351912d84661b4e30bf516c5f612df77bc6cfd2232015bab125645f22 value 1000000 -> 100231366 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100231366 dacoin -block 255323 tx hash 8a62d3e068600d9b83fb88f1921102bfcf2c7a4eb13972eca9a151f5c0553caf value 1000000 -> 100231366 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100231366 dacoin -block 255324 tx hash e66c3d9e1a9ce18f71ef81eb4fcbe83a23c86cb098f8c2cdcc40bf86b8f4b735 value 718522 -> 72016089 dacoins -1Dv1tvyWfvRK3QHb3dZAMWLUKzL6Ddad2F got 72016089 dacoin -block 255325 tx hash b07d86e96459d77d81bbe25a87149741d7cf3cc0945155d26b7d0d961e5cdab8 value 2500000000 -> 250544560185 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 250544560185 dacoin -block 255325 tx hash 46a64003c44f0a4b10c8d806079f730ebab2eb3c9ec5575faa9dde5f6ad3549d value 1000000 -> 100217824 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100217824 dacoin -block 255325 tx hash 358a7c5d25da4bfeb040c9cbf97e515bbc902505cb2d18904123a72beda1bba5 value 2500000000 -> 250544560185 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 250544560185 dacoin -block 255325 tx hash 70f4006b8b4e0352db775b4f83a288afa2aa6ff7c5fab57e4dd87ec90c3f8e86 value 2500000000 -> 250544560185 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 250544560185 dacoin -block 255325 tx hash ac3b9b2a89ed7d98bf805e5060e364c3a779f3424d33071295c978de93d32f2e value 2500000000 -> 250544560185 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 250544560185 dacoin -block 255325 tx hash d4bf4b6faaf2f18977f34c924ab9b03f8c4e37e2c606454433b057ff7609158d value 2500000000 -> 250544560185 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 250544560185 dacoin -block 255325 tx hash aaa484b718f2cdcda88edd65136c97874ff914313c5822153675c93b503b4627 value 1000000 -> 100217824 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100217824 dacoin -block 255325 tx hash ff39169c1200ad937003cde7afc5ece4d86219aafbded3d02143144d5267d5af value 2490000000 -> 249542381944 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 249542381944 dacoin -block 255325 tx hash a4574019d6081defbd1f3a7e3a1bf46a47c0108d2879f3d6f7a6e0fcb7f22806 value 2500000000 -> 250544560185 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 250544560185 dacoin -block 255325 tx hash 3892f3062998f5d10aee253a1893465b6969956efad13dae9bd71992d02b9a7e value 60000000 -> 6013069444 dacoins -18JLWH8smwG59zab7j4DqDLZULfK1iEUoH got 6013069444 dacoin -block 255325 tx hash 01678a5d63f8c18dc3ff91c9d2c02e80d3653bf9fc8400705375b9a794f91b61 value 100000000 -> 10021782407 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 10021782407 dacoin -block 255325 tx hash c709306aaef3f1c39047dd5d23b30ed26a251cb20a2050359eea690274e54077 value 1000000 -> 100217824 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100217824 dacoin -block 255325 tx hash e5bc53984f18f90d7516a3f460b841925772b98d5b63560ab59288934a911244 value 1000000 -> 100217824 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100217824 dacoin -block 255325 tx hash 9a1632814bc007ad6073612fc1bc93dfd7daf6b112c97836658bbdbb3b47c569 value 2500000000 -> 250544560185 dacoins -1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s got 250544560185 dacoin -block 255325 tx hash 1ef872eca0b05b9aefba2bf53ea63b24565a18eb6fcb4c65e2f5dcede257472e value 100000000 -> 10021782407 dacoins -1DbFbPdbDAHyhMat1cmatbPfySAULC7FL3 got 10021782407 dacoin -block 255326 tx hash 0c2541e6eb1e30c37ecc0dbb24ed1fc90c3b0a90e4629207ee11f30e8281faa4 value 2200000 -> 220466081 dacoins -1BHQeERPiQfQbxc1NYgoYosWqWguKprhkH got 220466081 dacoin -block 255327 tx hash 48586159f7c44c3f3215724cfff4a82c3bfeb447bd8ab1eca76b4efaf0f6f89d value 100000000 -> 10020692791 dacoins -1DLjzpGMS5DHucLujKArriyp3S8y3aRMqa got 10020692791 dacoin -block 255328 tx hash 9f95d0dc24beabba8ae5871326b9dd98feafefdfb236f798df5fd8ef0a4ce785 value 30000000 -> 3005833333 dacoins -18hTHcNvBrGduvG4hG55C6nzRWX5F43qam got 3005833333 dacoin -block 255328 tx hash 80975c15601ab2743714d03fbe164c50938923fa51ecd0f05b00a6f5cd77a11e value 160000000 -> 16031111111 dacoins -1KpSuQmkejZPKj18Gj6y2fUL9GZyWCTVuh got 16031111111 dacoin -block 255328 tx hash 8431447eb453e64244f40799aa026690b49720e594966c337a9ee19cec4a10e5 value 1000000 -> 100194444 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100194444 dacoin -block 255328 tx hash 871430ec82c0faeb25354b8669d15a7ba90c3905589d779b29c809d9fb66032b value 1317820971 -> 132038340067 dacoins -1AAciKr6aNMwcYrApgAp336e8EjBwrYPWj got 132038340067 dacoin -block 255328 tx hash b64d097c955d2e78f8bdb19f6756b5b769609ace5d13a613353bf3bd2ef0e99e value 1000000 -> 100194444 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100194444 dacoin -block 255328 tx hash e80ceb4155a4102e0b849086cc60c6e6771680842da2ace057fc362b26660f7a value 1000000 -> 100194444 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100194444 dacoin -block 255328 tx hash 59cb6027ff353efc8459c7b22de036a3db96231065dd9019feb22c6f92256aa7 value 1000000000 -> 100194444444 dacoins -1JYXwhzeTqrLXfg79EbQ95GpoDHxZWWE6d got 100194444444 dacoin -block 255328 tx hash 0c1d774d553b03343f38ca51624d9bb08068c6de074f6319947617631726b0e3 value 500000000 -> 50097222222 dacoins -1JqDHs9GiNckdTYRjwDQqwxajiRFQyuNcH got 50097222222 dacoin -block 255328 tx hash 31b9d3b5de3f6d8058f5475f33f995705ff4639502d942dec4591f51309f7a6d value 1000000 -> 100194444 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100194444 dacoin -block 255328 tx hash caf63eb38276ee00e961da016c63e2c4d4a2745d852b15c5d1fa6e7fcd174354 value 100000000 -> 10019444444 dacoins -14REHKxxXicArkZuvfA7DkXeoqgWXZ2pzo got 10019444444 dacoin -block 255329 tx hash ce2145b2c09573ef3d72e7314298607ecea0329e09c28eca1ccc9226c324899b value 82000000 -> 8215945800 dacoins -1KA9SV5pyqpW3sqZbfAWhSRiVeeN552BXQ got 8215945800 dacoin -block 255330 tx hash 526b0f929576c70f21b0b308df6de0ce0d426544a309528f4de9a766acaa00ae value 1000000 -> 100191567 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100191567 dacoin -block 255331 tx hash 234c1f9f5f1b885bb6e4044b0ec140b8a5932ce94e847d64afa2885ba6fc1957 value 490000000 -> 49092685185 dacoins -1KA9SV5pyqpW3sqZbfAWhSRiVeeN552BXQ got 49092685185 dacoin -block 255332 tx hash 564c83594f0607306f1b0db8f88cbfd871df898ebca904d41da27a101b59de9e value 100000000 -> 10018387897 dacoins -1F2KyKaLr1QbCgGGAjuBSQSJo8GQ6CaCwF got 10018387897 dacoin -block 255334 tx hash 42708ffcedcc07b72a2cc54048b2dac0db6ac4b95e43b6f7d64e470fb06d9242 value 1000000 -> 100159937 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100159937 dacoin -block 255334 tx hash c84a9a340a27c317f90577c9cfa2f9a95eb296c637222efe3941b4b0cdaea7cc value 1000000 -> 100159937 dacoins -13xyUnidQ1JhQk7hor17eQAPw96hwNZhHJ got 100159937 dacoin -block 255334 tx hash ff4ad319b2deee31b3f3dbb0f464487f5257b8f490514a750fc5173932c3d3bc value 2000000000 -> 200319874339 dacoins -1Po9mw5bbgx3HxHZ8Vch24XcmHTiFTRDuW got 200319874339 dacoin -block 255334 tx hash 3116aa8e2b81d4e9f5461cd38469d3e1fe77be986daaaaa3662cee7e61d2eb06 value 1000000 -> 100159937 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100159937 dacoin -block 255334 tx hash 166c25c53d4b2a5cb506bc5dca616a4b1ed701b3036e64dd550af5fbbba9b341 value 10000000 -> 1001599372 dacoins -14MUti4hZhpnqeqswfHxLWFbYQ1GqezJEY got 1001599372 dacoin -block 255334 tx hash 89746706ef99912741b047fee641ce4da90fbe16780c329b0236f3c2d1647e36 value 10000000 -> 1001599372 dacoins -1DUGRxypnPrQ8t7umv1QPwmwwYnt6dFA3m got 1001599372 dacoin -block 255334 tx hash 8ff8412703fc995538e07a62e72121e05bca103e2a5c690d35a56379851befe8 value 199990000 -> 20030985834 dacoins -17czXHWXFLVUdgiQSc9FJDT6Fi7ooXj6Uf got 20030985834 dacoin -block 255334 tx hash 99edb4653322708686491b0b1278825f18aaf1a90bb12142c7cd37fdf3e732f3 value 1000000 -> 100159937 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100159937 dacoin -block 255334 tx hash 45f6314f90f2bc5327c9c111a51c4364fe512dad91fd20914a4201faadf98d7a value 1000000 -> 100159937 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100159937 dacoin -block 255334 tx hash de87963428f7f32690d66641e3ec866baacc44112a98ec26f1aaa5bf88001920 value 236350000 -> 23672801150 dacoins -15sv8nv5MweHeXnHPbiCaNNf8FDtsG3JdW got 23672801150 dacoin -block 255334 tx hash 0100e72ff68cc0dee87aeb2be2000b6ba470f66a7017c352b6825179c6a04e4a value 80800000 -> 8092922923 dacoins -14MUti4hZhpnqeqswfHxLWFbYQ1GqezJEY got 8092922923 dacoin -block 255335 tx hash 1db758e0225735ed05c9381d2bd95cc83a6a9d61bfff07c22da4ed5894a4625e value 1000000 -> 100146842 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100146842 dacoin -block 255335 tx hash 417ad51dacbb9a164fcb38be94a080802b473e6f337c9a1c4d8a77cbcbf48a31 value 1000000000 -> 100146841931 dacoins -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4 got 100146841931 dacoin -block 255335 tx hash 23062f1137573537269f1157c75de3bf34bd65ac69d17764120b1b24962bb9c2 value 10000000 -> 1001468419 dacoins -1DUGRxypnPrQ8t7umv1QPwmwwYnt6dFA3m got 1001468419 dacoin -block 255335 tx hash 5dfc3d724a2f0c914551229ebd1d5ce64ee0fec5f8a629b7f80eb0b2af42e0cb value 4800000000 -> 480704841270 dacoins -1Pd1ESY2Hfb8Mom6aTJnpJBEAnkzghgRJq got 480704841270 dacoin -block 255335 tx hash c0b747b2eeb80064644424984129519d1affea371f06bb4c6a2a28f7f1bfa83a value 1000000 -> 100146842 dacoins -1Ls3wRUtiTv8fXcjXpT5LYjuxJ7rwWCEKb got 100146842 dacoin -block 255336 tx hash cab92daccdc464fc7bbeee51e145cc91a3d5305e46f3e915a19c7b6393648b86 value 1000000 -> 100140575 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100140575 dacoin -block 255336 tx hash 8998770c2fc05fc06594a2a4e4dfc7cdd9272ccf56d82c51759fbfd177862830 value 1000000 -> 100140575 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100140575 dacoin -block 255336 tx hash 0afe9b743106fdb733a7e85a3b4defe3be96500a82d0cf047baf0a9830c555af value 1000000 -> 100140575 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100140575 dacoin -block 255337 tx hash 3a4bcf79fa7f88956c6ddd37988d8fb9bd39b963cd97d4e65a480ef92ac5e68d value 200000000 -> 20025469577 dacoins -1CooyTFrq7iUh6ATMxCE4nNgHdgJox8Fxd got 20025469577 dacoin -block 255337 tx hash 03b7d70212f4ded10d88bc593b37369e6e692785481a605816fef3d7ac9b8858 value 1000000 -> 100127348 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100127348 dacoin -block 255337 tx hash f268b3856ab5ada5aa33a19abcfc0ede5052d649e2be37a8d2f349fa76ef9e5c value 1000000 -> 100127348 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100127348 dacoin -block 255337 tx hash fb90181d5096ae428abb1b10ceb807c07643d367a5ed852010c20c72345ff721 value 499950000 -> 50058667574 dacoins -1EYwqZCP6tZJhmADMQtKdex9gWdrsPd4Jo got 50058667574 dacoin -block 255337 tx hash 826c7453ca2e5f0f5ed22674b6b9b68b406d15c2b9c0d093b110ec9c04795608 value 1000000 -> 100127348 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100127348 dacoin -block 255338 tx hash 529718d849840017fafd46297f4224850cea1fe5ede97d454be349b6338c473e value 2500000000 -> 250305886243 dacoins -14S5bE4ZGbb4oMXsnNn4zErdKBN5Lyiihb got 250305886243 dacoin -block 255338 tx hash 77aba6cc302c9c0c217e39633c006d7a91c4f4dd8d67e4030f2fbda22bf39dc2 value 2500000000 -> 250305886243 dacoins -1GD6YyXnd7DKvfUKs22Fp3FSGuvK6n4F4j got 250305886243 dacoin -block 255339 tx hash 73c490470ab2be02e7916397293ecf3983693873daeb3361b10980eb5940136e value 300720000 -> 30107496694 dacoins -1JzN8RsgCTbbJcjLa9dH93GkehcmNxxZTL got 30107496694 dacoin -block 255339 tx hash 20105294b6d6d662d3394def5539b309b7f9b9205e270a52031e0ab55537cd09 value 154320000 -> 15450215782 dacoins -1NYdPSXbWxWQMXG8BhnXYUhFaLFAoyeHR3 got 15450215782 dacoin -block 255339 tx hash a5d67b14d732d58030d9576d62d2d50088c325cbfb4d6bd0ae65c53cabd69c9b value 6900000 -> 690814469 dacoins -17VP7dV8dxn3pDVxrjtgPiKhs37FLBBX7u got 690814469 dacoin -block 255341 tx hash 46d8972e9c3d6b0ee2119de36f9e39561bdde9d63d790ffa9e0f0c627a916e90 value 1000000 -> 100105589 dacoins -1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj got 100105589 dacoin -block 255341 tx hash 897461a5b4ef5604c37d83a1f0de42bc3e7f5a4551156135e35d242a1f76cbc9 value 1945780909 -> 194783543229 dacoins -1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk got 194783543229 dacoin -block 255341 tx hash ed7d55147a232b3645f9db8f6b11d0d0dd7b26c14206615564475340054c094e value 500000 -> 50052794 dacoins -17dkzPoFrkw5V2sDsBqSbbbvygaPzWsz68 got 50052794 dacoin -block 255342 tx hash b3b9b55e77550c3475b8a813d8a77fe508b2d71e739fe8476c7c7476fe25ef2d value 1351738697 -> 135305780444 dacoins -13xyUnidQ1JhQk7hor17eQAPw96hwNZhHJ got 135305780444 dacoin -block 255342 tx hash 208988fda2a0359517314f56e7d226f65cd48b0c587acd42468625b61768cfa7 value 599950000 -> 60053546708 dacoins -15XDP6tMciP3xxBroJCPoqTAvZJz2x1kAx got 60053546708 dacoin -block 255343 tx hash ba1fa92099b52d8697ec48fe720e77312407072594f366b8dd0d8df327d3c140 value 1000000000 -> 100094229497 dacoins -1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4 got 100094229497 dacoin -block 255346 tx hash 73fb62ccc15101ffbe44c6b79b1110e7bf2dd503aeecbd8b2fcdd69aee14514d value 18000000000 -> 1801450892857 dacoins -1HcQb16RSjdiH622sNs7Qsqt5vNWWa7oKV got 1801450892857 dacoin -block 255346 tx hash 051f71b9a52898829e7c37792a2ec882d36d9fb16227ffb744f3295c6a451696 value 505000000 -> 50540705605 dacoins -1MqAVaKzB9NKmxH1cGqmtWoUeeZuVTuy2d got 50540705605 dacoin -block 255348 tx hash 61d7200f3525b51f8441a1a629e16a385e3fcfb8bace9eb367d753934279dbc4 value 122507069 -> 12259252821 dacoins -18iT8DhkKDEMya2bDN1HRKEv6tWSQEgSbi got 12259252821 dacoin -block 255348 tx hash c257b5eb98b43d6e550788753a8743adc5817558e7c67ff2f653e4da480c6c3c value 500000000 -> 50034879299 dacoins -13xyUnidQ1JhQk7hor17eQAPw96hwNZhHJ got 50034879299 dacoin -block 255348 tx hash c16598103e85156e0d3250f8329bd1a2c7fa7b2403d967672b7b9b7497ee7a8a value 5000000 -> 500348793 dacoins -12y5do1mEWJcrawDq3p66Zd9NSUdWUAqYF got 500348793 dacoin -block 255351 tx hash bc35065c7ee3642c4188490a289fd8860e4929a19e99878ddf7e93b13dbf88f0 value 199500000 -> 19963009722 dacoins -1KGWhADxrefkLZHhthnJ4HkEsu5t9zVPF1 got 19963009722 dacoin -block 255352 tx hash 4eb12949ed57e8ba3495ef4c51c5b8675c780f7586c59fa62c3bf18246f8d52d value 500000000 -> 50024603175 dacoins -1Df8GTfWasZHJ4svNXR9sGrmXzTRt1Z5BT got 50024603175 dacoin -block 255352 tx hash 040e5a32bdcb1961a261d2a54852791d71ae57f4d2db1d30ff55f23d5c853dd8 value 100000000 -> 10004920635 dacoins -112xdxgBpCV6TCAXrJ3Cfv3cXQwGyHbH6L got 10004920635 dacoin -block 255352 tx hash edfe721771f7e98081a1b7a04576f63da78039806fec1cfcf59b8b32406004ea value 50000000 -> 5002460317 dacoins -1LzbWC9xo4TC5j6P3tjYT3fJVQ5XpaYADE got 5002460317 dacoin -block 255356 tx hash ae57a6c220ce7dbe3baa4eb904d50554d24b25534582d29f79a59cb864d484ad value 300000000 -> 30013784722 dacoins -15jY9nQsgzdkuj7Rw2KHGpDKoxv59gDJE8 got 30013784722 dacoin -block 255360 tx hash d37a41717feca7ee0f2ff071e29abe196a7aec219664a9b2f9db33c88c15617e value 200000000 -> 20007218915 dacoins -144PHZQoDNfhGwUFtAKayDyJSVQm1YkyHm got 20007218915 dacoin -block 255361 tx hash bffb6edb80d0731002d914fe55154a694e61c2a1d38b9b5bcb1773d0d2db3e49 value 1000000000 -> 100012119709 dacoins -1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD got 100012119709 dacoin -block 255361 tx hash d1a7922993d7ed20a597b931fe30b10fca08382ecbb087f6325e71ea08750758 value 29950000000 -> 2995362985284 dacoins -17VP7dV8dxn3pDVxrjtgPiKhs37FLBBX7u got 2995362985284 dacoin -block 255361 tx hash 1f8a8e93cb6fb21815c2e6471685703c75837e1f2a53865757228adab6c295f0 value 99500000 -> 9951205911 dacoins -1eLiRanANMyXjVGU9LMqzm9wGKdRAg8q4 got 9951205911 dacoin -block 255361 tx hash 67d020ff3d3d973ad193eb0b941034fa393fc24b4a27e0f3d65b1d0693ebdf56 value 899200000 -> 89930898042 dacoins -13X7yRvpDf1NKLhzsYHaghfNJQ8JpXTa7N got 89930898042 dacoin -block 255362 tx hash b111ac1df8fef7c1c0c8699898e850b539cd5062950991788670d6fc3f2baadd value 100000000 -> 10000000000 dacoins -18cSnNojZK11mLRk9ND3iosxrvZ9VBXtBh got 10000000000 dacoin -block 255362 tx hash 23bfafb474e21356fa7f7fe302b5301accde1fb714f0bc34d1f015d16a20c3f2 value 299950000 -> 29995000000 dacoins -16WsVPMRUCdMiT1rMxM9CEspdn7JYD2U5j got 29995000000 dacoin -block 255362 tx hash da621a2bd48c2bccb536741a5eb94426e191519e1875ccf42b18354130272ae7 value 100000000 -> 10000000000 dacoins -1H5i3Pz9y1mYnXqXDAxJPohggwyBT98oc1 got 10000000000 dacoin -block 255365 tx hash fedcb2c01555b284c96326f3ec28007e550e9b3bf68437a4f1e011c9a7c25a19 value 1199950000 -> 119995000000 dacoins -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih got 119995000000 dacoin -block 255365 tx hash 4c097244046e1b1fa23edc7ad8efd10babbe7c0caa13925c33097b84dae57af7 value 1100000000 -> 110000000000 dacoins -1KDCt8VoY45ya3QnExwtZEdugAnRAncr1Z got 110000000000 dacoin -block 255365 tx hash a37c9271ce64b9ec4ac147990a24c296747251d09d8da0e27c6a214fbad08421 value 1560000000 -> 156000000000 dacoins -1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih got 156000000000 dacoin diff --git a/outputs/msc_per_address.csv b/outputs/msc_per_address.csv deleted file mode 100644 index 8ff9fab..0000000 --- a/outputs/msc_per_address.csv +++ /dev/null @@ -1,338 +0,0 @@ -('112xdxgBpCV6TCAXrJ3Cfv3cXQwGyHbH6L', 10004920635) -('125ana9EZ9HJotBNnGsUqecsp7MzT9Z5Qe', 19151128009) -('12LSJoCAqvVQyvW5qaKGp6ZKMaaZpUcCv3', 10700200066) -('12QfZDTatfAbfiFmpGmFrbNiiyX9PjtYb5', 10246618717) -('12SdZk7Gd19zbvQZDF447PpHSpGY5SGYE2', 480998334741) -('12VamRhmcgsWWKWdNuzWqVYTvnuk2Dsx9b', 220562833994) -('12bDX26J84x545pzfSZouULeqjfBtAe9Lv', 699619940476) -('12cBdcNSBHwhJy4oLWzWne2qGu74PsbhTT', 2755469940) -('12jxqC2xCdwT35dCYiUQ9ad5rNCoehzyc2', 32510178542) -('12sVF4gaKPk1kmGaG8XxtoqgLMxWXr6ReE', 5391898148) -('12y5do1mEWJcrawDq3p66Zd9NSUdWUAqYF', 500348793) -('134qMRPNjXbwnq73KBDyEzH3BWqgDSK8f4', 29375370365) -('138deo1VUkgWmptS8NWnBqVwqWfZx1Q494', 20062291667) -('139Dx25QXHBJD1tfLQMwASAAJrWFiM4BPz', 677531586309) -('13CsP5SArN7fPXcXkcH331PPEuzCXdo5i4', 21079411376) -('13FrZaxxAWuFUqsmRVatp88h6EKTwmUrtj', 11227826983) -('13NRX88EZbS5q81x6XFrTECzrciPREo821', 56343027669) -('13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH', 21134827433) -('13PosdpaGPQTQ2TUkr37djsHqshpJ8k3NB', 5521622024) -('13X7yRvpDf1NKLhzsYHaghfNJQ8JpXTa7N', 89930898042) -('13aJiZTQYMYSkfT9E366jdKbZgPTtzA2kw', 13055739087) -('13dFPB1ag1WsJKBWoUp6yUiKYDKvUGFEdz', 35844283234) -('13fBNvRz495auamuV9fNN95XDUdGtjXvfn', 26070241812) -('13kMuArrYxHpxiVtqUgtYK6viv6JvaBRt4', 10075623347) -('13qGRH1n7dFeroYhjd5xktmWo4uzbVPbcS', 20188501984) -('13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v', 3608607308) -('13reFpj413XUoU3aHNbkPepd11Ha6Hi212', 10063083664) -('13sbvde5fYHeM4UxKJpRxFv7a9MjaKdqPT', 25881610614) -('13x2dka6tVhjsNNNomGJjUPi2iJQCb67bw', 1087679398) -('13xyUnidQ1JhQk7hor17eQAPw96hwNZhHJ', 185440819680) -('142p4ML8aXvMAnVjEZMBzyP1c6nauhtufi', 1008742728) -('144PHZQoDNfhGwUFtAKayDyJSVQm1YkyHm', 20007218915) -('14AqQW1tKzfRnMAgKxTdDedYJ3KoUVC9ei', 10046583995) -('14CQGTcpq6pduhRUKC5SEShBZHiJJHiKMT', 14372771164) -('14FF284GJ7d9m7WnkhiosFLvwLQ2pqPFTG', 10579720569) -('14FaL26kCyEsN4NviMEv3wPQvQGuwodyDr', 5931781217) -('14KxxiYghzaMiu6Ygcp1q8H4JGWViXLjua', 1435843585) -('14MUti4hZhpnqeqswfHxLWFbYQ1GqezJEY', 9094522295) -('14PVGnM5F8HfbiphzcSFSAgAcecUywadZQ', 1012004299) -('14REHKxxXicArkZuvfA7DkXeoqgWXZ2pzo', 10019444444) -('14S5bE4ZGbb4oMXsnNn4zErdKBN5Lyiihb', 250305886243) -('14vTNM7pZiG6qZbmf2A8J1x9wLdYTHvcPX', 18120322007) -('157FxpGB4ds4sXjSjXqwAXk7WQQSAojNFJ', 19385907738) -('158qYAqDu4GKeVHDiTYA2xAu5Ew4sEU2Ug', 24601309524) -('15H4EyX75muU78MQTHgNj9S75RbGVtZjJW', 28566481481) -('15KDDJeiiZqSAy8ff2waWgagP82zUrj37c', 3009574405) -('15KPAgwFaRQYxqCV95r6qTHCZgtr9HJVtZ', 6331183862) -('15PmgreEf44t2sLwUohspit2DNdmf8nioa', 50134334) -('15WrQhYhHts7jTMoGJ9rDCD12JuCTKy7MM', 17519517794312) -('15XDP6tMciP3xxBroJCPoqTAvZJz2x1kAx', 60053546708) -('15XJoDF4xCUrWX3ES9ftWq3wnGhuRsqrLk', 6055548942) -('15bPHecc5crhXxLnWy11ED8epfGqeBeS5t', 218259954) -('15jY9nQsgzdkuj7Rw2KHGpDKoxv59gDJE8', 30013784722) -('15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 52934328263) -('15oxQoTsbrX7SJK86HHDY7qD8BzUday2dx', 20060373677) -('15sv8nv5MweHeXnHPbiCaNNf8FDtsG3JdW', 23672801150) -('163dXoX3bfrM8t8DwbhzfHdGYNQfYfXhK6', 703514632937) -('165EtwPtp3dXeHBAXpdtKher8wpR7E4Vwh', 10203215939) -('16DQ4vNFBij4zZ3CURpgX1CCmxSw8yrZdr', 2124172288) -('16JbDstcRNzevcBSVu7XwUKJ3bB6btxWHh', 114459047619) -('16P9gkfoX54maGbX6x7EHz1qnY4n8d7rYh', 3103611111) -('16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS', 53168692130) -('16WsVPMRUCdMiT1rMxM9CEspdn7JYD2U5j', 29995000000) -('16Y1wE9WEGSySsUNMoKBicQV369C6E1fV', 30625927579) -('16akrvw2R2kREZtYET91bUyoPnyhQyur3E', 20498392082) -('16kPgvUbpsYfxj9mvpCQqsoZ4c2oJsNfH', 10068911438) -('16pdW8RQjJpF37FLMm7R65HBvn6WY33Pq8', 1003018683862) -('16qiCQ4ocbM4zRceN8RYwWqBRQoiGCvcNa', 10052809193) -('16rQVMZS9k6grNiMybYfznH2R3TViYNMC6', 12056734458) -('16rUg4eijBqM6oYrSrUzvghe6QM9CHvTYW', 53260166005) -('16uce8E7DuqC5QNmsjMLcbZEmLcUBRGqaj', 1512488839) -('16zqyiBKDsL1X39ip5aVHLsxgFmxUCBeKM', 40863528651) -('172mDyjew7PnUpMRdNPjjv1bU1u4Ftgs3M', 1429964285714) -('17CoqK7cqNVLyv1CawzsGT12eTMP2fmHuy', 202585582011) -('17LWEZqC2WyZaBo7pKADcsDkA6zFjY1iTC', 27072465027) -('17QqwZtZ221Dod33bY33SAZMXrSmi89rsP', 6056807478) -('17UDyggWFP6T3tUPTUEHMU8gxRtLZHG322', 5522609127) -('17VP7dV8dxn3pDVxrjtgPiKhs37FLBBX7u', 2996053799753) -('17XgPMQXbXr2RmPKKB5FJ3a2UFMw2Gxarh', 16306044147) -('17aRFk7cMSTuwpkmLk3Znzfeys2XKLVgML', 20105555556) -('17bGDJTMeiWx4LJdf8gECEPFMmCpY2jA66', 336161142053) -('17crSnfzrevwmqQo7QavEFr4QcaYujbosE', 32783859127) -('17czXHWXFLVUdgiQSc9FJDT6Fi7ooXj6Uf', 35270050808) -('17dTm9LYvNzNT4AM1kum557L539YXS5y7S', 16420711963) -('17dkzPoFrkw5V2sDsBqSbbbvygaPzWsz68', 50052794) -('17ezCD79i6qmzPPBtD8acNbHgjsTRoJxni', 40225271164) -('17hvZSX8rxn4oqWHvsWNd6BNq8jTftTvMj', 1436649636) -('17kKzeuAMhV8Pw9R62CWkhi5pXKmigMJQa', 13447939815) -('17kLc6ZYAbVPpZkCrvdUE3K4NBLSKGxtPb', 25062153399) -('17nnHLr8gKn6quWJo2orbkxgPj8Y9vcMZj', 41189316096) -('17t1avq2qk3R4Q3qzSZgjj1FihTgS5JgvY', 79739136905) -('17tJw9CG4ufjA1yXd4TFR1wqdgMUFzi5n1', 13855634921) -('17uK6u4nTbWv3h6WNKg7ejxmgXvy4qebBY', 643798) -('17xU8miooPMkdK9ZWuQr9NESpr38tHryjG', 2013225295) -('181mY7b9oWKsyf5Q1K4TaJA3JhNoxSrt1S', 1504531195) -('18D38HyzBmzArrcHz1jBTVvatvxTnBKRCp', 10031914683) -('18JLWH8smwG59zab7j4DqDLZULfK1iEUoH', 6013069444) -('18QTFj5KmMSoYMrCuRGgxdywj3xXYtCvzd', 53115530488) -('18Se5aMNvhYTJoVT4bARcJVVT51mHBwjbJ', 32287207341) -('18WANHBTcj8u2GU1PY4h1iG4EbvgYJM4gL', 303797619048) -('18XV6qXP7U7HV22Y1PajAiuLfGbkBc3Jfg', 26142960482) -('18XcsA9AQQRWaFonAWECg6W1zZsmgYjioY', 13617761380) -('18YwerNLcJhn1ZC55yoiYHevuuobmW3Pww', 10741519511) -('18bVHTir24mJdYfbUgpS3k9mkSSzZU3kp1', 32877719907) -('18cSnNojZK11mLRk9ND3iosxrvZ9VBXtBh', 10000000000) -('18chrWPjs9ug7Xq7xDiFkqbe9A8KQdG7eH', 3110204340) -('18ebxtqmwE2MMJtHbpAosrKEem8go9qc9', 7070485284) -('18fjRdAxg1aQbw1DeNM68nsD2PiEfayqfJ', 302451636905) -('18hTHcNvBrGduvG4hG55C6nzRWX5F43qam', 3005833333) -('18hoYB6KH5nTu6iE1SH3fNKnnRKFe2vaxF', 1303966270) -('18iT8DhkKDEMya2bDN1HRKEv6tWSQEgSbi', 12259252821) -('18mPaJtGX2ots48KdQr4FZLhDSbgyzfnP9', 51683887236) -('18rw5npF8gTGMNwk3hZNq3sqTT74Mm8zoh', 10220762978) -('18toyySRFSWc56EF6tRXMKQK5UCPgGz39T', 997785112) -('194iAz9vJw6tXbxpVZ22YWaYyWDL1QCBDz', 643798) -('196V2uB471HoMHwbkQRQRiwd3aYpU6RtWg', 5994129166667) -('19ABrTW1XhWErJxE3UvfNuBRzB4w6UcTRp', 5040860615) -('19AJ7rVbFeeyeoWjjWm5xrGaoTwPH5bLpY', 4365305556) -('19PeRXtHfA9qoQ6MFkR2U7QEFTfdSckE1', 52958903770) -('19V6mbsUWfKeRJyHvPpmjarUyj6Arm9zcQ', 2018758267) -('19feAR37pguLwDyEMc8oiW2WT4esrgR5z6', 5544255126) -('19mSdN6s9iBHFyJ2ycHbzQ7dcnfgZHN8Cu', 273714253) -('19rKrjPfydDQtHfWHcFcnfXjhGzQjkAC6B', 5068087798) -('19x2pAiyH5SM3ubJyrKaEgfxVgRB9131wS', 10380095055) -('1A14hK16TgHCYzyqHm2VNZDe8ShYuZ981x', 11090075859) -('1AAciKr6aNMwcYrApgAp336e8EjBwrYPWj', 132038340067) -('1AGFxUanxnWnrTiwLsY4NyvNZTv3RWFnfT', 150469444445) -('1AJzXcrPJbXudbRF43d9j2pympLo5k5Gut', 253318511571) -('1AKQX7Qso4UQeAPD7rPWnDAQr43z6eByui', 156612276786) -('1ALeLAXtnZrbJHNhWLW5BvNtL1uP5TqJU8', 5098438327) -('1AMgiLXpQ2rxtrVagtCfxjXJV44QumWNhP', 136027369378) -('1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH', 10173350529) -('1Ao6nURcqduZzsHHPJyKa7kyzTASVPP66L', 10045160384) -('1AoYNhBr3F1yTumvtWB2bfsJ6gYZJXdDd9', 10091784061) -('1ApWmGDViVjTPqRKBhPydpBZ5DRjpuEEic', 15142266518) -('1AsX2fv1QRFgCYT3F1YMWm37nWnW8TkZnm', 14525201389) -('1AxxvjavPMEiyT7quRVrfWj9xjgv27PSCS', 66971585648) -('1B2aZeoqGVrZUJg36waug8dNiDK7yX4JoT', 326956647) -('1B6cMHmdRnGgsAGzyBv4JeBjoxXgcrigk5', 5649682540) -('1B7GKDsgtgpxp87W1LHskh2Y9Qy8vMH8Ri', 10031433532) -('1BBTQrfsZQVoGwdPfp7NfMg7F4pYes2F1s', 2013376085646) -('1BCMago5NxA8ga9GBDur8SRbagacvRhmU1', 4384533333) -('1BFqkdUDwp7k1Qa43vmSWEfj6gaoUVswwZ', 10628277116) -('1BHQeERPiQfQbxc1NYgoYosWqWguKprhkH', 220466081) -('1BMpnWtwT8yCaYrncb2K9HCeE1NMQKX5xv', 23044887566) -('1BQtQSNPhm7fJMQagc8BrEEvcDNLEkB4J9', 5162691711) -('1BV3rErytJmf17NNQfzHkHYakgweq4HzEx', 51581299603) -('1BV9k7VQbtddtLeWxkTSafcYHUsWLJoqWM', 7194767692) -('1BhHGLm843e3kXyMoWr64UBq9Kh8upAY6K', 18120686039) -('1BhbBYtVSYqGifvPhien4B18MjMGLi8T6h', 10100730820) -('1Bitcoin4yZjSSPoXUceJaiyQLABx7B2LL', 10127878638) -('1BmPgrDRGJouzPJdtDzXb6KhYDbBi9fy9B', 20081888228) -('1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih', 314595691137) -('1C438zHsaG3PZfjAdo3dwS7UrrHsBa7iUb', 6372438084) -('1C9RKyQ9X77iA6ARd182dRyGiacedGwYec', 31535004960) -('1CFQgs77DDuixrNYqkj4RoQGrSgJmVcaiH', 10644222884) -('1CJcDhymhoMRqFHQzX9hxq7NBjrmy9EYEo', 20150729167) -('1CM9jmLrzSUXLRAwFUbcmN7tDiY4Wyi2VC', 6508160549) -('1CQhTj5tAtvzGti2oUiBqF2D8gGvGkJbTo', 213645824030) -('1CQqn1Rx55B5peP7WoucYFMptqM3ASZB6W', 153047593) -('1CbYgvA148Ew5j22S2rbgFCKToQTwRnKfS', 599336778588) -('1Cnv5Nj6vtcm4Qb6dqawkLvwCTTZ43wqen', 25868295304) -('1CooyTFrq7iUh6ATMxCE4nNgHdgJox8Fxd', 20025469577) -('1CsG4xVTbJe37gZioPTvPReaoUtWdBBvsq', 10974594793) -('1D11zSkRGnn6VMgaipqNeD2rtQfN5ywos3', 5042046130952) -('1D2UUm9noQ5eW7mQ8oMiqxvbFqB8wuvvWS', 1024608135) -('1D5bcwsAvw8nNb66Pu2nw9BZyfg6kkUtUx', 5305650674) -('1D8CrjDtEv3cHm91jjk15ix8yeS8oKDzmE', 5011970899) -('1DDhPhsydLh6dDgAg7GVT3xZuYd93tjqtp', 10078986442) -('1DHF9MnvvM1zUNxKdu9hB2BfwFuBANPPoe', 20101732804) -('1DLjzpGMS5DHucLujKArriyp3S8y3aRMqa', 10020692791) -('1DLwrAYgzMcbntvhmBHKajGEaSv9U2YGTq', 10743267361) -('1DLyCnaUYVgux9L3MPWkH1VHQXTHoTUC9r', 5944117890) -('1DM8pdm1KbTfAcChuoawkEEbwEqGVzmqQ4', 13154006283) -('1DSeB9NW2VDeG26Th4fmRGMf6sxww215mZ', 221693981) -('1DUGRxypnPrQ8t7umv1QPwmwwYnt6dFA3m', 2003067791) -('1DbFbPdbDAHyhMat1cmatbPfySAULC7FL3', 10021782407) -('1Df8GTfWasZHJ4svNXR9sGrmXzTRt1Z5BT', 50024603175) -('1DmuFKdM3wpD9rDubQa75b8og2HdS6mD9g', 1440052249) -('1DoUJcTZMMHN7fMfg2aQE6ohZKXroyXyWW', 17236738095) -('1Dswt3PZQrR9NPcTDRjVZxZbEjpvDfHnjv', 100376042) -('1Dv1tvyWfvRK3QHb3dZAMWLUKzL6Ddad2F', 72016089) -('1EDDiekhvJVCZpfrYSHPCitnzLgrXUXutt', 52709918155) -('1EHjzwUwJokV4tZsugPFuHs22xoinaYQ9N', 729794566) -('1EPsEDXYuQV6nmHE5wgwtJmoiD3T1AXwsW', 28417815104) -('1EXqpyc7sEVbH1dK8mdE35gM4ijiQ4kGXQ', 1038350945) -('1EYwqZCP6tZJhmADMQtKdex9gWdrsPd4Jo', 50058667574) -('1EZnzK4XPwRjAGqyK6oQmy7NpT6uDhWf1U', 47174525910) -('1EaMiS5stT6FKGEEWQCY3X3ujci3m5MP2m', 10775650880) -('1EfH4Sz6CKxpq8svB2ZfuYqNxZo1jHuwsx', 10636585462) -('1EnVK4yMdfAQHoJ1q2WBSFXxbwERoeNfYc', 108048843) -('1Eo6FGPytuYvuA3ZS6ToXqP8sScWWtKhWN', 501780257937) -('1EuFaVybvZij2hAfmRcDYAEmBqRLGRQXan', 30985218745) -('1ExeGhKKnTwMps5R8d4PyKvdp42dK8cKpx', 10881421958) -('1F2KyKaLr1QbCgGGAjuBSQSJo8GQ6CaCwF', 10018387897) -('1FC9RHREEsUszQHapstfkFcHVwv9ye2QpR', 10535380291) -('1FCVjvfKtLYpUq31S7CfMG9EqqEUtw2Pem', 1425958333) -('1FLyLEzRvV5ucRaHBcXfhqSQnwjsnCaVhH', 208675000000) -('1Fi4UdfU7Bw9CdX85K2rtzMoZuESvDPNS7', 6694997210) -('1Fi5NGyKoLu1RGveRs9VvjRpVq3kAAoqMa', 5442049438) -('1FjLKFH6BXB6NUUhpSUNendtjBNSmNNPZT', 13724584979) -('1Fq37GNfyxSvnmye3QdxH6GpPAQ3enarfs', 10621848545) -('1FriA74vipRm9QGQHoWREHHNTBJtS9tR1k', 18801716326) -('1G3Cyx194o3yLbKFmzR4NtNE6fxJSRowkp', 1028343584656) -('1G4viUH23ktwEBoistLTmCvN2DuWeBfaob', 4864758466) -('1G6zjkpKHaDETbswWCJwyu3PQMesoCHvvz', 50129208003) -('1G9mvD12ZAiAxMuXeiaUVDkMAC8C4FFoLG', 10140458003) -('1GD6YyXnd7DKvfUKs22Fp3FSGuvK6n4F4j', 250305886243) -('1GPwJvMpB4vJPuMwHs9JDAZm9Lh66Y2qnS', 249558201) -('1GXnFHXZ5FAqWYp2iT1rpnLm3XAiAh2fuq', 10766020172) -('1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj', 5720500793) -('1GeVYn8BY86jTgUYoWeLkWXULpJnYD3u87', 3911190575) -('1GhwyPsMn2H47vWjJBAc5skZrdcWsyMDZL', 1285254365) -('1GuoNYVPUwePeYghvDP4gCny1YaFyMfTcM', 15729396429) -('1GwdoK2ep5sLGyeSuyHiXhJeQd3eogGjR5', 1827629216) -('1Gy2XEo7aF4SsTAjz6ZWfdkiRnDuNpnMP7', 12994790766) -('1Gz4NTCBJb7q5gEURNeGnEivEt2yDY93yK', 10097524802) -('1H5i3Pz9y1mYnXqXDAxJPohggwyBT98oc1', 10000000000) -('1HETPNRFYqoXEEkpvNY4zVLsQcTumfhoJ2', 72006679894) -('1HHTyQWtA8Y93CAGSHZ134yBErtxUoDAYV', 3803219329) -('1HLdSSpvRDcAyD9k91yS7X9o2jaJiKeqp4', 302744598213) -('1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 194783543229) -('1HXaE1qztaBnJJa43LNLzexhzzbefJkm3i', 10418902116) -('1HavyitVfgfbX6q9vprFgU8emXtixixEwY', 16015267580) -('1HcQb16RSjdiH622sNs7Qsqt5vNWWa7oKV', 1801450892857) -('1HgwzP12Y8jvE6iT4TLWE96zPaFkXPSGL2', 10120548817) -('1Hkjo5N1CLb7XmUtCp4xWRder81CRfpdNd', 133542873677) -('1HonwLhETda1hQc4uLA6bzhXH4CUaBmHGb', 10145415013) -('1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s', 3309702580) -('1HxMra2tkzjD4FmGWyBCJdECL4iiM9oGSk', 14292988127) -('1J46wJTLYvhabzrVjVVwrUEUsYvLMbpNwK', 3091806830) -('1J7Pzq1MvS6ti5YV6dfJ4NW9iZU4uhMEj6', 2154000728) -('1JASe981JUgzKgAoV4SYehenkHbVAT7Ja8', 3326065526) -('1JDNareT7T3DYQjp2L5oKHpQ9wRaDMuZ7p', 27076571098) -('1JME1dvN2zAAgXhXPnWSWFGQ4Z1iHALFj9', 33209164021) -('1JMKBtZbqhZFbJ9GdFdupTy4tGd2Q797JJ', 1048728340) -('1JRfc5W459i9PAPiGDvTUuJve9fn9z6YjK', 14419591601) -('1JSCYw7NxVbBhv8HCupYhgYqAwqTdRT4u5', 20053733466) -('1JU1GS7GyHg6XYqq5JjNUquzsWgHoUFAGR', 238423635218) -('1JYXwhzeTqrLXfg79EbQ95GpoDHxZWWE6d', 100194444444) -('1Jge9avkgP3zsSQsYeSpY5Pd7xBk3qehNv', 10348198725) -('1JpK8eh4Egt3a1YhrSg932qBToSRM2bcvG', 5028637566) -('1JqDHs9GiNckdTYRjwDQqwxajiRFQyuNcH', 50097222222) -('1JqNVmZBrCvT19he79L4F2YWxydWZ3mQ14', 10046987434) -('1JqxEv4TH6XmMxCfRi9t3t9QhPnxp79UBH', 409016530) -('1JvXUatqyiBs1gsp2vYopyc9QnStfVn2F1', 72216013558) -('1JzN8RsgCTbbJcjLa9dH93GkehcmNxxZTL', 30107496694) -('1K5Tofy7UTfcrpWBnXcJhHZzvLTksDdasQ', 10103326720) -('1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD', 300315819775) -('1K9ETVUmDcfahqzoanBBmbaDqVmUmqrQJS', 588810138889) -('1KA9SV5pyqpW3sqZbfAWhSRiVeeN552BXQ', 57308630985) -('1KDCt8VoY45ya3QnExwtZEdugAnRAncr1Z', 212053654101) -('1KEr24zCxEwf4WAdwAQ8gy3grsXGfFPaGy', 7394243) -('1KFZmBqaJFnBuJLL9HyPdj19dfcW6gCdkZ', 29392328307) -('1KGWhADxrefkLZHhthnJ4HkEsu5t9zVPF1', 19963009722) -('1KJ8Q3PaVvyjV8GdVMha7VXPaBuipdEFG1', 2257171726) -('1KRaQh3k47P4Mu4XXviRGHrgYi7BK5hsAV', 266625859788) -('1KZmDQGzGJWYmPP9X3b7TA9dY91KBXgaG4', 31737297177) -('1KaM6ANCsKgFnsTRUXnNZzHT5ZLpnRsf3t', 60905935847) -('1Ki1Uxc1P1HRfk7Awq8ayZghzwGCsYWe9o', 107687855490) -('1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f', 31776650397) -('1KpSuQmkejZPKj18Gj6y2fUL9GZyWCTVuh', 20596989364) -('1Kqy5J4KdYCYG9N7rWRQdq1wfBGmQiPG1n', 11408598477) -('1L5AUL3vEh2hvBbxJbtuwhbnWzid9W2gAW', 10103731812) -('1L83XWGbddEyabcipQNdcibc8q7pJSorYC', 25095844590) -('1L9bbsESqmaKWsstrDETuZpD1BjLdy94ah', 10097524802) -('1LB2AZvQrLaBxti8gkUHRfZ94oKF1dQmQS', 13425348313) -('1LLnRXbnVuq7h3Dtap64wXuw76nnjPnjYi', 54686718948) -('1LQBddrjjUaMLHcd4cG9XnN4cCZbHfREJF', 1078119709) -('1LQzaHiedzHDqPW8q95SyEL7fAzahvrmTo', 35938793816) -('1LX1Nv7C6RnR18ir3r5GrmyVvG1yy2EnRa', 573773946346) -('1LfRqHRmJa2S2U4XGVWerta2yQhbvKLG2b', 30319280754) -('1LjT88X7Zu8BdbqJw8vfRa83NJuzYL9kqm', 10712380845) -('1LoMxHHUzFXNoFFDjdjDuN6ciq8wrKGPSa', 70247696759) -('1Ls3wRUtiTv8fXcjXpT5LYjuxJ7rwWCEKb', 100146842) -('1LzbWC9xo4TC5j6P3tjYT3fJVQ5XpaYADE', 5002460317) -('1MA274fPpN7cBjiseaMtTmuQCq1UjAir5Z', 50503654101) -('1MLPjJ4iDXpAnzgon9u34ZxnSjTHztxRCP', 10034031085) -('1MPUi31pLY3KyhMATYo1A2WJKmo8NcbYhz', 30270079365) -('1MQCRE2ePC1M1AgseWar49ncY1Dyk5MGWN', 21647609231) -('1MR9wDhmKVRDcVcpm2c4BB71SR9yTYdBvg', 53524926142) -('1MTdEJZoTRbHyUGMjkQZWYBXMcusxkxLLR', 2558251539) -('1MVb5dBgeCVwpoSQKNkcA9bwq8anx7ydnd', 10230834987) -('1MWs4JQHn9aY9BQXXqV9bnSZVX3Ecggz9i', 26263277213) -('1MZH2ixqERRzuW9Ha7xqbyGoMZyfo4dv4h', 10105335648) -('1MbzgJ9fwqcu2HWByHpUXUxASyURvJ5AWu', 14260408399) -('1McQ3KF6eY69a1oJiJhCJj9GcJawFq3vUG', 695102440) -('1MnW3JgujMavTzBCiZyfxigDhu9pnDE7dU', 10040944114) -('1ModAtK5caWTxktKr6EfnEsQQddfVGXaHX', 12162387203) -('1MqAVaKzB9NKmxH1cGqmtWoUeeZuVTuy2d', 50540705605) -('1MstrCofqGJQ73bGwdTxj2Uo7EqRxUDWAo', 2506322751) -('1Mt1tCGyJnD6SHzBgxtg6GRJLUhqQrc4ff', 6056506283) -('1MxAnJim7cxBp6qwfcF99xiNGggTpCzWJd', 10917018849) -('1Mxuru2YEg9dZ1jGSoEks3BfP7Ee1LaXAd', 10045160384) -('1N67g4FERNdTrSTrRUcXCQPSyk1LW2ybHW', 10480669643) -('1NC9iRjQsXFQFQXS5RCqDvBEuNHVf7KHTG', 25500486111) -('1NHVAzYT2jQ8roRddYXhvZtiVjuMwuWBGn', 70807238450) -('1NHaFCh2fYzqghh8S7YN5fX4xpSY6W3tBz', 1322364477) -('1NJW7tJoDJboQQSUdPHQ2pAYm6gAy3SgdZ', 701862037) -('1NQSMowgQVWprE1dwdbzTwCfFrVXK6sUh2', 537222387566) -('1NVwVUhm4tHxpGZg6AMSNmxYMUwkyQe1fn', 5386860946) -('1NYdPSXbWxWQMXG8BhnXYUhFaLFAoyeHR3', 15450215782) -('1NZCgBRmEcidNNNCWiccVDEvVRkV2CD7q2', 10710864749) -('1Na6CZdvTMzaq6f6Xn9jyEfmbf5NiEp65c', 259695300198) -('1NeVKGMiNZ6fuoZmVRthTBNw1cJ3MGevwU', 55215541914) -('1NemP5kiTYEj8SwvpVm2uiEwfsa5LNQPmZ', 40119744336) -('1NgxPxvnswGG85FzjrBQ2tet1sCXpCzhg4', 10043457341) -('1NhAB2xGPosYjooSqJET6eJy2ks15A6CNm', 1215738294) -('1NocfrxnLadDjfy5XR1JsSgdVsw8ChxCLA', 1004658399) -('1P2KXwVg2h4iDSqiQf4tCkSL2XEVTAyqrB', 133340029762) -('1PA8qhEzW7to6EeqBAdhVZYGbVj2MfmN2n', 231091243386) -('1PBk85ohrvbiTpDCMxjufAbFfCg3ZdXn8e', 5459414683) -('1PVKjb7QQKRZ1urGPmf7xz8ZgHJaqZM9DJ', 17763374193) -('1PY5X3hbcy6timNa9CQJzzwLeJgvDJ4Dik', 249558201) -('1PYXRp4Pj3PqNmyz8GA7qrhsMa1hvjjY7t', 20097288360) -('1Pd1ESY2Hfb8Mom6aTJnpJBEAnkzghgRJq', 480704841270) -('1Pk3gL2UQGEVSLv6FUVLfx8QT6mfsDhDa', 13452853836) -('1Po9mw5bbgx3HxHZ8Vch24XcmHTiFTRDuW', 200319874339) -('1Pohx6GPsnvnEsYWRRdaK7GVAUkHW56R2K', 2089444444) -('1Q1sFqsi8S5DxV5hz6sWLamGBp9To93iG7', 127723987298) -('1Q2kjs7MjWgCtf8CfVkXHUkAeKbaMqrK9R', 10892384259) -('1QAJh4ZCuSsLErYnbtHqaGNTb5D9tiX2er', 30226870040) -('1QEhcXxmkkBdcfDhcFU6pFVCdiXQgFZLLY', 101159226190) -('1RavenHqiZ7euZ1ETKkKP74h5SPLovdF6', 1063476071) -('1RjrXzEhSsbTMYw2XJrvt6fSiKU9mGeRZ', 8271059380) -('1RodtRU2EJ7DMgZCjgznivm5yqoeu8Lgh', 47450662438) -('1VDTthqUv8bjmFePNxEXTNttkaTWfKdDi', 9520257202) -('1VP9VM2Kk9SNLRDTJzsEe3WtoKLwWfnmc', 21042979497) -('1aTJa6dhYax5uHV249FA732BQDxABjSPd', 5012645503) -('1donutMH4L7kdRqh4xvSvesfd3KFu3UNm', 10476380622) -('1eLiRanANMyXjVGU9LMqzm9wGKdRAg8q4', 9951205911) -('1eZwsyQJbUhQduw1TJcWTbR7HjnbLgQTs', 53157349537) -('1nivsN37oY13sqNoxzPa3nZrDVQzWGBYD', 4328703723) -('1nuMbaCBZhDsEe3oKnHY7FtFUtbd1fckf', 10662311508) -('1oC8H1TZ7JLrt5iD5QtEpBa4p1Nfh8oXG', 6098439153) -('1roLMd1dT3Arpsq6sqjProZU7vtKL8cx1', 183263488609) -('1tybxKF5QbtJ43kiV5gAFPNvs8WR6uUWK', 10111698082) -('1x9K9xAft1e9D7e1biMp77JSPQXUtWDwM', 10763224206) diff --git a/outputs/parse-with-multisig-simple.log b/outputs/parse-with-multisig-simple.log deleted file mode 100644 index 8dce12f..0000000 --- a/outputs/parse-with-multisig-simple.log +++ /dev/null @@ -1,148 +0,0 @@ -[I] main: {'tx_hash': 'ab4adf577b9b88b264347b734dfce9d399ed985f76ca7c913338ca144238d3b8', 'to_address': '1Cu3gkevrm5bAJAWabwiWMWw8DsVujDbMD', 'from_address': '1KEr24zCxEwf4WAdwAQ8gy3grsXGfFPaGy', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '81', 'transactionType': '00000000'} -[I] main: {'tx_hash': '63c7eb7032645344a362bf729fb05217156d6d5d7e610e4e1953485dd1892d1c', 'to_address': '1Cu3gkevrm5bAJAWabwiWMWw8DsVujDbMD', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '81', 'transactionType': '00000000'} -[I] main: {'tx_hash': '9e0b6bb921ff60de42125bd75c80ba68ceab3c649882fbd15d6f5190ecda0737', 'to_address': '1Cu3gkevrm5bAJAWabwiWMWw8DsVujDbMD', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '81', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'fa4486dc136fc8a741b69b015bfb6f1f7ca1898d4b6ce6c77b5d98ba59b6b1fb', 'to_address': '1Ch5Cgoc5Yse5pVoP322QsrZfdo3xCwNbV', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '7f', 'transactionType': '00000000'} -[I] main: {'tx_hash': '79fe07d288e1db4d4e06b101ca13dc9fb6a656edc27927a159d4f589bb823702', 'to_address': '1Ch5Cgoc5Yse5pVoP322QsrZfdo3xCwNbV', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '7f', 'transactionType': '00000000'} -[I] main: {'tx_hash': '16ae9fb54c0a333ad1cda5deefbb4ca75501f9b04b229e3d5d85a02d0a7a6b93', 'to_address': '1mcnAR4d5waaD1WaDfH1gU9BuGmCwNNMe', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '07', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'dfa827e4ddfa12ab05a18f5aace980eba23b1299c3c51080004600a04a9ca74b', 'to_address': '1mcnAR4d5waaD1WaDfH1gU9BuGmCwNNMe', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '07', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'dc5c346e1b7ee7de135a34eab255afc48e2d9092553f32c1a80030e0438b61ec', 'to_address': '1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b5', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'bfadadcbf9e67eda7359d628645473ce7753d4048964d94340e4acfbbf15de5c', 'to_address': '1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b5', 'transactionType': '00000000'} -[I] main: {'tx_hash': '546802255d4d07ff823cb935b02706563536606d3546e76e16bc945a9a2198af', 'to_address': '1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '69', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'bfe12ea222779c5892b5e5fb127ce4e709867d3cf160b95b189ecf4e7e92fda5', 'to_address': '162sRqqkQQ126riANMqK9e6gFt35eDCGyi', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '36', 'transactionType': '00000000'} -[I] main: {'tx_hash': '38f7a303cef730b8257684d9a2950f5e170c3d75cd81a6ef11250bff31ffb81f', 'to_address': '1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '69', 'transactionType': '00000000'} -[I] main: {'tx_hash': '755c9a40f4b8b7558e571b832efdad05a81eba442cb25e81b638c0c69d38a12d', 'to_address': '162sRqqkQQ126riANMqK9e6gFt35eDCGyi', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '36', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'a1633359d7264ceefd3557ca96798cff77e357a472c72be65cef9a729ab77ad9', 'to_address': '1FZ9VevcVXQseSAQPe3zuCzsWQavQpZo4g', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '9e', 'transactionType': '00000000'} -[I] main: {'tx_hash': '3db59c2699a6ac17cc70b4501c358adec9de7f9460e5b107509c30b516e2573c', 'to_address': '1FZ9VevcVXQseSAQPe3zuCzsWQavQpZo4g', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '9e', 'transactionType': '00000000'} -[I] main: {'tx_hash': '5ebd99c3c556df0cae23ba3918a651b37a614dd972ba215e56589133fa1148e5', 'to_address': '1JpVUU3VQjkYKSfot6PDQXs8un11Dg2ZZN', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'c2', 'transactionType': '00000000'} -[I] main: {'tx_hash': '0f7e5512c969cce01cd061913b6ca67c894d81cb418e4346a7775d1d7a23f6b8', 'to_address': '1JpVUU3VQjkYKSfot6PDQXs8un11Dg2ZZN', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'c2', 'transactionType': '00000000'} -[I] main: {'tx_hash': '183a85d19059557b2ae0aba3cf987943c83aaa79ec68d18aa261c9c6fcdb1fe6', 'to_address': '158qYAqDu4GKeVHDiTYA2xAu5Ew4sEU2Ug', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '2c', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'f90073ddf621e936f897b277325a6c09a9024d4e87ff6a42bdd0b0022edd04d0', 'to_address': '1MRBT5Fg5NuCpTY8xH1UGSgnYj41WKYPVc', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'de', 'transactionType': '00000000'} -[I] main: {'tx_hash': '19ae118dc686e532953457bf2258a84e49b238f521cdb2aa96466614b2a590a0', 'to_address': '158qYAqDu4GKeVHDiTYA2xAu5Ew4sEU2Ug', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '2c', 'transactionType': '00000000'} -[I] main: {'tx_hash': '2829192d5402664962255b191d79e14baa56a088ce731465a54fbb3b9c9527f3', 'to_address': '1MRBT5Fg5NuCpTY8xH1UGSgnYj41WKYPVc', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'de', 'transactionType': '00000000'} -[I] main: {'tx_hash': '85949f5d508249d0f0d80bb4e69fe7f096f0a640ec0078a23fbbcc8206965738', 'to_address': '1HeU3RSvgvTCspVF2nq3U8p9tgs48fNStG', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000008f0d180', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b5', 'transactionType': '00000000'} -[I] main: {'tx_hash': '4b6e83e9a558a1949ac39a9aa274238ee793248548c642c085ebf11c4df05589', 'to_address': '1HeU3RSvgvTCspVF2nq3U8p9tgs48fNStG', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000008f0d180', 'currency_str': 'Mastercoin', 'formatted_amount': '1.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b5', 'transactionType': '00000000'} -[I] main: {'tx_hash': '0ce5e9eaa64e4aa0873720edc9b251d700cc9164e95396bbf995d84d49d48e67', 'to_address': '13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1e', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'e483f444e74d9fe6725b1ee3ea08990b3d83fca7ca4cea430719b7fa89f1c1d4', 'to_address': '13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1e', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b91ebba6649df4ea6bc98d412238b8cecbfb75ce6f680ac8d37d15f1314f3c74', 'to_address': '18jx6UYhAWkVtN5Wzo24Mn5C4rugB1fZ6r', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '53', 'transactionType': '00000000'} -[I] main: {'tx_hash': '012e60064d48dcf1757e69c0fcd5ef1c0fcaffe0b0ce0f953a25f13ea4bfeb25', 'to_address': '13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000002faf080', 'currency_str': 'Mastercoin', 'formatted_amount': '0.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1e', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'c7447cf2a33617aed6ce7ff6778a6cc6107a66180f70c53639aaa5ee7db9a26a', 'to_address': '1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000077359400', 'currency_str': 'Test Mastercoin', 'formatted_amount': '20.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b5', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'd10c50c7c12fe6cae4154610f38f1045ec08d10402c1b506bd9ec5fdf5f2f294', 'to_address': '1donutMH4L7kdRqh4xvSvesfd3KFu3UNm', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000002faf080', 'currency_str': 'Mastercoin', 'formatted_amount': '0.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '05', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'c0ec94d6154edfa1dc250237693b74cf282695bb08042dfa6f35d5c7dfae5890', 'to_address': '13RgJNX9L8CfbFAuBdaoVWGDbhprFEYQeS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000008f0d180', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '19', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'cdfd4bbf985eefd5139cc23ce367b6a7a7fef0b2d3f1f72baf86ef3b37b61398', 'to_address': '1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '8f', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'f17d988c49732a1bb9f3022a4bb9f08daa256f7ad0a56ff1d517f49f278a09e3', 'to_address': '1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000077359400', 'currency_str': 'Mastercoin', 'formatted_amount': '20.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b5', 'transactionType': '00000000'} -[I] main: {'tx_hash': '1bce28bd47ae7622b16acf7736f18d4d83fd48eb7a61f796c08aeae1a8e3709c', 'to_address': '1donutMH4L7kdRqh4xvSvesfd3KFu3UNm', 'from_address': '194iAz9vJw6tXbxpVZ22YWaYyWDL1QCBDz', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000002faf080', 'currency_str': 'Test Mastercoin', 'formatted_amount': '0.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '05', 'transactionType': '00000000'} -[I] main: {'tx_hash': '7d4eea4e30000701c730a06ba1212299a8b7be166202861f16eecb18086cb5bb', 'to_address': '13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000002faf080', 'currency_str': 'Test Mastercoin', 'formatted_amount': '0.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1e', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'a2421fa6c90e253bcf6d2a3e7cb7740fbabb2bee51b5d07031ad1935b4990a19', 'to_address': '1donutMH4L7kdRqh4xvSvesfd3KFu3UNm', 'from_address': '17uK6u4nTbWv3h6WNKg7ejxmgXvy4qebBY', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000002faf080', 'currency_str': 'Test Mastercoin', 'formatted_amount': '0.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '05', 'transactionType': '00000000'} -[I] main: {'tx_hash': '4452003746886e1517da78419f39a8403b5896567ceb94ba0851dc1411fa637e', 'to_address': '18jx6UYhAWkVtN5Wzo24Mn5C4rugB1fZ6r', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '53', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'f993be9813e409ee1ce42b14c444af65b789350abe412fd2f8a289082b7b4870', 'to_address': '13RgJNX9L8CfbFAuBdaoVWGDbhprFEYQeS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000008f0d180', 'currency_str': 'Mastercoin', 'formatted_amount': '1.5', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '19', 'transactionType': '00000000'} -[I] main: {'tx_hash': '75a33ab549f1980b2a10bd8b5641e01094dcfeaf5a116a82bdd48a4bb3c5c02d', 'to_address': '1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '8f', 'transactionType': '00000000'} -[I] main: {'tx_hash': '4cad027f03f984d7745c077820617318c7553a90ca64be56e78217fc18cf4ea5', 'to_address': '1F73UPD5xBKgTSRd8q6QhuncVmDnJAHxYV', 'from_address': '1Eo6FGPytuYvuA3ZS6ToXqP8sScWWtKhWN', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000007bfa480', 'currency_str': 'Mastercoin', 'formatted_amount': '1.3', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '99', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b41a3d09c00275277eeda5ebf055162917d477382d68adb12a371248a3d93563', 'to_address': '1F73UPD5xBKgTSRd8q6QhuncVmDnJAHxYV', 'from_address': '1K5Tofy7UTfcrpWBnXcJhHZzvLTksDdasQ', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000a21fe80', 'currency_str': 'Mastercoin', 'formatted_amount': '1.7', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '99', 'transactionType': '00000000'} -[I] main: {'tx_hash': '3d76acd8fc18d2f6e23af9a222da1c1e527cbf3faa1943c5f2571be7c3066e0b', 'to_address': '1G4YZM9sAMPGeqtkFUrudwpxE3tiMwgciF', 'from_address': '1JtKKhttfKUkzung3cm7apkLkJDPdidrxB', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a4', 'transactionType': '00000000'} -[I] main: {'tx_hash': '4ef7f1ff9b16e23ae34a9d05fa0d329e0d59108a33036e162d80ffe0d449a512', 'to_address': '13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '19', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'e1668c41f528bfef706bbad6667fcdab14c374f4739a2f961107b25c02bc8a7f', 'to_address': '182osbPxCo88oaSX4ReJwUr9uAcchmJVaL', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '4c', 'transactionType': '00000000'} -[I] main: {'tx_hash': '37ecb5f61fe5c8f28e4a1d1abe22cfcfbaac42e8afe37e8a70e4ba8ef1bce31f', 'to_address': '159Pn4dRb4EoXK71hkPCDhHreS5uHaZT45', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '2c', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b0996170e5d962bbbe4784af5b5c43e1aed39ad44b3ad1f598f75314abefd7d3', 'to_address': '1NiCDUBW8ma86gQgySACKhg2jhXb7g6zs5', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'ed', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'e8621b811a027ca439954755bdcbfb40b5e9f9ec712f9da565a302d1916307e2', 'to_address': '159Pn4dRb4EoXK71hkPCDhHreS5uHaZT45', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '2c', 'transactionType': '00000000'} -[I] main: {'tx_hash': '350bf468281819d264ca71dcda8f977f6c4d7894a4962d24d94ffda206be07d2', 'to_address': '1FLXLaTuocNFDsar1VUp2gZJAG8JvdUbKE', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '9c', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'cf222b0b84c5af27c7ce6aa93c71d25faa38f4c09f5e65583f34c308d495781c', 'to_address': '14KuX323cXtr8b9VmSBLETpXbbqczCrm32', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '23', 'transactionType': '00000000'} -[I] main: {'tx_hash': '00e20f7db8ed7a505e4b4d586afade906a2038657cc808226770ebde872069ff', 'to_address': '19SbxtTYK8gXX7TrSdZUgWxF3ePWJ8QfTS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '5b', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'fb30e4ffadc060c45dbef99b7942df9ceed372df1ee2bf7f996064728ba2b2ce', 'to_address': '13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '19', 'transactionType': '00000000'} -[I] main: {'tx_hash': '446e011d14e773b1ec67c3c6df077ea5ea6ca3668a9e48e16199d41f68345754', 'to_address': '16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '3a', 'transactionType': '00000000'} -[I] main: {'tx_hash': '95e480b146d635dc784527ef64eda85ad6ce0f27daf743161903537353def0cb', 'to_address': '182osbPxCo88oaSX4ReJwUr9uAcchmJVaL', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '4c', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'e76413a0e9f0078db58b37fa49f06b6967246bd5b28d34d37f7ebac7352ba6b0', 'to_address': '14KuX323cXtr8b9VmSBLETpXbbqczCrm32', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '23', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'bb74fd06c0cada0e37ece4acaf75f8cb116a22c212f64892b3a64894a791abf2', 'to_address': '1NiCDUBW8ma86gQgySACKhg2jhXb7g6zs5', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'ed', 'transactionType': '00000000'} -[I] main: {'tx_hash': '8b9339de88689c4dd6f1df78ac2a10b77c12890b587f347ad8ee94bb9994a526', 'to_address': '19SbxtTYK8gXX7TrSdZUgWxF3ePWJ8QfTS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '5b', 'transactionType': '00000000'} -[I] main: {'tx_hash': '982d5bb815cbb9a3ee0636508082ad9791027c5737d734ea2afc83901cbe3d9a', 'to_address': '1FLXLaTuocNFDsar1VUp2gZJAG8JvdUbKE', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Test Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '9c', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'bf753408c297bc2e56349e5a0e0c3fa1aeec5ecf3959b48f135d44c30c5f059c', 'to_address': '16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '3a', 'transactionType': '00000000'} -[I] main: {'tx_hash': '14d53b0de3e3decbe933e11a62c82adbf5cc72fbf7a48c691ebb9a88dc61ca46', 'to_address': '15YBbo5d8wwVs8uTr6w26uyRSZHe8UF1Cf', 'from_address': '1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000004a817c800', 'currency_str': 'Test Mastercoin', 'formatted_amount': '200.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '30', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b247d3ef106a5dfae7a8f4f0176d8d3b7c1b85fe3db719ba8dd5628a9264c39b', 'to_address': '1QF9Hag3nyjAcXRd6mFrL5KyM3r71hVu2T', 'from_address': '12bDX26J84x545pzfSZouULeqjfBtAe9Lv', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000174876e800', 'currency_str': 'Mastercoin', 'formatted_amount': '1000.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'fd', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'c9d247125c63a85ae7539abc5a6dd1e445abbe2321d2f0ee03501e80185d86e3', 'to_address': '1ApWmGDViVjTPqRKBhPydpBZ5DRjpuEEic', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '6a', 'transactionType': '00000000'} -[I] main: {'tx_hash': '4d51dea4eda8b37c8117b1673e346c4e881e75752bb898057630cab04813f844', 'to_address': '1FvkyeSFGazKH8rGZUzqmNHbXJvWoAtMzv', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a2', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'f735c3aeadf9ad8f4037515f7c8d9f87a12eeba831a05d45bc56db0793ccc1b1', 'to_address': '1ApWmGDViVjTPqRKBhPydpBZ5DRjpuEEic', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '6a', 'transactionType': '00000000'} -[I] main: {'tx_hash': '8af0e02004fa06bf51e3375d72e9dc94f14831d171c143ac05367fa6289a253a', 'to_address': '1FvkyeSFGazKH8rGZUzqmNHbXJvWoAtMzv', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a2', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'a0e5e09d3053e3a9497422b337451cf690ffda789bf59fd2361554e538a989c0', 'to_address': '1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000001dcd6500', 'currency_str': 'Mastercoin', 'formatted_amount': '5.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'cc', 'transactionType': '00000000'} -[I] main: {'tx_hash': '9104b92920624a69efe99acffc7dbd5c2f2bc697e902cb78951453ecd53a455b', 'to_address': '1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000001dcd6500', 'currency_str': 'Test Mastercoin', 'formatted_amount': '5.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'cc', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b2f7d89292ec531679a306420fec30ca0915e9f4605e6e5776a4b94f6dc107ba', 'to_address': '1EYe3HxCA9txmN9pfEADctC7v69wi3TbMC', 'from_address': '1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000012a05f200', 'currency_str': 'Mastercoin', 'formatted_amount': '50.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '93', 'transactionType': '00000000'} -[I] main: {'tx_hash': '59ce0f0d8375eebafb9186c8776992999d2506b618388d7f172494019b335403', 'to_address': '16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '3a', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'e1914a68998714483b6ec1031d371cd6fe0aafb702f03fa961db9b48533dbcbf', 'to_address': '1HrMBZwe3X1YTKcEKds3bSebHsfb5c3spn', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b7', 'transactionType': '00000000'} -[I] main: {'tx_hash': '663b8ad00967310debdcd6aed8817c5ac88353932cf7066b9994b8ce6de11b61', 'to_address': '1LjT88X7Zu8BdbqJw8vfRa83NJuzYL9kqm', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'd7', 'transactionType': '00000000'} -[I] main: {'tx_hash': '4f5b0c2e0b8e3bf212b79266ed0e0301acaa35f26922570303fb62b0be9419fc', 'to_address': '1LjT88X7Zu8BdbqJw8vfRa83NJuzYL9kqm', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'd7', 'transactionType': '00000000'} -[I] main: {'tx_hash': '675861290481bfb3746d5bea06ffbabfc9da1ae27a787e027a44506257381dcf', 'to_address': '1HMGA2Jj2q4xV8uefkHEWa9sewmDcYxzj9', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b2', 'transactionType': '00000000'} -[I] main: {'tx_hash': '0a2397f5dd5bc41b63ac40c7723df281464cead91c30850c4cc2e66fed4bdca7', 'to_address': '1HrMBZwe3X1YTKcEKds3bSebHsfb5c3spn', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b7', 'transactionType': '00000000'} -[I] main: {'tx_hash': '1f7af6728db700e91006f9bd12eca523ed9febf363c76762945074ffdfd00c38', 'to_address': '1HMGA2Jj2q4xV8uefkHEWa9sewmDcYxzj9', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b2', 'transactionType': '00000000'} -[I] main: {'tx_hash': '2b54aaf5e3909f2f0fc9ed1dc3d2d842000b35049834fd929c4ed320baad8f41', 'to_address': '16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '3a', 'transactionType': '00000000'} -[I] main: {'tx_hash': '751666a4c40049a09c6f1f1255c0eeca28a0a12c1572689f4617bd6a0c83f1c3', 'to_address': '17QPQqf2W99ttqJsqqDN1HKAncVkcsCqBB', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '45', 'transactionType': '00000000'} -[I] main: {'tx_hash': '42c7be8a7b3478dac1752619dcb0ae16028669556027200d6ab2f2a54c45c4ce', 'to_address': '1Efx4hma49sLvJCCLFbSAvBB2yCuoh7Kmk', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '94', 'transactionType': '00000000'} -[I] main: {'tx_hash': '64d54b92fbfacf733628e66ccdbc8c1473233e8bac14d6d6cd6fc304128ddd50', 'to_address': '1Efx4hma49sLvJCCLFbSAvBB2yCuoh7Kmk', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '94', 'transactionType': '00000000'} -[I] main: {'tx_hash': '0f1211e316a3189cf90a4546018c0d6147cba64f7c63f278666718e7c88a8b81', 'to_address': '17QPQqf2W99ttqJsqqDN1HKAncVkcsCqBB', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '45', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b955b72ce2475015ab6fe7f0507a4d17d1092645ab37a2cb264d0704aaf2074a', 'to_address': '12LSJoCAqvVQyvW5qaKGp6ZKMaaZpUcCv3', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000011e1a300', 'currency_str': 'Mastercoin', 'formatted_amount': '3.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '0d', 'transactionType': '00000000'} -[I] main: {'tx_hash': '3ba2de9d507e4a9ca7773f1b677fb54b3f0f10e9148a6232d7656357d622bdf7', 'to_address': '14LFF8JV37Bgbwog1sR1qosZTS4Xd47Bi7', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '23', 'transactionType': '00000000'} -[I] main: {'tx_hash': '733121f6ea97029ac5256467d634ec38c253396b5285859c0e8be2f0c227e4d2', 'to_address': '14LFF8JV37Bgbwog1sR1qosZTS4Xd47Bi7', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '23', 'transactionType': '00000000'} -[I] main: {'tx_hash': '81a83be1d6afeb9c5de26eb40ea57bd00fef208456262cb2f9c349796e9ab5e1', 'to_address': '12LSJoCAqvVQyvW5qaKGp6ZKMaaZpUcCv3', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000011e1a300', 'currency_str': 'Test Mastercoin', 'formatted_amount': '3.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '0d', 'transactionType': '00000000'} -[I] main: {'tx_hash': '841a75434e12063cd557723ce6f66ccf5c05c44d91487f2da7027dd4bf637933', 'to_address': '13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000011e1a300', 'currency_str': 'Mastercoin', 'formatted_amount': '3.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1e', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'c3e0a88e2e108ab909c9f8979bd58269dc42617df93bfb27085a9caf00122503', 'to_address': '13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000011e1a300', 'currency_str': 'Test Mastercoin', 'formatted_amount': '3.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1e', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'bd28b0f3f97687d772ef9b8e01db71f838a15599511ab6602e6ea213f46e413d', 'to_address': '1MAAVAiL2fEc4zkeYVS32X3zDZh2bv3v6o', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'dc', 'transactionType': '00000000'} -[I] main: {'tx_hash': '6f3946e9128714b6e13eab45576dc8e4aefc8a007244ded55a552d593d8db6c5', 'to_address': '1MAAVAiL2fEc4zkeYVS32X3zDZh2bv3v6o', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000bebc200', 'currency_str': 'Test Mastercoin', 'formatted_amount': '2.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'dc', 'transactionType': '00000000'} -[I] main: {'tx_hash': '52511adaf3f3272ba3855159b32d94201b5d52cb83dc5b114367f0e5bc5c77a9', 'to_address': '17QqwZtZ221Dod33bY33SAZMXrSmi89rsP', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Test Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '45', 'transactionType': '00000000'} -[I] main: {'tx_hash': '0a5a884f0b603a526aa38bf64a1d759ae23b0deb4d4b8c6206c7d928647f418a', 'to_address': '1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Test Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'c5', 'transactionType': '00000000'} -[I] main: {'tx_hash': '59d89fd3e14695ce7f15ca36641787304b3e173d4d9be70388c4abffe5264628', 'to_address': '1Bitcoin4yZjSSPoXUceJaiyQLABx7B2LL', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '74', 'transactionType': '00000000'} -[I] main: {'tx_hash': '2d3e12804bf1858cddc6ceaf83a5a416092081f41ce155dd5e97110cd9e57361', 'to_address': '1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'c5', 'transactionType': '00000000'} -[I] main: {'tx_hash': '351e8155e17204e4e649493cf29d8380c34612e9dbdd17a5264402d497b9c1b0', 'to_address': '1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000059682f00', 'currency_str': 'Test Mastercoin', 'formatted_amount': '15.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a9', 'transactionType': '00000000'} -[I] main: {'tx_hash': '9073a843864d7ee587de966a7b3f4879a78dcce04d0e753447e5dd1fbabf5288', 'to_address': '1Bitcoin4yZjSSPoXUceJaiyQLABx7B2LL', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '74', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'aa217f8d174f9aa7abf6e92e39411b6a411ed0ac3d26474d29f1ae3838149529', 'to_address': '17QqwZtZ221Dod33bY33SAZMXrSmi89rsP', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '45', 'transactionType': '00000000'} -[I] main: {'tx_hash': '54ed989d316b055893bb5b1f9ec2cd8955f8071ae897bd497bf5f62949ebdc11', 'to_address': '1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000059682f00', 'currency_str': 'Mastercoin', 'formatted_amount': '15.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a9', 'transactionType': '00000000'} -[I] main: {'tx_hash': '4e232cb7bbab8fb97e59cde186ba3b99cf415259dccd2e05b8701e169deb87d6', 'to_address': '13x2dka6tVhjsNNNomGJjUPi2iJQCb67bw', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1f', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'd50f0403a260a2363b059a2ccf462b88771d15044991022668f1b931cf68d14f', 'to_address': '13x2dka6tVhjsNNNomGJjUPi2iJQCb67bw', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Test Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '1f', 'transactionType': '00000000'} -[I] main: {'tx_hash': '5ef36e97bf49bd0e71abc5b7f393d17ca0206da46420025a6189189446c6290e', 'to_address': '1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Test Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '8f', 'transactionType': '00000000'} -[I] main: {'tx_hash': '8c52e67a32d97fea3f254e945151526607d3acedfcd987b975fb3db67764b6f7', 'to_address': '1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M', 'from_address': '15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '8f', 'transactionType': '00000000'} -[I] main: {'tx_hash': '2d69ad4c5ec9380b2da89c06ef9fd263755d70f9fe7fe0774fe8c8a2494938ee', 'to_address': '1EYe3HxCA9txmN9pfEADctC7v69wi3TbMC', 'from_address': '12bDX26J84x545pzfSZouULeqjfBtAe9Lv', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000005d21dba00', 'currency_str': 'Mastercoin', 'formatted_amount': '250.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '93', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'd9b69dddefcbec474a8d21fca1f03ac9212644444e6b99a95274a27b57f43b9d', 'to_address': '15kdS3VWymze6T2svRz4wHJJqfonuxyy12', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000002540be400', 'currency_str': 'Mastercoin', 'formatted_amount': '100.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '33', 'transactionType': '00000000'} -[I] main: {'tx_hash': '3cfdb48089b6c2dd2b686d127211c50c202404e6db14314b9e7d711a745c3368', 'to_address': '1PA8qhEzW7to6EeqBAdhVZYGbVj2MfmN2n', 'from_address': '1GD6YyXnd7DKvfUKs22Fp3FSGuvK6n4F4j', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'f2', 'transactionType': '00000000'} -[I] main: {'tx_hash': '33eff43939ca1a7e1637df4b0df89e8dd7b94189105af80bc2751f0073bc10a0', 'to_address': '1Q1jZbrHQEgChcow72Nc64jMNwrJZcgtY6', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'fb', 'transactionType': '00000000'} -[I] main: {'tx_hash': '3afdb892207d23a430bbd62210b7f91265ea44fe94b6671bf139c053d74762ed', 'to_address': '1Q1jZbrHQEgChcow72Nc64jMNwrJZcgtY6', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000046c7cfe00', 'currency_str': 'Mastercoin', 'formatted_amount': '190.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'fb', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'a26f9b83b343070cc9786c07a1b71735cb35ab706b61132b75f9c6eb056a04e4', 'to_address': '1G1Sxb6ZEVhayXxE7cqGYFHsi6VaDpReCv', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000000cf52a560', 'currency_str': 'Mastercoin', 'formatted_amount': '34.783', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a3', 'transactionType': '00000000'} -[I] main: {'tx_hash': '9636ba2b04db72f55317976fb2528df4b5dd3d40e9b77ab06982bab757dc2672', 'to_address': '1FHeSUEyJ1BCaihT7tdcMdxWv9qxmRfAmh', 'from_address': '17UDyggWFP6T3tUPTUEHMU8gxRtLZHG322', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000005f5e100', 'currency_str': 'Mastercoin', 'formatted_amount': '1.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '9b', 'transactionType': '00000000'} -[I] main: {'tx_hash': '979ed23186f3f9b7ef31e4474ed61726fb2e1fde6de0b8c4564ad0d4d72c82f3', 'to_address': '1MBrNtFBw9QQ1owGsTs6Nd1iL1Err2H4yp', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000004a817c800', 'currency_str': 'Mastercoin', 'formatted_amount': '200.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'dc', 'transactionType': '00000000'} -[I] main: {'tx_hash': '91bcc7e12c4432319539fd176a66f2e11eb62b54f85314bf830c6fa38e7b501a', 'to_address': '1JYUYamFSM9ZmZhBX5C4KVFHncbW8iazzk', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000525433d00', 'currency_str': 'Mastercoin', 'formatted_amount': '221.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'bf', 'transactionType': '00000000'} -[I] main: {'tx_hash': '484b346f91979b40888ed76833cf732e165f3a527973eb4450f7d9d4fac3d744', 'to_address': '1EE6uNu64JJqjWeH5FKgqHRSRj1RFqbMNt', 'from_address': '1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '90', 'transactionType': '00000000'} -[I] main: {'tx_hash': '3dcdf1a51ad844ef305a95a08d57e8f2027125bcf982cc0ae6767d0d629b5648', 'to_address': '1MCHESTbJhJK27Ygqj4qKkx4Z4ZxhnP826', 'from_address': '1EH6soPNYAnDNGZVq1VGnDdxDPJXJLEFnp', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'dc', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'f15064a8637dfd28cc44338c96ce07675d947fab33545f999ecad3c37627aac4', 'to_address': '1MCHESTbJhJK27Ygqj4qKkx4Z4ZxhnP826', 'from_address': '14hA64E6gmJT27YN1Wozk24ZjSL985ioRb', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Test Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'dc', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b9625b6d8525697f7a9c949b33a556127b418f6254ac06175e9485e1c2a2e783', 'to_address': '1MCHESTbJhJK27Ygqj4qKkx4Z4ZxhnP826', 'from_address': '12bDX26J84x545pzfSZouULeqjfBtAe9Lv', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'dc', 'transactionType': '00000000'} -[I] main: {'tx_hash': '1fb729442d318050cf3abe2ac8bf98d6e71c1bd41a7199220bc4acdff835241c', 'to_address': '1MCHESTbJhJK27Ygqj4qKkx4Z4ZxhnP826', 'from_address': '12bDX26J84x545pzfSZouULeqjfBtAe9Lv', 'currencyId': '00000002', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000003b9aca00', 'currency_str': 'Test Mastercoin', 'formatted_amount': '10.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'dc', 'transactionType': '00000000'} -[I] main: {'tx_hash': '9ce2bb5f7c9abd14bcfd58f2e122f34f997c9a77fe377e216750c20c128aa48c', 'to_address': '1CcJFxoEW5PUwesMVxGrq6kAPJ1TJsSVqq', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000012a05f200', 'currency_str': 'Mastercoin', 'formatted_amount': '50.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '7e', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'b46ef271d25ff586b9940ee7c3a97e80885ed878812e70ef1d9aef90460187c5', 'to_address': '1MVb3rhB18WZKvh2FgskhjmmoAhB7th3Y1', 'from_address': '1A14hK16TgHCYzyqHm2VNZDe8ShYuZ981x', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000029503f880', 'currency_str': 'Mastercoin', 'formatted_amount': '110.9', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'df', 'transactionType': '00000000'} -[I] main: {'tx_hash': '589d1c30445c57c72bbda71c22f835adbae1144e3c71d0d8bc3a59c71f62ebe4', 'to_address': '1CcJFxoEW5PUwesMVxGrq6kAPJ1TJsSVqq', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000002540be400', 'currency_str': 'Mastercoin', 'formatted_amount': '100.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '7e', 'transactionType': '00000000'} -[I] parse_multisig_long: not implemented -[I] main: None -[I] parse_multisig_long: not implemented -[I] main: None -[I] parse_multisig_long: not implemented -[I] main: None -[I] main: {'tx_hash': '4b10a6567d7dd5e86cde1f92e2aba68500be300ab121046e120b25eba0a78356', 'to_address': '1MSCXpZHRR9DJpGcnQT1Nr1VDcL25fXfbP', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000004a817c800', 'currency_str': 'Mastercoin', 'formatted_amount': '200.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'df', 'transactionType': '00000000'} -[I] parse_multisig_long: not implemented -[I] main: None -[I] parse_multisig_long: not implemented -[I] main: None -[I] main: {'tx_hash': '817bd9362ed94e0575993f249b968097a0ba5bdbe55af75c8d3eab08dfbf75d4', 'to_address': '1Pu6oCKuW1jmHr31haPprLiPtT4DicCPfB', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000012b385c620', 'currency_str': 'Mastercoin', 'formatted_amount': '803.213', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'fa', 'transactionType': '00000000'} -[I] main: {'tx_hash': '0822e607c27664e75cdd01853c2e70279774daf703e2b577782f581df1d8a65e', 'to_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'from_address': '1GD6YyXnd7DKvfUKs22Fp3FSGuvK6n4F4j', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000ba43b7400', 'currency_str': 'Mastercoin', 'formatted_amount': '500.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'b3', 'transactionType': '00000000'} -[I] main: {'tx_hash': '6f75969a1a9f53576e1f95496ee32618d1c4d76f21bf043e2c0b79ab6996c1bf', 'to_address': '1255GUS55xvs6rkiuEzgfT35jq4Kkk9gQL', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000002540be400', 'currency_str': 'Mastercoin', 'formatted_amount': '100.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '0a', 'transactionType': '00000000'} -[I] main: {'tx_hash': '70cf275252060d450510c9979bc7ce9a5f9f28d88b1f0416c5a82004a4baea21', 'to_address': '1MSCXpZHRR9DJpGcnQT1Nr1VDcL25fXfbP', 'from_address': '17t1avq2qk3R4Q3qzSZgjj1FihTgS5JgvY', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000ba43b7400', 'currency_str': 'Mastercoin', 'formatted_amount': '500.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'df', 'transactionType': '00000000'} -[I] parse_multisig_long: not implemented -[I] main: None -[I] parse_multisig_long: not implemented -[I] main: None -[I] main: {'tx_hash': 'e2b2fda56a88b2beca527973ff3a91f9225da55275183cf93e0bc245740dc8f9', 'to_address': '1GStibNbpqjg9Uzk1HhfkH75iU4qgND3w5', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000000e5d5e40', 'currency_str': 'Mastercoin', 'formatted_amount': '2.41', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a8', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'f6468b835d0c82d34d166fbeea0005151f0fcd9af78ffc8c15373bf1af44887f', 'to_address': '1K2qmHwxyZumsfWPWekrEwo62UzvxY6V9m', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000029c86940', 'currency_str': 'Mastercoin', 'formatted_amount': '7.01', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'c4', 'transactionType': '00000000'} -[I] main: {'tx_hash': '1120a8e3fb291a568957b246674c2355be0b1d2e4fb752edef3f7288aa0a9b9e', 'to_address': '17P14P4J5Mqg9CfdKLqeLGgW4izfPUEtTc', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '0000000002625a00', 'currency_str': 'Mastercoin', 'formatted_amount': '0.4', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '44', 'transactionType': '00000000'} -[I] main: {'tx_hash': '7fbdeaa708b2ab470f5ade97cc00485ea714870b5767c3bdc1c5c8865fcaa7a1', 'to_address': '1MKHeDsSGEsqoZCYLrRV2CQJv3ve8t5egU', 'from_address': '1MCHESTbJhJK27Ygqj4qKkx4Z4ZxhnP826', 'currencyId': '5e9cb1d6', 'padding': '74e23e', 'tx_method_str': 'basic', 'amount': 'cff0a3ba810fb4bf', 'currency_str': 'Unknown currency id 5e9cb1d6', 'formatted_amount': '1.49836559817e+11', 'tx_type_str': 'Unknown transaction type 84a40b98', 'baseCoin': '00', 'dataSequenceNum': 'dd', 'transactionType': '84a40b98'} -[I] main: {'tx_hash': '1aab458df274f2af34b98ea561912365ed12f4a51bd4467763cf70032499e9f4', 'to_address': '1Gy9bvCewiwjVEr6DoAvMgvvCcvoaA7rqo', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000001dcd6500', 'currency_str': 'Mastercoin', 'formatted_amount': '5.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'ae', 'transactionType': '00000000'} -[I] main: {'tx_hash': 'c0129e49a301c0573a71bedb4c53255b739e7ed832159b9c903515342b8a9998', 'to_address': '1FZ9VevcVXQseSAQPe3zuCzsWQavQpZo4g', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '000000001dcd6500', 'currency_str': 'Mastercoin', 'formatted_amount': '5.0', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': '9e', 'transactionType': '00000000'} -[I] parse_simple_basic: invalid mastercoin tx (different output values) fe12cbb37bf81f20feede134a00a31b8b51c568072b57ed480d9994e016830b7 -[I] main: None -[I] main: {'currency_type_str': 'Test Mastercoin', 'transaction_type_str': 'Simple send', 'currencyId': '00000002', 'transaction_method_str': 'multisig_simple', 'recipientAddress': '17RVTF3vJzsuaGh7a94DFkg4msJ7FcBYgX', 'padding': '000000', 'amount': '0000000000000003', 'changeAddress': '182osbPxCo88oaSX4ReJwUr9uAcchmJVaL', 'formatted_amount': '0.00000003', 'baseCoin': '00', 'dataSequenceNum': '45', 'transactionType': '00000000'} -[I] main: {'tx_hash': '98620de12d60dea300bf1141b3e6568ee31620e9585c773fe76beeeb70d14bd5', 'to_address': '1L4wxToBjRnox4C8pELbe131du1QCBB6ZT', 'from_address': '1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000000964b0960', 'currency_str': 'Mastercoin', 'formatted_amount': '25.215', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'd0', 'transactionType': - '00000000'} -[I] main: {'tx_hash': '573b3c5be2662b1b6ef127569f1d86fb6172d86a40b575831b8de81ce1b6afa9', 'to_address': '1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj', 'from_address': '1HpNa5GbsPRbJ1s931oNKGqgN5gVbBBE8s', 'currencyId': '00000001', 'padding': '000000', 'tx_method_str': 'basic', 'amount': '00000000c5460db3', 'currency_str': 'Mastercoin', 'formatted_amount': '33.09702579', 'tx_type_str': 'Simple send', 'baseCoin': '00', 'dataSequenceNum': 'a9', 'transactionType': -'00000000'} -[I] main: {'currency_type_str': 'Mastercoin', 'transaction_type_str': 'Simple send', 'currencyId': '00000001', 'transaction_method_str': 'multisig_simple', 'recipientAddress': '17RVTF3vJzsuaGh7a94DFkg4msJ7FcBYgX', 'padding': '000000', 'amount': '0000000002faf080', 'changeAddress': '182osbPxCo88oaSX4ReJwUr9uAcchmJVaL', 'formatted_amount': '0.50000000', 'baseCoin': '00', 'dataSequenceNum': '45', 'transactionType': '00000000'} diff --git a/outputs/tx_parse.csv b/outputs/tx_parse.csv deleted file mode 100644 index 0b6ba70..0000000 --- a/outputs/tx_parse.csv +++ /dev/null @@ -1,100 +0,0 @@ -ab4adf577b9b88b264347b734dfce9d399ed985f76ca7c913338ca144238d3b8,1KEr24zCxEwf4WAdwAQ8gy3grsXGfFPaGy,1Cu3gkevrm5bAJAWabwiWMWw8DsVujDbMD,1.0,Test Mastercoin,Simple send -63c7eb7032645344a362bf729fb05217156d6d5d7e610e4e1953485dd1892d1c,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Cu3gkevrm5bAJAWabwiWMWw8DsVujDbMD,1.0,Test Mastercoin,Simple send -9e0b6bb921ff60de42125bd75c80ba68ceab3c649882fbd15d6f5190ecda0737,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Cu3gkevrm5bAJAWabwiWMWw8DsVujDbMD,1.0,Mastercoin,Simple send -fa4486dc136fc8a741b69b015bfb6f1f7ca1898d4b6ce6c77b5d98ba59b6b1fb,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Ch5Cgoc5Yse5pVoP322QsrZfdo3xCwNbV,1.0,Mastercoin,Simple send -79fe07d288e1db4d4e06b101ca13dc9fb6a656edc27927a159d4f589bb823702,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Ch5Cgoc5Yse5pVoP322QsrZfdo3xCwNbV,1.0,Test Mastercoin,Simple send -16ae9fb54c0a333ad1cda5deefbb4ca75501f9b04b229e3d5d85a02d0a7a6b93,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1mcnAR4d5waaD1WaDfH1gU9BuGmCwNNMe,1.0,Mastercoin,Simple send -dfa827e4ddfa12ab05a18f5aace980eba23b1299c3c51080004600a04a9ca74b,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1mcnAR4d5waaD1WaDfH1gU9BuGmCwNNMe,1.0,Test Mastercoin,Simple send -dc5c346e1b7ee7de135a34eab255afc48e2d9092553f32c1a80030e0438b61ec,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n,2.0,Test Mastercoin,Simple send -bfadadcbf9e67eda7359d628645473ce7753d4048964d94340e4acfbbf15de5c,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n,2.0,Mastercoin,Simple send -546802255d4d07ff823cb935b02706563536606d3546e76e16bc945a9a2198af,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH,1.0,Mastercoin,Simple send -bfe12ea222779c5892b5e5fb127ce4e709867d3cf160b95b189ecf4e7e92fda5,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,162sRqqkQQ126riANMqK9e6gFt35eDCGyi,2.0,Mastercoin,Simple send -38f7a303cef730b8257684d9a2950f5e170c3d75cd81a6ef11250bff31ffb81f,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1AgZvwAoNDFGkQYEF193RAm3qxipWAEFAH,1.0,Test Mastercoin,Simple send -755c9a40f4b8b7558e571b832efdad05a81eba442cb25e81b638c0c69d38a12d,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,162sRqqkQQ126riANMqK9e6gFt35eDCGyi,2.0,Test Mastercoin,Simple send -a1633359d7264ceefd3557ca96798cff77e357a472c72be65cef9a729ab77ad9,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1FZ9VevcVXQseSAQPe3zuCzsWQavQpZo4g,1.0,Test Mastercoin,Simple send -3db59c2699a6ac17cc70b4501c358adec9de7f9460e5b107509c30b516e2573c,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1FZ9VevcVXQseSAQPe3zuCzsWQavQpZo4g,1.0,Mastercoin,Simple send -5ebd99c3c556df0cae23ba3918a651b37a614dd972ba215e56589133fa1148e5,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1JpVUU3VQjkYKSfot6PDQXs8un11Dg2ZZN,1.0,Mastercoin,Simple send -0f7e5512c969cce01cd061913b6ca67c894d81cb418e4346a7775d1d7a23f6b8,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1JpVUU3VQjkYKSfot6PDQXs8un11Dg2ZZN,1.0,Test Mastercoin,Simple send -183a85d19059557b2ae0aba3cf987943c83aaa79ec68d18aa261c9c6fcdb1fe6,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,158qYAqDu4GKeVHDiTYA2xAu5Ew4sEU2Ug,1.0,Mastercoin,Simple send -f90073ddf621e936f897b277325a6c09a9024d4e87ff6a42bdd0b0022edd04d0,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1MRBT5Fg5NuCpTY8xH1UGSgnYj41WKYPVc,2.0,Test Mastercoin,Simple send -19ae118dc686e532953457bf2258a84e49b238f521cdb2aa96466614b2a590a0,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,158qYAqDu4GKeVHDiTYA2xAu5Ew4sEU2Ug,1.0,Test Mastercoin,Simple send -2829192d5402664962255b191d79e14baa56a088ce731465a54fbb3b9c9527f3,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1MRBT5Fg5NuCpTY8xH1UGSgnYj41WKYPVc,2.0,Mastercoin,Simple send -85949f5d508249d0f0d80bb4e69fe7f096f0a640ec0078a23fbbcc8206965738,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HeU3RSvgvTCspVF2nq3U8p9tgs48fNStG,1.5,Test Mastercoin,Simple send -4b6e83e9a558a1949ac39a9aa274238ee793248548c642c085ebf11c4df05589,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HeU3RSvgvTCspVF2nq3U8p9tgs48fNStG,1.5,Mastercoin,Simple send -0ce5e9eaa64e4aa0873720edc9b251d700cc9164e95396bbf995d84d49d48e67,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,1.0,Mastercoin,Simple send -e483f444e74d9fe6725b1ee3ea08990b3d83fca7ca4cea430719b7fa89f1c1d4,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,1.0,Test Mastercoin,Simple send -b91ebba6649df4ea6bc98d412238b8cecbfb75ce6f680ac8d37d15f1314f3c74,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,18jx6UYhAWkVtN5Wzo24Mn5C4rugB1fZ6r,2.0,Mastercoin,Simple send -012e60064d48dcf1757e69c0fcd5ef1c0fcaffe0b0ce0f953a25f13ea4bfeb25,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,0.5,Mastercoin,Simple send -c7447cf2a33617aed6ce7ff6778a6cc6107a66180f70c53639aaa5ee7db9a26a,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n,20.0,Test Mastercoin,Simple send -d10c50c7c12fe6cae4154610f38f1045ec08d10402c1b506bd9ec5fdf5f2f294,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1donutMH4L7kdRqh4xvSvesfd3KFu3UNm,0.5,Mastercoin,Simple send -c0ec94d6154edfa1dc250237693b74cf282695bb08042dfa6f35d5c7dfae5890,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13RgJNX9L8CfbFAuBdaoVWGDbhprFEYQeS,1.5,Test Mastercoin,Simple send -cdfd4bbf985eefd5139cc23ce367b6a7a7fef0b2d3f1f72baf86ef3b37b61398,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M,1.0,Mastercoin,Simple send -f17d988c49732a1bb9f3022a4bb9f08daa256f7ad0a56ff1d517f49f278a09e3,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HfXDX3ALapNebQC8stTdd5zK7kiCgvX9n,20.0,Mastercoin,Simple send -1bce28bd47ae7622b16acf7736f18d4d83fd48eb7a61f796c08aeae1a8e3709c,194iAz9vJw6tXbxpVZ22YWaYyWDL1QCBDz,1donutMH4L7kdRqh4xvSvesfd3KFu3UNm,0.5,Test Mastercoin,Simple send -7d4eea4e30000701c730a06ba1212299a8b7be166202861f16eecb18086cb5bb,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,0.5,Test Mastercoin,Simple send -a2421fa6c90e253bcf6d2a3e7cb7740fbabb2bee51b5d07031ad1935b4990a19,17uK6u4nTbWv3h6WNKg7ejxmgXvy4qebBY,1donutMH4L7kdRqh4xvSvesfd3KFu3UNm,0.5,Test Mastercoin,Simple send -4452003746886e1517da78419f39a8403b5896567ceb94ba0851dc1411fa637e,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,18jx6UYhAWkVtN5Wzo24Mn5C4rugB1fZ6r,2.0,Test Mastercoin,Simple send -f993be9813e409ee1ce42b14c444af65b789350abe412fd2f8a289082b7b4870,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13RgJNX9L8CfbFAuBdaoVWGDbhprFEYQeS,1.5,Mastercoin,Simple send -75a33ab549f1980b2a10bd8b5641e01094dcfeaf5a116a82bdd48a4bb3c5c02d,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M,1.0,Test Mastercoin,Simple send -4cad027f03f984d7745c077820617318c7553a90ca64be56e78217fc18cf4ea5,1Eo6FGPytuYvuA3ZS6ToXqP8sScWWtKhWN,1F73UPD5xBKgTSRd8q6QhuncVmDnJAHxYV,1.3,Mastercoin,Simple send -b41a3d09c00275277eeda5ebf055162917d477382d68adb12a371248a3d93563,1K5Tofy7UTfcrpWBnXcJhHZzvLTksDdasQ,1F73UPD5xBKgTSRd8q6QhuncVmDnJAHxYV,1.7,Mastercoin,Simple send -3d76acd8fc18d2f6e23af9a222da1c1e527cbf3faa1943c5f2571be7c3066e0b,1JtKKhttfKUkzung3cm7apkLkJDPdidrxB,1G4YZM9sAMPGeqtkFUrudwpxE3tiMwgciF,1.0,Mastercoin,Simple send -4ef7f1ff9b16e23ae34a9d05fa0d329e0d59108a33036e162d80ffe0d449a512,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH,1.0,Test Mastercoin,Simple send -e1668c41f528bfef706bbad6667fcdab14c374f4739a2f961107b25c02bc8a7f,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,182osbPxCo88oaSX4ReJwUr9uAcchmJVaL,2.0,Test Mastercoin,Simple send -37ecb5f61fe5c8f28e4a1d1abe22cfcfbaac42e8afe37e8a70e4ba8ef1bce31f,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,159Pn4dRb4EoXK71hkPCDhHreS5uHaZT45,2.0,Mastercoin,Simple send -b0996170e5d962bbbe4784af5b5c43e1aed39ad44b3ad1f598f75314abefd7d3,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1NiCDUBW8ma86gQgySACKhg2jhXb7g6zs5,1.0,Mastercoin,Simple send -e8621b811a027ca439954755bdcbfb40b5e9f9ec712f9da565a302d1916307e2,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,159Pn4dRb4EoXK71hkPCDhHreS5uHaZT45,2.0,Test Mastercoin,Simple send -350bf468281819d264ca71dcda8f977f6c4d7894a4962d24d94ffda206be07d2,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1FLXLaTuocNFDsar1VUp2gZJAG8JvdUbKE,10.0,Mastercoin,Simple send -cf222b0b84c5af27c7ce6aa93c71d25faa38f4c09f5e65583f34c308d495781c,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,14KuX323cXtr8b9VmSBLETpXbbqczCrm32,1.0,Test Mastercoin,Simple send -00e20f7db8ed7a505e4b4d586afade906a2038657cc808226770ebde872069ff,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,19SbxtTYK8gXX7TrSdZUgWxF3ePWJ8QfTS,2.0,Mastercoin,Simple send -fb30e4ffadc060c45dbef99b7942df9ceed372df1ee2bf7f996064728ba2b2ce,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13P8CSqRoboefrNsXKZieWYtZhJ4KcQHhH,1.0,Mastercoin,Simple send -446e011d14e773b1ec67c3c6df077ea5ea6ca3668a9e48e16199d41f68345754,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS,2.0,Mastercoin,Simple send -95e480b146d635dc784527ef64eda85ad6ce0f27daf743161903537353def0cb,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,182osbPxCo88oaSX4ReJwUr9uAcchmJVaL,2.0,Mastercoin,Simple send -e76413a0e9f0078db58b37fa49f06b6967246bd5b28d34d37f7ebac7352ba6b0,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,14KuX323cXtr8b9VmSBLETpXbbqczCrm32,1.0,Mastercoin,Simple send -bb74fd06c0cada0e37ece4acaf75f8cb116a22c212f64892b3a64894a791abf2,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1NiCDUBW8ma86gQgySACKhg2jhXb7g6zs5,1.0,Test Mastercoin,Simple send -8b9339de88689c4dd6f1df78ac2a10b77c12890b587f347ad8ee94bb9994a526,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,19SbxtTYK8gXX7TrSdZUgWxF3ePWJ8QfTS,2.0,Test Mastercoin,Simple send -982d5bb815cbb9a3ee0636508082ad9791027c5737d734ea2afc83901cbe3d9a,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1FLXLaTuocNFDsar1VUp2gZJAG8JvdUbKE,10.0,Test Mastercoin,Simple send -bf753408c297bc2e56349e5a0e0c3fa1aeec5ecf3959b48f135d44c30c5f059c,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS,2.0,Test Mastercoin,Simple send -14d53b0de3e3decbe933e11a62c82adbf5cc72fbf7a48c691ebb9a88dc61ca46,1Bqp4VEweM1S8FKGHWYviRRtSxv5tMAVih,15YBbo5d8wwVs8uTr6w26uyRSZHe8UF1Cf,200.0,Test Mastercoin,Simple send -b247d3ef106a5dfae7a8f4f0176d8d3b7c1b85fe3db719ba8dd5628a9264c39b,12bDX26J84x545pzfSZouULeqjfBtAe9Lv,1QF9Hag3nyjAcXRd6mFrL5KyM3r71hVu2T,1000.0,Mastercoin,Simple send -c9d247125c63a85ae7539abc5a6dd1e445abbe2321d2f0ee03501e80185d86e3,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1ApWmGDViVjTPqRKBhPydpBZ5DRjpuEEic,2.0,Test Mastercoin,Simple send -4d51dea4eda8b37c8117b1673e346c4e881e75752bb898057630cab04813f844,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1FvkyeSFGazKH8rGZUzqmNHbXJvWoAtMzv,1.0,Test Mastercoin,Simple send -f735c3aeadf9ad8f4037515f7c8d9f87a12eeba831a05d45bc56db0793ccc1b1,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1ApWmGDViVjTPqRKBhPydpBZ5DRjpuEEic,2.0,Mastercoin,Simple send -8af0e02004fa06bf51e3375d72e9dc94f14831d171c143ac05367fa6289a253a,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1FvkyeSFGazKH8rGZUzqmNHbXJvWoAtMzv,1.0,Mastercoin,Simple send -a0e5e09d3053e3a9497422b337451cf690ffda789bf59fd2361554e538a989c0,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f,5.0,Mastercoin,Simple send -9104b92920624a69efe99acffc7dbd5c2f2bc697e902cb78951453ecd53a455b,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Kk6eLpM3cpgC4NEzXLzjKvdndd8bPox6f,5.0,Test Mastercoin,Simple send -b2f7d89292ec531679a306420fec30ca0915e9f4605e6e5776a4b94f6dc107ba,1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,1EYe3HxCA9txmN9pfEADctC7v69wi3TbMC,50.0,Mastercoin,Simple send -59ce0f0d8375eebafb9186c8776992999d2506b618388d7f172494019b335403,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS,2.0,Mastercoin,Simple send -e1914a68998714483b6ec1031d371cd6fe0aafb702f03fa961db9b48533dbcbf,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HrMBZwe3X1YTKcEKds3bSebHsfb5c3spn,1.0,Test Mastercoin,Simple send -663b8ad00967310debdcd6aed8817c5ac88353932cf7066b9994b8ce6de11b61,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1LjT88X7Zu8BdbqJw8vfRa83NJuzYL9kqm,1.0,Test Mastercoin,Simple send -4f5b0c2e0b8e3bf212b79266ed0e0301acaa35f26922570303fb62b0be9419fc,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1LjT88X7Zu8BdbqJw8vfRa83NJuzYL9kqm,1.0,Mastercoin,Simple send -675861290481bfb3746d5bea06ffbabfc9da1ae27a787e027a44506257381dcf,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HMGA2Jj2q4xV8uefkHEWa9sewmDcYxzj9,2.0,Test Mastercoin,Simple send -0a2397f5dd5bc41b63ac40c7723df281464cead91c30850c4cc2e66fed4bdca7,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HrMBZwe3X1YTKcEKds3bSebHsfb5c3spn,1.0,Mastercoin,Simple send -1f7af6728db700e91006f9bd12eca523ed9febf363c76762945074ffdfd00c38,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1HMGA2Jj2q4xV8uefkHEWa9sewmDcYxzj9,2.0,Mastercoin,Simple send -2b54aaf5e3909f2f0fc9ed1dc3d2d842000b35049834fd929c4ed320baad8f41,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,16QkgycuGwFvwQ8oZ5cYHgVjDNSavcwovS,2.0,Test Mastercoin,Simple send -751666a4c40049a09c6f1f1255c0eeca28a0a12c1572689f4617bd6a0c83f1c3,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,17QPQqf2W99ttqJsqqDN1HKAncVkcsCqBB,1.0,Test Mastercoin,Simple send -42c7be8a7b3478dac1752619dcb0ae16028669556027200d6ab2f2a54c45c4ce,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Efx4hma49sLvJCCLFbSAvBB2yCuoh7Kmk,1.0,Mastercoin,Simple send -64d54b92fbfacf733628e66ccdbc8c1473233e8bac14d6d6cd6fc304128ddd50,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Efx4hma49sLvJCCLFbSAvBB2yCuoh7Kmk,1.0,Test Mastercoin,Simple send -0f1211e316a3189cf90a4546018c0d6147cba64f7c63f278666718e7c88a8b81,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,17QPQqf2W99ttqJsqqDN1HKAncVkcsCqBB,1.0,Mastercoin,Simple send -b955b72ce2475015ab6fe7f0507a4d17d1092645ab37a2cb264d0704aaf2074a,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,12LSJoCAqvVQyvW5qaKGp6ZKMaaZpUcCv3,3.0,Mastercoin,Simple send -3ba2de9d507e4a9ca7773f1b677fb54b3f0f10e9148a6232d7656357d622bdf7,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,14LFF8JV37Bgbwog1sR1qosZTS4Xd47Bi7,2.0,Mastercoin,Simple send -733121f6ea97029ac5256467d634ec38c253396b5285859c0e8be2f0c227e4d2,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,14LFF8JV37Bgbwog1sR1qosZTS4Xd47Bi7,2.0,Test Mastercoin,Simple send -81a83be1d6afeb9c5de26eb40ea57bd00fef208456262cb2f9c349796e9ab5e1,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,12LSJoCAqvVQyvW5qaKGp6ZKMaaZpUcCv3,3.0,Test Mastercoin,Simple send -841a75434e12063cd557723ce6f66ccf5c05c44d91487f2da7027dd4bf637933,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,3.0,Mastercoin,Simple send -c3e0a88e2e108ab909c9f8979bd58269dc42617df93bfb27085a9caf00122503,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13qJCzNQUx7dFcixjq9Rab7wPgUCtYS48v,3.0,Test Mastercoin,Simple send -bd28b0f3f97687d772ef9b8e01db71f838a15599511ab6602e6ea213f46e413d,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1MAAVAiL2fEc4zkeYVS32X3zDZh2bv3v6o,2.0,Mastercoin,Simple send -6f3946e9128714b6e13eab45576dc8e4aefc8a007244ded55a552d593d8db6c5,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1MAAVAiL2fEc4zkeYVS32X3zDZh2bv3v6o,2.0,Test Mastercoin,Simple send -52511adaf3f3272ba3855159b32d94201b5d52cb83dc5b114367f0e5bc5c77a9,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,17QqwZtZ221Dod33bY33SAZMXrSmi89rsP,10.0,Test Mastercoin,Simple send -0a5a884f0b603a526aa38bf64a1d759ae23b0deb4d4b8c6206c7d928647f418a,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD,10.0,Test Mastercoin,Simple send -59d89fd3e14695ce7f15ca36641787304b3e173d4d9be70388c4abffe5264628,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Bitcoin4yZjSSPoXUceJaiyQLABx7B2LL,1.0,Test Mastercoin,Simple send -2d3e12804bf1858cddc6ceaf83a5a416092081f41ce155dd5e97110cd9e57361,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1K5ZEkQ8Pzwqedg2WHsKQd3xiAGnj7MeCD,10.0,Mastercoin,Simple send -351e8155e17204e4e649493cf29d8380c34612e9dbdd17a5264402d497b9c1b0,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,15.0,Test Mastercoin,Simple send -9073a843864d7ee587de966a7b3f4879a78dcce04d0e753447e5dd1fbabf5288,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1Bitcoin4yZjSSPoXUceJaiyQLABx7B2LL,1.0,Mastercoin,Simple send -aa217f8d174f9aa7abf6e92e39411b6a411ed0ac3d26474d29f1ae3838149529,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,17QqwZtZ221Dod33bY33SAZMXrSmi89rsP,10.0,Mastercoin,Simple send -54ed989d316b055893bb5b1f9ec2cd8955f8071ae897bd497bf5f62949ebdc11,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1GaNupdUBzfVF2B3JUAY1rZwHoXJgjyzXj,15.0,Mastercoin,Simple send -4e232cb7bbab8fb97e59cde186ba3b99cf415259dccd2e05b8701e169deb87d6,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13x2dka6tVhjsNNNomGJjUPi2iJQCb67bw,10.0,Mastercoin,Simple send -d50f0403a260a2363b059a2ccf462b88771d15044991022668f1b931cf68d14f,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,13x2dka6tVhjsNNNomGJjUPi2iJQCb67bw,10.0,Test Mastercoin,Simple send -5ef36e97bf49bd0e71abc5b7f393d17ca0206da46420025a6189189446c6290e,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M,1.0,Test Mastercoin,Simple send -8c52e67a32d97fea3f254e945151526607d3acedfcd987b975fb3db67764b6f7,15og4WXZPwkMnnsb3dj6HqgTUfcRLx4J9b,1EByjy9e4FeGZuTV4Rx5hbf4PnFt7jGh8M,1.0,Mastercoin,Simple send -2d69ad4c5ec9380b2da89c06ef9fd263755d70f9fe7fe0774fe8c8a2494938ee,12bDX26J84x545pzfSZouULeqjfBtAe9Lv,1EYe3HxCA9txmN9pfEADctC7v69wi3TbMC,250.0,Mastercoin,Simple send -d9b69dddefcbec474a8d21fca1f03ac9212644444e6b99a95274a27b57f43b9d,1HRE7U9XNPD8kJBCwm5Q1VAepz25GBXnVk,15kdS3VWymze6T2svRz4wHJJqfonuxyy12,100.0,Mastercoin,Simple send diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..50b142a --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,278 @@ +# Smart property issuance scripts + +## Dependencies: + +You'll need python2.7.6 and a synced bitcoind node (Unlike the rest of mastercoin-tools which uses obelisk). + +## Setup: + +1. Make sure bitcoind is set up right. + + ``` +cmlacy@blockchain-2:~$ bitcoind getinfo + ``` + +2. Create ``~/.bitcoin/bitcoin.conf`` if it complains. + + ``` +server=1 +daemon=1 +rpcuser= +rpcpassword= +rpcallowip= + ``` + + Alternatively if you have a remote bitcoind instance you can use that as well. On the machine where you will run the scripts create ``~/.bitcoin/bitcoin.conf`` with the following lines: + + ``` +rpcuser= +rpcpassword= +rpcconnect= +rpcport= + ``` + + Dont' forget to add a whitelist entry (rpcallowip) to your remote bitcoind (or bitcoin-qt) for the ip address of the machine the scripts will run from. + +3. Install libraries + + ``` +cmlacy@blockchain-2:~$ sudo apt-get install python-pip +cmlacy@blockchain-2:~$ sudo pip install bitcoin-python pybitcointools + ``` + +4. Get these scripts + + ``` +cmlacy@blockchain-2:~$ clone mastercoin-tools +cmlacy@blockchain-2:~$ cd mastercoin-tools/scripts +cmlacy@blockchain-2:~$ cd mastercoin-tools/scripts + ``` + +## Creating a fixed-issuance smart property: + +1. Create .json file which describes the currency. Note: + ecosystem: 1=MSC, 2=TMSC + property_type: 1=Indivisible, 2=Divisible + previous_property_id: 0 if not amending an existing property. + previous_property_id: 0 if making a new property. + + ``` +{ + "transaction_type": 50, + "ecosystem": 2, + "property_type": 2, + "previous_property_id": 0, + "property_category": "Testing", + "property_subcategory": "Smart Property Test Sequence 1", + "property_name": "Doubloons", + "property_url": "https://docs.google.com/a/engine.co/spreadsheet/ccc?key=0Al4FhV693WqWdGNFRDhEMTFtaWNmcVNObFlVQmNOa1E&usp=drive_web#gid=0", + "property_data": "Test Issuing a new Currency", + "number_properties": 1000, + "transaction_from": "1GoTC332Lr9ycKerCP9n7Pnri8e3KPeDLR", + "from_private_key": "5K34DNVDzUQHFwGMdgF6tS8TE8poHXoYbNA9JT7feVdQGL4u67zS" +} + ``` + +2. Run the script with your .json file as input. + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat doubloons.json | python generateTX50_SP.py + ``` +3. It may return an error: + + ``` +{"status": "NOT OK", "fix": "bitcoind importprivkey 5K34DNVDzUQHFwGMdgF6tS8TE8poHXoYbN9JT7feVdQGL4u67zS imported_1397503463", "error": "Couldn't find address in wallet, please run 'fix' on the machine"} + ``` + In that case, run the command listed in “fix” to correct it, with “false” added at the end to suppress rescanning the blockchain: + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ bitcoind importprivkey 5K34DNVDzUQHFwGMdgF6tS8TE8poHXoYbN9JT7feVdQGL4u67zS imported_1397503463 false + ``` + +4. And run again: + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat doubloons.json | python generateTX50_SP.py + ``` + +5. This outputs the actual raw transaction in hex: + + ``` +{"rawtransaction": {"hex": "0100000001e604d2bbdec6071b4ca4f160629799f63bd198310e133920ec10cadc0aa5473d000000008c493046022100fedcf3465b9f348d869c886d86b8daf89cf78712c149ece5475c2be11d5d423c022100b404b1b29267e80c371bf34f70dd330234844f6cc54410d86fdc1434b9326409014104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1cffffffff067c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac44480000000000001976a914ad52e22ed4d2680504ed9da83de49194c79a02d188ac744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b7ffeca977e95e14e2eb032797719d0ebba2c07fbbe8298c4f138cf3fbfe611c2102cbe73cdd70750603842c54d64fdd926ace126d688954a9e33adc0119cdf9500a53ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b9f9fcd9a4703c6f70355a487d986fe2b003d1fe48d5cae2213b767b9f0ccb54210218fc5ccfdf8372472fb178423cd809b2826266209a911f88a4912973805a179753ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c210297f9bb89d9503791766407733edd01fd53915f4cf9877bf2b8bf60dddc84c77d2102ce468c241932479ca7f330909dfc5fccf2ef2b9a2cf2be7f8621250f03dbcc8553ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102c40a53b580dd3aff657f2b4d8229f36367f004d68adfa375c8e439f0a7a7e8092102010e97a73c8f178099968488006e69e78908b00bf23a016fda17702f2e39b90b53ae00000000", "complete": true}} + ``` + +6. Send the transaction by copying and pasting that hex string (without its quotes) as an argument to ``bitcoind sendrawtransaction`` + + ``` +bitcoind sendrawtransaction 0100000001e604d2bbdec6071b4ca4f160629799f63bd198310e133920ec10cadc0aa5473d000000008c493046022100fedcf3465b9f348d869c886d86b8daf89cf78712c149ece5475c2be11d5d423c022100b404b1b29267e80c371bf34f70dd330234844f6cc54410d86fdc1434b9326409014104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1cffffffff067c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac44480000000000001976a914ad52e22ed4d2680504ed9da83de49194c79a02d188ac744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b7ffeca977e95e14e2eb032797719d0ebba2c07fbbe8298c4f138cf3fbfe611c2102cbe73cdd70750603842c54d64fdd926ace126d688954a9e33adc0119cdf9500a53ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b9f9fcd9a4703c6f70355a487d986fe2b003d1fe48d5cae2213b767b9f0ccb54210218fc5ccfdf8372472fb178423cd809b2826266209a911f88a4912973805a179753ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c210297f9bb89d9503791766407733edd01fd53915f4cf9877bf2b8bf60dddc84c77d2102ce468c241932479ca7f330909dfc5fccf2ef2b9a2cf2be7f8621250f03dbcc8553ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102c40a53b580dd3aff657f2b4d8229f36367f004d68adfa375c8e439f0a7a7e8092102010e97a73c8f178099968488006e69e78908b00bf23a016fda17702f2e39b90b53ae00000000 +6e5c37b1d408faba6a028ed1ef4e9a753c3720ee2551fa93c6f87bd7e1afa3ac + ``` + +7. The output will be the transaction hash ID. Check http://blockchain.info to see the status of the transation. You can also find the transaction via blockchain.info's page for the issuing address. + +## Creating a variable-issuance crowdsale property: + +1. Create .json file which describes the currency. Note: + ecosystem: 1=MSC, 2=TMSC + previous_property_id: 0 if not amending an existing property. + currency_identifier desired: what you want these to be bought with. 1=MSC, 2=TMSC + number_properties: How many of this property buyers should get for each spent. + deadline: UNIX timestamp (UTC timezone) of the crowdsale end. See http://www.onlineconversion.com/unix_time.htm + ``` +{ + "transaction_type": 51, + "ecosystem": 2, + "property_type": 2, + "previous_property_id": 0, + "property_category": "Testing", + "property_subcategory": "Smart Property Test Sequence 1", + "property_name": "Ducats", + "property_url": "https://docs.google.com/a/engine.co/spreadsheet/ccc?key=0Al4FhV693WqWdDZ2R2tfakJKOGF4VThNSmNOTjR5YlE&usp=drive_web#gid=0", + "property_data": "Test issuing a new crowdsale", + "currency_identifier_desired": 2, + "number_properties": 10, + "deadline": 1397869200, + "earlybird_bonus": 0, + "percentage_for_issuer": 0, + "transaction_from": "1LBB97UAhyQjtJJwk71LvzijnZw7o29XRm", + "from_private_key": "5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ" +} + ``` + +2. Run the script with your .json file as input. + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat ducats.json | python generateTX51_SP.py + ``` +3. It may return an error: + + ``` +{"status": "NOT OK", "fix": "bitcoind importprivkey 5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ imported_1397611891", "error": "Couldn't find address in wallet, please run 'fix' on the machine"} + ``` + In that case, run the command listed in “fix” to correct it. + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ bitcoind importprivkey 5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ imported_1397611891 + ``` + +4. And run again: + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat ducats.json | python generateTX51_SP.py + ``` + +5. This outputs the actual raw transaction in hex: + + ``` +{"rawtransaction": {"hex": "0100000001e604d2bbdec6071b4ca4f160629799f63bd198310e133920ec10cadc0aa5473d000000008c493046022100fedcf3465b9f348d869c886d86b8daf89cf78712c149ece5475c2be11d5d423c022100b404b1b29267e80c371bf34f70dd330234844f6cc54410d86fdc1434b9326409014104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1cffffffff067c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac44480000000000001976a914ad52e22ed4d2680504ed9da83de49194c79a02d188ac744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b7ffeca977e95e14e2eb032797719d0ebba2c07fbbe8298c4f138cf3fbfe611c2102cbe73cdd70750603842c54d64fdd926ace126d688954a9e33adc0119cdf9500a53ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b9f9fcd9a4703c6f70355a487d986fe2b003d1fe48d5cae2213b767b9f0ccb54210218fc5ccfdf8372472fb178423cd809b2826266209a911f88a4912973805a179753ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c210297f9bb89d9503791766407733edd01fd53915f4cf9877bf2b8bf60dddc84c77d2102ce468c241932479ca7f330909dfc5fccf2ef2b9a2cf2be7f8621250f03dbcc8553ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102c40a53b580dd3aff657f2b4d8229f36367f004d68adfa375c8e439f0a7a7e8092102010e97a73c8f178099968488006e69e78908b00bf23a016fda17702f2e39b90b53ae00000000", "complete": true}} + ``` + +6. Send the transaction by copying and pasting that hex string (without its quotes) as an argument to ``bitcoind sendrawtransaction`` + + ``` +bitcoind sendrawtransaction 0100000001e604d2bbdec6071b4ca4f160629799f63bd198310e133920ec10cadc0aa5473d000000008c493046022100fedcf3465b9f348d869c886d86b8daf89cf78712c149ece5475c2be11d5d423c022100b404b1b29267e80c371bf34f70dd330234844f6cc54410d86fdc1434b9326409014104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1cffffffff067c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac44480000000000001976a914ad52e22ed4d2680504ed9da83de49194c79a02d188ac744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b7ffeca977e95e14e2eb032797719d0ebba2c07fbbe8298c4f138cf3fbfe611c2102cbe73cdd70750603842c54d64fdd926ace126d688954a9e33adc0119cdf9500a53ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b9f9fcd9a4703c6f70355a487d986fe2b003d1fe48d5cae2213b767b9f0ccb54210218fc5ccfdf8372472fb178423cd809b2826266209a911f88a4912973805a179753ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c210297f9bb89d9503791766407733edd01fd53915f4cf9877bf2b8bf60dddc84c77d2102ce468c241932479ca7f330909dfc5fccf2ef2b9a2cf2be7f8621250f03dbcc8553ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102c40a53b580dd3aff657f2b4d8229f36367f004d68adfa375c8e439f0a7a7e8092102010e97a73c8f178099968488006e69e78908b00bf23a016fda17702f2e39b90b53ae00000000 +6e5c37b1d408faba6a028ed1ef4e9a753c3720ee2551fa93c6f87bd7e1afa3ac + ``` + +7. The output will be the transaction hash ID. Check http://blockchain.info to see the status of the transation. You can also find the transaction via blockchain.info's page for the issuing address. + +## Manually closing a crowdsale + +1. Create .json file which describes the currency. Note: + property_id: the property ID of the property to cancel. + ``` +{ + "transaction_type": 53, + "property_id": 2147483658, + "transaction_from": "1LBB97UAhyQjtJJwk71LvzijnZw7o29XRm", + "from_private_key": "5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ" +} + ``` + +2. Run the script with your .json file as input. + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat cancel-ducats.json | python generateTX53_SP.py + ``` +3. It may return an error: + + ``` +{"status": "NOT OK", "fix": "bitcoind importprivkey 5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ imported_1397611891", "error": "Couldn't find address in wallet, please run 'fix' on the machine"} + ``` + In that case, run the command listed in “fix” to correct it. + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ bitcoind importprivkey 5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ imported_1397611891 + ``` + +4. And run again: + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat cancel-ducats.json | python generateTX53_SP.py + ``` + +5. This outputs the actual raw transaction in hex: + + ``` +False False True +{"rawtransaction": {"hex": "010000000153eeb76c1e21677c1e683a18755a8b567da626a0870dee8c7b5d18e70f0dc9ec010000008b483045022100f23b95a045a93429e602d02de2cccae010ad1eb1ed0639c7a9a162c10bcddd33022002d09cd7963a741c7d6636d0afa25bad47650d5857a6cffe28e8f3e80f1ba69d0141047905461a24edc485b6e4fd98a97cc4d12ea7c2e25c187c5f13e461d31e37e6c118a74add7cc146cadb0f3f1cf25cb503347706823f044b7682cd535035e8cc7affffffff037c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac683c0100000000001976a914d257038a962bd29a40268f939c91b69523ed17c888acf82a000000000000675141047905461a24edc485b6e4fd98a97cc4d12ea7c2e25c187c5f13e461d31e37e6c118a74add7cc146cadb0f3f1cf25cb503347706823f044b7682cd535035e8cc7a210281c10f942911b31414f489f86d5fd4d5cd44038e6776d8c4163b10a721acacdd52ae00000000", "complete": true}} + ``` + +6. Send the transaction by copying and pasting that hex string (without its quotes) as an argument to ``bitcoind sendrawtransaction`` + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ bitcoind sendrawtransaction 010000000153eeb76c1e21677c1e683a18755a8b567da626a0870dee8c7b5d18e70f0dc9ec010000008b483045022100f23b95a045a93429e602d02de2cccae010ad1eb1ed0639c7a9a162c10bcddd33022002d09cd7963a741c7d6636d0afa25bad47650d5857a6cffe28e8f3e80f1ba69d0141047905461a24edc485b6e4fd98a97cc4d12ea7c2e25c187c5f13e461d31e37e6c118a74add7cc146cadb0f3f1cf25cb503347706823f044b7682cd535035e8cc7affffffff037c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac683c0100000000001976a914d257038a962bd29a40268f939c91b69523ed17c888acf82a000000000000675141047905461a24edc485b6e4fd98a97cc4d12ea7c2e25c187c5f13e461d31e37e6c118a74add7cc146cadb0f3f1cf25cb503347706823f044b7682cd535035e8cc7a210281c10f942911b31414f489f86d5fd4d5cd44038e6776d8c4163b10a721acacdd52ae00000000 + ``` + +7. The output will be the transaction hash ID. Check http://blockchain.info to see the status of the transaction. You can also find the transaction via blockchain.info's page for the issuing address. + + + +## Redeeming your escrow funds: +The master protocol works by encoding its data on the blockchain using escrow funds, so each transaction can take a little bit of bitcoin and lock it away in escrow until you redeem it. In most cases, this will be negligible, but people who make many trades, or are testing, may find an excessive amount of their bitcoin inaccessible over time. Use the ``redeemMultiSig.py`` script to unlock this money and get it back. + +1. Create .json file whichdefines the address to redeem, and where to send the money. + ``` +{ + "transaction_to": "1LBB97UAhyQjtJJwk71LvzijnZw7o29XRm", + "transaction_from": "1LBB97UAhyQjtJJwk71LvzijnZw7o29XRm", + "from_private_key": "5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ", + "fee": 0.0001 +} + ``` + +2. Run the script with your .json file as input. + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat redeem-escrows.json | python redeemMultiSig.py + ``` +3. It may return an error: + + ``` +{"status": "NOT OK", "fix": "bitcoind importprivkey 5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ imported_1397611891", "error": "Couldn't find address in wallet, please run 'fix' on the machine"} + ``` + In that case, run the command listed in “fix” to correct it. + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ bitcoind importprivkey 5J6TFQ2ULGHErgFX23qeBQVeragqqjTwdnLcFpCLpKp5HFagWEZ imported_1397611891 + ``` + +4. And run again: + + ``` +cmlacy@blockchain-2:~/mastercoin-tools/scripts$ cat redeem-escrows.json | python redeemMultiSig.py + ``` + +5. This outputs the actual raw transaction in hex: + + ``` +{"rawtransaction": {"hex": "0100000001e604d2bbdec6071b4ca4f160629799f63bd198310e133920ec10cadc0aa5473d000000008c493046022100fedcf3465b9f348d869c886d86b8daf89cf78712c149ece5475c2be11d5d423c022100b404b1b29267e80c371bf34f70dd330234844f6cc54410d86fdc1434b9326409014104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1cffffffff067c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac44480000000000001976a914ad52e22ed4d2680504ed9da83de49194c79a02d188ac744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b7ffeca977e95e14e2eb032797719d0ebba2c07fbbe8298c4f138cf3fbfe611c2102cbe73cdd70750603842c54d64fdd926ace126d688954a9e33adc0119cdf9500a53ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b9f9fcd9a4703c6f70355a487d986fe2b003d1fe48d5cae2213b767b9f0ccb54210218fc5ccfdf8372472fb178423cd809b2826266209a911f88a4912973805a179753ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c210297f9bb89d9503791766407733edd01fd53915f4cf9877bf2b8bf60dddc84c77d2102ce468c241932479ca7f330909dfc5fccf2ef2b9a2cf2be7f8621250f03dbcc8553ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102c40a53b580dd3aff657f2b4d8229f36367f004d68adfa375c8e439f0a7a7e8092102010e97a73c8f178099968488006e69e78908b00bf23a016fda17702f2e39b90b53ae00000000", "complete": true}} + ``` + +6. Send the transaction by copying and pasting that hex string (without its quotes) as an argument to ``bitcoind sendrawtransaction`` + + ``` +bitcoind sendrawtransaction 0100000001e604d2bbdec6071b4ca4f160629799f63bd198310e133920ec10cadc0aa5473d000000008c493046022100fedcf3465b9f348d869c886d86b8daf89cf78712c149ece5475c2be11d5d423c022100b404b1b29267e80c371bf34f70dd330234844f6cc54410d86fdc1434b9326409014104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1cffffffff067c150000000000001976a914946cb2e08075bcbaf157e47bcb67eb2b2339d24288ac44480000000000001976a914ad52e22ed4d2680504ed9da83de49194c79a02d188ac744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b7ffeca977e95e14e2eb032797719d0ebba2c07fbbe8298c4f138cf3fbfe611c2102cbe73cdd70750603842c54d64fdd926ace126d688954a9e33adc0119cdf9500a53ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102b9f9fcd9a4703c6f70355a487d986fe2b003d1fe48d5cae2213b767b9f0ccb54210218fc5ccfdf8372472fb178423cd809b2826266209a911f88a4912973805a179753ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c210297f9bb89d9503791766407733edd01fd53915f4cf9877bf2b8bf60dddc84c77d2102ce468c241932479ca7f330909dfc5fccf2ef2b9a2cf2be7f8621250f03dbcc8553ae744000000000000089514104e1d72d21642d38252d08305a9f299a317d5f16a7ddf5b8d7aa686ca2d3476740dccd4d8348bf78bdded9998d037bb9fe1418edc5baccd902b76313d5f4b90d1c2102c40a53b580dd3aff657f2b4d8229f36367f004d68adfa375c8e439f0a7a7e8092102010e97a73c8f178099968488006e69e78908b00bf23a016fda17702f2e39b90b53ae00000000 +6e5c37b1d408faba6a028ed1ef4e9a753c3720ee2551fa93c6f87bd7e1afa3ac + ``` + +7. The output will be the transaction hash ID. Check http://blockchain.info to see the status of the transation. You can also find the transaction via blockchain.info's page for the issuing address. + + + diff --git a/scripts/example_send.json b/scripts/example_send.json new file mode 100644 index 0000000..da216bd --- /dev/null +++ b/scripts/example_send.json @@ -0,0 +1,10 @@ +{ + "transaction_from": "{{Public from Address}}", + "transaction_to": "{{Public to Address}}", + "currency_id": {{1 for MSC, 2 for TMSC}}, + "send_amt": {{amount to send}}, + "property_type": {{1 for indivisible currency, 2 for divisible (MSC/TMSC are type 2, Maidsafecoins are type 1)}}, + "from_private_key": "{{private key for signing}}", + "broadcast": {{2 to create, sign and broadcast, 1 to create and sign or 0 to just create}}, + "clean": {{0 -keep all tx files, 1 -remove intersigned tx, 2 -remove all unsigned, 3 -remove all}} +} diff --git a/scripts/generateTX50_SP.py b/scripts/generateTX50_SP.py new file mode 100644 index 0000000..eed3ee6 --- /dev/null +++ b/scripts/generateTX50_SP.py @@ -0,0 +1,423 @@ +#get balance +import sys +import json +import time +import random +import hashlib +import operator +import bitcoinrpc +import pybitcointools +import getpass +from decimal import * + + +if len(sys.argv) > 1 and "--force" not in sys.argv: + print "Takes a list of bitcoind options, addresses and a send amount and outputs a transaction in JSON \nUsage: cat generateTx.json | python generateTx.py\nRequires a fully-synced *local* bitcoind node" + exit() + +if "--force" in sys.argv: + #WARNING: '--force' WILL STEAL YOUR BITCOINS IF YOU DON KNOW WHAT YOU'RE DOING + force=True +else: + force=False + +JSON = sys.stdin.readlines() + +listOptions = json.loads(str(''.join(JSON))) + +#Python environment issue, Some hex encoding doesn't respect this value properly +#Use either 21 or 41 (change if first tx hex created is invalid) +HEXSPACE='21' + +#sort out whether using local or remote API +USER=getpass.getuser() + +#sort out whether using local or remote API +conn = bitcoinrpc.connect_to_local() +try: + conn.getblockcount() +except StandardError: + try: + with open('/home/'+USER+'/.bitcoin/bitcoin.conf') as fp: + RPCPORT="8332" + RPCHOST="localhost" + for line in fp: + #print line + if line.split('=')[0] == "rpcuser": + RPCUSER=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcpassword": + RPCPASS=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcconnect": + RPCHOST=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcport": + RPCPORT=line.split('=')[1].strip() + except IOError as e: + print "Unable to open conf file: ~/.bitcoin/bitcoin.conf" + exit() + try: + conn = bitcoinrpc.connect_to_remote(RPCUSER,RPCPASS,host=RPCHOST,port=RPCPORT,use_https=False) + except StandardError: + print json.dumps({ "status": "NOT OK", "error": "Can't connect to bitcoind" , "fix": "Check bitcoind or config: "+RPCUSER+" "+RPCPASS+" "+RPCHOST+" "+RPCPORT}) + exit() + +#check if private key provided produces correct address +address = pybitcointools.privkey_to_address(listOptions['from_private_key']) +if not address == listOptions['transaction_from'] and not force: + print json.dumps({ "status": "NOT OK", "error": "Private key does not produce same address as \'transaction from\'" , "fix": "Set \'force\' flag to proceed without address checks" }) + exit() + +#see if account has been added +account = conn.getaccount(listOptions['transaction_from']) +if account == "" and not force: + _time = str(int(time.time())) + private = listOptions['from_private_key'] + print json.dumps({ "status": "NOT OK", "error": "Couldn\'t find address in wallet, please run \'fix\' on the machine", "fix": "bitcoind importprivkey " + private + " imported_" + _time }) + +#calculate minimum unspent balance +available_balance = Decimal(0.0) + +unspent_tx = [] +for unspent in conn.listunspent(): + if unspent.address == listOptions['transaction_from']: + unspent_tx.append(unspent) +#get all unspent for our from_address + +for unspent in unspent_tx: + available_balance = unspent.amount + available_balance + +#check if minimum BTC balance is met +if available_balance < Decimal(0.00006*3) and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough funds" , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#generate public key of bitcoin address +validated = conn.validateaddress(listOptions['transaction_from']) +if 'pubkey' in validated.__dict__: + pubkey = validated.pubkey +elif not force: + print json.dumps({ "status": "NOT OK", "error": "from address is invalid or hasn't been used on the network" , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#find largest spendable input from UTXO +largest_spendable_input = { "txid": "", "amount": Decimal(0) } +for unspent in unspent_tx: + if unspent.amount > largest_spendable_input["amount"]: + largest_spendable_input = { "txid": unspent.txid, "amount": unspent.amount } + +#real stuff happens here: + +#build multisig data address +transaction_version = 0 +transaction_type = listOptions['transaction_type'] +ecosystem = listOptions['ecosystem'] +property_type = listOptions['property_type'] +previous_property_id = listOptions['previous_property_id'] +property_category = listOptions['property_category'] +property_subcategory = listOptions['property_subcategory'] +property_name = listOptions['property_name'] +property_url = listOptions['property_url'] +property_data = listOptions['property_data'] +number_properties = listOptions['number_properties'] * ( 100000000 if property_type is 2 else 1 ) + +#calculate bytes +tx_ver_bytes = hex(transaction_version)[2:].rjust(4,"0") # 2 bytes +tx_type_bytes = hex(transaction_type)[2:].rjust(4,"0") # 2 bytes +eco_bytes = hex(ecosystem)[2:].rjust(2,"0") # 1 byte +prop_type_bytes = hex(property_type)[2:].rjust(4,"0") # 2 bytes +prev_prop_id_bytes = hex(previous_property_id)[2:].rjust(8,"0") # 4 bytes +num_prop_bytes = hex(number_properties)[2:].rjust(16,"0") # 8 bytes +prop_cat_bytes = '' # var bytes +prop_subcat_bytes = '' # var bytes +prop_name_bytes = '' # var bytes +prop_url_bytes = '' # var bytes +prop_data_bytes = '' # var bytes + +for let in property_category: + prop_cat_bytes = prop_cat_bytes + hex(ord(let))[2:] +prop_cat_bytes = prop_cat_bytes + '00' + +for let in property_subcategory: + prop_subcat_bytes = prop_subcat_bytes + hex(ord(let))[2:] +prop_subcat_bytes = prop_subcat_bytes + '00' + +for let in property_name: + prop_name_bytes = prop_name_bytes + hex(ord(let))[2:] +prop_name_bytes = prop_name_bytes + '00' + +for let in property_url: + prop_url_bytes = prop_url_bytes + hex(ord(let))[2:] +prop_url_bytes = prop_url_bytes + '00' + +for let in property_data: + prop_data_bytes = prop_data_bytes + hex(ord(let))[2:] +prop_data_bytes = prop_data_bytes + '00' + +total_bytes = (len(tx_ver_bytes) + + len(tx_type_bytes) + + len(eco_bytes) + + len(prop_type_bytes) + + len(prev_prop_id_bytes) + + len(num_prop_bytes) + + len(prop_cat_bytes) + + len(prop_subcat_bytes) + + len(prop_name_bytes) + + len(prop_url_bytes) + + len(prop_data_bytes))/2 + +byte_stream = tx_ver_bytes + tx_type_bytes + eco_bytes + prop_type_bytes + prev_prop_id_bytes + prop_cat_bytes + prop_subcat_bytes + prop_name_bytes + prop_url_bytes + prop_data_bytes + num_prop_bytes + +#DEBUG print [tx_ver_bytes,tx_type_bytes,eco_bytes,prop_type_bytes,prev_prop_id_bytes,num_prop_bytes,prop_cat_bytes,prop_subcat_bytes,prop_name_bytes,prop_url_bytes,prop_data_bytes] + +#DEBUG print [len(tx_ver_bytes)/2,len(tx_type_bytes)/2,len(eco_bytes)/2,len(prop_type_bytes)/2,len(prev_prop_id_bytes)/2,len(num_prop_bytes)/2,len(prop_cat_bytes)/2,len(prop_subcat_bytes)/2,len(prop_name_bytes)/2,len(prop_url_bytes)/2,len(prop_data_bytes)/2] + +#DEBUG print [byte_stream, total_bytes] + +import math +total_packets = int(math.ceil(float(total_bytes)/30)) #get # of packets + +total_outs = int(math.ceil(float(total_packets)/2)) #get # of outs + +#construct packets +packets = [] +index = 0 +for i in range(total_packets): + # 2 multisig data addrs per out, 60 bytes per, 2 characters per byte so 60 characters per pass + parsed_data = byte_stream[index:index+60].ljust(60,"0") + cleartext_packet = (hex(i+1)[2:].rjust(2,"0") + parsed_data.ljust(60,"0")) + + index = index+60 + packets.append(cleartext_packet) + #DEBUG print ['pax',cleartext_packet, parsed_data, total_packets, i] + + +from_address = listOptions['transaction_from'] +obfuscation_packets = [hashlib.sha256(from_address).hexdigest().upper()] #add first sha of sender to packet list +for i in range(total_packets-1): #do rest for seqnums + obfuscation_packets.append(hashlib.sha256(obfuscation_packets[i]).hexdigest().upper()) + +#DEBUG print [packets,obfuscation_packets, len(obfuscation_packets[0]), len(obfuscation_packets[1]), len(packets[0])] + +#obfuscate and prepare multisig outs +pair_packets = [] +for i in range(total_packets): + obfuscation_packet = obfuscation_packets[i] + pair_packets.append((packets[i], obfuscation_packet[:-2])) + +#encode the plaintext packets +obfuscated_packets = [] +for pair in pair_packets: + plaintext = pair[0].upper() + shaaddress = pair[1] + #DEBUG print ['packets', plaintext, shaaddress, len(plaintext), len(shaaddress)] + datapacket = '' + for i in range(len(plaintext)): + if plaintext[i] == '0': + datapacket = datapacket + shaaddress[i] + else: + bin_plain = int('0x' + plaintext[i], 16) + bin_sha = int('0x' + shaaddress[i], 16) + #DEBUG print ['texts, plain & addr', plaintext[i], shaaddress[i],'bins, plain & addr', bin_plain, bin_sha ] + xored = hex(bin_plain ^ bin_sha)[2:].upper() + datapacket = datapacket + xored + obfuscated_packets.append(( datapacket, shaaddress)) + +#### Test that the obfuscated packets produce the same output as the plaintext packet inputs #### + +#decode the obfuscated packet +plaintext_packets = [] +for pair in obfuscated_packets: + obpacket = pair[0].upper() + shaaddress = pair[1] + #DEBUG print [obpacket, len(obpacket), shaaddress, len(shaaddress)] + datapacket = '' + for i in range(len(obpacket)): + if obpacket[i] == shaaddress[i]: + datapacket = datapacket + '0' + else: + bin_ob = int('0x' + obpacket[i], 16) + bin_sha = int('0x' + shaaddress[i], 16) + xored = hex(bin_ob ^ bin_sha)[2:].upper() + datapacket = datapacket + xored + plaintext_packets.append(datapacket) + +#check the packet is formed correctly by comparing it to the input +final_packets = [] +for i in range(len(plaintext_packets)): + orig = packets[i] + if orig.upper() != plaintext_packets[i]: + print ['packet did not come out right', orig, plaintext_packets[i] ] + else: + final_packets.append(obfuscated_packets[i][0]) + +#DEBUG print plaintext_packets, obfuscation_packets,final_packets + +#add key identifier and ecdsa byte to new mastercoin data key +for i in range(len(final_packets)): + obfuscated = '02' + final_packets[i] + "00" + #DEBUG print [obfuscated, len(obfuscated)] + invalid = True + while invalid: + obfuscated_randbyte = obfuscated[:-2] + hex(random.randint(0,255))[2:].rjust(2,"0").upper() + #set the last byte to something random in case we generated an invalid pubkey + potential_data_address = pybitcointools.pubkey_to_address(obfuscated_randbyte) + if bool(conn.validateaddress(potential_data_address).isvalid): + final_packets[i] = obfuscated_randbyte + invalid = False + #make sure the public key is valid using pybitcointools, if not, regenerate + #the last byte of the key and try again + +#DEBUG print final_packets + +#### Build transaction + +#calculate fees +fee_total = Decimal(0.0001) + Decimal(0.000055*total_packets+0.000055*total_outs) + Decimal(0.000055) +change = largest_spendable_input['amount'] - fee_total +# calculate change : +# (total input amount) - (broadcast fee) + +if (Decimal(change) < Decimal(0) or fee_total > largest_spendable_input['amount']) and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough funds, you need " + str(fee_total) , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#retrieve raw transaction to spend it +prev_tx = conn.getrawtransaction(largest_spendable_input['txid']) + +validnextinputs = [] #get valid redeemable inputs +for output in prev_tx.vout: + if output['scriptPubKey']['reqSigs'] == 1 and output['scriptPubKey']['type'] != 'multisig': + for address in output['scriptPubKey']['addresses']: + if address == listOptions['transaction_from']: + validnextinputs.append({ "txid": prev_tx.txid, "vout": output['n']}) + +validnextoutputs = { "1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P": 0.000055 } + +if change > Decimal(0.000055): # send anything above dust to yourself + validnextoutputs[ listOptions['transaction_from'] ] = float(change) + +unsigned_raw_tx = conn.createrawtransaction(validnextinputs, validnextoutputs) + +json_tx = conn.decoderawtransaction(unsigned_raw_tx) + +#append data structure +ordered_packets = [] +for i in range(total_outs): + ordered_packets.append([]) + +#append actual packet +index = 0 +for i in range(total_outs): + while len(ordered_packets[i]) < 2 and index != len(final_packets): + ordered_packets[i].append(final_packets[index]) + index = index + 1 +#DEBUG print ordered_packets + +for i in range(total_outs): + hex_string = "51" + HEXSPACE + pubkey + asm_string = "1 " + pubkey + addresses = [ pybitcointools.pubkey_to_address(pubkey)] + n_count = len(validnextoutputs)+i + total_sig_count = 1 + #DEBUG print [i,'added string', ordered_packets[i]] + for packet in ordered_packets[i]: + hex_string = hex_string + HEXSPACE + packet.lower() + asm_string = asm_string + " " + packet.lower() + addresses.append(pybitcointools.pubkey_to_address(packet)) + total_sig_count = total_sig_count + 1 + hex_string = hex_string + "5" + str(total_sig_count) + "ae" + asm_string = asm_string + " " + str(total_sig_count) + " " + "OP_CHECKMULTISIG" + #DEBUG print [hex_string, asm_string, addresses,total_sig_count] + #add multisig output to json object + json_tx['vout'].append( + { + "scriptPubKey": + { + "hex": hex_string, + "asm": asm_string, + "reqSigs": 1, + "type": "multisig", + "addresses": addresses + }, + "value": 0.000055*len(addresses), + "n": n_count + }) + +#print json_tx + +#construct byte arrays for transaction +#assert to verify byte lengths are OK +version = ['01', '00', '00', '00' ] +assert len(version) == 4 + +num_inputs = [str(len(json_tx['vin'])).rjust(2,"0")] +assert len(num_inputs) == 1 + +num_outputs = [str(len(json_tx['vout'])).rjust(2,"0")] +assert len(num_outputs) == 1 + +sequence = ['FF', 'FF', 'FF', 'FF'] +assert len(sequence) == 4 + +blocklocktime = ['00', '00', '00', '00'] +assert len(blocklocktime) == 4 + +#prepare inputs data for byte packing +inputsdata = [] +for _input in json_tx['vin']: + prior_input_txhash = _input['txid'].upper() + prior_input_index = str(_input['vout']).rjust(2,"0").ljust(8,"0") + input_raw_signature = _input['scriptSig']['hex'] + + prior_txhash_bytes = [prior_input_txhash[ start: start + 2 ] for start in range(0, len(prior_input_txhash), 2)][::-1] + assert len(prior_txhash_bytes) == 32 + + prior_txindex_bytes = [prior_input_index[ start: start + 2 ] for start in range(0, len(prior_input_index), 2)] + assert len(prior_txindex_bytes) == 4 + + len_scriptsig = ['%02x' % len(''.join([]).decode('hex').lower())] + assert len(len_scriptsig) == 1 + + inputsdata.append([prior_txhash_bytes, prior_txindex_bytes, len_scriptsig]) + +#prepare outputs for byte packing +output_hex = [] +for output in json_tx['vout']: + value_hex = hex(int(float(output['value'])*1e8))[2:] + value_hex = value_hex.rjust(16,"0") + value_bytes = [value_hex[ start: start + 2 ].upper() for start in range(0, len(value_hex), 2)][::-1] + assert len(value_bytes) == 8 + + # print output + scriptpubkey_hex = output['scriptPubKey']['hex'] + scriptpubkey_bytes = [scriptpubkey_hex[start:start + 2].upper() for start in range(0, len(scriptpubkey_hex), 2)] + len_scriptpubkey = ['%02x' % len(''.join(scriptpubkey_bytes).decode('hex').lower())] + #assert len(scriptpubkey_bytes) == 25 or len(scriptpubkey_bytes) == 71 + + output_hex.append([value_bytes, len_scriptpubkey, scriptpubkey_bytes] ) + +#join parts into final byte array +hex_transaction = version + num_inputs + +for _input in inputsdata: + hex_transaction += (_input[0] + _input[1] + _input[2] + sequence) + +hex_transaction += num_outputs + +for output in output_hex: + hex_transaction = hex_transaction + (output[0] + output[1] + output[2]) + +hex_transaction = hex_transaction + blocklocktime + +#verify that transaction is valid +assert type(conn.decoderawtransaction(''.join(hex_transaction).lower())) == type({}) + +#sign it +try: + signed_transaction = conn.signrawtransaction(''.join(hex_transaction)) +except Exception: + print json.dumps({ "status": "NOT OK", "error": "Wallet Locked" , "fix": "Manually unlock wallet (walletpassphrase 120)"}) + exit() + +#output final product as JSON +print json.dumps({ "rawtransaction": signed_transaction }) + diff --git a/scripts/generateTX50_SP_example.json b/scripts/generateTX50_SP_example.json new file mode 100644 index 0000000..3783533 --- /dev/null +++ b/scripts/generateTX50_SP_example.json @@ -0,0 +1,14 @@ +{ + "transaction_type": 'type: int, ex: 50', + "ecosystem": 'type: int, ex: 1', + "property_type": 'type: int, ex: 1', + "previous_property_id": 'type: int, ex: 3', + "property_category": "type: string, ex: Testing", + "property_subcategory": "type: string, ex: Testing Smart Property", + "property_name": "type: string, ex: Test Property 1", + "property_url": "type: string, ex: mastercoinfoundation.org", + "property_data": "type: string, ex: Test Data", + "number_properties": 'type: int, ex: 10', + "transaction_from": "type: base58", + "from_private_key": "type: base58" +} diff --git a/scripts/generateTX51_SP.py b/scripts/generateTX51_SP.py new file mode 100644 index 0000000..a7b0163 --- /dev/null +++ b/scripts/generateTX51_SP.py @@ -0,0 +1,465 @@ +#get balance +import sys +import json +import time +import random +import hashlib +import operator +import bitcoinrpc +import pybitcointools +import getpass +from decimal import * + + +if len(sys.argv) > 1 and "--force" not in sys.argv: + print "Takes a list of bitcoind options, addresses and a send amount and outputs a transaction in JSON \nUsage: cat generateTx.json | python generateTx.py\nRequires a fully-synced *local* bitcoind node" + exit() + +if "--force" in sys.argv: + #WARNING: '--force' WILL STEAL YOUR BITCOINS IF YOU DON KNOW WHAT YOU'RE DOING + force=True +else: + force=False + +JSON = sys.stdin.readlines() + +listOptions = json.loads(str(''.join(JSON))) + +USER=getpass.getuser() + +#sort out whether using local or remote API +conn = bitcoinrpc.connect_to_local() +try: + conn.getblockcount() +except StandardError: + try: + with open('/home/'+USER+'/.bitcoin/bitcoin.conf') as fp: + RPCPORT="8332" + RPCHOST="localhost" + for line in fp: + #print line + if line.split('=')[0] == "rpcuser": + RPCUSER=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcpassword": + RPCPASS=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcconnect": + RPCHOST=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcport": + RPCPORT=line.split('=')[1].strip() + except IOError as e: + print "Unable to open conf file: ~/.bitcoin/bitcoin.conf" + exit() + try: + conn = bitcoinrpc.connect_to_remote(RPCUSER,RPCPASS,host=RPCHOST,port=RPCPORT,use_https=False) + except StandardError: + print json.dumps({ "status": "NOT OK", "error": "Can't connect to bitcoind" , "fix": "Check bitcoind or config: "+RPCUSER+" "+RPCPASS+" "+RPCHOST+" "+RPCPORT}) + exit() + +#check if private key provided produces correct address +address = pybitcointools.privkey_to_address(listOptions['from_private_key']) +if not address == listOptions['transaction_from'] and not force: + print json.dumps({ "status": "NOT OK", "error": "Private key does not produce same address as \'transaction from\'" , "fix": "Set \'force\' flag to proceed without address checks" }) + exit() + +#see if account has been added +account = conn.getaccount(listOptions['transaction_from']) +if account == "" and not force: + _time = str(int(time.time())) + private = listOptions['from_private_key'] + print json.dumps({ "status": "NOT OK", "error": "Couldn\'t find address in wallet, please run \'fix\' on the machine", "fix": "bitcoind importprivkey " + private + " imported_" + _time }) + +#calculate minimum unspent balance +available_balance = Decimal(0.0) + +unspent_tx = [] +for unspent in conn.listunspent(): + if unspent.address == listOptions['transaction_from']: + unspent_tx.append(unspent) +#get all unspent for our from_address + +for unspent in unspent_tx: + available_balance = unspent.amount + available_balance + +#check if minimum BTC balance is met +if available_balance < Decimal(0.00006*3) and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough funds, you have " + str( available_balance ) + " and need at least 0.00018 BTC" , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#generate public key of bitcoin address +validated = conn.validateaddress(listOptions['transaction_from']) +if 'pubkey' in validated.__dict__: + pubkey = validated.pubkey +elif not force: + print json.dumps({ "status": "NOT OK", "error": "from address is invalid or hasn't been used on the network" , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#find largest spendable input from UTXO +largest_spendable_input = { "txid": "", "amount": Decimal(0) } +for unspent in unspent_tx: + if unspent.amount > largest_spendable_input["amount"]: + largest_spendable_input = { "txid": unspent.txid, "amount": unspent.amount } + +#real stuff happens here: + +#build multisig data address +transaction_version = 0 +transaction_type = listOptions['transaction_type'] +ecosystem = listOptions['ecosystem'] +property_type = listOptions['property_type'] +previous_property_id = listOptions['previous_property_id'] +property_category = listOptions['property_category'] +property_subcategory = listOptions['property_subcategory'] +property_name = listOptions['property_name'] +property_url = listOptions['property_url'] +property_data = listOptions['property_data'] +currency_identifier_desired = listOptions['currency_identifier_desired'] +number_properties = listOptions['number_properties'] * ( 100000000 if property_type is 2 else 1 ) +deadline = listOptions['deadline'] +earlybird_bonus = listOptions['earlybird_bonus'] +percentage_for_issuer = listOptions['percentage_for_issuer'] + + +#calculate bytes +tx_ver_bytes = hex(transaction_version)[2:].rjust(4,"0") # 2 bytes +tx_type_bytes = hex(transaction_type)[2:].rjust(4,"0") # 2 bytes +eco_bytes = hex(ecosystem)[2:].rjust(2,"0") # 1 byte +prop_type_bytes = hex(property_type)[2:].rjust(4,"0") # 2 bytes +prev_prop_id_bytes = hex(previous_property_id)[2:].rjust(8,"0") # 4 bytes + +#set MSB for test eco +if ecosystem == 2 and currency_identifier_desired != 2: + curr_ident_des_bytes = ''.join(['8']+list(hex(currency_identifier_desired)[2:].rjust(8,"0"))[1:]) # 4 bytes +else: + curr_ident_des_bytes = hex(currency_identifier_desired)[2:].rjust(8,"0") # 4 bytes + +num_prop_bytes = hex(number_properties)[2:].rjust(16,"0")# 8 bytes +deadline_bytes = hex(deadline)[2:].rjust(16,"0") # 8 bytes +earlybird_bytes = hex(earlybird_bonus)[2:].rjust(2,"0") # 1 byte +percent_issuer_bytes = hex(percentage_for_issuer)[2:].rjust(2,"0") # 1 byte +prop_cat_bytes = '' # var bytes +prop_subcat_bytes = '' # var bytes +prop_name_bytes = '' # var bytes +prop_url_bytes = '' # var bytes +prop_data_bytes = '' # var bytes + +for let in property_category: + hex_bytes = hex(ord(let))[2:] + if len(hex_bytes) % 2 == 1: + hex_bytes = hex_bytes[:len(hex_bytes)-1] + prop_cat_bytes = prop_cat_bytes + hex_bytes +prop_cat_bytes = prop_cat_bytes + '00' + +for let in property_subcategory: + hex_bytes = hex(ord(let))[2:] + if len(hex_bytes) % 2 == 1: + hex_bytes = hex_bytes[:len(hex_bytes)-1] + prop_subcat_bytes = prop_subcat_bytes + hex_bytes +prop_subcat_bytes = prop_subcat_bytes + '00' + +for let in property_name: + hex_bytes = hex(ord(let))[2:] + if len(hex_bytes) % 2 == 1: + hex_bytes = hex_bytes[:len(hex_bytes)-1] + prop_name_bytes = prop_name_bytes + hex_bytes +prop_name_bytes = prop_name_bytes + '00' + +for let in property_url: + hex_bytes = hex(ord(let))[2:] + if len(hex_bytes) % 2 == 1: + hex_bytes = hex_bytes[:len(hex_bytes)-1] + prop_url_bytes = prop_url_bytes + hex_bytes +prop_url_bytes = prop_url_bytes + '00' + +for let in property_data: + hex_bytes = hex(ord(let))[2:] + if len(hex_bytes) % 2 == 1: + hex_bytes = hex_bytes[:len(hex_bytes)-1] + prop_data_bytes = prop_data_bytes + hex_bytes +prop_data_bytes = prop_data_bytes + '00' + +total_bytes = (len(tx_ver_bytes) + + len(tx_type_bytes) + + len(eco_bytes) + + len(prop_type_bytes) + + len(prev_prop_id_bytes) + + len(num_prop_bytes) + + len(curr_ident_des_bytes) + + len(deadline_bytes) + + len(earlybird_bytes) + + len(percent_issuer_bytes) + + len(prop_cat_bytes) + + len(prop_subcat_bytes) + + len(prop_name_bytes) + + len(prop_url_bytes) + + len(prop_data_bytes))/2 + +byte_stream = (tx_ver_bytes + + tx_type_bytes + + eco_bytes + + prop_type_bytes + + prev_prop_id_bytes + + prop_cat_bytes + + prop_subcat_bytes + + prop_name_bytes + + prop_url_bytes + + prop_data_bytes + + curr_ident_des_bytes + + num_prop_bytes + + deadline_bytes + + earlybird_bytes + + percent_issuer_bytes) + +#DEBUG print [tx_ver_bytes,tx_type_bytes,eco_bytes,prop_type_bytes,prev_prop_id_bytes,num_prop_bytes,prop_cat_bytes,prop_subcat_bytes,prop_name_bytes,prop_url_bytes,prop_data_bytes] + +#DEBUG print [len(tx_ver_bytes)/2,len(tx_type_bytes)/2,len(eco_bytes)/2,len(prop_type_bytes)/2,len(prev_prop_id_bytes)/2,len(num_prop_bytes)/2,len(prop_cat_bytes)/2,len(prop_subcat_bytes)/2,len(prop_name_bytes)/2,len(prop_url_bytes)/2,len(prop_data_bytes)/2] + +#DEBUG print [byte_stream, total_bytes] + +import math +total_packets = int(math.ceil(float(total_bytes)/30)) #get # of packets + +total_outs = int(math.ceil(float(total_packets)/2)) #get # of outs + +#construct packets +packets = [] +index = 0 +for i in range(total_packets): + # 2 multisig data addrs per out, 60 bytes per, 2 characters per byte so 60 characters per pass + parsed_data = byte_stream[index:index+60].ljust(60,"0") + cleartext_packet = (hex(i+1)[2:].rjust(2,"0") + parsed_data.ljust(60,"0")) + + index = index+60 + packets.append(cleartext_packet) + #DEBUG print ['pax',cleartext_packet, parsed_data, total_packets, i] + + +from_address = listOptions['transaction_from'] +obfuscation_packets = [hashlib.sha256(from_address).hexdigest().upper()] #add first sha of sender to packet list +for i in range(total_packets-1): #do rest for seqnums + obfuscation_packets.append(hashlib.sha256(obfuscation_packets[i]).hexdigest().upper()) + +#DEBUG print [packets,obfuscation_packets, len(obfuscation_packets[0]), len(obfuscation_packets[1]), len(packets[0])] + +#obfuscate and prepare multisig outs +pair_packets = [] +for i in range(total_packets): + obfuscation_packet = obfuscation_packets[i] + pair_packets.append((packets[i], obfuscation_packet[:-2])) + +#encode the plaintext packets +obfuscated_packets = [] +for pair in pair_packets: + plaintext = pair[0].upper() + shaaddress = pair[1] + #DEBUG print ['packets', plaintext, shaaddress, len(plaintext), len(shaaddress)] + datapacket = '' + for i in range(len(plaintext)): + if plaintext[i] == '0': + datapacket = datapacket + shaaddress[i] + else: + bin_plain = int('0x' + plaintext[i], 16) + bin_sha = int('0x' + shaaddress[i], 16) + #DEBUG print ['texts, plain & addr', plaintext[i], shaaddress[i],'bins, plain & addr', bin_plain, bin_sha ] + xored = hex(bin_plain ^ bin_sha)[2:].upper() + datapacket = datapacket + xored + obfuscated_packets.append(( datapacket, shaaddress)) + +#### Test that the obfuscated packets produce the same output as the plaintext packet inputs #### + +#decode the obfuscated packet +plaintext_packets = [] +for pair in obfuscated_packets: + obpacket = pair[0].upper() + shaaddress = pair[1] + #DEBUG print [obpacket, len(obpacket), shaaddress, len(shaaddress)] + datapacket = '' + for i in range(len(obpacket)): + if obpacket[i] == shaaddress[i]: + datapacket = datapacket + '0' + else: + bin_ob = int('0x' + obpacket[i], 16) + bin_sha = int('0x' + shaaddress[i], 16) + xored = hex(bin_ob ^ bin_sha)[2:].upper() + datapacket = datapacket + xored + plaintext_packets.append(datapacket) + +#check the packet is formed correctly by comparing it to the input +final_packets = [] +for i in range(len(plaintext_packets)): + orig = packets[i] + if orig.upper() != plaintext_packets[i]: + print ['packet did not come out right', orig, plaintext_packets[i] ] + else: + final_packets.append(obfuscated_packets[i][0]) + +#DEBUG print plaintext_packets, obfuscation_packets,final_packets + +#add key identifier and ecdsa byte to new mastercoin data key +for i in range(len(final_packets)): + obfuscated = '02' + final_packets[i] + "00" + #DEBUG print [obfuscated, len(obfuscated)] + invalid = True + while invalid: + obfuscated_randbyte = obfuscated[:-2] + hex(random.randint(0,255))[2:].rjust(2,"0").upper() + #set the last byte to something random in case we generated an invalid pubkey + potential_data_address = pybitcointools.pubkey_to_address(obfuscated_randbyte) + if bool(conn.validateaddress(potential_data_address).isvalid): + final_packets[i] = obfuscated_randbyte + invalid = False + #make sure the public key is valid using pybitcointools, if not, regenerate + #the last byte of the key and try again + +#DEBUG print final_packets + +#### Build transaction + +#calculate fees +fee_total = Decimal(0.0001) + Decimal(0.000055*total_packets+0.000055*total_outs) + Decimal(0.000055) +change = largest_spendable_input['amount'] - fee_total +# calculate change : +# (total input amount) - (broadcast fee) +if (Decimal(change) < Decimal(0) or fee_total > largest_spendable_input['amount']) and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough funds, you need " + str( fee_total ) , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#retrieve raw transaction to spend it +prev_tx = conn.getrawtransaction(largest_spendable_input['txid']) + +validnextinputs = [] #get valid redeemable inputs +for output in prev_tx.vout: + if output['scriptPubKey']['reqSigs'] == 1 and output['scriptPubKey']['type'] != 'multisig': + for address in output['scriptPubKey']['addresses']: + if address == listOptions['transaction_from']: + validnextinputs.append({ "txid": prev_tx.txid, "vout": output['n']}) + +validnextoutputs = { "1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P": 0.000055 } + +if change > Decimal(0.000055): # send anything above dust to yourself + validnextoutputs[ listOptions['transaction_from'] ] = float(change) + +unsigned_raw_tx = conn.createrawtransaction(validnextinputs, validnextoutputs) + +json_tx = conn.decoderawtransaction(unsigned_raw_tx) + +#append data structure +ordered_packets = [] +for i in range(total_outs): + ordered_packets.append([]) + +#append actual packet +index = 0 +for i in range(total_outs): + while len(ordered_packets[i]) < 2 and index != len(final_packets): + ordered_packets[i].append(final_packets[index]) + index = index + 1 +#DEBUG print ordered_packets + +for i in range(total_outs): + hex_string = "5141" + pubkey + asm_string = "1 " + pubkey + addresses = [ pybitcointools.pubkey_to_address(pubkey)] + n_count = len(validnextoutputs)+i + total_sig_count = 1 + #DEBUG print [i,'added string', ordered_packets[i]] + for packet in ordered_packets[i]: + hex_string = hex_string + "21" + packet.lower() + asm_string = asm_string + " " + packet.lower() + addresses.append(pybitcointools.pubkey_to_address(packet)) + total_sig_count = total_sig_count + 1 + hex_string = hex_string + "5" + str(total_sig_count) + "ae" + asm_string = asm_string + " " + str(total_sig_count) + " " + "OP_CHECKMULTISIG" + #DEBUG print [hex_string, asm_string, addresses,total_sig_count] + #add multisig output to json object + json_tx['vout'].append( + { + "scriptPubKey": + { + "hex": hex_string, + "asm": asm_string, + "reqSigs": 1, + "type": "multisig", + "addresses": addresses + }, + "value": 0.000055*len(addresses), + "n": n_count + }) + +#print json_tx + +#construct byte arrays for transaction +#assert to verify byte lengths are OK +version = ['01', '00', '00', '00' ] +assert len(version) == 4 + +num_inputs = [str(len(json_tx['vin'])).rjust(2,"0")] +assert len(num_inputs) == 1 + +num_outputs = [str(len(json_tx['vout'])).rjust(2,"0")] +assert len(num_outputs) == 1 + +sequence = ['FF', 'FF', 'FF', 'FF'] +assert len(sequence) == 4 + +blocklocktime = ['00', '00', '00', '00'] +assert len(blocklocktime) == 4 + +#prepare inputs data for byte packing +inputsdata = [] +for _input in json_tx['vin']: + prior_input_txhash = _input['txid'].upper() + prior_input_index = str(_input['vout']).rjust(2,"0").ljust(8,"0") + input_raw_signature = _input['scriptSig']['hex'] + + prior_txhash_bytes = [prior_input_txhash[ start: start + 2 ] for start in range(0, len(prior_input_txhash), 2)][::-1] + assert len(prior_txhash_bytes) == 32 + + prior_txindex_bytes = [prior_input_index[ start: start + 2 ] for start in range(0, len(prior_input_index), 2)] + assert len(prior_txindex_bytes) == 4 + + len_scriptsig = ['%02x' % len(''.join([]).decode('hex').lower())] + assert len(len_scriptsig) == 1 + + inputsdata.append([prior_txhash_bytes, prior_txindex_bytes, len_scriptsig]) + +#prepare outputs for byte packing +output_hex = [] +for output in json_tx['vout']: + value_hex = hex(int(float(output['value'])*1e8))[2:] + value_hex = value_hex.rjust(16,"0") + value_bytes = [value_hex[ start: start + 2 ].upper() for start in range(0, len(value_hex), 2)][::-1] + assert len(value_bytes) == 8 + + # print output + scriptpubkey_hex = output['scriptPubKey']['hex'] + scriptpubkey_bytes = [scriptpubkey_hex[start:start + 2].upper() for start in range(0, len(scriptpubkey_hex), 2)] + len_scriptpubkey = ['%02x' % len(''.join(scriptpubkey_bytes).decode('hex').lower())] + #assert len(scriptpubkey_bytes) == 25 or len(scriptpubkey_bytes) == 71 + + output_hex.append([value_bytes, len_scriptpubkey, scriptpubkey_bytes] ) + +#join parts into final byte array +hex_transaction = version + num_inputs + +for _input in inputsdata: + hex_transaction += (_input[0] + _input[1] + _input[2] + sequence) + +hex_transaction += num_outputs + +for output in output_hex: + hex_transaction = hex_transaction + (output[0] + output[1] + output[2]) + +hex_transaction = hex_transaction + blocklocktime + +#verify that transaction is valid +assert type(conn.decoderawtransaction(''.join(hex_transaction).lower())) == type({}) + +#sign it +try: + signed_transaction = conn.signrawtransaction(''.join(hex_transaction)) +except Exception: + print json.dumps({ "status": "NOT OK", "error": "Wallet Locked" , "fix": "Manually unlock wallet (walletpassphrase 120)"}) + exit() + +#output final product as JSON +print json.dumps({ "rawtransaction": signed_transaction }) + diff --git a/scripts/generateTX51_SP_example.json b/scripts/generateTX51_SP_example.json new file mode 100644 index 0000000..053accc --- /dev/null +++ b/scripts/generateTX51_SP_example.json @@ -0,0 +1,18 @@ +{ + "transaction_type": 'type: int, ex: 50', + "ecosystem": 'type: int, ex: 1', + "property_type": 'type: int, ex: 1', + "previous_property_id": 'type: int, ex: 3', + "property_category": "type: string, ex: Testing", + "property_subcategory": "type: string, ex: Testing Smart Property", + "property_name": "type: string, ex: Test Property 1", + "property_url": "type: string, ex: mastercoinfoundation.org", + "property_data": "type: string, ex: Test Data", + "currency_identifier_desired": 'type int, ex: 2', + "number_properties": 'type: int, ex: 10', + "deadline": 'type: int, ex: 7731439200', + "earlybird_bonus": 'type: int, ex: 10', + "percentage_for_issuer": 'type: int, ex: 12', + "transaction_from": "type: base58", + "from_private_key": "type: base58" +} diff --git a/scripts/generateTX53_SP.py b/scripts/generateTX53_SP.py new file mode 100644 index 0000000..dfbd3d0 --- /dev/null +++ b/scripts/generateTX53_SP.py @@ -0,0 +1,376 @@ +#get balance +import sys +import json +import time +import random +import hashlib +import operator +import bitcoinrpc +import pybitcointools +import getpass +from decimal import * + + +if len(sys.argv) > 1 and "--force" not in sys.argv: + print "Takes a list of bitcoind options, addresses and a send amount and outputs a transaction in JSON \nUsage: cat generateTx.json | python generateTx.py\nRequires a fully-synced *local* bitcoind node" + exit() + +if "--force" in sys.argv: + #WARNING: '--force' WILL STEAL YOUR BITCOINS IF YOU DON KNOW WHAT YOU'RE DOING + force=True +else: + force=False + +JSON = sys.stdin.readlines() + +listOptions = json.loads(str(''.join(JSON))) + +USER=getpass.getuser() + +#sort out whether using local or remote API +conn = bitcoinrpc.connect_to_local() +try: + conn.getblockcount() +except StandardError: + try: + with open('/home/'+USER+'/.bitcoin/bitcoin.conf') as fp: + RPCPORT="8332" + RPCHOST="localhost" + for line in fp: + #print line + if line.split('=')[0] == "rpcuser": + RPCUSER=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcpassword": + RPCPASS=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcconnect": + RPCHOST=line.split('=')[1].strip() + elif line.split('=')[0] == "rpcport": + RPCPORT=line.split('=')[1].strip() + except IOError as e: + print "Unable to open conf file: ~/.bitcoin/bitcoin.conf" + exit() + try: + conn = bitcoinrpc.connect_to_remote(RPCUSER,RPCPASS,host=RPCHOST,port=RPCPORT,use_https=False) + except StandardError: + print json.dumps({ "status": "NOT OK", "error": "Can't connect to bitcoind" , "fix": "Check bitcoind or config: "+RPCUSER+" "+RPCPASS+" "+RPCHOST+" "+RPCPORT}) + exit() + +#check if private key provided produces correct address +address = pybitcointools.privkey_to_address(listOptions['from_private_key']) +if not address == listOptions['transaction_from'] and not force: + print json.dumps({ "status": "NOT OK", "error": "Private key does not produce same address as \'transaction from\'" , "fix": "Set \'force\' flag to proceed without address checks" }) + exit() + +#see if account has been added +account = conn.getaccount(listOptions['transaction_from']) +if account == "" and not force: + _time = str(int(time.time())) + private = listOptions['from_private_key'] + print json.dumps({ "status": "NOT OK", "error": "Couldn\'t find address in wallet, please run \'fix\' on the machine", "fix": "bitcoind importprivkey " + private + " imported_" + _time }) + +#calculate minimum unspent balance +available_balance = Decimal(0.0) + +unspent_tx = [] +for unspent in conn.listunspent(): + if unspent.address == listOptions['transaction_from']: + unspent_tx.append(unspent) +#get all unspent for our from_address + +for unspent in unspent_tx: + available_balance = unspent.amount + available_balance + +#check if minimum BTC balance is met +if available_balance < Decimal(0.00006*3) and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough funds, you have " + str( available_balance ) + " and need at least 0.00018 BTC" , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#generate public key of bitcoin address +validated = conn.validateaddress(listOptions['transaction_from']) +if 'pubkey' in validated.__dict__: + pubkey = validated.pubkey +elif not force: + print json.dumps({ "status": "NOT OK", "error": "from address is invalid or hasn't been used on the network" , "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#find largest spendable input from UTXO +largest_spendable_input = { "txid": "", "amount": Decimal(0) } +for unspent in unspent_tx: + if unspent.amount > largest_spendable_input["amount"]: + largest_spendable_input = { "txid": unspent.txid, "amount": unspent.amount } + +#real stuff happens here: + +#build multisig data address +transaction_version = 0 +transaction_type = listOptions['transaction_type'] +property_id = listOptions['property_id'] + +#calculate bytes +tx_ver_bytes = hex(transaction_version)[2:].rjust(4,"0") # 2 bytes +tx_type_bytes = hex(transaction_type)[2:].rjust(4,"0") # 2 bytes +prop_id_bytes = hex(property_id)[2:].rjust(8,"0") # 4 bytes + +total_bytes = (len(tx_ver_bytes) + + len(tx_type_bytes) + + len(prop_id_bytes))/2 + +byte_stream = (tx_ver_bytes + + tx_type_bytes + + prop_id_bytes) + +#DEBUG print [tx_ver_bytes,tx_type_bytes,eco_bytes,prop_type_bytes,prev_prop_id_bytes,num_prop_bytes,prop_cat_bytes,prop_subcat_bytes,prop_name_bytes,prop_url_bytes,prop_data_bytes] + +#DEBUG print [len(tx_ver_bytes)/2,len(tx_type_bytes)/2,len(eco_bytes)/2,len(prop_type_bytes)/2,len(prev_prop_id_bytes)/2,len(num_prop_bytes)/2,len(prop_cat_bytes)/2,len(prop_subcat_bytes)/2,len(prop_name_bytes)/2,len(prop_url_bytes)/2,len(prop_data_bytes)/2] + +#DEBUG print [byte_stream, total_bytes] + +import math +total_packets = int(math.ceil(float(total_bytes)/30)) #get # of packets + +total_outs = int(math.ceil(float(total_packets)/2)) #get # of outs + +#construct packets +packets = [] +index = 0 +for i in range(total_packets): + # 2 multisig data addrs per out, 60 bytes per, 2 characters per byte so 60 characters per pass + parsed_data = byte_stream[index:index+60].ljust(60,"0") + cleartext_packet = (hex(i+1)[2:].rjust(2,"0") + parsed_data.ljust(60,"0")) + + index = index+60 + packets.append(cleartext_packet) + #DEBUG print ['pax',cleartext_packet, parsed_data, total_packets, i] + + +from_address = listOptions['transaction_from'] +obfuscation_packets = [hashlib.sha256(from_address).hexdigest().upper()] #add first sha of sender to packet list +for i in range(total_packets-1): #do rest for seqnums + obfuscation_packets.append(hashlib.sha256(obfuscation_packets[i]).hexdigest().upper()) + +#DEBUG print [packets,obfuscation_packets, len(obfuscation_packets[0]), len(obfuscation_packets[1]), len(packets[0])] + +#obfuscate and prepare multisig outs +pair_packets = [] +for i in range(total_packets): + obfuscation_packet = obfuscation_packets[i] + pair_packets.append((packets[i], obfuscation_packet[:-2])) + +#encode the plaintext packets +obfuscated_packets = [] +for pair in pair_packets: + plaintext = pair[0].upper() + shaaddress = pair[1] + #DEBUG print ['packets', plaintext, shaaddress, len(plaintext), len(shaaddress)] + datapacket = '' + for i in range(len(plaintext)): + if plaintext[i] == '0': + datapacket = datapacket + shaaddress[i] + else: + bin_plain = int('0x' + plaintext[i], 16) + bin_sha = int('0x' + shaaddress[i], 16) + #DEBUG print ['texts, plain & addr', plaintext[i], shaaddress[i],'bins, plain & addr', bin_plain, bin_sha ] + xored = hex(bin_plain ^ bin_sha)[2:].upper() + datapacket = datapacket + xored + obfuscated_packets.append(( datapacket, shaaddress)) + +#### Test that the obfuscated packets produce the same output as the plaintext packet inputs #### + +#decode the obfuscated packet +plaintext_packets = [] +for pair in obfuscated_packets: + obpacket = pair[0].upper() + shaaddress = pair[1] + #DEBUG print [obpacket, len(obpacket), shaaddress, len(shaaddress)] + datapacket = '' + for i in range(len(obpacket)): + if obpacket[i] == shaaddress[i]: + datapacket = datapacket + '0' + else: + bin_ob = int('0x' + obpacket[i], 16) + bin_sha = int('0x' + shaaddress[i], 16) + xored = hex(bin_ob ^ bin_sha)[2:].upper() + datapacket = datapacket + xored + plaintext_packets.append(datapacket) + +#check the packet is formed correctly by comparing it to the input +final_packets = [] +for i in range(len(plaintext_packets)): + orig = packets[i] + if orig.upper() != plaintext_packets[i]: + print ['packet did not come out right', orig, plaintext_packets[i] ] + else: + final_packets.append(obfuscated_packets[i][0]) + +#DEBUG print plaintext_packets, obfuscation_packets,final_packets + +#add key identifier and ecdsa byte to new mastercoin data key +for i in range(len(final_packets)): + obfuscated = '02' + final_packets[i] + "00" + #DEBUG print [obfuscated, len(obfuscated)] + invalid = True + while invalid: + obfuscated_randbyte = obfuscated[:-2] + hex(random.randint(0,255))[2:].rjust(2,"0").upper() + #set the last byte to something random in case we generated an invalid pubkey + potential_data_address = pybitcointools.pubkey_to_address(obfuscated_randbyte) + if bool(conn.validateaddress(potential_data_address).isvalid): + final_packets[i] = obfuscated_randbyte + invalid = False + #make sure the public key is valid using pybitcointools, if not, regenerate + #the last byte of the key and try again + +#DEBUG print final_packets + +#### Build transaction + +#calculate fees +fee_total = Decimal(0.0001) + Decimal(0.000055*total_packets+0.000055*total_outs) + Decimal(0.000055) +change = largest_spendable_input['amount'] - fee_total +# calculate change : +# (total input amount) - (broadcast fee) +print Decimal(change) < Decimal(0), fee_total > largest_spendable_input['amount'], not force +if Decimal(change) < Decimal(0) or fee_total > largest_spendable_input['amount'] and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough funds, you need " + str( fee_total ), "fix": "Set \'force\' flag to proceed without balance checks" }) + exit() + +#retrieve raw transaction to spend it +prev_tx = conn.getrawtransaction(largest_spendable_input['txid']) + +validnextinputs = [] #get valid redeemable inputs +for output in prev_tx.vout: + if output['scriptPubKey']['reqSigs'] == 1 and output['scriptPubKey']['type'] != 'multisig': + for address in output['scriptPubKey']['addresses']: + if address == listOptions['transaction_from']: + validnextinputs.append({ "txid": prev_tx.txid, "vout": output['n']}) + +validnextoutputs = { "1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P": 0.000055 } + +if change > Decimal(0.000055): # send anything above dust to yourself + validnextoutputs[ listOptions['transaction_from'] ] = float(change) + +unsigned_raw_tx = conn.createrawtransaction(validnextinputs, validnextoutputs) + +json_tx = conn.decoderawtransaction(unsigned_raw_tx) + +#append data structure +ordered_packets = [] +for i in range(total_outs): + ordered_packets.append([]) + +#append actual packet +index = 0 +for i in range(total_outs): + while len(ordered_packets[i]) < 2 and index != len(final_packets): + ordered_packets[i].append(final_packets[index]) + index = index + 1 +#DEBUG print ordered_packets + +for i in range(total_outs): + hex_string = "5141" + pubkey + asm_string = "1 " + pubkey + addresses = [ pybitcointools.pubkey_to_address(pubkey)] + n_count = len(validnextoutputs)+i + total_sig_count = 1 + #DEBUG print [i,'added string', ordered_packets[i]] + for packet in ordered_packets[i]: + hex_string = hex_string + "21" + packet.lower() + asm_string = asm_string + " " + packet.lower() + addresses.append(pybitcointools.pubkey_to_address(packet)) + total_sig_count = total_sig_count + 1 + hex_string = hex_string + "5" + str(total_sig_count) + "ae" + asm_string = asm_string + " " + str(total_sig_count) + " " + "OP_CHECKMULTISIG" + #DEBUG print [hex_string, asm_string, addresses,total_sig_count] + #add multisig output to json object + json_tx['vout'].append( + { + "scriptPubKey": + { + "hex": hex_string, + "asm": asm_string, + "reqSigs": 1, + "type": "multisig", + "addresses": addresses + }, + "value": 0.000055*len(addresses), + "n": n_count + }) + +#print json_tx + +#construct byte arrays for transaction +#assert to verify byte lengths are OK +version = ['01', '00', '00', '00' ] +assert len(version) == 4 + +num_inputs = [str(len(json_tx['vin'])).rjust(2,"0")] +assert len(num_inputs) == 1 + +num_outputs = [str(len(json_tx['vout'])).rjust(2,"0")] +assert len(num_outputs) == 1 + +sequence = ['FF', 'FF', 'FF', 'FF'] +assert len(sequence) == 4 + +blocklocktime = ['00', '00', '00', '00'] +assert len(blocklocktime) == 4 + +#prepare inputs data for byte packing +inputsdata = [] +for _input in json_tx['vin']: + prior_input_txhash = _input['txid'].upper() + prior_input_index = str(_input['vout']).rjust(2,"0").ljust(8,"0") + input_raw_signature = _input['scriptSig']['hex'] + + prior_txhash_bytes = [prior_input_txhash[ start: start + 2 ] for start in range(0, len(prior_input_txhash), 2)][::-1] + assert len(prior_txhash_bytes) == 32 + + prior_txindex_bytes = [prior_input_index[ start: start + 2 ] for start in range(0, len(prior_input_index), 2)] + assert len(prior_txindex_bytes) == 4 + + len_scriptsig = ['%02x' % len(''.join([]).decode('hex').lower())] + assert len(len_scriptsig) == 1 + + inputsdata.append([prior_txhash_bytes, prior_txindex_bytes, len_scriptsig]) + +#prepare outputs for byte packing +output_hex = [] +for output in json_tx['vout']: + value_hex = hex(int(float(output['value'])*1e8))[2:] + value_hex = value_hex.rjust(16,"0") + value_bytes = [value_hex[ start: start + 2 ].upper() for start in range(0, len(value_hex), 2)][::-1] + assert len(value_bytes) == 8 + + # print output + scriptpubkey_hex = output['scriptPubKey']['hex'] + scriptpubkey_bytes = [scriptpubkey_hex[start:start + 2].upper() for start in range(0, len(scriptpubkey_hex), 2)] + len_scriptpubkey = ['%02x' % len(''.join(scriptpubkey_bytes).decode('hex').lower())] + #assert len(scriptpubkey_bytes) == 25 or len(scriptpubkey_bytes) == 71 + + output_hex.append([value_bytes, len_scriptpubkey, scriptpubkey_bytes] ) + +#join parts into final byte array +hex_transaction = version + num_inputs + +for _input in inputsdata: + hex_transaction += (_input[0] + _input[1] + _input[2] + sequence) + +hex_transaction += num_outputs + +for output in output_hex: + hex_transaction = hex_transaction + (output[0] + output[1] + output[2]) + +hex_transaction = hex_transaction + blocklocktime + +#verify that transaction is valid +assert type(conn.decoderawtransaction(''.join(hex_transaction).lower())) == type({}) + +#sign it +try: + signed_transaction = conn.signrawtransaction(''.join(hex_transaction)) +except Exception: + print json.dumps({ "status": "NOT OK", "error": "Wallet Locked" , "fix": "Manually unlock wallet (walletpassphrase 120)"}) + exit() + +#output final product as JSON +print json.dumps({ "rawtransaction": signed_transaction }) + diff --git a/scripts/generateTX53_SP_example.json b/scripts/generateTX53_SP_example.json new file mode 100644 index 0000000..50eb386 --- /dev/null +++ b/scripts/generateTX53_SP_example.json @@ -0,0 +1,6 @@ +{ + "transaction_type": 'type: int, ex: 53', + "property_id": 'type: int, ex: 9', + "transaction_from": "type: base58", + "from_private_key": "type: base58" +} diff --git a/scripts/msc_createtx.py b/scripts/msc_createtx.py new file mode 100644 index 0000000..6d421d2 --- /dev/null +++ b/scripts/msc_createtx.py @@ -0,0 +1,405 @@ + +#!/usr/bin/python +#Send Masterprotocol Currencies using db tracking of utxo +import sys +import json +import time +import random +import hashlib +import operator +import commands +import pybitcointools +import os, decimal +import requests, urlparse +from pycoin import encoding +from msc_utils_send import * + +if len(sys.argv) > 1 and "--force" not in sys.argv: + print "Takes a list of bitcoind options, addresses and a send amount and outputs a transaction in JSON \nUsage: cat send.json | python msc-sxsend.py\nRequires sx and a configured obelisk server" + exit() + +if "--force" in sys.argv: + #WARNING: '--force' WILL STEAL YOUR BITCOINS IF YOU DON KNOW WHAT YOU'RE DOING + force=True +else: + force=False + +JSON = sys.stdin.readlines() +try: + listOptions = json.loads(str(''.join(JSON))) +except ValueError: + print json.dumps({ "status": "NOT OK", "error": "Couldn't read input variables", "fix": "check input data"+str(JSON) }) + exit() + +#get local running dir +RDIR=os.path.dirname(os.path.realpath(__file__)) + +#Define and make sure we have a data dir +DATA=RDIR+'/data/' +commands.getoutput('mkdir -p '+DATA) + +#get some variables from the json iput +FROMADDRESS=listOptions['transaction_from'].strip() +TOADDRESS=listOptions['transaction_to'].strip() +CID=listOptions['currency_id'] +TOAMOUNT=listOptions['send_amt'] +PTYPE=listOptions['property_type'] +BROADCAST=listOptions['broadcast'] +CLEAN=1 +if BROADCAST > 0: + PRIVATE_KEY=listOptions['from_private_key'].strip() + CLEAN=listOptions['clean'] + #check if private key provided produces correct address + address = pybitcointools.privkey_to_address(PRIVATE_KEY) + if not address == FROMADDRESS and not force: + print json.dumps({ "status": "NOT OK", "error": "Private key does not produce same address as \'transaction from\'" , "fix": "Set \'force\' flag to proceed without address checks" }) + exit() + +#prime out utxo files +if sync_utxo(FROMADDRESS) == 1: + print json.dumps({ "status": "NOT OK", "error": "Couldn't update utxo list", "fix": "Check connection to internet, sx operating properly and try again" }) + exit() + +#calculate minimum unspent balance (everything in satoshi's) +available_balance = int(0) +utxo_array=get_utxo() +for item in utxo_array: + if item['address'] == FROMADDRESS: + available_balance += int(item['satoshi']) + +#BAL = commands.getoutput('sx balance -j '+listOptions['transaction_from']) +#balOptions = json.loads(str(''.join(BAL))) +#available_balance = int(balOptions[0]['paid']) + +broadcast_fee = int(10000) +output_minimum = int(5500) #dust threshold 5460 + +fee_total = broadcast_fee + (output_minimum * 4) + +#check if minimum BTC balance is met +if available_balance < fee_total and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough funds "+str(available_balance)+" of "+str(fee_total), "fix": "Make sure db tx are updated and you have enough btc" }) + exit() + +#check if Currency ID balance is available +#print json.dumps({ "address": addr, "currency": currency, "balance": balance}) +#cid_query = '{ \\"address\\": \\"'+listOptions['transaction_from']+'\\", \\"currency_id\\": '+str(listOptions['currency_id'])+'}' + +#if force: +# cid_balance = json.loads(commands.getoutput('echo '+cid_query+' | python '+RDIR+'/msc-balance.py --force '))['balance'] +#else: +# cid_balance = json.loads(commands.getoutput('echo '+cid_query+' | python '+RDIR+'/msc-balance.py'))['balance'] + +#get balance from omniwallet web interface +if CID == 1: + cid_balance=get_balance(FROMADDRESS, 'MSC',2) +elif CID == 2: + cid_balance=get_balance(FROMADDRESS, 'TMSC',2) +else: + cid_balance=get_balance(FROMADDRESS, 'SP'+str(CID),PTYPE) + +try: + float(cid_balance) +except ValueError: + print json.dumps({"status": "NOT OK", "error": cid_balance , "fix": "Make sure Balance data is up to date: "}) + exit() + +if float(cid_balance) < float(TOAMOUNT) and not force: + print json.dumps({"status": "NOT OK", "error": "Currency ID balance too low" , "fix": "Check Currency ID balance: "+str(cid_balance)}) + exit() + +#generate public key of bitcoin address from priv key +#validated = commands.getoutput('sx get-pubkey '+listOptions['transaction_from']) + +#get pubkey from blockchain +PUBLIC_KEY = commands.getoutput('sx get-pubkey '+FROMADDRESS) +#pubkey = commands.getoutput('echo '+listOptions['from_private_key']+' | sx pubkey') +if is_pubkey_valid(PUBLIC_KEY): + pass +else: + #check if we are broadcasting and try to generate pubkey + if BROADCAST >= 1: + PUBLIC_KEY = commands.getoutput('echo '+PRIVATE_KEY+' | sx pubkey') + if is_pubkey_valid(PUBLIC_KEY): + pass + else: + print json.dumps({ "status": "NOT OK", "error": "from address is invalid or hasn't been used on the network" , "fix": "Check from address or provide from address public key. Alternatively Set \'force\' flag to proceed without balance checks" }) + exit() + else: + print json.dumps({ "status": "NOT OK", "error": "from address is invalid or hasn't been used on the network" , "fix": "Check from address or provide from address public key. Alternatively Set \'force\' flag to proceed without balance checks" }) + exit() + +#get unspent tx to use for creating our input +tx_unspent_bal=0 +utxo_list=[] +for item in utxo_array: + if item['address'] == FROMADDRESS and item['lock'] == '1': + tx_unspent_bal += int(item['satoshi']) + utxo_list.append(item) + item['lock'] = 2 + if tx_unspent_bal >= fee_total: + break + +#real stuff happens here: + +# calculate change : +# (total input amount) - (broadcast fee) - (total transaction fee) + +change = int(tx_unspent_bal) - fee_total +if change < 0 or fee_total > available_balance and not force: + print json.dumps({ "status": "NOT OK", "error": "Not enough utxo tx's. Unspent "+str(tx_unspent_bal)+" out of "+str(available_balance)+" Pending Balance. Need at least "+str(fee_total), "fix": "Send some btc to the sending address or check db tx list to make sure they are accurate" }) + exit() + +#build multisig data address +transaction_type = 0 #simple send +sequence_number = 1 #packet number +#currency_id = 2 #MSC=1, TMSC=2 +currency_id = int(CID) +#amount = int(float(listOptions['msc_send_amt'])*1e8) #maran's impl used float?? +if PTYPE == 2: + amount = int(decimal.Decimal(TOAMOUNT)*decimal.Decimal("1e8")) +else: + amount = int(TOAMOUNT) + +cleartext_packet = ( + (hex(sequence_number)[2:].rjust(2,"0") + + hex(transaction_type)[2:].rjust(8,"0") + + hex(currency_id)[2:].rjust(8,"0") + + hex(amount)[2:].rstrip("L").rjust(16,"0") ).ljust(62,"0") ) + +sha_the_sender = hashlib.sha256(FROMADDRESS).hexdigest().upper()[0:-2] +# [0:-2] because we remove last ECDSA byte from SHA digest + +cleartext_bytes = map(ord,cleartext_packet.decode('hex')) #convert to bytes for xor +shathesender_bytes = map(ord,sha_the_sender.decode('hex')) #convert to bytes for xor + +msc_data_key = ''.join(map(lambda xor_target: hex(operator.xor(xor_target[0],xor_target[1]))[2:].rjust(2,"0"),zip(cleartext_bytes,shathesender_bytes))).upper() +#map operation that xor's the bytes from cleartext and shathesender together +#to obfuscate the cleartext packet, for more see Appendix Class B: +#https://github.com/faizkhan00/spec#class-b-transactions-also-known-as-the-multisig-method + +obfuscated = "02" + msc_data_key + "00" +#add key identifier and ecdsa byte to new mastercoin data key + +invalid = True +while invalid: + obfuscated_randbyte = obfuscated[:-2] + hex(random.randint(0,255))[2:].rjust(2,"0").upper() + #set the last byte to something random in case we generated an invalid pubkey + potential_data_address = pybitcointools.pubkey_to_address(obfuscated_randbyte) + if bool(commands.getoutput('sx validaddr '+potential_data_address)): + data_pubkey = obfuscated_randbyte + invalid = False +#make sure the public key is valid using pybitcointools, if not, regenerate +#the last byte of the key and try again + +#### Build transaction +#retrieve raw transaction data to spend it and add it to the input +validnextinputs="" +input_counter=0 +for utxo in utxo_list: + #prev_tx = json.loads(commands.getoutput('sx fetch-transaction '+utxo[0]+' | sx showtx -j')) + try: + prev_tx = json.loads(commands.getoutput('sx fetch-transaction '+utxo['tx_hash']+' | sx showtx -j')) + except ValueError: + print json.dumps({ "status": "NOT OK", "error": "Problem getting json format of utxo", "fix": "check utxo tx: "+str(utxo['tx_hash']) }) + exit() + + for output in prev_tx['outputs']: + if output['address'] == FROMADDRESS: + #validnextinputs+=str(" -i "+utxo[0]+":"+utxo[1]) + validnextinputs+=str(" -i "+str(utxo['tx_hash'])+":"+str(utxo['hash_index'])) + input_counter+=1 + break + +#validnextoutputs add the exodus address and the receipiant to the output +#If change is less than dust but greater than 0 send it to the receipiant: Bonus! +to_fee=output_minimum +if change < output_minimum and change > 0: + to_fee+=change + +validnextoutputs="-o 1EXoDusjGwvnjZUyKkxZ4UHEf77z6A5S4P:"+str(output_minimum)+" -o "+TOADDRESS+":"+str(to_fee) + +#if there's any leftover change above dust send it back to yourself +if change >= output_minimum: + validnextoutputs+=" -o "+FROMADDRESS+":"+str(change) + +#create a temp file for the unsigned raw tx and the signed tx data for sx +#format: sender_address.recpt_address.secs_since_1970.random_hex +unsigned_raw_tx_file = DATA+FROMADDRESS+'.'+TOADDRESS+'.'+commands.getoutput('date +%s')+'.'+hex(random.randint(0,255))[2:].rjust(2,"0") +signed_raw_tx_file = unsigned_raw_tx_file+'.signed' + +#store the unsigned tx data in the file +commands.getoutput('sx mktx '+unsigned_raw_tx_file+' '+validnextinputs+' '+validnextoutputs) + +#convert it to json for adding the msc multisig +try: + json_tx = json.loads(commands.getoutput('cat '+unsigned_raw_tx_file+' | sx showtx -j')) +except ValueError: + print json.dumps({ "status": "NOT OK", "error": "Problem getting json format of unsigned_raw_tx", "fix": "check filename: "+str(unsigned_raw_tx_file) }) + exit() + +#add multisig output to json object +json_tx['outputs'].append({ "value": output_minimum*2, "script": "1 [ " + PUBLIC_KEY + " ] [ " + data_pubkey.lower() + " ] 2 checkmultisig", "addresses": "null"}) + +#construct byte arrays for transaction +#assert to verify byte lengths are OK +version = ['01', '00', '00', '00' ] +assert len(version) == 4 + +num_inputs = [str(len(json_tx['inputs'])).rjust(2,"0")] +assert len(num_inputs) == 1 + +num_outputs = [str(len(json_tx['outputs'])).rjust(2,"0")] +assert len(num_outputs) == 1 + +sequence = ['FF', 'FF', 'FF', 'FF'] +assert len(sequence) == 4 + +blocklocktime = ['00', '00', '00', '00'] +assert len(blocklocktime) == 4 + +#prepare inputs data for byte packing +inputsdata = [] +for _input in json_tx['inputs']: + prior_out_str = _input['previous_output'].split(':') + #prior_input_txhash = _input['previous_output'].upper() + prior_input_txhash = prior_out_str[0].upper() + #prior_input_index = str(prior_out_str[1]).rjust(2,"0").ljust(8,"0") + prior_input_index = str(hex(int(prior_out_str[1]))[2: ]).rjust(2,"0").ljust(8,"0") + input_raw_signature = commands.getoutput('sx fetch-transaction '+prior_out_str[0]) + + prior_txhash_bytes = [prior_input_txhash[ start: start + 2 ] for start in range(0, len(prior_input_txhash), 2)][::-1] + assert len(prior_txhash_bytes) == 32 + + prior_txindex_bytes = [prior_input_index[ start: start + 2 ] for start in range(0, len(prior_input_index), 2)] + assert len(prior_txindex_bytes) == 4 + + len_scriptsig = ['%02x' % len(''.join([]).decode('hex').lower())] + assert len(len_scriptsig) == 1 + + inputsdata.append([prior_txhash_bytes, prior_txindex_bytes, len_scriptsig]) + +#prepare outputs for byte packing +output_hex = [] +for output in json_tx['outputs']: + value_hex = hex(int(float(output['value'])))[2:] + value_hex = value_hex.rjust(16,"0") + value_bytes = [value_hex[ start: start + 2 ].upper() for start in range(0, len(value_hex), 2)][::-1] + assert len(value_bytes) == 8 + + scriptpubkey_hex = commands.getoutput('sx rawscript '+output['script']) + scriptpubkey_bytes = [scriptpubkey_hex[start:start + 2].upper() for start in range(0, len(scriptpubkey_hex), 2)] + len_scriptpubkey = ['%02x' % len(''.join(scriptpubkey_bytes).decode('hex').lower())] + + output_hex.append([value_bytes, len_scriptpubkey, scriptpubkey_bytes] ) + +#join parts into final byte array +hex_transaction = version + num_inputs + +for _input in inputsdata: + hex_transaction += (_input[0] + _input[1] + _input[2] + sequence) + +hex_transaction += num_outputs + +for output in output_hex: + hex_transaction = hex_transaction + (output[0] + output[1] + output[2]) + +hex_transaction = hex_transaction + blocklocktime + +#prepare and populate unsigned_raw_tx_file +phash = ''.join(hex_transaction).lower() +commands.getoutput('echo '+phash+' > '+unsigned_raw_tx_file) + +#verify that transaction is valid +pht = commands.getoutput('echo '+phash+' | sx showtx -j') + +try: + fc = json.loads(pht) +except ValueError, e: + # invalid json + print json.dumps({ "status": "NOT OK", "error": "unsigned tx not valid/malformed: "+pht, "fix": "Check your inputs/json file"}) + exit() +else: + pass # valid json + +if BROADCAST > 0: +#We will now sign the first input using our private key. + DECODED_ADDR=commands.getoutput('echo '+PRIVATE_KEY+' | sx addr | sx decode-addr') + PREVOUT_SCRIPT=commands.getoutput('sx rawscript dup hash160 [ '+DECODED_ADDR+' ] equalverify checksig') + + #Loop through and sign all the tx's inputs so we can create the final signed tx + x=0 + commands.getoutput('cp '+unsigned_raw_tx_file+' '+unsigned_raw_tx_file+'.0') + while x < input_counter: + y=x+1 + SIGNATURE=commands.getoutput('echo '+PRIVATE_KEY+' | sx sign-input '+unsigned_raw_tx_file+' '+str(x)+' '+PREVOUT_SCRIPT) + SIGNATURE_AND_PUBKEY_SCRIPT=commands.getoutput('sx rawscript [ '+SIGNATURE+' ] [ '+PUBLIC_KEY+' ]') + commands.getoutput('sx set-input '+unsigned_raw_tx_file+'.'+str(x)+' '+str(x)+' '+SIGNATURE_AND_PUBKEY_SCRIPT+' > '+unsigned_raw_tx_file+'.'+str(y)) # the first input has index 0 + x+=1 + + commands.getoutput('cp '+unsigned_raw_tx_file+'.'+str(y)+' '+signed_raw_tx_file) + + #loop through external command 3 times in case it times out + z=0 + while z < 3: + tx_valid=commands.getoutput('sx validtx '+signed_raw_tx_file) + if "Success" in tx_valid: + z=4 + else: + z+=1 + + if "Success" not in tx_valid: + print json.dumps({ "status": "NOT OK", "error": "signed tx not valid/failed sx validation: "+tx_valid, "fix": "Check inputs/json file"}) + exit() + + try: + tx_hash=json.loads(commands.getoutput('cat '+signed_raw_tx_file+' | sx showtx -j'))['hash'] + except ValueError: + print json.dumps({ "status": "NOT OK", "error": "Problem getting json format of signed_raw_tx_file", "fix": "check filename: "+str(signed_raw_tx_file) }) + exit() + + #broadcast to obelisk node if requested + if BROADCAST == 2: + bcast_status=commands.getoutput('sx sendtx-obelisk '+signed_raw_tx_file) + else: + bcast_status="out:Created/Signed, Not Sent" +else: + bcast_status="out:Created, Not Signed/Not Sent" + tx_valid="TX Unsigned, not checked" + try: + tx_hash=json.loads(commands.getoutput('cat '+unsigned_raw_tx_file+' | sx showtx -j'))['hash'] + except ValueError: + print json.dumps({ "status": "NOT OK", "error": "Problem getting json format of unsigned_raw_tx_file", "fix": "check filename: "+str(unsigned_raw_tx_file) }) + exit() + + +#update out utxo files +write_utxo(utxo_array) + +if CLEAN == 0: + #clean nothing + pass +elif CLEAN == 1: + #remove intermediary unsigned files + x=0 + while x <= input_counter: + commands.getoutput('rm '+unsigned_raw_tx_file+'.'+str(x)) + x+=1 +elif CLEAN == 2: + #remove all unsigned files + x=0 + commands.getoutput('rm '+unsigned_raw_tx_file) + while x <= input_counter: + commands.getoutput('rm '+unsigned_raw_tx_file+'.'+str(x)) + x+=1 +elif CLEAN == 3: + #remove signed and unsigned files (everything) + commands.getoutput('rm '+unsigned_raw_tx_file) + commands.getoutput('rm '+unsigned_raw_tx_file+'.*') + signed_raw_tx_file='Cleaned/removed by request' + +#return our final output +if BROADCAST > 0: + print json.dumps({ "status": bcast_status.split(':')[1], "valid_check": tx_valid.split(':')[1].strip(), "hash": tx_hash, "st_file": signed_raw_tx_file}) +else: + print json.dumps({ "status": bcast_status.split(':')[1], "valid_check": tx_valid, "hash": tx_hash, "st_file": unsigned_raw_tx_file}) diff --git a/scripts/msc_utils_send.py b/scripts/msc_utils_send.py new file mode 100644 index 0000000..b113997 --- /dev/null +++ b/scripts/msc_utils_send.py @@ -0,0 +1,174 @@ +#!/usr/bin/python +#Function Definitions for send utils +import sys +import json +import time +import random +import hashlib +import operator +import commands, csv +import pybitcointools +import os, decimal +import requests, urlparse +from pycoin import encoding +from ecdsa import curves, ecdsa + +def is_pubkey_valid(pubkey): + try: + sec=encoding.binascii.unhexlify(pubkey) + public_pair=encoding.sec_to_public_pair(sec) + return curves.ecdsa.point_is_valid(ecdsa.generator_secp256k1, public_pair[0], public_pair[1]) + except TypeError: + return False + +#get all the utxo we are tracking +def get_utxo(): + list=[] + try: + with open('utxolist.csv') as f: + reader = csv.DictReader(f, delimiter=',') + for row in reader: + list.append(row) + except IOError: + commands.getoutput('touch utxolist.csv') + return list + +def write_utxo(listdata): + with open('utxolist.csv', "wb") as out_file: + writer = csv.DictWriter(out_file, delimiter=',', fieldnames=["address","tx_hash","hash_index","satoshi","block","lock"]) + writer.writeheader() + for row in listdata: + writer.writerow(row) + +#def get_utxo_db(address): +# con=None +# ROWS=[] +# try: +# con = psycopg2.connect(database=DBNAME, user=DBUSER) +# dbc = con.cursor(cursor_factory=psycopg2.extras.DictCursor) +# dbc.execute("select * from tx_utxo where lock='1' and address='%s' order by satoshi desc;" % str(address)) +# ROWS = dbc.fetchall() +# except psycopg2.DatabaseError, e: +# print json.dumps({"status": "DB Update Error", "error": e , "fix": "Check files/db status and try again "}) +# sys.exit(1) +# finally: +# if con: +# con.close() +# return ROWS + +#def update_db(txlist, status): +# con=None +# try: +# con = psycopg2.connect(database=DBNAME, user=DBUSER) +# dbc = con.cursor(cursor_factory=psycopg2.extras.DictCursor) +# if "Success" in status.split(':')[1]: +# for x in txlist: +# dbc.execute("update tx_utxo set lock='2' where id=%s;" % int(x['id'])) +# con.commit() +# else: +# for x in txlist: +# dbc.execute("update tx_utxo set lock='3' where id=%s;" % x['id']) +# con.commit() +# except psycopg2.DatabaseError, e: +# print json.dumps({"status": "DB Update Error", "error": e , "fix": "Check files/db status and try again "}) +# sys.exit(1) +# finally: +# if con: +# con.close() + +def get_balance(address, csym, div): + bal1=-3 + bal2=-4 + url = 'https://www.omniwallet.org/v1/address/addr/' + PAYLOAD = {'addr': address } + try: + tx_data= requests.post(url, data=PAYLOAD, verify=False).json() + for bal in tx_data['balance']: + if csym == bal['symbol']: + if div == 1: + bal1=('%.8f' % float(bal['value'])) + else: + fbal=float(bal['value'])/100000000 + bal1=('%.8f' % fbal) + except: # includes simplejson.decoder.JSONDecodeError + #print('Site 1 Unresponsive, Using 0 balance for now') + bal1=-1 + + url2 = 'https://www.masterchest.info/mastercoin_verify/adamtest.aspx?address='+address + try: + tx2_data=requests.get(url2, verify=False).json() + for bal in tx2_data['balance']: + if csym == bal['symbol']: + bal2= ('%.8f' % float(bal['value'])) + except: # includes simplejson.decoder.JSONDecodeError + #print('Site 2 Unresponsive, Using 0 balance for now') + bal2=-2 + + if bal1 == bal2: + #print(' Confirmed Balance of '+str(bal1)+' '+str(csym)+' for '+str(address)+' from 2 data points') + return bal1 + elif bal1 > 0 and bal2 < 0: + #print(' Balance mismatch, Site 1:['+str(bal1)+'] Site 2:['+str(bal2)+'] '+str(csym)+' for '+str(address)+' $ + return bal1 + else: + #print(' Balance mismatch, Site 1:['+str(bal1)+'] Site 2:['+str(bal2)+'] '+str(csym)+' for '+str(address)+' $ + return bal2 + + +def sync_utxo(address): + z=0 + while z < 3: + current_block = commands.getoutput('/usr/local/bin/sx fetch-last-height') + try: + int(current_block) + z=4 + except ValueError: + pass + z+=1 + + try: + int(current_block) + except ValueError: + return 1 + + utxo_list=[] + utxo_list=get_utxo() + updated_list=[] + for item in utxo_list: + if item['lock'] == '2' and int(item['block']) > int(current_block)-10: + updated_list.append(item) + lsi_array=[] + sx_mon = commands.getoutput('sx balance '+address).replace(" ", "").splitlines() + #Catch unknown sx output and skip this time + if len(sx_mon)==4: + address_satoshi_max=int(sx_mon[1].split(":")[1]) + #find largest spendable input from UTXO + #todo, add ability to use multiple smaller tx to do multi input funding + nws = (commands.getoutput('sx get-utxo '+address+" "+str(address_satoshi_max))).replace(" ", "") + #since sx doesn't provide a clean output we need to try and clean it up and get the usable outputs + for x in nws.splitlines(): + lsi_array.append(x.split(':')) + if len(lsi_array) > 5: + #data_utxo=[] + for i in range(0, len(lsi_array),8): + address=lsi_array[i][1] + tx_hash=lsi_array[i+1][1] + tx_hash_index=lsi_array[i+1][2] + block_height=lsi_array[i+2][1] + satoshi=lsi_array[i+3][1] + #print(address+" "+tx_hash+" "+tx_hash_index+" "+block_height+" "+satoshi) + if len(updated_list) == 0: + updated_list.append({'address':address,'tx_hash':tx_hash,'hash_index':tx_hash_index,'satoshi':satoshi,'block':current_block,'lock':1}) + else: + u=1 + for item in updated_list: + if item['address'] == address and item['tx_hash'] == tx_hash and item['hash_index'] == tx_hash_index: + u=0 + break + if u == 1: + updated_list.append({'address':address,'tx_hash':tx_hash,'hash_index':tx_hash_index,'satoshi':satoshi,'block':current_block,'lock':1}) + write_utxo(updated_list) + else: + pass + #print ('No new transactions to update') + return 0 diff --git a/scripts/redeemMultiSig.py b/scripts/redeemMultiSig.py new file mode 100644 index 0000000..34aec78 --- /dev/null +++ b/scripts/redeemMultiSig.py @@ -0,0 +1,84 @@ +#get balance +import sys +import json +import time +import random +import hashlib +import operator +import bitcoinrpc +import pybitcointools +from decimal import * + + +if len(sys.argv) > 1 and "--force" not in sys.argv: + print "Takes a list of bitcoind options, addresses and a send amount and outputs a transaction in JSON \nUsage: cat generateTx.json | python generateTx.py\nRequires a fully-synced *local* bitcoind node" + exit() + +if "--force" in sys.argv: + #WARNING: '--force' WILL STEAL YOUR BITCOINS IF YOU DON KNOW WHAT YOU'RE DOING + force=True +else: + force=False + +JSON = sys.stdin.readlines() + +listOptions = json.loads(str(''.join(JSON))) + +#sort out whether using local or remote API +conn = bitcoinrpc.connect_to_local() + +#check if private key provided produces correct address +address = pybitcointools.privkey_to_address(listOptions['from_private_key']) +if not address == listOptions['transaction_from'] and not force: + print json.dumps({ "status": "NOT OK", "error": "Private key does not produce same address as \'transaction from\'" , "fix": "Set \'force\' flag to proceed without address checks" }) + exit() + +#see if account has been added +account = conn.getaccount(listOptions['transaction_from']) +if account == "" and not force: + _time = str(int(time.time())) + private = listOptions['from_private_key'] + print json.dumps({ "status": "NOT OK", "error": "Couldn\'t find address in wallet, please run \'fix\' on the machine", "fix": "bitcoind importprivkey " + private + " imported_" + _time }) + +#calculate minimum unspent balance +available_balance = Decimal(0.0) + +validated = conn.validateaddress(listOptions['transaction_from']) +if 'pubkey' in validated.__dict__: + pubkey = validated.pubkey + +unspent_tx = [] +error_tx = [] +processed_txes = [] +import commands +for transaction in conn.listtransactions(account,999999): + if transaction.txid not in processed_txes: + processed_txes.append(transaction.txid) + try: + tx = conn.getrawtransaction(transaction.txid) + for output in tx.vout: + if output['scriptPubKey']['type']=='multisig' and pubkey in output['scriptPubKey']['asm'].split(' '): + if commands.getoutput('bitcoind gettxout ' + str(transaction.txid) + ' ' + str(output['n'])) != '': + #print output['value'] + #exit() + #unspent_tx.append([transaction.txid, output['n']]) + + unspent_tx.append([ { "txid": transaction.txid, "vout": output['n']}, output['value'] ]) + except Exception,e: + error_tx.append(transaction.txid) + #Transaction probably not found, don't worry + pass + +validnextinputs = [] +total_val = float(0.0) +for input_ in unspent_tx: + validnextinputs.append(input_[0]) + total_val += float(input_[1]) + +#print total_val +unsigned_raw_tx = conn.createrawtransaction(validnextinputs, { listOptions['transaction_to'] : float(total_val)-listOptions['fee'] } ) +signed_transaction = conn.signrawtransaction(unsigned_raw_tx) + +#output final product as JSON +print json.dumps({ "rawtransactions": signed_transaction}) + diff --git a/scripts/repair.py b/scripts/repair.py new file mode 100644 index 0000000..c507e4c --- /dev/null +++ b/scripts/repair.py @@ -0,0 +1,22 @@ +import glob,os,json + +sorted_tx=[] +for each in glob.glob('./tx/*.json'): + data=json.loads(open(each).readline())[0] + if data['invalid'] != False or data['index'][:8]=='(mailbox': + sorted_tx.append((each, data['invalid'],data['block'])) + + +for each in sorted_tx: + print each +sorted_tx=sorted(sorted_tx, key=lambda x: x[2]) +print len(sorted_tx) +for each in sorted_tx: + print each + redo=False + if each[1][:3]=='non': + redo=True + each=each[0][5:-5] + os.popen('python $TOOLSDIR/msc_parse.py -s 0 -d -t '+each+' -r $TOOLSDIR 2>&1 > parsed2.log') + if redo: + os.popen('python $TOOLSDIR/msc_parse.py -s 0 -d -t '+each+' -r $TOOLSDIR 2>&1 > parsed2.log')