tx · ZxzEwzbtKA58cJPyxgun6Bmka5zPafWvuSMHx6G9fLd

3NBCBtA1F4m6tBir7JX2dUtDNt4ujmHH5NA:  -0.02000000 Waves

2020.06.05 07:10 [1029448] smart account 3NBCBtA1F4m6tBir7JX2dUtDNt4ujmHH5NA > SELF 0.00000000 Waves

{ "type": 13, "id": "ZxzEwzbtKA58cJPyxgun6Bmka5zPafWvuSMHx6G9fLd", "fee": 2000000, "feeAssetId": null, "timestamp": 1591330217443, "version": 1, "sender": "3NBCBtA1F4m6tBir7JX2dUtDNt4ujmHH5NA", "senderPublicKey": "Aj2RvtYHTSnDfcwYBCD5ZEwG3V483xJe2L1n13KPsi3a", "proofs": [ "2bbearM2g4rW6tK7cspWkxuabExbNJD8D1epiBzTnYiFsWkWg5jCd1vjDojUiya3umafG1MqeeJ8G3YMFEUK8ohg" ], "script": "base64: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", "chainId": 84, "height": 1029448, "spentComplexity": 0 } View: original | compacted Prev: DuHXkGuL2sWWi9sp4MFRdcRfGhFuUMcXYELAo2qCm6S3 Next: 4yzfD4RdLap4KYBtrPptUSzhAA2VqorJXnTqvPr4FQoY Diff:
OldNewDifferences
6363
6464
6565 func p (b,c) = {
66- let q = a(b, c)
67-[DataEntry("bool", (q[0] != 0)), DataEntry("int", q[1])]
66+ let q = h(b, c)
67+ let r = q[0]
68+ let s = q[1]
69+[DataEntry("string", toUtf8String(take(drop(b, s), r))), DataEntry("int", (s + r))]
6870 }
6971
7072
71-func r (b,c) = if ((32 > size(b)))
72- then throw("decode bytes32 error, data must be at least 32 bytes")
73- else [DataEntry("byte_vector", take(drop(b, c), 32)), DataEntry("int", (c + 32))]
74-
75-
76-func s (b,c) = if ((64 > size(b)))
77- then throw("decode bytes64 error, data must be at least 64 bytes")
78- else [DataEntry("byte_vector", take(drop(b, c), 64)), DataEntry("int", (c + 64))]
79-
80-
81-func t (b,c) = if ((65 > size(b)))
82- then throw("decode bytes65 error, data must be at least 65 bytes")
83- else [DataEntry("byte_vector", take(drop(b, c), 65)), DataEntry("int", (c + 65))]
84-
85-
86-func u (b,c) = {
87- let q = h(b, c)
88- let v = q[0]
89- let w = q[1]
90-[DataEntry("byte_vector", take(drop(b, w), v)), DataEntry("int", (w + v))]
91- }
92-
93-
94-func x (b,c) = {
95- let q = h(b, c)
96- let v = q[0]
97- let w = q[1]
98-[DataEntry("string", toUtf8String(take(drop(b, w), v))), DataEntry("int", (w + v))]
99- }
100-
101-
102-func y (z) = {
103- let A = z[0].value
104- if ($isInstanceOf(A, "Boolean"))
73+func t (u) = {
74+ let v = u[0].value
75+ if ($isInstanceOf(v, "String"))
10576 then {
106- let B = A
107- B
108- }
109- else throw("not a Boolean")
110- }
111-
112-
113-func C (z) = {
114- let A = z[0].value
115- if ($isInstanceOf(A, "ByteVector"))
116- then {
117- let D = A
118- D
119- }
120- else throw("not a ByteVector")
121- }
122-
123-
124-func E (z) = {
125- let A = z[0].value
126- if ($isInstanceOf(A, "String"))
127- then {
128- let F = A
129- F
77+ let w = v
78+ w
13079 }
13180 else throw("not a String")
13281 }
13382
13483
135-func G (z) = {
136- let A = z[1].value
137- if ($isInstanceOf(A, "Int"))
84+func x (u) = {
85+ let v = u[1].value
86+ if ($isInstanceOf(v, "Int"))
13887 then {
139- let H = A
140- H
88+ let y = v
89+ y
14190 }
14291 else throw("not a Int")
14392 }
14493
14594
146-@Callable(I)
147-func relayAndVerify (b) = {
148- let J = x(b, 0)
149- let K = k(b, G(J))
150- let L = u(b, K[1])
151- let M = k(b, G(L))
152- let N = k(b, M[1])
153- let O = x(b, N[1])
154- let P = k(b, G(O))
155- let Q = k(b, P[1])
156- let R = k(b, Q[1])
157- let S = k(b, R[1])
158- let T = a(b, S[1])
159- let U = u(b, T[1])
160- let V = toString(P[0])
161- WriteSet([DataEntry((V + "/clientId"), J[0].value), DataEntry((V + "/oracleScriptId"), K[0]), DataEntry((V + "/calldata"), L[0].value), DataEntry((V + "/askCount"), M[0]), DataEntry((V + "/minCount"), N[0]), DataEntry((V + "/ansCount"), Q[0]), DataEntry((V + "/requestTime"), R[0]), DataEntry((V + "/resolveTime"), S[0]), DataEntry((V + "/resolveStatus"), T[0]), DataEntry((V + "/result"), U[0].value)])
95+@Callable(z)
96+func init (A) = if ((z.caller != this))
97+ then throw("permission denied")
98+ else {
99+ let v = getInteger(this, "latestRequestId")
100+ if ($isInstanceOf(v, "Int"))
101+ then {
102+ let B = v
103+ throw("already init")
104+ }
105+ else {
106+ let C = getInteger(this, "latestWavesPrice")
107+ if ($isInstanceOf(C, "Int"))
108+ then {
109+ let D = C
110+ throw("already init")
111+ }
112+ else WriteSet([DataEntry("oracleScriptId", 1), DataEntry("symbol", "WAVES"), DataEntry("multiplier", 100), DataEntry("latestRequestId", 0), DataEntry("latestWavesPrice", 0)])
113+ }
114+ }
115+
116+
117+
118+@Callable(z)
119+func setBridge (A) = if ((z.caller != this))
120+ then throw("permission denied")
121+ else WriteSet([DataEntry("bridge", A)])
122+
123+
124+
125+@Callable(z)
126+func setLatestWavesPrice (E) = {
127+ let F = Address(getBinaryValue(this, "bridge"))
128+ if ((getIntegerValue(F, (toString(E) + "/oracleScriptId")) != getIntegerValue(this, "oracleScriptId")))
129+ then throw("incorrect oracleScriptId")
130+ else {
131+ let G = getBinaryValue(F, (toString(E) + "/calldata"))
132+ let H = p(G, 0)
133+ let I = k(G, x(H))
134+ let J = t(H)
135+ let K = I[0]
136+ if ((J != getStringValue(this, "symbol")))
137+ then throw("wrong symbol")
138+ else if ((K != getIntegerValue(this, "multiplier")))
139+ then throw("wrong multiplier")
140+ else if ((getIntegerValue(this, "latestRequestId") >= E))
141+ then throw("requestId is not new")
142+ else {
143+ let L = getBinaryValue(F, (toString(E) + "/result"))
144+ let M = k(L, 0)[0]
145+ WriteSet([DataEntry("latestWavesPrice", M), DataEntry("latestRequestId", E)])
146+ }
147+ }
162148 }
163149
164150
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = if ((1 > size(b)))
55 then throw("decode u8 error, data must be at least 1 byte")
66 else if ((c > size(b)))
77 then throw("decode u8 error, decoding is finish")
88 else {
99 let d = take(drop(b, c), 1)
1010 let e = toInt((base58'1111111' + d), 0)
1111 if ((128 > e))
1212 then [e, (c + 1)]
1313 else [toInt((base58'Ahg1opVcGW' + d), 0), (c + 1)]
1414 }
1515
1616
1717 func f (b,c) = if ((2 > size(b)))
1818 then throw("decode u16 error, data must be at least 2 bytes")
1919 else if ((c > size(b)))
2020 then throw("decode u16 error, decoding is finish")
2121 else {
2222 let d = drop(b, c)
2323 let e = take(d, 1)
2424 let g = take(drop(d, 1), 1)
2525 if ((a(g, 0)[0] >= 0))
2626 then [toInt(((base58'111111' + g) + e), 0), (c + 2)]
2727 else [toInt(((base58'3CUsUpv9t' + g) + e), 0), (c + 2)]
2828 }
2929
3030
3131 func h (b,c) = if ((4 > size(b)))
3232 then throw("decode u32 error, data must be at least 4 bytes")
3333 else if ((c > size(b)))
3434 then throw("decode u32 error, decoding is finish")
3535 else {
3636 let d = drop(b, c)
3737 let e = take(d, 1)
3838 let g = take(drop(d, 1), 1)
3939 let i = take(drop(d, 2), 1)
4040 let j = take(drop(d, 3), 1)
4141 if ((a(j, 0)[0] >= 0))
4242 then [toInt(((((base58'1111' + j) + i) + g) + e), 0), (c + 4)]
4343 else [toInt(((((base58'7YXq9G' + j) + i) + g) + e), 0), (c + 4)]
4444 }
4545
4646
4747 func k (b,c) = if ((8 > size(b)))
4848 then throw("decode u32 error, data must be at least 8 bytes")
4949 else if ((c > size(b)))
5050 then throw("decode u32 error, decoding is finish")
5151 else {
5252 let d = drop(b, c)
5353 let e = take(d, 1)
5454 let g = take(drop(d, 1), 1)
5555 let i = take(drop(d, 2), 1)
5656 let j = take(drop(d, 3), 1)
5757 let l = take(drop(d, 4), 1)
5858 let m = take(drop(d, 5), 1)
5959 let n = take(drop(d, 6), 1)
6060 let o = take(drop(d, 7), 1)
6161 [toInt((((((((o + n) + m) + l) + j) + i) + g) + e), 0), (c + 8)]
6262 }
6363
6464
6565 func p (b,c) = {
66- let q = a(b, c)
67-[DataEntry("bool", (q[0] != 0)), DataEntry("int", q[1])]
66+ let q = h(b, c)
67+ let r = q[0]
68+ let s = q[1]
69+[DataEntry("string", toUtf8String(take(drop(b, s), r))), DataEntry("int", (s + r))]
6870 }
6971
7072
71-func r (b,c) = if ((32 > size(b)))
72- then throw("decode bytes32 error, data must be at least 32 bytes")
73- else [DataEntry("byte_vector", take(drop(b, c), 32)), DataEntry("int", (c + 32))]
74-
75-
76-func s (b,c) = if ((64 > size(b)))
77- then throw("decode bytes64 error, data must be at least 64 bytes")
78- else [DataEntry("byte_vector", take(drop(b, c), 64)), DataEntry("int", (c + 64))]
79-
80-
81-func t (b,c) = if ((65 > size(b)))
82- then throw("decode bytes65 error, data must be at least 65 bytes")
83- else [DataEntry("byte_vector", take(drop(b, c), 65)), DataEntry("int", (c + 65))]
84-
85-
86-func u (b,c) = {
87- let q = h(b, c)
88- let v = q[0]
89- let w = q[1]
90-[DataEntry("byte_vector", take(drop(b, w), v)), DataEntry("int", (w + v))]
91- }
92-
93-
94-func x (b,c) = {
95- let q = h(b, c)
96- let v = q[0]
97- let w = q[1]
98-[DataEntry("string", toUtf8String(take(drop(b, w), v))), DataEntry("int", (w + v))]
99- }
100-
101-
102-func y (z) = {
103- let A = z[0].value
104- if ($isInstanceOf(A, "Boolean"))
73+func t (u) = {
74+ let v = u[0].value
75+ if ($isInstanceOf(v, "String"))
10576 then {
106- let B = A
107- B
108- }
109- else throw("not a Boolean")
110- }
111-
112-
113-func C (z) = {
114- let A = z[0].value
115- if ($isInstanceOf(A, "ByteVector"))
116- then {
117- let D = A
118- D
119- }
120- else throw("not a ByteVector")
121- }
122-
123-
124-func E (z) = {
125- let A = z[0].value
126- if ($isInstanceOf(A, "String"))
127- then {
128- let F = A
129- F
77+ let w = v
78+ w
13079 }
13180 else throw("not a String")
13281 }
13382
13483
135-func G (z) = {
136- let A = z[1].value
137- if ($isInstanceOf(A, "Int"))
84+func x (u) = {
85+ let v = u[1].value
86+ if ($isInstanceOf(v, "Int"))
13887 then {
139- let H = A
140- H
88+ let y = v
89+ y
14190 }
14291 else throw("not a Int")
14392 }
14493
14594
146-@Callable(I)
147-func relayAndVerify (b) = {
148- let J = x(b, 0)
149- let K = k(b, G(J))
150- let L = u(b, K[1])
151- let M = k(b, G(L))
152- let N = k(b, M[1])
153- let O = x(b, N[1])
154- let P = k(b, G(O))
155- let Q = k(b, P[1])
156- let R = k(b, Q[1])
157- let S = k(b, R[1])
158- let T = a(b, S[1])
159- let U = u(b, T[1])
160- let V = toString(P[0])
161- WriteSet([DataEntry((V + "/clientId"), J[0].value), DataEntry((V + "/oracleScriptId"), K[0]), DataEntry((V + "/calldata"), L[0].value), DataEntry((V + "/askCount"), M[0]), DataEntry((V + "/minCount"), N[0]), DataEntry((V + "/ansCount"), Q[0]), DataEntry((V + "/requestTime"), R[0]), DataEntry((V + "/resolveTime"), S[0]), DataEntry((V + "/resolveStatus"), T[0]), DataEntry((V + "/result"), U[0].value)])
95+@Callable(z)
96+func init (A) = if ((z.caller != this))
97+ then throw("permission denied")
98+ else {
99+ let v = getInteger(this, "latestRequestId")
100+ if ($isInstanceOf(v, "Int"))
101+ then {
102+ let B = v
103+ throw("already init")
104+ }
105+ else {
106+ let C = getInteger(this, "latestWavesPrice")
107+ if ($isInstanceOf(C, "Int"))
108+ then {
109+ let D = C
110+ throw("already init")
111+ }
112+ else WriteSet([DataEntry("oracleScriptId", 1), DataEntry("symbol", "WAVES"), DataEntry("multiplier", 100), DataEntry("latestRequestId", 0), DataEntry("latestWavesPrice", 0)])
113+ }
114+ }
115+
116+
117+
118+@Callable(z)
119+func setBridge (A) = if ((z.caller != this))
120+ then throw("permission denied")
121+ else WriteSet([DataEntry("bridge", A)])
122+
123+
124+
125+@Callable(z)
126+func setLatestWavesPrice (E) = {
127+ let F = Address(getBinaryValue(this, "bridge"))
128+ if ((getIntegerValue(F, (toString(E) + "/oracleScriptId")) != getIntegerValue(this, "oracleScriptId")))
129+ then throw("incorrect oracleScriptId")
130+ else {
131+ let G = getBinaryValue(F, (toString(E) + "/calldata"))
132+ let H = p(G, 0)
133+ let I = k(G, x(H))
134+ let J = t(H)
135+ let K = I[0]
136+ if ((J != getStringValue(this, "symbol")))
137+ then throw("wrong symbol")
138+ else if ((K != getIntegerValue(this, "multiplier")))
139+ then throw("wrong multiplier")
140+ else if ((getIntegerValue(this, "latestRequestId") >= E))
141+ then throw("requestId is not new")
142+ else {
143+ let L = getBinaryValue(F, (toString(E) + "/result"))
144+ let M = k(L, 0)[0]
145+ WriteSet([DataEntry("latestWavesPrice", M), DataEntry("latestRequestId", E)])
146+ }
147+ }
162148 }
163149
164150

github/deemru/w8io/873ac7e 
129.09 ms