Transaction #881715
Hash | c3a12f70491197b52992b30b20359c791dbb6e544ad8b08320133c4c03406776 |
Status | Success |
Timestamp | 765 days ago - 4/4/2022, 7:35:14 PM UTC+0 |
Block | 835461 |
Stamps Used | 622 |
Burned Fee | 0.03680473 TAU |
From | a5565739151e6f8d3fbb03ab605a31cc285e36a717a95002a60e6e4d4e4fa411 |
Contract Name | submission |
Function Name | submit_contract |
Additional Info
SubBlock Number | 0 |
Nonce | 102 |
Processor | 5b09493df6c18d17cc883ebce54fcb1f5afbd507533417fe32c006009a9c3c4a |
Signature | 4f1492fbfd7e01e35159e6805237f9dee59f9404fe66de9b77b10fefe4e1386c5ab7b5a8213cac90eb516af20e6b36e6ee6b26048ed8b5ba5baac448e6f3170f |
Stamps Supplied | 845 |
Stamps per TAU | 169 |
Kwargs
code | import currency as tau I = importlib action_interface = [I.Func('execute', args=('payload', 'caller'))] metadata = Hash() balances = Hash(default_value=0.0) contract = Variable() total_supply = Variable() swap_end_date = Variable() burn_address = Variable() @construct def init(name: str): balances[ctx.caller] = 0 metadata['action_reflection'] = 'con_reflecttau_v2_reflection' metadata['action_liquidity'] = 'con_reflecttau_v2_liquidity' metadata['action_treasury'] = 'con_reflecttau_v2_treasury' metadata['action_buyback'] = 'con_reflecttau_v2_buyback' metadata['action_dev'] = 'con_reflecttau_v2_developer' metadata['token_name'] = "ReflectTAU.io" metadata['token_symbol'] = "RTAU" metadata['operators'] = [ 'a5565739151e6f8d3fbb03ab605a31cc285e36a717a95002a60e6e4d4e4fa411', '025169da812b5db222e0ce57fbc2b5f949a59ac10a1a65a77fa4ab67c492fbad', '6351a80d32cbb3c173e490b093a95b15bcf4f6190251863669202d7fe2257af3' ] contract.set(name) total_supply.set(0.0) burn_address.set('reflecttau_burn_address') swap_end_date.set(now + datetime.timedelta(days=180)) @export def change_metadata(key: str, value: Any): assert_signer_is_operator() """ If we are setting an action core contract, make sure that the value is an existing contract and follows the agreed on interface """ if key.startswith('action_'): con = I.import_module(value) error = 'Action contract does not follow the correct interface!' assert I.enforce_interface(con, action_interface), error """ Save key and value for an operator. This entry symbolizes the agreement of ctx.caller to set the metadata. """ metadata[key, ctx.caller] = value agreed = True # Check if all operators agree on setting same value for key for op in metadata['operators']: if metadata[key, op] != metadata[key, ctx.caller]: agreed = False break if agreed: # Since all operators agree, set new value for key metadata[key] = value """ Since agreement was met and the value set, let's set the agreement for each operator to a different value so that one-time agreements can't be used more than once by some operator """ for op in metadata['operators']: metadata[key, op] = hashlib.sha256(str(now)) return f'{key} = {value}' @export def assert_operators_agree(agreement: str, one_time: bool=True): """ Operators can agree to specific action core executions. The agreements will then be checked in the action core contract before they execute. The agreement keys need to have the following form: <action_contract>#<function>#<arg_1>#<arg_2>#... The value needs to be: "agreed" If it is a 'one_time' agreement, it will be set to an empty string after checking, to not allow execution again without new agreement from all operators. """ assert metadata[agreement] == 'agreed', 'No agreement met!' if one_time: metadata[agreement] = '' @export def balance_of(address: str): return balances[address] @export def allowance(owner: str, spender: str): return balances[owner, spender] @export def get_metadata(key: str): return metadata[key] @export def contract(): return contract.get() @export def burn_address(): return burn_address.get() @export def transfer(amount: float, to: str): assert amount > 0, 'Cannot send negative balances!' assert balances[ctx.caller] >= amount, 'Not enough coins to send!' """ 1. Set balance of sender to 'balance - amount' 2. Set balance of reflection contract to 'fees calculated by reflection contract' 3. Set balance of receiver to 'balance + amount - fees' """ balances[ctx.caller] -= amount balances[metadata['action_reflection']] += call('action_reflection', {'function': 'calc_taxes', 'amount': amount, 'to': to}) balances[to] += call('action_reflection', {'function': 'transfer', 'amount': amount, 'to': to}) @export def approve(amount: float, to: str): assert amount > 0, 'Cannot send negative balances!' balances[ctx.caller, to] += amount @export def transfer_from(amount: float, to: str, main_account: str): assert amount > 0, 'Cannot send negative balances!' assert balances[main_account, ctx.caller] >= amount, f'You approved {balances[main_account, ctx.caller]} but need {amount}' assert balances[main_account] >= amount, 'Not enough coins to send! ' """ 1. Reduce allowances of sender by amount 2. Set balance of sender to 'balance - amount' 3. Set balance of reflection contract to 'fees calculated by reflection contract' 4. Set balance of receiver to 'balance + amount - fees' """ balances[main_account, ctx.caller] -= amount balances[main_account] -= amount balances[metadata['action_reflection']] += call('action_reflection', {'function': 'calc_taxes', 'amount': amount, 'to': to}) balances[to] += call('action_reflection', {'function': 'transfer_from', 'amount': amount, 'to': to, 'main_account': main_account}) def call(action: str, payload: dict): # Call action core contract functions from within this contract assert metadata[action] is not None, 'Invalid action!' return I.import_module(metadata[action]).execute(payload, ctx.caller) @export def external_call(action: str, payload: dict): assert_signer_is_operator() """ Call action core contract functions externally. To mark that it was an external call, the key 'external' will be added to the payload. Action core contracts can check for that key and know if a call came from the main token contract or from outside. """ if not payload: payload = {} payload['external'] = True return call(action, payload) @export def swap_basic(basic_amount: float): assert now < swap_end_date.get(), 'Swap period ended' assert basic_amount > 0, 'Cannot swap negative balances!' I.import_module('con_doug_lst001').transfer_from( main_account=ctx.caller, amount=basic_amount, to=burn_address.get()) swap_amount = basic_amount * 0.07613035192 total_supply.set(total_supply.get() + swap_amount) balances[ctx.caller] += swap_amount call('action_reflection', {'function': 'manage_holders_index', 'address': ctx.caller, 'amount': swap_amount}) @export def swap_rtau(rtau_amount: float): assert now < swap_end_date.get(), 'Swap period ended' assert rtau_amount > 0, 'Cannot swap negative balances!' I.import_module('con_reflecttau').transfer_from( main_account=ctx.caller, amount=rtau_amount, to=burn_address.get()) swap_amount = rtau_amount * 0.002386964808 total_supply.set(total_supply.get() + swap_amount) balances[ctx.caller] += swap_amount call('action_reflection', {'function': 'manage_holders_index', 'address': ctx.caller, 'amount': swap_amount}) @export def time_until_swap_end(): return swap_end_date.get() - now @export def circulating_supply(): return total_supply.get() - balances[burn_address.get()] @export def total_supply(): return total_supply.get() @export def assert_signer_is_operator(): assert ctx.signer in metadata['operators'], 'Only executable by operators!' |
constructor_args | {"name":"con_reflecttau_v2"} |
name | con_reflecttau_v2 |
State Changes
Contract | con_reflecttau_v2 |
Variable | balances |
Key | a5565739151e6f8d3fbb03ab605a31cc285e36a717a95002a60e6e4d4e4fa411 |
New Value | 0 |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | action_reflection |
New Value | con_reflecttau_v2_reflection |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | action_liquidity |
New Value | con_reflecttau_v2_liquidity |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | action_treasury |
New Value | con_reflecttau_v2_treasury |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | action_buyback |
New Value | con_reflecttau_v2_buyback |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | action_dev |
New Value | con_reflecttau_v2_developer |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | token_name |
New Value | ReflectTAU.io |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | token_symbol |
New Value | RTAU |
Contract | con_reflecttau_v2 |
Variable | metadata |
Key | operators |
New Value | ["a5565739151e6f8d3fbb03ab605a31cc285e36a717a95002a60e6e4d4e4fa411","025169da812b5db222e0ce57fbc2b5f949a59ac10a1a65a77fa4ab67c492fbad","6351a80d32cbb3c173e490b093a95b15bcf4f6190251863669202d7fe2257af3"] |
Contract | con_reflecttau_v2 |
Variable | contract |
New Value | con_reflecttau_v2 |
Contract | con_reflecttau_v2 |
Variable | total_supply |
New Value | 0.0 |
Contract | con_reflecttau_v2 |
Variable | burn_address |
New Value | reflecttau_burn_address |
Contract | con_reflecttau_v2 |
Variable | swap_end_date |
New Value | 2022,10,1,19,35,15,0 |
Contract | con_reflecttau_v2 |
Variable | __code__ |
New Value | import currency as tau I = importlib action_interface = [I.Func('execute', args=('payload', 'caller'))] __metadata = Hash(contract='con_reflecttau_v2', name='metadata') __balances = Hash(default_value=decimal('0.0'), contract= 'con_reflecttau_v2', name='balances') __contract = Variable(contract='con_reflecttau_v2', name='contract') __total_supply = Variable(contract='con_reflecttau_v2', name='total_supply') __swap_end_date = Variable(contract='con_reflecttau_v2', name='swap_end_date') __burn_address = Variable(contract='con_reflecttau_v2', name='burn_address') def ____(name: str): __balances[ctx.caller] = 0 __metadata['action_reflection'] = 'con_reflecttau_v2_reflection' __metadata['action_liquidity'] = 'con_reflecttau_v2_liquidity' __metadata['action_treasury'] = 'con_reflecttau_v2_treasury' __metadata['action_buyback'] = 'con_reflecttau_v2_buyback' __metadata['action_dev'] = 'con_reflecttau_v2_developer' __metadata['token_name'] = 'ReflectTAU.io' __metadata['token_symbol'] = 'RTAU' __metadata['operators'] = [ 'a5565739151e6f8d3fbb03ab605a31cc285e36a717a95002a60e6e4d4e4fa411', '025169da812b5db222e0ce57fbc2b5f949a59ac10a1a65a77fa4ab67c492fbad', '6351a80d32cbb3c173e490b093a95b15bcf4f6190251863669202d7fe2257af3'] __contract.set(name) __total_supply.set(decimal('0.0')) __burn_address.set('reflecttau_burn_address') __swap_end_date.set(now + datetime.timedelta(days=180)) @__export('con_reflecttau_v2') def change_metadata(key: str, value: Any): assert_signer_is_operator() """ If we are setting an action core contract, make sure that the value is an existing contract and follows the agreed on interface """ if key.startswith('action_'): con = I.import_module(value) error = 'Action contract does not follow the correct interface!' assert I.enforce_interface(con, action_interface), error """ Save key and value for an operator. This entry symbolizes the agreement of ctx.caller to set the metadata. """ __metadata[key, ctx.caller] = value agreed = True for op in __metadata['operators']: if __metadata[key, op] != __metadata[key, ctx.caller]: agreed = False break if agreed: __metadata[key] = value """ Since agreement was met and the value set, let's set the agreement for each operator to a different value so that one-time agreements can't be used more than once by some operator """ for op in __metadata['operators']: __metadata[key, op] = hashlib.sha256(str(now)) return f'{key} = {value}' @__export('con_reflecttau_v2') def assert_operators_agree(agreement: str, one_time: bool=True): """ Operators can agree to specific action core executions. The agreements will then be checked in the action core contract before they execute. The agreement keys need to have the following form: <action_contract>#<function>#<arg_1>#<arg_2>#... The value needs to be: "agreed" If it is a 'one_time' agreement, it will be set to an empty string after checking, to not allow execution again without new agreement from all operators. """ assert __metadata[agreement] == 'agreed', 'No agreement met!' if one_time: __metadata[agreement] = '' @__export('con_reflecttau_v2') def balance_of(address: str): return __balances[address] @__export('con_reflecttau_v2') def allowance(owner: str, spender: str): return __balances[owner, spender] @__export('con_reflecttau_v2') def get_metadata(key: str): return __metadata[key] @__export('con_reflecttau_v2') def contract(): return __contract.get() @__export('con_reflecttau_v2') def burn_address(): return __burn_address.get() @__export('con_reflecttau_v2') def transfer(amount: float, to: str): assert amount > 0, 'Cannot send negative balances!' assert __balances[ctx.caller] >= amount, 'Not enough coins to send!' """ 1. Set balance of sender to 'balance - amount' 2. Set balance of reflection contract to 'fees calculated by reflection contract' 3. Set balance of receiver to 'balance + amount - fees' """ __balances[ctx.caller] -= amount __balances[__metadata['action_reflection']] += __call('action_reflection', {'function': 'calc_taxes', 'amount': amount, 'to': to}) __balances[to] += __call('action_reflection', {'function': 'transfer', 'amount': amount, 'to': to}) @__export('con_reflecttau_v2') def approve(amount: float, to: str): assert amount > 0, 'Cannot send negative balances!' __balances[ctx.caller, to] += amount @__export('con_reflecttau_v2') def transfer_from(amount: float, to: str, main_account: str): assert amount > 0, 'Cannot send negative balances!' assert __balances[main_account, ctx.caller ] >= amount, f'You approved {__balances[main_account, ctx.caller]} but need {amount}' assert __balances[main_account] >= amount, 'Not enough coins to send! ' """ 1. Reduce allowances of sender by amount 2. Set balance of sender to 'balance - amount' 3. Set balance of reflection contract to 'fees calculated by reflection contract' 4. Set balance of receiver to 'balance + amount - fees' """ __balances[main_account, ctx.caller] -= amount __balances[main_account] -= amount __balances[__metadata['action_reflection']] += __call('action_reflection', {'function': 'calc_taxes', 'amount': amount, 'to': to}) __balances[to] += __call('action_reflection', {'function': 'transfer_from', 'amount': amount, 'to': to, 'main_account': main_account}) def __call(action: str, payload: dict): assert __metadata[action] is not None, 'Invalid action!' return I.import_module(__metadata[action]).execute(payload, ctx.caller) @__export('con_reflecttau_v2') def external_call(action: str, payload: dict): assert_signer_is_operator() """ Call action core contract functions externally. To mark that it was an external call, the key 'external' will be added to the payload. Action core contracts can check for that key and know if a call came from the main token contract or from outside. """ if not payload: payload = {} payload['external'] = True return __call(action, payload) @__export('con_reflecttau_v2') def swap_basic(basic_amount: float): assert now < __swap_end_date.get(), 'Swap period ended' assert basic_amount > 0, 'Cannot swap negative balances!' I.import_module('con_doug_lst001').transfer_from(main_account=ctx. caller, amount=basic_amount, to=__burn_address.get()) swap_amount = basic_amount * decimal('0.07613035192') __total_supply.set(__total_supply.get() + swap_amount) __balances[ctx.caller] += swap_amount __call('action_reflection', {'function': 'manage_holders_index', 'address': ctx.caller, 'amount': swap_amount}) @__export('con_reflecttau_v2') def swap_rtau(rtau_amount: float): assert now < __swap_end_date.get(), 'Swap period ended' assert rtau_amount > 0, 'Cannot swap negative balances!' I.import_module('con_reflecttau').transfer_from(main_account=ctx.caller, amount=rtau_amount, to=__burn_address.get()) swap_amount = rtau_amount * decimal('0.002386964808') __total_supply.set(__total_supply.get() + swap_amount) __balances[ctx.caller] += swap_amount __call('action_reflection', {'function': 'manage_holders_index', 'address': ctx.caller, 'amount': swap_amount}) @__export('con_reflecttau_v2') def time_until_swap_end(): return __swap_end_date.get() - now @__export('con_reflecttau_v2') def circulating_supply(): return __total_supply.get() - __balances[__burn_address.get()] @__export('con_reflecttau_v2') def total_supply(): return __total_supply.get() @__export('con_reflecttau_v2') def assert_signer_is_operator(): assert ctx.signer in __metadata['operators' ], 'Only executable by operators!' |
Contract | con_reflecttau_v2 |
Variable | __compiled__ |
New Value | e3000000000000000000000000050000004000000073f0010000640064016c005a0165025a0365036a046402643f64058d0267015a0565066406640764088d025a0765066508640983016406640a640b8d035a09650a6406640c64088d025a0b650a6406640d64088d025a0c650a6406640e64088d025a0d650a6406640f64088d025a0e650f64109c016411641284045a10651164068301650f651264139c0264146415840483015a136511640683016440650f651464179c0264186419840583015a15651164068301650f641a9c01641b641c840483015a16651164068301650f650f641d9c02641e641f840483015a17651164068301650f64209c0164216422840483015a186511640683016423640c840083015a196511640683016424640f840083015a1a651164068301651b650f64259c0264266427840483015a1c651164068301651b650f64259c0264286429840483015a1d651164068301651b650f650f642a9c03642b642c840483015a1e650f651f642d9c02642e642f84045a20651164068301650f651f642d9c0264306431840483015a21651164068301651b64329c0164336434840483015a22651164068301651b64359c0164366437840483015a2365116406830164386439840083015a24651164068301643a643b840083015a25651164068301643c640d840083015a26651164068301643d643e840083015a27640153002941e9000000004eda0765786563757465da077061796c6f6164da0663616c6c65722901da0461726773da11636f6e5f7265666c6563747461755f7632da086d657461646174612902da08636f6e7472616374da046e616d657a03302e30da0862616c616e6365732903da0d64656661756c745f76616c7565720800000072090000007208000000da0c746f74616c5f737570706c79da0d737761705f656e645f64617465da0c6275726e5f6164647265737329017209000000630100000000000000010000000500000043000000738c0000006401740074016a023c006402740364033c006404740364053c006406740364073c006408740364093c00640a7403640b3c00640c7403640d3c00640e7403640f3c006410641164126703740364133c0074046a057c008301010074066a057407641483018301010074086a0564158301010074096a05740a740b6a0c641664178d011700830101006400530029184e7201000000da1c636f6e5f7265666c6563747461755f76325f7265666c656374696f6eda11616374696f6e5f7265666c656374696f6eda1b636f6e5f7265666c6563747461755f76325f6c6971756964697479da10616374696f6e5f6c6971756964697479da1a636f6e5f7265666c6563747461755f76325f7472656173757279da0f616374696f6e5f7472656173757279da19636f6e5f7265666c6563747461755f76325f6275796261636bda0e616374696f6e5f6275796261636bda1b636f6e5f7265666c6563747461755f76325f646576656c6f706572da0a616374696f6e5f6465767a0d5265666c6563745441552e696fda0a746f6b656e5f6e616d65da0452544155da0c746f6b656e5f73796d626f6cda4061353536353733393135316536663864336662623033616236303561333163633238356533366137313761393530303261363065366534643465346661343131da4030323531363964613831326235646232323265306365353766626332623566393439613539616331306131613635613737666134616236376334393266626164da4036333531613830643332636262336331373365343930623039336139356231356263663466363139303235313836333636393230326437666532323537616633da096f70657261746f72737a03302e30da177265666c6563747461755f6275726e5f61646472657373e9b40000002901da0464617973290dda0a5f5f62616c616e636573da036374787204000000da0a5f5f6d65746164617461da0a5f5f636f6e7472616374da03736574da0e5f5f746f74616c5f737570706c79da07646563696d616cda0e5f5f6275726e5f61646472657373da0f5f5f737761705f656e645f64617465da036e6f77da086461746574696d65da0974696d6564656c746129017209000000a900722f000000da00da045f5f5f5f0d000000731e00000000010a010801080108010801080108010802020102010a010a010e010a0172310000002902da036b6579da0576616c756563020000000000000006000000050000004300000073bc0000007400830001007c006a0164018301723274026a037c0183017d0264027d0374026a047c0274058302733274067c03830182017c0174077c0074086a0966023c0064037d04783074076404190044005d247d0574077c007c056602190074077c0074086a09660219006b03724e64057d045000714e57007c0472b87c0174077c003c00782674076404190044005d1a7d05740a6a0b740c740d8301830174077c007c0566023c00718c57007c009b0064067c019b009d0353006400530029074eda07616374696f6e5f7a36416374696f6e20636f6e747261637420646f6573206e6f7420666f6c6c6f772074686520636f727265637420696e746572666163652154721f000000467a03203d20290eda196173736572745f7369676e65725f69735f6f70657261746f72da0a73746172747377697468da0149da0d696d706f72745f6d6f64756c65da11656e666f7263655f696e74657266616365da10616374696f6e5f696e74657266616365da0e417373657274696f6e4572726f72722500000072240000007204000000da07686173686c6962da06736861323536da03737472722c000000290672320000007233000000da03636f6eda056572726f72da06616772656564da026f70722f000000722f0000007230000000da0f6368616e67655f6d65746164617461200000007320000000000206050a010a01040114050e0104010e011a0104010601040108070e011a017243000000542902da0961677265656d656e74da086f6e655f74696d65630200000000000000020000000300000043000000732400000074007c00190064016b02731474016402830182017c017220640374007c003c0064045300290561d80100000a202020204f70657261746f72732063616e20616772656520746f20737065636966696320616374696f6e20636f726520657865637574696f6e732e0a202020205468652061677265656d656e74732077696c6c207468656e20626520636865636b656420696e2074686520616374696f6e20636f72650a20202020636f6e7472616374206265666f7265207468657920657865637574652e0a0a202020205468652061677265656d656e74206b657973206e65656420746f20686176652074686520666f6c6c6f77696e6720666f726d3a0a202020203c616374696f6e5f636f6e74726163743e233c66756e6374696f6e3e233c6172675f313e233c6172675f323e232e2e2e0a0a202020205468652076616c7565206e6565647320746f2062653a2022616772656564220a0a202020204966206974206973206120276f6e655f74696d65272061677265656d656e742c2069742077696c6c2062652073657420746f20616e0a20202020656d70747920737472696e6720616674657220636865636b696e672c20746f206e6f7420616c6c6f7720657865637574696f6e0a20202020616761696e20776974686f7574206e65772061677265656d656e742066726f6d20616c6c206f70657261746f72732e0a2020202072410000007a114e6f2061677265656d656e74206d65742172300000004e29027225000000723b000000290272440000007245000000722f000000722f0000007230000000da166173736572745f6f70657261746f72735f616772656542000000730600000000101401040172460000002901da0761646472657373630100000000000000010000000200000043000000730800000074007c001900530029014e2901722300000029017247000000722f000000722f0000007230000000da0a62616c616e63655f6f66570000007302000000000272480000002902da056f776e6572da077370656e646572630200000000000000020000000300000043000000730c00000074007c007c0166021900530029014e2901722300000029027249000000724a000000722f000000722f0000007230000000da09616c6c6f77616e63655c00000073020000000002724b00000029017232000000630100000000000000010000000200000043000000730800000074007c001900530029014e2901722500000029017232000000722f000000722f0000007230000000da0c6765745f6d657461646174616100000073020000000002724c000000630000000000000000000000000100000043000000730800000074006a018300530029014e29027226000000da03676574722f000000722f000000722f000000723000000072080000006600000073020000000002630000000000000000000000000100000043000000730800000074006a018300530029014e2902722a000000724d000000722f000000722f000000722f0000007230000000720e0000006b000000730200000000022902da06616d6f756e74da02746f630200000000000000020000000900000043000000737c0000007c0064016b0473107400640283018201740174026a0319007c006b0573267400640383018201740174026a03050019007c00380003003c007401740464041900050019007405640464057c007c0164069c038302370003003c0074017c01050019007405640464077c007c0164069c038302370003003c006400530029084e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e636573217a194e6f7420656e6f75676820636f696e7320746f2073656e64217210000000da0a63616c635f74617865732903da0866756e6374696f6e724e000000724f000000da087472616e736665722906723b0000007223000000722400000072040000007225000000da065f5f63616c6c2902724e000000724f000000722f000000722f0000007230000000725200000070000000730e0000000002100116091201100112010e017252000000630200000000000000020000000400000043000000732a0000007c0064016b0473107400640283018201740174026a037c016602050019007c00370003003c006400530029034e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e636573212904723b0000007223000000722400000072040000002902724e000000724f000000722f000000722f0000007230000000da07617070726f76658300000073040000000002100172540000002903724e000000724f000000da0c6d61696e5f6163636f756e74630300000000000000030000000a0000004300000073c00000007c0064016b047310740064028301820174017c0274026a03660219007c006b0573407400640374017c0274026a03660219009b0064047c009b009d048301820174017c0219007c006b057354740064058301820174017c0274026a036602050019007c00380003003c0074017c02050019007c00380003003c007401740464061900050019007405640664077c007c0164089c038302370003003c0074017c01050019007405640664097c007c017c02640a9c048302370003003c0064005300290b4e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e636573217a0d596f7520617070726f766564207a0a20627574206e656564207a1a4e6f7420656e6f75676820636f696e7320746f2073656e6421207210000000725000000029037251000000724e000000724f000000da0d7472616e736665725f66726f6d29047251000000724e000000724f00000072550000002906723b000000722300000072240000007204000000722500000072530000002903724e000000724f0000007255000000722f000000722f00000072300000007256000000890000007316000000000210010c012401140b16011001100112010c01060172560000002902da06616374696f6e7203000000630200000000000000020000000300000043000000732c00000074007c00190064006b097314740164018301820174026a0374007c00190083016a047c0174056a068302530029024e7a0f496e76616c696420616374696f6e2129077225000000723b00000072370000007238000000720200000072240000007204000000290272570000007203000000722f000000722f00000072300000007253000000a2000000730400000000011401725300000063020000000000000002000000030000004300000073200000007400830001007c01730e69007d0164017c0164023c0074017c007c018302530029034e54da0865787465726e616c290272350000007253000000290272570000007203000000722f000000722f0000007230000000da0d65787465726e616c5f63616c6ca7000000730a0000000002060904010401080172590000002901da0c62617369635f616d6f756e746301000000000000000200000006000000430000007388000000740074016a0283006b00731474036401830182017c0064026b047324740364038301820174046a05640483016a0674076a087c0074096a02830064058d0301007c00740a6406830114007d01740b6a0c740b6a0283007c01170083010100740d74076a08050019007c01370003003c00740e6407640874076a087c0164099c038302010064005300290a4e7a115377617020706572696f6420656e64656472010000007a1e43616e6e6f742073776170206e656761746976652062616c616e63657321da0f636f6e5f646f75675f6c737430303129037255000000724e000000724f0000007a0d302e30373631333033353139327210000000da146d616e6167655f686f6c646572735f696e646578290372510000007247000000724e000000290f722c000000722b000000724d000000723b00000072370000007238000000725600000072240000007204000000722a000000722900000072280000007227000000722300000072530000002902725a000000da0b737761705f616d6f756e74722f000000722f0000007230000000da0a737761705f6261736963b800000073120000000002140110010e010e010c01120112010601725e0000002901da0b727461755f616d6f756e746301000000000000000200000006000000430000007388000000740074016a0283006b00731474036401830182017c0064026b047324740364038301820174046a05640483016a0674076a087c0074096a02830064058d0301007c00740a6406830114007d01740b6a0c740b6a0283007c01170083010100740d74076a08050019007c01370003003c00740e6407640874076a087c0164099c038302010064005300290a4e7a115377617020706572696f6420656e64656472010000007a1e43616e6e6f742073776170206e656761746976652062616c616e63657321da0e636f6e5f7265666c65637474617529037255000000724e000000724f0000007a0e302e3030323338363936343830387210000000725c000000290372510000007247000000724e000000290f722c000000722b000000724d000000723b00000072370000007238000000725600000072240000007204000000722a000000722900000072280000007227000000722300000072530000002902725f000000725d000000722f000000722f0000007230000000da09737761705f72746175c500000073120000000002140110010e010e010c011201120106017261000000630000000000000000000000000200000043000000730c00000074006a01830074021800530029014e2903722b000000724d000000722c000000722f000000722f000000722f0000007230000000da1374696d655f756e74696c5f737761705f656e64d2000000730200000000027262000000630000000000000000000000000300000043000000731400000074006a018300740274036a01830019001800530029014e29047228000000724d0000007223000000722a000000722f000000722f000000722f0000007230000000da1263697263756c6174696e675f737570706c79d7000000730200000000027263000000630000000000000000000000000100000043000000730800000074006a018300530029014e29027228000000724d000000722f000000722f000000722f0000007230000000720c000000dc00000073020000000002630000000000000000000000000300000043000000731a00000074006a017402640119006b06731674036402830182016400530029034e721f0000007a1d4f6e6c792065786563757461626c65206279206f70657261746f72732129047224000000da067369676e65727225000000723b000000722f000000722f000000722f00000072300000007235000000e100000073040000000002100172350000002902720300000072040000002901542928da0863757272656e6379da03746175da09696d706f72746c69627237000000da0446756e63723a000000da0448617368722500000072290000007223000000da085661726961626c6572260000007228000000722b000000722a000000723e0000007231000000da085f5f6578706f7274da03416e797243000000da04626f6f6c72460000007248000000724b000000724c0000007208000000720e000000da05666c6f6174725200000072540000007256000000da046469637472530000007259000000725e000000726100000072620000007263000000720c0000007235000000722f000000722f000000722f0000007230000000da083c6d6f64756c653e01000000734e0000000801040110010c0108010a010c010c010c010c030e130601122106011414060110040601120406011004100510050601121206011205060114181005060112100601100c0601100c100510051005 |
Contract | con_reflecttau_v2 |
Variable | __owner__ |
New Value | null |
Contract | con_reflecttau_v2 |
Variable | __submitted__ |
New Value | 2022,4,4,19,35,15,0 |
Contract | con_reflecttau_v2 |
Variable | __developer__ |
New Value | a5565739151e6f8d3fbb03ab605a31cc285e36a717a95002a60e6e4d4e4fa411 |
Contract | currency |
Variable | balances |
Key | a5565739151e6f8d3fbb03ab605a31cc285e36a717a95002a60e6e4d4e4fa411 |
New Value | 38656.216815916025043551850813896288 |