tx · 22yiTvZyGgq9zRMQyDcQ5JpFejRfoNVZm9u1vZgZWZCh

3NC9boevS259eTsMAkFAxCPorzK4Z9bpWje:  -0.01400000 Waves

2023.01.16 03:57 [2406802] smart account 3NC9boevS259eTsMAkFAxCPorzK4Z9bpWje > SELF 0.00000000 Waves

{ "type": 13, "id": "22yiTvZyGgq9zRMQyDcQ5JpFejRfoNVZm9u1vZgZWZCh", "fee": 1400000, "feeAssetId": null, "timestamp": 1673830612847, "version": 2, "chainId": 84, "sender": "3NC9boevS259eTsMAkFAxCPorzK4Z9bpWje", "senderPublicKey": "515tSAyMUbAb8kKjcpGDpqALGfCgcwfWmWKKkcBKTcGB", "proofs": [ "2gFxbxamoVXLGNdpxezcFRzHrhgECP8HYaAEiq4x1mp8g83HRkE1wsbVYn1J6MKwBNUonQEV6z149hHNFFLNm1zE" ], "script": "base64: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AAAADWNhbGxlcmFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAADcG10AwkAAAAAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAAOE5vIHBheW1lbnQgYXR0YWNoZWQsIFBsZWFzZSBBdHRhY2ggVG9rZW5zIGluIHBheW1lbnRbMV0uBAAAABJnZXRPcHRpb25DYWxsUHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABUNhbGxfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAA1DYWxsX1NlcXVlbmNlBAAAABpnZXRPcHRpb25DYWxsX1NlcXVlbmNlZGF0YQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPQ2FsbF9TdGFydF9FbmRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfBQAAAA1DYWxsX1NlcXVlbmNlBAAAABRzcGxpdFN0YXJ0RW5kQ291bnRlcgkABLUAAAACBQAAABpnZXRPcHRpb25DYWxsX1NlcXVlbmNlZGF0YQIAAAABXwQAAAAPZ2V0U3RhcnRDb3VudGVyCQABkQAAAAIFAAAAFHNwbGl0U3RhcnRFbmRDb3VudGVyAAAAAAAAAAAABAAAAA1nZXRFbmRDb3VudGVyCQABkQAAAAIFAAAAFHNwbGl0U3RhcnRFbmRDb3VudGVyAAAAAAAAAAABBAAAABhnZXRidGNkYXRhQXRTdGFydENvdW50ZXIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAHMW1fYnRjXwUAAAAPZ2V0U3RhcnRDb3VudGVyBAAAABtzcGxpdGJ0Y3ByaWNlQXRTdGFydENvdW50ZXIJAAS1AAAAAgUAAAAYZ2V0YnRjZGF0YUF0U3RhcnRDb3VudGVyAgAAAAFfBAAAABlnZXRidGNwcmljZUF0U3RhcnRDb3VudGVyCQABkQAAAAIFAAAAG3NwbGl0YnRjcHJpY2VBdFN0YXJ0Q291bnRlcgAAAAAAAAAAAAQAAAAWZ2V0YnRjZGF0YUF0RW5kQ291bnRlcgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAAcxbV9idGNfBQAAAA1nZXRFbmRDb3VudGVyBAAAABlzcGxpdGJ0Y3ByaWNlQXRFbmRDb3VudGVyCQAEtQAAAAIFAAAAFmdldGJ0Y2RhdGFBdEVuZENvdW50ZXICAAAAAV8EAAAAF2dldGJ0Y3ByaWNlQXRFbmRDb3VudGVyCQABkQAAAAIFAAAAGXNwbGl0YnRjcHJpY2VBdEVuZENvdW50ZXIAAAAAAAAAAAAEAAAACXByaWNlZGlmZgkAAGUAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAAF2dldGJ0Y3ByaWNlQXRFbmRDb3VudGVyCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAAGWdldGJ0Y3ByaWNlQXRTdGFydENvdW50ZXIDCQAAZgAAAAIAAAAAAAAAAAAFAAAACXByaWNlZGlmZgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAERGlmZgUAAAAJcHJpY2VkaWZmCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAANY2FsbGVyYWRkcmVzcwIAAAABXwUAAAANQ2FsbF9TZXF1ZW5jZQIAAAABXwUAAAAPZ2V0U3RhcnRDb3VudGVyAgAAAAFfBQAAAA1nZXRFbmRDb3VudGVyAgAAAAFfBQAAABlnZXRidGNwcmljZUF0U3RhcnRDb3VudGVyAgAAAAFfBQAAABdnZXRidGNwcmljZUF0RW5kQ291bnRlcgIAAAAEbG9zZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAdtZXNzYWdlAgAAAAlZb3UgbG9zZSEJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAaZ2V0T3B0aW9uQ2FsbF9TZXF1ZW5jZWRhdGEJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAASZ2V0T3B0aW9uQ2FsbFByaWNlBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAABERpZmYFAAAACXByaWNlZGlmZgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADWNhbGxlcmFkZHJlc3MCAAAAAV8FAAAADUNhbGxfU2VxdWVuY2UCAAAAAV8FAAAAD2dldFN0YXJ0Q291bnRlcgIAAAABXwUAAAANZ2V0RW5kQ291bnRlcgIAAAABXwUAAAAZZ2V0YnRjcHJpY2VBdFN0YXJ0Q291bnRlcgIAAAABXwUAAAAXZ2V0YnRjcHJpY2VBdEVuZENvdW50ZXICAAAAA1dpbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAdtZXNzYWdlAgAAAAhZb3UgV2luIQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA9DYWxsX1N0YXJ0X0VuZF8FAAAADWNhbGxlcmFkZHJlc3MCAAAAAV8FAAAADUNhbGxfU2VxdWVuY2UJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAASZ2V0T3B0aW9uQ2FsbFByaWNlBQAAAANuaWwAAAABaQEAAAAIY2FsbGRhdGEAAAABAAAAB0NvdW50ZXIEAAAACmdldGJ0Y2RhdGEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAHMW1fYnRjXwkAAaQAAAABBQAAAAdDb3VudGVyBAAAAAZzd2FwTGkJAAS1AAAAAgUAAAAKZ2V0YnRjZGF0YQIAAAABXwQAAAAFcHJpY2UJAAGRAAAAAgUAAAAGc3dhcExpAAAAAAAAAAAABAAAAAR0aW1lCQABkQAAAAIFAAAABnN3YXBMaQAAAAAAAAAAAQQAAAALYmxvY2toZWlnaHQJAAGRAAAAAgUAAAAGc3dhcExpAAAAAAAAAAACBAAAAANkaXYJAAGRAAAAAgUAAAAGc3dhcExpAAAAAAAAAAADCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAABXByaWNlCQABkQAAAAIFAAAABnN3YXBMaQAAAAAAAAAAAAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAR0aW1lCQABkQAAAAIFAAAABnN3YXBMaQAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAtibG9ja2hlaWdodAkAAZEAAAACBQAAAAZzd2FwTGkAAAAAAAAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAADZGl2CQABkQAAAAIFAAAABnN3YXBMaQAAAAAAAAAAAwUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXmCOv+4", "height": 2406802, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GiZYXRgdHBqQDevDq5zjtL5CVNyydmKZkRH3NpvPjRz5 Next: 97dE9cEyBz3XpgVw6ZxejM5YCPD6JPFyzdXB2bsUSfgX Diff:
OldNewDifferences
5757 let getbtcpriceAtEndCounter = splitbtcpriceAtEndCounter[0]
5858 let pricediff = (parseIntValue(getbtcpriceAtEndCounter) - parseIntValue(getbtcpriceAtStartCounter))
5959 if ((0 > pricediff))
60- then [IntegerEntry("Diff", pricediff), StringEntry(((((((((Call_Sequence + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "lose"), StringEntry("message", "You lose!"), DeleteEntry(getOptionCall_Sequencedata), DeleteEntry(getOptionCallPrice)]
61- else [IntegerEntry("Diff", pricediff), StringEntry(((((((((Call_Sequence + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "Win"), StringEntry("message", "You Win!"), DeleteEntry(((("Call_Start_End_" + calleraddress) + "_") + Call_Sequence)), DeleteEntry(getOptionCallPrice)]
60+ then [IntegerEntry("Diff", pricediff), StringEntry(((((((((((calleraddress + "_") + Call_Sequence) + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "lose"), StringEntry("message", "You lose!"), DeleteEntry(getOptionCall_Sequencedata), DeleteEntry(getOptionCallPrice)]
61+ else [IntegerEntry("Diff", pricediff), StringEntry(((((((((((calleraddress + "_") + Call_Sequence) + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "Win"), StringEntry("message", "You Win!"), DeleteEntry(((("Call_Start_End_" + calleraddress) + "_") + Call_Sequence)), DeleteEntry(getOptionCallPrice)]
6262 }
6363
6464
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44
55
66 @Callable(i)
77 func placeoptionCall () = {
88 let calleraddress = toBase58String(i.caller.bytes)
99 let read_oracle_status = getStringValue(this, "oracle_status")
1010 let read_OptionCounterID = getIntegerValue(this, "1m_contract_id")
1111 let getbtcdata = getStringValue(this, ("1m_btc_" + toString(read_OptionCounterID)))
1212 let swapLi = split(getbtcdata, "_")
1313 let price = swapLi[0]
1414 let block = parseIntValue(swapLi[2])
1515 let checkblockgap = (height - block)
1616 let OpionExpireCounter = 1
1717 let OptionExpireCounterID = (read_OptionCounterID + OpionExpireCounter)
1818 let PreviousCall = match getInteger(this, "Total_Calls") {
1919 case a: Int =>
2020 a
2121 case _ =>
2222 0
2323 }
2424 let TotalCall = (PreviousCall + 1)
2525 let PreviousUserCall = match getInteger(this, (calleraddress + "_Total_Calls")) {
2626 case a: Int =>
2727 a
2828 case _ =>
2929 0
3030 }
3131 let TotalUserCall = (PreviousUserCall + 1)
3232 if ((checkblockgap > 2))
3333 then throw("Something Wrong with Oracle or Height is not matched.")
3434 else if ((read_oracle_status == "Close"))
3535 then throw("Oracle is closed. Wait Until Oracle is Turned On.")
3636 else [StringEntry(((("Call_" + calleraddress) + "_") + toString(TotalUserCall)), price), StringEntry(((("Call_Start_End_" + calleraddress) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Calls", TotalCall), IntegerEntry((calleraddress + "_Total_Calls"), TotalUserCall)]
3737 }
3838
3939
4040
4141 @Callable(i)
4242 func ClaimCall (Call_Sequence) = {
4343 let calleraddress = toBase58String(i.caller.bytes)
4444 let pmt = if ((size(i.payments) == 1))
4545 then i.payments[0]
4646 else throw("No payment attached, Please Attach Tokens in payment[1].")
4747 let getOptionCallPrice = getStringValue(this, ((("Call_" + calleraddress) + "_") + Call_Sequence))
4848 let getOptionCall_Sequencedata = getStringValue(this, ((("Call_Start_End_" + calleraddress) + "_") + Call_Sequence))
4949 let splitStartEndCounter = split(getOptionCall_Sequencedata, "_")
5050 let getStartCounter = splitStartEndCounter[0]
5151 let getEndCounter = splitStartEndCounter[1]
5252 let getbtcdataAtStartCounter = getStringValue(this, ("1m_btc_" + getStartCounter))
5353 let splitbtcpriceAtStartCounter = split(getbtcdataAtStartCounter, "_")
5454 let getbtcpriceAtStartCounter = splitbtcpriceAtStartCounter[0]
5555 let getbtcdataAtEndCounter = getStringValue(this, ("1m_btc_" + getEndCounter))
5656 let splitbtcpriceAtEndCounter = split(getbtcdataAtEndCounter, "_")
5757 let getbtcpriceAtEndCounter = splitbtcpriceAtEndCounter[0]
5858 let pricediff = (parseIntValue(getbtcpriceAtEndCounter) - parseIntValue(getbtcpriceAtStartCounter))
5959 if ((0 > pricediff))
60- then [IntegerEntry("Diff", pricediff), StringEntry(((((((((Call_Sequence + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "lose"), StringEntry("message", "You lose!"), DeleteEntry(getOptionCall_Sequencedata), DeleteEntry(getOptionCallPrice)]
61- else [IntegerEntry("Diff", pricediff), StringEntry(((((((((Call_Sequence + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "Win"), StringEntry("message", "You Win!"), DeleteEntry(((("Call_Start_End_" + calleraddress) + "_") + Call_Sequence)), DeleteEntry(getOptionCallPrice)]
60+ then [IntegerEntry("Diff", pricediff), StringEntry(((((((((((calleraddress + "_") + Call_Sequence) + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "lose"), StringEntry("message", "You lose!"), DeleteEntry(getOptionCall_Sequencedata), DeleteEntry(getOptionCallPrice)]
61+ else [IntegerEntry("Diff", pricediff), StringEntry(((((((((((calleraddress + "_") + Call_Sequence) + "_") + getStartCounter) + "_") + getEndCounter) + "_") + getbtcpriceAtStartCounter) + "_") + getbtcpriceAtEndCounter), "Win"), StringEntry("message", "You Win!"), DeleteEntry(((("Call_Start_End_" + calleraddress) + "_") + Call_Sequence)), DeleteEntry(getOptionCallPrice)]
6262 }
6363
6464
6565
6666 @Callable(i)
6767 func calldata (Counter) = {
6868 let getbtcdata = getStringValue(this, ("1m_btc_" + toString(Counter)))
6969 let swapLi = split(getbtcdata, "_")
7070 let price = swapLi[0]
7171 let time = swapLi[1]
7272 let blockheight = swapLi[2]
7373 let div = swapLi[3]
7474 [StringEntry("price", swapLi[0]), StringEntry("time", swapLi[1]), StringEntry("blockheight", swapLi[2]), StringEntry("div", swapLi[3])]
7575 }
7676
7777
7878 @Verifier(tx)
7979 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
8080

github/deemru/w8io/169f3d6 
32.82 ms