tx · 5n2AWeGyY72PxG6Be3znxUcZemkuR9R65fH7GnSA9RUK

3Mpq53k4dELxDpsAjr8fgmJ78Rv6Fd2pkkE:  -0.01000000 Waves

2020.09.24 17:07 [1191489] smart account 3Mpq53k4dELxDpsAjr8fgmJ78Rv6Fd2pkkE > SELF 0.00000000 Waves

{ "type": 13, "id": "5n2AWeGyY72PxG6Be3znxUcZemkuR9R65fH7GnSA9RUK", "fee": 1000000, "feeAssetId": null, "timestamp": 1600956435931, "version": 2, "chainId": 84, "sender": "3Mpq53k4dELxDpsAjr8fgmJ78Rv6Fd2pkkE", "senderPublicKey": "6Rp2k9V8Ax32DDdXxD19FACsXNSC2xTfDVKv4hC5fy8T", "proofs": [ "fPcqorqELEoka1hhjjtxCvEhaHbQUqBWbsR8voiSGfkoGkTTYNsnbCuqAu27NAtRprWBAm18KAiMFN5zBji4QeV" ], "script": "base64:AAIEAAAAAAAAACEIAhIECgIIARIDCgEIEgMKAQgSBAoCCAgSBQoDCAgIEgAAAAAKAAAAAAZMRVNTT04BAAAAIOjnSHw4js1vrbOhaypqBgUMh7yKo+Dj/vvXlCSDAODpAAAAAARQQVI3AQAAACDOWED9mOK0xZN34xzFUmgrQZwssasR1XxpyjfnkulHjAAAAAAESlBZTgEAAAAgpkwt1dw/HjX4xz4uw1W7wTtHqP/hoq/OIPS85VScd2AAAAAABFVTRE4BAAAAICJkPx6+YEbpEWoTE9ymM/4Wfgf5d+mz8hX8mUkqMAo3AAAAAAdQQVI3UEFZAQAAACCXnW4Q/g8CyoQAfx9ug2MeGb+saXzue5DNzkjl0gdBIwAAAAAUbGVzc29uT3duZXJQdWJsaWNLZXkBAAAAINbyv5Ac0MRdf7uiiOo57gRy8h66G93ymjYom8jUMkVUAAAAAAdwZW5kaW5nAAAAAAAAAAAAAAAAAAVzdGFydAAAAAAAAAAAAQAAAAADZW5kAAAAAAAAAAACAAAAAAxwYXltZW50VG9rZW4FAAAABFBBUjcAAAAGAAAAAWkBAAAAEWlzc3VlTGVzc29uVGlja2V0AAAAAgAAAARqc29uAAAABXByaWNlBAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAABkxFU1NPTgkAAAIAAAABAgAAABZ3b3JrcyB3aXRoIExFU1NPTiBvbmx5BAAAAA9pc3N1ZUN1cnJlbnRLZXkCAAAAC2lzc3VlTnVtYmVyBAAAABJpc3N1ZUN1cnJlbnROdW1iZXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAPaXNzdWVDdXJyZW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADm5ld0lzc3VlTnVtYmVyCQAAZAAAAAIFAAAAEmlzc3VlQ3VycmVudE51bWJlcgAAAAAAAAAAAQQAAAAUbmV3SXNzdWVOdW1iZXJTdHJpbmcJAAGkAAAAAQUAAAAObmV3SXNzdWVOdW1iZXIEAAAAF3RpY2tldERldGFpbHNDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgIAAAAHVElDS0VUXwUAAAAUbmV3SXNzdWVOdW1iZXJTdHJpbmcCAAAACF9kZXRhaWxzBAAAABV0aWNrZXRQcmljZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAdUSUNLRVRfBQAAABRuZXdJc3N1ZU51bWJlclN0cmluZwIAAAAGX3ByaWNlBAAAABd0aWNrZXRCYWxhbmNlQ3VycmVudEtleQkAASwAAAACCQABLAAAAAICAAAAB1RJQ0tFVF8FAAAAFG5ld0lzc3VlTnVtYmVyU3RyaW5nAgAAAAhfYmFsYW5jZQQAAAAadGlja2V0QmFsYW5jZUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAXdGlja2V0QmFsYW5jZUN1cnJlbnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAWbmV3VGlja2V0QmFsYW5jZUFtb3VudAkAAGQAAAACBQAAABp0aWNrZXRCYWxhbmNlQ3VycmVudEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFXRpY2tldFByaWNlQ3VycmVudEtleQUAAAAFcHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2lzc3VlQ3VycmVudEtleQUAAAAObmV3SXNzdWVOdW1iZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAXdGlja2V0RGV0YWlsc0N1cnJlbnRLZXkFAAAABGpzb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAF3RpY2tldEJhbGFuY2VDdXJyZW50S2V5BQAAABZuZXdUaWNrZXRCYWxhbmNlQW1vdW50BQAAAANuaWwAAAABaQEAAAAJYnV5VGlja2V0AAAAAQAAAAx0aWNrZXROdW1iZXIEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAVdGlja2V0UHJpY2VDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgIAAAAHVElDS0VUXwUAAAAMdGlja2V0TnVtYmVyAgAAAAZfcHJpY2UEAAAAGHRpY2tldFByaWNlQ3VycmVudEFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABV0aWNrZXRQcmljZUN1cnJlbnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAALdGlja2V0UHJpY2UFAAAAGHRpY2tldFByaWNlQ3VycmVudEFtb3VudAQAAAAKcmF0ZUFtb3VudAkAAGkAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAALdGlja2V0UHJpY2UDCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAADHBheW1lbnRUb2tlbgkAAAIAAAABAgAAAB13b3JrcyB3aXRoIFBheW1lbnQgVG9rZW4gb25seQQAAAANYnV5Q3VycmVudEtleQkAASwAAAACAgAAAARidXlfCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAEGJ1eUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAANYnV5Q3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAxidXlOZXdBbW91bnQJAABkAAAAAgUAAAAQYnV5Q3VycmVudEFtb3VudAUAAAAKcmF0ZUFtb3VudAQAAAAXdGlja2V0QmFsYW5jZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAdUSUNLRVRfBQAAAAx0aWNrZXROdW1iZXICAAAACF9iYWxhbmNlBAAAABp0aWNrZXRCYWxhbmNlQ3VycmVudEFtb3VudAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAABd0aWNrZXRCYWxhbmNlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABZuZXdUaWNrZXRCYWxhbmNlQW1vdW50CQAAZQAAAAIFAAAAGnRpY2tldEJhbGFuY2VDdXJyZW50QW1vdW50BQAAAApyYXRlQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1idXlDdXJyZW50S2V5BQAAAAxidXlOZXdBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAF3RpY2tldEJhbGFuY2VDdXJyZW50S2V5BQAAABZuZXdUaWNrZXRCYWxhbmNlQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAKcmF0ZUFtb3VudAUAAAAGTEVTU09OBQAAAANuaWwAAAABaQEAAAASbGVzc29uU3Vic2NyaXB0aW9uAAAAAQAAAAhsZXNzb25JZAQAAAADcG10CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAVwbXRJZAgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA5zdHVkZW50QWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABZsZXNzb25TdGF0dXNDdXJyZW50S2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0dXNfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAE2xlc3NvbkZlZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACHBheW1lbnRfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAFmxlc3NvbkZlZUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAATbGVzc29uRmVlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAA90aWNrZXROZXdBbW91bnQJAABkAAAAAgUAAAAWbGVzc29uRmVlQ3VycmVudEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFmxlc3NvblN0YXR1c0N1cnJlbnRLZXkFAAAAB3BlbmRpbmcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2xlc3NvbkZlZUN1cnJlbnRLZXkFAAAAD3RpY2tldE5ld0Ftb3VudAUAAAADbmlsAAAAAWkBAAAAC2xlc3NvblN0YXJ0AAAAAgAAAAhsZXNzb25JZAAAAA5zdHVkZW50QWRkcmVzcwQAAAAWbGVzc29uU3RhdHVzQ3VycmVudEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHc3RhdHVzXwUAAAAIbGVzc29uSWQCAAAAAV8FAAAADnN0dWRlbnRBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZsZXNzb25TdGF0dXNDdXJyZW50S2V5BQAAAAVzdGFydAUAAAADbmlsAAAAAWkBAAAADGxlc3NvbkZpbmlzaAAAAAMAAAAIbGVzc29uSWQAAAAOc3R1ZGVudEFkZHJlc3MAAAAMdGlja2V0TnVtYmVyBAAAAAh0aWNrZXRJZAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAZMRVNTT04EAAAAE2xlc3NvbkZlZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACHBheW1lbnRfBQAAAAhsZXNzb25JZAIAAAABXwUAAAAOc3R1ZGVudEFkZHJlc3MEAAAAFmxlc3NvbkZlZUN1cnJlbnRBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAATbGVzc29uRmVlQ3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABV0aWNrZXRQcmljZUN1cnJlbnRLZXkJAAEsAAAAAgkAASwAAAACAgAAAAdUSUNLRVRfBQAAAAx0aWNrZXROdW1iZXICAAAABl9wcmljZQQAAAAYdGlja2V0UHJpY2VDdXJyZW50QW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAFXRpY2tldFByaWNlQ3VycmVu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", "height": 1191489, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none 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 JPYN = base58'CCA3xSCed22LYv22gZ646XjKQikbGYRe49StqbrSkNEK'
9+
10+let USDN = base58'3KFXBGGLCjA5Z2DuW4Dq9fDDrHjJJP1ZEkaoajSzuKsC'
11+
12+let PAR7PAY = base58'BCqo4hvDBB2dzmidJQKkVtQtkgEQVVwMy1jjV4R4tNB4'
13+
14+let lessonOwnerPublicKey = base58'FU4wEpLzTjfekkKGGSaXKgBmP1LNJu6ewSw82z6AjoXH'
15+
16+let pending = 0
17+
18+let start = 1
19+
20+let end = 2
21+
22+let paymentToken = PAR7
23+
24+@Callable(i)
25+func issueLessonTicket (json,price) = {
26+ let pmt = i.payments[0]
27+ if ((pmt.assetId != LESSON))
28+ then throw("works with LESSON only")
29+ else {
30+ let issueCurrentKey = "issueNumber"
31+ let issueCurrentNumber = match getInteger(this, issueCurrentKey) {
32+ case a: Int =>
33+ a
34+ case _ =>
35+ 0
36+ }
37+ let newIssueNumber = (issueCurrentNumber + 1)
38+ let newIssueNumberString = toString(newIssueNumber)
39+ let ticketDetailsCurrentKey = (("TICKET_" + newIssueNumberString) + "_details")
40+ let ticketPriceCurrentKey = (("TICKET_" + newIssueNumberString) + "_price")
41+ let ticketBalanceCurrentKey = (("TICKET_" + newIssueNumberString) + "_balance")
42+ let ticketBalanceCurrentAmount = match getInteger(this, ticketBalanceCurrentKey) {
43+ case a: Int =>
44+ a
45+ case _ =>
46+ 0
47+ }
48+ let newTicketBalanceAmount = (ticketBalanceCurrentAmount + pmt.amount)
49+[IntegerEntry(ticketPriceCurrentKey, price), IntegerEntry(issueCurrentKey, newIssueNumber), StringEntry(ticketDetailsCurrentKey, json), IntegerEntry(ticketBalanceCurrentKey, newTicketBalanceAmount)]
50+ }
51+ }
52+
53+
54+
55+@Callable(i)
56+func buyTicket (ticketNumber) = {
57+ let pmt = i.payments[0]
58+ let ticketPriceCurrentKey = (("TICKET_" + ticketNumber) + "_price")
59+ let ticketPriceCurrentAmount = match getInteger(this, ticketPriceCurrentKey) {
60+ case a: Int =>
61+ a
62+ case _ =>
63+ 0
64+ }
65+ let ticketPrice = ticketPriceCurrentAmount
66+ let rateAmount = (pmt.amount / ticketPrice)
67+ if ((pmt.assetId != paymentToken))
68+ then throw("works with Payment Token only")
69+ else {
70+ let buyCurrentKey = ("buy_" + toBase58String(i.caller.bytes))
71+ let buyCurrentAmount = match getInteger(this, buyCurrentKey) {
72+ case a: Int =>
73+ a
74+ case _ =>
75+ 0
76+ }
77+ let buyNewAmount = (buyCurrentAmount + rateAmount)
78+ let ticketBalanceCurrentKey = (("TICKET_" + ticketNumber) + "_balance")
79+ let ticketBalanceCurrentAmount = match getInteger(this, ticketBalanceCurrentKey) {
80+ case a: Int =>
81+ a
82+ case _ =>
83+ 0
84+ }
85+ let newTicketBalanceAmount = (ticketBalanceCurrentAmount - rateAmount)
86+[IntegerEntry(buyCurrentKey, buyNewAmount), IntegerEntry(ticketBalanceCurrentKey, newTicketBalanceAmount), ScriptTransfer(i.caller, rateAmount, LESSON)]
87+ }
88+ }
89+
90+
91+
92+@Callable(i)
93+func lessonSubscription (lessonId) = {
94+ let pmt = i.payments[0]
95+ let pmtId = pmt.assetId
96+ let studentAddress = toBase58String(i.caller.bytes)
97+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
98+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
99+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
100+ case a: Int =>
101+ a
102+ case _ =>
103+ 0
104+ }
105+ let ticketNewAmount = (lessonFeeCurrentAmount + pmt.amount)
106+[IntegerEntry(lessonStatusCurrentKey, pending), IntegerEntry(lessonFeeCurrentKey, ticketNewAmount)]
107+ }
108+
109+
110+
111+@Callable(i)
112+func lessonStart (lessonId,studentAddress) = {
113+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
114+[IntegerEntry(lessonStatusCurrentKey, start)]
115+ }
116+
117+
118+
119+@Callable(i)
120+func lessonFinish (lessonId,studentAddress,ticketNumber) = {
121+ let ticketId = toBase58String(value(LESSON))
122+ let lessonFeeCurrentKey = ((("payment_" + lessonId) + "_") + studentAddress)
123+ let lessonFeeCurrentAmount = match getInteger(this, lessonFeeCurrentKey) {
124+ case a: Int =>
125+ a
126+ case _ =>
127+ 0
128+ }
129+ let ticketPriceCurrentKey = (("TICKET_" + ticketNumber) + "_price")
130+ let ticketPriceCurrentAmount = match getInteger(this, ticketPriceCurrentKey) {
131+ case a: Int =>
132+ a
133+ case _ =>
134+ 0
135+ }
136+ let lessonPaymentAmount = (lessonFeeCurrentAmount * ticketPriceCurrentAmount)
137+ let ownerKey = ("owner_balance_" + toBase58String(i.caller.bytes))
138+ let ownerAmount = match getInteger(this, ownerKey) {
139+ case a: Int =>
140+ a
141+ case _ =>
142+ 0
143+ }
144+ let newOwnerAmount = (ownerAmount + lessonPaymentAmount)
145+ let lessonStatusCurrentKey = ((("status_" + lessonId) + "_") + studentAddress)
146+ let ticketCurrentKey = ((ticketId + "_") + studentAddress)
147+ let ticketCurrentAmount = match getInteger(this, ticketCurrentKey) {
148+ case a: Int =>
149+ a
150+ case _ =>
151+ 0
152+ }
153+ let ticket = fromBase58String(ticketId)
154+[IntegerEntry(ownerKey, newOwnerAmount), IntegerEntry(lessonStatusCurrentKey, end), IntegerEntry(lessonFeeCurrentKey, 0), Burn(LESSON, lessonFeeCurrentAmount)]
155+ }
156+
157+
158+
159+@Callable(i)
160+func ownerWithdraw () = {
161+ let ownerKey = ("owner_balance_" + toBase58String(i.caller.bytes))
162+ let ownerAmount = match getInteger(this, ownerKey) {
163+ case a: Int =>
164+ a
165+ case _ =>
166+ 0
167+ }
168+ if ((0 > ownerAmount))
169+ then throw("Can't withdraw negative amount")
170+ else [IntegerEntry(ownerKey, 0), ScriptTransfer(i.caller, ownerAmount, paymentToken)]
171+ }
172+
173+
174+@Verifier(tx)
175+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], lessonOwnerPublicKey)
176+

github/deemru/w8io/169f3d6 
19.44 ms