tx · G8CTqEpwfL75GH2F9X1nqLzry9UMFnbXMb8MwVZWEU3q

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.01400000 Waves

2022.03.16 16:37 [1966570] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "G8CTqEpwfL75GH2F9X1nqLzry9UMFnbXMb8MwVZWEU3q", "fee": 1400000, "feeAssetId": null, "timestamp": 1647437946475, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "47SDWVZQK7dzvS5KqC7KkHyAvN7g67EyRiJNeqEb24GThVwo4LD3C6G9rASrGmKiC9Ltyxy66twNg9za7vF2jhQR" ], "script": "base64:AAIFAAAAAAAAAC8IAhIFCgMICAgSABIDCgEIEgQKAggBEgMKAQESBgoEAQEBARIECgIBARIECgIBCAAAADwAAAAACFBSSUNFTEVUAAAAAAAAD0JAAAAAAAlNVUxUU0NBTEUAAAAAAAAAAAgAAAAAC0VVTEVSTlVNQkVSAAAAAAAQM8TWAAAAAAZzY2FsZTYAAAAAAAAPQkAAAAAADHNjYWxlNkJpZ0ludAkAATYAAAABAAAAAAAAD0JAAAAAAAZzY2FsZTgAAAAAAAX14QAAAAAADHNjYWxlOEJpZ0ludAkAATYAAAABAAAAAAAF9eEAAAAAAAdzY2FsZTEyAAAAAOjUpRAAAAAAAAdzY2FsZTE4CQABNgAAAAEADeC2s6dkAAAAAAAAA1NFUAIAAAACX18BAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAACAAAAHSVzJXNfX2NvbmZpZ19fbmV1dHJpbm9BZGRyZXNzAQAAABJrZXlOZXV0cmlub0Fzc2V0SWQAAAAAAgAAABFuZXV0cmlub19hc3NldF9pZAEAAAAda2V5TGlxdWlkYXRpb25Db250cmFjdEFkZHJlc3MAAAAAAgAAABRsaXF1aWRhdGlvbl9jb250cmFjdAEAAAAOa2V5UlBEQ29udHJhY3QAAAAAAgAAAAxycGRfY29udHJhY3QBAAAAEmtleUF1Y3Rpb25Db250cmFjdAAAAAACAAAAEGF1Y3Rpb25fY29udHJhY3QBAAAAEWtleUNvbnRvbENvbnRyYWN0AAAAAAIAAAAQY29udHJvbF9jb250cmFjdAEAAAAOa2V5Qm9uZEFzc2V0SWQAAAAAAgAAAA1ib25kX2Fzc2V0X2lkAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAANYmFsYW5jZV9sb2NrXwEAAAAVa2V5V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAABXdhdmVzAQAAABhrZXlOZXV0cmlub0xvY2tlZEJhbGFuY2UAAAAACQABLAAAAAIJAQAAABBrZXlCYWxhbmNlTG9ja2VkAAAAAAIAAAAIbmV1dHJpbm8BAAAAFWtleU1pbldhdmVzU3dhcEFtb3VudAAAAAACAAAAFW1pbl93YXZlc19zd2FwX2Ftb3VudAEAAAAYa2V5TWluTmV1dHJpbm9Td2FwQW1vdW50AAAAAAIAAAAYbWluX25ldXRyaW5vX3N3YXBfYW1vdW50AQAAABJrZXlXYXZlc091dEZlZVBhcnQAAAAAAgAAABV3YXZlc091dF9zd2FwX2ZlZVBhcnQBAAAAFWtleU5ldXRyaW5vT3V0RmVlUGFydAAAAAACAAAAGG5ldXRyaW5vT3V0X3N3YXBfZmVlUGFydAEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAACAAAAFCVzX19uc2J0TG9ja0NvbnRyYWN0AQAAAA9rZXlNYXRoQ29udHJhY3QAAAAAAgAAABAlc19fbWF0aENvbnRyYWN0AQAAABhrZXlTd2FwVXNlclNwZW50SW5QZXJpb2QAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAABVzd2FwVXNlclNwZW50SW5QZXJpb2QJAARMAAAAAgUAAAALdXNlckFkZHJlc3MFAAAAA25pbAUAAAADU0VQAQAAABVrZXlVc2VyTGFzdFN3YXBIZWlnaHQAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAABJ1c2VyTGFzdFN3YXBIZWlnaHQJAARMAAAAAgUAAAALdXNlckFkZHJlc3MFAAAAA25pbAUAAAADU0VQAQAAABtrZXlCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWwAAAAAAgAAABtiYWxhbmNlX3dhdmVzX2xvY2tfaW50ZXJ2YWwBAAAAHmtleUJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbAAAAAACAAAAHmJhbGFuY2VfbmV1dHJpbm9fbG9ja19pbnRlcnZhbAEAAAARa2V5U3dhcHNUaW1lZnJhbWUAAAAAAgAAAA9zd2Fwc190aW1lZnJhbWUBAAAACGtleVByaWNlAAAAAAIAAAAFcHJpY2UBAAAAFmtleUxvY2tQYXJhbVVzZXJBbW91bnQAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAICAAAAC3BhcmFtQnlVc2VyCQAETAAAAAIFAAAAC3VzZXJBZGRy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YWxTdHIFAAAAByRtYXRjaDAFAAAABnZhbFN0cgkAAAIAAAABAgAAABhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBAAAABXRvWDE4AAAAAgAAAAdvcmlnVmFsAAAADW9yaWdTY2FsZU11bHQJAAE8AAAAAwkAATYAAAABBQAAAAdvcmlnVmFsBQAAAAdzY2FsZTE4CQABNgAAAAEFAAAADW9yaWdTY2FsZU11bHQBAAAAB2Zyb21YMTgAAAACAAAAA3ZhbAAAAA9yZXN1bHRTY2FsZU11bHQJAAGgAAAAAQkAATwAAAADBQAAAAN2YWwJAAE2AAAAAQUAAAAPcmVzdWx0U2NhbGVNdWx0BQAAAAdzY2FsZTE4AAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAAAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFrZXlDb250b2xDb250cmFjdAAAAAAAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABJrZXlBdWN0aW9uQ29udHJhY3QAAAAAAAAAABNsaXF1aWRhdGlvbkNvbnRyYWN0CQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAHWtleUxpcXVpZGF0aW9uQ29udHJhY3RBZGRyZXNzAAAAAAAAAAALcnBkQ29udHJhY3QJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAOa2V5UlBEQ29udHJhY3QAAAAAAAAAAAxtYXRoQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAAAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABNrZXlOc2J0TG9ja0NvbnRyYWN0AAAAAAAAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEmtleU5ldXRyaW5vQXNzZXRJZAAAAAAAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABBQAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcAAAAADm5zYnRBc3NldElkU3RyCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAOa2V5Qm9uZEFzc2V0SWQAAAAAAAAAAAtuc2J0QXNzZXRJZAkAAlkAAAABBQAAAA5uc2J0QXNzZXRJZFN0cgAAAAgAAAABaQEAAAALY29uc3RydWN0b3IAAAADAAAAD25ldXRyaW5vQWRkcmVzcwAAAA9uc2J0TG9ja0FkZHJlc3MAAAALbWF0aEFkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAFAAAAD25ldXRyaW5vQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAFAAAAD25zYnRMb2NrQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAUAAAALbWF0aEFkZHJlc3MFAAAAA25pbAAAAAFpAQAAABVuZXV0cmlub1N0YXRzUkVBRE9OTFkAAAAABAAAAA9uZXV0cmlub01ldHJpY3MJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1h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eQkABEwAAAACCQABpAAAAAEFAAAADW1heE5zYnRTdXBwbHkJAARMAAAAAgkAAaQAAAABBQAAAA5uc2J0MnVzZG5QcmljZQkABEwAAAACCQABpAAAAAEFAAAAD25zYnQyd2F2ZXNQcmljZQkABEwAAAACCQABpAAAAAEFAAAAEG1pbldhdmVzNE5zYnRCdXkJAARMAAAAAgkAAaQAAAABBQAAAAttaW5Oc2J0c2VsbAkABEwAAAACCQABpAAAAAEFAAAADm1pbk5zYnRMb2NrQW10BQAAAANuaWwFAAAAA1NFUAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEHN3YXBJbmZvUkVBRE9OTFkAAAABAAAADnVzZXJBZGRyZXNzU3RyBAAAAAxjdXJyZW50UHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAACGtleVByaWNlAAAAAAQAAAAPbWluV2F2ZXNTd2FwQW10CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAVa2V5TWluV2F2ZXNTd2FwQW1vdW50AAAAAAQAAAAObWluVXNkblN3YXBBbXQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlNaW5OZXV0cmlub1N3YXBBbW91bnQAAAAABAAAAA13YXZlczJVc2RuRmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAQAAAANdXNkbjJXYXZlc0ZlZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAFWtleU5ldXRyaW5vT3V0RmVlUGFydAAAAAAEAAAAFXVzZG5Td2FwRGVsYXlEdXJhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAHmtleUJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbAAAAAAEAAAAFndhdmVzU3dhcERlbGF5RHVyYXRpb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABtrZXlCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWwAAAAABAAAAAskdDA4MTE5OTEzMgMJAAAAAAAAAgUAAAAOdXNlckFkZHJlc3NTdHICAAAAAAkABRYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA91c2VyR05zYnRBbW91bnQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAATbnNidFN0YWtpbmdDb250cmFjdAkBAAAAFmtleUxvY2tQYXJhbVVzZXJBbW91bnQAAAABBQAAAA51c2VyQWRkcmVzc1N0cgAAAAAAAAAAAAQAAAAKdXNkbkxtdE1heAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAFWNhbGNTd2FwTGltaXRSRUFET05MWQkABEwAAAACBQAAAA91c2VyR05zYnRBbW91bnQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAp1c2RuTG10TWF4BQAAAAp1c2RuTG10TWF4BAAAAA9zd2FwUmVzZXRCbG9ja3MJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEWtleVN3YXBzVGltZWZyYW1lAAAAAAAAAAAAAAAFoAQAAAANbGFzdFN3YXBCbG9jawkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAVa2V5VXNlckxhc3RTd2FwSGVpZ2h0AAAAAQUAAAAOdXNlckFkZHJlc3NTdHIAAAAAAAAAAAAEAAAAD2lzTmV3U3dhcFBlcmlvZAkAAGYAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAANbGFzdFN3YXBCbG9jawUAAAAPc3dhcFJlc2V0QmxvY2tzBAAAAA1zd2FwVXNlclNwZW50AwUAAAAPaXNOZXdTd2FwUGVyaW9kAAAAAAAAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlTd2FwVXNlclNwZW50SW5QZXJpb2QAAAABBQAAAA51c2VyQWRkcmVzc1N0cgAAAAAAAAAAAAQAAAAOYmxja3MyTG10UmVzZXQDBQAAAA9pc05ld1N3YXBQZXJpb2QAAAAAAAAAAAAJAABlAAAAAgUAAAAPc3dhcFJlc2V0QmxvY2tzCQAAZQAAAAIFAAAABmhlaWdodAUAAAANbGFzdFN3YXBCbG9jawQAAAALd2F2ZXNMbXRNYXgJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAKdXNkbkxtdE1heAUAAAAMY3VycmVudFByaWNlCQAFFgAAAAQFAAAADXN3YXBVc2VyU3BlbnQFAAAADmJsY2tzMkxtdFJlc2V0BQAAAAp1c2RuTG10TWF4BQAAAAt3YXZlc0xtdE1heAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAAAADXN3YXBVc2VyU3BlbnQIBQAAAAskdDA4MTE5OTEzMgAAAAJfMQQAAAARYmxvY2tzMkxpbWl0UmVzZXQIBQAAAAskdDA4MTE5OTEzMgAAAAJfMgQAAAAMbWF4VXNkbkxpbWl0CAUAAAALJHQwODExOTkxMzIAAAACXzMEAAAADW1heFdhdmVzTGltaXQIBQAAAAskdDA4MTE5OTEzMgAAAAJfNAkABRQAAAACBQAAAANuaWwJAAS5AAAAAgkABEwAAAACAgAAABYlZCVkJWQlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAMY3VycmVudFByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAPbWluV2F2ZXNTd2FwQW10CQAETAAAAAIJAAGkAAAAAQUAAAAObWluVXNkblN3YXBBbXQJAARMAAAAAgkAAaQAAAABBQAAAA13YXZlczJVc2RuRmVlCQAETAAAAAIJAAGkAAAAAQUAAAANdXNkbjJXYXZlc0ZlZQkABEwAAAACCQABpAAAAAEFAAAAFXVzZG5Td2FwRGVsYXlEdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAAFndhdmVzU3dhcERlbGF5RHVyYXRpb24JAARMAAAAAgkAAaQAAAABBQAAABFibG9ja3MyTGltaXRSZXNldAkABEwAAAACCQABpAAAAAEFAAAADW1heFdhdmVzTGltaXQJAARMAAAAAgkAAaQAAAABBQAAAAxtYXhVc2RuTGltaXQJAARMAAAAAgkAAaQAAAABBQAAAA1zd2FwVXNlclNwZW50BQAAAANuaWwFAAAAA1NFUAAAAAFpAQAAABFnbnNidEluZm9SRUFET05MWQAAAAIAAAAVdXNlckFkZHJlc3NTdHJPckVtcHR5AAAAGmFkZGl0aW9uYWxOc2J0QW1vdW50T3JaZXJvBAAAAAtnbnNidEFtb3VudAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAFXVzZXJBZGRyZXNzU3RyT3JFbXB0eQAAAAAAAAAAAAQAAAAKZ25zYnRUb3RhbAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAAAAAAAAAAAAAABAAAAA5nbnNidEFtb3VudE5ldwkAAGQAAAACBQAAAAtnbnNidEFtb3VudAUAAAAaYWRkaXRpb25hbE5zYnRBbW91bnRPclplcm8EAAAADWduc2J0VG90YWxOZXcJAABkAAAAAgUAAAAKZ25zYnRUb3RhbAUAAAAaYWRkaXRpb25hbE5zYnRBbW91bnRPclplcm8EAAAACmduc2J0U2hhcmUDCQEAAAACIT0AAAACBQAAAApnbnNidFRvdGFsAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAALZ25zYnRBbW91bnQAAAAAAAAAAGQFAAAAB3NjYWxlMTIFAAAACmduc2J0VG90YWwAAAAAAAAAAAAEAAAADWduc2J0U2hhcmVOZXcDCQEAAAACIT0AAAACBQAAAA1nbnNidFRvdGFsTmV3AAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAAOZ25zYnRBbW91bnROZXcAAAAA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", "chainId": 84, "height": 1966570, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5w6yB7atnfi4C8gKGUUazXp8BHxm4Rf42kWZnHFkScM1 Next: EcDtiWuvtyHynAv1KCWEvvpNZarUMhpFza1Lta2WmjgD Diff:
OldNewDifferences
6969 func keyMathContract () = "%s__mathContract"
7070
7171
72-func keyQuickSwapLimitDuration () = "%s__quickSwapLimitDuration"
72+func keySwapUserSpentInPeriod (userAddress) = makeString(["%s%s", "swapUserSpentInPeriod", userAddress], SEP)
7373
7474
75-func keyUserLastQuickSwapHeight (userAddress) = makeString(["%s%s", "userLastQuickSwapHeight", userAddress], SEP)
76-
77-
78-func keyQuickSwapUserSpentInPeriod (userAddress) = makeString(["%s%s", "quickSwapUserSpentInPeriod", userAddress], SEP)
75+func keyUserLastSwapHeight (userAddress) = makeString(["%s%s", "userLastSwapHeight", userAddress], SEP)
7976
8077
8178 func keyBalanceWavesLockInterval () = "balance_waves_lock_interval"
227224 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
228225 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
229226 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
230- let $t082019284 = if ((userAddressStr == ""))
227+ let $t081199132 = if ((userAddressStr == ""))
231228 then $Tuple4(0, 0, 0, 0)
232229 else {
233230 let userGNsbtAmount = valueOrElse(getInteger(nsbtStakingContract, keyLockParamUserAmount(userAddressStr)), 0)
234231 let usdnLmtMax = asInt(invoke(mathContract, "calcSwapLimitREADONLY", [userGNsbtAmount], nil))
235232 if ((usdnLmtMax == usdnLmtMax))
236233 then {
237- let quickSwapResetBlocks = valueOrElse(getInteger(neutrinoContract, keySwapsTimeframe()), 1440)
238- let lastQuickSwapBlock = valueOrElse(getInteger(neutrinoContract, keyUserLastQuickSwapHeight(userAddressStr)), 0)
239- let isNewQuickSwapPeriod = ((height - lastQuickSwapBlock) > quickSwapResetBlocks)
240- let quickSwapUserSpent = if (isNewQuickSwapPeriod)
234+ let swapResetBlocks = valueOrElse(getInteger(neutrinoContract, keySwapsTimeframe()), 1440)
235+ let lastSwapBlock = valueOrElse(getInteger(neutrinoContract, keyUserLastSwapHeight(userAddressStr)), 0)
236+ let isNewSwapPeriod = ((height - lastSwapBlock) > swapResetBlocks)
237+ let swapUserSpent = if (isNewSwapPeriod)
241238 then 0
242- else valueOrElse(getInteger(neutrinoContract, keyQuickSwapUserSpentInPeriod(userAddressStr)), 0)
243- let blcks2LmtReset = if (isNewQuickSwapPeriod)
239+ else valueOrElse(getInteger(neutrinoContract, keySwapUserSpentInPeriod(userAddressStr)), 0)
240+ let blcks2LmtReset = if (isNewSwapPeriod)
244241 then 0
245- else (quickSwapResetBlocks - (height - lastQuickSwapBlock))
242+ else (swapResetBlocks - (height - lastSwapBlock))
246243 let wavesLmtMax = convertNeutrinoToWaves(usdnLmtMax, currentPrice)
247- $Tuple4(quickSwapUserSpent, blcks2LmtReset, usdnLmtMax, wavesLmtMax)
244+ $Tuple4(swapUserSpent, blcks2LmtReset, usdnLmtMax, wavesLmtMax)
248245 }
249246 else throw("Strict value is not equal to itself.")
250247 }
251- let quickSwapUserSpent = $t082019284._1
252- let blocks2LimitReset = $t082019284._2
253- let maxUsdnLimit = $t082019284._3
254- let maxWavesLimit = $t082019284._4
255- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(usdnSwapDelayDuration), toString(wavesSwapDelayDuration), toString(blocks2LimitReset), toString(maxWavesLimit), toString(maxUsdnLimit), toString(quickSwapUserSpent)], SEP))
248+ let swapUserSpent = $t081199132._1
249+ let blocks2LimitReset = $t081199132._2
250+ let maxUsdnLimit = $t081199132._3
251+ let maxWavesLimit = $t081199132._4
252+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(usdnSwapDelayDuration), toString(wavesSwapDelayDuration), toString(blocks2LimitReset), toString(maxWavesLimit), toString(maxUsdnLimit), toString(swapUserSpent)], SEP))
256253 }
257254
258255
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let PRICELET = 1000000
55
66 let MULTSCALE = 8
77
88 let EULERNUMBER = 271828182
99
1010 let scale6 = 1000000
1111
1212 let scale6BigInt = toBigInt(1000000)
1313
1414 let scale8 = 100000000
1515
1616 let scale8BigInt = toBigInt(100000000)
1717
1818 let scale12 = 1000000000000
1919
2020 let scale18 = toBigInt(1000000000000000000)
2121
2222 let SEP = "__"
2323
2424 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
2525
2626
2727 func keyNeutrinoAssetId () = "neutrino_asset_id"
2828
2929
3030 func keyLiquidationContractAddress () = "liquidation_contract"
3131
3232
3333 func keyRPDContract () = "rpd_contract"
3434
3535
3636 func keyAuctionContract () = "auction_contract"
3737
3838
3939 func keyContolContract () = "control_contract"
4040
4141
4242 func keyBondAssetId () = "bond_asset_id"
4343
4444
4545 func keyBalanceLocked () = "balance_lock_"
4646
4747
4848 func keyWavesLockedBalance () = (keyBalanceLocked() + "waves")
4949
5050
5151 func keyNeutrinoLockedBalance () = (keyBalanceLocked() + "neutrino")
5252
5353
5454 func keyMinWavesSwapAmount () = "min_waves_swap_amount"
5555
5656
5757 func keyMinNeutrinoSwapAmount () = "min_neutrino_swap_amount"
5858
5959
6060 func keyWavesOutFeePart () = "wavesOut_swap_feePart"
6161
6262
6363 func keyNeutrinoOutFeePart () = "neutrinoOut_swap_feePart"
6464
6565
6666 func keyNsbtLockContract () = "%s__nsbtLockContract"
6767
6868
6969 func keyMathContract () = "%s__mathContract"
7070
7171
72-func keyQuickSwapLimitDuration () = "%s__quickSwapLimitDuration"
72+func keySwapUserSpentInPeriod (userAddress) = makeString(["%s%s", "swapUserSpentInPeriod", userAddress], SEP)
7373
7474
75-func keyUserLastQuickSwapHeight (userAddress) = makeString(["%s%s", "userLastQuickSwapHeight", userAddress], SEP)
76-
77-
78-func keyQuickSwapUserSpentInPeriod (userAddress) = makeString(["%s%s", "quickSwapUserSpentInPeriod", userAddress], SEP)
75+func keyUserLastSwapHeight (userAddress) = makeString(["%s%s", "userLastSwapHeight", userAddress], SEP)
7976
8077
8178 func keyBalanceWavesLockInterval () = "balance_waves_lock_interval"
8279
8380
8481 func keyBalanceNeutrinoLockInterval () = "balance_neutrino_lock_interval"
8582
8683
8784 func keySwapsTimeframe () = "swaps_timeframe"
8885
8986
9087 func keyPrice () = "price"
9188
9289
9390 func keyLockParamUserAmount (userAddress) = makeString(["%s%s%s", "paramByUser", userAddress, "amount"], SEP)
9491
9592
9693 func keyLockParamStartBlock (userAddress) = makeString(["%s%s%s", "paramByUser", userAddress, "start"], SEP)
9794
9895
9996 func keyHalfLife () = "%s__halfLife"
10097
10198
10299 func keyLockParamTotalAmount () = makeString(["%s%s", "stats", "activeTotalLocked"], SEP)
103100
104101
105102 func keyMinLockAmount () = "%s__minLockAmount"
106103
107104
108105 func keyMinWavesForNsbtBuy () = "min_waves_nsbt_buy"
109106
110107
111108 func keyMinNsbtSell () = "min_nsbt_sell"
112109
113110
114111 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
115112
116113
117114 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
118115
119116
120117 func getBoolOrFail (address,key) = valueOrErrorMessage(getBoolean(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
121118
122119
123120 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), scale8, scale6)
124121
125122
126123 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), scale6, scale8)
127124
128125
129126 func asAnyList (val) = match val {
130127 case valAnyList: List[Any] =>
131128 valAnyList
132129 case _ =>
133130 throw("fail to cast into List[Any]")
134131 }
135132
136133
137134 func asInt (val) = match val {
138135 case valInt: Int =>
139136 valInt
140137 case _ =>
141138 throw("fail to cast into Int")
142139 }
143140
144141
145142 func asString (val) = match val {
146143 case valStr: String =>
147144 valStr
148145 case _ =>
149146 throw("fail to cast into String")
150147 }
151148
152149
153150 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), scale18, toBigInt(origScaleMult))
154151
155152
156153 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), scale18))
157154
158155
159156 let neutrinoContract = addressFromStringValue(getStringOrFail(this, keyNeutrinoAddress()))
160157
161158 let controlContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyContolContract()))
162159
163160 let auctionContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyAuctionContract()))
164161
165162 let liquidationContract = getStringOrFail(neutrinoContract, keyLiquidationContractAddress())
166163
167164 let rpdContract = getStringOrFail(neutrinoContract, keyRPDContract())
168165
169166 let mathContract = addressFromStringValue(getStringOrFail(this, keyMathContract()))
170167
171168 let nsbtStakingContract = addressFromStringValue(getStringOrFail(this, keyNsbtLockContract()))
172169
173170 let neutrinoAssetIdString = getStringOrFail(neutrinoContract, keyNeutrinoAssetId())
174171
175172 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
176173
177174 let nsbtAssetIdStr = getStringValue(neutrinoContract, keyBondAssetId())
178175
179176 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
180177
181178 @Callable(i)
182179 func constructor (neutrinoAddress,nsbtLockAddress,mathAddress) = if ((i.caller != this))
183180 then throw("not authorized")
184181 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), StringEntry(keyNsbtLockContract(), nsbtLockAddress), StringEntry(keyMathContract(), mathAddress)]
185182
186183
187184
188185 @Callable(i)
189186 func neutrinoStatsREADONLY () = {
190187 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
191188 if ((neutrinoMetrics == neutrinoMetrics))
192189 then {
193190 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceREADONLY", nil, nil))
194191 if ((prices == prices))
195192 then {
196193 let currentPrice = asInt(neutrinoMetrics[0])
197194 let neutrinoLockedBalance = asInt(neutrinoMetrics[1])
198195 let wavesLockedBalance = asInt(neutrinoMetrics[2])
199196 let reservesInWaves = asInt(neutrinoMetrics[3])
200197 let reservesInUsdn = asInt(neutrinoMetrics[4])
201198 let neutrinoSupply = asInt(neutrinoMetrics[5])
202199 let surplus = asInt(neutrinoMetrics[6])
203200 let surplusPercent = asInt(neutrinoMetrics[7])
204201 let BR = asInt(neutrinoMetrics[8])
205202 let nsbtSupply = asInt(neutrinoMetrics[9])
206203 let maxNsbtSupply = asInt(neutrinoMetrics[10])
207204 let nsbt2usdnPrice = asInt(prices[0])
208205 let nsbt2wavesPrice = asInt(prices[1])
209206 let minWaves4NsbtBuy = getIntOrFail(auctionContract, keyMinWavesForNsbtBuy())
210207 let minNsbtsell = getIntOrFail(auctionContract, keyMinNsbtSell())
211208 let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
212209 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply), toString(maxNsbtSupply), toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), toString(minWaves4NsbtBuy), toString(minNsbtsell), toString(minNsbtLockAmt)], SEP))
213210 }
214211 else throw("Strict value is not equal to itself.")
215212 }
216213 else throw("Strict value is not equal to itself.")
217214 }
218215
219216
220217
221218 @Callable(i)
222219 func swapInfoREADONLY (userAddressStr) = {
223220 let currentPrice = getIntegerValue(controlContract, keyPrice())
224221 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
225222 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
226223 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
227224 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
228225 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
229226 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
230- let $t082019284 = if ((userAddressStr == ""))
227+ let $t081199132 = if ((userAddressStr == ""))
231228 then $Tuple4(0, 0, 0, 0)
232229 else {
233230 let userGNsbtAmount = valueOrElse(getInteger(nsbtStakingContract, keyLockParamUserAmount(userAddressStr)), 0)
234231 let usdnLmtMax = asInt(invoke(mathContract, "calcSwapLimitREADONLY", [userGNsbtAmount], nil))
235232 if ((usdnLmtMax == usdnLmtMax))
236233 then {
237- let quickSwapResetBlocks = valueOrElse(getInteger(neutrinoContract, keySwapsTimeframe()), 1440)
238- let lastQuickSwapBlock = valueOrElse(getInteger(neutrinoContract, keyUserLastQuickSwapHeight(userAddressStr)), 0)
239- let isNewQuickSwapPeriod = ((height - lastQuickSwapBlock) > quickSwapResetBlocks)
240- let quickSwapUserSpent = if (isNewQuickSwapPeriod)
234+ let swapResetBlocks = valueOrElse(getInteger(neutrinoContract, keySwapsTimeframe()), 1440)
235+ let lastSwapBlock = valueOrElse(getInteger(neutrinoContract, keyUserLastSwapHeight(userAddressStr)), 0)
236+ let isNewSwapPeriod = ((height - lastSwapBlock) > swapResetBlocks)
237+ let swapUserSpent = if (isNewSwapPeriod)
241238 then 0
242- else valueOrElse(getInteger(neutrinoContract, keyQuickSwapUserSpentInPeriod(userAddressStr)), 0)
243- let blcks2LmtReset = if (isNewQuickSwapPeriod)
239+ else valueOrElse(getInteger(neutrinoContract, keySwapUserSpentInPeriod(userAddressStr)), 0)
240+ let blcks2LmtReset = if (isNewSwapPeriod)
244241 then 0
245- else (quickSwapResetBlocks - (height - lastQuickSwapBlock))
242+ else (swapResetBlocks - (height - lastSwapBlock))
246243 let wavesLmtMax = convertNeutrinoToWaves(usdnLmtMax, currentPrice)
247- $Tuple4(quickSwapUserSpent, blcks2LmtReset, usdnLmtMax, wavesLmtMax)
244+ $Tuple4(swapUserSpent, blcks2LmtReset, usdnLmtMax, wavesLmtMax)
248245 }
249246 else throw("Strict value is not equal to itself.")
250247 }
251- let quickSwapUserSpent = $t082019284._1
252- let blocks2LimitReset = $t082019284._2
253- let maxUsdnLimit = $t082019284._3
254- let maxWavesLimit = $t082019284._4
255- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(usdnSwapDelayDuration), toString(wavesSwapDelayDuration), toString(blocks2LimitReset), toString(maxWavesLimit), toString(maxUsdnLimit), toString(quickSwapUserSpent)], SEP))
248+ let swapUserSpent = $t081199132._1
249+ let blocks2LimitReset = $t081199132._2
250+ let maxUsdnLimit = $t081199132._3
251+ let maxWavesLimit = $t081199132._4
252+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d%d", toString(currentPrice), toString(minWavesSwapAmt), toString(minUsdnSwapAmt), toString(waves2UsdnFee), toString(usdn2WavesFee), toString(usdnSwapDelayDuration), toString(wavesSwapDelayDuration), toString(blocks2LimitReset), toString(maxWavesLimit), toString(maxUsdnLimit), toString(swapUserSpent)], SEP))
256253 }
257254
258255
259256
260257 @Callable(i)
261258 func gnsbtInfoREADONLY (userAddressStrOrEmpty,additionalNsbtAmountOrZero) = {
262259 let gnsbtAmount = valueOrElse(getInteger(nsbtStakingContract, keyLockParamUserAmount(userAddressStrOrEmpty)), 0)
263260 let gnsbtTotal = valueOrElse(getInteger(nsbtStakingContract, keyLockParamTotalAmount()), 0)
264261 let gnsbtAmountNew = (gnsbtAmount + additionalNsbtAmountOrZero)
265262 let gnsbtTotalNew = (gnsbtTotal + additionalNsbtAmountOrZero)
266263 let gnsbtShare = if ((gnsbtTotal != 0))
267264 then fraction((gnsbtAmount * 100), scale12, gnsbtTotal)
268265 else 0
269266 let gnsbtShareNew = if ((gnsbtTotalNew != 0))
270267 then fraction((gnsbtAmountNew * 100), scale12, gnsbtTotalNew)
271268 else 0
272269 let maxUsdnLimit = 1000000000
273270 let maxWavesLimit = 10000000000
274271 let maxUsdnLimitNew = 1100000000
275272 let maxWavesLimitNew = 11000000000
276273 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOrEmpty], nil))
277274 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s", toString(gnsbtAmount), toString(gnsbtAmountNew), toString(gnsbtShare), toString(gnsbtShareNew), toString(maxUsdnLimit), toString(maxWavesLimit), toString(maxUsdnLimitNew), toString(maxWavesLimitNew), rewardInfo], SEP))
278275 }
279276
280277
281278
282279 @Callable(i)
283280 func buyNsbtREADONLY (wavesPay) = {
284281 let minWavesAmountNsbtBuy = getIntegerValue(auctionContract, keyMinWavesForNsbtBuy())
285282 if ((minWavesAmountNsbtBuy > wavesPay))
286283 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
287284 else {
288285 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
289286 if ((curveResult == curveResult))
290287 then {
291288 let nsbtAmount = asInt(curveResult[0])
292289 if ((0 >= nsbtAmount))
293290 then throw("nsbtAmount <= 0")
294291 else if ((wavesPay > (nsbtAmount * 9223372)))
295292 then throw(((("Nsbt2Waves price exceeds MAX_INT: " + toString(wavesPay)) + "/") + toString(nsbtAmount)))
296293 else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
297294 }
298295 else throw("Strict value is not equal to itself.")
299296 }
300297 }
301298
302299
303300
304301 @Callable(i)
305302 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
306303 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
307304 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2], nil))
308305 if ((h == h))
309306 then $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
310307 else throw("Strict value is not equal to itself.")
311308 }
312309
313310
314311
315312 @Callable(i)
316313 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
317314 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
318315 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
319316 if ((a == a))
320317 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
321318 else throw("Strict value is not equal to itself.")
322319 }
323320
324321
325322
326323 @Callable(i)
327324 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
328325 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
329326 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
330327 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
331328 if ((a == a))
332329 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
333330 else throw("Strict value is not equal to itself.")
334331 }
335332
336333

github/deemru/w8io/3ef1775 
107.63 ms