tx · FQPEEDaiWPyVykCD9HxepXSqBxhX51ComXSDmGPX2Ymj

3N72X4SpkNvXqi3ruDJgYdDmVJe8nRqj7zU:  -0.01400000 Waves

2020.09.23 06:31 [1189420] smart account 3N72X4SpkNvXqi3ruDJgYdDmVJe8nRqj7zU > SELF 0.00000000 Waves

{ "type": 13, "id": "FQPEEDaiWPyVykCD9HxepXSqBxhX51ComXSDmGPX2Ymj", "fee": 1400000, "feeAssetId": null, "timestamp": 1600831943003, "version": 2, "chainId": 84, "sender": "3N72X4SpkNvXqi3ruDJgYdDmVJe8nRqj7zU", "senderPublicKey": "Ej9UfgzgHeDPtoinwmZaL71Jv5CgK2QzWZZYyQUbpByz", "proofs": [ "4g9pPhBT659ktaAP2wznZfHgQ3K5y7siqAo92eSBtWQXYsBoGQxUiuzhaephgx6DfjcEqD8UkrqYZ8jf6Rq9Aify" ], "script": "base64:AAIEAAAAAAAAACIIAhIECgIIARIECgIBCBIDCgEIEgQKAggIEgUKAwgICBIAAAAABwAAAAAGTEVTU09OAQAAACDo50h8OI7Nb62zoWsqagYFDIe8iqPg4/7715QkgwDg6QAAAAAEUEFSNwEAAAAgzlhA/ZjitMWTd+McxVJoK0GcLLGrEdV8aco355LpR4wAAAAAFGxlc3Nvbk93bmVyUHVibGljS2V5AQAAACDL8+i1dh5Vr1e4XeTXQeu2gcnq6/18vsaB8jf4EQnUaQAAAAAHcGVuZGluZwAAAAAAAAAAAAAAAAAFc3RhcnQAAAAAAAAAAAEAAAAAA2VuZAAAAAAAAAAAAgAAAAAMcGF5bWVudFRva2VuBQAAAARQQVI3AAAABgAAAAFpAQAAABFpc3N1ZUxlc3NvblRpY2tldAAAAAIAAAAEanNvbgAAAAVwcmljZQQAAAADcG10CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAAZMRVNTT04JAAACAAAAAQIAAAAWd29ya3Mgd2l0aCBMRVNTT04gb25seQQAAAAPaXNzdWVDdXJyZW50S2V5AgAAAAtpc3N1ZU51bWJlcgQAAAASaXNzdWVDdXJyZW50TnVtYmVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAD2lzc3VlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAA5uZXdJc3N1ZU51bWJlcgkAAGQAAAACBQAAABJpc3N1ZUN1cnJlbnROdW1iZXIAAAAAAAAAAAEEAAAAFG5ld0lzc3VlTnVtYmVyU3RyaW5nCQABpAAAAAEFAAAADm5ld0lzc3VlTnVtYmVyBAAAABd0aWNrZXREZXRhaWxzQ3VycmVudEtleQkAASwAAAACCQABLAAAAAICAAAAB1RJQ0tFVF8FAAAAFG5ld0lzc3VlTnVtYmVyU3RyaW5nAgAAAAhfZGV0YWlscwQAAAAVdGlja2V0UHJpY2VDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgIAAAAHVElDS0VUXwUAAAAUbmV3SXNzdWVOdW1iZXJTdHJpbmcCAAAABl9wcmljZQQAAAAXdGlja2V0QmFsYW5jZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAdUSUNLRVRfBQAAABRuZXdJc3N1ZU51bWJlclN0cmluZwIAAAAIX2JhbGFuY2UEAAAAGnRpY2tldEJhbGFuY2VDdXJyZW50QW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAF3RpY2tldEJhbGFuY2VDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAFm5ld1RpY2tldEJhbGFuY2VBbW91bnQJAABkAAAAAgUAAAAadGlja2V0QmFsYW5jZUN1cnJlbnRBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABV0aWNrZXRQcmljZUN1cnJlbnRLZXkFAAAABXByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9pc3N1ZUN1cnJlbnRLZXkFAAAADm5ld0lzc3VlTnVtYmVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAF3RpY2tldERldGFpbHNDdXJyZW50S2V5BQAAAARqc29uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABd0aWNrZXRCYWxhbmNlQ3VycmVudEtleQUAAAAWbmV3VGlja2V0QmFsYW5jZUFtb3VudAUAAAADbmlsAAAAAWkBAAAACWJ1eVRpY2tldAAAAAIAAAALdGlja2V0UHJpY2UAAAAMdGlja2V0TnVtYmVyBAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAACnJhdGVBbW91bnQJAABpAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAAC3RpY2tldFByaWNlAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAARQQVI3CQAAAgAAAAECAAAAFHdvcmtzIHdpdGggUEFSNyBvbmx5BAAAAA1idXlDdXJyZW50S2V5CQABLAAAAAICAAAABGJ1eV8JAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAQYnV5Q3VycmVudEFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA1idXlDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADGJ1eU5ld0Ftb3VudAkAAGQAAAACBQAAABBidXlDdXJyZW50QW1vdW50BQAAAApyYXRlQW1vdW50BAAAABd0aWNrZXRCYWxhbmNlQ3VycmVudEtleQkAASwAAAACCQABLAAAAAICAAAAB1RJQ0tFVF8FAAAADHRpY2tldE51bWJlcgIAAAAIX2JhbGFuY2UEAAAAGnRpY2tldEJhbGFuY2VDdXJyZW50QW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAF3RpY2tldEJhbGFuY2VDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAFm5ld1RpY2tldEJhbGFuY2VBbW91bnQJAABlAAAAAgUAAAAadGlja2V0QmFsYW5jZUN1cnJlbnRBbW91bnQFAAAACnJhdGVBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWJ1eUN1cnJlbnRLZXkFAAAADGJ1eU5ld0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAXdGlja2V0QmFsYW5jZUN1cnJlbnRLZXkFAAAAFm5ld1RpY2tldEJhbGFuY2VBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApyYXRlQW1vdW50BQAAAAZMRVNTT04FAAAAA25pbAAAAAFpAQAAABJsZXNzb25TdWJzY3JpcHRpb24AAAABAAAACGxlc3NvbklkBAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAABXBtdElkCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADnN0dWRlbnRBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAFmxlc3NvblN0YXR1c0N1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXR1c18FAAAACGxlc3NvbklkAgAAAAFfBQAAAA5zdHVkZW50QWRkcmVzcwQAAAATbGVzc29uRmVlQ3VycmVudEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIcGF5bWVudF8FAAAACGxlc3NvbklkAgAAAAFfBQAAAA5zdHVkZW50QWRkcmVzcwQAAAAWbGVzc29uRmVlQ3VycmVudEFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABNsZXNzb25GZWVDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAD3RpY2tldE5ld0Ftb3VudAkAAGQAAAACBQAAABZsZXNzb25GZWVDdXJyZW50QW1vdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAWbGVzc29uU3RhdHVzQ3VycmVudEtleQUAAAAHcGVuZGluZwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATbGVzc29uRmVlQ3VycmVudEtleQUAAAAPdGlja2V0TmV3QW1vdW50BQAAAANuaWwAAAABaQEAAAALbGVzc29uU3RhcnQAAAACAAAACGxlc3NvbklkAAAADnN0dWRlbnRBZGRyZXNzBAAAABZsZXNzb25TdGF0dXNDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0dXNfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFmxlc3NvblN0YXR1c0N1cnJlbnRLZXkFAAAABXN0YXJ0BQAAAANuaWwAAAABaQEAAAAMbGVzc29uRmluaXNoAAAAAwAAAAhsZXNzb25JZAAAAA5zdHVkZW50QWRkcmVzcwAAAAx0aWNrZXROdW1iZXIEAAAACHRpY2tldElkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAABkxFU1NPTgQAAAATbGVzc29uRmVlQ3VycmVudEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIcGF5bWVudF8FAAAACGxlc3NvbklkAgAAAAFfBQAAAA5zdHVkZW50QWRkcmVzcwQAAAAWbGVzc29uRmVlQ3VycmVudEFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABNsZXNzb25GZWVDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAFXRpY2tldFByaWNlQ3VycmVudEtleQkAASwAAAACBQAAAAx0aWNrZXROdW1iZXICAAAABl9wcmljZQQAAAAXdGlja2V0UHJpY2VDdXJyZW50UHJpY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAVdGlja2V0UHJpY2VDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAE2xlc3NvblBheW1lbnRBbW91bnQJAABpAAAAAgUAAAAWbGVzc29uRmVlQ3VycmVudEFtb3VudAUAAAAXdGlja2V0UHJpY2VDdXJyZW50UHJpY2UEAAAACG93bmVyS2V5CQABLAAAAAICAAAADm93bmVyX2JhbGFuY2VfCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAC293bmVyQW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAACG93bmVyS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADm5ld093bmVyQW1vdW50CQAAZAAAAAIFAAAAC293bmVyQW1vdW50BQAAABNsZXNzb25QYXltZW50QW1vdW50BAAAABZsZXNzb25TdGF0dXNDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0dXNfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAEHRpY2tldEN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACBQAAAAh0aWNrZXRJZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAE3RpY2tldEN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAQdGlja2V0Q3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAZ0aWNrZXQJAAJZAAAAAQUAAAAIdGlja2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACG93bmVyS2V5BQAAAA5uZXdPd25lckFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAWbGVzc29uU3RhdHVzQ3VycmVudEtleQUAAAADZW5kCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAGTEVTU09OBQAAABZsZXNzb25GZWVDdXJyZW50QW1vdW50BQAAAANuaWwAAAABaQEAAAANb3duZXJXaXRoZHJhdwAAAAAEAAAACG93bmVyS2V5CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADWN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAIb3duZXJLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAMJAABmAAAAAgAAAAAAAAAAAAUAAAANY3VycmVudEFtb3VudAkAAAIAAAABAgAAAB5DYW4ndCB3aXRoZHJhdyBuZWdhdGl2ZSBhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACG93bmVyS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANY3VycmVudEFtb3VudAUAAAAEUEFSNwUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAFGxlc3Nvbk93bmVyUHVibGljS2V54TZosw==", "height": 1189420, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HbtV2BCKiYaCA2pm2mHdLAevT6Gr5LsSAvLZNaSMoe8e Next: E5fNY1mmzo1zZKA7WbqAGyFSfvL4hKEBR5mEMH6t9Y4h Diff:
OldNewDifferences
1313
1414 let end = 2
1515
16+let paymentToken = PAR7
17+
1618 @Callable(i)
17-func buyTicket (ticketPrice) = {
19+func issueLessonTicket (json,price) = {
20+ let pmt = i.payments[0]
21+ if ((pmt.assetId != LESSON))
22+ then throw("works with LESSON only")
23+ else {
24+ let issueCurrentKey = "issueNumber"
25+ let issueCurrentNumber = match getInteger(this, issueCurrentKey) {
26+ case a: Int =>
27+ a
28+ case _ =>
29+ 0
30+ }
31+ let newIssueNumber = (issueCurrentNumber + 1)
32+ let newIssueNumberString = toString(newIssueNumber)
33+ let ticketDetailsCurrentKey = (("TICKET_" + newIssueNumberString) + "_details")
34+ let ticketPriceCurrentKey = (("TICKET_" + newIssueNumberString) + "_price")
35+ let ticketBalanceCurrentKey = (("TICKET_" + newIssueNumberString) + "_balance")
36+ let ticketBalanceCurrentAmount = match getInteger(this, ticketBalanceCurrentKey) {
37+ case a: Int =>
38+ a
39+ case _ =>
40+ 0
41+ }
42+ let newTicketBalanceAmount = (ticketBalanceCurrentAmount + pmt.amount)
43+[IntegerEntry(ticketPriceCurrentKey, price), IntegerEntry(issueCurrentKey, newIssueNumber), StringEntry(ticketDetailsCurrentKey, json), IntegerEntry(ticketBalanceCurrentKey, newTicketBalanceAmount)]
44+ }
45+ }
46+
47+
48+
49+@Callable(i)
50+func buyTicket (ticketPrice,ticketNumber) = {
1851 let pmt = i.payments[0]
1952 let rateAmount = (pmt.amount / ticketPrice)
2053 if ((pmt.assetId != PAR7))
2154 then throw("works with PAR7 only")
2255 else {
23- let buyCurrentKey = toBase58String(i.caller.bytes)
56+ let buyCurrentKey = ("buy_" + toBase58String(i.caller.bytes))
2457 let buyCurrentAmount = match getInteger(this, buyCurrentKey) {
2558 case a: Int =>
2659 a
2861 0
2962 }
3063 let buyNewAmount = (buyCurrentAmount + rateAmount)
31-[IntegerEntry(("buy_" + buyCurrentKey), buyNewAmount), ScriptTransfer(i.caller, rateAmount, LESSON)]
64+ let ticketBalanceCurrentKey = (("TICKET_" + ticketNumber) + "_balance")
65+ let ticketBalanceCurrentAmount = match getInteger(this, ticketBalanceCurrentKey) {
66+ case a: Int =>
67+ a
68+ case _ =>
69+ 0
70+ }
71+ let newTicketBalanceAmount = (ticketBalanceCurrentAmount - rateAmount)
72+[IntegerEntry(buyCurrentKey, buyNewAmount), IntegerEntry(ticketBalanceCurrentKey, newTicketBalanceAmount), ScriptTransfer(i.caller, rateAmount, LESSON)]
3273 }
3374 }
3475
3980 let pmt = i.payments[0]
4081 let pmtId = pmt.assetId
4182 let studentAddress = toBase58String(i.caller.bytes)
42- let lessonCurrentKey = ((lessonId + "_") + studentAddress)
43- let lessonFeeCurrentKey = ((("fee_" + lessonId) + "_") + studentAddress)
44- let ticketId = toBase58String(value(pmtId))
45- let ticketCurrentKey = ((ticketId + "_") + studentAddress)
46- let ticketCurrentAmount = match getInteger(this, ticketCurrentKey) {
83+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
84+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
85+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
4786 case a: Int =>
4887 a
4988 case _ =>
5089 0
5190 }
52- let ticketNewAmount = (ticketCurrentAmount + pmt.amount)
53-[IntegerEntry(lessonCurrentKey, pending), IntegerEntry(lessonFeeCurrentKey, pmt.amount), IntegerEntry(ticketCurrentKey, ticketNewAmount)]
91+ let ticketNewAmount = (lessonFeeCurrentAmount + pmt.amount)
92+[IntegerEntry(lessonStatusCurrentKey, pending), IntegerEntry(lessonFeeCurrentKey, ticketNewAmount)]
5493 }
5594
5695
5796
5897 @Callable(i)
5998 func lessonStart (lessonId,studentAddress) = {
60- let lessonCurrentKey = ((lessonId + "_") + studentAddress)
61-[IntegerEntry(lessonCurrentKey, start)]
99+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
100+[IntegerEntry(lessonStatusCurrentKey, start)]
62101 }
63102
64103
65104
66105 @Callable(i)
67-func lessonFinish (lessonId,studentAddress) = {
106+func lessonFinish (lessonId,studentAddress,ticketNumber) = {
68107 let ticketId = toBase58String(value(LESSON))
69- let lessonFeeCurrentKey = ((("fee_" + lessonId) + "_") + studentAddress)
70- let paymentAmount = match getInteger(this, lessonFeeCurrentKey) {
108+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
109+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
71110 case a: Int =>
72111 a
73112 case _ =>
74113 0
75114 }
76- let ownerKey = toBase58String(i.caller.bytes)
115+ let ticketPriceCurrentKey = (ticketNumber + "_price")
116+ let ticketPriceCurrentPrice = match getInteger(this, ticketPriceCurrentKey) {
117+ case a: Int =>
118+ a
119+ case _ =>
120+ 0
121+ }
122+ let lessonPaymentAmount = (lessonFeeCurrentAmount / ticketPriceCurrentPrice)
123+ let ownerKey = ("owner_balance_" + toBase58String(i.caller.bytes))
77124 let ownerAmount = match getInteger(this, ownerKey) {
78125 case a: Int =>
79126 a
80127 case _ =>
81128 0
82129 }
83- let newOwnerAmount = (ownerAmount + paymentAmount)
84- let lessonCurrentKey = ((lessonId + "_") + studentAddress)
130+ let newOwnerAmount = (ownerAmount + lessonPaymentAmount)
131+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
85132 let ticketCurrentKey = ((ticketId + "_") + studentAddress)
86133 let ticketCurrentAmount = match getInteger(this, ticketCurrentKey) {
87134 case a: Int =>
90137 0
91138 }
92139 let ticket = fromBase58String(ticketId)
93-[IntegerEntry(ownerKey, newOwnerAmount), IntegerEntry(lessonCurrentKey, end), Burn(LESSON, paymentAmount)]
140+[IntegerEntry(ownerKey, newOwnerAmount), IntegerEntry(lessonStatusCurrentKey, end), Burn(LESSON, lessonFeeCurrentAmount)]
94141 }
95142
96143
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let LESSON = base58'GgA8mL3SEYvuhYoZFd418Li4bqXAasGbYCKJshTt2MGU'
55
66 let PAR7 = base58'EtV3CXQ4wqm28WPB1KaBv5B9ke2bpXRZMutYNEJUQcXm'
77
88 let lessonOwnerPublicKey = base58'Ej9UfgzgHeDPtoinwmZaL71Jv5CgK2QzWZZYyQUbpByz'
99
1010 let pending = 0
1111
1212 let start = 1
1313
1414 let end = 2
1515
16+let paymentToken = PAR7
17+
1618 @Callable(i)
17-func buyTicket (ticketPrice) = {
19+func issueLessonTicket (json,price) = {
20+ let pmt = i.payments[0]
21+ if ((pmt.assetId != LESSON))
22+ then throw("works with LESSON only")
23+ else {
24+ let issueCurrentKey = "issueNumber"
25+ let issueCurrentNumber = match getInteger(this, issueCurrentKey) {
26+ case a: Int =>
27+ a
28+ case _ =>
29+ 0
30+ }
31+ let newIssueNumber = (issueCurrentNumber + 1)
32+ let newIssueNumberString = toString(newIssueNumber)
33+ let ticketDetailsCurrentKey = (("TICKET_" + newIssueNumberString) + "_details")
34+ let ticketPriceCurrentKey = (("TICKET_" + newIssueNumberString) + "_price")
35+ let ticketBalanceCurrentKey = (("TICKET_" + newIssueNumberString) + "_balance")
36+ let ticketBalanceCurrentAmount = match getInteger(this, ticketBalanceCurrentKey) {
37+ case a: Int =>
38+ a
39+ case _ =>
40+ 0
41+ }
42+ let newTicketBalanceAmount = (ticketBalanceCurrentAmount + pmt.amount)
43+[IntegerEntry(ticketPriceCurrentKey, price), IntegerEntry(issueCurrentKey, newIssueNumber), StringEntry(ticketDetailsCurrentKey, json), IntegerEntry(ticketBalanceCurrentKey, newTicketBalanceAmount)]
44+ }
45+ }
46+
47+
48+
49+@Callable(i)
50+func buyTicket (ticketPrice,ticketNumber) = {
1851 let pmt = i.payments[0]
1952 let rateAmount = (pmt.amount / ticketPrice)
2053 if ((pmt.assetId != PAR7))
2154 then throw("works with PAR7 only")
2255 else {
23- let buyCurrentKey = toBase58String(i.caller.bytes)
56+ let buyCurrentKey = ("buy_" + toBase58String(i.caller.bytes))
2457 let buyCurrentAmount = match getInteger(this, buyCurrentKey) {
2558 case a: Int =>
2659 a
2760 case _ =>
2861 0
2962 }
3063 let buyNewAmount = (buyCurrentAmount + rateAmount)
31-[IntegerEntry(("buy_" + buyCurrentKey), buyNewAmount), ScriptTransfer(i.caller, rateAmount, LESSON)]
64+ let ticketBalanceCurrentKey = (("TICKET_" + ticketNumber) + "_balance")
65+ let ticketBalanceCurrentAmount = match getInteger(this, ticketBalanceCurrentKey) {
66+ case a: Int =>
67+ a
68+ case _ =>
69+ 0
70+ }
71+ let newTicketBalanceAmount = (ticketBalanceCurrentAmount - rateAmount)
72+[IntegerEntry(buyCurrentKey, buyNewAmount), IntegerEntry(ticketBalanceCurrentKey, newTicketBalanceAmount), ScriptTransfer(i.caller, rateAmount, LESSON)]
3273 }
3374 }
3475
3576
3677
3778 @Callable(i)
3879 func lessonSubscription (lessonId) = {
3980 let pmt = i.payments[0]
4081 let pmtId = pmt.assetId
4182 let studentAddress = toBase58String(i.caller.bytes)
42- let lessonCurrentKey = ((lessonId + "_") + studentAddress)
43- let lessonFeeCurrentKey = ((("fee_" + lessonId) + "_") + studentAddress)
44- let ticketId = toBase58String(value(pmtId))
45- let ticketCurrentKey = ((ticketId + "_") + studentAddress)
46- let ticketCurrentAmount = match getInteger(this, ticketCurrentKey) {
83+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
84+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
85+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
4786 case a: Int =>
4887 a
4988 case _ =>
5089 0
5190 }
52- let ticketNewAmount = (ticketCurrentAmount + pmt.amount)
53-[IntegerEntry(lessonCurrentKey, pending), IntegerEntry(lessonFeeCurrentKey, pmt.amount), IntegerEntry(ticketCurrentKey, ticketNewAmount)]
91+ let ticketNewAmount = (lessonFeeCurrentAmount + pmt.amount)
92+[IntegerEntry(lessonStatusCurrentKey, pending), IntegerEntry(lessonFeeCurrentKey, ticketNewAmount)]
5493 }
5594
5695
5796
5897 @Callable(i)
5998 func lessonStart (lessonId,studentAddress) = {
60- let lessonCurrentKey = ((lessonId + "_") + studentAddress)
61-[IntegerEntry(lessonCurrentKey, start)]
99+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
100+[IntegerEntry(lessonStatusCurrentKey, start)]
62101 }
63102
64103
65104
66105 @Callable(i)
67-func lessonFinish (lessonId,studentAddress) = {
106+func lessonFinish (lessonId,studentAddress,ticketNumber) = {
68107 let ticketId = toBase58String(value(LESSON))
69- let lessonFeeCurrentKey = ((("fee_" + lessonId) + "_") + studentAddress)
70- let paymentAmount = match getInteger(this, lessonFeeCurrentKey) {
108+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
109+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
71110 case a: Int =>
72111 a
73112 case _ =>
74113 0
75114 }
76- let ownerKey = toBase58String(i.caller.bytes)
115+ let ticketPriceCurrentKey = (ticketNumber + "_price")
116+ let ticketPriceCurrentPrice = match getInteger(this, ticketPriceCurrentKey) {
117+ case a: Int =>
118+ a
119+ case _ =>
120+ 0
121+ }
122+ let lessonPaymentAmount = (lessonFeeCurrentAmount / ticketPriceCurrentPrice)
123+ let ownerKey = ("owner_balance_" + toBase58String(i.caller.bytes))
77124 let ownerAmount = match getInteger(this, ownerKey) {
78125 case a: Int =>
79126 a
80127 case _ =>
81128 0
82129 }
83- let newOwnerAmount = (ownerAmount + paymentAmount)
84- let lessonCurrentKey = ((lessonId + "_") + studentAddress)
130+ let newOwnerAmount = (ownerAmount + lessonPaymentAmount)
131+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
85132 let ticketCurrentKey = ((ticketId + "_") + studentAddress)
86133 let ticketCurrentAmount = match getInteger(this, ticketCurrentKey) {
87134 case a: Int =>
88135 a
89136 case _ =>
90137 0
91138 }
92139 let ticket = fromBase58String(ticketId)
93-[IntegerEntry(ownerKey, newOwnerAmount), IntegerEntry(lessonCurrentKey, end), Burn(LESSON, paymentAmount)]
140+[IntegerEntry(ownerKey, newOwnerAmount), IntegerEntry(lessonStatusCurrentKey, end), Burn(LESSON, lessonFeeCurrentAmount)]
94141 }
95142
96143
97144
98145 @Callable(i)
99146 func ownerWithdraw () = {
100147 let ownerKey = toBase58String(i.caller.bytes)
101148 let currentAmount = match getInteger(this, ownerKey) {
102149 case a: Int =>
103150 a
104151 case _ =>
105152 0
106153 }
107154 if ((0 > currentAmount))
108155 then throw("Can't withdraw negative amount")
109156 else [IntegerEntry(ownerKey, 0), ScriptTransfer(i.caller, currentAmount, PAR7)]
110157 }
111158
112159
113160 @Verifier(tx)
114161 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], lessonOwnerPublicKey)
115162

github/deemru/w8io/3ef1775 
53.18 ms