Contract con_how2testnet


Contract Code


  
1 metadata = Hash()
2 data = Hash(default_value=0)
3
4 @construct
5 def seed():
6 metadata['operator'] = ctx.caller
7
8 @export
9 def change_metadata(key: str, new_value: str):
10 assert ctx.caller == metadata['operator'], "only operator can set metadata"
11 metadata[key] = new_value
12
13 @export
14 def new_migration_window(migrator_id : str, contract: str, open_until_year : int, open_until_month : int, open_until_day : int, open_until_hour: int = 0):
15
16 assert metadata['operator']== ctx.caller, "You are not the owner and cannot creator a migrating window."
17 assert bool(data[migrator_id, 'migrator_owner']) == False, "This migrator has already been created, please create one with a different name."
18 assert open_until_day != None, 'Must provide end day of migration window!'
19 assert open_until_month != None, 'Must provide end month of migration window!'
20 assert open_until_year != None, 'Must provide end year of migration window!'
21 assert datetime.datetime(year=open_until_year, month=open_until_month, day=open_until_day, hour=open_until_hour) >= now, 'Migration window end cannot be in the past!'
22
23 data[migrator_id, 'migrator_owner'] = ctx.caller
24 data[migrator_id, 'contract'] = contract
25 data[migrator_id, 'migrated_wallets'] = {}
26 data[migrator_id, 'total_migrated'] = 0
27 data[migrator_id, 'end_date'] = datetime.datetime(year=open_until_year, month=open_until_month, day=open_until_day, hour=open_until_hour, minute=0, microsecond=0)
28
29 @export
30 def migrate_token(migrator_id: str, tokens_to_migrate: float, contract: str):
31
32 assert contract == data[migrator_id, 'contract'], f"The contract does not match the token migration contract of {data[migrator_id, 'contract']}."
33 assert data[migrator_id, 'end_date'] >= now, 'You can not migrate tokens using this migrator as the period has ended.'
34
35 migrated_wallets = data[migrator_id, 'migrated_wallets']
36 token = importlib.import_module(contract)
37 token.transfer_from(amount=tokens_to_migrate, to=ctx.this, main_account=ctx.caller)
38
39 if ctx.caller not in migrated_wallets:
40 migrated_wallets.update({ctx.caller: tokens_to_migrate})
41 else:
42 migrated_wallets[ctx.caller] += tokens_to_migrate
43
44 data[migrator_id, 'migrated_wallets'] = migrated_wallets
45 data[migrator_id, 'total_migrated'] += tokens_to_migrate
46
47 @export
48 def list_migrators(migrator_id: str):
49
50 assert now >= data[migrator_id, 'end_date'], f"This token migrator has not ended yet. It will end on {data[migrator_id, 'end_date']}."
51
52 migrated_wallets = data[migrator_id, 'migrated_wallets']
53 return migrated_wallets

Byte Code

e30000000000000000000000000900000040000000739000000065006400640164028d025a01650064036400640464058d035a026406640784005a036504640083016505650564089c026409640a840483015a066504640083016415650565056507650765076507640b9c06640c640d840583015a08650464008301650565096505640e9c03640f6410840483015a0a650464008301650564119c0164126413840483015a0b641453002916da0f636f6e5f686f7732746573746e6574da086d657461646174612902da08636f6e7472616374da046e616d65e900000000da04646174612903da0d64656661756c745f76616c756572030000007204000000630000000000000000000000000300000043000000730e00000074006a01740264013c006400530029024eda086f70657261746f722903da03637478da0663616c6c6572da0a5f5f6d65746164617461a900720c000000720c000000da00da045f5f5f5f0500000073020000000001720e0000002902da036b6579da096e65775f76616c7565630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174027c003c006400530029034e72080000007a1e6f6e6c79206f70657261746f722063616e20736574206d6574616461746129047209000000720a000000720b000000da0e417373657274696f6e4572726f722902720f0000007210000000720c000000720c000000720d000000da0f6368616e67655f6d6574616461746109000000730600000000021001060172120000002906da0b6d69677261746f725f69647203000000da0f6f70656e5f756e74696c5f79656172da106f70656e5f756e74696c5f6d6f6e7468da0e6f70656e5f756e74696c5f646179da0f6f70656e5f756e74696c5f686f757263060000000000000006000000080000004300000073d400000074006401190074016a026b0273167403640283018201740474057c00640366021900830164046b02733274036405830182017c0464006b03734274036406830182017c0364006b03735274036407830182017c0264006b037362740364088301820174066a067c027c037c047c0564098d0474076b0573807403640a8301820174016a0274057c00640366023c007c0174057c00640b66023c00690074057c00640c66023c00640d74057c00640e66023c0074066a067c027c037c047c05640d640d640f8d0674057c00641066023c006400530029114e72080000007a3c596f7520617265206e6f7420746865206f776e657220616e642063616e6e6f742063726561746f722061206d6967726174696e672077696e646f772eda0e6d69677261746f725f6f776e6572467a5054686973206d69677261746f722068617320616c7265616479206265656e20637265617465642c20706c6561736520637265617465206f6e652077697468206120646966666572656e74206e616d652e7a294d7573742070726f7669646520656e6420646179206f66206d6967726174696f6e2077696e646f77217a2b4d7573742070726f7669646520656e64206d6f6e7468206f66206d6967726174696f6e2077696e646f77217a2a4d7573742070726f7669646520656e642079656172206f66206d6967726174696f6e2077696e646f77212904da0479656172da056d6f6e7468da03646179da04686f75727a2b4d6967726174696f6e2077696e646f7720656e642063616e6e6f7420626520696e207468652070617374217203000000da106d696772617465645f77616c6c6574737205000000da0e746f74616c5f6d6967726174656429067219000000721a000000721b000000721c000000da066d696e757465da0b6d6963726f7365636f6e64da08656e645f646174652908720b0000007209000000720a0000007211000000da04626f6f6cda065f5f64617461da086461746574696d65da036e6f772906721300000072030000007214000000721500000072160000007217000000720c000000720c000000720d000000da146e65775f6d6967726174696f6e5f77696e646f771000000073220000000003060110010e010e01100110011001080108010e010e010c010c010c0104010601722600000029037213000000da11746f6b656e735f746f5f6d696772617465720300000063030000000000000005000000050000004300000073bc0000007c0274007c006401660219006b0273287401640274007c006401660219009b0064039d038301820174007c0064046602190074026b057340740164058301820174007c006406660219007d0374036a047c0283017d047c046a057c0174066a0774066a0864078d03010074066a087c036b0772867c036a0974066a087c016901830101006e127c0374066a08050019007c01370003003c007c0374007c00640666023c0074007c0064086602050019007c01370003003c006400530029094e72030000007a3c54686520636f6e747261637420646f6573206e6f74206d617463682074686520746f6b656e206d6967726174696f6e20636f6e7472616374206f6620da012e72210000007a47596f752063616e206e6f74206d69677261746520746f6b656e73207573696e672074686973206d69677261746f722061732074686520706572696f642068617320656e6465642e721d0000002903da06616d6f756e74da02746fda0c6d61696e5f6163636f756e74721e000000290a722300000072110000007225000000da09696d706f72746c6962da0d696d706f72745f6d6f64756c65da0d7472616e736665725f66726f6d7209000000da0474686973720a000000da067570646174652905721300000072270000007203000000721d000000da05746f6b656e720c000000720c000000720d000000da0d6d6967726174655f746f6b656e26000000731a0000000002120116010a010e010c010a010a010a010a01120212010c017232000000290172130000006301000000000000000200000005000000430000007338000000740074017c006401660219006b0573287402640274017c006401660219009b0064039d038301820174017c006404660219007d017c01530029054e72210000007a365468697320746f6b656e206d69677261746f7220686173206e6f7420656e646564207965742e2049742077696c6c20656e64206f6e207228000000721d000000290372250000007223000000721100000029027213000000721d000000720c000000720c000000720d000000da0e6c6973745f6d69677261746f72733800000073080000000002120116010c0172330000004e29017205000000290cda0448617368720b0000007223000000720e000000da085f5f6578706f7274da037374727212000000da03696e747226000000da05666c6f617472320000007233000000720c000000720c000000720c000000720d000000da083c6d6f64756c653e0100000073140000000c010e0308040601120606021c14060114110601