tx · DuHXkGuL2sWWi9sp4MFRdcRfGhFuUMcXYELAo2qCm6S3

3NBCBtA1F4m6tBir7JX2dUtDNt4ujmHH5NA:  -0.02000000 Waves

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

{ "type": 13, "id": "DuHXkGuL2sWWi9sp4MFRdcRfGhFuUMcXYELAo2qCm6S3", "fee": 2000000, "feeAssetId": null, "timestamp": 1591330038620, "version": 1, "sender": "3NBCBtA1F4m6tBir7JX2dUtDNt4ujmHH5NA", "senderPublicKey": "Aj2RvtYHTSnDfcwYBCD5ZEwG3V483xJe2L1n13KPsi3a", "proofs": [ "31AdPa3EWtiK5EEatTQDCUrvFxBeeHWAz4qbdGrNKsN2NskzREWJ1ZF7oKxeijCPufuifEetW7s3y6CpNyKp5hYF" ], "script": "base64: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", "chainId": 84, "height": 1029445, "spentComplexity": 0 } View: original | compacted Prev: CwCgumSXBE7t81STNz3AkmUP9KkdnuX1Er5fZr4L6yzG Next: ZxzEwzbtKA58cJPyxgun6Bmka5zPafWvuSMHx6G9fLd Diff:
OldNewDifferences
6262 }
6363
6464
65+func decodeBool (data,offset) = {
66+ let decoded1 = decodeInt8(data, offset)
67+[DataEntry("bool", (decoded1[0] != 0)), DataEntry("int", decoded1[1])]
68+ }
69+
70+
71+func decodeBytes32 (data,offset) = if ((32 > size(data)))
72+ then throw("decode bytes32 error, data must be at least 32 bytes")
73+ else [DataEntry("byte_vector", take(drop(data, offset), 32)), DataEntry("int", (offset + 32))]
74+
75+
76+func decodeBytes64 (data,offset) = if ((64 > size(data)))
77+ then throw("decode bytes64 error, data must be at least 64 bytes")
78+ else [DataEntry("byte_vector", take(drop(data, offset), 64)), DataEntry("int", (offset + 64))]
79+
80+
81+func decodeBytes65 (data,offset) = if ((65 > size(data)))
82+ then throw("decode bytes65 error, data must be at least 65 bytes")
83+ else [DataEntry("byte_vector", take(drop(data, offset), 65)), DataEntry("int", (offset + 65))]
84+
85+
86+func decodeBytes (data,offset) = {
87+ let decoded1 = decodeInt32(data, offset)
88+ let bytesSize = decoded1[0]
89+ let nextOffset = decoded1[1]
90+[DataEntry("byte_vector", take(drop(data, nextOffset), bytesSize)), DataEntry("int", (nextOffset + bytesSize))]
91+ }
92+
93+
6594 func decodeString (data,offset) = {
6695 let decoded1 = decodeInt32(data, offset)
6796 let bytesSize = decoded1[0]
6897 let nextOffset = decoded1[1]
6998 [DataEntry("string", toUtf8String(take(drop(data, nextOffset), bytesSize))), DataEntry("int", (nextOffset + bytesSize))]
7099 }
100+
101+
102+func getAsBool (tuple) = match tuple[0].value {
103+ case b: Boolean =>
104+ b
105+ case _ =>
106+ throw("not a Boolean")
107+}
108+
109+
110+func getAsByteVector (tuple) = match tuple[0].value {
111+ case bv: ByteVector =>
112+ bv
113+ case _ =>
114+ throw("not a ByteVector")
115+}
71116
72117
73118 func getAsString (tuple) = match tuple[0].value {
87132
88133
89134 @Callable(contextObj)
90-func init (bridgeAddress) = if ((contextObj.caller != this))
91- then throw("permission denied")
92- else match getInteger(this, "latestRequestId") {
93- case latestRequestId: Int =>
94- throw("already init")
95- case _ =>
96- match getInteger(this, "latestWavesPrice") {
97- case latestWavesPrice: Int =>
98- throw("already init")
99- case _ =>
100- WriteSet([DataEntry("oracleScriptId", 1), DataEntry("symbol", "WAVES"), DataEntry("multiplier", 100), DataEntry("latestRequestId", 0), DataEntry("latestWavesPrice", 0)])
101- }
102- }
103-
104-
105-
106-@Callable(contextObj)
107-func setBridge (bridgeAddress) = if ((contextObj.caller != this))
108- then throw("permission denied")
109- else WriteSet([DataEntry("bridge", bridgeAddress)])
110-
111-
112-
113-@Callable(contextObj)
114-func setLatestWavesPrice (requestId) = {
115- let bridge = Address(getBinaryValue(this, "bridge"))
116- if ((getIntegerValue(bridge, (toString(requestId) + "/oracleScriptId")) != getIntegerValue(this, "oracleScriptId")))
117- then throw("incorrect oracleScriptId")
118- else {
119- let calldata = getBinaryValue(bridge, (toString(requestId) + "/calldata"))
120- let tuple1 = decodeString(calldata, 0)
121- let tuple2 = decodeInt64(calldata, getOffset(tuple1))
122- let symbol = getAsString(tuple1)
123- let multiplier = tuple2[0]
124- if ((symbol != getStringValue(this, "symbol")))
125- then throw("wrong symbol")
126- else if ((multiplier != getIntegerValue(this, "multiplier")))
127- then throw("wrong multiplier")
128- else if ((getIntegerValue(this, "latestRequestId") >= requestId))
129- then throw("requestId is not new")
130- else {
131- let result = getBinaryValue(bridge, (toString(requestId) + "/result"))
132- let price = decodeInt64(result, 0)[0]
133- WriteSet([DataEntry("latestWavesPrice", price), DataEntry("latestRequestId", requestId)])
134- }
135- }
135+func relayAndVerify (data) = {
136+ let req1 = decodeString(data, 0)
137+ let req2 = decodeInt64(data, getOffset(req1))
138+ let req3 = decodeBytes(data, req2[1])
139+ let req4 = decodeInt64(data, getOffset(req3))
140+ let req5 = decodeInt64(data, req4[1])
141+ let res1 = decodeString(data, req5[1])
142+ let res2 = decodeInt64(data, getOffset(res1))
143+ let res3 = decodeInt64(data, res2[1])
144+ let res4 = decodeInt64(data, res3[1])
145+ let res5 = decodeInt64(data, res4[1])
146+ let res6 = decodeInt8(data, res5[1])
147+ let res7 = decodeBytes(data, res6[1])
148+ let requestID = toString(res2[0])
149+ WriteSet([DataEntry((requestID + "/clientId"), req1[0].value), DataEntry((requestID + "/oracleScriptId"), req2[0]), DataEntry((requestID + "/calldata"), req3[0].value), DataEntry((requestID + "/askCount"), req4[0]), DataEntry((requestID + "/minCount"), req5[0]), DataEntry((requestID + "/ansCount"), res3[0]), DataEntry((requestID + "/requestTime"), res4[0]), DataEntry((requestID + "/resolveTime"), res5[0]), DataEntry((requestID + "/resolveStatus"), res6[0]), DataEntry((requestID + "/result"), res7[0].value)])
136150 }
137151
138152
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func decodeInt8 (data,offset) = if ((1 > size(data)))
55 then throw("decode u8 error, data must be at least 1 byte")
66 else if ((offset > size(data)))
77 then throw("decode u8 error, decoding is finish")
88 else {
99 let x0 = take(drop(data, offset), 1)
1010 let x1 = toInt((base58'1111111' + x0), 0)
1111 if ((128 > x1))
1212 then [x1, (offset + 1)]
1313 else [toInt((base58'Ahg1opVcGW' + x0), 0), (offset + 1)]
1414 }
1515
1616
1717 func decodeInt16 (data,offset) = if ((2 > size(data)))
1818 then throw("decode u16 error, data must be at least 2 bytes")
1919 else if ((offset > size(data)))
2020 then throw("decode u16 error, decoding is finish")
2121 else {
2222 let x0 = drop(data, offset)
2323 let x1 = take(x0, 1)
2424 let x2 = take(drop(x0, 1), 1)
2525 if ((decodeInt8(x2, 0)[0] >= 0))
2626 then [toInt(((base58'111111' + x2) + x1), 0), (offset + 2)]
2727 else [toInt(((base58'3CUsUpv9t' + x2) + x1), 0), (offset + 2)]
2828 }
2929
3030
3131 func decodeInt32 (data,offset) = if ((4 > size(data)))
3232 then throw("decode u32 error, data must be at least 4 bytes")
3333 else if ((offset > size(data)))
3434 then throw("decode u32 error, decoding is finish")
3535 else {
3636 let x0 = drop(data, offset)
3737 let x1 = take(x0, 1)
3838 let x2 = take(drop(x0, 1), 1)
3939 let x3 = take(drop(x0, 2), 1)
4040 let x4 = take(drop(x0, 3), 1)
4141 if ((decodeInt8(x4, 0)[0] >= 0))
4242 then [toInt(((((base58'1111' + x4) + x3) + x2) + x1), 0), (offset + 4)]
4343 else [toInt(((((base58'7YXq9G' + x4) + x3) + x2) + x1), 0), (offset + 4)]
4444 }
4545
4646
4747 func decodeInt64 (data,offset) = if ((8 > size(data)))
4848 then throw("decode u32 error, data must be at least 8 bytes")
4949 else if ((offset > size(data)))
5050 then throw("decode u32 error, decoding is finish")
5151 else {
5252 let x0 = drop(data, offset)
5353 let x1 = take(x0, 1)
5454 let x2 = take(drop(x0, 1), 1)
5555 let x3 = take(drop(x0, 2), 1)
5656 let x4 = take(drop(x0, 3), 1)
5757 let x5 = take(drop(x0, 4), 1)
5858 let x6 = take(drop(x0, 5), 1)
5959 let x7 = take(drop(x0, 6), 1)
6060 let x8 = take(drop(x0, 7), 1)
6161 [toInt((((((((x8 + x7) + x6) + x5) + x4) + x3) + x2) + x1), 0), (offset + 8)]
6262 }
6363
6464
65+func decodeBool (data,offset) = {
66+ let decoded1 = decodeInt8(data, offset)
67+[DataEntry("bool", (decoded1[0] != 0)), DataEntry("int", decoded1[1])]
68+ }
69+
70+
71+func decodeBytes32 (data,offset) = if ((32 > size(data)))
72+ then throw("decode bytes32 error, data must be at least 32 bytes")
73+ else [DataEntry("byte_vector", take(drop(data, offset), 32)), DataEntry("int", (offset + 32))]
74+
75+
76+func decodeBytes64 (data,offset) = if ((64 > size(data)))
77+ then throw("decode bytes64 error, data must be at least 64 bytes")
78+ else [DataEntry("byte_vector", take(drop(data, offset), 64)), DataEntry("int", (offset + 64))]
79+
80+
81+func decodeBytes65 (data,offset) = if ((65 > size(data)))
82+ then throw("decode bytes65 error, data must be at least 65 bytes")
83+ else [DataEntry("byte_vector", take(drop(data, offset), 65)), DataEntry("int", (offset + 65))]
84+
85+
86+func decodeBytes (data,offset) = {
87+ let decoded1 = decodeInt32(data, offset)
88+ let bytesSize = decoded1[0]
89+ let nextOffset = decoded1[1]
90+[DataEntry("byte_vector", take(drop(data, nextOffset), bytesSize)), DataEntry("int", (nextOffset + bytesSize))]
91+ }
92+
93+
6594 func decodeString (data,offset) = {
6695 let decoded1 = decodeInt32(data, offset)
6796 let bytesSize = decoded1[0]
6897 let nextOffset = decoded1[1]
6998 [DataEntry("string", toUtf8String(take(drop(data, nextOffset), bytesSize))), DataEntry("int", (nextOffset + bytesSize))]
7099 }
100+
101+
102+func getAsBool (tuple) = match tuple[0].value {
103+ case b: Boolean =>
104+ b
105+ case _ =>
106+ throw("not a Boolean")
107+}
108+
109+
110+func getAsByteVector (tuple) = match tuple[0].value {
111+ case bv: ByteVector =>
112+ bv
113+ case _ =>
114+ throw("not a ByteVector")
115+}
71116
72117
73118 func getAsString (tuple) = match tuple[0].value {
74119 case s: String =>
75120 s
76121 case _ =>
77122 throw("not a String")
78123 }
79124
80125
81126 func getOffset (tuple) = match tuple[1].value {
82127 case i: Int =>
83128 i
84129 case _ =>
85130 throw("not a Int")
86131 }
87132
88133
89134 @Callable(contextObj)
90-func init (bridgeAddress) = if ((contextObj.caller != this))
91- then throw("permission denied")
92- else match getInteger(this, "latestRequestId") {
93- case latestRequestId: Int =>
94- throw("already init")
95- case _ =>
96- match getInteger(this, "latestWavesPrice") {
97- case latestWavesPrice: Int =>
98- throw("already init")
99- case _ =>
100- WriteSet([DataEntry("oracleScriptId", 1), DataEntry("symbol", "WAVES"), DataEntry("multiplier", 100), DataEntry("latestRequestId", 0), DataEntry("latestWavesPrice", 0)])
101- }
102- }
103-
104-
105-
106-@Callable(contextObj)
107-func setBridge (bridgeAddress) = if ((contextObj.caller != this))
108- then throw("permission denied")
109- else WriteSet([DataEntry("bridge", bridgeAddress)])
110-
111-
112-
113-@Callable(contextObj)
114-func setLatestWavesPrice (requestId) = {
115- let bridge = Address(getBinaryValue(this, "bridge"))
116- if ((getIntegerValue(bridge, (toString(requestId) + "/oracleScriptId")) != getIntegerValue(this, "oracleScriptId")))
117- then throw("incorrect oracleScriptId")
118- else {
119- let calldata = getBinaryValue(bridge, (toString(requestId) + "/calldata"))
120- let tuple1 = decodeString(calldata, 0)
121- let tuple2 = decodeInt64(calldata, getOffset(tuple1))
122- let symbol = getAsString(tuple1)
123- let multiplier = tuple2[0]
124- if ((symbol != getStringValue(this, "symbol")))
125- then throw("wrong symbol")
126- else if ((multiplier != getIntegerValue(this, "multiplier")))
127- then throw("wrong multiplier")
128- else if ((getIntegerValue(this, "latestRequestId") >= requestId))
129- then throw("requestId is not new")
130- else {
131- let result = getBinaryValue(bridge, (toString(requestId) + "/result"))
132- let price = decodeInt64(result, 0)[0]
133- WriteSet([DataEntry("latestWavesPrice", price), DataEntry("latestRequestId", requestId)])
134- }
135- }
135+func relayAndVerify (data) = {
136+ let req1 = decodeString(data, 0)
137+ let req2 = decodeInt64(data, getOffset(req1))
138+ let req3 = decodeBytes(data, req2[1])
139+ let req4 = decodeInt64(data, getOffset(req3))
140+ let req5 = decodeInt64(data, req4[1])
141+ let res1 = decodeString(data, req5[1])
142+ let res2 = decodeInt64(data, getOffset(res1))
143+ let res3 = decodeInt64(data, res2[1])
144+ let res4 = decodeInt64(data, res3[1])
145+ let res5 = decodeInt64(data, res4[1])
146+ let res6 = decodeInt8(data, res5[1])
147+ let res7 = decodeBytes(data, res6[1])
148+ let requestID = toString(res2[0])
149+ WriteSet([DataEntry((requestID + "/clientId"), req1[0].value), DataEntry((requestID + "/oracleScriptId"), req2[0]), DataEntry((requestID + "/calldata"), req3[0].value), DataEntry((requestID + "/askCount"), req4[0]), DataEntry((requestID + "/minCount"), req5[0]), DataEntry((requestID + "/ansCount"), res3[0]), DataEntry((requestID + "/requestTime"), res4[0]), DataEntry((requestID + "/resolveTime"), res5[0]), DataEntry((requestID + "/resolveStatus"), res6[0]), DataEntry((requestID + "/result"), res7[0].value)])
136150 }
137151
138152

github/deemru/w8io/3ef1775 
53.64 ms