Contract con_distr_rewards_yeti_2


Contract Code


  
1 I = importlib
2
3 import currency as tau
4 import con_yeti_contract_5 as yeti
5 import con_rocketswap_official_v1_1
6
7 YETI = 'con_yeti_contract_5'
8 DEX = con_rocketswap_official_v1_1
9 REWARDS_CONTRACT = 'con_distr_rewards_yeti_2'
10
11 yeti_balance = ForeignHash(foreign_contract=YETI, foreign_name='balances')
12
13 operator = Variable()
14 tau_to_distribute = Variable()
15
16 @construct
17 def init():
18 operator.set(YETI)
19 tau_to_distribute.set(decimal('0.00'))
20 approve()
21
22
23 @export
24 def approve():
25 tau.approve(amount=9999999999999999999999, to='con_rocketswap_official_v1_1')
26 yeti.approve(amount=9999999999999999999999, to='con_rocketswap_official_v1_1')
27
28 @export
29 def sell_yeti_for_rewards(cost_of_distr: float, reward_token: str):
30 #check if caller is operator
31 assert_operator()
32 #get total YETI balance of this contract
33 yeti_amount = yeti_balance[REWARDS_CONTRACT]
34 #sell all YETI for TAU
35 DEX.sell(contract=YETI, token_amount=yeti_amount)
36 #get total TAU balance of this contract
37 currency_balance = ForeignHash(foreign_contract='currency', foreign_name='balances')
38 currency_amount = currency_balance[REWARDS_CONTRACT]
39
40 assert currency_amount > cost_of_distr, 'Not enough to cover distribution fees'
41 #amount worth distributing
42 currency_amount -= cost_of_distr
43
44 if reward_token == 'currency':
45 tau_to_distribute.set(tau_to_distribute.get() + currency_amount)
46 else:
47 DEX.buy(contract=reward_token, currency_amount=currency_amount)
48
49 @export
50 def distribute_rewards(reward_token: str, addresses: list, holder_min: float,
51 eligible_total_balance: float):
52 #check if caller is operator
53 assert_operator()
54 #if nothing is passed to holder_min we assume a certain default value
55 if holder_min == None: holder_min = 50_000_000
56
57 if reward_token == 'currency':
58
59 rewards_token_amount = tau_to_distribute.get()
60
61 for address in addresses:
62 #get holder YETI balance
63 user_yeti_balance = yeti_balance[address]
64 #check if holder has a certain minimum to qualify for reward and
65 #if address is not a contract
66 if user_yeti_balance >= holder_min and not address.startswith('con_'):
67 #calculate amount to reward
68 reward_amount = rewards_token_amount * (user_yeti_balance/eligible_total_balance)
69 assert tau_to_distribute.get() >= decimal('0'), 'TAU for distribution is exhaused!'
70 #transfer reward to holder
71 tau.transfer(amount=reward_amount, to=address)
72 tau_to_distribute.set(tau_to_distribute.get() - reward_amount)
73 else:
74 #get total reward token balance of this contract
75 rewards_token_balance = ForeignHash(foreign_contract=reward_token,
76 foreign_name='balances')
77 rewards_token_amount = rewards_token_balance[REWARDS_CONTRACT]
78 token = I.import_module(reward_token)
79
80 for address in addresses:
81 #get holder YETI balance
82 user_yeti_balance = yeti_balance[address]
83 #check if holder has a certain minimum to qualify for reward and
84 #if address is not a contract
85 if user_yeti_balance >= holder_min and not address.startswith('con_'):
86 #calculate amount to reward
87 reward_amount = rewards_token_amount * (user_yeti_balance/eligible_total_balance)
88 #transfer reward to holder
89 token.transfer(amount=reward_amount, to=address)
90
91 def assert_operator():
92 assert ctx.caller == operator.get(), 'Only operator can call!'
93

Byte Code

e3000000000000000000000000060000004000000073a800000065005a01640064016c025a03640064016c045a05640064016c065a0664025a0765065a0864035a09650a650764046403640564068d045a0b650c6403640764088d025a0d650c6403640964088d025a0e640a640b84005a0f651064038301640c640d840083015a1165106403830165126513640e9c02640f6410840483015a14651064038301651365156512651264119c0464126413840483015a166414641584005a17640153002916e9000000004eda13636f6e5f796574695f636f6e74726163745f35da18636f6e5f64697374725f726577617264735f796574695f32da0862616c616e636573da0c796574695f62616c616e63652904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d65da08636f6e7472616374da046e616d65da086f70657261746f72290272080000007209000000da117461755f746f5f64697374726962757465630000000000000000000000000300000043000000732200000074006a0174028301010074036a01740464018301830101007405830001006400530029024e7a04302e30302906da0a5f5f6f70657261746f72da03736574da0459455449da135f5f7461755f746f5f64697374726962757465da07646563696d616cda07617070726f7665a90072120000007212000000da00da045f5f5f5f0f000000730600000000010a010e017214000000630000000000000000000000000400000043000000732000000074006a016401640264038d02010074026a016401640264038d0201006400530029044e6c05000000ff7f7f64ea26064fe121da1c636f6e5f726f636b6574737761705f6f6666696369616c5f76315f312902da06616d6f756e74da02746f2903da037461757211000000da047965746972120000007212000000721200000072130000007211000000150000007308000000000206010801060172110000002902da0d636f73745f6f665f6469737472da0c7265776172645f746f6b656e630200000000000000050000000600000043000000737a0000007400830001007401740219007d0274036a0474057c0264018d0201007406640264036404640564068d047d037c03740219007d047c047c006b04734474076407830182017c047c0038007d047c0164026b02726874086a0974086a0a83007c041700830101006e0e74036a0b7c017c0464088d0201006400530029094e29027208000000da0c746f6b656e5f616d6f756e74da0863757272656e637972040000007203000000da1063757272656e63795f62616c616e6365290472060000007207000000720800000072090000007a254e6f7420656e6f75676820746f20636f76657220646973747269627574696f6e206665657329027208000000da0f63757272656e63795f616d6f756e74290cda115f5f6173736572745f6f70657261746f72da0e5f5f796574695f62616c616e6365da10524557415244535f434f4e5452414354da03444558da0473656c6c720e000000da0b466f726569676e48617368da0e417373657274696f6e4572726f72720f000000720d000000da03676574da036275792905721a000000721b000000da0b796574695f616d6f756e74da125f5f63757272656e63795f62616c616e6365721f000000721200000072120000007213000000da1573656c6c5f796574695f666f725f726577617264731d00000073180000000002060108010e0104010401080108011001080108011402722b0000002904721b000000da09616464726573736573da0a686f6c6465725f6d696eda16656c696769626c655f746f74616c5f62616c616e63656304000000000000000a000000060000004300000073fc0000007400830001007c0264006b02721264017d027c0064026b02729274016a0283007d0478d47c0144005d647d0574037c0519007d067c067c026b0572287c056a04640383010c0072287c047c067c031b0014007d0774016a0283007405640483016b05736c740664058301820174076a087c077c0564068d02010074016a0974016a0283007c07180083010100712857006e66740a7c00640764086409640a8d047d087c08740b19007d04740c6a0d7c0083017d0978427c0144005d3a7d0574037c0519007d067c067c026b0572ba7c056a04640383010c0072ba7c047c067c031b0014007d077c096a087c077c0564068d02010071ba570064005300290b4e6980f0fa02721d000000da04636f6e5fda01307a2154415520666f7220646973747269627574696f6e2069732065786861757365642129027216000000721700000072040000007203000000da15726577617264735f746f6b656e5f62616c616e636529047206000000720700000072080000007209000000290e7220000000720f00000072270000007221000000da0a73746172747377697468721000000072260000007218000000da087472616e73666572720d00000072250000007222000000da0149da0d696d706f72745f6d6f64756c65290a721b000000722c000000722d000000722e000000da14726577617264735f746f6b656e5f616d6f756e74da0761646472657373da11757365725f796574695f62616c616e6365da0d7265776172645f616d6f756e74da175f5f726577617264735f746f6b656e5f62616c616e6365da05746f6b656e721200000072120000007213000000da12646973747269627574655f726577617264732e00000073380000000003060108010401080108010a0108010c01080104010801120106010e010a010e0204010401080108010a010a0108010c01080104010801723c000000630000000000000000000000000200000043000000731a00000074006a0174026a0383006b02731674046401830182016400530029024e7a174f6e6c79206f70657261746f722063616e2063616c6c212905da03637478da0663616c6c6572720c0000007227000000722600000072120000007212000000721200000072130000007220000000500000007302000000000172200000002918da09696d706f72746c69627234000000721d0000007218000000720200000072190000007215000000720e0000007223000000722200000072250000007221000000da085661726961626c65720c000000720f0000007214000000da085f5f6578706f72747211000000da05666c6f6174da03737472722b000000da046c697374723c00000072200000007212000000721200000072120000007213000000da083c6d6f64756c653e010000007326000000040108010801080104010401040106010a010c01040108030806100806011210060104011220