tx · EWeMevSEZ2G82tthpPPmBKEKtyubWNKDcHJNjWxhwhp9 3P5bczozZttGuLUPJfz25bE8HtzXHtWnzYv: -0.01500000 Waves 2020.06.17 15:48 [2110916] smart account 3P5bczozZttGuLUPJfz25bE8HtzXHtWnzYv > SELF 0.00000000 Waves
{ "type": 13, "id": "EWeMevSEZ2G82tthpPPmBKEKtyubWNKDcHJNjWxhwhp9", "fee": 1500000, "feeAssetId": null, "timestamp": 1592398133712, "version": 1, "sender": "3P5bczozZttGuLUPJfz25bE8HtzXHtWnzYv", "senderPublicKey": "CQxNnWynVxPVdzu1ghpBPceE5nVQzsngc4uYy6PgKD6a", "proofs": [ "5RzDCdW57QYqwQgr2GFSuuWzRBqi6a4y8dXxWKCkfXdoUJSvmTn1uYy8ZTE6gdtBd25Lvn4ZGgDQCyYfNVZY3j2i" ], "script": "base64:AAIDAAAAAAAAAA0IARIDCgEIEgQKAggCAAAAJwAAAAAJUlNBUFVCTElDCQACWwAAAAECAAABj2Jhc2U2NDpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWxlbXI5NUoxalpVczdjSm1ybW1sTjR6bzdZVnNCSnpJZUpkazhMREZHaFVLU0k2eWZzMjBaeUplMjErNkdKd05uS1VVMVV5b2MxN3dTV01La3JaME1NdllFK1o1QWlpanZCSzRzU0ozSWdHamRVOC9OaEk4Q0JEdTBGK3hSTTlxM1RCM0xMYkR5NXNCZHVkWWZIZnNVT2MrTVR2QUQ2OW4yN2RiMlJoOCt5WlFNdHVia3VUUU5wODlzcGhIUWFMR3lRRmFObEsvTmEzbEZ4Nm9tcXphYTFnam9wbFVyNnJ2WUtnZkFJQ1VCM3pWbUpTaGlFaTd3N1IwaFdsTlJEM3FjWmpDVU9OU3BGbzRXYnprbkdPYXp3ODRCK0lNSUZuSXBYV3pRTDhSWDB2TmNmc0J2TERmTTZrMlphY3F3eU1LYUxMcWlnZEJpR2RKN1crMGxPU3RPUUlEQVFBQgAAAAAGU0VSVkVSCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNQTVQ5d3VuN0JCN0pBQlN1aFRKcEZnSm9lZ1JmWXcyZTZkAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABwgAAAAAARCRVQxAAAAAAAAAAABAAAAAARCRVQyAAAAAAAAAAACAAAAAARCRVQ0AAAAAAAAAAAEAAAAAARCRVQ4AAAAAAAAAAAIAAAAAAVCRVQxNAAAAAAAAAAADgAAAAAEQkVUUwkABEwAAAACBQAAAARCRVQxCQAETAAAAAIFAAAABEJFVDIJAARMAAAAAgUAAAAEQkVUNAkABEwAAAACBQAAAARCRVQ4CQAETAAAAAIFAAAABUJFVDE0BQAAAANuaWwAAAAABldBVkVTRAAAAAAABfXhAAAAAAAFVVNETkQAAAAAAAAPQkAAAAAACERFQ0lNQUxTCQAETAAAAAIFAAAABldBVkVTRAkABEwAAAACBQAAAAVVU0RORAUAAAADbmlsAAAAAAZBU1NFVFMJAARMAAAAAgUAAAAEdW5pdAkABEwAAAACCQACWQAAAAECAAAALERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBQAAAANuaWwAAAAACFJBVEVNVUxUAAAAAAAAACcQAAAAAARSQVRFAAAAAAAAAEo4AAAAAAxJZHhHYW1lU3RhdGUAAAAAAAAAAAAAAAAAD0lkeFBsYXllckNob2ljZQAAAAAAAAAAAQAAAAARSWR4UGxheWVyUHViS2V5NTgAAAAAAAAAAAIAAAAAEElkeFN0YXJ0ZWRIZWlnaHQAAAAAAAAAAAMAAAAADElkeFdpbkFtb3VudAAAAAAAAAAABAAAAAAKSWR4QXNzZXRJZAAAAAAAAAAABQAAAAAOUkVTRVJWQVRJT05LRVkJAARMAAAAAgIAAAAWJFJFU0VSVkVEX0FNT1VOVF9XQVZFUwkABEwAAAACAgAAABUkUkVTRVJWRURfQU1PVU5UX1VTRE4FAAAAA25pbAAAAAAPR0FNRVNDT1VOVEVSS0VZAgAAAAkkR0FNRV9OVU0AAAAADlNUQVRFU1VCTUlUVEVEAgAAAAlTVUJNSVRURUQAAAAACFNUQVRFV09OAgAAAANXT04AAAAACVNUQVRFTE9TVAIAAAAETE9TVAEAAAAIZ2V0SW50T3IAAAACAAAAA2tleQAAAAdkZWZhdWx0AwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAANrZXkFAAAAB2RlZmF1bHQBAAAABnNldEludAAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAMaW5jcmVtZW50SW50AAAAAQAAAANrZXkJAQAAAAZzZXRJbnQAAAACBQAAAANrZXkJAABkAAAAAgkBAAAACGdldEludE9yAAAAAgUAAAADa2V5AP//////////AAAAAAAAAAABAQAAAAljaGFuZ2VJbnQAAAACAAAAA2tleQAAAAJieQkBAAAABnNldEludAAAAAIFAAAAA2tleQkAAGQAAAACCQEAAAAIZ2V0SW50T3IAAAACBQAAAANrZXkAAAAAAAAAAAAFAAAAAmJ5AQAAABVpbmNyZWFzZVJlc2VydmVBbW91bnQAAAACAAAACXdpbkFtb3VudAAAAAdhc3NldElkBAAAABFuZXdSZXNlcnZlZEFtb3VudAkAAGQAAAACCQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZBQAAAAdhc3NldElkAAAAAAAAAAAABQAAAAl3aW5BbW91bnQDCQAAZgAAAAIFAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAD6wAAAAIFAAAABHRoaXMJAAGRAAAAAgUAAAAGQVNTRVRTBQAAAAdhc3NldElkCQAAAgAAAAECAAAAVEluc3VmZmljaWVudCBmdW5kcyBvbiBEaWNlIFJvbGxlciBhY2NvdW50LiBUcmFuc2FjdGlvbiB3YXMgcmVqZWN0ZWQgZm9yIHlvdXIgc2FmZXR5LgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQBAAAAFmRlY3JlYXNlUmVzZXJ2ZWRBbW91bnQAAAADAAAABmdhbWVJZAAAAAdhc3NldElkAAAACXdpbkFtb3VudAMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACCQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZBQAAAAdhc3NldElkAAAAAAAAAAAABQAAAAl3aW5BbW91bnQJAAACAAAAAQIAAABCSW52YWxpZCBEaWNlIFJvbGxlciBhY2NvdW50IHN0YXRlIC0gcmVzZXJ2ZWQgYW1vdW50IGlzIGxlc3MgdGhhbiAwCQEAAAAJY2hhbmdlSW50AAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAAHYXNzZXRJZAkBAAAAAS0AAAABBQAAAAl3aW5BbW91bnQBAAAAFXZhbGlkYXRlQW5kR2V0QXNzZXRJZAAAAAEAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAHYXNzZXRJZAkAAZEAAAACBQAAAAZBU1NFVFMAAAAAAAAAAAAAAAAAAAAAAAADCQAAAAAAAAIFAAAAB2Fzc2V0SWQJAAGRAAAAAgUAAAAGQVNTRVRTAAAAAAAAAAABAAAAAAAAAAABCQAAAgAAAAECAAAAFUludmFsaWQgcGF5bWVudCBhc3NldAEAAAAadmFsaWRhdGVCZXRBbmRH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SWQJAARMAAAAAgkBAAAADGluY3JlbWVudEludAAAAAEFAAAAD0dBTUVTQ09VTlRFUktFWQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAAtnYW1lRGF0YVN0cgUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABlNFUlZFUggFAAAAAWkAAAADZmVlCAUAAAABaQAAAApmZWVBc3NldElkBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmdhbWVJZAAAAAdyc2FTaWduBAAAAAhnYW1lRGF0YQkBAAAAD2V4dHJhY3RHYW1lRGF0YQAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAPSWR4UGxheWVyQ2hvaWNlBAAAAA1zdGFydGVkSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAEElkeFN0YXJ0ZWRIZWlnaHQEAAAACXdpbkFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAAAxJZHhXaW5BbW91bnQEAAAAB2Fzc2V0SWQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAKSWR4QXNzZXRJZAQAAAAOcGxheWVyUHViS2V5NTgJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAEUlkeFBsYXllclB1YktleTU4BAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAAAx3aW5CeVRpbWVvdXQJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADXN0YXJ0ZWRIZWlnaHQFAAAAE1JBTkRPUkFDTEVUSU1FRlJBTUUEAAAAEWRlY3JlYXNlZFJlc2VydmVzCQEAAAAWZGVjcmVhc2VSZXNlcnZlZEFtb3VudAAAAAMFAAAABmdhbWVJZAUAAAAHYXNzZXRJZAUAAAAJd2luQW1vdW50AwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQDBQAAAAx3aW5CeVRpbWVvdXQEAAAAB3JhbmRTdHIJAAEvAAAAAgUAAAAMcGxheWVyQ2hvaWNlAAAAAAAAAAABBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAADmZvcm1hdEdhbWVEYXRhAAAABwUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAHcmFuZFN0cgkBAAAADHdpblNjcmlwdFNldAAAAAcFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAJd2luQW1vdW50BQAAAAdhc3NldElkBQAAAA5uZXdHYW1lRGF0YVN0cgUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAHcmFuZFN0cgkBAAAAD2dlbmVyYXRlUmFuZEludAAAAAIFAAAABmdhbWVJZAUAAAAHcnNhU2lnbgMJAQAAAAtpc1BsYXllcldpbgAAAAIFAAAADHBsYXllckNob2ljZQUAAAAHcmFuZFN0cgQAAAAObmV3R2FtZURhdGFTdHIJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAAB3JhbmRTdHIJAQAAAAx3aW5TY3JpcHRTZXQAAAAHBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAAOZm9ybWF0R2FtZURhdGEAAAAHBQAAAAlTVEFURUxPU1QFAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAHcmFuZFN0cgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAA5uZXdHYW1lRGF0YVN0cgkABEwAAAACBQAAABFkZWNyZWFzZWRSZXNlcnZlcwUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAADdHR4BQAAAAckbWF0Y2gwBAAAAAdhc3NldElkCQEAAAAVdmFsaWRhdGVBbmRHZXRBc3NldElkAAAAAQgFAAAAA3R0eAAAAAdhc3NldElkCQAAZwAAAAIJAABlAAAAAgkAA+sAAAACBQAAAAR0aGlzCAUAAAADdHR4AAAAB2Fzc2V0SWQIBQAAAAN0dHgAAAAGYW1vdW50CQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZBQAAAAdhc3NldElkAAAAAAAAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAADc3R4BQAAAAckbWF0Y2gwAwkAAAAAAAACCQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAIJAQAAAAhnZXRJbnRPcgAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAHBwdT3wFK", "chainId": 87, "height": 2110916, "spentComplexity": 0 } View: original | compacted Prev: ANeFp91PdUNosbtwv4V6iWo5tNfJV3EokgDS1erdHVSM Next: none Diff:
Old | New | Differences | |
---|---|---|---|
27 | 27 | ||
28 | 28 | let m = [unit, fromBase58String("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")] | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = 10000 | |
31 | 31 | ||
32 | - | func o (p) = n[p] | |
32 | + | let o = 19000 | |
33 | + | ||
34 | + | let p = 0 | |
35 | + | ||
36 | + | let q = 1 | |
37 | + | ||
38 | + | let r = 2 | |
39 | + | ||
40 | + | let s = 3 | |
41 | + | ||
42 | + | let t = 4 | |
43 | + | ||
44 | + | let u = 5 | |
45 | + | ||
46 | + | let v = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"] | |
47 | + | ||
48 | + | let w = "$GAME_NUM" | |
49 | + | ||
50 | + | let x = "SUBMITTED" | |
51 | + | ||
52 | + | let y = "WON" | |
53 | + | ||
54 | + | let z = "LOST" | |
55 | + | ||
56 | + | func A (B,C) = if (isDefined(getInteger(this, B))) | |
57 | + | then getIntegerValue(this, B) | |
58 | + | else C | |
33 | 59 | ||
34 | 60 | ||
35 | - | let q = 10000 | |
36 | - | ||
37 | - | let r = 19000 | |
38 | - | ||
39 | - | let s = 0 | |
40 | - | ||
41 | - | let t = 1 | |
42 | - | ||
43 | - | let u = 2 | |
44 | - | ||
45 | - | let v = 3 | |
46 | - | ||
47 | - | let w = 4 | |
48 | - | ||
49 | - | let x = 5 | |
50 | - | ||
51 | - | let y = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"] | |
52 | - | ||
53 | - | let z = "$GAME_NUM" | |
54 | - | ||
55 | - | let A = "SUBMITTED" | |
56 | - | ||
57 | - | let B = "WON" | |
58 | - | ||
59 | - | let C = "LOST" | |
60 | - | ||
61 | - | func D (E,F) = if (isDefined(getInteger(this, E))) | |
62 | - | then getIntegerValue(this, E) | |
63 | - | else F | |
61 | + | func D (B,E) = DataEntry(B, E) | |
64 | 62 | ||
65 | 63 | ||
66 | - | func | |
64 | + | func F (B) = D(B, (A(B, -1) + 1)) | |
67 | 65 | ||
68 | 66 | ||
69 | - | func | |
67 | + | func G (B,H) = D(B, (A(B, 0) + H)) | |
70 | 68 | ||
71 | 69 | ||
72 | - | func J (E,K) = G(E, (D(E, 0) + K)) | |
73 | - | ||
74 | - | ||
75 | - | func L (M,p) = { | |
76 | - | let N = (D(y[p], 0) + M) | |
77 | - | if ((N > assetBalance(this, m[p]))) | |
70 | + | func I (J,K) = { | |
71 | + | let L = (A(v[K], 0) + J) | |
72 | + | if ((L > assetBalance(this, m[K]))) | |
78 | 73 | then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.") | |
79 | - | else | |
74 | + | else L | |
80 | 75 | } | |
81 | 76 | ||
82 | 77 | ||
83 | - | func | |
78 | + | func M (N,K,J) = if ((0 > (A(v[K], 0) - J))) | |
84 | 79 | then throw("Invalid Dice Roller account state - reserved amount is less than 0") | |
85 | - | else | |
80 | + | else G(v[K], -(J)) | |
86 | 81 | ||
87 | 82 | ||
88 | - | func | |
83 | + | func O (K) = if ((K == m[0])) | |
89 | 84 | then 0 | |
90 | - | else if (( | |
85 | + | else if ((K == m[1])) | |
91 | 86 | then 1 | |
92 | 87 | else throw("Invalid payment asset") | |
93 | 88 | ||
94 | 89 | ||
95 | - | func R (S,p,T) = { | |
96 | - | let U = size(T) | |
97 | - | let V = o(p) | |
98 | - | func W (X,Y) = if (X) | |
90 | + | func P (Q,K,R) = { | |
91 | + | let S = size(R) | |
92 | + | func T (U,V) = if (U) | |
99 | 93 | then true | |
100 | - | else ( | |
94 | + | else (Q == (V * l[K])) | |
101 | 95 | ||
102 | 96 | if (!({ | |
103 | - | let | |
104 | - | let | |
105 | - | let | |
106 | - | if (( | |
107 | - | then | |
97 | + | let W = i | |
98 | + | let X = size(W) | |
99 | + | let Y = false | |
100 | + | if ((X == 0)) | |
101 | + | then Y | |
108 | 102 | else { | |
109 | - | let | |
110 | - | if (( | |
111 | - | then | |
103 | + | let Z = T(Y, W[0]) | |
104 | + | if ((X == 1)) | |
105 | + | then Z | |
112 | 106 | else { | |
113 | - | let | |
114 | - | if (( | |
115 | - | then | |
107 | + | let aa = T(Z, W[1]) | |
108 | + | if ((X == 2)) | |
109 | + | then aa | |
116 | 110 | else { | |
117 | - | let | |
118 | - | if (( | |
119 | - | then | |
111 | + | let ab = T(aa, W[2]) | |
112 | + | if ((X == 3)) | |
113 | + | then ab | |
120 | 114 | else { | |
121 | - | let | |
122 | - | if (( | |
123 | - | then | |
115 | + | let ac = T(ab, W[3]) | |
116 | + | if ((X == 4)) | |
117 | + | then ac | |
124 | 118 | else { | |
125 | - | let | |
126 | - | if (( | |
127 | - | then | |
119 | + | let ad = T(ac, W[4]) | |
120 | + | if ((X == 5)) | |
121 | + | then ad | |
128 | 122 | else { | |
129 | - | let | |
123 | + | let ae = T(ad, W[5]) | |
130 | 124 | throw("List size exceed 5") | |
131 | 125 | } | |
132 | 126 | } | |
136 | 130 | } | |
137 | 131 | })) | |
138 | 132 | then throw("Bet amount is not valid") | |
139 | - | else if ((parseInt( | |
133 | + | else if ((parseInt(R) == unit)) | |
140 | 134 | then throw("Invalid player's choice") | |
141 | - | else if (( | |
135 | + | else if ((S != 1)) | |
142 | 136 | then throw("Invalid length of player's choice") | |
137 | + | else ((Q * o) / n) | |
138 | + | } | |
139 | + | ||
140 | + | ||
141 | + | func af (N,ag) = { | |
142 | + | let ah = rsaVerify(SHA256, toBytes(N), ag, a) | |
143 | + | if (!(ah)) | |
144 | + | then throw("Invalid RSA signature") | |
145 | + | else { | |
146 | + | let ai = (toInt(sha256(ag)) % 2) | |
147 | + | let aj = if ((0 > ai)) | |
148 | + | then (-1 * ai) | |
149 | + | else ai | |
150 | + | toString(aj) | |
151 | + | } | |
152 | + | } | |
153 | + | ||
154 | + | ||
155 | + | func ak (R,al) = { | |
156 | + | let am = size(R) | |
157 | + | if ((am == 1)) | |
158 | + | then (R == al) | |
159 | + | else false | |
160 | + | } | |
161 | + | ||
162 | + | ||
163 | + | func an (ao,R,ap,aq,J,K,ar) = (((((((((((ao + "_") + R) + "_") + ap) + "_") + toString(aq)) + "_") + toString(J)) + "_") + toString(K)) + (if ((ar == "")) | |
164 | + | then "" | |
165 | + | else ("_" + ar))) | |
166 | + | ||
167 | + | ||
168 | + | func as (N) = split({ | |
169 | + | let at = getString(this, N) | |
170 | + | if ($isInstanceOf(at, "String")) | |
171 | + | then { | |
172 | + | let au = at | |
173 | + | au | |
174 | + | } | |
175 | + | else throw((("Game: " + N) + " not found.")) | |
176 | + | }, "_") | |
177 | + | ||
178 | + | ||
179 | + | func av (N,aw,J,K,ax,ay,az) = { | |
180 | + | let aA = [az] | |
181 | + | let aB = [ScriptTransfer(aw, J, m[K])] | |
182 | + | if (ay) | |
183 | + | then { | |
184 | + | let aC = (ax + "_TIMEOUT") | |
185 | + | let aD = DataEntry(N, aC) | |
186 | + | ScriptResult(WriteSet(aD :: aA), TransferSet(aB)) | |
187 | + | } | |
188 | + | else { | |
189 | + | let aD = DataEntry(N, ax) | |
190 | + | ScriptResult(WriteSet(aD :: aA), TransferSet(aB)) | |
191 | + | } | |
192 | + | } | |
193 | + | ||
194 | + | ||
195 | + | @Callable(aE) | |
196 | + | func bet (R) = { | |
197 | + | let N = toBase58String(aE.transactionId) | |
198 | + | if ((aE.payment == unit)) | |
199 | + | then throw("No payment") | |
200 | + | else if (isDefined(getString(this, N))) | |
201 | + | then throw((("Bet for: " + N) + " was already made.")) | |
202 | + | else if (if ((aE.feeAssetId != m[0])) | |
203 | + | then (aE.feeAssetId != m[1]) | |
204 | + | else false) | |
205 | + | then throw("Invalid fee asset") | |
143 | 206 | else { | |
144 | - | let ai = (S - V) | |
145 | - | ((ai * r) / q) | |
207 | + | let aF = extract(aE.payment) | |
208 | + | if ((aE.feeAssetId != aF.assetId)) | |
209 | + | then throw("Fee assetId and payment assetId should match") | |
210 | + | else { | |
211 | + | let K = O(aF.assetId) | |
212 | + | let aG = aE.fee | |
213 | + | let J = P((aF.amount - aE.fee), K, R) | |
214 | + | let aH = isDefined(getString(this, N)) | |
215 | + | let ap = toBase58String(aE.callerPublicKey) | |
216 | + | let aI = an(x, R, ap, height, J, K, "") | |
217 | + | ScriptResult(WriteSet([DataEntry(v[K], I(J, K)), F(w), DataEntry(N, aI)]), TransferSet([ScriptTransfer(b, aE.fee, aE.feeAssetId)])) | |
218 | + | } | |
146 | 219 | } | |
147 | 220 | } | |
148 | 221 | ||
149 | 222 | ||
150 | - | func aj (P,ak) = { | |
151 | - | let al = rsaVerify(SHA256, toBytes(P), ak, a) | |
152 | - | if (!(al)) | |
153 | - | then throw("Invalid RSA signature") | |
154 | - | else { | |
155 | - | let am = (toInt(sha256(ak)) % 2) | |
156 | - | let an = if ((0 > am)) | |
157 | - | then (-1 * am) | |
158 | - | else am | |
159 | - | toString(an) | |
160 | - | } | |
161 | - | } | |
162 | 223 | ||
163 | - | ||
164 | - | func ao (T,ap) = { | |
165 | - | let aq = size(T) | |
166 | - | if ((aq == 1)) | |
167 | - | then (T == ap) | |
168 | - | else false | |
169 | - | } | |
170 | - | ||
171 | - | ||
172 | - | func ar (as,T,at,au,M,p,av) = (((((((((((as + "_") + T) + "_") + at) + "_") + toString(au)) + "_") + toString(M)) + "_") + toString(p)) + (if ((av == "")) | |
173 | - | then "" | |
174 | - | else ("_" + av))) | |
175 | - | ||
176 | - | ||
177 | - | func aw (P) = split({ | |
178 | - | let ax = getString(this, P) | |
179 | - | if ($isInstanceOf(ax, "String")) | |
180 | - | then { | |
181 | - | let ay = ax | |
182 | - | ay | |
183 | - | } | |
184 | - | else throw((("Game: " + P) + " not found.")) | |
185 | - | }, "_") | |
186 | - | ||
187 | - | ||
188 | - | func az (P,aA,M,p,aB,aC,aD) = { | |
189 | - | let aE = [aD] | |
190 | - | let aF = [ScriptTransfer(aA, M, m[p])] | |
191 | - | if (aC) | |
192 | - | then { | |
193 | - | let aG = (aB + "_TIMEOUT") | |
194 | - | let aH = DataEntry(P, aG) | |
195 | - | ScriptResult(WriteSet(aH :: aE), TransferSet(aF)) | |
196 | - | } | |
197 | - | else { | |
198 | - | let aH = DataEntry(P, aB) | |
199 | - | ScriptResult(WriteSet(aH :: aE), TransferSet(aF)) | |
200 | - | } | |
201 | - | } | |
202 | - | ||
203 | - | ||
204 | - | @Callable(aI) | |
205 | - | func bet (T) = { | |
206 | - | let P = toBase58String(aI.transactionId) | |
207 | - | if ((aI.payment == unit)) | |
208 | - | then throw("No payment") | |
209 | - | else if (isDefined(getString(this, P))) | |
210 | - | then throw((("Bet for: " + P) + " was already made.")) | |
211 | - | else { | |
212 | - | let aJ = extract(aI.payment) | |
213 | - | let p = Q(aJ.assetId) | |
214 | - | let V = o(p) | |
215 | - | let M = R(aJ.amount, p, T) | |
216 | - | let aK = isDefined(getString(this, P)) | |
217 | - | let at = toBase58String(aI.callerPublicKey) | |
218 | - | let aL = ar(A, T, at, height, M, p, "") | |
219 | - | ScriptResult(WriteSet([DataEntry(y[p], L(M, p)), I(z), DataEntry(P, aL)]), TransferSet([ScriptTransfer(b, V, unit)])) | |
220 | - | } | |
221 | - | } | |
222 | - | ||
223 | - | ||
224 | - | ||
225 | - | @Callable(aI) | |
226 | - | func withdraw (P,ak) = { | |
227 | - | let aH = aw(P) | |
228 | - | let as = aH[s] | |
229 | - | let T = aH[t] | |
230 | - | let au = parseIntValue(aH[v]) | |
231 | - | let M = parseIntValue(aH[w]) | |
232 | - | let p = parseIntValue(aH[x]) | |
233 | - | let at = aH[u] | |
234 | - | let aA = addressFromPublicKey(fromBase58String(at)) | |
235 | - | let aC = ((height - au) > c) | |
236 | - | let aD = O(P, p, M) | |
237 | - | if ((as != A)) | |
224 | + | @Callable(aE) | |
225 | + | func withdraw (N,ag) = { | |
226 | + | let aD = as(N) | |
227 | + | let ao = aD[p] | |
228 | + | let R = aD[q] | |
229 | + | let aq = parseIntValue(aD[s]) | |
230 | + | let J = parseIntValue(aD[t]) | |
231 | + | let K = parseIntValue(aD[u]) | |
232 | + | let ap = aD[r] | |
233 | + | let aw = addressFromPublicKey(fromBase58String(ap)) | |
234 | + | let ay = ((height - aq) > c) | |
235 | + | let az = M(N, K, J) | |
236 | + | if ((ao != x)) | |
238 | 237 | then throw("Invalid game state for passed gameId") | |
239 | - | else if ( | |
238 | + | else if (ay) | |
240 | 239 | then { | |
241 | - | let | |
242 | - | let | |
243 | - | | |
240 | + | let al = take(R, 1) | |
241 | + | let ax = an(y, R, ap, aq, J, K, al) | |
242 | + | av(N, aw, J, K, ax, ay, az) | |
244 | 243 | } | |
245 | 244 | else { | |
246 | - | let | |
247 | - | if ( | |
245 | + | let al = af(N, ag) | |
246 | + | if (ak(R, al)) | |
248 | 247 | then { | |
249 | - | let | |
250 | - | | |
248 | + | let ax = an(y, R, ap, aq, J, K, al) | |
249 | + | av(N, aw, J, K, ax, ay, az) | |
251 | 250 | } | |
252 | 251 | else { | |
253 | - | let | |
254 | - | WriteSet([DataEntry( | |
252 | + | let ax = an(z, R, ap, aq, J, K, al) | |
253 | + | WriteSet([DataEntry(N, ax), az]) | |
255 | 254 | } | |
256 | 255 | } | |
257 | 256 | } | |
258 | 257 | ||
259 | 258 | ||
260 | - | @Verifier( | |
261 | - | func | |
259 | + | @Verifier(aJ) | |
260 | + | func aK () = if (sigVerify(aJ.bodyBytes, aJ.proofs[0], aJ.senderPublicKey)) | |
262 | 261 | then { | |
263 | - | let | |
264 | - | if ($isInstanceOf( | |
262 | + | let at = aJ | |
263 | + | if ($isInstanceOf(at, "TransferTransaction")) | |
265 | 264 | then { | |
266 | - | let | |
267 | - | let | |
268 | - | ((assetBalance(this, | |
265 | + | let aL = at | |
266 | + | let K = O(aL.assetId) | |
267 | + | ((assetBalance(this, aL.assetId) - aL.amount) >= A(v[K], 0)) | |
269 | 268 | } | |
270 | - | else if ($isInstanceOf( | |
269 | + | else if ($isInstanceOf(at, "SetScriptTransaction")) | |
271 | 270 | then { | |
272 | - | let | |
273 | - | if (( | |
274 | - | then ( | |
271 | + | let aM = at | |
272 | + | if ((A(v[0], 0) == 0)) | |
273 | + | then (A(v[1], 0) == 0) | |
275 | 274 | else false | |
276 | 275 | } | |
277 | 276 | else false |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 3 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlemr95J1jZUs7cJmrmmlN4zo7YVsBJzIeJdk8LDFGhUKSI6yfs20ZyJe21+6GJwNnKUU1Uyoc17wSWMKkrZ0MMvYE+Z5AiijvBK4sSJ3IgGjdU8/NhI8CBDu0F+xRM9q3TB3LLbDy5sBdudYfHfsUOc+MTvAD69n27db2Rh8+yZQMtubkuTQNp89sphHQaLGyQFaNlK/Na3lFx6omqzaa1gjoplUr6rvYKgfAICUB3zVmJShiEi7w7R0hWlNRD3qcZjCUONSpFo4WbzknGOazw84B+IMIFnIpXWzQL8RX0vNcfsBvLDfM6k2ZacqwyMKaLLqigdBiGdJ7W+0lOStOQIDAQAB") | |
5 | 5 | ||
6 | 6 | let b = addressFromStringValue("3PMT9wun7BB7JABSuhTJpFgJoegRfYw2e6d") | |
7 | 7 | ||
8 | 8 | let c = 7200 | |
9 | 9 | ||
10 | 10 | let d = 1 | |
11 | 11 | ||
12 | 12 | let e = 2 | |
13 | 13 | ||
14 | 14 | let f = 4 | |
15 | 15 | ||
16 | 16 | let g = 8 | |
17 | 17 | ||
18 | 18 | let h = 14 | |
19 | 19 | ||
20 | 20 | let i = [d, e, f, g, h] | |
21 | 21 | ||
22 | 22 | let j = 100000000 | |
23 | 23 | ||
24 | 24 | let k = 1000000 | |
25 | 25 | ||
26 | 26 | let l = [j, k] | |
27 | 27 | ||
28 | 28 | let m = [unit, fromBase58String("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")] | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = 10000 | |
31 | 31 | ||
32 | - | func o (p) = n[p] | |
32 | + | let o = 19000 | |
33 | + | ||
34 | + | let p = 0 | |
35 | + | ||
36 | + | let q = 1 | |
37 | + | ||
38 | + | let r = 2 | |
39 | + | ||
40 | + | let s = 3 | |
41 | + | ||
42 | + | let t = 4 | |
43 | + | ||
44 | + | let u = 5 | |
45 | + | ||
46 | + | let v = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"] | |
47 | + | ||
48 | + | let w = "$GAME_NUM" | |
49 | + | ||
50 | + | let x = "SUBMITTED" | |
51 | + | ||
52 | + | let y = "WON" | |
53 | + | ||
54 | + | let z = "LOST" | |
55 | + | ||
56 | + | func A (B,C) = if (isDefined(getInteger(this, B))) | |
57 | + | then getIntegerValue(this, B) | |
58 | + | else C | |
33 | 59 | ||
34 | 60 | ||
35 | - | let q = 10000 | |
36 | - | ||
37 | - | let r = 19000 | |
38 | - | ||
39 | - | let s = 0 | |
40 | - | ||
41 | - | let t = 1 | |
42 | - | ||
43 | - | let u = 2 | |
44 | - | ||
45 | - | let v = 3 | |
46 | - | ||
47 | - | let w = 4 | |
48 | - | ||
49 | - | let x = 5 | |
50 | - | ||
51 | - | let y = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"] | |
52 | - | ||
53 | - | let z = "$GAME_NUM" | |
54 | - | ||
55 | - | let A = "SUBMITTED" | |
56 | - | ||
57 | - | let B = "WON" | |
58 | - | ||
59 | - | let C = "LOST" | |
60 | - | ||
61 | - | func D (E,F) = if (isDefined(getInteger(this, E))) | |
62 | - | then getIntegerValue(this, E) | |
63 | - | else F | |
61 | + | func D (B,E) = DataEntry(B, E) | |
64 | 62 | ||
65 | 63 | ||
66 | - | func | |
64 | + | func F (B) = D(B, (A(B, -1) + 1)) | |
67 | 65 | ||
68 | 66 | ||
69 | - | func | |
67 | + | func G (B,H) = D(B, (A(B, 0) + H)) | |
70 | 68 | ||
71 | 69 | ||
72 | - | func J (E,K) = G(E, (D(E, 0) + K)) | |
73 | - | ||
74 | - | ||
75 | - | func L (M,p) = { | |
76 | - | let N = (D(y[p], 0) + M) | |
77 | - | if ((N > assetBalance(this, m[p]))) | |
70 | + | func I (J,K) = { | |
71 | + | let L = (A(v[K], 0) + J) | |
72 | + | if ((L > assetBalance(this, m[K]))) | |
78 | 73 | then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.") | |
79 | - | else | |
74 | + | else L | |
80 | 75 | } | |
81 | 76 | ||
82 | 77 | ||
83 | - | func | |
78 | + | func M (N,K,J) = if ((0 > (A(v[K], 0) - J))) | |
84 | 79 | then throw("Invalid Dice Roller account state - reserved amount is less than 0") | |
85 | - | else | |
80 | + | else G(v[K], -(J)) | |
86 | 81 | ||
87 | 82 | ||
88 | - | func | |
83 | + | func O (K) = if ((K == m[0])) | |
89 | 84 | then 0 | |
90 | - | else if (( | |
85 | + | else if ((K == m[1])) | |
91 | 86 | then 1 | |
92 | 87 | else throw("Invalid payment asset") | |
93 | 88 | ||
94 | 89 | ||
95 | - | func R (S,p,T) = { | |
96 | - | let U = size(T) | |
97 | - | let V = o(p) | |
98 | - | func W (X,Y) = if (X) | |
90 | + | func P (Q,K,R) = { | |
91 | + | let S = size(R) | |
92 | + | func T (U,V) = if (U) | |
99 | 93 | then true | |
100 | - | else ( | |
94 | + | else (Q == (V * l[K])) | |
101 | 95 | ||
102 | 96 | if (!({ | |
103 | - | let | |
104 | - | let | |
105 | - | let | |
106 | - | if (( | |
107 | - | then | |
97 | + | let W = i | |
98 | + | let X = size(W) | |
99 | + | let Y = false | |
100 | + | if ((X == 0)) | |
101 | + | then Y | |
108 | 102 | else { | |
109 | - | let | |
110 | - | if (( | |
111 | - | then | |
103 | + | let Z = T(Y, W[0]) | |
104 | + | if ((X == 1)) | |
105 | + | then Z | |
112 | 106 | else { | |
113 | - | let | |
114 | - | if (( | |
115 | - | then | |
107 | + | let aa = T(Z, W[1]) | |
108 | + | if ((X == 2)) | |
109 | + | then aa | |
116 | 110 | else { | |
117 | - | let | |
118 | - | if (( | |
119 | - | then | |
111 | + | let ab = T(aa, W[2]) | |
112 | + | if ((X == 3)) | |
113 | + | then ab | |
120 | 114 | else { | |
121 | - | let | |
122 | - | if (( | |
123 | - | then | |
115 | + | let ac = T(ab, W[3]) | |
116 | + | if ((X == 4)) | |
117 | + | then ac | |
124 | 118 | else { | |
125 | - | let | |
126 | - | if (( | |
127 | - | then | |
119 | + | let ad = T(ac, W[4]) | |
120 | + | if ((X == 5)) | |
121 | + | then ad | |
128 | 122 | else { | |
129 | - | let | |
123 | + | let ae = T(ad, W[5]) | |
130 | 124 | throw("List size exceed 5") | |
131 | 125 | } | |
132 | 126 | } | |
133 | 127 | } | |
134 | 128 | } | |
135 | 129 | } | |
136 | 130 | } | |
137 | 131 | })) | |
138 | 132 | then throw("Bet amount is not valid") | |
139 | - | else if ((parseInt( | |
133 | + | else if ((parseInt(R) == unit)) | |
140 | 134 | then throw("Invalid player's choice") | |
141 | - | else if (( | |
135 | + | else if ((S != 1)) | |
142 | 136 | then throw("Invalid length of player's choice") | |
137 | + | else ((Q * o) / n) | |
138 | + | } | |
139 | + | ||
140 | + | ||
141 | + | func af (N,ag) = { | |
142 | + | let ah = rsaVerify(SHA256, toBytes(N), ag, a) | |
143 | + | if (!(ah)) | |
144 | + | then throw("Invalid RSA signature") | |
145 | + | else { | |
146 | + | let ai = (toInt(sha256(ag)) % 2) | |
147 | + | let aj = if ((0 > ai)) | |
148 | + | then (-1 * ai) | |
149 | + | else ai | |
150 | + | toString(aj) | |
151 | + | } | |
152 | + | } | |
153 | + | ||
154 | + | ||
155 | + | func ak (R,al) = { | |
156 | + | let am = size(R) | |
157 | + | if ((am == 1)) | |
158 | + | then (R == al) | |
159 | + | else false | |
160 | + | } | |
161 | + | ||
162 | + | ||
163 | + | func an (ao,R,ap,aq,J,K,ar) = (((((((((((ao + "_") + R) + "_") + ap) + "_") + toString(aq)) + "_") + toString(J)) + "_") + toString(K)) + (if ((ar == "")) | |
164 | + | then "" | |
165 | + | else ("_" + ar))) | |
166 | + | ||
167 | + | ||
168 | + | func as (N) = split({ | |
169 | + | let at = getString(this, N) | |
170 | + | if ($isInstanceOf(at, "String")) | |
171 | + | then { | |
172 | + | let au = at | |
173 | + | au | |
174 | + | } | |
175 | + | else throw((("Game: " + N) + " not found.")) | |
176 | + | }, "_") | |
177 | + | ||
178 | + | ||
179 | + | func av (N,aw,J,K,ax,ay,az) = { | |
180 | + | let aA = [az] | |
181 | + | let aB = [ScriptTransfer(aw, J, m[K])] | |
182 | + | if (ay) | |
183 | + | then { | |
184 | + | let aC = (ax + "_TIMEOUT") | |
185 | + | let aD = DataEntry(N, aC) | |
186 | + | ScriptResult(WriteSet(aD :: aA), TransferSet(aB)) | |
187 | + | } | |
188 | + | else { | |
189 | + | let aD = DataEntry(N, ax) | |
190 | + | ScriptResult(WriteSet(aD :: aA), TransferSet(aB)) | |
191 | + | } | |
192 | + | } | |
193 | + | ||
194 | + | ||
195 | + | @Callable(aE) | |
196 | + | func bet (R) = { | |
197 | + | let N = toBase58String(aE.transactionId) | |
198 | + | if ((aE.payment == unit)) | |
199 | + | then throw("No payment") | |
200 | + | else if (isDefined(getString(this, N))) | |
201 | + | then throw((("Bet for: " + N) + " was already made.")) | |
202 | + | else if (if ((aE.feeAssetId != m[0])) | |
203 | + | then (aE.feeAssetId != m[1]) | |
204 | + | else false) | |
205 | + | then throw("Invalid fee asset") | |
143 | 206 | else { | |
144 | - | let ai = (S - V) | |
145 | - | ((ai * r) / q) | |
207 | + | let aF = extract(aE.payment) | |
208 | + | if ((aE.feeAssetId != aF.assetId)) | |
209 | + | then throw("Fee assetId and payment assetId should match") | |
210 | + | else { | |
211 | + | let K = O(aF.assetId) | |
212 | + | let aG = aE.fee | |
213 | + | let J = P((aF.amount - aE.fee), K, R) | |
214 | + | let aH = isDefined(getString(this, N)) | |
215 | + | let ap = toBase58String(aE.callerPublicKey) | |
216 | + | let aI = an(x, R, ap, height, J, K, "") | |
217 | + | ScriptResult(WriteSet([DataEntry(v[K], I(J, K)), F(w), DataEntry(N, aI)]), TransferSet([ScriptTransfer(b, aE.fee, aE.feeAssetId)])) | |
218 | + | } | |
146 | 219 | } | |
147 | 220 | } | |
148 | 221 | ||
149 | 222 | ||
150 | - | func aj (P,ak) = { | |
151 | - | let al = rsaVerify(SHA256, toBytes(P), ak, a) | |
152 | - | if (!(al)) | |
153 | - | then throw("Invalid RSA signature") | |
154 | - | else { | |
155 | - | let am = (toInt(sha256(ak)) % 2) | |
156 | - | let an = if ((0 > am)) | |
157 | - | then (-1 * am) | |
158 | - | else am | |
159 | - | toString(an) | |
160 | - | } | |
161 | - | } | |
162 | 223 | ||
163 | - | ||
164 | - | func ao (T,ap) = { | |
165 | - | let aq = size(T) | |
166 | - | if ((aq == 1)) | |
167 | - | then (T == ap) | |
168 | - | else false | |
169 | - | } | |
170 | - | ||
171 | - | ||
172 | - | func ar (as,T,at,au,M,p,av) = (((((((((((as + "_") + T) + "_") + at) + "_") + toString(au)) + "_") + toString(M)) + "_") + toString(p)) + (if ((av == "")) | |
173 | - | then "" | |
174 | - | else ("_" + av))) | |
175 | - | ||
176 | - | ||
177 | - | func aw (P) = split({ | |
178 | - | let ax = getString(this, P) | |
179 | - | if ($isInstanceOf(ax, "String")) | |
180 | - | then { | |
181 | - | let ay = ax | |
182 | - | ay | |
183 | - | } | |
184 | - | else throw((("Game: " + P) + " not found.")) | |
185 | - | }, "_") | |
186 | - | ||
187 | - | ||
188 | - | func az (P,aA,M,p,aB,aC,aD) = { | |
189 | - | let aE = [aD] | |
190 | - | let aF = [ScriptTransfer(aA, M, m[p])] | |
191 | - | if (aC) | |
192 | - | then { | |
193 | - | let aG = (aB + "_TIMEOUT") | |
194 | - | let aH = DataEntry(P, aG) | |
195 | - | ScriptResult(WriteSet(aH :: aE), TransferSet(aF)) | |
196 | - | } | |
197 | - | else { | |
198 | - | let aH = DataEntry(P, aB) | |
199 | - | ScriptResult(WriteSet(aH :: aE), TransferSet(aF)) | |
200 | - | } | |
201 | - | } | |
202 | - | ||
203 | - | ||
204 | - | @Callable(aI) | |
205 | - | func bet (T) = { | |
206 | - | let P = toBase58String(aI.transactionId) | |
207 | - | if ((aI.payment == unit)) | |
208 | - | then throw("No payment") | |
209 | - | else if (isDefined(getString(this, P))) | |
210 | - | then throw((("Bet for: " + P) + " was already made.")) | |
211 | - | else { | |
212 | - | let aJ = extract(aI.payment) | |
213 | - | let p = Q(aJ.assetId) | |
214 | - | let V = o(p) | |
215 | - | let M = R(aJ.amount, p, T) | |
216 | - | let aK = isDefined(getString(this, P)) | |
217 | - | let at = toBase58String(aI.callerPublicKey) | |
218 | - | let aL = ar(A, T, at, height, M, p, "") | |
219 | - | ScriptResult(WriteSet([DataEntry(y[p], L(M, p)), I(z), DataEntry(P, aL)]), TransferSet([ScriptTransfer(b, V, unit)])) | |
220 | - | } | |
221 | - | } | |
222 | - | ||
223 | - | ||
224 | - | ||
225 | - | @Callable(aI) | |
226 | - | func withdraw (P,ak) = { | |
227 | - | let aH = aw(P) | |
228 | - | let as = aH[s] | |
229 | - | let T = aH[t] | |
230 | - | let au = parseIntValue(aH[v]) | |
231 | - | let M = parseIntValue(aH[w]) | |
232 | - | let p = parseIntValue(aH[x]) | |
233 | - | let at = aH[u] | |
234 | - | let aA = addressFromPublicKey(fromBase58String(at)) | |
235 | - | let aC = ((height - au) > c) | |
236 | - | let aD = O(P, p, M) | |
237 | - | if ((as != A)) | |
224 | + | @Callable(aE) | |
225 | + | func withdraw (N,ag) = { | |
226 | + | let aD = as(N) | |
227 | + | let ao = aD[p] | |
228 | + | let R = aD[q] | |
229 | + | let aq = parseIntValue(aD[s]) | |
230 | + | let J = parseIntValue(aD[t]) | |
231 | + | let K = parseIntValue(aD[u]) | |
232 | + | let ap = aD[r] | |
233 | + | let aw = addressFromPublicKey(fromBase58String(ap)) | |
234 | + | let ay = ((height - aq) > c) | |
235 | + | let az = M(N, K, J) | |
236 | + | if ((ao != x)) | |
238 | 237 | then throw("Invalid game state for passed gameId") | |
239 | - | else if ( | |
238 | + | else if (ay) | |
240 | 239 | then { | |
241 | - | let | |
242 | - | let | |
243 | - | | |
240 | + | let al = take(R, 1) | |
241 | + | let ax = an(y, R, ap, aq, J, K, al) | |
242 | + | av(N, aw, J, K, ax, ay, az) | |
244 | 243 | } | |
245 | 244 | else { | |
246 | - | let | |
247 | - | if ( | |
245 | + | let al = af(N, ag) | |
246 | + | if (ak(R, al)) | |
248 | 247 | then { | |
249 | - | let | |
250 | - | | |
248 | + | let ax = an(y, R, ap, aq, J, K, al) | |
249 | + | av(N, aw, J, K, ax, ay, az) | |
251 | 250 | } | |
252 | 251 | else { | |
253 | - | let | |
254 | - | WriteSet([DataEntry( | |
252 | + | let ax = an(z, R, ap, aq, J, K, al) | |
253 | + | WriteSet([DataEntry(N, ax), az]) | |
255 | 254 | } | |
256 | 255 | } | |
257 | 256 | } | |
258 | 257 | ||
259 | 258 | ||
260 | - | @Verifier( | |
261 | - | func | |
259 | + | @Verifier(aJ) | |
260 | + | func aK () = if (sigVerify(aJ.bodyBytes, aJ.proofs[0], aJ.senderPublicKey)) | |
262 | 261 | then { | |
263 | - | let | |
264 | - | if ($isInstanceOf( | |
262 | + | let at = aJ | |
263 | + | if ($isInstanceOf(at, "TransferTransaction")) | |
265 | 264 | then { | |
266 | - | let | |
267 | - | let | |
268 | - | ((assetBalance(this, | |
265 | + | let aL = at | |
266 | + | let K = O(aL.assetId) | |
267 | + | ((assetBalance(this, aL.assetId) - aL.amount) >= A(v[K], 0)) | |
269 | 268 | } | |
270 | - | else if ($isInstanceOf( | |
269 | + | else if ($isInstanceOf(at, "SetScriptTransaction")) | |
271 | 270 | then { | |
272 | - | let | |
273 | - | if (( | |
274 | - | then ( | |
271 | + | let aM = at | |
272 | + | if ((A(v[0], 0) == 0)) | |
273 | + | then (A(v[1], 0) == 0) | |
275 | 274 | else false | |
276 | 275 | } | |
277 | 276 | else false | |
278 | 277 | } | |
279 | 278 | else false | |
280 | 279 |
github/deemru/w8io/3ef1775 92.17 ms ◑