tx · AKcDLnMyqvppYrVAEeETTxjH4utiFgDKo1q2FtDtKGbc

3NB2jbJZo5pokBTW3c4aiat3w9LbSLCbGU3:  -0.05000000 Waves

2019.11.12 19:56 [762107] smart account 3NB2jbJZo5pokBTW3c4aiat3w9LbSLCbGU3 > SELF 0.00000000 Waves

{ "type": 13, "id": "AKcDLnMyqvppYrVAEeETTxjH4utiFgDKo1q2FtDtKGbc", "fee": 5000000, "feeAssetId": null, "timestamp": 1573576646557, "version": 1, "sender": "3NB2jbJZo5pokBTW3c4aiat3w9LbSLCbGU3", "senderPublicKey": "D55uA65TM8azYFSfAKgf5mzRE1Do6r7bNchUFMUw4QFp", "proofs": [ "3tspD7PsK3wcSKDxKDh3xQSWSBpCoZcuB6rS72zyrTGJHWHpjM49htpmkGTcwkLh2Mn9MZdQ3LdHNo15foQj3gDA" ], "script": "base64:AAIDAAAAAAAAAA4IARIDCgEIEgUKAwgIAQAAABEAAAAABFlFQVIAAAAAB1jw38AAAAAABU1PTlRICQAAaQAAAAIFAAAABFlFQVIAAAAAAAAAAAwAAAAABUFETUlOAgAAACMzTkJEZ1I4aFU2Vzg2U3N0bjNFR2lkOGs5dXhrcWlKanhUNgAAAAAFVE9LRU4BAAAAIDikKD8KXBpuYwAPl+WO5qR/m+LZDjsA9NWjqNCpSyDFAAAAAAR3RVVSAQAAACDsFmEEX3uRIUEGOzfz59fU+PPTxg6qgJfzkL/Q+hW6mQAAAAADV1ZTAAAAAAAF9eEAAAAAAAtQUklDRXhCQVNJQwAAAAAAAAAAPAAAAAAOUFJJQ0V4QURWQU5DRUQAAAAAAAAAADIAAAAABUJBU0lDAgAAAAViYXNpYwAAAAAIQURWQU5DRUQCAAAACGFkdmFuY2VkAAAAAAROT05FAgAAAARub25lAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFuBQAAAAckbWF0Y2gwBQAAAAFuAAAAAAAAAAAAAQAAAAtnZXRTdHJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzBQAAAAROT05FAQAAABVnZXRLZXlTdWJzY3JpcHRpb25FbmQAAAACAAAABGFkZHIAAAAEcGxhbgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAANc3Vic2NyaXB0aW9uXwUAAAAEYWRkcgIAAAABXwUAAAAEcGxhbgEAAAAOZ2V0VHJhbnNmZXJTZXQAAAABAAAAC3VzZXJBZGRyZXNzCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAALdXNlckFkZHJlc3MAAAAAAAAAAAEFAAAABVRPS0VOBQAAAANuaWwBAAAAC2dldFdyaXRlU2V0AAAAAwAAAAt1c2VyQWRkcmVzcwAAAA9zdWJzY3JpcHRpb25FbmQAAAAEcGxhbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleVN1YnNjcmlwdGlvbkVuZAAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARwbGFuBQAAAA9zdWJzY3JpcHRpb25FbmQFAAAAA25pbAEAAAAJZ2V0UmVzdWx0AAAABAAAAAt1c2VyQWRkcmVzcwAAAAZwZXJpb2QAAAAEcGxhbgAAAA9zdWJzY3JpcHRpb25FbmQDCQAAZgAAAAIFAAAAD3N1YnNjcmlwdGlvbkVuZAAAAAAAAAAAAAkBAAAAC2dldFdyaXRlU2V0AAAAAwUAAAALdXNlckFkZHJlc3MJAABkAAAAAgUAAAAPc3Vic2NyaXB0aW9uRW5kBQAAAAZwZXJpb2QFAAAABHBsYW4JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAALZ2V0V3JpdGVTZXQAAAADBQAAAAt1c2VyQWRkcmVzcwkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAGcGVyaW9kBQAAAARwbGFuCQEAAAAOZ2V0VHJhbnNmZXJTZXQAAAABBQAAAAt1c2VyQWRkcmVzcwAAAAIAAAABaQEAAAAJc3Vic2NyaWJlAAAAAQAAAARwbGFuBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQDCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAR3RVVSCQAAAgAAAAECAAAAJ2FjY2VwdGluZyBvbmx5IHdFVVIgdG9rZW4gYXQgdGhlIG1vbWVudAQAAAAHYWNjb3VudAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA9zdWJzY3JpcHRpb25FbmQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRLZXlTdWJzY3JpcHRpb25FbmQAAAACBQAAAAdhY2NvdW50BQAAAARwbGFuAwkAAAAAAAACBQAAAARwbGFuBQAAAAVCQVNJQwMJAABmAAAAAgUAAAALUFJJQ0V4QkFTSUMIBQAAAAdwYXltZW50AAAABmFtb3VudAkAAAIAAAABAgAAACp1bnN1ZmZpY2llbnQgcGF5bWVudCBhbW91bnQgZm9yIGJhc2ljIHBsYW4JAQAAAAlnZXRSZXN1bHQAAAAEBQAAAAdhY2NvdW50BQAAAARZRUFSBQAAAARwbGFuBQAAAA9zdWJzY3JpcHRpb25FbmQDCQAAAAAAAAIFAAAABHBsYW4FAAAACEFEVkFOQ0VEAwkAAGYAAAACBQAAAA5QUklDRXhBRFZBTkNFRAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAECAAAALXVuc3VmZmljaWVudCBwYXltZW50IGFtb3VudCBmb3IgYWR2YW5jZWQgcGxhbgkBAAAACWdldFJlc3VsdAAAAAQFAAAAB2FjY291bnQFAAAABU1PTlRIBQAAAARwbGFuBQAAAA9zdWJzY3JpcHRpb25FbmQJAAACAAAAAQkAASwAAAACAgAAACFzdWJzY3JpcHRpb24gdG8gYW4gdW5rbm93biBwbGFuOiAFAAAABHBsYW4AAAABaQEAAAANc3Vic2NyaWJlVXNlcgAAAAMAAAALdXNlckFkZHJlc3MAAAAEcGxhbgAAABRwZXJpb2RJbk1pbGxpc2Vjb25kcwQAAAAHYWNjb3VudAkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAtkQXBwQWNjb3VudAkAAlgAAAABCAUAAAAEdGhpcwAAAAVieXRlcwMDCQEAAAACIT0AAAACBQAAAAdhY2NvdW50BQAAAAVBRE1JTgkBAAAAAiE9AAAAAgUAAAAHYWNjb3VudAUAAAALZEFwcEFjY291bnQHCQAAAgAAAAECAAAAF29ubHkgYWRtaW5zIGNhbiBkbyB0aGF0AwkAAGcAAAACAAAAAAAAAAAABQAAABRwZXJpb2RJbk1pbGxpc2Vjb25kcwkAAAIAAAABAgAAABRwZXJpb2QgaGFzIHRvIGJlID4gMAQAAAAPc3Vic2NyaXB0aW9uRW5kCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0S2V5U3Vic2NyaXB0aW9uRW5kAAAAAgUAAAALdXNlckFkZHJlc3MFAAAABHBsYW4JAQAAAAlnZXRSZXN1bHQAAAAEBQAAAAt1c2VyQWRkcmVzcwUAAAAUcGVyaW9kSW5NaWxsaXNlY29uZHMFAAAABHBsYW4FAAAAD3N1YnNjcmlwdGlvbkVuZAAAAADVrRI3", "chainId": 84, "height": 762107, "spentComplexity": 0 } View: original | compacted Prev: 8xZ4F1vQCn8JrbBNiwLjHqnHeEbFaa3g4o9czPvehJsr Next: none Diff:
OldNewDifferences
3939 }
4040
4141
42-func getKeySubscriptionEnd (addr) = (("member_" + addr) + "_subscription_end")
42+func getKeySubscriptionEnd (addr,plan) = ((("subscription_" + addr) + "_") + plan)
4343
4444
45-func getKeyPlan (addr) = (("member_" + addr) + "_plan")
45+func getTransferSet (userAddress) = TransferSet([ScriptTransfer(addressFromStringValue(userAddress), 1, TOKEN)])
4646
4747
48-func getTransferSet (account) = TransferSet([ScriptTransfer(account, 1, TOKEN)])
48+func getWriteSet (userAddress,subscriptionEnd,plan) = WriteSet([DataEntry(getKeySubscriptionEnd(userAddress, plan), subscriptionEnd)])
4949
5050
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- }
51+func getResult (userAddress,period,plan,subscriptionEnd) = if ((subscriptionEnd > 0))
52+ then getWriteSet(userAddress, (subscriptionEnd + period), plan)
53+ else ScriptResult(getWriteSet(userAddress, (lastBlock.timestamp + period), plan), getTransferSet(userAddress))
6054
6155
6256 @Callable(i)
6357 func subscribe (plan) = {
6458 let payment = extract(i.payment)
6559 if ((payment.assetId != wEUR))
66- then throw("can use only wEUR token at the moment")
60+ then throw("accepting only wEUR token at the moment")
6761 else {
6862 let account = toBase58String(i.caller.bytes)
69- let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(account))
70- let isRenewal = (subscriptionEnd != 0)
63+ let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(account, plan))
7164 if ((plan == BASIC))
7265 then if ((PRICExBASIC > payment.amount))
7366 then throw("unsufficient payment amount for basic plan")
74- else getResult(i.caller, YEAR, plan, isRenewal)
67+ else getResult(account, YEAR, plan, subscriptionEnd)
7568 else if ((plan == ADVANCED))
7669 then if ((PRICExADVANCED > payment.amount))
7770 then throw("unsufficient payment amount for advanced plan")
78- else getResult(i.caller, MONTH, plan, isRenewal)
71+ else getResult(account, MONTH, plan, subscriptionEnd)
7972 else throw(("subscription to an unknown plan: " + plan))
8073 }
8174 }
8376
8477
8578 @Callable(i)
86-func subscribeUser (userAddress,plan) = {
79+func subscribeUser (userAddress,plan,periodInMilliseconds) = {
8780 let account = toBase58String(i.caller.bytes)
8881 let dAppAccount = toBase58String(this.bytes)
8982 if (if ((account != ADMIN))
9083 then (account != dAppAccount)
9184 else false)
9285 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- }
86+ else if ((0 >= periodInMilliseconds))
87+ then throw("period has to be > 0")
88+ else {
89+ let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(userAddress, plan))
90+ getResult(userAddress, periodInMilliseconds, plan, subscriptionEnd)
91+ }
10392 }
10493
10594
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let YEAR = 31556952000
55
66 let MONTH = (YEAR / 12)
77
88 let ADMIN = "3NBDgR8hU6W86Sstn3EGid8k9uxkqiJjxT6"
99
1010 let TOKEN = base58'4p71jCgmDVcv2J9HLrtEXRSE9UPNFfVwGg7nRh2f6r5r'
1111
1212 let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
1313
1414 let WVS = 100000000
1515
1616 let PRICExBASIC = 60
1717
1818 let PRICExADVANCED = 50
1919
2020 let BASIC = "basic"
2121
2222 let ADVANCED = "advanced"
2323
2424 let NONE = "none"
2525
2626 func getNumberByKey (key) = match getInteger(this, key) {
2727 case n: Int =>
2828 n
2929 case _ =>
3030 0
3131 }
3232
3333
3434 func getStrByKey (key) = match getString(this, key) {
3535 case s: String =>
3636 s
3737 case _ =>
3838 NONE
3939 }
4040
4141
42-func getKeySubscriptionEnd (addr) = (("member_" + addr) + "_subscription_end")
42+func getKeySubscriptionEnd (addr,plan) = ((("subscription_" + addr) + "_") + plan)
4343
4444
45-func getKeyPlan (addr) = (("member_" + addr) + "_plan")
45+func getTransferSet (userAddress) = TransferSet([ScriptTransfer(addressFromStringValue(userAddress), 1, TOKEN)])
4646
4747
48-func getTransferSet (account) = TransferSet([ScriptTransfer(account, 1, TOKEN)])
48+func getWriteSet (userAddress,subscriptionEnd,plan) = WriteSet([DataEntry(getKeySubscriptionEnd(userAddress, plan), subscriptionEnd)])
4949
5050
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- }
51+func getResult (userAddress,period,plan,subscriptionEnd) = if ((subscriptionEnd > 0))
52+ then getWriteSet(userAddress, (subscriptionEnd + period), plan)
53+ else ScriptResult(getWriteSet(userAddress, (lastBlock.timestamp + period), plan), getTransferSet(userAddress))
6054
6155
6256 @Callable(i)
6357 func subscribe (plan) = {
6458 let payment = extract(i.payment)
6559 if ((payment.assetId != wEUR))
66- then throw("can use only wEUR token at the moment")
60+ then throw("accepting only wEUR token at the moment")
6761 else {
6862 let account = toBase58String(i.caller.bytes)
69- let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(account))
70- let isRenewal = (subscriptionEnd != 0)
63+ let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(account, plan))
7164 if ((plan == BASIC))
7265 then if ((PRICExBASIC > payment.amount))
7366 then throw("unsufficient payment amount for basic plan")
74- else getResult(i.caller, YEAR, plan, isRenewal)
67+ else getResult(account, YEAR, plan, subscriptionEnd)
7568 else if ((plan == ADVANCED))
7669 then if ((PRICExADVANCED > payment.amount))
7770 then throw("unsufficient payment amount for advanced plan")
78- else getResult(i.caller, MONTH, plan, isRenewal)
71+ else getResult(account, MONTH, plan, subscriptionEnd)
7972 else throw(("subscription to an unknown plan: " + plan))
8073 }
8174 }
8275
8376
8477
8578 @Callable(i)
86-func subscribeUser (userAddress,plan) = {
79+func subscribeUser (userAddress,plan,periodInMilliseconds) = {
8780 let account = toBase58String(i.caller.bytes)
8881 let dAppAccount = toBase58String(this.bytes)
8982 if (if ((account != ADMIN))
9083 then (account != dAppAccount)
9184 else false)
9285 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- }
86+ else if ((0 >= periodInMilliseconds))
87+ then throw("period has to be > 0")
88+ else {
89+ let subscriptionEnd = getNumberByKey(getKeySubscriptionEnd(userAddress, plan))
90+ getResult(userAddress, periodInMilliseconds, plan, subscriptionEnd)
91+ }
10392 }
10493
10594

github/deemru/w8io/c3f4982 
59.30 ms