tx · 7UDTRzYE5C9DH15rhdekJNeJqwyC7h4uaB7wKvzw3559

3N5NAftzfcw3gAt8nc35bNr9UdPTVgC81fd:  -0.01400000 Waves

2022.03.04 16:06 [1949268] smart account 3N5NAftzfcw3gAt8nc35bNr9UdPTVgC81fd > SELF 0.00000000 Waves

{ "type": 13, "id": "7UDTRzYE5C9DH15rhdekJNeJqwyC7h4uaB7wKvzw3559", "fee": 1400000, "feeAssetId": null, "timestamp": 1646399169273, "version": 1, "sender": "3N5NAftzfcw3gAt8nc35bNr9UdPTVgC81fd", "senderPublicKey": "CdnTmMHxT68Qa4MtHEnAiUhsdKTi2YkHPGn92ThinVNt", "proofs": [ "5r5MfdngAY1WWudUstVUyimkheQNDfjrrqpfL3b4U6vdUQ79zwG4sWv1wuPNcURvjMw84PTj8SM5G32sUQL2rMBc", "5zY1Mch8jvXdWZT1soua9hxMsS1mEc3GGGA811S74fJfKYfocQtMxu1B3mFgbB3dWV2YVVZzfQLgfg1EZcvFhjU4", "Jv9R41JReN5bCxJ4ot5ygaTqYvHaUVF5YsN6yHuJYjuHqrjn4Q4ARy96692oeKc66qSoYQtxJ28xq22ym4FTgUb" ], "script": "base64:AAIFAAAAAAAAAAsIAhIAEgASAwoBCAAAAEMBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQIAAAAAAQAAABZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkHAQAAABhnZXRTdHJpbmdCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQIAAAAAAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQAAAAAAAAAAAAEAAAAJYXNBbnlMaXN0AAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAJTGlzdFtBbnldBAAAAAp2YWxBbnlMeXN0BQAAAAckbWF0Y2gwBQAAAAp2YWxBbnlMeXN0CQAAAgAAAAECAAAAG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEAAAAIYXNTdHJpbmcAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnZhbFN0cgUAAAAHJG1hdGNoMAUAAAAGdmFsU3RyCQAAAgAAAAECAAAAGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEAAAAFYXNJbnQAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnZhbEludAUAAAAHJG1hdGNoMAUAAAAGdmFsSW50CQAAAgAAAAECAAAAFWZhaWwgdG8gY2FzdCBpbnRvIEludAAAAAAHV0FWRUxFVAAAAAAABfXhAAAAAAAFUEFVTEkAAAAAAAAPQkAAAAAACEJJR1BBVUxJCQABNgAAAAEAAAAAAAAPQkAAAAAACFBSSUNFTEVUAAAAAAAAD0JAAAAAAARNVUxUAAAAAAAF9eEAAAAAAAlCSUdNVUxUMTYJAAE2AAAAAQAAI4byb8EAAAAAAAAGU0NBTEU4AAAAAAAAAAAIAAAAAAdTQ0FMRTE2AAAAAAAAAAAQAAAAAA1NSU5PUkRFUlRPVEFMCQAAaAAAAAIAAAAAAAAAAAoFAAAAB1dBVkVMRVQAAAAABk1BWFJPSQAAAAAAAAAAXwAAAAAIQ0FOQ0VMRUQCAAAACGNhbmNlbGVkAAAAAANORVcCAAAAA25ldwAAAAAGRklMTEVEAgAAAAZmaWxsZWQAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAAOTnNidEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAAEk5ldXRyaW5vQXNzZXRJZEtleQIAAAARbmV1dHJpbm9fYXNzZXRfaWQAAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAA1iYWxhbmNlX2xvY2tfAAAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkJAAEsAAAAAgUAAAARQmFsYW5jZUxvY2tlZGtLZXkCAAAABXdhdmVzAAAAABhOZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkJAAEsAAAAAgUAAAARQmFsYW5jZUxvY2tlZGtLZXkCAAAACG5ldXRyaW5vAAAAAA1GaXJzdE9yZGVyS2V5AgAAAAtvcmRlcl9maXJzdAAAAAAPTWF0aENvbnRyYWN0S2V5AgAAAA1tYXRoX2NvbnRyYWN0AAAAABVNaW5XYXZlc0Zvck5zYnRCdXlLZXkCAAAAEm1pbl93YXZlc19uc2J0X2J1eQAAAAAOTWluTnNidFNlbGxLZXkCAAAADW1pbl9uc2J0X3NlbGwBAAAAEmdldFJvaUJ5T3JkZXJJZEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAABBkZWJ1Z19vcmRlcl9yb2lfBQAAAAdvcmRlcklkAQAAABBnZXRPcmRlclByaWNlS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAADG9yZGVyX3ByaWNlXwUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAxvcmRlcl90b3RhbF8FAAAAB29yZGVySWQBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgIAAAAMb3JkZXJfb3duZXJfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9oZWlnaHRfBQAAAAdvcmRlcklkAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAA1vcmRlcl9zdGF0dXNfBQAAAAdvcmRlcklkAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAE29yZGVyX2ZpbGxlZF90b3RhbF8FAAAAB29yZGVySWQBAAAAD2dldFByZXZPcmRlcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACAgAAAAtvcmRlcl9wcmV2XwUAAAAHb3JkZXJJZAEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQAAAAdvcmRlcklkCQABLAAAAAICAAAAC29yZGVyX25leHRfBQAAAAdvcmRlcklkAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwkAAGsAAAADBQAAAAZhbW91bnQFAAAACFBSSUNFTEVUBQAAAAVwcmljZQUAAAAHV0FWRUxFVAUAAAAFUEFVTEkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACAAAABmFtb3VudAAAAAVwcmljZQkAAGsAAAADCQAAawAAAAMFAAAABmFtb3VudAUAAAAFcHJpY2UFAAAACFBSSUNFTEVUBQAAAAVQQVVMSQUAAAAHV0FWRUxFVAEAAAASY29udmVydFdhdmVzVG9Cb25kAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQEAAAASY29udmVydEJvbmRUb1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAGYW1vdW50BQAAAAVwcmljZQEAAAAFdG9YMTYAAAACAAAAB29yaWdWYWwAAAANb3JpZ1NjYWxlTXVsdAkAATwAAAADCQABNgAAAAEFAAAAB29yaWdWYWwFAAAACUJJR01VTFQxNgkAATYAAAABBQAAAA1vcmlnU2NhbGVNdWx0AQAAAAdmcm9tWDE2AAAAAgAAAAN2YWwAAAAPcmVzdWx0U2NhbGVNdWx0CQABoAAAAAEJAAE8AAAAAwUAAAADdmFsCQABNgAAAAEFAAAAD3Jlc3VsdFNjYWxlTXVsdAUAAAAJQklHTVVMVDE2AAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU1+WJ2GIi6zFsn7vK5pKJxw3NIOJwrWveAAAAAA9jb250cm9sQ29udHJhY3QJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVQhQZlgr9WxzLUVB2LMXSyOf9bsxLVJY6EAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVSFO+MfFxTq/puHhsTXJqxlZgZ4motyILkAAAAADG1hdGhDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAPTWF0aENvbnRyYWN0S2V5AAAAAA9uZXV0cmlub0Fzc2V0SWQBAAAAIPd26vf3g8pl224T7gI7z1gplanB0Y3yS9ps2B1igMjeAAAAAAtuc2J0QXNzZXRJZAEAAAAg0LXMsc32iGTNRyotjPq8+T7E/Q4lTB90XCk6/p1poRAAAAAACWlzQmxvY2tlZAkBAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QCAAAACmlzX2Jsb2NrZWQAAAAAFW1pbldhdmVzQW1vdW50TnNidEJ1eQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABVNaW5XYXZlc0Zvck5zYnRCdXlLZXkAAAAAADuaygAAAAAAC21pbk5zYnRTZWxsCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAADk1pbk5zYnRTZWxsS2V5AAAAAAAAD0JAAAAAAApmaXJzdE9yZGVyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA1GaXJzdE9yZGVyS2V5AQAAAA1nZXRPcmRlclByaWNlAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAAJpZAEAAAANZ2V0T3JkZXJUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQUAAAACaWQBAAAADWdldE9yZGVyT3duZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEFAAAAAmlkAQAAAA5nZXRPcmRlclN0YXR1cwAAAAEAAAACaWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFnZXRPcmRlclN0YXR1c0tleQAAAAEFAAAAAmlkAQAAABNnZXRPcmRlckZpbGxlZFRvdGFsAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABBQAAAAJpZAEAAAAMZ2V0UHJldk9yZGVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2dldFByZXZPcmRlcktleQAAAAEFAAAAAmlkAQAAAAxnZXROZXh0T3JkZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAPZ2V0TmV4dE9yZGVyS2V5AAAAAQUAAAACaWQBAAAAD2dldFJldmVyc2VQcmljZQAAAAEAAAAFcHJpY2UJAABpAAAAAgkAAGgAAAACBQAAAAhQUklDRUxFVAUAAAAIUFJJQ0VMRVQFAAAABXByaWNlAQAAABZjYWxjTnNidDJXYXZlc1ByaWNlUmF3AAAAAgAAAA1zcGVudFdhdmVzUmF3AAAAD3JlY2VpdmVkTnNidFJhdwkAAGsAAAADBQAAAA1zcGVudFdhdmVzUmF3CQAAaAAAAAIFAAAABVBBVUxJBQAAAAhQUklDRUxFVAUAAAAPcmVjZWl2ZWROc2J0UmF3AQAAAAlvcmRlckRhdGEAAAAIAAAAB29yZGVySWQAAAANdG90YWxXYXZlbGV0cwAAAA5maWxsZWRXYXZlbGV0cwAAAAVvd25lcgAAAAZzdGF0dXMAAAADcm9pAAAABXByaWNlAAAADGN1cnJlbnRQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGdldE9yZGVyUHJpY2VLZXkAAAABBQAAAAdvcmRlcklkBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGdldE9yZGVyVG90YWxLZXkAAAABBQAAAAdvcmRlcklkBQAAAA10b3RhbFdhdmVsZXRzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWZ2V0T3JkZXJGaWxsZWRUb3RhbEtleQAAAAEFAAAAB29yZGVySWQFAAAADmZpbGxlZFdhdmVsZXRzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRPcmRlck93bmVyS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAAFb3duZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEFAAAAB29yZGVySWQFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAZzdGF0dXMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAZZGVidWdfb3JkZXJfY3VycmVudFByaWNlXwUAAAAHb3JkZXJJZAUAAAAMY3VycmVudFByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASZ2V0Um9pQnlPcmRlcklkS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAADcm9pBQAAAANuaWwBAAAABXRv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B29yZGVySWQEAAAABmNhbGxlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACW5leHRPcmRlcgkBAAAADGdldE5leHRPcmRlcgAAAAEFAAAAB29yZGVySWQEAAAACXByZXZPcmRlcgkBAAAADGdldFByZXZPcmRlcgAAAAEFAAAAB29yZGVySWQDCQEAAAACIT0AAAACCQEAAAAOZ2V0T3JkZXJTdGF0dXMAAAABBQAAAAdvcmRlcklkBQAAAANORVcJAAACAAAAAQIAAAAUaW52YWxpZCBvcmRlciBzdGF0dXMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANRmlyc3RPcmRlcktleQMJAAAAAAAAAgUAAAAKZmlyc3RPcmRlcgUAAAAHb3JkZXJJZAUAAAAJbmV4dE9yZGVyBQAAAApmaXJzdE9yZGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9nZXROZXh0T3JkZXJLZXkAAAABBQAAAAlwcmV2T3JkZXIFAAAACW5leHRPcmRlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2V0UHJldk9yZGVyS2V5AAAAAQUAAAAJbmV4dE9yZGVyBQAAAAlwcmV2T3JkZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWdldE9yZGVyU3RhdHVzS2V5AAAAAQUAAAAHb3JkZXJJZAUAAAAIQ0FOQ0VMRUQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAZhbW91bnQFAAAABHVuaXQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAEHB1YktleUFkbWluc0xpc3QJAARMAAAAAgIAAAAsRXh0RUVLMTlubUtqOW1DcG5XeXZFRUpGWUFUTE1jVkVNdm9oaFVIa3lITm0JAARMAAAAAgIAAAAsRXY1cHk1RmZCUVg5Y1pwWUtuZlFyVEI0OUJ5ZjhRbXBaV2VEVlJpbTR5VjcJAARMAAAAAgIAAAAsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIJAARMAAAAAgIAAAAsNVdSWEZTandjVGJOZktjSnM4WnFYbVNTV1lzU1ZKVXRNdk1xWmo1aEg0TmMFAAAAA25pbAQAAAAFY291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAQkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAgkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAwkAAlkAAAABCQABkQAAAAIFAAAAEHB1YktleUFkbWluc0xpc3QAAAAAAAAAAAMAAAAAAAAAAAIAAAAAAAAAAAAJAABnAAAAAgUAAAAFY291bnQAAAAAAAAAAAMj8qXL", "chainId": 84, "height": 1949268, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: tR842EtG18pM3FDw9LX9n9exxroMzjMsgxs4o6JJnQP Next: hikumg7MGwM6qqCtdBnzEj3snWC3JY8JDJ7Nsh32nbE Diff:
OldNewDifferences
194194 else if (isDefined(pmt.assetId))
195195 then throw("can use waves only")
196196 else if ((minWavesAmountNsbtBuy > pmtAmount))
197- then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
197+ then throw((("min " + toString((minWavesAmountNsbtBuy / WAVELET))) + " waves expected"))
198198 else {
199199 let ownerAddress = i.caller
200200 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsMATH", nil, nil))
239239 if ((pmt.assetId != nsbtAssetId))
240240 then throw("can use NSBT only")
241241 else if ((minNsbtSell > pmtAmount))
242- then throw((("min " + toString(minNsbtSell)) + " nsbt expected"))
242+ then throw((("min " + toString((minNsbtSell / PAULI))) + " nsbt expected"))
243243 else {
244244 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsMATH", nil, nil))
245245 if ((neutrinoMetrics == neutrinoMetrics))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
55
66
77 func getStringByKey (key) = valueOrElse(getString(this, key), "")
88
99
1010 func getBoolByAddressAndKey (address,key) = valueOrElse(getBoolean(address, key), false)
1111
1212
1313 func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
1414
1515
1616 func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(address, key), 0)
1717
1818
1919 func asAnyList (val) = match val {
2020 case valAnyLyst: List[Any] =>
2121 valAnyLyst
2222 case _ =>
2323 throw("fail to cast into List[Any]")
2424 }
2525
2626
2727 func asString (val) = match val {
2828 case valStr: String =>
2929 valStr
3030 case _ =>
3131 throw("fail to cast into String")
3232 }
3333
3434
3535 func asInt (val) = match val {
3636 case valInt: Int =>
3737 valInt
3838 case _ =>
3939 throw("fail to cast into Int")
4040 }
4141
4242
4343 let WAVELET = 100000000
4444
4545 let PAULI = 1000000
4646
4747 let BIGPAULI = toBigInt(1000000)
4848
4949 let PRICELET = 1000000
5050
5151 let MULT = 100000000
5252
5353 let BIGMULT16 = toBigInt(10000000000000000)
5454
5555 let SCALE8 = 8
5656
5757 let SCALE16 = 16
5858
5959 let MINORDERTOTAL = (10 * WAVELET)
6060
6161 let MAXROI = 95
6262
6363 let CANCELED = "canceled"
6464
6565 let NEW = "new"
6666
6767 let FILLED = "filled"
6868
6969 let PriceKey = "price"
7070
7171 let NsbtAssetIdKey = "bond_asset_id"
7272
7373 let NeutrinoAssetIdKey = "neutrino_asset_id"
7474
7575 let BalanceLockedkKey = "balance_lock_"
7676
7777 let WavesLockedBalanceKey = (BalanceLockedkKey + "waves")
7878
7979 let NeutrinoLockedBalanceKey = (BalanceLockedkKey + "neutrino")
8080
8181 let FirstOrderKey = "order_first"
8282
8383 let MathContractKey = "math_contract"
8484
8585 let MinWavesForNsbtBuyKey = "min_waves_nsbt_buy"
8686
8787 let MinNsbtSellKey = "min_nsbt_sell"
8888
8989 func getRoiByOrderIdKey (orderId) = ("debug_order_roi_" + orderId)
9090
9191
9292 func getOrderPriceKey (orderId) = ("order_price_" + orderId)
9393
9494
9595 func getOrderTotalKey (orderId) = ("order_total_" + orderId)
9696
9797
9898 func getOrderOwnerKey (orderId) = ("order_owner_" + orderId)
9999
100100
101101 func getOrderHeightKey (orderId) = ("order_height_" + orderId)
102102
103103
104104 func getOrderStatusKey (orderId) = ("order_status_" + orderId)
105105
106106
107107 func getOrderFilledTotalKey (orderId) = ("order_filled_total_" + orderId)
108108
109109
110110 func getPrevOrderKey (orderId) = ("order_prev_" + orderId)
111111
112112
113113 func getNextOrderKey (orderId) = ("order_next_" + orderId)
114114
115115
116116 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), WAVELET, PAULI)
117117
118118
119119 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), PAULI, WAVELET)
120120
121121
122122 func convertWavesToBond (amount,price) = convertWavesToNeutrino(amount, price)
123123
124124
125125 func convertBondToWaves (amount,price) = convertNeutrinoToWaves(amount, price)
126126
127127
128128 func toX16 (origVal,origScaleMult) = fraction(toBigInt(origVal), BIGMULT16, toBigInt(origScaleMult))
129129
130130
131131 func fromX16 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), BIGMULT16))
132132
133133
134134 let neutrinoContract = Address(base58'3N9be2mwrA52WJho6DiesZkk4351GvpnWuj')
135135
136136 let controlContract = Address(base58'3MrwvfA9VRYwhHy4NuWPQGdxCtZdhH4LMMa')
137137
138138 let liquidationContract = Address(base58'3N24ZPUAMhFm76N3vbNiiDtFqfUnmBHTc5N')
139139
140140 let mathContract = addressFromStringValue(getStringByKey(MathContractKey))
141141
142142 let neutrinoAssetId = base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
143143
144144 let nsbtAssetId = base58'F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z'
145145
146146 let isBlocked = getBoolByAddressAndKey(controlContract, "is_blocked")
147147
148148 let minWavesAmountNsbtBuy = valueOrElse(getInteger(this, MinWavesForNsbtBuyKey), 1000000000)
149149
150150 let minNsbtSell = valueOrElse(getInteger(this, MinNsbtSellKey), 1000000)
151151
152152 let firstOrder = getStringByKey(FirstOrderKey)
153153
154154 func getOrderPrice (id) = getNumberByKey(getOrderPriceKey(id))
155155
156156
157157 func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id))
158158
159159
160160 func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id))
161161
162162
163163 func getOrderStatus (id) = getStringByKey(getOrderStatusKey(id))
164164
165165
166166 func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id))
167167
168168
169169 func getPrevOrder (id) = getStringByKey(getPrevOrderKey(id))
170170
171171
172172 func getNextOrder (id) = getStringByKey(getNextOrderKey(id))
173173
174174
175175 func getReversePrice (price) = ((PRICELET * PRICELET) / price)
176176
177177
178178 func calcNsbt2WavesPriceRaw (spentWavesRaw,receivedNsbtRaw) = fraction(spentWavesRaw, (PAULI * PRICELET), receivedNsbtRaw)
179179
180180
181181 func orderData (orderId,totalWavelets,filledWavelets,owner,status,roi,price,currentPrice) = [IntegerEntry(getOrderPriceKey(orderId), price), IntegerEntry(getOrderTotalKey(orderId), totalWavelets), IntegerEntry(getOrderFilledTotalKey(orderId), filledWavelets), StringEntry(getOrderOwnerKey(orderId), owner), IntegerEntry(getOrderHeightKey(orderId), height), StringEntry(getOrderStatusKey(orderId), status), IntegerEntry(("debug_order_currentPrice_" + orderId), currentPrice), IntegerEntry(getRoiByOrderIdKey(orderId), roi)]
182182
183183
184184 func toStr (name,curveResult) = (((((((((((((((((((((((((((((((((((name + "[nsbtAmountRaw=") + toString(asInt(curveResult[0]))) + " usdnPayment=") + toString(asInt(curveResult[1]))) + " wRaw=") + toString(asInt(curveResult[2]))) + " uRaw=") + toString(asInt(curveResult[3]))) + " mRaw=") + toString(asInt(curveResult[4]))) + " sRaw=") + toString(asInt(curveResult[5]))) + " nsbtCurveParam_a=") + toString(asInt(curveResult[6]))) + " nsbtCurveParam_b=") + toString(asInt(curveResult[7]))) + " wReservesInUsdn=") + toString(asInt(curveResult[8]))) + " price=") + toString(asInt(curveResult[9]))) + " multBR=") + toString(asInt(curveResult[10]))) + " multPower=") + toString(asInt(curveResult[11]))) + " multExpInPower=") + asString(curveResult[12])) + " multK=") + asString(curveResult[13])) + " step1=") + asString(curveResult[14])) + " step2=") + asString(curveResult[15])) + " step3=") + toString(asInt(curveResult[16]))) + "]")
185185
186186
187187 @Callable(i)
188188 func buyNsbt () = {
189189 let pmt = value(i.payments[0])
190190 let pmtAmount = pmt.amount
191191 let wavesPay = pmtAmount
192192 if (isBlocked)
193193 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
194194 else if (isDefined(pmt.assetId))
195195 then throw("can use waves only")
196196 else if ((minWavesAmountNsbtBuy > pmtAmount))
197- then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
197+ then throw((("min " + toString((minWavesAmountNsbtBuy / WAVELET))) + " waves expected"))
198198 else {
199199 let ownerAddress = i.caller
200200 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsMATH", nil, nil))
201201 if ((neutrinoMetrics == neutrinoMetrics))
202202 then {
203203 let currentPrice = asInt(neutrinoMetrics[0])
204204 let reserve = asInt(neutrinoMetrics[3])
205205 let neutrinoSupply = asInt(neutrinoMetrics[5])
206206 let nsbtSupply = asInt(neutrinoMetrics[9])
207207 let nsbtSupplyMAX = value(assetInfo(nsbtAssetId)).quantity
208208 let curveResult = asAnyList(invoke(mathContract, "curveFunctionMATH", [reserve, neutrinoSupply, currentPrice, nsbtSupplyMAX, nsbtSupply, wavesPay], nil))
209209 if ((curveResult == curveResult))
210210 then {
211211 let nsbtAmount = asInt(curveResult[0])
212212 if ((0 >= nsbtAmount))
213213 then throw("nsbtAmount <= 0")
214214 else if ((wavesPay > (nsbtAmount * 9223372)))
215215 then throw(((("Nsbt2Waves price exceeds MAX_INT: " + toString(wavesPay)) + "/") + toString(nsbtAmount)))
216216 else {
217217 let nsbt2WavesPriceRaw = calcNsbt2WavesPriceRaw(wavesPay, nsbtAmount)
218218 let roi = 0
219219 let amountLeased = invoke(neutrinoContract, "acceptWaves", nil, i.payments)
220220 if ((amountLeased == amountLeased))
221221 then $Tuple2((orderData(toBase58String(i.transactionId), pmtAmount, pmtAmount, toString(ownerAddress), FILLED, roi, nsbt2WavesPriceRaw, currentPrice) ++ [ScriptTransfer(ownerAddress, nsbtAmount, nsbtAssetId), StringEntry("debug_curveResult", toStr("curveResult", curveResult))]), nsbtAmount)
222222 else throw("Strict value is not equal to itself.")
223223 }
224224 }
225225 else throw("Strict value is not equal to itself.")
226226 }
227227 else throw("Strict value is not equal to itself.")
228228 }
229229 }
230230
231231
232232
233233 @Callable(i)
234234 func sellNsbt () = if (isBlocked)
235235 then throw("contract is blocked by EMERGENCY SHUTDOWN actions until reactivation by emergency oracles")
236236 else {
237237 let pmt = value(i.payments[0])
238238 let pmtAmount = pmt.amount
239239 if ((pmt.assetId != nsbtAssetId))
240240 then throw("can use NSBT only")
241241 else if ((minNsbtSell > pmtAmount))
242- then throw((("min " + toString(minNsbtSell)) + " nsbt expected"))
242+ then throw((("min " + toString((minNsbtSell / PAULI))) + " nsbt expected"))
243243 else {
244244 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsMATH", nil, nil))
245245 if ((neutrinoMetrics == neutrinoMetrics))
246246 then {
247247 let nsbtSupply = asInt(neutrinoMetrics[10])
248248 let newPrice = asInt(asAnyList(invoke(mathContract, "calcContractNsbtPriceBySupplyMATH", [(nsbtSupply - pmtAmount)], nil))[0])
249249 if ((newPrice == newPrice))
250250 then if ((PAULI > newPrice))
251251 then throw((("resulting nsbt price would be < 1 (" + toString(newPrice)) + " usdn"))
252252 else {
253253 let transf = invoke(neutrinoContract, "transferUsdnToUser", [pmtAmount, toString(i.caller)], nil)
254254 if ((transf == transf))
255255 then $Tuple2(nil, newPrice)
256256 else throw("Strict value is not equal to itself.")
257257 }
258258 else throw("Strict value is not equal to itself.")
259259 }
260260 else throw("Strict value is not equal to itself.")
261261 }
262262 }
263263
264264
265265
266266 @Callable(i)
267267 func cancelOrder (orderId) = {
268268 let owner = getOrderOwner(orderId)
269269 let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
270270 let caller = toString(i.caller)
271271 let nextOrder = getNextOrder(orderId)
272272 let prevOrder = getPrevOrder(orderId)
273273 if ((getOrderStatus(orderId) != NEW))
274274 then throw("invalid order status")
275275 else [StringEntry(FirstOrderKey, if ((firstOrder == orderId))
276276 then nextOrder
277277 else firstOrder), StringEntry(getNextOrderKey(prevOrder), nextOrder), StringEntry(getPrevOrderKey(nextOrder), prevOrder), StringEntry(getOrderStatusKey(orderId), CANCELED), ScriptTransfer(i.caller, amount, unit)]
278278 }
279279
280280
281281 @Verifier(tx)
282282 func verify () = {
283283 let pubKeyAdminsList = ["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
284284 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
285285 then 1
286286 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
287287 then 1
288288 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
289289 then 1
290290 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
291291 then 2
292292 else 0))
293293 (count >= 3)
294294 }
295295

github/deemru/w8io/3ef1775 
87.61 ms