tx · FG9MjDQfbCca463AWZyHv2ioXNERmH2EtK418wwDGBjT

3Mx9FcvbywzbM3uTGL1ocnC6Yz4LwG6VNnQ:  -0.01000000 Waves

2020.09.23 07:46 [1189491] smart account 3Mx9FcvbywzbM3uTGL1ocnC6Yz4LwG6VNnQ > SELF 0.00000000 Waves

{ "type": 13, "id": "FG9MjDQfbCca463AWZyHv2ioXNERmH2EtK418wwDGBjT", "fee": 1000000, "feeAssetId": null, "timestamp": 1600836503441, "version": 2, "chainId": 84, "sender": "3Mx9FcvbywzbM3uTGL1ocnC6Yz4LwG6VNnQ", "senderPublicKey": "3rxJnS9mVKpfLXyuwkosSTVgnu1cZ6cGj1WTVNqrhcyd", "proofs": [ "Rair1mx793yiR8drcajcrVxpEwkvRHoRpVjWomgSFj98kBFWAVfqPo49duXzHp1A3NoSuAUAiMhZAc6zzMDsvpP" ], "script": "base64:AAIEAAAAAAAAACEIAhIECgIIARIDCgEIEgMKAQgSBAoCCAgSBQoDCAgIEgAAAAAHAAAAAAZMRVNTT04BAAAAIOjnSHw4js1vrbOhaypqBgUMh7yKo+Dj/vvXlCSDAODpAAAAAARQQVI3AQAAACDOWED9mOK0xZN34xzFUmgrQZwssasR1XxpyjfnkulHjAAAAAAUbGVzc29uT3duZXJQdWJsaWNLZXkBAAAAIMvz6LV2HlWvV7hd5NdB67aByerr/Xy+xoHyN/gRCdRpAAAAAAdwZW5kaW5nAAAAAAAAAAAAAAAAAAVzdGFydAAAAAAAAAAAAQAAAAADZW5kAAAAAAAAAAACAAAAAAxwYXltZW50VG9rZW4FAAAABFBBUjcAAAAGAAAAAWkBAAAAEWlzc3VlTGVzc29uVGlja2V0AAAAAgAAAARqc29uAAAABXByaWNlBAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAABkxFU1NPTgkAAAIAAAABAgAAABZ3b3JrcyB3aXRoIExFU1NPTiBvbmx5BAAAAA9pc3N1ZUN1cnJlbnRLZXkCAAAAC2lzc3VlTnVtYmVyBAAAABJpc3N1ZUN1cnJlbnROdW1iZXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAPaXNzdWVDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADm5ld0lzc3VlTnVtYmVyCQAAZAAAAAIFAAAAEmlzc3VlQ3VycmVudE51bWJlcgAAAAAAAAAAAQQAAAAUbmV3SXNzdWVOdW1iZXJTdHJpbmcJAAGkAAAAAQUAAAAObmV3SXNzdWVOdW1iZXIEAAAAF3RpY2tldERldGFpbHNDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgIAAAAHVElDS0VUXwUAAAAUbmV3SXNzdWVOdW1iZXJTdHJpbmcCAAAACF9kZXRhaWxzBAAAABV0aWNrZXRQcmljZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAdUSUNLRVRfBQAAABRuZXdJc3N1ZU51bWJlclN0cmluZwIAAAAGX3ByaWNlBAAAABd0aWNrZXRCYWxhbmNlQ3VycmVudEtleQkAASwAAAACCQABLAAAAAICAAAAB1RJQ0tFVF8FAAAAFG5ld0lzc3VlTnVtYmVyU3RyaW5nAgAAAAhfYmFsYW5jZQQAAAAadGlja2V0QmFsYW5jZUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAXdGlja2V0QmFsYW5jZUN1cnJlbnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAWbmV3VGlja2V0QmFsYW5jZUFtb3VudAkAAGQAAAACBQAAABp0aWNrZXRCYWxhbmNlQ3VycmVudEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFXRpY2tldFByaWNlQ3VycmVudEtleQUAAAAFcHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2lzc3VlQ3VycmVudEtleQUAAAAObmV3SXNzdWVOdW1iZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAXdGlja2V0RGV0YWlsc0N1cnJlbnRLZXkFAAAABGpzb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAF3RpY2tldEJhbGFuY2VDdXJyZW50S2V5BQAAABZuZXdUaWNrZXRCYWxhbmNlQW1vdW50BQAAAANuaWwAAAABaQEAAAAJYnV5VGlja2V0AAAAAQAAAAx0aWNrZXROdW1iZXIEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAVdGlja2V0UHJpY2VDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgIAAAAHVElDS0VUXwUAAAAMdGlja2V0TnVtYmVyAgAAAAZfcHJpY2UEAAAAGHRpY2tldFByaWNlQ3VycmVudEFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABV0aWNrZXRQcmljZUN1cnJlbnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAALdGlja2V0UHJpY2UFAAAAGHRpY2tldFByaWNlQ3VycmVudEFtb3VudAQAAAAKcmF0ZUFtb3VudAkAAGkAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAALdGlja2V0UHJpY2UDCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAADHBheW1lbnRUb2tlbgkAAAIAAAABAgAAABR3b3JrcyB3aXRoIFBBUjcgb25seQQAAAANYnV5Q3VycmVudEtleQkAASwAAAACAgAAAARidXlfCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAEGJ1eUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAANYnV5Q3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAxidXlOZXdBbW91bnQJAABkAAAAAgUAAAAQYnV5Q3VycmVudEFtb3VudAUAAAAKcmF0ZUFtb3VudAQAAAAXdGlja2V0QmFsYW5jZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAdUSUNLRVRfBQAAAAx0aWNrZXROdW1iZXICAAAACF9iYWxhbmNlBAAAABp0aWNrZXRCYWxhbmNlQ3VycmVudEFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABd0aWNrZXRCYWxhbmNlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABZuZXdUaWNrZXRCYWxhbmNlQW1vdW50CQAAZQAAAAIFAAAAGnRpY2tldEJhbGFuY2VDdXJyZW50QW1vdW50BQAAAApyYXRlQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1idXlDdXJyZW50S2V5BQAAAAxidXlOZXdBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAF3RpY2tldEJhbGFuY2VDdXJyZW50S2V5BQAAABZuZXdUaWNrZXRCYWxhbmNlQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcmF0ZUFtb3VudAUAAAAGTEVTU09OBQAAAANuaWwAAAABaQEAAAASbGVzc29uU3Vic2NyaXB0aW9uAAAAAQAAAAhsZXNzb25JZAQAAAADcG10CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAVwbXRJZAgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA5zdHVkZW50QWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABZsZXNzb25TdGF0dXNDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0dXNfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAE2xlc3NvbkZlZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACHBheW1lbnRfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAFmxlc3NvbkZlZUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAATbGVzc29uRmVlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAA90aWNrZXROZXdBbW91bnQJAABkAAAAAgUAAAAWbGVzc29uRmVlQ3VycmVudEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFmxlc3NvblN0YXR1c0N1cnJlbnRLZXkFAAAAB3BlbmRpbmcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2xlc3NvbkZlZUN1cnJlbnRLZXkFAAAAD3RpY2tldE5ld0Ftb3VudAUAAAADbmlsAAAAAWkBAAAAC2xlc3NvblN0YXJ0AAAAAgAAAAhsZXNzb25JZAAAAA5zdHVkZW50QWRkcmVzcwQAAAAWbGVzc29uU3RhdHVzQ3VycmVudEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHc3RhdHVzXwUAAAAIbGVzc29uSWQCAAAAAV8FAAAADnN0dWRlbnRBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZsZXNzb25TdGF0dXNDdXJyZW50S2V5BQAAAAVzdGFydAUAAAADbmlsAAAAAWkBAAAADGxlc3NvbkZpbmlzaAAAAAMAAAAIbGVzc29uSWQAAAAOc3R1ZGVudEFkZHJlc3MAAAAMdGlja2V0TnVtYmVyBAAAAAh0aWNrZXRJZAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAZMRVNTT04EAAAAE2xlc3NvbkZlZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACHBheW1lbnRfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAFmxlc3NvbkZlZUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAATbGVzc29uRmVlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABV0aWNrZXRQcmljZUN1cnJlbnRLZXkJAAEsAAAAAgUAAAAMdGlja2V0TnVtYmVyAgAAAAZfcHJpY2UEAAAAF3RpY2tldFByaWNlQ3VycmVudFByaWNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAFXRpY2tldFByaWNlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABNsZXNzb25QYXltZW50QW1vdW50CQAAaQAAAAIFAAAAFmxlc3NvbkZlZUN1cnJlbnRBbW91bnQFAAAAF3RpY2tldFByaWNlQ3VycmVudFByaWNlBAAAAAhvd25lcktleQkAASwAAAACAgAAAA5vd25lcl9iYWxhbmNlXwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAtvd25lckFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAAhvd25lcktleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAA5uZXdPd25lckFtb3VudAkAAGQAAAACBQAAAAtvd25lckFtb3VudAUAAAATbGVzc29uUGF5bWVudEFtb3VudAQAAAAWbGVzc29uU3RhdHVzQ3VycmVudEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHc3RhdHVzXwUAAAAIbGVzc29uSWQCAAAAAV8FAAAADnN0dWRlbnRBZGRyZXNzBAAAABB0aWNrZXRDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgUAAAAIdGlja2V0SWQCAAAAAV8FAAAADnN0dWRlbnRBZGRyZXNzBAAAABN0aWNrZXRDdXJyZW50QW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAEHRpY2tldEN1cnJlbnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAGdGlja2V0CQACWQAAAAEFAAAACHRpY2tldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAhvd25lcktleQUAAAAObmV3T3duZXJBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFmxlc3NvblN0YXR1c0N1cnJlbnRLZXkFAAAAA2VuZAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAABkxFU1NPTgUAAAAWbGVzc29uRmVlQ3VycmVudEFtb3VudAUAAAADbmlsAAAAAWkBAAAADW93bmVyV2l0aGRyYXcAAAAABAAAAAhvd25lcktleQkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA1jdXJyZW50QW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAACG93bmVyS2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAADCQAAZgAAAAIAAAAAAAAAAAAFAAAADWN1cnJlbnRBbW91bnQJAAACAAAAAQIAAAAeQ2FuJ3Qgd2l0aGRyYXcgbmVnYXRpdmUgYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAhvd25lcktleQAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWN1cnJlbnRBbW91bnQFAAAABFBBUjcFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5cQDdGA==", "height": 1189491, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 45LbC227N1ZkjR1Baw3ciHnX6ZihHAQWiLsKxMUyWZvn Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let LESSON = base58'GgA8mL3SEYvuhYoZFd418Li4bqXAasGbYCKJshTt2MGU'
5+
6+let PAR7 = base58'EtV3CXQ4wqm28WPB1KaBv5B9ke2bpXRZMutYNEJUQcXm'
7+
8+let lessonOwnerPublicKey = base58'Ej9UfgzgHeDPtoinwmZaL71Jv5CgK2QzWZZYyQUbpByz'
9+
10+let pending = 0
11+
12+let start = 1
13+
14+let end = 2
15+
16+let paymentToken = PAR7
17+
18+@Callable(i)
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 (ticketNumber) = {
51+ let pmt = i.payments[0]
52+ let ticketPriceCurrentKey = (("TICKET_" + ticketNumber) + "_price")
53+ let ticketPriceCurrentAmount = match getInteger(this, ticketPriceCurrentKey) {
54+ case a: Int =>
55+ a
56+ case _ =>
57+ 0
58+ }
59+ let ticketPrice = ticketPriceCurrentAmount
60+ let rateAmount = (pmt.amount / ticketPrice)
61+ if ((pmt.assetId != paymentToken))
62+ then throw("works with PAR7 only")
63+ else {
64+ let buyCurrentKey = ("buy_" + toBase58String(i.caller.bytes))
65+ let buyCurrentAmount = match getInteger(this, buyCurrentKey) {
66+ case a: Int =>
67+ a
68+ case _ =>
69+ 0
70+ }
71+ let buyNewAmount = (buyCurrentAmount + rateAmount)
72+ let ticketBalanceCurrentKey = (("TICKET_" + ticketNumber) + "_balance")
73+ let ticketBalanceCurrentAmount = match getInteger(this, ticketBalanceCurrentKey) {
74+ case a: Int =>
75+ a
76+ case _ =>
77+ 0
78+ }
79+ let newTicketBalanceAmount = (ticketBalanceCurrentAmount - rateAmount)
80+[IntegerEntry(buyCurrentKey, buyNewAmount), IntegerEntry(ticketBalanceCurrentKey, newTicketBalanceAmount), ScriptTransfer(i.caller, rateAmount, LESSON)]
81+ }
82+ }
83+
84+
85+
86+@Callable(i)
87+func lessonSubscription (lessonId) = {
88+ let pmt = i.payments[0]
89+ let pmtId = pmt.assetId
90+ let studentAddress = toBase58String(i.caller.bytes)
91+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
92+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
93+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
94+ case a: Int =>
95+ a
96+ case _ =>
97+ 0
98+ }
99+ let ticketNewAmount = (lessonFeeCurrentAmount + pmt.amount)
100+[IntegerEntry(lessonStatusCurrentKey, pending), IntegerEntry(lessonFeeCurrentKey, ticketNewAmount)]
101+ }
102+
103+
104+
105+@Callable(i)
106+func lessonStart (lessonId,studentAddress) = {
107+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
108+[IntegerEntry(lessonStatusCurrentKey, start)]
109+ }
110+
111+
112+
113+@Callable(i)
114+func lessonFinish (lessonId,studentAddress,ticketNumber) = {
115+ let ticketId = toBase58String(value(LESSON))
116+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
117+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
118+ case a: Int =>
119+ a
120+ case _ =>
121+ 0
122+ }
123+ let ticketPriceCurrentKey = (ticketNumber + "_price")
124+ let ticketPriceCurrentPrice = match getInteger(this, ticketPriceCurrentKey) {
125+ case a: Int =>
126+ a
127+ case _ =>
128+ 0
129+ }
130+ let lessonPaymentAmount = (lessonFeeCurrentAmount / ticketPriceCurrentPrice)
131+ let ownerKey = ("owner_balance_" + toBase58String(i.caller.bytes))
132+ let ownerAmount = match getInteger(this, ownerKey) {
133+ case a: Int =>
134+ a
135+ case _ =>
136+ 0
137+ }
138+ let newOwnerAmount = (ownerAmount + lessonPaymentAmount)
139+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
140+ let ticketCurrentKey = ((ticketId + "_") + studentAddress)
141+ let ticketCurrentAmount = match getInteger(this, ticketCurrentKey) {
142+ case a: Int =>
143+ a
144+ case _ =>
145+ 0
146+ }
147+ let ticket = fromBase58String(ticketId)
148+[IntegerEntry(ownerKey, newOwnerAmount), IntegerEntry(lessonStatusCurrentKey, end), Burn(LESSON, lessonFeeCurrentAmount)]
149+ }
150+
151+
152+
153+@Callable(i)
154+func ownerWithdraw () = {
155+ let ownerKey = toBase58String(i.caller.bytes)
156+ let currentAmount = match getInteger(this, ownerKey) {
157+ case a: Int =>
158+ a
159+ case _ =>
160+ 0
161+ }
162+ if ((0 > currentAmount))
163+ then throw("Can't withdraw negative amount")
164+ else [IntegerEntry(ownerKey, 0), ScriptTransfer(i.caller, currentAmount, PAR7)]
165+ }
166+
167+
168+@Verifier(tx)
169+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
170+

github/deemru/w8io/169f3d6 
36.03 ms