29 | | - | [StringEntry(toString(start), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 1)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 2)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 3)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 4)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 5)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 6)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 7)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 8)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 9)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 10)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 11)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 12)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 13)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 14)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 15)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 16)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 17)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 18)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 19)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 500) + 1)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 2) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 3) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 4) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 5) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 6) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 7) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 8) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 9) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 10) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 11) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 12) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 13) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 14) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 15) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 16) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 17) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 18) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 19) + 500)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString((start + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 501) + 1)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 2) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 3) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 4) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 5) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 6) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 7) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 8) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 9) + 501)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 10) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 11) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 12) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 13) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 14) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 15) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 16) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 17) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url)), StringEntry(toString(((start + 18) + 502)), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url))] |
---|
| 29 | + | [IntegerEntry("start", 0), StringEntry(toString(start), ((((((("3N8kFTziSpz7SodoRxK2X91LYVsAxiP1iCU|" + initprice) + "|") + currenttime) + "|") + color) + "|") + url))] |
---|
30 | 30 | | } |
---|
31 | 31 | | |
---|
32 | 32 | | |
---|
33 | 33 | | |
---|
34 | 34 | | @Callable(i) |
---|
35 | 35 | | func paint (idata) = { |
---|
36 | 36 | | let ct = match blockInfoByHeight(height) { |
---|
37 | 37 | | case block: BlockInfo => |
---|
38 | 38 | | block.timestamp |
---|
39 | 39 | | case _ => |
---|
40 | 40 | | 0 |
---|
41 | 41 | | } |
---|
42 | 42 | | let currenttime = parseIntValue(toString(ct)) |
---|
43 | 43 | | let callerAdress = toBase58String(i.caller.bytes) |
---|
44 | 44 | | let reqdata = split(idata, separr) |
---|
45 | 45 | | let color = if ((size(reqdata) > 1)) |
---|
46 | 46 | | then reqdata[1] |
---|
47 | 47 | | else "0" |
---|
48 | 48 | | let url = if ((size(reqdata) > 2)) |
---|
49 | 49 | | then reqdata[2] |
---|
50 | 50 | | else "" |
---|
51 | 51 | | let urlcorrect = if ((indexOf(url, separc) == unit)) |
---|
52 | 52 | | then true |
---|
53 | 53 | | else false |
---|
54 | 54 | | let pixxy = if ((size(reqdata) > 0)) |
---|
55 | 55 | | then split(reqdata[0], separc) |
---|
56 | 56 | | else nil |
---|
57 | 57 | | let number = min([28, size(pixxy)]) |
---|
58 | 58 | | let emptycommand = ["--", "--", masteradr, "0", "0"] |
---|
59 | 59 | | let newrecord = [callerAdress, initprice, toString(currenttime), color, url] |
---|
60 | 60 | | func validxy (j) = match parseInt(pixxy[j]) { |
---|
61 | 61 | | case a: Int => |
---|
62 | 62 | | if (if ((parseIntValue(pixxy[j]) > -1)) |
---|
63 | 63 | | then (1000000 > parseIntValue(pixxy[j])) |
---|
64 | 64 | | else false) |
---|
65 | 65 | | then parseIntValue(pixxy[j]) |
---|
66 | 66 | | else -1 |
---|
67 | 67 | | case _ => |
---|
68 | 68 | | -1 |
---|
69 | 69 | | } |
---|
70 | 70 | | |
---|
71 | 71 | | func getrecord (j) = match getString(pixxy[j]) { |
---|
72 | 72 | | case a: String => |
---|
73 | 73 | | getStringValue(pixxy[j]) |
---|
74 | 74 | | case _ => |
---|
75 | 75 | | "" |
---|
76 | 76 | | } |
---|
77 | 77 | | |
---|
78 | 78 | | func command (j) = if (if ((j > (number - 1))) |
---|
79 | 79 | | then true |
---|
80 | 80 | | else (0 > validxy(j))) |
---|
81 | 81 | | then emptycommand |
---|
82 | 82 | | else if ((getrecord(j) == "")) |
---|
83 | 83 | | then [pixxy[j], makeString(newrecord, separc), masteradr, initprice, initprice] |
---|
84 | 84 | | else { |
---|
85 | 85 | | let oldrecord = split(getStringValue(pixxy[j]), separc) |
---|
86 | 86 | | let price = parseIntValue(oldrecord[1]) |
---|
87 | 87 | | let stakeinterest = fraction(price, ((currenttime - parseIntValue(oldrecord[2])) * stakerate), 360000000) |
---|
88 | 88 | | let oldowner = oldrecord[0] |
---|
89 | 89 | | [pixxy[j], makeString([callerAdress, toString(fraction(price, (100 + incrprice), 100)), toString(currenttime), color, url], separc), oldowner, toString(price), toString((stakeinterest + price))] |
---|
90 | 90 | | } |
---|
91 | 91 | | |
---|
92 | 92 | | let all = [command(0), command(1), command(2), command(3), command(4), command(5), command(6), command(7), command(8), command(9), command(10), command(11), command(12), command(13), command(14), command(15), command(16), command(17), command(18), command(19), command(20), command(21), command(22), command(23), command(24), command(25), command(26), command(27)] |
---|
93 | 93 | | let payment = (((((((((((((((((((((((((((parseIntValue(all[0][3]) + parseIntValue(all[1][3])) + parseIntValue(all[2][3])) + parseIntValue(all[3][3])) + parseIntValue(all[4][3])) + parseIntValue(all[5][3])) + parseIntValue(all[6][3])) + parseIntValue(all[7][3])) + parseIntValue(all[8][3])) + parseIntValue(all[9][3])) + parseIntValue(all[10][3])) + parseIntValue(all[11][3])) + parseIntValue(all[12][3])) + parseIntValue(all[13][3])) + parseIntValue(all[14][3])) + parseIntValue(all[15][3])) + parseIntValue(all[16][3])) + parseIntValue(all[17][3])) + parseIntValue(all[18][3])) + parseIntValue(all[19][3])) + parseIntValue(all[20][3])) + parseIntValue(all[21][3])) + parseIntValue(all[22][3])) + parseIntValue(all[23][3])) + parseIntValue(all[24][3])) + parseIntValue(all[25][3])) + parseIntValue(all[26][3])) + parseIntValue(all[27][3])) |
---|
94 | 94 | | let servicefee = fraction(payment, masterfee, 100) |
---|
95 | 95 | | let havepmt = if ((size(i.payments) == 1)) |
---|
96 | 96 | | then true |
---|
97 | 97 | | else false |
---|
98 | 98 | | let pmtamount = if (havepmt) |
---|
99 | 99 | | then i.payments[0].amount |
---|
100 | 100 | | else 0 |
---|
101 | 101 | | let tokencorrect = if (havepmt) |
---|
102 | 102 | | then if ((i.payments[0].assetId == token)) |
---|
103 | 103 | | then true |
---|
104 | 104 | | else false |
---|
105 | 105 | | else false |
---|
106 | 106 | | let pmtenough = if (if (tokencorrect) |
---|
107 | 107 | | then (pmtamount >= (payment + servicefee)) |
---|
108 | 108 | | else false) |
---|
109 | 109 | | then true |
---|
110 | 110 | | else false |
---|
111 | 111 | | let errorpmt = if (!(havepmt)) |
---|
112 | 112 | | then (("Attached payment is required: " + toString((payment + servicefee))) + "; ") |
---|
113 | 113 | | else "" |
---|
114 | 114 | | let errortoken = if (!(tokencorrect)) |
---|
115 | 115 | | then "works with tokens only; " |
---|
116 | 116 | | else "" |
---|
117 | 117 | | let errorenough = if (!(pmtenough)) |
---|
118 | 118 | | then (((("you give: " + toString(pmtamount)) + ", but deal needs: ") + toString((payment + servicefee))) + "; ") |
---|
119 | 119 | | else "" |
---|
120 | 120 | | let errorurl = if (!(urlcorrect)) |
---|
121 | 121 | | then "url is incorrect; " |
---|
122 | 122 | | else "" |
---|
123 | 123 | | if (if (pmtenough) |
---|
124 | 124 | | then urlcorrect |
---|
125 | 125 | | else false) |
---|
126 | 126 | | then [StringEntry(all[0][0], all[0][1]), ScriptTransfer(Address(fromBase58String(all[0][2])), parseIntValue(all[0][4]), token), StringEntry(all[1][0], all[1][1]), ScriptTransfer(Address(fromBase58String(all[1][2])), parseIntValue(all[1][4]), token), StringEntry(all[2][0], all[2][1]), ScriptTransfer(Address(fromBase58String(all[2][2])), parseIntValue(all[2][4]), token), StringEntry(all[3][0], all[3][1]), ScriptTransfer(Address(fromBase58String(all[3][2])), parseIntValue(all[3][4]), token), StringEntry(all[4][0], all[4][1]), ScriptTransfer(Address(fromBase58String(all[4][2])), parseIntValue(all[4][4]), token), StringEntry(all[5][0], all[5][1]), ScriptTransfer(Address(fromBase58String(all[5][2])), parseIntValue(all[5][4]), token), StringEntry(all[6][0], all[6][1]), ScriptTransfer(Address(fromBase58String(all[6][2])), parseIntValue(all[6][4]), token), StringEntry(all[7][0], all[7][1]), ScriptTransfer(Address(fromBase58String(all[7][2])), parseIntValue(all[7][4]), token), StringEntry(all[8][0], all[8][1]), ScriptTransfer(Address(fromBase58String(all[8][2])), parseIntValue(all[8][4]), token), StringEntry(all[9][0], all[9][1]), ScriptTransfer(Address(fromBase58String(all[9][2])), parseIntValue(all[9][4]), token), StringEntry(all[10][0], all[10][1]), ScriptTransfer(Address(fromBase58String(all[10][2])), parseIntValue(all[10][4]), token), StringEntry(all[11][0], all[11][1]), ScriptTransfer(Address(fromBase58String(all[11][2])), parseIntValue(all[11][4]), token), StringEntry(all[12][0], all[12][1]), ScriptTransfer(Address(fromBase58String(all[12][2])), parseIntValue(all[12][4]), token), StringEntry(all[13][0], all[13][1]), ScriptTransfer(Address(fromBase58String(all[13][2])), parseIntValue(all[13][4]), token), StringEntry(all[14][0], all[14][1]), ScriptTransfer(Address(fromBase58String(all[14][2])), parseIntValue(all[14][4]), token), StringEntry(all[15][0], all[15][1]), ScriptTransfer(Address(fromBase58String(all[15][2])), parseIntValue(all[15][4]), token), StringEntry(all[16][0], all[16][1]), ScriptTransfer(Address(fromBase58String(all[16][2])), parseIntValue(all[16][4]), token), StringEntry(all[17][0], all[17][1]), ScriptTransfer(Address(fromBase58String(all[17][2])), parseIntValue(all[17][4]), token), StringEntry(all[18][0], all[18][1]), ScriptTransfer(Address(fromBase58String(all[18][2])), parseIntValue(all[18][4]), token), StringEntry(all[19][0], all[19][1]), ScriptTransfer(Address(fromBase58String(all[19][2])), parseIntValue(all[19][4]), token), StringEntry(all[20][0], all[20][1]), ScriptTransfer(Address(fromBase58String(all[20][2])), parseIntValue(all[20][4]), token), StringEntry(all[21][0], all[21][1]), ScriptTransfer(Address(fromBase58String(all[21][2])), parseIntValue(all[21][4]), token), StringEntry(all[22][0], all[22][1]), ScriptTransfer(Address(fromBase58String(all[22][2])), parseIntValue(all[22][4]), token), StringEntry(all[23][0], all[23][1]), ScriptTransfer(Address(fromBase58String(all[23][2])), parseIntValue(all[23][4]), token), StringEntry(all[24][0], all[24][1]), ScriptTransfer(Address(fromBase58String(all[24][2])), parseIntValue(all[24][4]), token), StringEntry(all[25][0], all[25][1]), ScriptTransfer(Address(fromBase58String(all[25][2])), parseIntValue(all[25][4]), token), StringEntry(all[26][0], all[26][1]), ScriptTransfer(Address(fromBase58String(all[26][2])), parseIntValue(all[26][4]), token), StringEntry(all[27][0], all[27][1]), ScriptTransfer(Address(fromBase58String(all[27][2])), parseIntValue(all[27][4]), token), ScriptTransfer(i.caller, ((pmtamount - payment) - servicefee), token), ScriptTransfer(Address(fromBase58String(masteradr)), servicefee, token), DeleteEntry((callerAdress + "_error"))] |
---|
127 | 127 | | else if (havepmt) |
---|
128 | 128 | | then [StringEntry((callerAdress + "_error"), ((((errorpmt + " ") + errortoken) + " ") + errorenough)), ScriptTransfer(i.caller, pmtamount, i.payments[0].assetId)] |
---|
129 | 129 | | else [StringEntry((callerAdress + "_error"), ((((((errorpmt + " ") + errortoken) + " ") + errorenough) + " ") + errorurl))] |
---|
130 | 130 | | } |
---|
131 | 131 | | |
---|
132 | 132 | | |
---|