tx · 4Epa9AYhpPMabzj5ykacNmtWg7kEAPRgS1XgfRA5kHMo

3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk:  -0.00400000 Waves

2022.07.31 01:05 [2163131] smart account 3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk > SELF 0.00000000 Waves

{ "type": 13, "id": "4Epa9AYhpPMabzj5ykacNmtWg7kEAPRgS1XgfRA5kHMo", "fee": 400000, "feeAssetId": null, "timestamp": 1659218728402, "version": 2, "chainId": 84, "sender": "3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk", "senderPublicKey": "AR4BeE6hYADMvKxgRQs4ADN3krEqb2j8WE3WfJxzL3zE", "proofs": [ "26bK1BeNaXovPbYZojj9FaSHrCYNV9SE36UJjs84beDwbyMib8e19unDgYNEC5eKBpVxpHSRh4GQ8TNuefqELevF" ], "script": "base64:BgIWCAISAwoBCBIAEgASBQoDCAgIEgASAA0ABXdhdmVzAIDC1y8ADnRpY2tldFByaWNlSW50AMCEPQALdGlja2V0UHJpY2UFDnRpY2tldFByaWNlSW50AAZpbnZGZWUAoMIeABJ3aXRoZHJhd0ZlZVBlcmNlbnQABQAWZmVlQ29sbGVjdG9yQWRkcmVzc0tleQITZmVlQ29sbGVjdG9yQWRkcmVzcwENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAESZ2V0VGlja2V0c0NvdW50S2V5AQ1hZGRyZXNzU3RyaW5nCQCsAgIFDWFkZHJlc3NTdHJpbmcCDV90aWNrZXRzQ291bnQBDWdhbWVXaW5uZXJLZXkBBmdhbWVJZAkArAICBQZnYW1lSWQCB193aW5uZXIBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAg9fYXZhaWxhYmxlRnVuZHMBGmFkZHJlc3NBdmFpbGFibGVSZXdhcmRzS2V5AQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEV9hdmFpbGFibGVSZXdhcmRzAQ9nZXRUaWNrZXRzQ291bnQBDWFkZHJlc3NTdHJpbmcJAQ10cnlHZXRJbnRlZ2VyAQkBEmdldFRpY2tldHNDb3VudEtleQEFDWFkZHJlc3NTdHJpbmcBDWNvbnN1bWVUaWNrZXQBCnBsYXllckFkZHIEEmN1cnJlbnRUaWNrZXRDb3VudAkBD2dldFRpY2tldHNDb3VudAEFCnBsYXllckFkZHIEFW5ld0N1cnJlbnRUaWNrZXRDb3VudAkAZQIFEmN1cnJlbnRUaWNrZXRDb3VudAABAwkAZgIAAAUVbmV3Q3VycmVudFRpY2tldENvdW50AAAFFW5ld0N1cnJlbnRUaWNrZXRDb3VudAYBaQEWc2V0RmVlQ29sbGVjdG9yQWRkcmVzcwENY29sbGVjdG9yQWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgUWZmVlQ29sbGVjdG9yQWRkcmVzc0tleQUNY29sbGVjdG9yQWRkcgUDbmlsAWkBDGRlcG9zaXRGdW5kcwAEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIVBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAMJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQJAAIBAhlZb3UgY2FuIG9ubHkgZGVwb3NpdCBVU0ROBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIIBQNwbXQGYW1vdW50BQNuaWwAAQFpAQ13aXRoZHJhd0Z1bmRzAAQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBBmZWVDb2xsZWN0b3JBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5BBVjdXJyZW50QXZhaWxhYmxlRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIEC3dpdGhkcmF3RmVlCQBrAwUVY3VycmVudEF2YWlsYWJsZUZ1bmRzBRJ3aXRoZHJhd0ZlZVBlcmNlbnQAZAQUYWN0dWFsQXZhaWxhYmxlRnVuZHMJAGUCCQBlAgUVY3VycmVudEF2YWlsYWJsZUZ1bmRzBQZpbnZGZWUFC3dpdGhkcmF3RmVlAwkAZwIAAAUUYWN0dWFsQXZhaWxhYmxlRnVuZHMJAAIBAh5ObyBhdmFpbGFibGUgZnVuZHMgdG8gd2l0aGRyYXcJAMwIAgkBDEludGVnZXJFbnRyeQIJARhhZGRyZXNzQXZhaWxhYmxlRnVuZHNLZXkBBQ1jYWxsZXJBZGRyU3RyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRVjdXJyZW50QXZhaWxhYmxlRnVuZHMFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUQZmVlQ29sbGVjdG9yQWRkcgULd2l0aGRyYXdGZWUFBHVuaXQFA25pbAFpARBzZXRXaW5uZXJIZWFkc1VwAwZnYW1lSWQNd2lubmVyQWRkclN0cg9vdGhlclBsYXllckFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgpBZG1pbiBPbmx5BBNhdmFpbGFibGVSZXdhcmRzS2V5CQEaYWRkcmVzc0F2YWlsYWJsZVJld2FyZHNLZXkBBQ13aW5uZXJBZGRyU3RyBBdjdXJyZW50QXZhaWxhYmxlUmV3YXJkcwkBDXRyeUdldEludGVnZXIBBRNhdmFpbGFibGVSZXdhcmRzS2V5BBRuZXdUaWNrZXRDb3VudFdpbm5lcgkBDWNvbnN1bWVUaWNrZXQBBQ13aW5uZXJBZGRyU3RyBBluZXdUaWNrZXRDb3VudE90aGVyUGxheWVyCQENY29uc3VtZVRpY2tldAEFD290aGVyUGxheWVyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQENZ2FtZVdpbm5lcktleQEFBmdhbWVJZAUNd2lubmVyQWRkclN0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTYXZhaWxhYmxlUmV3YXJkc0tleQkAZAIFF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzCQBoAgULdGlja2V0UHJpY2UAAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmdldFRpY2tldHNDb3VudEtleQEFDXdpbm5lckFkZHJTdHIFFG5ld1RpY2tldENvdW50V2lubmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESZ2V0VGlja2V0c0NvdW50S2V5AQUPb3RoZXJQbGF5ZXJBZGRyBRluZXdUaWNrZXRDb3VudE90aGVyUGxheWVyBQNuaWwBaQEPd2l0aGRyYXdSZXdhcmRzAAQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBBmZWVDb2xsZWN0b3JBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5BBdjdXJyZW50QXZhaWxhYmxlUmV3YXJkcwkBDXRyeUdldEludGVnZXIBCQEaYWRkcmVzc0F2YWlsYWJsZVJld2FyZHNLZXkBBQ1jYWxsZXJBZGRyU3RyBAt3aXRoZHJhd0ZlZQkAawMFF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzBRJ3aXRoZHJhd0ZlZVBlcmNlbnQAZAQWYWN0dWFsQXZhaWxhYmxlUmV3YXJkcwkAZQIJAGUCBRdjdXJyZW50QXZhaWxhYmxlUmV3YXJkcwUGaW52RmVlBQt3aXRoZHJhd0ZlZQMJAGcCAAAFF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzCQACAQIgTm8gYXZhaWxhYmxlIHJld2FyZHMgdG8gd2l0aGRyYXcJAMwIAgkBDEludGVnZXJFbnRyeQIJARphZGRyZXNzQXZhaWxhYmxlUmV3YXJkc0tleQEFDWNhbGxlckFkZHJTdHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFmFjdHVhbEF2YWlsYWJsZVJld2FyZHMFBHVuaXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUQZmVlQ29sbGVjdG9yQWRkcgULd2l0aGRyYXdGZWUFBHVuaXQFA25pbAFpAQpidXlUaWNrZXRzAAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50AwkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAkAAgECJ1RpY2tldHMgY2FuIG9ubHkgaWJlIHB1cmNoYXNlZCBpbiBXYXZlcwMJAQIhPQIIBQNwbXQGYW1vdW50BQt0aWNrZXRQcmljZQkAAgEJAKwCAgkArAICAh9UaGUgcGF5bWVudCBtdXN0IGJlIG9mIGV4YWN0bHkgCQCkAwEFDnRpY2tldFByaWNlSW50AgYgd2F2ZXMEDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQTY3VycmVudFRpY2tldHNDb3VudAkBDXRyeUdldEludGVnZXIBCQESZ2V0VGlja2V0c0NvdW50S2V5AQUNY2FsbGVyQWRkclN0cgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESZ2V0VGlja2V0c0NvdW50S2V5AQUNY2FsbGVyQWRkclN0cgkAZAIFE2N1cnJlbnRUaWNrZXRzQ291bnQAAQUDbmlsAAEBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5OWkqsw==", "height": 2163131, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 91VKoXSyhqh5QXKt1y3yKbjXZQhM2XM1t8S5onyAdTRE Next: 5aJhDv3xBTxh4RYRLJuyfvTziwYjTy46thC5ty5F2EMG Diff:
OldNewDifferences
6868
6969
7070 @Callable(i)
71+func withdrawFunds () = {
72+ let callerAddrStr = toBase58String(i.caller.bytes)
73+ let feeCollectorAddr = addressFromStringValue(getStringValue(feeCollectorAddressKey))
74+ let currentAvailableFunds = tryGetInteger(addressAvailableFundsKey(callerAddrStr))
75+ let withdrawFee = fraction(currentAvailableFunds, withdrawFeePercent, 100)
76+ let actualAvailableFunds = ((currentAvailableFunds - invFee) - withdrawFee)
77+ if ((0 >= actualAvailableFunds))
78+ then throw("No available funds to withdraw")
79+ else [IntegerEntry(addressAvailableFundsKey(callerAddrStr), 0), ScriptTransfer(i.caller, currentAvailableFunds, unit), ScriptTransfer(feeCollectorAddr, withdrawFee, unit)]
80+ }
81+
82+
83+
84+@Callable(i)
7185 func setWinnerHeadsUp (gameId,winnerAddrStr,otherPlayerAddr) = if ((i.caller != this))
7286 then throw("Admin Only")
7387 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let waves = 100000000
55
66 let ticketPriceInt = 1000000
77
88 let ticketPrice = ticketPriceInt
99
1010 let invFee = 500000
1111
1212 let withdrawFeePercent = 5
1313
1414 let feeCollectorAddressKey = "feeCollectorAddress"
1515
1616 func tryGetInteger (key) = match getInteger(this, key) {
1717 case b: Int =>
1818 b
1919 case _ =>
2020 0
2121 }
2222
2323
2424 func getTicketsCountKey (addressString) = (addressString + "_ticketsCount")
2525
2626
2727 func gameWinnerKey (gameId) = (gameId + "_winner")
2828
2929
3030 func addressAvailableFundsKey (address) = (address + "_availableFunds")
3131
3232
3333 func addressAvailableRewardsKey (address) = (address + "_availableRewards")
3434
3535
3636 func getTicketsCount (addressString) = tryGetInteger(getTicketsCountKey(addressString))
3737
3838
3939 func consumeTicket (playerAddr) = {
4040 let currentTicketCount = getTicketsCount(playerAddr)
4141 let newCurrentTicketCount = (currentTicketCount - 1)
4242 if ((0 > newCurrentTicketCount))
4343 then 0
4444 else newCurrentTicketCount
4545 }
4646
4747
4848 @Callable(i)
4949 func setFeeCollectorAddress (collectorAddr) = if ((i.caller != this))
5050 then throw("Admin Only")
5151 else [StringEntry(feeCollectorAddressKey, collectorAddr)]
5252
5353
5454
5555 @Callable(i)
5656 func depositFunds () = {
5757 let pmt = if ((size(i.payments) == 1))
5858 then i.payments[0]
5959 else throw("Please attach exactly one payment")
6060 if (isDefined(pmt.assetId))
6161 then throw("You can only deposit USDN")
6262 else {
6363 let callerAddrStr = toBase58String(i.caller.bytes)
6464 $Tuple2([IntegerEntry(addressAvailableFundsKey(callerAddrStr), pmt.amount)], 1)
6565 }
6666 }
6767
6868
6969
7070 @Callable(i)
71+func withdrawFunds () = {
72+ let callerAddrStr = toBase58String(i.caller.bytes)
73+ let feeCollectorAddr = addressFromStringValue(getStringValue(feeCollectorAddressKey))
74+ let currentAvailableFunds = tryGetInteger(addressAvailableFundsKey(callerAddrStr))
75+ let withdrawFee = fraction(currentAvailableFunds, withdrawFeePercent, 100)
76+ let actualAvailableFunds = ((currentAvailableFunds - invFee) - withdrawFee)
77+ if ((0 >= actualAvailableFunds))
78+ then throw("No available funds to withdraw")
79+ else [IntegerEntry(addressAvailableFundsKey(callerAddrStr), 0), ScriptTransfer(i.caller, currentAvailableFunds, unit), ScriptTransfer(feeCollectorAddr, withdrawFee, unit)]
80+ }
81+
82+
83+
84+@Callable(i)
7185 func setWinnerHeadsUp (gameId,winnerAddrStr,otherPlayerAddr) = if ((i.caller != this))
7286 then throw("Admin Only")
7387 else {
7488 let availableRewardsKey = addressAvailableRewardsKey(winnerAddrStr)
7589 let currentAvailableRewards = tryGetInteger(availableRewardsKey)
7690 let newTicketCountWinner = consumeTicket(winnerAddrStr)
7791 let newTicketCountOtherPlayer = consumeTicket(otherPlayerAddr)
7892 [StringEntry(gameWinnerKey(gameId), winnerAddrStr), IntegerEntry(availableRewardsKey, (currentAvailableRewards + (ticketPrice * 2))), IntegerEntry(getTicketsCountKey(winnerAddrStr), newTicketCountWinner), IntegerEntry(getTicketsCountKey(otherPlayerAddr), newTicketCountOtherPlayer)]
7993 }
8094
8195
8296
8397 @Callable(i)
8498 func withdrawRewards () = {
8599 let callerAddrStr = toBase58String(i.caller.bytes)
86100 let feeCollectorAddr = addressFromStringValue(getStringValue(feeCollectorAddressKey))
87101 let currentAvailableRewards = tryGetInteger(addressAvailableRewardsKey(callerAddrStr))
88102 let withdrawFee = fraction(currentAvailableRewards, withdrawFeePercent, 100)
89103 let actualAvailableRewards = ((currentAvailableRewards - invFee) - withdrawFee)
90104 if ((0 >= currentAvailableRewards))
91105 then throw("No available rewards to withdraw")
92106 else [IntegerEntry(addressAvailableRewardsKey(callerAddrStr), 0), ScriptTransfer(i.caller, actualAvailableRewards, unit), ScriptTransfer(feeCollectorAddr, withdrawFee, unit)]
93107 }
94108
95109
96110
97111 @Callable(i)
98112 func buyTickets () = {
99113 let pmt = if ((size(i.payments) == 1))
100114 then i.payments[0]
101115 else throw("Please attach exactly one payment")
102116 if (isDefined(pmt.assetId))
103117 then throw("Tickets can only ibe purchased in Waves")
104118 else if ((pmt.amount != ticketPrice))
105119 then throw((("The payment must be of exactly " + toString(ticketPriceInt)) + " waves"))
106120 else {
107121 let callerAddrStr = toBase58String(i.caller.bytes)
108122 let currentTicketsCount = tryGetInteger(getTicketsCountKey(callerAddrStr))
109123 $Tuple2([IntegerEntry(getTicketsCountKey(callerAddrStr), (currentTicketsCount + 1))], 1)
110124 }
111125 }
112126
113127
114128 @Verifier(tx)
115129 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
116130

github/deemru/w8io/6500d08 
34.28 ms