tx · CvxcfPbUSgpLdQa5TPLXJRMcqgi4hKjt8khPhLPtjpP6

3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi:  -0.04000000 Waves

2022.07.08 13:58 [2130636] smart account 3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi > SELF 0.00000000 Waves

{ "type": 13, "id": "CvxcfPbUSgpLdQa5TPLXJRMcqgi4hKjt8khPhLPtjpP6", "fee": 4000000, "feeAssetId": null, "timestamp": 1657277889478, "version": 1, "sender": "3Mxd5o7PwH76ZkN8zG4xwDLubEnbkaihKzi", "senderPublicKey": "BwVRZtTzoCigEsffCvQ9uo7WvkoBNNGVjX4nat5X5zyQ", "proofs": [ "35F46wumtfDBZGi1fqJj439zEcPm2Yvh2i9tfXdEcsyubF8bGmkF1WmPYPUfPgvbJ2HpkhbRnxvvZz9EUkG9eZ5x" ], "script": "base64:AAIFAAAAAAAAADwIAhIFCgMICAgSABIDCgEIEgQKAggBEgMKAQESBQoDCAEIEgYKBAEBAQESBAoCAQESBAoCAQgSABIAEgAAAABaAAAAAAtyZXZpc2lvbk51bQIAAAAAAAAAAAZFVUxFUjgAAAAAABAzxNYAAAAABU1VTFQ2AAAAAAAAD0JAAAAAAAZNVUxUWDYJAAE2AAAAAQAAAAAAAA9CQAAAAAAFTVVMVDgAAAAAAAX14QAAAAAABk1VTFRYOAkAATYAAAABAAAAAAAF9eEAAAAAAAZNVUxUMTIAAAAA6NSlEAAAAAAABk1VTFQxOAkAATYAAAABAA3gtrOnZAAAAAAAAANTRVACAAAAAl9fAAAAAAdXQVZFU0lECQACWQAAAAECAAAABVdBVkVTAAAAAA9uTWV0cmljSWR4UHJpY2UAAAAAAAAAAAAAAAAAG25NZXRyaWNJZHhVc2RuTG9ja2VkQmFsYW5jZQAAAAAAAAAAAQAAAAAcbk1ldHJpY0lkeFdhdmVzTG9ja2VkQmFsYW5jZQAAAAAAAAAAAgAAAAARbk1ldHJpY0lkeFJlc2VydmUAAAAAAAAAAAMAAAAAF25NZXRyaWNJZHhSZXNlcnZlSW5Vc2RuAAAAAAAAAAAEAAAAABRuTWV0cmljSWR4VXNkblN1cHBseQAAAAAAAAAABQAAAAARbk1ldHJpY0lkeFN1cnBsdXMAAAAAAAAAAAYAAAAAGG5NZXRyaWNJZHhTdXJwbHVzUGVyY2VudAAAAAAAAAAABwAAAAAMbk1ldHJpY0lkeEJSAAAAAAAAAAAIAAAAABRuTWV0cmljSWR4TnNidFN1cHBseQAAAAAAAAAACQAAAAAXbk1ldHJpY0lkeE1heE5zYnRTdXBwbHkAAAAAAAAAAAoAAAAAFG5NZXRyaWNJZHhTdXJmU3VwcGx5AAAAAAAAAAALAAAAAAxiRnVuY0lkeFN1cmYAAAAAAAAAAAAAAAAADWJGdW5jSWR4V2F2ZXMAAAAAAAAAAAEAAAAADGJGdW5jSWR4VXNkbgAAAAAAAAAAAgAAAAAUYkZ1bmNJZHhSZXNlcnZlU3RhcnQAAAAAAAAAAAMAAAAAE2JGdW5jSWR4U3VwcGx5U3RhcnQAAAAAAAAAAAQAAAAAD2JGdW5jSWR4QlJTdGFydAAAAAAAAAAABQAAAAASYkZ1bmNJZHhSZXNlcnZlRW5kAAAAAAAAAAAGAAAAABFiRnVuY0lkeFN1cHBseUVuZAAAAAAAAAAABwAAAAANYkZ1bmNJZHhCUkVuZAAAAAAAAAAACAAAAAARYkZ1bmNJZHhSZXN0V2F2ZXMAAAAAAAAAAAkAAAAAEGJGdW5jSWR4UmVzdFVzZG4AAAAAAAAAAAoAAAAAEmJGdW5jSWR4V2F2ZXNQcmljZQAAAAAAAAAACwEAAAASa2V5TmV1dHJpbm9BZGRyZXNzAAAAAAIAAAAdJXMlc19fY29uZmlnX19uZXV0cmlub0FkZHJlc3MBAAAAEmtleU5ldXRyaW5vQXNzZXRJZAAAAAACAAAAEW5ldXRyaW5vX2Fzc2V0X2lkAQAAAB1rZXlMaXF1aWRhdGlvbkNvbnRyYWN0QWRkcmVzcwAAAAACAAAAFGxpcXVpZGF0aW9uX2NvbnRyYWN0AQAAAA5rZXlSUERDb250cmFjdAAAAAACAAAADHJwZF9jb250cmFjdAEAAAASa2V5QXVjdGlvbkNvbnRyYWN0AAAAAAIAAAAQYXVjdGlvbl9jb250cmFjdAEAAAARa2V5Q29udG9sQ29udHJhY3QAAAAAAgAAABBjb250cm9sX2NvbnRyYWN0AQAAAA5rZXlOc2J0QXNzZXRJZAAAAAACAAAADWJvbmRfYXNzZXRfaWQBAAAADmtleVN1cmZBc3NldElkAAAAAAIAAAANc3VyZl9hc3NldF9pZAEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAADWJhbGFuY2VfbG9ja18BAAAAFWtleVdhdmVzTG9ja2VkQmFsYW5jZQAAAAAJAAEsAAAAAgkBAAAAEGtleUJhbGFuY2VMb2NrZWQAAAAAAgAAAAV3YXZlcwEAAAAYa2V5TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAAkAASwAAAACCQEAAAAQa2V5QmFsYW5jZUxvY2tlZAAAAAACAAAACG5ldXRyaW5vAQAAABVrZXlNaW5XYXZlc1N3YXBBbW91bnQAAAAAAgAAABVtaW5fd2F2ZXNfc3dhcF9hbW91bnQBAAAAGGtleU1pbk5ldXRyaW5vU3dhcEFtb3VudAAAAAACAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAIAAAAVd2F2ZXNPdXRfc3dhcF9mZWVQYXJ0AQAAABVrZXlOZXV0cmlub091dEZlZVBhcnQAAAAAAgAAABhuZXV0cmlub091dF9zd2FwX2ZlZVBhcnQBAAAAE2tleU5zYnRMb2NrQ29udHJhY3QAAAAAAgAAABQlc19fbnNidExvY2tDb250cmFjdAEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAIAAAAQJXNfX21hdGhDb250cmFjdAEAAAAba2V5QmFsYW5jZVdhdmVzTG9ja0ludGVydmFsAAAAAAIAAAAbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAQAAAB5rZXlCYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwAAAAAAgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwBAAAACGtleVByaWNlAAAAAAIAAAAFcHJpY2UBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABAAAAC3VzZXJBZGRyZXNzCQAEuQAAAAIJAARMAAAAAgIAAAAGJXMlcyVzCQAETAAAAAICAAAAC3BhcmFtQnlVc2VyCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAICAAAABXN0YXJ0BQAAAANuaWwFAAAAA1NFUAEAAAALa2V5SGFsZkxpZmUAAAAAAgAAAAwlc19faGFsZkxpZmUBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAAAgAAABElc19fbWluTG9ja0Ftb3VudAEAAAAVa2V5TWluV2F2ZXNGb3JOc2J0QnV5AAAAAAIAAAASbWluX3dhdmVzX25zYnRfYnV5AQAAAA5rZXlNaW5Oc2J0U2VsbAAAAAACAAAADW1pbl9uc2J0X3NlbGwBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAS5AAAAAgkABEwAAAACAgAAAAptYW5kYXRvcnkgCQAETAAAAAIJAAQlAAAAAQUAAAAHYWRkcmVzcwkABEwAAAACAgAAAAEuCQAETAAAAAIFAAAAA2tleQkABEwAAAACAgAAAA8gaXMgbm90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U2NhbGVNdWx0BQAAAAZNVUxUMTgAAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAASa2V5TmV1dHJpbm9BZGRyZXNzAAAAAAAAAAAPY29udHJvbENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEWtleUNvbnRvbENvbnRyYWN0AAAAAAAAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAEmtleUF1Y3Rpb25Db250cmFjdAAAAAAAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAda2V5TGlxdWlkYXRpb25Db250cmFjdEFkZHJlc3MAAAAAAAAAAAtycGRDb250cmFjdAkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAA5rZXlSUERDb250cmFjdAAAAAAAAAAADG1hdGhDb250cmFjdAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAAA9rZXlNYXRoQ29udHJhY3QAAAAAAAAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAEdGhpcwkBAAAAE2tleU5zYnRMb2NrQ29udHJhY3QAAAAAAAAAABVuZXV0cmlub0Fzc2V0SWRTdHJpbmcJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5TmV1dHJpbm9Bc3NldElkAAAAAAAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEFAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwAAAAAObnNidEFzc2V0SWRTdHIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAA5rZXlOc2J0QXNzZXRJZAAAAAAAAAAAC25zYnRBc3NldElkCQACWQAAAAEFAAAADm5zYnRBc3NldElkU3RyAAAAAA5zdXJmQXNzZXRJZFN0cgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAOa2V5U3VyZkFzc2V0SWQAAAAAAAAAAAtzdXJmQXNzZXRJZAkAAlkAAAABBQAAAA5zdXJmQXNzZXRJZFN0cgEAAAASbWluV2F2ZXNGb3JOc2J0QnV5AAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAIG1pbldhdmVzQW1vdW50TnNidEJ1eVNZU1JFQURPTkxZBQAAAANuaWwFAAAAA25pbAEAAAAObWluTnNidEZvclNlbGwAAAAACQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAAD2F1Y3Rpb25Db250cmFjdAIAAAAfbWluTnNidEFtb3VudEZvclNlbGxTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAAEm1pbldhdmVzRm9yU3VyZkJ1eQAAAAAJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAPYXVjdGlvbkNvbnRyYWN0AgAAACBtaW5XYXZlc0Ftb3VudFN1cmZCdXlTWVNSRUFET05MWQUAAAADbmlsBQAAAANuaWwBAAAAEW1pblVzZG5Gb3JTdXJmQnV5AAAAAAkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAAA9hdWN0aW9uQ29udHJhY3QCAAAAH21pblVzZG5BbW91bnRTdXJmQnV5U1lTUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsAQAAABRwcml2YXRlTnNidFByaWNlUkVTVAAAAAAEAAAABnByaWNlcwkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAACBjYWxjQ29udHJhY3ROc2J0UHJpY2VTWVNSRUFET05MWQkABEwAAAACAAAAAAAAAAAABQAAAANuaWwFAAAAA25pbAQAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAAABAAAAA9uc2J0MndhdmVzUHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAABCQAFFAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA5uc2J0MnVzZG5QcmljZQUAAAAObnNidDJ1c2RuUHJpY2UJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA9uc2J0MndhdmVzUHJpY2UFAAAAD25zYnQyd2F2ZXNQcmljZQAAAAwAAAABaQEAAAALY29uc3RydWN0b3IAAAADAAAAD25ldXRyaW5vQWRkcmVzcwAAAA9uc2J0TG9ja0FkZHJlc3MAAAALbWF0aEFkZHJlc3MDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAObm90IGF1dGhvcml6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleU5ldXRyaW5vQWRkcmVzcwAAAAAFAAAAD25ldXRyaW5vQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TnNidExvY2tDb250cmFjdAAAAAAFAAAAD25zYnRMb2NrQWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5TWF0aENvbnRyYWN0AAAAAAUAAAALbWF0aEFkZHJlc3MFAAAAA25pbAAAAAFpAQAAABVuZXV0cmlub1N0YXRzUkVBRE9OTFkAAAAABAAAAA9uZXV0cmlub01ldHJpY3MJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsBAAAAAZwcmljZXMJAQAAAAlhc0FueUxpc3QAAAABCQAD/AAAAAQFAAAADG1hdGhDb250cmFjdAIAAAAgY2FsY0NvbnRyYWN0TnNidFByaWNlU1lTUkVBRE9OTFkJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAADGN1cnJlbnRQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAD25NZXRyaWNJZHhQcmljZQQAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAbbk1ldHJpY0lkeFVzZG5Mb2NrZWRCYWxhbmNlBAAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABxuTWV0cmljSWR4V2F2ZXNMb2NrZWRCYWxhbmNlBAAAAA9yZXNlcnZlc0luV2F2ZXMJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABFuTWV0cmljSWR4UmVzZXJ2ZQQAAAAOcmVzZXJ2ZXNJblVzZG4JAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABduTWV0cmljSWR4UmVzZXJ2ZUluVXNkbgQAAAAObmV1dHJpbm9TdXBwbHkJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4VXNkblN1cHBseQQAAAAHc3VycGx1cwkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAEW5NZXRyaWNJZHhTdXJwbHVzBAAAAA5zdXJwbHVzUGVyY2VudAkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAGG5NZXRyaWNJZHhTdXJwbHVzUGVyY2VudAQAAAACQlIJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAAAxuTWV0cmljSWR4QlIEAAAACm5zYnRTdXBwbHkJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4TnNidFN1cHBseQQAAAANbWF4TnNidFN1cHBseQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAF25NZXRyaWNJZHhNYXhOc2J0U3VwcGx5BAAAAA5uc2J0MnVzZG5QcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAAEAAAAD25zYnQyd2F2ZXNQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAEEAAAAEG1pbldhdmVzNE5zYnRCdXkJAQAAABJtaW5XYXZlc0Zvck5zYnRCdXkAAAAABAAAAAttaW5Oc2J0c2VsbAkBAAAADm1pbk5zYnRGb3JTZWxsAAAAAAQAAAAObWluTnNidExvY2tBbXQJAQAAAAxnZXRJbnRPckZhaWwAAAACBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEAAAAQa2V5TWluTG9ja0Ftb3VudAAAAAAEAAAAEG1pbldhdmVzNFN1cmZCdXkJAQAAABJtaW5XYXZlc0ZvclN1cmZCdXkAAAAABAAAAA9taW5Vc2RuNFN1cmZCdXkJAQAAABFtaW5Vc2RuRm9yU3VyZkJ1eQAAAAAEAAAAEG1heFdhdmVzMkJ1eVN1cmYJAABlAAAAAgkAAGsAAAADBQAAAA5uZXV0cmlub1N1cHBseQUAAAAFTVVMVDgFAAAADGN1cnJlbnRQcmljZQUAAAAPcmVzZXJ2ZXNJbldhdmVzBAAAAA9tYXhVc2RuMkJ1eVN1cmYJAABlAAAAAgUAAAAObmV1dHJpbm9TdXBwbHkFAAAADnJlc2VydmVzSW5Vc2RuBAAAAA9zdXJmUHJpY2VJblVzZG4JAABrAAAAAwUAAAAPcmVzZXJ2ZXNJbldhdmVzBQAAAAxjdXJyZW50UHJpY2UFAAAADm5ldXRyaW5vU3VwcGx5BAAAABBzdXJmUHJpY2VJbldhdmVzCQAAawAAAAMFAAAAD3Jlc2VydmVzSW5XYXZlcwAAAAAAAAAAAQUAAAAObmV1dHJpbm9TdXBwbHkJAAUUAAAAAgUAAAADbmlsCQAEuQAAAAIJAARMAAAAAgIAAAAsJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAAAxjdXJyZW50UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAARMAAAAAgkAAaQAAAABBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UJAARMAAAAAgkAAaQAAAABBQAAAA9yZXNlcnZlc0luV2F2ZXMJAARMAAAAAgkAAaQAAAABBQAAAA5yZXNlcnZlc0luVXNkbgkABEwAAAACCQABpAAAAAEFAAAADm5ldXRyaW5vU3VwcGx5CQAETAAAAAIJAAGkAAAAAQUAAAAHc3VycGx1cwkABEwAAAACCQABpAAAAAEFAAAADnN1cnBsdXNQZXJjZW50CQAETAAAAAIJAAGkAAAAAQUAAAACQlIJAARMAAAAAgkAAaQAAAABBQAAAApuc2J0U3VwcGx5CQAETAAAAAIJAAGkAAAAAQUAAAANbWF4TnNidFN1cHBseQkABEwAAAACCQABpAAAAAEFAAAADm5zYnQydXNkblByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAPbnNidDJ3YXZlc1ByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAQbWluV2F2ZXM0TnNidEJ1eQkABEwAAAACCQABpAAAAAEFAAAAC21pbk5zYnRzZWxsCQAETAAAAAIJAAGkAAAAAQUAAAAObWluTnNidExvY2tBbXQJAARMAAAAAgkAAaQAAAABBQAAABBtaW5XYXZlczRTdXJmQnV5CQAETAAAAAIJAAGkAAAAAQUAAAAPbWluVXNkbjRTdXJmQnV5CQAETAAAAAIJAAGkAAAAAQUAAAAQbWF4V2F2ZXMyQnV5U3VyZgkABEwAAAACCQABpAAAAAEFAAAAD21heFVzZG4yQnV5U3VyZgkABEwAAAACCQABpAAAAAEFAAAAD3N1cmZQcmljZUluVXNkbgkABEwAAAACCQABpAAAAAEFAAAAEHN1cmZQcmljZUluV2F2ZXMFAAAAA25pbAUAAAADU0VQAAAAAWkBAAAAEHN3YXBJbmZvUkVBRE9OTFkAAAABAAAAEXVzZXJBZGRyZXNzU3RyT3B0BAAAAAxjdXJyZW50UHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAACGtleVByaWNlAAAAAAQAAAAPbWluV2F2ZXNTd2FwQW10CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAVa2V5TWluV2F2ZXNTd2FwQW1vdW50AAAAAAQAAAAObWluVXNkblN3YXBBbXQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABhrZXlNaW5OZXV0cmlub1N3YXBBbW91bnQAAAAABAAAAA13YXZlczJVc2RuRmVlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAASa2V5V2F2ZXNPdXRGZWVQYXJ0AAAAAAQAAAANdXNkbjJXYXZlc0ZlZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAFWtleU5ldXRyaW5vT3V0RmVlUGFydAAAAAAEAAAAFXVzZG5Td2FwRGVsYXlEdXJhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAkBAAAAHmtleUJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbAAAAAAEAAAAFndhdmVzU3dhcERlbGF5RHVyYXRpb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAABtrZXlCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWwAAAAABAAAAA0kdDAxMDQ1NDEwNjE4CQEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQkAA/wAAAAEBQAAABBuZXV0cmlub0NvbnRyYWN0AgAAABtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBQAAAANuaWwEAAAAEHN3YXBMaW1pdE1heFVzZG4IBQAAAA0kdDAxMDQ1NDEwNjE4AAAAAl8xBAAAABJzd2FwTGltaXRTcGVudFVzZG4IBQAAAA0kdDAxMDQ1NDEwNjE4AAAAAl8yBAAAAA5ibGNrczJMbXRSZXNldAgFAAAADSR0MDEwNDU0MTA2MTgAAAACXzMEAAAAEXN3YXBMaW1pdE1heFdhdmVzCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAAEHN3YXBMaW1pdE1heFVzZG4FAAAADGN1cnJlbnRQcmljZQkABRQAAAACBQAAAANuaWwJAAS5AAAAAgkABEwAAAACAgAAABYlZCVkJWQlZCVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAMY3VycmVudFByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAPbWluV2F2ZXNTd2FwQW10CQAETAAAAAIJAAGkAAAAAQUAAAAObWluVXNkblN3YXBBbXQJAARMAAAAAgkAAaQAAAABBQAAAA13YXZlczJVc2RuRmVlCQAETAAAAAIJAAGkAAAAAQUAAAANdXNkbjJXYXZlc0ZlZQkABEwAAAACCQABpAAAAAEFAAAAFXVzZG5Td2FwRGVsYXlEdXJhdGlvbgkABEwAAAACCQABpAAAAAEFAAAAFndhdmVzU3dhcERlbGF5RHVyYXRpb24JAARMAAAAAgkAAaQAAAABBQAAAA5ibGNrczJMbXRSZXNldAkABEwAAAACCQABpAAAAAEFAAAAEXN3YXBMaW1pdE1heFdhdmVzCQAETAAAAAIJAAGkAAAAAQUAAAAQc3dhcExpbWl0TWF4VXNkbgkABEwAAAACCQABpAAAAAEFAAAAEnN3YXBMaW1pdFNwZW50VXNkbgUAAAADbmlsBQAAAANTRVAAAAABaQEAAAARZ25zYnRJbmZvUkVBRE9OTFkAAAACAAAAEXVzZXJBZGRyZXNzU3RyT3B0AAAAC25zYnRBbXREaWZmBAAAAAxjdXJyZW50UHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAACGtleVByaWNlAAAAAAQAAAANJHQwMTE2MjQxMTgwNwkBAAAAEmFzU3dhcFBhcmFtc1NUUlVDVAAAAAEJAAP8AAAABAUAAAAQbmV1dHJpbm9Db250cmFjdAIAAAAbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZCQAETAAAAAIFAAAAEXVzZXJBZGRyZXNzU3RyT3B0CQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsBAAAAAxsaW1pdE1heFVzZG4IBQAAAA0kdDAxMTYyNDExODA3AAAAAl8xBAAAAApsaW1pdFNwZW50CAUAAAANJHQwMTE2MjQxMTgwNwAAAAJfMgQAAAAOYmxja3MyTG10UmVzZXQIBQAAAA0kdDAxMTYyNDExODA3AAAAAl8zBAAAAAhnbnNidEFtdAgFAAAADSR0MDExNjI0MTE4MDcAAAACXzQEAAAADWduc2J0QW10VG90YWwIBQAAAA0kdDAxMTYyNDExODA3AAAAAl81BAAAAA0kdDAxMTgxMTEyMDE5CQEAAAASYXNTd2FwUGFyYW1zU1RSVUNUAAAAAQkAA/wAAAAEBQAAABBuZXV0cmlub0NvbnRyYWN0AgAAABtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQJAARMAAAAAgUAAAALbnNidEFtdERpZmYFAAAAA25pbAUAAAADbmlsBAAAAA9saW1pdE1heFVzZG5ORVcIBQAAAA0kdDAxMTgxMTEyMDE5AAAAAl8xBAAAAA1saW1pdFNwZW50TkVXCAUAAAANJHQwMTE4MTExMjAxOQAAAAJfMgQAAAARYmxja3MyTG10UmVzZXRORVcIBQAAAA0kdDAxMTgxMTEyMDE5AAAAAl8zBAAAAAtnbnNidEFtdE5FVwgFAAAADSR0MDExODExMTIwMTkAAAACXzQEAAAAEGduc2J0QW10VG90YWxORVcIBQAAAA0kdDAxMTgxMTEyMDE5AAAAAl81BAAAAA1saW1pdE1heFdhdmVzCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAADGxpbWl0TWF4VXNkbgUAAAAMY3VycmVudFByaWNlBAAAABBsaW1pdE1heFdhdmVzTkVXCQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIFAAAAD2xpbWl0TWF4VXNkbk5FVwUAAAAMY3VycmVudFByaWNlBAAAAApnbnNidFNoYXJlAwkBAAAAAiE9AAAAAgUAAAANZ25zYnRBbXRUb3RhbAAAAAAAAAAAAAkAAGsAAAADCQAAaAAAAAIFAAAACGduc2J0QW10AAAAAAAAAABkBQAAAAZNVUxUMTIFAAAADWduc2J0QW10VG90YWwAAAAAAAAAAAAEAAAADWduc2J0U2hhcmVORVcDCQEAAAACIT0AAAACBQAAABBnbnNidEFtdFRvdGFsTkVXAAAAAAAAAAAACQAAawAAAAMJAABoAAAAAgUAAAALZ25zYnRBbXRORVcAAAAAAAAAAGQFAAAABk1VTFQxMgUAAAAQZ25zYnRBbXRUb3RhbE5FVwAAAAAAAAAAAAQAAAAKcmV3YXJkSW5mbwkBAAAACGFzU3RyaW5nAAAAAQkAA/wAAAAEBQAAABNuc2J0U3Rha2luZ0NvbnRyYWN0AgAAABh1bmNsYWltZWRSZXdhcmRzUkVBRE9OTFkJAARMAAAAAgUAAAARdXNlckFkZHJlc3NTdHJPcHQFAAAAA25pbAUAAAADbmlsBAAAAAduc2J0QW10BQAAAAhnbnNidEFtdAQAAAAKbnNidEFtdE5ldwUAAAALZ25zYnRBbXRORVcEAAAAEm5zYnRBbXRTdGFrZWRUb3RhbAUAAAANZ25zYnRBbXRUb3RhbAQAAAAVbnNidEFtdFN0YWtlZFRvdGFsTmV3BQAAABBnbnNidEFtdFRvdGFsTkVXBAAAAAhuc2J0RGF0YQkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAATbnNidFN0YWtpbmdDb250cmFjdAIAAAAWbnNidFN0YWtpbmdTWVNSRUFET05MWQkABEwAAAACBQAAABF1c2VyQWRkcmVzc1N0ck9wdAUAAAADbmlsBQAAAANuaWwEAAAAEmlzRW1wdHlOc2J0QmFsYW5jZQMJAAAAAAAAAgUAAAAIZ25zYnRBbXQAAAAAAAAAAAAJAAAAAAAAAgUAAAALZ25zYnRBbXRORVcAAAAAAAAAAAAHBAAAAAtzdGFydEhlaWdodAMFAAAAEmlzRW1wdHlOc2J0QmFsYW5jZQD//////////wkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAhuc2J0RGF0YQAAAAAAAAAAAgQAAAAOc3RhcnRUaW1lc3RhbXAJAQAAAAt0b1RpbWVzdGFtcAAAAAEFAAAAC3N0YXJ0SGVpZ2h0BAAAAAhoYWxmTGlmZQkBAAAADGdldEludE9yRmFpbAAAAAIFAAAAE25zYnRT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dAIAAAAaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFAAAAA25pbAUAAAADbmlsBAAAAAxjdXJyZW50UHJpY2UJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAAA9uTWV0cmljSWR4UHJpY2UEAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAG25NZXRyaWNJZHhVc2RuTG9ja2VkQmFsYW5jZQQAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAcbk1ldHJpY0lkeFdhdmVzTG9ja2VkQmFsYW5jZQQAAAAPcmVzZXJ2ZXNJbldhdmVzCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAARbk1ldHJpY0lkeFJlc2VydmUEAAAADnJlc2VydmVzSW5Vc2RuCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAXbk1ldHJpY0lkeFJlc2VydmVJblVzZG4EAAAADm5ldXRyaW5vU3VwcGx5CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAUbk1ldHJpY0lkeFVzZG5TdXBwbHkEAAAAB3N1cnBsdXMJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABFuTWV0cmljSWR4U3VycGx1cwQAAAAOc3VycGx1c1BlcmNlbnQJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABhuTWV0cmljSWR4U3VycGx1c1BlcmNlbnQEAAAAAkJSCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAMbk1ldHJpY0lkeEJSBAAAAApuc2J0U3VwcGx5CQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAUbk1ldHJpY0lkeE5zYnRTdXBwbHkEAAAADW5zYnRTdXBwbHlNYXgJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABduTWV0cmljSWR4TWF4TnNidFN1cHBseQQAAAAKc3VyZlN1cHBseQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAA9uZXV0cmlub01ldHJpY3MFAAAAFG5NZXRyaWNJZHhTdXJmU3VwcGx5CQAAAgAAAAEJAAS5AAAAAgkABEwAAAACAgAAABdyZXN1bHROZXV0cmlub1N0YXRlUkVTVAkABEwAAAACCQABpAAAAAEFAAAADGN1cnJlbnRQcmljZQkABEwAAAACCQABpAAAAAEFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQkABEwAAAACCQABpAAAAAEFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQkABEwAAAACCQABpAAAAAEFAAAAD3Jlc2VydmVzSW5XYXZlcwkABEwAAAACCQABpAAAAAEFAAAADnJlc2VydmVzSW5Vc2RuCQAETAAAAAIJAAGkAAAAAQUAAAAObmV1dHJpbm9TdXBwbHkJAARMAAAAAgkAAaQAAAABBQAAAAdzdXJwbHVzCQAETAAAAAIJAAGkAAAAAQUAAAAOc3VycGx1c1BlcmNlbnQJAARMAAAAAgkAAaQAAAABBQAAAAJCUgkABEwAAAACCQABpAAAAAEFAAAACm5zYnRTdXBwbHkJAARMAAAAAgkAAaQAAAABBQAAAA1uc2J0U3VwcGx5TWF4CQAETAAAAAIJAAGkAAAAAQUAAAAKc3VyZlN1cHBseQUAAAADbmlsAgAAAAJfXwAAAAFpAQAAAA1uc2J0UHJpY2VSRVNUAAAAAAQAAAAGcHJpY2VzCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAIGNhbGNDb250cmFjdE5zYnRQcmljZVNZU1JFQURPTkxZCQAETAAAAAIAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsBAAAAA5uc2J0MnVzZG5QcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAAEAAAAD25zYnQyd2F2ZXNQcmljZQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAEEAAAACHJlc3REYXRhCQAEuQAAAAIJAARMAAAAAgIAAAASc3RhcnROc2J0UHJpY2VSRVNUCQAETAAAAAIJAAGkAAAAAQUAAAAObnNidDJ1c2RuUHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAA9uc2J0MndhdmVzUHJpY2UJAARMAAAAAgIAAAAQZW5kTnNidFByaWNlUkVTVAUAAAADbmlsAgAAAAJfXwkAAAIAAAABBQAAAAhyZXN0RGF0YQAAAAFpAQAAAA1zdXJmUHJpY2VSRVNUAAAAAAQAAAAPbmV1dHJpbm9NZXRyaWNzCQEAAAAJYXNBbnlMaXN0AAAAAQkAA/wAAAAEBQAAAAxtYXRoQ29udHJhY3QCAAAAGmNhbGNOZXV0aW5vTWV0cmljc1JFQURPTkxZBQAAAANuaWwFAAAAA25pbAQAAAAMY3VycmVudFByaWNlCQEAAAAFYXNJbnQAAAABCQABkQAAAAIFAAAAD25ldXRyaW5vTWV0cmljcwUAAAAPbk1ldHJpY0lkeFByaWNlBAAAAA9yZXNlcnZlc0luV2F2ZXMJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABFuTWV0cmljSWR4UmVzZXJ2ZQQAAAAObmV1dHJpbm9TdXBwbHkJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAAPbmV1dHJpbm9NZXRyaWNzBQAAABRuTWV0cmljSWR4VXNkblN1cHBseQQAAAAPc3VyZlByaWNlSW5Vc2RuCQAAawAAAAMFAAAAD3Jlc2VydmVzSW5XYXZlcwUAAAAMY3VycmVudFByaWNlBQAAAA5uZXV0cmlub1N1cHBseQQAAAAQc3VyZlByaWNlSW5XYXZlcwkAAGsAAAADBQAAAA9yZXNlcnZlc0luV2F2ZXMFAAAABU1VTFQ4BQAAAA5uZXV0cmlub1N1cHBseQQAAAAIcmVzdERhdGEJAAS5AAAAAgkABEwAAAACAgAAABJzdGFydFN1cmZQcmljZVJFU1QJAARMAAAAAgkAAaQAAAABBQAAAA9zdXJmUHJpY2VJblVzZG4JAARMAAAAAgkAAaQAAAABBQAAABBzdXJmUHJpY2VJbldhdmVzCQAETAAAAAICAAAAEGVuZFN1cmZQcmljZVJFU1QFAAAAA25pbAIAAAACX18JAAACAAAAAQUAAAAIcmVzdERhdGEAAAAAaQdmgA==", "chainId": 84, "height": 2130636, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HBf8DqhJj8QtA7XJfe2qPz8jWzTUTxmoQ4WfswDrCRzF Next: 71b39dAfXm5YhFqTaAtnaynFDacMqTSarQ5nipDp6Cm3 Diff:
OldNewDifferences
410410 let price = asInt(surfResult[bFuncIdxWavesPrice])
411411 let priceSurf2Waves0 = fraction(br0, MULT8, price)
412412 let priceSurf2Waves1 = fraction(br1, MULT8, price)
413- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(surfAmount), toString(gNsbtAmount), toString(additionalLimit), toString(br0), toString(br1), toString(priceSurf2Waves0), toString(priceSurf2Waves1)], SEP))
413+ let votingPowerEta = 1000
414+ let restWaves = asInt(surfResult[bFuncIdxRestWaves])
415+ let restUsdn = asInt(surfResult[bFuncIdxRestUsdn])
416+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d", toString(surfAmount), toString(gNsbtAmount), toString(additionalLimit), toString(br0), toString(br1), toString(priceSurf2Waves0), toString(priceSurf2Waves1), toString(votingPowerEta), toString(restWaves), toString(restUsdn)], SEP))
414417 }
415418 }
416419 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let revisionNum = ""
55
66 let EULER8 = 271828182
77
88 let MULT6 = 1000000
99
1010 let MULTX6 = toBigInt(1000000)
1111
1212 let MULT8 = 100000000
1313
1414 let MULTX8 = toBigInt(100000000)
1515
1616 let MULT12 = 1000000000000
1717
1818 let MULT18 = toBigInt(1000000000000000000)
1919
2020 let SEP = "__"
2121
2222 let WAVESID = fromBase58String("WAVES")
2323
2424 let nMetricIdxPrice = 0
2525
2626 let nMetricIdxUsdnLockedBalance = 1
2727
2828 let nMetricIdxWavesLockedBalance = 2
2929
3030 let nMetricIdxReserve = 3
3131
3232 let nMetricIdxReserveInUsdn = 4
3333
3434 let nMetricIdxUsdnSupply = 5
3535
3636 let nMetricIdxSurplus = 6
3737
3838 let nMetricIdxSurplusPercent = 7
3939
4040 let nMetricIdxBR = 8
4141
4242 let nMetricIdxNsbtSupply = 9
4343
4444 let nMetricIdxMaxNsbtSupply = 10
4545
4646 let nMetricIdxSurfSupply = 11
4747
4848 let bFuncIdxSurf = 0
4949
5050 let bFuncIdxWaves = 1
5151
5252 let bFuncIdxUsdn = 2
5353
5454 let bFuncIdxReserveStart = 3
5555
5656 let bFuncIdxSupplyStart = 4
5757
5858 let bFuncIdxBRStart = 5
5959
6060 let bFuncIdxReserveEnd = 6
6161
6262 let bFuncIdxSupplyEnd = 7
6363
6464 let bFuncIdxBREnd = 8
6565
6666 let bFuncIdxRestWaves = 9
6767
6868 let bFuncIdxRestUsdn = 10
6969
7070 let bFuncIdxWavesPrice = 11
7171
7272 func keyNeutrinoAddress () = "%s%s__config__neutrinoAddress"
7373
7474
7575 func keyNeutrinoAssetId () = "neutrino_asset_id"
7676
7777
7878 func keyLiquidationContractAddress () = "liquidation_contract"
7979
8080
8181 func keyRPDContract () = "rpd_contract"
8282
8383
8484 func keyAuctionContract () = "auction_contract"
8585
8686
8787 func keyContolContract () = "control_contract"
8888
8989
9090 func keyNsbtAssetId () = "bond_asset_id"
9191
9292
9393 func keySurfAssetId () = "surf_asset_id"
9494
9595
9696 func keyBalanceLocked () = "balance_lock_"
9797
9898
9999 func keyWavesLockedBalance () = (keyBalanceLocked() + "waves")
100100
101101
102102 func keyNeutrinoLockedBalance () = (keyBalanceLocked() + "neutrino")
103103
104104
105105 func keyMinWavesSwapAmount () = "min_waves_swap_amount"
106106
107107
108108 func keyMinNeutrinoSwapAmount () = "min_neutrino_swap_amount"
109109
110110
111111 func keyWavesOutFeePart () = "wavesOut_swap_feePart"
112112
113113
114114 func keyNeutrinoOutFeePart () = "neutrinoOut_swap_feePart"
115115
116116
117117 func keyNsbtLockContract () = "%s__nsbtLockContract"
118118
119119
120120 func keyMathContract () = "%s__mathContract"
121121
122122
123123 func keyBalanceWavesLockInterval () = "balance_waves_lock_interval"
124124
125125
126126 func keyBalanceNeutrinoLockInterval () = "balance_neutrino_lock_interval"
127127
128128
129129 func keyPrice () = "price"
130130
131131
132132 func keyLockParamStartBlock (userAddress) = makeString(["%s%s%s", "paramByUser", userAddress, "start"], SEP)
133133
134134
135135 func keyHalfLife () = "%s__halfLife"
136136
137137
138138 func keyMinLockAmount () = "%s__minLockAmount"
139139
140140
141141 func keyMinWavesForNsbtBuy () = "min_waves_nsbt_buy"
142142
143143
144144 func keyMinNsbtSell () = "min_nsbt_sell"
145145
146146
147147 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
148148
149149
150150 func getIntOrFail (address,key) = valueOrErrorMessage(getInteger(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
151151
152152
153153 func getBoolOrFail (address,key) = valueOrErrorMessage(getBoolean(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
154154
155155
156156 func convertNeutrinoToWaves (amount,price) = fraction(amount, MULT8, price)
157157
158158
159159 func convertWavesToNeutrino (amount,price) = fraction(amount, price, MULT8)
160160
161161
162162 func asAnyList (val) = match val {
163163 case valAnyList: List[Any] =>
164164 valAnyList
165165 case _ =>
166166 throw("fail to cast into List[Any]")
167167 }
168168
169169
170170 func asInt (val) = match val {
171171 case valInt: Int =>
172172 valInt
173173 case _ =>
174174 throw("fail to cast into Int")
175175 }
176176
177177
178178 func asString (val) = match val {
179179 case valStr: String =>
180180 valStr
181181 case _ =>
182182 throw("fail to cast into String")
183183 }
184184
185185
186186 func asTuple2Ints (val) = match val {
187187 case v: (Int, Int) =>
188188 v
189189 case _ =>
190190 throw("fail to cast into Tuple2 ints")
191191 }
192192
193193
194194 func asSwapParamsSTRUCT (val) = match val {
195195 case struct: (Int, Int, Int, Int, Int) =>
196196 struct
197197 case _ =>
198198 throw("fail to cast into Int")
199199 }
200200
201201
202202 func toTimestamp (start) = if ((0 > start))
203203 then -1
204204 else match blockInfoByHeight(start) {
205205 case block: BlockInfo =>
206206 block.timestamp
207207 case _ =>
208208 -1
209209 }
210210
211211
212212 func toX18 (origVal,origScaleMult) = fraction(toBigInt(origVal), MULT18, toBigInt(origScaleMult))
213213
214214
215215 func fromX18 (val,resultScaleMult) = toInt(fraction(val, toBigInt(resultScaleMult), MULT18))
216216
217217
218218 let neutrinoContract = addressFromStringValue(getStringOrFail(this, keyNeutrinoAddress()))
219219
220220 let controlContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyContolContract()))
221221
222222 let auctionContract = addressFromStringValue(getStringOrFail(neutrinoContract, keyAuctionContract()))
223223
224224 let liquidationContract = getStringOrFail(neutrinoContract, keyLiquidationContractAddress())
225225
226226 let rpdContract = getStringOrFail(neutrinoContract, keyRPDContract())
227227
228228 let mathContract = addressFromStringValue(getStringOrFail(this, keyMathContract()))
229229
230230 let nsbtStakingContract = addressFromStringValue(getStringOrFail(this, keyNsbtLockContract()))
231231
232232 let neutrinoAssetIdString = getStringOrFail(neutrinoContract, keyNeutrinoAssetId())
233233
234234 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
235235
236236 let nsbtAssetIdStr = getStringValue(neutrinoContract, keyNsbtAssetId())
237237
238238 let nsbtAssetId = fromBase58String(nsbtAssetIdStr)
239239
240240 let surfAssetIdStr = getStringValue(auctionContract, keySurfAssetId())
241241
242242 let surfAssetId = fromBase58String(surfAssetIdStr)
243243
244244 func minWavesForNsbtBuy () = asInt(invoke(auctionContract, "minWavesAmountNsbtBuySYSREADONLY", nil, nil))
245245
246246
247247 func minNsbtForSell () = asInt(invoke(auctionContract, "minNsbtAmountForSellSYSREADONLY", nil, nil))
248248
249249
250250 func minWavesForSurfBuy () = asInt(invoke(auctionContract, "minWavesAmountSurfBuySYSREADONLY", nil, nil))
251251
252252
253253 func minUsdnForSurfBuy () = asInt(invoke(auctionContract, "minUsdnAmountSurfBuySYSREADONLY", nil, nil))
254254
255255
256256 func privateNsbtPriceREST () = {
257257 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
258258 let nsbt2usdnPrice = asInt(prices[0])
259259 let nsbt2wavesPrice = asInt(prices[1])
260260 $Tuple2(IntegerEntry("nsbt2usdnPrice", nsbt2usdnPrice), IntegerEntry("nsbt2wavesPrice", nsbt2wavesPrice))
261261 }
262262
263263
264264 @Callable(i)
265265 func constructor (neutrinoAddress,nsbtLockAddress,mathAddress) = if ((i.caller != this))
266266 then throw("not authorized")
267267 else [StringEntry(keyNeutrinoAddress(), neutrinoAddress), StringEntry(keyNsbtLockContract(), nsbtLockAddress), StringEntry(keyMathContract(), mathAddress)]
268268
269269
270270
271271 @Callable(i)
272272 func neutrinoStatsREADONLY () = {
273273 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
274274 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
275275 let currentPrice = asInt(neutrinoMetrics[nMetricIdxPrice])
276276 let neutrinoLockedBalance = asInt(neutrinoMetrics[nMetricIdxUsdnLockedBalance])
277277 let wavesLockedBalance = asInt(neutrinoMetrics[nMetricIdxWavesLockedBalance])
278278 let reservesInWaves = asInt(neutrinoMetrics[nMetricIdxReserve])
279279 let reservesInUsdn = asInt(neutrinoMetrics[nMetricIdxReserveInUsdn])
280280 let neutrinoSupply = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
281281 let surplus = asInt(neutrinoMetrics[nMetricIdxSurplus])
282282 let surplusPercent = asInt(neutrinoMetrics[nMetricIdxSurplusPercent])
283283 let BR = asInt(neutrinoMetrics[nMetricIdxBR])
284284 let nsbtSupply = asInt(neutrinoMetrics[nMetricIdxNsbtSupply])
285285 let maxNsbtSupply = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
286286 let nsbt2usdnPrice = asInt(prices[0])
287287 let nsbt2wavesPrice = asInt(prices[1])
288288 let minWaves4NsbtBuy = minWavesForNsbtBuy()
289289 let minNsbtsell = minNsbtForSell()
290290 let minNsbtLockAmt = getIntOrFail(nsbtStakingContract, keyMinLockAmount())
291291 let minWaves4SurfBuy = minWavesForSurfBuy()
292292 let minUsdn4SurfBuy = minUsdnForSurfBuy()
293293 let maxWaves2BuySurf = (fraction(neutrinoSupply, MULT8, currentPrice) - reservesInWaves)
294294 let maxUsdn2BuySurf = (neutrinoSupply - reservesInUsdn)
295295 let surfPriceInUsdn = fraction(reservesInWaves, currentPrice, neutrinoSupply)
296296 let surfPriceInWaves = fraction(reservesInWaves, 1, neutrinoSupply)
297297 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%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), toString(minWaves4SurfBuy), toString(minUsdn4SurfBuy), toString(maxWaves2BuySurf), toString(maxUsdn2BuySurf), toString(surfPriceInUsdn), toString(surfPriceInWaves)], SEP))
298298 }
299299
300300
301301
302302 @Callable(i)
303303 func swapInfoREADONLY (userAddressStrOpt) = {
304304 let currentPrice = getIntegerValue(controlContract, keyPrice())
305305 let minWavesSwapAmt = getIntegerValue(neutrinoContract, keyMinWavesSwapAmount())
306306 let minUsdnSwapAmt = getIntegerValue(neutrinoContract, keyMinNeutrinoSwapAmount())
307307 let waves2UsdnFee = getIntegerValue(neutrinoContract, keyWavesOutFeePart())
308308 let usdn2WavesFee = getIntegerValue(neutrinoContract, keyNeutrinoOutFeePart())
309309 let usdnSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceNeutrinoLockInterval())
310310 let wavesSwapDelayDuration = getIntegerValue(neutrinoContract, keyBalanceWavesLockInterval())
311311 let $t01045410618 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
312312 let swapLimitMaxUsdn = $t01045410618._1
313313 let swapLimitSpentUsdn = $t01045410618._2
314314 let blcks2LmtReset = $t01045410618._3
315315 let swapLimitMaxWaves = convertNeutrinoToWaves(swapLimitMaxUsdn, currentPrice)
316316 $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(blcks2LmtReset), toString(swapLimitMaxWaves), toString(swapLimitMaxUsdn), toString(swapLimitSpentUsdn)], SEP))
317317 }
318318
319319
320320
321321 @Callable(i)
322322 func gnsbtInfoREADONLY (userAddressStrOpt,nsbtAmtDiff) = {
323323 let currentPrice = getIntegerValue(controlContract, keyPrice())
324324 let $t01162411807 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))
325325 let limitMaxUsdn = $t01162411807._1
326326 let limitSpent = $t01162411807._2
327327 let blcks2LmtReset = $t01162411807._3
328328 let gnsbtAmt = $t01162411807._4
329329 let gnsbtAmtTotal = $t01162411807._5
330330 let $t01181112019 = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, nsbtAmtDiff], nil))
331331 let limitMaxUsdnNEW = $t01181112019._1
332332 let limitSpentNEW = $t01181112019._2
333333 let blcks2LmtResetNEW = $t01181112019._3
334334 let gnsbtAmtNEW = $t01181112019._4
335335 let gnsbtAmtTotalNEW = $t01181112019._5
336336 let limitMaxWaves = convertNeutrinoToWaves(limitMaxUsdn, currentPrice)
337337 let limitMaxWavesNEW = convertNeutrinoToWaves(limitMaxUsdnNEW, currentPrice)
338338 let gnsbtShare = if ((gnsbtAmtTotal != 0))
339339 then fraction((gnsbtAmt * 100), MULT12, gnsbtAmtTotal)
340340 else 0
341341 let gnsbtShareNEW = if ((gnsbtAmtTotalNEW != 0))
342342 then fraction((gnsbtAmtNEW * 100), MULT12, gnsbtAmtTotalNEW)
343343 else 0
344344 let rewardInfo = asString(invoke(nsbtStakingContract, "unclaimedRewardsREADONLY", [userAddressStrOpt], nil))
345345 let nsbtAmt = gnsbtAmt
346346 let nsbtAmtNew = gnsbtAmtNEW
347347 let nsbtAmtStakedTotal = gnsbtAmtTotal
348348 let nsbtAmtStakedTotalNew = gnsbtAmtTotalNEW
349349 let nsbtData = asAnyList(invoke(nsbtStakingContract, "nsbtStakingSYSREADONLY", [userAddressStrOpt], nil))
350350 let isEmptyNsbtBalance = if ((gnsbtAmt == 0))
351351 then (gnsbtAmtNEW == 0)
352352 else false
353353 let startHeight = if (isEmptyNsbtBalance)
354354 then -1
355355 else asInt(nsbtData[2])
356356 let startTimestamp = toTimestamp(startHeight)
357357 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
358358 let startHeightNew = if (isEmptyNsbtBalance)
359359 then -1
360360 else asInt(invoke(mathContract, "mergeStakesREADONLY", [gnsbtAmt, startHeight, gnsbtAmtNEW, height, halfLife], nil))
361361 let startTimestampNew = toTimestamp(startHeightNew)
362362 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%s%d%d%d%d%d%d%d%d", toString(gnsbtAmt), toString(gnsbtAmtNEW), toString(gnsbtShare), toString(gnsbtShareNEW), toString(limitMaxUsdn), toString(limitMaxWaves), toString(limitMaxUsdnNEW), toString(limitMaxWavesNEW), rewardInfo, toString(nsbtAmt), toString(nsbtAmtNew), toString(nsbtAmtStakedTotal), toString(nsbtAmtStakedTotalNew), toString(startHeight), toString(startTimestamp), toString(startHeightNew), toString(startTimestampNew)], SEP))
363363 }
364364
365365
366366
367367 @Callable(i)
368368 func buyNsbtREADONLY (wavesPay) = {
369369 let minWavesAmountNsbtBuy = minWavesForNsbtBuy()
370370 if ((minWavesAmountNsbtBuy > wavesPay))
371371 then throw((("min " + toString(minWavesAmountNsbtBuy)) + " waves expected"))
372372 else {
373373 let curveResult = asAnyList(invoke(mathContract, "curveFunctionREADONLY", [wavesPay], nil))
374374 if ((curveResult == curveResult))
375375 then {
376376 let nsbtAmount = asInt(curveResult[0])
377377 if ((0 >= nsbtAmount))
378378 then throw("nsbtAmount <= 0")
379379 else $Tuple2(nil, makeString(["%d", toString(nsbtAmount)], SEP))
380380 }
381381 else throw("Strict value is not equal to itself.")
382382 }
383383 }
384384
385385
386386
387387 @Callable(i)
388388 func buySurfREADONLY (userAddressStrOpt,amount,assetIdStr) = {
389389 let assetId = fromBase58String(assetIdStr)
390390 if (if ((assetId == WAVESID))
391391 then (minWavesForSurfBuy() > amount)
392392 else false)
393393 then throw((("min " + toString(minWavesForSurfBuy())) + " WAVES expected"))
394394 else if (if ((assetId == neutrinoAssetId))
395395 then (minUsdnForSurfBuy() > amount)
396396 else false)
397397 then throw((("min " + toString(minUsdnForSurfBuy())) + " USDN expected"))
398398 else {
399399 let surfResult = asAnyList(invoke(mathContract, "surfFunctionREADONLY", [amount, assetId], nil))
400400 let surfAmount = asInt(surfResult[bFuncIdxSurf])
401401 if ((0 >= surfAmount))
402402 then throw("surfAmount <= 0")
403403 else {
404404 let gNsbtAmount = (surfAmount / 60)
405405 let limitOld = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, 0], nil))._1
406406 let limitNew = asSwapParamsSTRUCT(invoke(neutrinoContract, "swapParamsByUserSYSREADONLY", [userAddressStrOpt, gNsbtAmount], nil))._1
407407 let additionalLimit = (limitNew - limitOld)
408408 let br0 = asInt(surfResult[bFuncIdxBRStart])
409409 let br1 = asInt(surfResult[bFuncIdxBREnd])
410410 let price = asInt(surfResult[bFuncIdxWavesPrice])
411411 let priceSurf2Waves0 = fraction(br0, MULT8, price)
412412 let priceSurf2Waves1 = fraction(br1, MULT8, price)
413- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(surfAmount), toString(gNsbtAmount), toString(additionalLimit), toString(br0), toString(br1), toString(priceSurf2Waves0), toString(priceSurf2Waves1)], SEP))
413+ let votingPowerEta = 1000
414+ let restWaves = asInt(surfResult[bFuncIdxRestWaves])
415+ let restUsdn = asInt(surfResult[bFuncIdxRestUsdn])
416+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d%d%d", toString(surfAmount), toString(gNsbtAmount), toString(additionalLimit), toString(br0), toString(br1), toString(priceSurf2Waves0), toString(priceSurf2Waves1), toString(votingPowerEta), toString(restWaves), toString(restUsdn)], SEP))
414417 }
415418 }
416419 }
417420
418421
419422
420423 @Callable(i)
421424 func mergedStakeREADONLY (amount1,height1,amount2,height2) = {
422425 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
423426 let h = asInt(invoke(mathContract, "mergeStakesREADONLY", [amount1, height1, amount2, height2, halfLife], nil))
424427 if ((h == h))
425428 then $Tuple2(nil, makeString(["%d%d", toString((amount1 + amount2)), toString(h)], SEP))
426429 else throw("Strict value is not equal to itself.")
427430 }
428431
429432
430433
431434 @Callable(i)
432435 func unstakeComissionAmountByHeightREADONLY (amount,startHeight) = {
433436 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
434437 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
435438 if ((a == a))
436439 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
437440 else throw("Strict value is not equal to itself.")
438441 }
439442
440443
441444
442445 @Callable(i)
443446 func unstakeComissionAmountByUserREADONLY (amount,userAddress) = {
444447 let halfLife = getIntOrFail(nsbtStakingContract, keyHalfLife())
445448 let startHeight = valueOrElse(getInteger(nsbtStakingContract, keyLockParamStartBlock(userAddress)), height)
446449 let a = asInt(invoke(mathContract, "getUnstakeComissionAmountREADONLY", [amount, startHeight, halfLife], nil))
447450 if ((a == a))
448451 then $Tuple2(nil, makeString(["%d", toString(a)], SEP))
449452 else throw("Strict value is not equal to itself.")
450453 }
451454
452455
453456
454457 @Callable(i)
455458 func neutrinoStateREST () = {
456459 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
457460 let currentPrice = asInt(neutrinoMetrics[nMetricIdxPrice])
458461 let neutrinoLockedBalance = asInt(neutrinoMetrics[nMetricIdxUsdnLockedBalance])
459462 let wavesLockedBalance = asInt(neutrinoMetrics[nMetricIdxWavesLockedBalance])
460463 let reservesInWaves = asInt(neutrinoMetrics[nMetricIdxReserve])
461464 let reservesInUsdn = asInt(neutrinoMetrics[nMetricIdxReserveInUsdn])
462465 let neutrinoSupply = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
463466 let surplus = asInt(neutrinoMetrics[nMetricIdxSurplus])
464467 let surplusPercent = asInt(neutrinoMetrics[nMetricIdxSurplusPercent])
465468 let BR = asInt(neutrinoMetrics[nMetricIdxBR])
466469 let nsbtSupply = asInt(neutrinoMetrics[nMetricIdxNsbtSupply])
467470 let nsbtSupplyMax = asInt(neutrinoMetrics[nMetricIdxMaxNsbtSupply])
468471 let surfSupply = asInt(neutrinoMetrics[nMetricIdxSurfSupply])
469472 throw(makeString(["resultNeutrinoStateREST", toString(currentPrice), toString(neutrinoLockedBalance), toString(wavesLockedBalance), toString(reservesInWaves), toString(reservesInUsdn), toString(neutrinoSupply), toString(surplus), toString(surplusPercent), toString(BR), toString(nsbtSupply), toString(nsbtSupplyMax), toString(surfSupply)], "__"))
470473 }
471474
472475
473476
474477 @Callable(i)
475478 func nsbtPriceREST () = {
476479 let prices = asAnyList(invoke(mathContract, "calcContractNsbtPriceSYSREADONLY", [0], nil))
477480 let nsbt2usdnPrice = asInt(prices[0])
478481 let nsbt2wavesPrice = asInt(prices[1])
479482 let restData = makeString(["startNsbtPriceREST", toString(nsbt2usdnPrice), toString(nsbt2wavesPrice), "endNsbtPriceREST"], "__")
480483 throw(restData)
481484 }
482485
483486
484487
485488 @Callable(i)
486489 func surfPriceREST () = {
487490 let neutrinoMetrics = asAnyList(invoke(mathContract, "calcNeutinoMetricsREADONLY", nil, nil))
488491 let currentPrice = asInt(neutrinoMetrics[nMetricIdxPrice])
489492 let reservesInWaves = asInt(neutrinoMetrics[nMetricIdxReserve])
490493 let neutrinoSupply = asInt(neutrinoMetrics[nMetricIdxUsdnSupply])
491494 let surfPriceInUsdn = fraction(reservesInWaves, currentPrice, neutrinoSupply)
492495 let surfPriceInWaves = fraction(reservesInWaves, MULT8, neutrinoSupply)
493496 let restData = makeString(["startSurfPriceREST", toString(surfPriceInUsdn), toString(surfPriceInWaves), "endSurfPriceREST"], "__")
494497 throw(restData)
495498 }
496499
497500

github/deemru/w8io/3ef1775 
81.47 ms