tx · 68how4fSFhdCGt2zDTNMzBE6h5HmFj1t3ZFVPeJ1Ffoc

3N2Z6EjzrzaCpD8ypDYLWDKe2PPVU8y9dJs:  -0.01400000 Waves

2019.08.27 22:32 [650025] smart account 3N2Z6EjzrzaCpD8ypDYLWDKe2PPVU8y9dJs > SELF 0.00000000 Waves

{ "type": 13, "id": "68how4fSFhdCGt2zDTNMzBE6h5HmFj1t3ZFVPeJ1Ffoc", "fee": 1400000, "feeAssetId": null, "timestamp": 1566934365825, "version": 1, "sender": "3N2Z6EjzrzaCpD8ypDYLWDKe2PPVU8y9dJs", "senderPublicKey": "HSTmdhPrJF81ozDBaqVn8QVtV76oD7gzDfcHPQRdxdwW", "proofs": [ "uh1SYDy3Dv96pm7V2j62xzCujtR3cyvuGAWjdmRzmjch7C16LgrZGaH2M16xBe9RTKQUvP9LQn3yJmXa2Hi3MRn" ], "script": "base64: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", "chainId": 84, "height": 650025, "spentComplexity": 0 } View: original | compacted Prev: FmzX7wcfv8r7Kd3fUHx6tjvDdhABKdpu8ZiRWTihxPPD Next: 8sMTk9AjyQURHowaEPnMurZ9YqGDhQykwAQAyX4fChVz Diff:
OldNewDifferences
3434 }
3535
3636
37-func ExtractPlayerBalance (key) = {
37+func getBalance (key) = {
3838 let playerBalanceNum = match getInteger(this, key) {
3939 case playerBalanceNum: Int =>
4040 playerBalanceNum
5656 }
5757
5858
59+func getPriceByItemID (itemId) = if ((itemId == "1"))
60+ then 1
61+ else if ((itemId == "2"))
62+ then 4
63+ else if ((itemId == "3"))
64+ then 6
65+ else throw("Неверный ID item")
66+
67+
5968 @Callable(i)
6069 func buy (itemId) = {
6170 let buyTXId = toBase58String(i.transactionId)
6271 let playerAddress = toString(i.caller)
6372 let key2Items = (playerAddress + "_items")
73+ let balanceMinus = getPriceByItemID(itemId)
74+ let NewBalance = (getBalance((playerAddress + "_balance")) - balanceMinus)
75+ let newBalanceData = DataEntry((playerAddress + "_balance"), NewBalance)
6476 let oldItemsList = ExtractItemsList(key2Items)
6577 if ((oldItemsList == ""))
66- then WriteSet([DataEntry(key2Items, (itemId + ":1")), DataEntry(BUYITEM, buyTXId)])
78+ then WriteSet([DataEntry(key2Items, (itemId + ":1")), DataEntry(BUYITEM, buyTXId), newBalanceData])
6779 else if ((oldItemsList != ""))
68- then WriteSet([DataEntry(key2Items, (((oldItemsList + " ") + itemId) + ":1")), DataEntry(BUYITEM, buyTXId)])
80+ then WriteSet([DataEntry(key2Items, (((oldItemsList + " ") + itemId) + ":1")), DataEntry(BUYITEM, buyTXId), newBalanceData])
6981 else throw("Что-то пошло совсем не так c Items")
7082 }
7183
111123 then {
112124 let donateNum = ((donateAmt - COMMISSION) / WAVELET)
113125 let key2Balance = (playerAddress + "_balance")
114- let newBalance = (ExtractPlayerBalance(key2Balance) + (donateNum * TokenPrice))
126+ let newBalance = (getBalance(key2Balance) + (donateNum * TokenPrice))
115127 let donateData = [DataEntry(DONATECOUNTERKEY, newGameNum), DataEntry(key2Balance, newBalance), DataEntry(donateId, donateNum)]
116128 WriteSet(donateData)
117129 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let WAVELET = ((100 * 1000) * 1000)
55
66 let COMMISSION = ((5 * WAVELET) / 1000)
77
88 let TokenPrice = 10
99
1010 let DONATECOUNTERKEY = "$DONATE_NUM"
1111
1212 let BUYITEM = "$BUY_ITEM"
1313
1414 let Bag1 = (1 * WAVELET)
1515
1616 let Bag5 = (5 * WAVELET)
1717
1818 let Bag10 = (10 * WAVELET)
1919
2020 let Bag20 = (20 * WAVELET)
2121
2222 let Bag50 = (50 * WAVELET)
2323
2424 let Bag100 = (100 * WAVELET)
2525
2626 func IncrementDonateNum () = {
2727 let gameNum = match getInteger(this, DONATECOUNTERKEY) {
2828 case num: Int =>
2929 num
3030 case _ =>
3131 0
3232 }
3333 (gameNum + 1)
3434 }
3535
3636
37-func ExtractPlayerBalance (key) = {
37+func getBalance (key) = {
3838 let playerBalanceNum = match getInteger(this, key) {
3939 case playerBalanceNum: Int =>
4040 playerBalanceNum
4141 case _ =>
4242 0
4343 }
4444 playerBalanceNum
4545 }
4646
4747
4848 func ExtractItemsList (key) = {
4949 let rawDataStr = match getString(this, key) {
5050 case str: String =>
5151 str
5252 case _ =>
5353 throw(("Couldn't find list of player items by key:" + key))
5454 }
5555 rawDataStr
5656 }
5757
5858
59+func getPriceByItemID (itemId) = if ((itemId == "1"))
60+ then 1
61+ else if ((itemId == "2"))
62+ then 4
63+ else if ((itemId == "3"))
64+ then 6
65+ else throw("Неверный ID item")
66+
67+
5968 @Callable(i)
6069 func buy (itemId) = {
6170 let buyTXId = toBase58String(i.transactionId)
6271 let playerAddress = toString(i.caller)
6372 let key2Items = (playerAddress + "_items")
73+ let balanceMinus = getPriceByItemID(itemId)
74+ let NewBalance = (getBalance((playerAddress + "_balance")) - balanceMinus)
75+ let newBalanceData = DataEntry((playerAddress + "_balance"), NewBalance)
6476 let oldItemsList = ExtractItemsList(key2Items)
6577 if ((oldItemsList == ""))
66- then WriteSet([DataEntry(key2Items, (itemId + ":1")), DataEntry(BUYITEM, buyTXId)])
78+ then WriteSet([DataEntry(key2Items, (itemId + ":1")), DataEntry(BUYITEM, buyTXId), newBalanceData])
6779 else if ((oldItemsList != ""))
68- then WriteSet([DataEntry(key2Items, (((oldItemsList + " ") + itemId) + ":1")), DataEntry(BUYITEM, buyTXId)])
80+ then WriteSet([DataEntry(key2Items, (((oldItemsList + " ") + itemId) + ":1")), DataEntry(BUYITEM, buyTXId), newBalanceData])
6981 else throw("Что-то пошло совсем не так c Items")
7082 }
7183
7284
7385
7486 @Callable(i)
7587 func reset () = {
7688 let playerAddress = toString(i.caller)
7789 let donateData = [DataEntry(DONATECOUNTERKEY, 0), DataEntry((playerAddress + "_balance"), 0)]
7890 WriteSet(donateData)
7991 }
8092
8193
8294
8395 @Callable(i)
8496 func donate () = {
8597 let newGameNum = IncrementDonateNum()
8698 let donateId = toBase58String(i.transactionId)
8799 let pmt = extract(i.payment)
88100 let playerAddress = toString(i.caller)
89101 let betNotInWaves = isDefined(pmt.assetId)
90102 let feeNotInWaves = isDefined(pmt.assetId)
91103 let donateAmt = pmt.amount
92104 if (betNotInWaves)
93105 then throw("Bet amount must be in Waves")
94106 else if (feeNotInWaves)
95107 then throw("Transaction's fee must be in Waves")
96108 else {
97109 let donateAmtValid = if (if (if (if (if (if ((donateAmt == (Bag1 + COMMISSION)))
98110 then true
99111 else (donateAmt == (Bag5 + COMMISSION)))
100112 then true
101113 else (donateAmt == (Bag10 + COMMISSION)))
102114 then true
103115 else (donateAmt == (Bag20 + COMMISSION)))
104116 then true
105117 else (donateAmt == (Bag50 + COMMISSION)))
106118 then true
107119 else (donateAmt == (Bag100 + COMMISSION)))
108120 then true
109121 else false
110122 if (donateAmtValid)
111123 then {
112124 let donateNum = ((donateAmt - COMMISSION) / WAVELET)
113125 let key2Balance = (playerAddress + "_balance")
114- let newBalance = (ExtractPlayerBalance(key2Balance) + (donateNum * TokenPrice))
126+ let newBalance = (getBalance(key2Balance) + (donateNum * TokenPrice))
115127 let donateData = [DataEntry(DONATECOUNTERKEY, newGameNum), DataEntry(key2Balance, newBalance), DataEntry(donateId, donateNum)]
116128 WriteSet(donateData)
117129 }
118130 else throw("You paid the wrong amount")
119131 }
120132 }
121133
122134
123135 @Verifier(tx)
124136 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
125137 then match tx {
126138 case ttx: TransferTransaction =>
127139 true
128140 case stx: SetScriptTransaction =>
129141 true
130142 case _ =>
131143 false
132144 }
133145 else false
134146

github/deemru/w8io/169f3d6 
79.55 ms