tx · 8WHkqnXCh7oV6gWXB3GkWJNRHYo98UsEGHXEo3zVHdmW

3NB2jbJZo5pokBTW3c4aiat3w9LbSLCbGU3:  -0.05000000 Waves

2019.11.09 02:00 [756617] smart account 3NB2jbJZo5pokBTW3c4aiat3w9LbSLCbGU3 > SELF 0.00000000 Waves

{ "type": 13, "id": "8WHkqnXCh7oV6gWXB3GkWJNRHYo98UsEGHXEo3zVHdmW", "fee": 5000000, "feeAssetId": null, "timestamp": 1573253822877, "version": 1, "sender": "3NB2jbJZo5pokBTW3c4aiat3w9LbSLCbGU3", "senderPublicKey": "D55uA65TM8azYFSfAKgf5mzRE1Do6r7bNchUFMUw4QFp", "proofs": [ "3U1VxoZLxjqGeeY9X6GHhFr3ARRiuoqo2NGT65x1UZGVrYQdpesUiRxsyTmxqQM2dFtdwrDqatrmJFnfN1aCetFN" ], "script": "base64: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", "chainId": 84, "height": 756617, "spentComplexity": 0 } View: original | compacted Prev: none Next: 8xZ4F1vQCn8JrbBNiwLjHqnHeEbFaa3g4o9czPvehJsr Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let YEAR = 31556952000
5+
6+let MONTH = (YEAR / 12)
7+
8+let ADMIN = "3NBDgR8hU6W86Sstn3EGid8k9uxkqiJjxT6"
9+
10+let TOKEN = base58'EJ85vmBXWEtV4yHLPRTxex4q4s9mC8jKUhheyjZxwnPw'
11+
12+let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
13+
14+let WVS = 100000000
15+
16+let PRICExBASIC = 60
17+
18+let PRICExADVANCED = 50
19+
20+let BASIC = "basic"
21+
22+let ADVANCED = "advanced"
23+
24+let NONE = "none"
25+
26+func getNumberByKey (key) = match getInteger(this, key) {
27+ case n: Int =>
28+ n
29+ case _ =>
30+ 0
31+}
32+
33+
34+func getStrByKey (key) = match getString(this, key) {
35+ case s: String =>
36+ s
37+ case _ =>
38+ NONE
39+}
40+
41+
42+func getKeySubscriptionEnd (addr) = (("member_" + addr) + "_subscription_end")
43+
44+
45+func getKeyPlan (addr) = (("member_" + addr) + "_plan")
46+
47+
48+func getTransferSet (account) = TransferSet([ScriptTransfer(account, 1, TOKEN)])
49+
50+
51+func getWriteSet (account,period,plan) = WriteSet([DataEntry(getKeySubscriptionEnd(account), (lastBlock.timestamp + period)), DataEntry(getKeyPlan(account), plan)])
52+
53+
54+func getResult (address,period,plan,isRenewal) = {
55+ let account = toBase58String(address.bytes)
56+ if (isRenewal)
57+ then getWriteSet(account, period, plan)
58+ else ScriptResult(getWriteSet(account, period, plan), getTransferSet(address))
59+ }
60+
61+
62+@Callable(i)
63+func subscribe (plan) = {
64+ let payment = extract(i.payment)
65+ if ((payment.assetId != wEUR))
66+ then throw("can use only wEUR token at the moment")
67+ else {
68+ let account = toBase58String(i.caller.bytes)
69+ let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(account))
70+ let isRenewal = (subscriptionEnd != 0)
71+ if ((plan == BASIC))
72+ then if ((PRICExBASIC > payment.amount))
73+ then throw("unsufficient payment amount for basic plan")
74+ else getResult(i.caller, YEAR, plan, isRenewal)
75+ else if ((plan == ADVANCED))
76+ then if ((PRICExADVANCED > payment.amount))
77+ then throw("unsufficient payment amount for advanced plan")
78+ else getResult(i.caller, MONTH, plan, isRenewal)
79+ else throw(("subscription to an unknown plan: " + plan))
80+ }
81+ }
82+
83+
84+
85+@Callable(i)
86+func subscribeUser (userAddress,plan) = {
87+ let account = toBase58String(i.caller.bytes)
88+ let dAppAccount = toBase58String(this.bytes)
89+ if (if ((account != ADMIN))
90+ then (account != dAppAccount)
91+ else false)
92+ then throw("only admins can do that")
93+ else {
94+ let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(userAddress))
95+ let isRenewal = (subscriptionEnd != 0)
96+ let period = if ((plan == BASIC))
97+ then YEAR
98+ else if ((plan == ADVANCED))
99+ then MONTH
100+ else throw(("subscription to an unknown plan: " + plan))
101+ getResult(addressFromStringValue(userAddress), period, plan, isRenewal)
102+ }
103+ }
104+
105+

github/deemru/w8io/c3f4982 
16.66 ms