def test_router_aliasing(self): """ The router will try to re-use existing adapter instances. """ wrapper1 = RoutingWrapper('http://localhost:14265') adapter_default = wrapper1.adapter # The router will try to minimize the number of adapter instances # that it creates from URIs. wrapper1.add_route('alpha', 'http://localhost:14265').add_route( 'bravo', 'http://localhost:14265') # Two routes with the same URI => same adapter instance. self.assertIs( wrapper1.get_adapter('bravo'), wrapper1.get_adapter('alpha'), ) # "127.0.0.1" != "localhost", so separate adapters created. wrapper1.add_route('charlie', 'http://127.0.0.1:14265') self.assertIsNot( wrapper1.get_adapter('charlie'), wrapper1.get_adapter('alpha'), ) # Providing an adapter instance bypasses the whole setup. wrapper1.add_route('delta', HttpAdapter('http://localhost:14265')) self.assertIsNot( wrapper1.get_adapter('delta'), wrapper1.get_adapter('alpha'), ) # The default adapter is always kept separate, even if it URI # matches a routing adapter. self.assertIsNot( wrapper1.get_adapter('foo'), wrapper1.get_adapter('alpha'), ) # Aliased adapters are not shared between routers. wrapper2 = RoutingWrapper(adapter_default) wrapper2.add_route('echo', 'http://localhost:14265') self.assertIsNot( wrapper2.get_adapter('echo'), wrapper1.get_adapter('alpha'), )
def test_router_aliasing(self): """ The router will try to re-use existing adapter instances. """ wrapper1 = RoutingWrapper('http://localhost:14265') adapter_default = wrapper1.adapter # The router will try to minimize the number of adapter instances # that it creates from URIs. wrapper1\ .add_route('alpha', 'http://localhost:14265')\ .add_route('bravo', 'http://localhost:14265')\ # Two routes with the same URI => same adapter instance. self.assertIs( wrapper1.get_adapter('bravo'), wrapper1.get_adapter('alpha'), ) # "127.0.0.1" != "localhost", so separate adapters created. wrapper1.add_route('charlie', 'http://127.0.0.1:14265') self.assertIsNot( wrapper1.get_adapter('charlie'), wrapper1.get_adapter('alpha'), ) # Providing an adapter instance bypasses the whole setup. wrapper1.add_route('delta', HttpAdapter('http://localhost:14265')) self.assertIsNot( wrapper1.get_adapter('delta'), wrapper1.get_adapter('alpha'), ) # The default adapter is always kept separate, even if it URI # matches a routing adapter. self.assertIsNot( wrapper1.get_adapter('foo'), wrapper1.get_adapter('alpha'), ) # Aliased adapters are not shared between routers. wrapper2 = RoutingWrapper(adapter_default) wrapper2.add_route('echo', 'http://localhost:14265') self.assertIsNot( wrapper2.get_adapter('echo'), wrapper1.get_adapter('alpha'), )
def batch_transfer(filename, node_uri, seed, amount_of_seeds=100, amount_per_seed=10000, batch_size=25, depth=3, tag='GIFT', message='', pow_node_uri=None): needed_funds = amount_of_seeds * amount_per_seed print('You are about to spend %s iota spread out over %s addresses.' % (needed_funds, amount_of_seeds)) print('Checking your seeds balance...') if pow_node_uri: router = RoutingWrapper(node_uri) router.add_route('attachToTangle', pow_node_uri) api = Iota(router, seed) else: api = Iota(node_uri, seed) inputs = api.get_inputs() balance = inputs['totalBalance'] if balance < needed_funds: print( "You don't have enough funds available on your SEED, please make sure your seed has at least %si available!" % needed_funds) return print( 'You have enough available to transfer the %si, Generating %d seeds and addresses now...' % (needed_funds, amount_of_seeds)) seedlist = [] for i in range(amount_of_seeds): random_seed = ''.join( [choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ9') for x in range(81)]) gen = AddressGenerator(random_seed) new_addr = gen.get_addresses(0, 1, 2)[0] seedlist.append((random_seed, new_addr)) print('.', sep='', end='', flush=True) print('\n') with open(filename, 'w') as fh: writer = csv.writer(fh) writer.writerow(['Seed', 'Address', 'Iota']) for gseed, gaddr in seedlist: writer.writerow([gseed, gaddr, amount_per_seed]) print('All seeds and addresses are now available in %s!' % filename) amount_of_bundles = (amount_of_seeds // batch_size) + 1 if amount_of_seeds % batch_size == 0: amount_of_bundles -= 1 print( 'We will generate and send %d bundles containing %d transactions per bundle max, this can take a while...' % (amount_of_bundles, batch_size)) from_addr = None for i in range(amount_of_bundles): sliced = seedlist[i * batch_size:(i + 1) * batch_size] print('Starting transfer of bundle %d containing %d seeds...' % (i + 1, len(sliced))) transfers = [] for gseed, gaddr in sliced: transfers.append( ProposedTransaction( address=gaddr, value=amount_per_seed, tag=Tag(tag), message=TryteString.from_string(message), )) bundle = api.send_transfer(depth=depth, transfers=transfers) for tx in bundle['bundle'].transactions: if tx.current_index == tx.last_index: print('Remainder:', tx.current_index, tx.address, tx.value) from_addr = tx.address if amount_per_seed == 0: continue print( 'Waiting for the TX to confirm and the remainder address (%s) to fill...' % tx.address) while True: balances = api.get_balances([tx.address], 100) if balances['balances'][0] > 0: break else: print('...', sep='', end='', flush=True) sleep(5) print('\n') print('Transfer complete.') print('All done!')
""" Simple example using the RoutingWrapper to route API requests to different nodes. References: - https://pyota.readthedocs.io/en/develop/adapters.html#routingwrapper """ from iota import Address, Iota, ProposedTransaction, Tag, TryteString from iota.adapter.wrappers import RoutingWrapper # Send PoW requests to local node. # All other requests go to light wallet node. router = RoutingWrapper('http://service.iotasupport.com:14265') router.add_route('attachToTangle', 'http://localhost:14265') api = Iota(router, seed=b'SEED9GOES9HERE') # Example of sending a transfer using the adapter. bundle = api.send_transfer( depth=3, transfers=[ ProposedTransaction( # Recipient of the transfer. address=Address( # b'TESTVALUE9DONTUSEINPRODUCTION99999FBFFTG' # b'QFWEHEL9KCAFXBJBXGE9HID9XCOHFIDABHDG9AHDR' ), # Amount of IOTA to transfer. # This value may be zero.
def test_router_aliasing(self): """ The router will try to re-use existing adapter instances. """ wrapper1 = RoutingWrapper('http://localhost:14265') print_var_type_n_val(var001 = wrapper1, pointer = "#2345trezGH-(")#2345trezGH-( # Value: # # <iota.adapter.wrappers.RoutingWrapper object at 0x0000024C271B17B8> # Type: <class 'iota.adapter.wrappers.RoutingWrapper'> adapter_default = wrapper1.adapter print_var_type_n_val(var001 = adapter_default, pointer = "#SDFGnbvc1234098QSDnbe")#SDFGnbvc1234098QSDnbe # Value: # # <iota.adapter.HttpAdapter object at 0x0000024C25E7AB70> # Type: <class 'iota.adapter.HttpAdapter'> # The router will try to minimize the number of adapter instances # that it creates from URIs. wrapper1\ .add_route('alpha', 'http://localhost:14265')\ .add_route('bravo', 'http://localhost:14265')\ print_var_type_n_val(var001 = wrapper1, pointer = "#2345trezGH2345YTRE")#2345trezGH2345YTRE # Value: # # <iota.adapter.wrappers.RoutingWrapper object at 0x000001601AD6FD68> # Type: <class 'iota.adapter.wrappers.RoutingWrapper'> # Two routes with the same URI => same adapter instance. self.assertIs( wrapper1.get_adapter('bravo'), wrapper1.get_adapter('alpha'), ) # "127.0.0.1" != "localhost", so separate adapters created. wrapper1.add_route('charlie', 'http://127.0.0.1:14265') self.assertIsNot( wrapper1.get_adapter('charlie'), wrapper1.get_adapter('alpha'), ) # Providing an adapter instance bypasses the whole setup. wrapper1.add_route('delta', HttpAdapter('http://localhost:14265')) self.assertIsNot( wrapper1.get_adapter('delta'), wrapper1.get_adapter('alpha'), ) # The default adapter is always kept separate, even if it URI # matches a routing adapter. self.assertIsNot( wrapper1.get_adapter('foo'), wrapper1.get_adapter('alpha'), ) # Aliased adapters are not shared between routers. wrapper2 = RoutingWrapper(adapter_default) wrapper2.add_route('echo', 'http://localhost:14265') self.assertIsNot( wrapper2.get_adapter('echo'), wrapper1.get_adapter('alpha'), )