Transaction #18636

Hash 0b73bdef6251a9e71db0db65c1701cac23657e417deeba7f1ef015c4d80457dd
Status Success
Timestamp 249 days ago - 8/23/2023, 5:35:29 PM UTC+0
Block 18636
Stamps Used 539
Burned Fee 0.03189349 TAU
From c674a8a398fb81765277f77fc11464496dae94632de18eea1d69bf0c7894ad03 
Contract Name submission
Function Name submit_contract

Additional Info
Nonce 3
Processor c674a8a398fb81765277f77fc11464496dae94632de18eea1d69bf0c7894ad03
Signature f4185ec8b4329d9dff8f0c3b24dbc5573e44685c7de6c26781751b4a76df8132f784ac7f2a44ebe5438f6411f64fa16acf3d4f420c2c62a8cd9cd744fba81403
Stamps Supplied 999
Stamps per TAU 169

Kwargs

code I = importlib token_interface = [I.Func('transfer', args=('amount', 'to')), I.Func( 'approve', args=('amount', 'to')), I.Func('transfer_from', args=( 'amount', 'to', 'main_account'))] pools = Hash(default_value=0) lp_points = Hash(default_value=0) config = Hash(default_value=0) fee_rewards = Hash(default_value=0) created_pools = Variable() pool_investors = Hash(default_value=[]) @construct def seed(): config['owner'] = ctx.caller created_pools.set(0) @export def create_pool(tokens: list, fee: float): assert len(tokens) == 2, 'You need to have 2 tokens in a pool' for i in range(len(tokens)): token = tokens[i] token_module = I.import_module(token['contract']) assert I.enforce_interface(token_module, token_interface ), 'Invalid token interface!' assert token['amount'] > 0, 'Amount must be greater than 0' token_module.transfer_from( amount=token['amount'], to=ctx.this, main_account=ctx.caller) pool_id = created_pools.get() pool = {'tokens': tokens, 'total_lp_points': 100, 'fee': fee} pools[pool_id] = pool lp_points[pool_id, ctx.caller] = 100 pool_investors[pool_id] = [ctx.caller] created_pools.set(pool_id + 1) return pool_id @export def add_liquidity(pool_id: int, token_contract: str, amount: float): pool = pools[pool_id] assert amount > 0, 'Amount must be greater than 0' assert token_contract in [token['contract'] for token in pool['tokens']], 'Invalid token contract' selected_token = [token for token in pool['tokens'] if token['contract'] == token_contract][0] other_token = [token for token in pool['tokens'] if token['contract'] != token_contract][0] selected_token_module = I.import_module(selected_token['contract']) other_token_module = I.import_module(other_token['contract']) selected_token_module.transfer_from( amount=amount, to=ctx.this, main_account=ctx.caller) points_per_currency = pool['total_lp_points'] / selected_token['amount'] pool['total_lp_points'] += amount * points_per_currency lp_points[pool_id, ctx.caller] += amount * points_per_currency other_token_amount = amount * other_token['amount'] / selected_token['amount'] other_token_module.transfer_from( amount=other_token_amount, to=ctx.this, main_account=ctx.caller) selected_token['amount'] += amount other_token['amount'] += other_token_amount pools[pool_id] = pool temp = pool_investors[pool_id] if ctx.caller not in temp: temp.append(ctx.caller) pool_investors[pool_id] = temp return amount * points_per_currency @export def remove_liquidity(pool_id: int, amount: float): pool = pools[pool_id] assert amount > 0, 'Amount must be greater than 0' for i in range(len(pool['tokens'])): token = pool['tokens'][i] token_module = I.import_module(token['contract']) token_module.transfer( amount=amount * token['amount'] / pool['total_lp_points'], to=ctx.caller) pool['tokens'][i]['amount'] -= amount * \ token['amount'] / pool['total_lp_points'] lp_points[pool_id, ctx.caller] -= amount pool['total_lp_points'] -= amount pools[pool_id] = pool temp = pool_investors[pool_id] if ctx.caller in temp and lp_points[pool_id, ctx.caller] == 0: temp.remove(ctx.caller) pool_investors[pool_id] = temp return amount @export def swap(pool_id: int, token_from: str, token_to: str, amount: float, max_slippage: float = 10): pool = pools[pool_id] assert token_from in [token['contract'] for token in pool['tokens']], 'Invalid token_from' assert token_to in [token['contract'] for token in pool['tokens']], 'Invalid token_to' assert amount > 0, 'Amount must be greater than 0' assert max_slippage > 0, 'Max slippage must be greater than 0' assert max_slippage < 100, 'Max slippage must be less than 100' token_from_module = I.import_module(token_from) token_to_module = I.import_module(token_to) from_pool_token_entry = [token for token in pool['tokens'] if token['contract'] == token_from][0] to_pool_token_entry = [token for token in pool['tokens'] if token['contract'] == token_to][0] k = from_pool_token_entry['amount'] * to_pool_token_entry['amount'] new_from_pool_token_amount = from_pool_token_entry['amount'] + amount new_to_pool_token_amount = k / new_from_pool_token_amount old_to_pool_token_amount = k / from_pool_token_entry['amount'] token_to_amount = to_pool_token_entry['amount'] - new_to_pool_token_amount token_from_amount = amount token_from_module.transfer_from( amount=token_from_amount, to=ctx.this, main_account=ctx.caller) token_to_amount_without_fee_deducted = token_to_amount fee = token_to_amount * pool['fee'] / 100 token_to_amount -= fee assert abs(token_to_amount / old_to_pool_token_amount * 100 - 100) < max_slippage, 'Slippage exceeded' token_to_module.transfer( amount=token_to_amount, to=ctx.caller) owner_fee = fee / 5 fee -= owner_fee total_lp_points = pool['total_lp_points'] fee_rewards[pool_id, config['owner'], token_to] += owner_fee for investor in pool_investors[pool_id]: if config['owner'] != investor: fee_rewards[pool_id, investor, token_to] += fee * lp_points[pool_id, investor] / (total_lp_points - lp_points[pool_id, config['owner']]) to_pool_token_entry['amount'] -= token_to_amount_without_fee_deducted from_pool_token_entry['amount'] += token_from_amount pools[pool_id] = pool return token_to_amount @export def claim_fee_rewards(pool_id: int, token: str): assert token in [token['contract'] for token in pools[pool_id]['tokens']], 'Invalid token' token_module = I.import_module(token) token_module.transfer( amount=fee_rewards[pool_id, ctx.caller, token], to=ctx.caller) fee_rewards[pool_id, ctx.caller, token] = 0 @export def get_pool(pool_id: int): return pools[pool_id] @export def get_lp_points(pool_id: int, account: str): return lp_points[pool_id, account] @export def get_fee_rewards(pool_id: int, account: str, token: str): return fee_rewards[pool_id, account, token] @export def get_config(): return config @export def change_owner(new_owner: str): assert ctx.caller == config['owner'], 'Only owner can change owner' config['owner'] = new_owner
name con_test_swap2

State Changes

Contract con_test_swap2
Variable __code__
New Value I = importlib token_interface = [I.Func('transfer', args=('amount', 'to')), I.Func( 'approve', args=('amount', 'to')), I.Func('transfer_from', args=( 'amount', 'to', 'main_account'))] __pools = Hash(default_value=0, contract='con_test_swap2', name='pools') __lp_points = Hash(default_value=0, contract='con_test_swap2', name='lp_points' ) __config = Hash(default_value=0, contract='con_test_swap2', name='config') __fee_rewards = Hash(default_value=0, contract='con_test_swap2', name= 'fee_rewards') __created_pools = Variable(contract='con_test_swap2', name='created_pools') __pool_investors = Hash(default_value=[], contract='con_test_swap2', name= 'pool_investors') def ____(): __config['owner'] = ctx.caller __created_pools.set(0) @__export('con_test_swap2') def create_pool(tokens: list, fee: float): assert len(tokens) == 2, 'You need to have 2 tokens in a pool' for i in range(len(tokens)): token = tokens[i] token_module = I.import_module(token['contract']) assert I.enforce_interface(token_module, token_interface ), 'Invalid token interface!' assert token['amount'] > 0, 'Amount must be greater than 0' token_module.transfer_from(amount=token['amount'], to=ctx.this, main_account=ctx.caller) pool_id = __created_pools.get() pool = {'tokens': tokens, 'total_lp_points': 100, 'fee': fee} __pools[pool_id] = pool __lp_points[pool_id, ctx.caller] = 100 __pool_investors[pool_id] = [ctx.caller] __created_pools.set(pool_id + 1) return pool_id @__export('con_test_swap2') def add_liquidity(pool_id: int, token_contract: str, amount: float): pool = __pools[pool_id] assert amount > 0, 'Amount must be greater than 0' assert token_contract in [token['contract'] for token in pool['tokens'] ], 'Invalid token contract' selected_token = [token for token in pool['tokens'] if token['contract' ] == token_contract][0] other_token = [token for token in pool['tokens'] if token['contract'] != token_contract][0] selected_token_module = I.import_module(selected_token['contract']) other_token_module = I.import_module(other_token['contract']) selected_token_module.transfer_from(amount=amount, to=ctx.this, main_account=ctx.caller) points_per_currency = pool['total_lp_points'] / selected_token['amount'] pool['total_lp_points'] += amount * points_per_currency __lp_points[pool_id, ctx.caller] += amount * points_per_currency other_token_amount = amount * other_token['amount'] / selected_token[ 'amount'] other_token_module.transfer_from(amount=other_token_amount, to=ctx.this, main_account=ctx.caller) selected_token['amount'] += amount other_token['amount'] += other_token_amount __pools[pool_id] = pool temp = __pool_investors[pool_id] if ctx.caller not in temp: temp.append(ctx.caller) __pool_investors[pool_id] = temp return amount * points_per_currency @__export('con_test_swap2') def remove_liquidity(pool_id: int, amount: float): pool = __pools[pool_id] assert amount > 0, 'Amount must be greater than 0' for i in range(len(pool['tokens'])): token = pool['tokens'][i] token_module = I.import_module(token['contract']) token_module.transfer(amount=amount * token['amount'] / pool[ 'total_lp_points'], to=ctx.caller) pool['tokens'][i]['amount'] -= amount * token['amount'] / pool[ 'total_lp_points'] __lp_points[pool_id, ctx.caller] -= amount pool['total_lp_points'] -= amount __pools[pool_id] = pool temp = __pool_investors[pool_id] if ctx.caller in temp and __lp_points[pool_id, ctx.caller] == 0: temp.remove(ctx.caller) __pool_investors[pool_id] = temp return amount @__export('con_test_swap2') def swap(pool_id: int, token_from: str, token_to: str, amount: float, max_slippage: float=10): pool = __pools[pool_id] assert token_from in [token['contract'] for token in pool['tokens'] ], 'Invalid token_from' assert token_to in [token['contract'] for token in pool['tokens'] ], 'Invalid token_to' assert amount > 0, 'Amount must be greater than 0' assert max_slippage > 0, 'Max slippage must be greater than 0' assert max_slippage < 100, 'Max slippage must be less than 100' token_from_module = I.import_module(token_from) token_to_module = I.import_module(token_to) from_pool_token_entry = [token for token in pool['tokens'] if token[ 'contract'] == token_from][0] to_pool_token_entry = [token for token in pool['tokens'] if token[ 'contract'] == token_to][0] k = from_pool_token_entry['amount'] * to_pool_token_entry['amount'] new_from_pool_token_amount = from_pool_token_entry['amount'] + amount new_to_pool_token_amount = k / new_from_pool_token_amount old_to_pool_token_amount = k / from_pool_token_entry['amount'] token_to_amount = to_pool_token_entry['amount'] - new_to_pool_token_amount token_from_amount = amount token_from_module.transfer_from(amount=token_from_amount, to=ctx.this, main_account=ctx.caller) token_to_amount_without_fee_deducted = token_to_amount fee = token_to_amount * pool['fee'] / 100 token_to_amount -= fee assert abs(token_to_amount / old_to_pool_token_amount * 100 - 100 ) < max_slippage, 'Slippage exceeded' token_to_module.transfer(amount=token_to_amount, to=ctx.caller) owner_fee = fee / 5 fee -= owner_fee total_lp_points = pool['total_lp_points'] __fee_rewards[pool_id, __config['owner'], token_to] += owner_fee for investor in __pool_investors[pool_id]: if __config['owner'] != investor: __fee_rewards[pool_id, investor, token_to] += fee * __lp_points[ pool_id, investor] / (total_lp_points - __lp_points[pool_id, __config['owner']]) to_pool_token_entry['amount'] -= token_to_amount_without_fee_deducted from_pool_token_entry['amount'] += token_from_amount __pools[pool_id] = pool return token_to_amount @__export('con_test_swap2') def claim_fee_rewards(pool_id: int, token: str): assert token in [token['contract'] for token in __pools[pool_id]['tokens'] ], 'Invalid token' token_module = I.import_module(token) token_module.transfer(amount=__fee_rewards[pool_id, ctx.caller, token], to=ctx.caller) __fee_rewards[pool_id, ctx.caller, token] = 0 @__export('con_test_swap2') def get_pool(pool_id: int): return __pools[pool_id] @__export('con_test_swap2') def get_lp_points(pool_id: int, account: str): return __lp_points[pool_id, account] @__export('con_test_swap2') def get_fee_rewards(pool_id: int, account: str, token: str): return __fee_rewards[pool_id, account, token] @__export('con_test_swap2') def get_config(): return __config @__export('con_test_swap2') def change_owner(new_owner: str): assert ctx.caller == __config['owner'], 'Only owner can change owner' __config['owner'] = new_owner
 
Contract con_test_swap2
Variable __compiled__
New Value e30000000000000000000000000800000040000000737a01000065005a0165016a026400643264038d0265016a026404643364038d0265016a026405643464038d0267035a036504640764086409640a8d035a05650464076408640b640a8d035a06650464076408640c640a8d035a07650464076408640d640a8d035a0865096408640e640f8d025a0a6504670064086410640a8d035a0b6411641284005a0c650d64088301650e650f64139c0264146415840483015a10650d6408830165116512650f64169c0364176418840483015a13650d640883016511650f64199c02641a641b840483015a14650d640883016435651165126512650f650f641d9c05641e641f840583015a15650d640883016511651264209c0264216422840483015a16650d64088301651164239c0164246425840483015a17650d640883016511651264269c0264276428840483015a18650d6408830165116512651264299c03642a642b840483015a19650d64088301642c642d840083015a1a650d640883016512642e9c01642f6430840483015a1b643153002936da087472616e73666572da06616d6f756e74da02746f2901da0461726773da07617070726f7665da0d7472616e736665725f66726f6dda0c6d61696e5f6163636f756e74e900000000da0e636f6e5f746573745f7377617032da05706f6f6c732903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da096c705f706f696e7473da06636f6e666967da0b6665655f72657761726473da0d637265617465645f706f6f6c732902720c000000720d000000da0e706f6f6c5f696e766573746f7273630000000000000000000000000300000043000000731800000074006a01740264013c0074036a046402830101006400530029034eda056f776e657272080000002905da03637478da0663616c6c6572da085f5f636f6e666967da0f5f5f637265617465645f706f6f6c73da03736574a90072190000007219000000da00da045f5f5f5f10000000730400000000010a01721b0000002902da06746f6b656e73da0366656563020000000000000007000000060000004300000073c800000074007c00830164016b0273147401640283018201786a740274007c008301830144005d5a7d027c007c0219007d0374036a047c036403190083017d0474036a057c0474068302735074016404830182017c036405190064066b04736474016407830182017c046a077c036405190074086a0974086a0a64088d03010071225700740b6a0c83007d057c0064097c01640a9c037d067c06740d7c053c006409740e7c0574086a0a66023c0074086a0a6701740f7c053c00740b6a107c05640b1700830101007c055300290c4ee9020000007a23596f75206e65656420746f2068617665203220746f6b656e7320696e206120706f6f6c720c0000007a18496e76616c696420746f6b656e20696e7465726661636521720200000072080000007a1d416d6f756e74206d7573742062652067726561746572207468616e20302903720200000072030000007207000000e9640000002903721c000000da0f746f74616c5f6c705f706f696e7473721d000000e9010000002911da036c656eda0e417373657274696f6e4572726f72da0572616e6765da0149da0d696d706f72745f6d6f64756c65da11656e666f7263655f696e74657266616365da0f746f6b656e5f696e7465726661636572060000007214000000da047468697372150000007217000000da03676574da075f5f706f6f6c73da0b5f5f6c705f706f696e7473da105f5f706f6f6c5f696e766573746f727372180000002907721c000000721d000000da0169da05746f6b656eda0c746f6b656e5f6d6f64756c65da07706f6f6c5f6964da04706f6f6c72190000007219000000721a000000da0b6372656174655f706f6f6c15000000732000000000021401120108010e010e01060114010e010e0108010c0108010e010c010e01723300000029037231000000da0e746f6b656e5f636f6e747261637472020000006303000000000000000b0000000500000003000000735801000074007c0019007d037c0264016b047318740164028301820188006403640484007c0364051900440083016b0673367401640683018201870066016407640484087c036405190044008301640119007d04870066016408640484087c036405190044008301640119007d0574026a037c046409190083017d0674026a037c056409190083017d077c066a047c0274056a0674056a07640a8d0301007c03640b19007c04640c19001b007d087c03640b050019007c027c081400370003003c0074087c0074056a076602050019007c027c081400370003003c007c027c05640c190014007c04640c19001b007d097c076a047c0974056a0674056a07640a8d0301007c04640c050019007c02370003003c007c05640c050019007c09370003003c007c0374007c003c0074097c0019007d0a74056a077c0a6b07900172507c0a6a0a74056a07830101007c0a74097c003c007c027c0814005300290d4e72080000007a1d416d6f756e74206d7573742062652067726561746572207468616e2030630100000000000000020000000400000053000000731400000067007c005d0c7d017c01640019009102710453002901720c00000072190000002902da022e30722f00000072190000007219000000721a000000fa0a3c6c697374636f6d703e2d000000730200000006007a216164645f6c69717569646974792e3c6c6f63616c733e2e3c6c697374636f6d703e721c0000007a16496e76616c696420746f6b656e20636f6e7472616374630100000000000000020000000400000013000000731c00000067007c005d147d017c016400190088006b0272047c019102710453002901720c000000721900000029027235000000722f000000290172340000007219000000721a00000072360000002f000000730400000006000801630100000000000000020000000400000013000000731c00000067007c005d147d017c016400190088006b0372047c019102710453002901720c000000721900000029027235000000722f000000290172340000007219000000721a000000723600000031000000730400000006000801720c000000290372020000007203000000720700000072200000007202000000290b722b0000007223000000722500000072260000007206000000721400000072290000007215000000722c000000722d000000da06617070656e64290b7231000000723400000072020000007232000000da0e73656c65637465645f746f6b656eda0b6f746865725f746f6b656eda1573656c65637465645f746f6b656e5f6d6f64756c65da126f746865725f746f6b656e5f6d6f64756c65da13706f696e74735f7065725f63757272656e6379da126f746865725f746f6b656e5f616d6f756e74da0474656d70721900000029017234000000721a000000da0d6164645f6c69717569646974792900000073360000000002080110011801060114010601140106010e010e010a010a01100114011a010c0108010a010a0110011001080108010c010c010801723f00000029027231000000720200000063020000000000000007000000070000004300000073fe00000074007c0019007d027c0164016b0473187401640283018201787a740274037c02640319008301830144005d667d037c02640319007c0319007d0474046a057c046404190083017d057c056a067c017c046405190014007c02640619001b0074076a0864078d0201007c02640319007c0319006405050019007c017c046405190014007c02640619001b00380003003c00712a570074097c0074076a086602050019007c01380003003c007c026406050019007c01380003003c007c0274007c003c00740a7c0019007d0674076a087c066b0672fa74097c0074076a086602190064016b0272fa7c066a0b74076a08830101007c06740a7c003c007c01530029084e72080000007a1d416d6f756e74206d7573742062652067726561746572207468616e2030721c000000720c00000072020000007220000000290272020000007203000000290c722b00000072230000007224000000722200000072250000007226000000720100000072140000007215000000722c000000722d000000da0672656d6f76652907723100000072020000007232000000722e000000722f0000007230000000723e00000072190000007219000000721a000000da1072656d6f76655f6c697175696469747948000000732200000000020801100116010c010e01100110011c01100116011001080108011c010c0108017241000000e90a00000029057231000000da0a746f6b656e5f66726f6dda08746f6b656e5f746f7202000000da0c6d61785f736c697070616765630500000000000000150000000a00000003000000731402000074007c0019007d0588006401640284007c0564031900440083016b067326740164048301820188016405640284007c0564031900440083016b06734474016406830182017c0364076b04735474016408830182017c0464076b04736474016409830182017c04640a6b0073747401640b8301820174026a03880083017d0674026a03880183017d0787006601640c640284087c056403190044008301640719007d0887016601640d640284087c056403190044008301640719007d097c08640e19007c09640e190014007d0a7c08640e19007c0317007d0b7c0a7c0b1b007d0c7c0a7c08640e19001b007d0d7c09640e19007c0c18007d0e7c037d0f7c066a047c0f74056a0674056a07640f8d0301007c0e7d107c0e7c05641019001400640a1b007d117c0e7c1138007d0e74087c0e7c0d1b00640a1400640a180083017c046b009001734e74016411830182017c076a097c0e74056a0764128d0201007c1164131b007d127c117c1238007d117c05641419007d13740a7c00740b6415190088016603050019007c12370003003c007856740c7c00190044005d4a7d14740b641519007c146b039001729a740a7c007c1488016603050019007c11740d7c007c146602190014007c13740d7c00740b641519006602190018001b00370003003c009001719a57007c09640e050019007c10380003003c007c08640e050019007c0f370003003c007c0574007c003c007c0e530029164e630100000000000000020000000400000053000000731400000067007c005d0c7d017c01640019009102710453002901720c000000721900000029027235000000722f00000072190000007219000000721a000000723600000061000000730200000006007a18737761702e3c6c6f63616c733e2e3c6c697374636f6d703e721c0000007a12496e76616c696420746f6b656e5f66726f6d630100000000000000020000000400000053000000731400000067007c005d0c7d017c01640019009102710453002901720c000000721900000029027235000000722f00000072190000007219000000721a000000723600000063000000730200000006007a10496e76616c696420746f6b656e5f746f72080000007a1d416d6f756e74206d7573742062652067726561746572207468616e20307a234d617820736c697070616765206d7573742062652067726561746572207468616e2030721f0000007a224d617820736c697070616765206d757374206265206c657373207468616e20313030630100000000000000020000000400000013000000731c00000067007c005d147d017c016400190088006b0272047c019102710453002901720c000000721900000029027235000000722f000000290172430000007219000000721a00000072360000006a000000730400000006000401630100000000000000020000000400000013000000731c00000067007c005d147d017c016400190088006b0272047c019102710453002901720c000000721900000029027235000000722f000000290172440000007219000000721a00000072360000006c00000073040000000600040172020000002903720200000072030000007207000000721d0000007a11536c697070616765206578636565646564290272020000007203000000e90500000072200000007213000000290e722b0000007223000000722500000072260000007206000000721400000072290000007215000000da036162737201000000da0d5f5f6665655f726577617264737216000000722d000000722c0000002915723100000072430000007244000000720200000072450000007232000000da11746f6b656e5f66726f6d5f6d6f64756c65da0f746f6b656e5f746f5f6d6f64756c65da1566726f6d5f706f6f6c5f746f6b656e5f656e747279da13746f5f706f6f6c5f746f6b656e5f656e747279da016bda1a6e65775f66726f6d5f706f6f6c5f746f6b656e5f616d6f756e74da186e65775f746f5f706f6f6c5f746f6b656e5f616d6f756e74da186f6c645f746f5f706f6f6c5f746f6b656e5f616d6f756e74da0f746f6b656e5f746f5f616d6f756e74da11746f6b656e5f66726f6d5f616d6f756e74da24746f6b656e5f746f5f616d6f756e745f776974686f75745f6665655f6465647563746564721d000000da096f776e65725f6665657220000000da08696e766573746f727219000000290272430000007244000000721a000000da04737761705d00000073520000000003080118010601180106011001100110010a010a01140106011401060110010c0108010c010c0104010a010a010401100108011201100110010801080108011a010e010e010e0114011a01100110010801725600000029027231000000722f000000630200000000000000030000000500000043000000735c0000007c0164016402840074007c00190064031900440083016b067322740164048301820174026a037c0183017d027c026a0474057c0074066a077c016603190074066a0764058d020100640674057c0074066a077c0166033c006400530029074e630100000000000000020000000400000053000000731400000067007c005d0c7d017c01640019009102710453002901720c000000721900000029027235000000722f00000072190000007219000000721a00000072360000008d000000730200000006007a25636c61696d5f6665655f726577617264732e3c6c6f63616c733e2e3c6c697374636f6d703e721c0000007a0d496e76616c696420746f6b656e29027202000000720300000072080000002908722b000000722300000072250000007226000000720100000072480000007214000000721500000029037231000000722f000000723000000072190000007219000000721a000000da11636c61696d5f6665655f726577617264738b000000730c00000000021c0106010a0112010a01725700000029017231000000630100000000000000010000000200000043000000730800000074007c001900530029014e2901722b0000002901723100000072190000007219000000721a000000da086765745f706f6f6c9500000073020000000002725800000029027231000000da076163636f756e74630200000000000000020000000300000043000000730c00000074007c007c0166021900530029014e2901722c00000029027231000000725900000072190000007219000000721a000000da0d6765745f6c705f706f696e74739a00000073020000000002725a000000290372310000007259000000722f000000630300000000000000030000000400000043000000730e00000074007c007c017c0266031900530029014e29017248000000290372310000007259000000722f00000072190000007219000000721a000000da0f6765745f6665655f726577617264739f00000073020000000002725b00000063000000000000000000000000010000004300000073040000007400530029014e29017216000000721900000072190000007219000000721a000000da0a6765745f636f6e666967a400000073020000000002725c0000002901da096e65775f6f776e6572630100000000000000010000000300000043000000732200000074006a017402640119006b02731674036402830182017c00740264013c006400530029034e72130000007a1b4f6e6c79206f776e65722063616e206368616e6765206f776e6572290472140000007215000000721600000072230000002901725d00000072190000007219000000721a000000da0c6368616e67655f6f776e6572a9000000730400000000021601725e0000004e290272020000007203000000290272020000007203000000290372020000007203000000720700000029017242000000291cda09696d706f72746c69627225000000da0446756e637228000000da0448617368722b000000722c00000072160000007248000000da085661726961626c657217000000722d000000721b000000da085f5f6578706f7274da046c697374da05666c6f61747233000000da03696e74da03737472723f0000007241000000725600000072570000007258000000725a000000725b000000725c000000725e000000721900000072190000007219000000721a000000da083c6d6f64756c653e01000000733e000000040110010e010a010e010e020e01060108010c01060108030805060112130601141e0601121406021a2c0601120906011004060112040601140410050601
 
Contract con_test_swap2
Variable __developer__
New Value c674a8a398fb81765277f77fc11464496dae94632de18eea1d69bf0c7894ad03
 
Contract con_test_swap2
Variable __owner__
New Value null
 
Contract con_test_swap2
Variable __submitted__
New Value 2023,8,23,17,35,30,0
 
Contract con_test_swap2
Variable config
Key owner
New Value c674a8a398fb81765277f77fc11464496dae94632de18eea1d69bf0c7894ad03
 
Contract con_test_swap2
Variable created_pools
New Value 0
 
Contract currency
Variable balances
Key c674a8a398fb81765277f77fc11464496dae94632de18eea1d69bf0c7894ad03
New Value 969.364615348343195083136094674405