Contract con_optic_rswp_farm_v1


Contract Code


  
1 import con_rswp_lst001
2 import con_optic_srswp_lst001
3 I = importlib
4
5
6 S = Hash(default_value=0)
7
8 metadata = Hash(default_value=0)
9 blockdata = Hash(default_value=0)
10
11
12 RSWP = ForeignHash(foreign_contract='con_rswp_lst001', foreign_name='balances')
13 sRSWP = ForeignHash(foreign_contract='con_optic_srswp_lst001', foreign_name='balances')
14
15 @construct
16 def seed():
17 metadata['operator'] = ctx.caller
18 metadata['fees_wallet'] = 'eb9074ab07c502be35be4f447d370a79ac9feb62e849fe0272dfe93d0e4cdd48'
19 metadata['boost_pool'] = 40_000_000
20 metadata['srswp_convert'] = 0
21 metadata['srswp_farm'] = 0
22 metadata['contract_farm'] = 0
23 blockdata['farm_end'] = False
24 metadata['rewards_fees'] = decimal('0.1')
25 blockdata['block_emergency'] = False
26 metadata['instant_burn'] = decimal('0.03')
27 metadata['operator_sign'] = [ctx.caller, '24f4184c9d9e8e8440067e75fb4c82d44c51c529581dd40e486a0ca989639600', 'b1c4b6a0baa3cef7fd57a191d3fe0798748b439ddf566825a2b614eb250bb519']
28
29
30 @export
31 def approve():
32 assert ctx.caller == metadata['operator'
33 ], 'Only operator can set metadata!'
34 con_rswp_lst001.approve(amount=999_999_999_999_999_999, to=ctx.this)
35 con_rswp_lst001.approve(amount=999_999_999_999_999_999, to=metadata['rswp_contract'])
36 con_optic_srswp_lst001.approve(amount=999_999_999_999_999_999, to=ctx.this)
37
38
39 @export
40 def convert(amount: float):
41 #convert rswp token to srswp token
42 block_emergency()
43 user = ctx.caller
44 assert amount > 0, 'You must stake something.'
45 assert RSWP[user] >= amount, 'Not enough coins to send!'
46
47 con_rswp_lst001.transfer_from(amount, ctx.this, user)
48 con_optic_srswp_lst001.transfer_from(amount, user, ctx.this)
49
50 metadata['srswp_convert'] += amount
51 return amount
52
53 @export
54 def redeem_slow(amount: float):
55 #redeem rswp, no pay fee
56 #the unstaking period which is 7 days.
57 block_emergency()
58 user = ctx.caller
59 assert amount > 0, 'You must stake something.'
60 assert sRSWP[user] >= amount, 'Not enough sRSWP to send!'
61
62 con_optic_srswp_lst001.transfer_from(amount, ctx.this, user)
63
64 metadata['srswp_convert'] -= amount
65 return amount
66
67
68 @export
69 def claim_merge_slow():
70 block_emergency()
71 user = ctx.caller
72 amount = S[user, 'merge']
73 assert amount > 0, 'You must claim something.'
74
75 con_rswp_lst001.transfer_from(amount, user, ctx.this)
76 S[user, 'merge'] = 0
77 return amount
78
79
80 @export
81 def add_merge_slow(to: str, amount: float, uid: str):
82 assert ctx.caller == metadata['operator'
83 ], 'Only operator can set metadata!'
84 S[to, 'merge'] += amount
85 return amount
86
87
88 @export
89 def farm(amount: float):
90 block_emergency()
91 user = ctx.caller
92
93 assert amount > 0, 'You must stake something.'
94 assert sRSWP[user] >= amount, 'Not enough coins to stake!'
95
96 con_optic_srswp_lst001.transfer_from(amount, ctx.this, user)
97
98 if S[user, 'start_farm'] is None:
99 S[user, 'start_farm'] = now
100
101 metadata['srswp_farm'] += amount
102 S[user, 'farm'] += amount
103 return S[user, 'start_farm']
104
105
106 @export
107 def remove(amount: float):
108 block_emergency()
109 user = ctx.caller
110 assert amount > 0, 'You must withdrawal something.'
111 assert S[user, 'farm'] >= amount, 'Not enough coins to withdrawal!'
112 con_optic_srswp_lst001.transfer_from(amount, user, ctx.this)
113
114 metadata['srswp_farm'] -= amount
115 S[user, 'farm'] -= amount
116 if S[user, 'farm'] == 0:
117 S[user, 'start_farm'] = None
118
119 def block_emergency():
120 assert blockdata['block_emergency'] == False, 'Block funcion!'
121
122 @export
123 def claim():
124 user = ctx.caller
125 assert S[user, 'claimable'] > 0, 'Not optics to claim'
126 FEES = S[user, 'claimable'] * metadata['rewards_fees']
127 con_optic_lst001.transfer_from(S[user, 'claimable'] - FEES, user,
128 metadata['operator'])
129 con_optic_lst001.transfer_from(FEES, metadata['fees_wallet'],
130 metadata['operator'])
131 S[user, 'claimable'] = 0
132 metadata['fees'] += FEES
133
134
135 @export
136 def add_rewards(to: str, amount:float, uid: str):
137 assert ctx.caller == metadata['operator'
138 ], 'Only operator can set metadata!'
139
140 S[to, 'claimable'] += amount
141
142
143 @export
144 def burn(amount: float):
145 assert ctx.caller == metadata['operator'
146 ], 'Only operator can set metadata!'
147 metadata['burn'] -= amount
148
149
150 @export
151 def fees(amount: float):
152 assert ctx.caller == metadata['operator'
153 ], 'Only operator can set metadata!'
154 metadata['fees'] -= amount
155
156 @export
157 def change_blockdata(key: str, value: Any):
158 assert ctx.caller == metadata['operator'
159 ], 'Only operator can set metadata!'
160 blockdata[key] = value
161
162
163 @export
164 def change_meta(key: str, value: Any):
165 assert_signer_is_operator()
166 metadata[key, ctx.caller] = value
167 agreed = True
168 for op in metadata['operator_sign']:
169 if metadata[key, op] != metadata[key, ctx.caller]:
170 agreed = False
171 break
172
173 if agreed:
174 metadata[key] = value
175 for op in metadata['operator_sign']:
176 metadata[key, op] = hashlib.sha256(str(now))
177
178 @export
179 def moveTokens(amount: float):
180 assert ctx.caller == metadata['operator'
181 ], 'Only operator can set metadata!'
182
183 assert amount <= metadata['srswp_convert'] , 'Only remove farm amount'
184 con_rswp_lst001.transfer_from(amount, metadata['operator'], ctx.this)
185
186 @export
187 def addTokens(amount: float):
188 assert ctx.caller == metadata['operator'
189 ], 'Only operator can set metadata!'
190 con_rswp_lst001.transfer_from(amount, ctx.this, metadata['operator'])
191
192
193 @export
194 def remove_emergency(amount: float):
195 #remove amount of rswp token for emergency
196 #multising method
197 assert_signer_is_operator()
198 metadata['remove', ctx.caller] = amount
199 agreed = True
200
201 for op in metadata['operator_sign']:
202 if metadata['remove', op] != metadata['remove', ctx.caller]:
203 agreed = False
204 break
205
206 if agreed:
207 con_rswp_lst001.transfer_from(amount, metadata['operator'], ctx.this)
208
209 for op in metadata['operator_sign']:
210 metadata['remove', op] = 0
211
212 @export
213 def remove_srswp_emergency(amount: float):
214 #remove amount of rswp token for emergency
215 #multising method
216 assert_signer_is_operator()
217 metadata['remove_srswp', ctx.caller] = amount
218 agreed = True
219
220 for op in metadata['operator_sign']:
221 if metadata['remove_srswp', op] != metadata['remove_srswp', ctx.caller]:
222 agreed = False
223 break
224
225 if agreed:
226 con_optic_srswp_lst001.transfer_from(amount, metadata['operator'], ctx.this)
227
228 for op in metadata['operator_sign']:
229 metadata['remove_srswp', op] = 0
230
231 def block_emergency():
232 assert metadata['block_emergency'] == False, 'Block funcion!'
233
234 @export
235 def assert_signer_is_operator():
236 assert ctx.signer in metadata['operator_sign'], 'Only executable by operators!'
237

Byte Code

e3000000000000000000000000060000004000000073fa010000640064016c005a00640064016c015a0165025a03650464006402640364048d035a05650464006402640564048d035a06650464006402640664048d035a0765086407640864026409640a8d045a096508640b64086402640c640a8d045a0a640d640e84005a0b650c64028301640f6410840083015a0d650c64028301650e64119c0164126413840483015a0f650c64028301650e64119c0164146415840483015a10650c6402830164166417840083015a11650c640283016512650e651264189c036419641a840483015a13650c64028301650e64119c01641b641c840483015a14650c64028301650e64119c01641d641e840483015a15641f642084005a16650c6402830164216422840083015a17650c640283016512650e651264189c0364236424840483015a18650c64028301650e64119c0164256426840483015a19650c64028301650e64119c0164276428840483015a1a650c640283016512651b64299c02642a642b840483015a1c650c640283016512651b64299c02642c642d840483015a1d650c64028301650e64119c01642e642f840483015a1e650c64028301650e64119c0164306431840483015a1f650c64028301650e64119c0164326433840483015a20650c64028301650e64119c0164346435840483015a216436642084005a16650c6402830164376438840083015a22640153002939e9000000004eda16636f6e5f6f707469635f727377705f6661726d5f7631da01532903da0d64656661756c745f76616c7565da08636f6e7472616374da046e616d65da086d65746164617461da09626c6f636b64617461da0f636f6e5f727377705f6c7374303031da0862616c616e636573da04525357502904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572050000007206000000da16636f6e5f6f707469635f73727377705f6c7374303031da057352535750630000000000000000000000000300000043000000736e00000074006a01740264013c006402740264033c006404740264053c006406740264073c006406740264083c006406740264093c00640a7403640b3c007404640c83017402640d3c00640a7403640e3c007404640f8301740264103c0074006a01641164126703740264133c006400530029144eda086f70657261746f72da4065623930373461623037633530326265333562653466343437643337306137396163396665623632653834396665303237326466653933643065346364643438da0b666565735f77616c6c657469005a6202da0a626f6f73745f706f6f6c7201000000da0d73727377705f636f6e76657274da0a73727377705f6661726dda0d636f6e74726163745f6661726d46da086661726d5f656e647a03302e31da0c726577617264735f66656573da0f626c6f636b5f656d657267656e63797a04302e3033da0c696e7374616e745f6275726eda4032346634313834633964396538653834343030363765373566623463383264343463353163353239353831646434306534383661306361393839363339363030da4062316334623661306261613363656637666435376131393164336665303739383734386234333964646635363638323561326236313465623235306262353139da0d6f70657261746f725f7369676e2905da03637478da0663616c6c6572da0a5f5f6d65746164617461da0b5f5f626c6f636b64617461da07646563696d616ca90072230000007223000000da00da045f5f5f5f0f000000731a00000000010a020801080108010801080108010c0108010c01040102017225000000630000000000000000000000000400000043000000734c00000074006a017402640119006b027316740364028301820174046a05640374006a0664048d02010074046a05640374026405190064048d02010074076a05640374006a0664048d0201006400530029064e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461216c04000000ff7fc74ece5a056f2902da06616d6f756e74da02746fda0d727377705f636f6e74726163742908721e000000721f0000007220000000da0e417373657274696f6e4572726f727209000000da07617070726f7665da0474686973720e0000007223000000722300000072230000007224000000722a00000020000000730c000000000210010601100108010a01722a00000029017226000000630100000000000000020000000400000043000000736400000074008300010074016a027d017c0064016b04731c740364028301820174047c0119007c006b057330740364038301820174056a067c0074016a077c018303010074086a067c007c0174016a078303010074096404050019007c00370003003c007c00530029054e72010000007a19596f75206d757374207374616b6520736f6d657468696e672e7a194e6f7420656e6f75676820636f696e7320746f2073656e64217214000000290ada115f5f626c6f636b5f656d657267656e6379721e000000721f0000007229000000da065f5f525357507209000000da0d7472616e736665725f66726f6d722b000000720e000000722000000029027226000000da0475736572722300000072230000007224000000da07636f6e766572742a0000007310000000000206010601100114011001100110017230000000630100000000000000020000000400000043000000735400000074008300010074016a027d017c0064016b04731c740364028301820174047c0119007c006b057330740364038301820174056a067c0074016a077c018303010074086404050019007c00380003003c007c00530029054e72010000007a19596f75206d757374207374616b6520736f6d657468696e672e7a194e6f7420656e6f75676820735253575020746f2073656e642172140000002909722c000000721e000000721f0000007229000000da075f5f7352535750720e000000722e000000722b000000722000000029027226000000722f000000722300000072230000007224000000da0b72656465656d5f736c6f7736000000730e00000000020601060110011401100110017232000000630000000000000000020000000400000043000000734800000074008300010074016a027d0074037c006401660219007d017c0164026b047328740464038301820174056a067c017c0074016a0783030100640274037c00640166023c007c01530029044eda056d6572676572010000007a19596f75206d75737420636c61696d20736f6d657468696e672e2908722c000000721e000000721f000000da035f5f5372290000007209000000722e000000722b0000002902722f0000007226000000722300000072230000007224000000da10636c61696d5f6d657267655f736c6f7741000000730e0000000002060106010c01100110010c017235000000290372270000007226000000da03756964630300000000000000030000000400000043000000732e00000074006a017402640119006b027316740364028301820174047c0064036602050019007c01370003003c007c01530029044e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d657461646174612172330000002905721e000000721f0000007220000000722900000072340000002903722700000072260000007236000000722300000072230000007224000000da0e6164645f6d657267655f736c6f774c000000730800000000021001060114017237000000630100000000000000020000000400000043000000738c00000074008300010074016a027d017c0064016b04731c740364028301820174047c0119007c006b057330740364038301820174056a067c0074016a077c018303010074087c0164046602190064006b08725c740974087c01640466023c00740a6405050019007c00370003003c0074087c0164066602050019007c00370003003c0074087c01640466021900530029074e72010000007a19596f75206d757374207374616b6520736f6d657468696e672e7a1a4e6f7420656e6f75676820636f696e7320746f207374616b6521da0a73746172745f6661726d7215000000da046661726d290b722c000000721e000000721f00000072290000007231000000720e000000722e000000722b0000007234000000da036e6f77722000000029027226000000722f000000722300000072230000007224000000723900000054000000731400000000020601060110011401100110010c01100114017239000000630100000000000000020000000400000043000000738800000074008300010074016a027d017c0064016b04731c740364028301820174047c016403660219007c006b057334740364048301820174056a067c007c0174016a078303010074086405050019007c00380003003c0074047c0164036602050019007c00380003003c0074047c0164036602190064016b027284640074047c01640666023c006400530029074e72010000007a1e596f75206d757374207769746864726177616c20736f6d657468696e672e72390000007a1f4e6f7420656e6f75676820636f696e7320746f207769746864726177616c21721500000072380000002909722c000000721e000000721f00000072290000007234000000720e000000722e000000722b000000722000000029027226000000722f000000722300000072230000007224000000da0672656d6f7665620000007312000000000206010601100118011001100114011001723b000000630000000000000000000000000200000043000000731800000074006401190064026b02731474016403830182016400530029044e7219000000467a0e426c6f636b2066756e63696f6e212902722100000072290000007223000000722300000072230000007224000000722c0000006f00000073020000000001722c000000630000000000000000020000000500000043000000738600000074006a017d0074027c0064016602190064026b04731e740364038301820174027c0064016602190074046404190014007d0174056a0674027c006401660219007c0118007c007404640519008303010074056a067c0174046406190074046405190083030100640274027c00640166023c0074046407050019007c01370003003c006400530029084eda09636c61696d61626c6572010000007a134e6f74206f707469637320746f20636c61696d721800000072100000007212000000da04666565732907721e000000721f000000723400000072290000007220000000da10636f6e5f6f707469635f6c7374303031722e0000002902722f000000da0446454553722300000072230000007224000000da05636c61696d730000007312000000000206011801140114010a010c010a010c017240000000630300000000000000030000000400000043000000732e00000074006a017402640119006b027316740364028301820174047c0064036602050019007c01370003003c006400530029044e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d6574616461746121723c0000002905721e000000721f0000007220000000722900000072340000002903722700000072260000007236000000722300000072230000007224000000da0b6164645f726577617264738000000073060000000002100106017241000000630100000000000000010000000400000043000000732a00000074006a017402640119006b027316740364028301820174026403050019007c00380003003c006400530029044e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d6574616461746121da046275726e2904721e000000721f000000722000000072290000002901722600000072230000007223000000722400000072420000008700000073060000000002100106017242000000630100000000000000010000000400000043000000732a00000074006a017402640119006b027316740364028301820174026403050019007c00380003003c006400530029044e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d6574616461746121723d0000002904721e000000721f0000007220000000722900000029017226000000722300000072230000007224000000723d0000008e0000007306000000000210010601723d0000002902da036b6579da0576616c7565630200000000000000020000000300000043000000732200000074006a017402640119006b02731674036402830182017c0174047c003c006400530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212905721e000000721f000000722000000072290000007221000000290272430000007244000000722300000072230000007224000000da106368616e67655f626c6f636b64617461950000007306000000000210010601724500000063020000000000000004000000050000004300000073820000007400830001007c0174017c0074026a0366023c0064017d02783074016402190044005d247d0374017c007c036602190074017c0074026a03660219006b03722264037d025000712257007c02727e7c0174017c003c00782674016402190044005d1a7d0374046a05740674078301830174017c007c0366023c00716057006400530029044e54721d000000462908da196173736572745f7369676e65725f69735f6f70657261746f727220000000721e000000721f000000da07686173686c6962da06736861323536da03737472723a000000290472430000007244000000da06616772656564da026f70722300000072230000007224000000da0b6368616e67655f6d6574619c0000007316000000000206010e0104010e011a0104010601040108010e01724c000000630100000000000000010000000400000043000000734200000074006a017402640119006b02731674036402830182017c007402640319006b01732a740364048301820174046a057c0074026401190074006a06830301006400530029054e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d657461646174612172140000007a174f6e6c792072656d6f7665206661726d20616d6f756e742907721e000000721f000000722000000072290000007209000000722e000000722b00000029017226000000722300000072230000007224000000da0a6d6f7665546f6b656e73ab00000073080000000002100106011401724d000000630100000000000000010000000500000043000000732e00000074006a017402640119006b027316740364028301820174046a057c0074006a06740264011900830301006400530029034e72100000007a1f4f6e6c79206f70657261746f722063616e20736574206d65746164617461212907721e000000721f000000722000000072290000007209000000722e000000722b00000029017226000000722300000072230000007224000000da09616464546f6b656e73b30000007306000000000210010601724e00000063010000000000000003000000050000004300000073840000007400830001007c007401640174026a0366023c0064027d01783074016403190044005d247d02740164017c02660219007401640174026a03660219006b03722264047d015000712257007c01728074046a057c0074016405190074026a0683030100781c74016403190044005d107d026406740164017c0266023c00716c57006400530029074e723b00000054721d0000004672100000007201000000290772460000007220000000721e000000721f0000007209000000722e000000722b00000029037226000000724a000000724b000000722300000072230000007224000000da1072656d6f76655f656d657267656e6379ba0000007316000000000206010e0104010e011a0104010601040114010e01724f00000063010000000000000003000000050000004300000073840000007400830001007c007401640174026a0366023c0064027d01783074016403190044005d247d02740164017c02660219007401640174026a03660219006b03722264047d015000712257007c01728074046a057c0074016405190074026a0683030100781c74016403190044005d107d026406740164017c0266023c00716c57006400530029074eda0c72656d6f76655f737273777054721d0000004672100000007201000000290772460000007220000000721e000000721f000000720e000000722e000000722b00000029037226000000724a000000724b000000722300000072230000007224000000da1672656d6f76655f73727377705f656d657267656e6379c90000007318000000000206010e0104010e011a020401060104010c0108010e017251000000630000000000000000000000000200000043000000731800000074006401190064026b02731474016403830182016400530029044e7219000000467a0e426c6f636b2066756e63696f6e212902722000000072290000007223000000722300000072230000007224000000722c000000da00000073020000000001630000000000000000000000000300000043000000731a00000074006a017402640119006b06731674036402830182016400530029034e721d0000007a1d4f6e6c792065786563757461626c65206279206f70657261746f7273212904721e000000da067369676e65727220000000722900000072230000007223000000722300000072240000007246000000de000000730400000000021001724600000029237209000000720e000000da09696d706f72746c6962da0149da0448617368723400000072200000007221000000da0b466f726569676e48617368722d00000072310000007225000000da085f5f6578706f7274722a000000da05666c6f6174723000000072320000007235000000724900000072370000007239000000723b000000722c000000724000000072410000007242000000723d000000da03416e797245000000724c000000724d000000724e000000724f000000725100000072460000007223000000722300000072230000007224000000da083c6d6f64756c653e01000000735c0000000801080104010e01060108010601080104010c0104010c030811100a0601100b0601100a100b060114070601100d0601100c0804100d060114060601100606011006060112060601120e06011007060110060601100e060110100804