Transaction:
2864d72a35e80a7061b93becdb4c2df5c9f3999c048da8985f8d85d789b5701f
Status
Success
Timestamp
12/24/2021, 3:12:23 PM
Result
None
Block Number
63414SubBlock Number
0
Nonce
99
Processor
89f67bb871351a1629d66676e4bd92bbacb23bd0649b890542ef98f1b664a497
Stamps Used
511 ( 39.3 dTAU )
Contract Name
submission
Function Name
submit_contract
Signature
767ab95d664fe5e9b6a36c301b6d56a95546700b5b80b131f6048860d744ad448e3a385d5e1713b35a47402ab588a789d59ae91eb7e0b293162c2d2731b5ea09
Kwargs
code
# Python USD - Experimental Risky Lamden Fully Decentralized Stable Coin
# Check collateralization TAU to PUSD by using get_current_backing_ratio()
# !! If it's 1 everything is fine and if > 1.5 it's amazing and overcollateralized !!
# You can exchange TAU to PUSD and PUSD to TAU at any point at the same ratio that LUSD-TAU is at using tau_to_pusd() or pusd_to_tau()
# Don't forget to approve TAU to con_pusd or tau_to_pusd() exchange function doesn't work or just use the Swap dApp UI
# Difference to LUSD is that PYUSD is collateralized by TAU on this chain instead of USDT
# No Slippage Stablecoin Swap available at https://pusd.to
import currency as tau
I = importlib
balances = Hash(default_value=0)
allowances = Hash(default_value=0)
metadata = Hash(default_value='')
total_supply = Variable()
@construct
def seed():
metadata['token_name'] = "Python USD"
metadata['token_symbol'] = "PUSD"
metadata['dex'] = 'con_amm_v9'
metadata['lusd'] = 'con_rswp_lst001'
metadata['dev_addr'] = 'pusd_dev_addr'
metadata['dev_tax'] = 0.5 # Developer tax
metadata['mnt_tax'] = 0.5 # Minting tax
metadata['liq_tax'] = 1 # Liquidity tax
metadata['operators'] = [
'ae7d14d6d9b8443f881ba6244727b69b681010e782d4fe482dbfb0b6aca02d5d',
'6a9004cbc570592c21879e5ee319c754b9b7bf0278878b1cc21ac87eed0ee38d'
]
total_supply.set(0)
@export
def change_metadata(key: str, value: Any):
assert key.lower() != 'operators', 'Can not change owners'
assert value, 'Parameter "value" can not be empty'
metadata[key][ctx.caller] = value
owner1 = metadata['operators'][0]
owner2 = metadata['operators'][1]
if metadata[key][owner1] == metadata[key][owner2]:
metadata[key] = value
metadata[key][owner1] = ''
metadata[key][owner2] = ''
assert_owner()
@export
def transfer(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
assert balances[ctx.caller] >= amount, 'Not enough coins to send!'
balances[ctx.caller] -= amount
balances[to] += amount
@export
def approve(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
allowances[ctx.caller, to] += amount
@export
def transfer_from(amount: float, to: str, main_account: str):
assert amount > 0, 'Cannot send negative balances!'
assert allowances[main_account, ctx.caller] >= amount, f'You approved {allowances[main_account, ctx.caller]} but need {amount}'
assert balances[main_account] >= amount, 'Not enough coins to send!'
allowances[main_account, ctx.caller] -= amount
balances[main_account] -= amount
balances[to] += amount
@export
def tau_to_pusd(tau_amount: float):
assert tau_amount > 0, 'Cannot send negative balances!'
dev_amount = tau_amount / 100 * metadata['dev_tax']
mnt_amount = tau_amount / 100 * metadata['mnt_tax']
tau.transfer_from(amount=tau_amount, to=ctx.this, main_account=ctx.caller)
tau.transfer(amount=dev_amount, to=metadata['dev_addr'])
prices = ForeignHash(foreign_contract=metadata['dex'], foreign_name='prices')
pusd_amount = (tau_amount / prices[metadata['lusd']]) - dev_amount - mnt_amount
balances[ctx.caller] += pusd_amount
total_supply.set(total_supply.get() + pusd_amount)
@export
def pusd_to_tau(pusd_amount: float):
assert pusd_amount > 0, 'Cannot send negative balances!'
prices = ForeignHash(foreign_contract=metadata['dex'], foreign_name='prices')
liq_amount = pusd_amount / 100 * metadata['liq_tax']
tau_amount = (pusd_amount - liq_amount) * prices[metadata['lusd']]
tau.transfer(amount=tau_amount, to=ctx.caller)
balances[ctx.this] += liq_amount
balances[ctx.caller] -= pusd_amount
total_supply.set(total_supply.get() - pusd_amount)
if liq_amount >= 10:
add_liquidity(liq_amount)
def add_liquidity(pusd_amount: float):
approve(amount=pusd_amount, to=metadata['dex'])
tau_amount = I.import_module(metadata['dex']).sell(contract=ctx.this, token_amount=pusd_amount / 2)
tau.approve(amount=tau_amount, to=metadata['dex'])
I.import_module(metadata['dex']).add_liquidity(contract=ctx.this, currency_amount=pusd_amount)
@export
def get_current_backing_ratio(): # > 1 = Good
prices = ForeignHash(foreign_contract=metadata['dex'], foreign_name='prices')
return ((tau.balance_of(ctx.this) * (1 / prices[metadata['lusd']])) / circulating_supply())
@export
def migrate_tau(contract: str, amount: float):
approved_action('migrate_tau', contract, amount)
tau.transfer(amount=amount, to=contract, main_account=ctx.this)
assert_owner()
@export
def migrate_pusd(contract: str, amount: float):
assert amount > 0, 'Cannot send negative balances!'
assert balances[ctx.this] >= amount, 'Not enough coins to send!'
approved_action('migrate_pusd', contract, amount)
balances[ctx.this] -= amount
balances[contract] += amount
assert_owner()
@export
def migrate_lp(contract: str, amount: float):
approved_action('migrate_lp', contract, amount)
dex = I.import_module(metadata['dex'])
dex.approve_liquidity(ctx.this, contract, amount)
dex.transfer_liquidity(ctx.this, contract, amount)
assert_owner()
@export
def withdraw_dev_funds(amount: float):
assert amount > 0, 'Cannot send negative balances!'
assert balances[metadata['dev_addr']] >= amount, 'Not enough coins to send!'
approved_action('withdraw_dev_funds', ctx.caller, amount)
balances[metadata['dev_addr']] -= amount
balances[ctx.caller] += amount
assert_owner()
def approved_action(action: str, contract: str, amount: float):
owner1 = metadata['operators'][0]
owner2 = metadata['operators'][1]
@export
def circulating_supply():
return f'{total_supply.get() - balances[ctx.this]}'
@export
def total_supply():
return f'{total_supply.get()}'
def assert_owner():
assert ctx.caller in metadata['operators'], 'Only executable by operators!'
name
con_testusd
State Changes
Contract
con_testusd
Variable
metadata
Key
token_name
New Value
Python USD
Contract
con_testusd
Variable
metadata
Key
token_symbol
New Value
PUSD
Contract
con_testusd
Variable
metadata
Key
dex
New Value
con_amm_v9
Contract
con_testusd
Variable
metadata
Key
lusd
New Value
con_rswp_lst001
Contract
con_testusd
Variable
metadata
Key
dev_addr
New Value
pusd_dev_addr
Contract
con_testusd
Variable
metadata
Key
dev_tax
New Value
0
Contract
con_testusd
Variable
metadata
Key
mnt_tax
New Value
0
Contract
con_testusd
Variable
metadata
Key
liq_tax
New Value
1
Contract
con_testusd
Variable
metadata
Key
operators
New Value
["ae7d14d6d9b8443f881ba6244727b69b681010e782d4fe482dbfb0b6aca02d5d","6a9004cbc570592c21879e5ee319c754b9b7bf0278878b1cc21ac87eed0ee38d"]
Contract
con_testusd
Variable
total_supply
New Value
0
Contract
con_testusd
Variable
__code__
New Value
import currency as tau
I = importlib
__balances = Hash(default_value=0, contract='con_testusd', name='balances')
__allowances = Hash(default_value=0, contract='con_testusd', name='allowances')
__metadata = Hash(default_value='', contract='con_testusd', name='metadata')
__total_supply = Variable(contract='con_testusd', name='total_supply')
def ____():
__metadata['token_name'] = 'Python USD'
__metadata['token_symbol'] = 'PUSD'
__metadata['dex'] = 'con_amm_v9'
__metadata['lusd'] = 'con_rswp_lst001'
__metadata['dev_addr'] = 'pusd_dev_addr'
__metadata['dev_tax'] = decimal('0.5')
__metadata['mnt_tax'] = decimal('0.5')
__metadata['liq_tax'] = 1
__metadata['operators'] = [
'ae7d14d6d9b8443f881ba6244727b69b681010e782d4fe482dbfb0b6aca02d5d',
'6a9004cbc570592c21879e5ee319c754b9b7bf0278878b1cc21ac87eed0ee38d']
__total_supply.set(0)
@__export('con_testusd')
def change_metadata(key: str, value: Any):
assert key.lower() != 'operators', 'Can not change owners'
assert value, 'Parameter "value" can not be empty'
__metadata[key][ctx.caller] = value
owner1 = __metadata['operators'][0]
owner2 = __metadata['operators'][1]
if __metadata[key][owner1] == __metadata[key][owner2]:
__metadata[key] = value
__metadata[key][owner1] = ''
__metadata[key][owner2] = ''
__assert_owner()
@__export('con_testusd')
def transfer(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
assert __balances[ctx.caller] >= amount, 'Not enough coins to send!'
__balances[ctx.caller] -= amount
__balances[to] += amount
@__export('con_testusd')
def approve(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
__allowances[ctx.caller, to] += amount
@__export('con_testusd')
def transfer_from(amount: float, to: str, main_account: str):
assert amount > 0, 'Cannot send negative balances!'
assert __allowances[main_account, ctx.caller
] >= amount, f'You approved {__allowances[main_account, ctx.caller]} but need {amount}'
assert __balances[main_account] >= amount, 'Not enough coins to send!'
__allowances[main_account, ctx.caller] -= amount
__balances[main_account] -= amount
__balances[to] += amount
@__export('con_testusd')
def tau_to_pusd(tau_amount: float):
assert tau_amount > 0, 'Cannot send negative balances!'
dev_amount = tau_amount / 100 * __metadata['dev_tax']
mnt_amount = tau_amount / 100 * __metadata['mnt_tax']
tau.transfer_from(amount=tau_amount, to=ctx.this, main_account=ctx.caller)
tau.transfer(amount=dev_amount, to=__metadata['dev_addr'])
__prices = ForeignHash(foreign_contract=__metadata['dex'], foreign_name
='prices', contract='con_testusd', name='prices')
pusd_amount = tau_amount / __prices[__metadata['lusd']
] - dev_amount - mnt_amount
__balances[ctx.caller] += pusd_amount
__total_supply.set(__total_supply.get() + pusd_amount)
@__export('con_testusd')
def pusd_to_tau(pusd_amount: float):
assert pusd_amount > 0, 'Cannot send negative balances!'
__prices = ForeignHash(foreign_contract=__metadata['dex'], foreign_name
='prices', contract='con_testusd', name='prices')
liq_amount = pusd_amount / 100 * __metadata['liq_tax']
tau_amount = (pusd_amount - liq_amount) * __prices[__metadata['lusd']]
tau.transfer(amount=tau_amount, to=ctx.caller)
__balances[ctx.this] += liq_amount
__balances[ctx.caller] -= pusd_amount
__total_supply.set(__total_supply.get() - pusd_amount)
if liq_amount >= 10:
__add_liquidity(liq_amount)
def __add_liquidity(pusd_amount: float):
approve(amount=pusd_amount, to=__metadata['dex'])
tau_amount = I.import_module(__metadata['dex']).sell(contract=ctx.this,
token_amount=pusd_amount / 2)
tau.approve(amount=tau_amount, to=__metadata['dex'])
I.import_module(__metadata['dex']).add_liquidity(contract=ctx.this,
currency_amount=pusd_amount)
@__export('con_testusd')
def get_current_backing_ratio():
__prices = ForeignHash(foreign_contract=__metadata['dex'], foreign_name
='prices', contract='con_testusd', name='prices')
return tau.balance_of(ctx.this) * (1 / __prices[__metadata['lusd']]
) / circulating_supply()
@__export('con_testusd')
def migrate_tau(contract: str, amount: float):
__approved_action('migrate_tau', contract, amount)
tau.transfer(amount=amount, to=contract, main_account=ctx.this)
__assert_owner()
@__export('con_testusd')
def migrate_pusd(contract: str, amount: float):
assert amount > 0, 'Cannot send negative balances!'
assert __balances[ctx.this] >= amount, 'Not enough coins to send!'
__approved_action('migrate_pusd', contract, amount)
__balances[ctx.this] -= amount
__balances[contract] += amount
__assert_owner()
@__export('con_testusd')
def migrate_lp(contract: str, amount: float):
__approved_action('migrate_lp', contract, amount)
dex = I.import_module(__metadata['dex'])
dex.approve_liquidity(ctx.this, contract, amount)
dex.transfer_liquidity(ctx.this, contract, amount)
__assert_owner()
@__export('con_testusd')
def withdraw_dev_funds(amount: float):
assert amount > 0, 'Cannot send negative balances!'
assert __balances[__metadata['dev_addr']
] >= amount, 'Not enough coins to send!'
__approved_action('withdraw_dev_funds', ctx.caller, amount)
__balances[__metadata['dev_addr']] -= amount
__balances[ctx.caller] += amount
__assert_owner()
def __approved_action(action: str, contract: str, amount: float):
owner1 = __metadata['operators'][0]
owner2 = __metadata['operators'][1]
@__export('con_testusd')
def circulating_supply():
return f'{__total_supply.get() - __balances[ctx.this]}'
@__export('con_testusd')
def total_supply():
return f'{__total_supply.get()}'
def __assert_owner():
assert ctx.caller in __metadata['operators'
], 'Only executable by operators!'
Contract
con_testusd
Variable
__compiled__
New Value
{"__bytes__":"e300000000000000000000000005000000400000007392010000640064016c005a0165025a03650464006402640364048d035a05650464006402640564048d035a06650464066402640764048d035a0765086402640864098d025a09640a640b84005a0a650b64028301650c650d640c9c02640d640e840483015a0e650b64028301650f650c640f9c0264106411840483015a10650b64028301650f650c640f9c0264126413840483015a11650b64028301650f650c650c64149c0364156416840483015a12650b64028301650f64179c0164186419840483015a13650b64028301650f641a9c01641b641c840483015a14650f641a9c01641d641e84045a15650b64028301641f6420840083015a16650b64028301650c650f64219c0264226423840483015a17650b64028301650c650f64219c0264246425840483015a18650b64028301650c650f64219c0264266427840483015a19650b64028301650f64289c016429642a840483015a1a650c650c650f642b9c03642c642d84045a1b650b64028301642e642f840083015a1c650b6402830164306408840083015a1d6431643284005a1e640153002933e9000000004eda0b636f6e5f74657374757364da0862616c616e6365732903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da0a616c6c6f77616e636573da00da086d65746164617461da0c746f74616c5f737570706c7929027205000000720600000063000000000000000000000000030000004300000073620000006401740064023c006403740064043c006405740064063c006407740064083c0064097400640a3c007401640b83017400640c3c007401640b83017400640d3c00640e7400640f3c00641064116702740064123c0074026a036413830101006400530029144e7a0a507974686f6e20555344da0a746f6b656e5f6e616d65da0450555344da0c746f6b656e5f73796d626f6cda0a636f6e5f616d6d5f7639da03646578da0f636f6e5f727377705f6c7374303031da046c757364da0d707573645f6465765f61646472da086465765f616464727a03302e35da076465765f746178da076d6e745f746178e901000000da076c69715f746178da4061653764313464366439623834343366383831626136323434373237623639623638313031306537383264346665343832646266623062366163613032643564da4036613930303463626335373035393263323138373965356565333139633735346239623762663032373838373862316363323161633837656564306565333864da096f70657261746f727372010000002904da0a5f5f6d65746164617461da07646563696d616cda0e5f5f746f74616c5f737570706c79da03736574a900721f000000721f0000007208000000da045f5f5f5f0900000073160000000001080108010801080108010c010c01080202010a0172200000002902da036b6579da0576616c756563020000000000000004000000030000004300000073880000007c006a00830064016b03731474016402830182017c01732074016403830182017c0174027c00190074036a043c00740264011900640419007d02740264011900640519007d0374027c0019007c02190074027c0019007c0319006b02727e7c0174027c003c00640674027c0019007c023c00640674027c0019007c033c007405830001006400530029074e721a0000007a1543616e206e6f74206368616e6765206f776e6572737a22506172616d65746572202276616c7565222063616e206e6f7420626520656d7074797201000000721600000072080000002906da056c6f776572da0e417373657274696f6e4572726f72721b000000da03637478da0663616c6c6572da0e5f5f6173736572745f6f776e6572290472210000007222000000da066f776e657231da066f776e657232721f000000721f0000007208000000da0f6368616e67655f6d65746164617461180000007314000000000214010c010e010c010c01180108010c010c01722a0000002902da06616d6f756e74da02746f630200000000000000020000000400000043000000734c0000007c0064016b0473107400640283018201740174026a0319007c006b0573267400640383018201740174026a03050019007c00380003003c0074017c01050019007c00370003003c006400530029044e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e636573217a194e6f7420656e6f75676820636f696e7320746f2073656e642129047224000000da0a5f5f62616c616e636573722500000072260000002902722b000000722c000000721f000000721f0000007208000000da087472616e736665722600000073080000000002100116011201722e000000630200000000000000020000000400000043000000732a0000007c0064016b0473107400640283018201740174026a037c016602050019007c00370003003c006400530029034e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e6365732129047224000000da0c5f5f616c6c6f77616e636573722500000072260000002902722b000000722c000000721f000000721f0000007208000000da07617070726f76652e00000073040000000002100172300000002903722b000000722c000000da0c6d61696e5f6163636f756e74630300000000000000030000000500000043000000738e0000007c0064016b047310740064028301820174017c0274026a03660219007c006b0573407400640374017c0274026a03660219009b0064047c009b009d048301820174047c0219007c006b057354740064058301820174017c0274026a036602050019007c00380003003c0074047c02050019007c00380003003c0074047c01050019007c00370003003c006400530029064e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e636573217a0d596f7520617070726f766564207a0a20627574206e656564207a194e6f7420656e6f75676820636f696e7320746f2073656e642129057224000000722f00000072250000007226000000722d0000002903722b000000722c0000007231000000721f000000721f0000007208000000da0d7472616e736665725f66726f6d34000000730e000000000210010c01240114011601100172320000002901da0a7461755f616d6f756e7463010000000000000005000000060000004300000073aa0000007c0064016b04731074006402830182017c0064031b0074016404190014007d017c0064031b0074016405190014007d0274026a037c0074046a0574046a0664068d03010074026a077c0174016407190064088d0201007408740164091900640a640b640a640c8d047d037c007c037401640d190019001b007c0118007c0218007d04740974046a06050019007c04370003003c00740a6a0b740a6a0c83007c0417008301010064005300290e4e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e63657321e964000000721400000072150000002903722b000000722c000000723100000072130000002902722b000000722c000000720f000000da0670726963657372020000002904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d65720500000072060000007211000000290d7224000000721b000000da0374617572320000007225000000da04746869737226000000722e000000da0b466f726569676e48617368722d000000721d000000721e000000da0367657429057233000000da0a6465765f616d6f756e74da0a6d6e745f616d6f756e74da085f5f707269636573da0b707573645f616d6f756e74721f000000721f0000007208000000da0b7461755f746f5f707573643f000000731400000000021001100110011401120108010c021801120172400000002901723f00000063010000000000000004000000060000004300000073a20000007c0064016b0473107400640283018201740174026403190064046405640464068d047d017c0064071b0074026408190014007d027c007c0218007c01740264091900190014007d0374036a047c0374056a06640a8d020100740774056a08050019007c02370003003c00740774056a06050019007c00380003003c0074096a0a74096a0b83007c001800830101007c02640b6b05729e740c7c028301010064005300290c4e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e63657321720f00000072350000007202000000290472360000007237000000720500000072060000007234000000721700000072110000002902722b000000722c000000e90a000000290d7224000000723a000000721b0000007238000000722e00000072250000007226000000722d0000007239000000721d000000721e000000723b000000da0f5f5f6164645f6c69717569646974792904723f000000723e000000da0a6c69715f616d6f756e747233000000721f000000721f0000007208000000da0b707573645f746f5f7461754e00000073160000000002100108010c0110011401100112011201120108017244000000630100000000000000020000000400000043000000735e00000074007c0074016401190064028d02010074026a0374016401190083016a0474056a067c0064031b0064048d027d0174076a007c0174016401190064028d02010074026a0374016401190083016a0874056a067c0064058d0201006400530029064e720f0000002902722b000000722c000000e90200000029027205000000da0c746f6b656e5f616d6f756e7429027205000000da0f63757272656e63795f616d6f756e7429097230000000721b000000da0149da0d696d706f72745f6d6f64756c65da0473656c6c722500000072390000007238000000da0d6164645f6c69717569646974792902723f0000007233000000721f000000721f000000720800000072420000005d000000730c0000000001100112010c011201120172420000006300000000000000000100000006000000430000007336000000740074016401190064026403640264048d047d0074026a0374046a05830164057c0074016406190019001b001400740683001b00530029074e720f0000007235000000720200000029047236000000723700000072050000007206000000721600000072110000002907723a000000721b0000007238000000da0a62616c616e63655f6f6672250000007239000000da1263697263756c6174696e675f737570706c792901723e000000721f000000721f0000007208000000da196765745f63757272656e745f6261636b696e675f726174696f660000007306000000000208010c02724e00000029027205000000722b0000006302000000000000000200000005000000430000007328000000740064017c007c018303010074016a027c017c0074036a0464028d0301007405830001006400530029034eda0b6d6967726174655f7461752903722b000000722c00000072310000002906da115f5f617070726f7665645f616374696f6e7238000000722e00000072250000007239000000722700000029027205000000722b000000721f000000721f0000007208000000724f0000006e000000730600000000020c011201724f000000630200000000000000020000000400000043000000735e0000007c0164016b0473107400640283018201740174026a0319007c016b0573267400640383018201740464047c007c0183030100740174026a03050019007c01380003003c0074017c00050019007c01370003003c007405830001006400530029054e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e636573217a194e6f7420656e6f75676820636f696e7320746f2073656e6421da0c6d6967726174655f7075736429067224000000722d000000722500000072390000007250000000722700000029027205000000722b000000721f000000721f0000007208000000725100000075000000730c0000000002100116010c011201100172510000006302000000000000000300000004000000430000007344000000740064017c007c018303010074016a0274036402190083017d027c026a0474056a067c007c01830301007c026a0774056a067c007c01830301007408830001006400530029034eda0a6d6967726174655f6c70720f0000002909725000000072480000007249000000721b000000da11617070726f76655f6c697175696469747972250000007239000000da127472616e736665725f6c6971756964697479722700000029037205000000722b000000720f000000721f000000721f000000720800000072520000007f000000730a00000000020c010e011001100172520000002901722b00000063010000000000000001000000040000004300000073660000007c0064016b0473107400640283018201740174026403190019007c006b05732874006404830182017403640574046a057c00830301007401740264031900050019007c00380003003c00740174046a05050019007c00370003003c007406830001006400530029064e72010000007a1e43616e6e6f742073656e64206e656761746976652062616c616e6365732172130000007a194e6f7420656e6f75676820636f696e7320746f2073656e6421da1277697468647261775f6465765f66756e647329077224000000722d000000721b00000072500000007225000000722600000072270000002901722b000000721f000000721f0000007208000000725500000088000000730e000000000210010a010e010e011401120172550000002903da06616374696f6e7205000000722b000000630300000000000000050000000200000043000000731c000000740064011900640219007d03740064011900640319007d046400530029044e721a000000720100000072160000002901721b000000290572560000007205000000722b00000072280000007229000000721f000000721f0000007208000000725000000093000000730400000000010c017250000000630000000000000000000000000300000043000000731400000074006a018300740274036a04190018009b00530029014e2905721d000000723b000000722d00000072250000007239000000721f000000721f000000721f0000007208000000724d0000009800000073020000000002724d000000630000000000000000000000000100000043000000730a00000074006a0183009b00530029014e2902721d000000723b000000721f000000721f000000721f0000007208000000720a0000009d00000073020000000002630000000000000000000000000300000043000000731a00000074006a017402640119006b06731674036402830182016400530029034e721a0000007a1d4f6e6c792065786563757461626c65206279206f70657261746f727321290472250000007226000000721b0000007224000000721f000000721f000000721f00000072080000007227000000a20000007304000000000110017227000000291fda0863757272656e63797238000000da09696d706f72746c69627248000000da0448617368722d000000722f000000721b000000da085661726961626c65721d0000007220000000da085f5f6578706f7274da03737472da03416e79722a000000da05666c6f6174722e00000072300000007232000000724000000072440000007242000000724e000000724f0000007251000000725200000072550000007250000000724d000000720a0000007227000000721f000000721f000000721f0000007208000000da083c6d6f64756c653e010000007340000000080104010e010e010e010c03080f0601120d06011207060112050601140a0601100e0601100e0e0910080601120606011209060112080601100a120510051005"}
Contract
con_testusd
Variable
__owner__
New Value
NULL
Contract
con_testusd
Variable
__submitted__
New Value
{"__time__":[2021,12,24,15,12,24,0]}
Contract
con_testusd
Variable
__developer__
New Value
ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89
Contract
currency
Variable
balances
New Value
971