tx · 7163RmMFwUG5WXdkAkUzBLT5pdRUAhWEeYvNBgS4dngs

3N18S8xfWJYHVuGfJcpcPVh7LsnqR9hKTcc:  -0.01400000 Waves

2019.09.08 11:56 [666883] smart account 3N18S8xfWJYHVuGfJcpcPVh7LsnqR9hKTcc > SELF 0.00000000 Waves

{ "type": 13, "id": "7163RmMFwUG5WXdkAkUzBLT5pdRUAhWEeYvNBgS4dngs", "fee": 1400000, "feeAssetId": null, "timestamp": 1567932970760, "version": 1, "sender": "3N18S8xfWJYHVuGfJcpcPVh7LsnqR9hKTcc", "senderPublicKey": "9cETBksYN8YMHGvDB6BEqmH9HScpCMBRZwnjCviRQ9aA", "proofs": [ "4JnWiZoGeA3QWH6uAjBWzsith5oPBpCVNPhppZhwpqbrBTa2srrcPbUuHwrJcGNqdA6kubhVAwTMczgBXRfGTSyF" ], "script": "base64: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", "chainId": 84, "height": 666883, "spentComplexity": 0 } View: original | compacted Prev: 8QhrH8PJq5F1HX7J7myi5UM4FrPQigoank8xGmCA7cvh Next: ACTuEEnfsTS4G32c8TdabeUCdNAQG6NQrMShCidNWiay Diff:
OldNewDifferences
111111 then throw("invalid coordinates order")
112112 else if ((patentOwnerAddress == NONE))
113113 then throw("there is no such patent")
114- else WriteSet([DataEntry(genKeyFromCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6), userAddress), DataEntry(getKeyBalanceUser(patentOwnerAddress), (getValueBalanceUser(patentOwnerAddress) + pmt.amount))])
114+ else if ((patentOwnerAddress == userAddress))
115+ then throw("you cannot buy your own patent")
116+ else WriteSet([DataEntry(genKeyFromCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6), userAddress), DataEntry(getKeyBalanceUser(patentOwnerAddress), (getValueBalanceUser(patentOwnerAddress) + pmt.amount))])
115117 }
116118 }
117119
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let PRICE = 100000000
55
66 let PATENTPRICE = 200000000
77
88 let ORACLE = "ORACLE"
99
1010 let WIN = "WIN"
1111
1212 let LOSE = "LOSE"
1313
1414 let NONE = "none"
1515
1616 func getNumberByKey (key) = {
1717 let num = match getInteger(this, key) {
1818 case a: Int =>
1919 a
2020 case _ =>
2121 0
2222 }
2323 num
2424 }
2525
2626
2727 func getStrByKey (key) = {
2828 let str = match getString(this, key) {
2929 case a: String =>
3030 a
3131 case _ =>
3232 NONE
3333 }
3434 str
3535 }
3636
3737
3838 func validateTwoCoords (x1,y1,x2,y2) = if ((x1 > x2))
3939 then false
4040 else if (if ((x1 == x2))
4141 then (y1 > y2)
4242 else false)
4343 then false
4444 else true
4545
4646
4747 func validateCoords (x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6) = if (!(validateTwoCoords(x1, y1, x2, y2)))
4848 then false
4949 else if (!(validateTwoCoords(x2, y2, x3, y3)))
5050 then false
5151 else if (!(validateTwoCoords(x3, y3, x4, y4)))
5252 then false
5353 else if (!(validateTwoCoords(x4, y4, x5, y5)))
5454 then false
5555 else if (!(validateTwoCoords(x5, y5, x6, y6)))
5656 then false
5757 else true
5858
5959
6060 func genKeyFromCoords (x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6) = ((((((((((((((((((((((toString(x1) + ",") + toString(y1)) + ";") + toString(x2)) + ",") + toString(y2)) + ";") + toString(x3)) + ",") + toString(y3)) + ";") + toString(x4)) + ",") + toString(y4)) + ";") + toString(x5)) + ",") + toString(y5)) + ";") + toString(x6)) + ",") + toString(y6))
6161
6262
6363 func getKeyBalanceUser (account) = (account + "_balance")
6464
6565
6666 func getValueBalanceUser (account) = getNumberByKey(getKeyBalanceUser(account))
6767
6868
6969 func getKeyWinCount (user) = (user + "_wincnt")
7070
7171
7272 func getValueWinCount (user) = getNumberByKey(getKeyWinCount(user))
7373
7474
7575 func getKeyLoseCount (user) = (user + "_losecnt")
7676
7777
7878 func getValueLoseCount (user) = getNumberByKey(getKeyLoseCount(user))
7979
8080
8181 @Callable(i)
8282 func patent (x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6) = {
8383 let pmt = extract(i.payment)
8484 if (isDefined(pmt.assetId))
8585 then throw("can use WAVES only at the moment")
8686 else {
8787 let userAddress = toBase58String(i.caller.bytes)
8888 if ((pmt.amount != PRICE))
8989 then throw("purchase amount cannot be not equal to the price")
9090 else if (!(validateCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6)))
9191 then throw("invalid coordinates order")
9292 else if ((getStrByKey(genKeyFromCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6)) != NONE))
9393 then throw("this patent is already exists")
9494 else WriteSet([DataEntry(genKeyFromCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6), userAddress)])
9595 }
9696 }
9797
9898
9999
100100 @Callable(i)
101101 func buyPatent (x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6) = {
102102 let pmt = extract(i.payment)
103103 if (isDefined(pmt.assetId))
104104 then throw("can use WAVES only at the moment")
105105 else {
106106 let userAddress = toBase58String(i.caller.bytes)
107107 let patentOwnerAddress = getStrByKey(genKeyFromCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6))
108108 if ((pmt.amount != PATENTPRICE))
109109 then throw("purchase amount cannot be not equal to the price")
110110 else if (!(validateCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6)))
111111 then throw("invalid coordinates order")
112112 else if ((patentOwnerAddress == NONE))
113113 then throw("there is no such patent")
114- else WriteSet([DataEntry(genKeyFromCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6), userAddress), DataEntry(getKeyBalanceUser(patentOwnerAddress), (getValueBalanceUser(patentOwnerAddress) + pmt.amount))])
114+ else if ((patentOwnerAddress == userAddress))
115+ then throw("you cannot buy your own patent")
116+ else WriteSet([DataEntry(genKeyFromCoords(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6), userAddress), DataEntry(getKeyBalanceUser(patentOwnerAddress), (getValueBalanceUser(patentOwnerAddress) + pmt.amount))])
115117 }
116118 }
117119
118120
119121
120122 @Callable(i)
121123 func withdraw () = {
122124 let userAddress = toBase58String(i.caller.bytes)
123125 let balance = getValueBalanceUser(userAddress)
124126 if ((0 >= balance))
125127 then throw("insufficient balance")
126128 else ScriptResult(WriteSet([DataEntry(getKeyBalanceUser(userAddress), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(userAddress), balance, unit)]))
127129 }
128130
129131
130132
131133 @Callable(i)
132134 func endGame (game,winner,loser) = {
133135 let oracleAddres = toBase58String(i.caller.bytes)
134136 if ((oracleAddres != ORACLE))
135137 then throw("only oracle can inform about games results")
136138 else if ((winner == loser))
137139 then throw("winner and loser must be different")
138140 else if ((getStrByKey(game) != NONE))
139141 then throw("this game has already been played")
140142 else WriteSet([DataEntry(game, (((winner + "-WIN;") + loser) + "-LOSE")), DataEntry(getKeyWinCount(winner), (getValueWinCount(winner) + 1)), DataEntry(getKeyLoseCount(loser), (getValueLoseCount(loser) + 1))])
141143 }
142144
143145

github/deemru/w8io/3ef1775 
47.33 ms