tx · 4QJ9EqSZEEvJ1abycFnQfME9XzPpytoyvhUUYMH2jJGS

3MpzJaBiWaA8jZow5orMgiQj5Rs13LFWzVN:  -0.01000000 Waves

2019.07.27 00:32 [603584] smart account 3MpzJaBiWaA8jZow5orMgiQj5Rs13LFWzVN > SELF 0.00000000 Waves

{ "type": 13, "id": "4QJ9EqSZEEvJ1abycFnQfME9XzPpytoyvhUUYMH2jJGS", "fee": 1000000, "feeAssetId": null, "timestamp": 1564176748939, "version": 1, "sender": "3MpzJaBiWaA8jZow5orMgiQj5Rs13LFWzVN", "senderPublicKey": "A1WYvwSVWjZ4f2DAsH7ojsdQjYr6CByUbBLdtZkyuvpJ", "proofs": [ "2y2Mt99caXDqBzePxTcBVuSTUYJRkak1MztHx4XQVvQ7sKjQmhTXBKhkY2Xi5juTdAHvjQwzXvDNRRCybQWYNeQ7" ], "script": "base64:AAIDAAAAAAAAAAAAAAAKAAAAAA5vd25lclB1YmxpY0tleQEAAAAgfedb8gHq6MpA0xTx8E4brUvyXTxMUxGzgoeMhec7vFkAAAAAH2Rlc3RpbmF0aW9uV2FsbGV0QWRkcmVzc0RhdGFLZXkCAAAAGmRlc3RpbmF0aW9uX3dhbGxldF9hZGRyZXNzAQAAABFnZXRMb290Qm94RGF0YUtleQAAAAEAAAACaWQJAAEsAAAAAgIAAAAJbG9vdF9ib3hfBQAAAAJpZAEAAAAWZ2V0TG9vdEJveFByaWNlRGF0YUtleQAAAAEAAAACaWQJAAEsAAAAAgkBAAAAEWdldExvb3RCb3hEYXRhS2V5AAAAAQUAAAACaWQCAAAABl9wcmljZQEAAAAWZ2V0TG9vdEJveExpbWl0RGF0YUtleQAAAAEAAAACaWQJAAEsAAAAAgkBAAAAEWdldExvb3RCb3hEYXRhS2V5AAAAAQUAAAACaWQCAAAABl9saW1pdAEAAAAZZ2V0TG9vdEJveEJ1eUNvdW50RGF0YUtleQAAAAEAAAACaWQJAAEsAAAAAgkBAAAAEWdldExvb3RCb3hEYXRhS2V5AAAAAQUAAAACaWQCAAAACl9idXlfY291bnQBAAAAG2dldERlc3RpbmF0aW9uV2FsbGV0QWRkcmVzcwAAAAAEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAAfZGVzdGluYXRpb25XYWxsZXRBZGRyZXNzRGF0YUtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAF2BQAAAAckbWF0Y2gwAwkAAAAAAAACBQAAAAF2AgAAAAAJAAACAAAAAQIAAAAqRGVzdGluYXRpb24gd2FsbGV0IGFkZHJlc3MgY2Fubm90IGJlIGVtcHR5CQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAAXYJAAACAAAAAQIAAAAkRGVzdGluYXRpb24gd2FsbGV0IGFkZHJlc3MgdW5kZWZpbmVkAQAAAA9nZXRMb290Qm94UHJpY2UAAAABAAAAAmlkBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAQAAABZnZXRMb290Qm94UHJpY2VEYXRhS2V5AAAAAQUAAAACaWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdgUAAAAHJG1hdGNoMAUAAAABdgkAAAIAAAABAgAAABhMb290IGJveCBwcmljZSB1bmRlZmluZWQBAAAAD2dldExvb3RCb3hMaW1pdAAAAAEAAAACaWQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmdldExvb3RCb3hMaW1pdERhdGFLZXkAAAABBQAAAAJpZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAF2BQAAAAckbWF0Y2gwBQAAAAF2CQAAAgAAAAECAAAAGExvb3QgYm94IGxpbWl0IHVuZGVmaW5lZAEAAAASZ2V0TG9vdEJveEJ1eUNvdW50AAAAAQAAAAJpZAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQEAAAAZZ2V0TG9vdEJveEJ1eUNvdW50RGF0YUtleQAAAAEFAAAAAmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAXYFAAAAByRtYXRjaDAFAAAAAXYAAAAAAAAAAAAAAAADAAAAAWkBAAAAFHNldERlc3RpbmF0aW9uV2FsbGV0AAAAAQAAAAdhZGRyZXNzAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5vd25lclB1YmxpY0tleQkAAAIAAAABAgAAAB9Pbmx5IG93bmVyIGNhbiBjYWxsIHRoaXMgbWV0aG9kAwkAAAAAAAACBQAAAAdhZGRyZXNzAgAAAAAJAAACAAAAAQIAAAAXQWRkcmVzcyBjYW5ub3QgYmUgZW1wdHkJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAH2Rlc3RpbmF0aW9uV2FsbGV0QWRkcmVzc0RhdGFLZXkFAAAAB2FkZHJlc3MFAAAAA25pbAAAAAFpAQAAAA5zZXRMb290Qm94SW5mbwAAAAMAAAACaWQAAAAFcHJpY2UAAAAFbGltaXQDCQEAAAACIT0AAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADm93bmVyUHVibGljS2V5CQAAAgAAAAECAAAAH09ubHkgb3duZXIgY2FuIGNhbGwgdGhpcyBtZXRob2QDCQAAAAAAAAIFAAAAAmlkAAAAAAAAAAAACQAAAgAAAAECAAAAEUxvb3QgaWQgdW5kZWZpbmVkAwkAAAAAAAACBQAAAAVwcmljZQAAAAAAAAAAAAkAAAIAAAABAgAAAA9QcmljZSB1bmRlZmluZWQDCQAAAAAAAAIFAAAABWxpbWl0AAAAAAAAAAAACQAAAgAAAAECAAAAD0xpbWl0IHVuZGVmaW5lZAQAAAAFaWRTdHIJAAGkAAAAAQUAAAACaWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABZnZXRMb290Qm94UHJpY2VEYXRhS2V5AAAAAQUAAAAFaWRTdHIFAAAABXByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAWZ2V0TG9vdEJveExpbWl0RGF0YUtleQAAAAEFAAAABWlkU3RyBQAAAAVsaW1pdAUAAAADbmlsAAAAAWkBAAAACmJ1eUxvb3RCb3gAAAABAAAAAmlkBAAAAAVpZFN0cgkAAaQAAAABBQAAAAJpZAQAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAhidXlDb3VudAkBAAAAEmdldExvb3RCb3hCdXlDb3VudAAAAAEFAAAABWlkU3RyBAAAAAtuZXdCdXlDb3VudAkAAGQAAAACBQAAAAhidXlDb3VudAAAAAAAAAAAAQQAAAAMbG9vdEJveExpbWl0CQEAAAAPZ2V0TG9vdEJveExpbWl0AAAAAQUAAAAFaWRTdHIEAAAADGxvb3RCb3hQcmljZQkBAAAAD2dldExvb3RCb3hQcmljZQAAAAEFAAAABWlkU3RyBAAAAAxwbGF5ZXJQYXlTdW0IBQAAAAdwYXltZW50AAAABmFtb3VudAMJAQAAAAIhPQAAAAIFAAAADHBsYXllclBheVN1bQUAAAAMbG9vdEJveFByaWNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFFByaWNlIG11c3QgYmUgZXF1YWwgCQABpAAAAAEFAAAADGxvb3RCb3hQcmljZQIAAAASIHdhdmVsZXRzLCBnaXZlbjogCQABpAAAAAEFAAAADHBsYXllclBheVN1bQMJAABmAAAAAgUAAAALbmV3QnV5Q291bnQFAAAADGxvb3RCb3hMaW1pdAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABFDYW5ub3Qgc2FsZSBtb3JlIAkAAaQAAAABBQAAAAxsb290Qm94TGltaXQCAAAAISBpdGVtcyBkdWUgbGltaXQsIGN1cnJlbnQgY291bnQ6IAkAAaQAAAABBQAAAAhidXlDb3VudAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABlnZXRMb290Qm94QnV5Q291bnREYXRhS2V5AAAAAQUAAAAFaWRTdHIFAAAAC25ld0J1eUNvdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAG2dldERlc3RpbmF0aW9uV2FsbGV0QWRkcmVzcwAAAAAFAAAADHBsYXllclBheVN1bQUAAAAEdW5pdAUAAAADbmlsAAAAAN1p3k4=", "chainId": 84, "height": 603584, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let ownerPublicKey = base58'9UUaVVahBUyLHLQo4HNuQsRMKY9QBH43Grojkbdf4wG4'
5+
6+let destinationWalletAddressDataKey = "destination_wallet_address"
7+
8+func getLootBoxDataKey (id) = ("loot_box_" + id)
9+
10+
11+func getLootBoxPriceDataKey (id) = (getLootBoxDataKey(id) + "_price")
12+
13+
14+func getLootBoxLimitDataKey (id) = (getLootBoxDataKey(id) + "_limit")
15+
16+
17+func getLootBoxBuyCountDataKey (id) = (getLootBoxDataKey(id) + "_buy_count")
18+
19+
20+func getDestinationWalletAddress () = match getString(this, destinationWalletAddressDataKey) {
21+ case v: String =>
22+ if ((v == ""))
23+ then throw("Destination wallet address cannot be empty")
24+ else addressFromStringValue(v)
25+ case _ =>
26+ throw("Destination wallet address undefined")
27+}
28+
29+
30+func getLootBoxPrice (id) = match getInteger(this, getLootBoxPriceDataKey(id)) {
31+ case v: Int =>
32+ v
33+ case _ =>
34+ throw("Loot box price undefined")
35+}
36+
37+
38+func getLootBoxLimit (id) = match getInteger(this, getLootBoxLimitDataKey(id)) {
39+ case v: Int =>
40+ v
41+ case _ =>
42+ throw("Loot box limit undefined")
43+}
44+
45+
46+func getLootBoxBuyCount (id) = match getInteger(this, getLootBoxBuyCountDataKey(id)) {
47+ case v: Int =>
48+ v
49+ case _ =>
50+ 0
51+}
52+
53+
54+@Callable(i)
55+func setDestinationWallet (address) = if ((i.callerPublicKey != ownerPublicKey))
56+ then throw("Only owner can call this method")
57+ else if ((address == ""))
58+ then throw("Address cannot be empty")
59+ else WriteSet([DataEntry(destinationWalletAddressDataKey, address)])
60+
61+
62+
63+@Callable(i)
64+func setLootBoxInfo (id,price,limit) = if ((i.callerPublicKey != ownerPublicKey))
65+ then throw("Only owner can call this method")
66+ else if ((id == 0))
67+ then throw("Loot id undefined")
68+ else if ((price == 0))
69+ then throw("Price undefined")
70+ else if ((limit == 0))
71+ then throw("Limit undefined")
72+ else {
73+ let idStr = toString(id)
74+ WriteSet([DataEntry(getLootBoxPriceDataKey(idStr), price), DataEntry(getLootBoxLimitDataKey(idStr), limit)])
75+ }
76+
77+
78+
79+@Callable(i)
80+func buyLootBox (id) = {
81+ let idStr = toString(id)
82+ let payment = extract(i.payment)
83+ let buyCount = getLootBoxBuyCount(idStr)
84+ let newBuyCount = (buyCount + 1)
85+ let lootBoxLimit = getLootBoxLimit(idStr)
86+ let lootBoxPrice = getLootBoxPrice(idStr)
87+ let playerPaySum = payment.amount
88+ if ((playerPaySum != lootBoxPrice))
89+ then throw(((("Price must be equal " + toString(lootBoxPrice)) + " wavelets, given: ") + toString(playerPaySum)))
90+ else if ((newBuyCount > lootBoxLimit))
91+ then throw(((("Cannot sale more " + toString(lootBoxLimit)) + " items due limit, current count: ") + toString(buyCount)))
92+ else ScriptResult(WriteSet([DataEntry(getLootBoxBuyCountDataKey(idStr), newBuyCount)]), TransferSet([ScriptTransfer(getDestinationWalletAddress(), playerPaySum, unit)]))
93+ }
94+
95+

github/deemru/w8io/169f3d6 
24.98 ms