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