2020.09.07 06:36 [2230055] smart account 3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo > SELF 0.00000000 Waves

{ "type": 13, "id": "EJtVRoCpNbnXwpoTqVmdpvCMex7FWfecd5BogfAbUrKk", "fee": 14000000, "feeAssetId": null, "timestamp": 1599451253682, "version": 1, "sender": "3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo", "senderPublicKey": "BRnVwSVctnV8pge5vRpsJdWnkjWEJspFb6QvrmZvu3Ht", "proofs": [ "", "4twroXhrnrtm52AYEmasvuCCJWDsMNY7Agix6XwmfqHtWC81HLhod7gDRu3dFJ2oH5TGmuWDN6WbKerfFTQCfUWk", "", "D4B4vgByzneoskCNwVmze7Ce4crY8Gm4Mqe2Byxg9xixFibr1mVYguadmnzEgCkwb7KDdriSMgukRZDxSS3ZSRJ" ], "script": "base64:AAIEAAAAAAAAABUIAhIAEgASBAoCCAESABIDCgEIEgAAAABMAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkCAAAAAAEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5BwEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkAAAAAAAAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AgAAAAABAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQcAAAAAEHB1YktleUFkbWluc0xpc3QJAARMAAAAAgIAAAAsQkxFb2d1elBWS1ZUZlh4eFQzVzdScWY4YVVtMmdnQzlWZW1kMk1RYXdNMkcJAARMAAAAAgIAAAAsRldWZmZZcjJBTG1ITWVqWm0zV3FlTHo2U2R5bTNnTEZHdEpuNEtUd3lVNXgJAARMAAAAAgIAAAAsM1doMkxhV2NiNWdnN0sycFBjVzNFcDZFQXVSQnpZa0FncmRwdDQzalRERmEJAARMAAAAAgIAAAAsNVdSWEZTandjVGJOZktjSnM4WnFYbVNTV1lzU1ZKVXRNdk1xWmo1aEg0TmMFAAAAA25pbAAAAAAMU0VORFRYRVhQSVJFAAAAAAAAAAAeAAAAAA9MSVNUU1BMSVRTWU1CT0wCAAAAAV8AAAAADkxJU1REQVRBU1lNQk9MAgAAAAErAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAAAVQQVVMSQAAAAAAAA9CQAAAAAAIUFJJQ0VMRVQAAAAAAAAPQkAAAAAAEk5ldXRyaW5vQXNzZXRJZEtleQIAAAARbmV1dHJpbm9fYXNzZXRfaWQAAAAADkJvbmRBc3NldElkS2V5AgAAAA1ib25kX2Fzc2V0X2lkAAAAABJBdWN0aW9uQ29udHJhY3RLZXkCAAAAEGF1Y3Rpb25fY29udHJhY3QAAAAAFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkCAAAAFGxpcXVpZGF0aW9uX2NvbnRyYWN0AAAAAA5SUERDb250cmFjdEtleQIAAAAMcnBkX2NvbnRyYWN0AAAAABFDb250b2xDb250cmFjdEtleQIAAAAQY29udHJvbF9jb250cmFjdAAAAAAbQmFsYW5jZVdhdmVzTG9ja0ludGVydmFsS2V5AgAAABtiYWxhbmNlX3dhdmVzX2xvY2tfaW50ZXJ2YWwAAAAAHkJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbEtleQIAAAAeYmFsYW5jZV9uZXV0cmlub19sb2NrX2ludGVydmFsAAAAABVNaW5XYXZlc1N3YXBBbW91bnRLZXkCAAAAFW1pbl93YXZlc19zd2FwX2Ftb3VudAAAAAAYTWluTmV1dHJpbm9Td2FwQW1vdW50S2V5AgAAABhtaW5fbmV1dHJpbm9fc3dhcF9hbW91bnQAAAAAG05vZGVPcmFjbGVQcm92aWRlclB1YktleUtleQIAAAAUbm9kZV9vcmFjbGVfcHJvdmlkZXIAAAAADVJQREJhbGFuY2VLZXkCAAAAC3JwZF9iYWxhbmNlAQAAABhnZXRSUERDb250cmFjdEJhbGFuY2VLZXkAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACBQAAAA1SUERCYWxhbmNlS2V5AgAAAAFfCQACWAAAAAEFAAAAB2Fzc2V0SWQAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAANUHJpY2VJbmRleEtleQIAAAALcHJpY2VfaW5kZXgAAAAADElzQmxvY2tlZEtleQIAAAAKaXNfYmxvY2tlZAEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQAAAAVibG9jawkAASwAAAACCQABLAAAAAIFAAAACFByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABAAAABWluZGV4CQABLAAAAAIJAAEsAAAAAgUAAAANUHJpY2VJbmRleEtleQIAAAABXwkAAaQAAAABBQAAAAVpbmRleAAAAAARQmFsYW5jZUxvY2tlZGtLZXkCAAAADWJhbGFuY2VfbG9ja18AAAAAFVdhdmVzTG9ja2VkQmFsYW5jZUtleQkAASwAAAACBQAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAAFd2F2ZXMAAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQkAASwAAAACBQAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAAIbmV1dHJpbm8BAAAAIGdldFJQRFNuYXBzaG90Q29udHJhY3RCYWxhbmNlS2V5AAAAAgAAAAVjb3VudAAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADVJQREJhbGFuY2VLZXkCAAAAAV8JAAJYAAAAAQUAAAAHYXNzZXRJZAIAAAABXwkAAaQAAAABBQAAAAVjb3VudAEAAAAdZ2V0Q2FuY2VsTGVhc2VUeFJlc2VydmVGZWVLZXkAAAABAAAABGhhc2gJAAEsAAAAAgkAASwAAAACAgAAABtjYW5jZWxfbGVhc2VfdHhfcmVzZXJ2ZV9mZWUCAAAAAV8FAAAABGhhc2gBAAAAGGdldFdhdmVzTG9ja2VkQmFsYW5jZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkCAAAAAV8FAAAABW93bmVyAQAAABtnZXROZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkAAAABAAAABW93bmVyCQABLAAAAAIJAAEsAAAAAgUAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5AgAAAAFfBQAAAAVvd25lcgEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQAAAAVvd25lcgkAASwAAAACAgAAABViYWxhbmNlX3VubG9ja19ibG9ja18FAAAABW93bmVyAQAAAA9nZXRSUERQcm9maXRLZXkAAAABAAAABWNvdW50CQABLAAAAAIJAAEsAAAAAgIAAAAKcnBkX3Byb2ZpdAIAAAABXwkAAaQAAAABBQAAAAVjb3VudAEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAIAAAAGYW1vdW50AAAABXByaWNlCQAAawAAAAMJAABrAAAAAwUAAAAGYW1vdW50BQAAAAhQUklDRUxFVAUAAAAFcHJpY2UFAAAAB1dBVkVMRVQFAAAABVBBVUxJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwkAAGsAAAADBQAAAAZhbW91bnQFAAAABXByaWNlBQAAAAhQUklDRUxFVAUAAAAFUEFVTEkFAAAAB1dBVkVMRVQBAAAAEmNvbnZlcnRXYXZlc1RvQm9uZAAAAAIAAAAGYW1vdW50AAAABXByaWNlCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABAAAACWpzb25BcnJheQkABLUAAAACBQAAAAlqc29uQXJyYXkCAAAAASwAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkAAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEkF1Y3Rpb25Db250cmFjdEtleQAAAAALcnBkQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAADlJQRENvbnRyYWN0S2V5AAAAAA9jb250cm9sQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEUNvbnRvbENvbnRyYWN0S2V5AAAAAApwcmljZUluZGV4CQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0BQAAAA1QcmljZUluZGV4S2V5AAAAAAlpc0Jsb2NrZWQJAQAAABZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0BQAAAAxJc0Jsb2NrZWRLZXkAAAAAGG5vZGVPcmFjbGVQcm92aWRlclB1YktleQkAAlkAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkAAAAAGGJhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAbQmFsYW5jZVdhdmVzTG9ja0ludGVydmFsS2V5AAAAABtiYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAHkJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbEtleQAAAAASbWluV2F2ZXNTd2FwQW1vdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVNaW5XYXZlc1N3YXBBbW91bnRLZXkAAAAAFW1pbk5ldXRyaW5vU3dhcEFtb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAYTWluTmV1dHJpbm9Td2FwQW1vdW50S2V5AAAAAAtib25kQXNzZXRJZAkAAlkAAAABAgAAACw2blNwVnlOSDd5TTY5ZWc0NDZ3clFSOTRpcGJiY21aTVUxRU5Qd2FuQzk3ZwAAAAAVZGVwcmVjYXRlZEJvbmRBc3NldElkCQACWQAAAAECAAAALDk3NWFrWkJmbk1qNTEzVTdNWmFIS3pRcm1zRXg1YUUzd2RXS1RySEJoYmpGAAAAABBuZXV0cmlub0NvbnRyYWN0BQAAAAR0aGlzAAAAAAxjdXJyZW50UHJpY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QFAAAACFByaWNlS2V5AAAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAAAB3Jlc2VydmUJAABlAAAAAggJAAPvAAAAAQUAAAAQbmV1dHJpbm9Db250cmFjdAAAAAdyZWd1bGFyBQAAABJ3YXZlc0xvY2tlZEJhbGFuY2UAAAAADm5ldXRyaW5vU3VwcGx5CQAAZQAAAAIJAABlAAAAAgkAAGQAAAACBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAAAAAhxdWFudGl0eQkAA/AAAAACBQAAABBuZXV0cmlub0NvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQJAAPwAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAATbGlxdWlkYXRpb25Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkAAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAHcmVzZXJ2ZQUAAAAMY3VycmVudFByaWNlBQAAAA5uZXV0cmlub1N1cHBseQAAAAAHZGVmaWNpdAkAAGUAAAACBQAAAA5uZXV0cmlub1N1cHBseQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAdyZXNlcnZlBQAAAAxjdXJyZW50UHJpY2UBAAAAG2NoZWNrSXNWYWxpZE1pblNwb25zb3JlZEZlZQAAAAEAAAACdHgEAAAADk1JTlRSQU5TRkVSRkVFAAAAAAAAAYagBAAAABZTcG9uc29yZWRGZWVVcHBlckJvdW5kAAAAAAAAAAPoBAAAAA9yZWFsTmV1dHJpbm9GZWUJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAOTUlOVFJBTlNGRVJGRUUFAAAADGN1cnJlbnRQcmljZQQAAAAObWluTmV1dHJpbm9GZWUJAABoAAAAAgUAAAAPcmVhbE5ldXRyaW5vRmVlAAAAAAAAAAACBAAAAA5tYXhOZXV0cmlub0ZlZQkAAGsAAAADBQAAAA9yZWFsTmV1dHJpbm9GZWUFAAAAFlNwb25zb3JlZEZlZVVwcGVyQm91bmQAAAAAAAAAAGQEAAAACGlucHV0RmVlCQEAAAAFdmFsdWUAAAABCAUAAAACdHgAAAAUbWluU3BvbnNvcmVkQXNzZXRGZWUDAwkAAGcAAAACBQAAAAhpbnB1dEZlZQUAAAAObWluTmV1dHJpbm9GZWUJAABnAAAAAgUAAAAObWF4TmV1dHJpbm9GZWUFAAAACGlucHV0RmVlBwkAAAAAAAACCAUAAAACdHgAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkBwEAAAAVZ2V0UlBEQ29udHJhY3RCYWxhbmNlAAAAAQAAAAdhc3NldElkCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAALcnBkQ29udHJhY3QJAQAAABhnZXRSUERDb250cmFjdEJhbGFuY2VLZXkAAAABBQAAAAdhc3NldElkAQAAAA9nZXRQcmljZUhpc3RvcnkAAAABAAAABWJsb2NrCQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAASZ2V0UHJpY2VIaXN0b3J5S2V5AAAAAQUAAAAFYmxvY2sBAAAAFWdldEhlaWdodFByaWNlQnlJbmRleAAAAAEAAAAFaW5kZXgJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QJAQAAABhnZXRIZWlnaHRQcmljZUJ5SW5kZXhLZXkAAAABBQAAAAVpbmRleAEAAAAaZ2V0Q2FuY2VsTGVhc2VUeFJlc2VydmVGZWUAAAABAAAABGhhc2gJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAB1nZXRDYW5jZWxMZWFzZVR4UmVzZXJ2ZUZlZUtleQAAAAEFAAAABGhhc2gBAAAAFWdldFdhdmVzTG9ja2VkQmFsYW5jZQAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABhnZXRXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAVvd25lcgEAAAAYZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAG2dldE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAEFAAAABW93bmVyAQAAABVnZXRVbmxvY2tCYWxhbmNlQmxvY2sAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQUAAAAFb3duZXIBAAAADGdldFJQRFByb2ZpdAAAAAEAAAAFY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9nZXRSUERQcm9maXRLZXkAAAABBQAAAAVjb3VudAAAAAYAAAABaQEAAAATc3dhcFdhdmVzVG9OZXV0cmlubwAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAZgAAAAIFAAAAEm1pbldhdmVzU3dhcEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAQFRoZSBzcGVjaWZpZWQgV2F2ZXMgYW1vdW50IGlzIGxlc3MgdGhhbiB0aGUgcmVxdWlyZWQgbWluaW11bSBvZiAJAAGkAAAAAQUAAAASbWluV2F2ZXNTd2FwQW1vdW50AgAAAAogd2F2ZWxldHMuAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAAClPbmx5IFdhdmVzIHRva2VuIGlzIGFsbG93ZWQgZm9yIHN3YXBwaW5nLgMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAFpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTiBhY3Rpb25zIHVudGlsbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDCQAAZgAAAAIJAQAAABVnZXRVbmxvY2tCYWxhbmNlQmxvY2sAAAABBQAAAAdhY2NvdW50BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAABmF3YWl0IAkAAaQAAAABCQAAZQAAAAIJAQAAABVnZXRVbmxvY2tCYWxhbmNlQmxvY2sAAAABBQAAAAdhY2NvdW50BQAAAAZoZWlnaHQCAAAAByBibG9ja3MDAwkBAAAAAiE9AAAAAgkBAAAAGGdldE5ldXRyaW5vTG9ja2VkQmFsYW5jZQAAAAEFAAAAB2FjY291bnQAAAAAAAAAAAAGCQEAAAACIT0AAAACCQEAAAAVZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAACJwbGVhc2Ugd2l0aGRyYXcgbG9ja2VkIGZ1bmRzIGZpcnN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAYZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAHYWNjb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABBQAAAAdhY2NvdW50CQAAZAAAAAIFAAAABmhlaWdodAUAAAAYYmFsYW5jZVdhdmVzTG9ja0ludGVydmFsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkJAABkAAAAAgUAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCAUAAAADcG10AAAABmFtb3VudAUAAAADbmlsAAAAAWkBAAAAE3N3YXBOZXV0cmlub1RvV2F2ZXMAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACBQAAABVtaW5OZXV0cmlub1N3YXBBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAENUaGUgc3BlY2lmaWVkIE5ldXRyaW5vIGFtb3VudCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVpcmVkIG1pbmltdW0gb2YgCQABpAAAAAEFAAAAFW1pbk5ldXRyaW5vU3dhcEFtb3VudAIAAAAQIE5ldXRyaW5vIGNlbnRzLgMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAGFUaGUgY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04uIFBsZWFzZSB3YWl0IGZvciByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMuAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAA6T25seSBhcHByb3ByaWF0ZSBOZXV0cmlubyB0b2tlbnMgYXJlIGFsbG93ZWQgZm9yIHN3YXBwaW5nLgMJAABmAAAAAgkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGYXdhaXQgCQABpAAAAAEJAABlAAAAAgkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQFAAAABmhlaWdodAIAAAAHIGJsb2NrcwMDCQEAAAACIT0AAAACCQEAAAAYZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAYJAQAAAAIhPQAAAAIJAQAAABVnZXRXYXZlc0xvY2tlZEJhbGFuY2UAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAACQAAAgAAAAECAAAAInBsZWFzZSB3aXRoZHJhdyBsb2NrZWQgZnVuZHMgZmlyc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABtnZXROZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAdhY2NvdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQAAAAEFAAAAB2FjY291bnQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABtiYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQkAAGQAAAACBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UIBQAAAANwbXQAAAAGYW1vdW50BQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAACAAAAB2FjY291bnQAAAAFaW5kZXgEAAAADHVubG9ja0hlaWdodAkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQEAAAAFnVzZXJXYXZlc0xvY2tlZEJhbGFuY2UJAQAAABVnZXRXYXZlc0xvY2tlZEJhbGFuY2UAAAABBQAAAAdhY2NvdW50BAAAABl1c2VyTmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAAYZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAQAAAALaW5kZXhIZWlnaHQJAQAAABVnZXRIZWlnaHRQcmljZUJ5SW5kZXgAAAABBQAAAAVpbmRleAQAAAAPcHJldkluZGV4SGVpZ2h0CQEAAAAVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AAAAAQkAAGUAAAACBQAAAAVpbmRleAAAAAAAAAAAAQQAAAAMcHJpY2VCeUluZGV4CQEAAAAPZ2V0UHJpY2VIaXN0b3J5AAAAAQUAAAALaW5kZXhIZWlnaHQEAAAABnNwcmVhZAAAAAAAAAAAAAQAAAAObmV1dHJpbm9BbW91bnQJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAWdXNlcldhdmVzTG9ja2VkQmFsYW5jZQkAAGUAAAACBQAAAAxwcmljZUJ5SW5kZXgFAAAABnNwcmVhZAQAAAALd2F2ZXNBbW91bnQJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAZdXNlck5ldXRyaW5vTG9ja2VkQmFsYW5jZQkAAGQAAAACBQAAAAxwcmljZUJ5SW5kZXgFAAAABnNwcmVhZAMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAFpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTiBhY3Rpb25zIHVudGlsbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDCQAAZgAAAAIFAAAADHVubG9ja0hlaWdodAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFwbGVhc2Ugd2FpdCBmb3I6IAkAAaQAAAABBQAAAAx1bmxvY2tIZWlnaHQCAAAAJSBibG9jayBoZWlnaHQgdG8gd2l0aGRyYXcgV0FWRVMgZnVuZHMDAwMJAABmAAAAAgUAAAAFaW5kZXgFAAAACnByaWNlSW5kZXgGCQAAZgAAAAIFAAAADHVubG9ja0hlaWdodAUAAAALaW5kZXhIZWlnaHQGAwkBAAAAAiE9AAAAAgUAAAAPcHJldkluZGV4SGVpZ2h0AAAAAAAAAAAACQAAZwAAAAIFAAAAD3ByZXZJbmRleEhlaWdodAUAAAAMdW5sb2NrSGVpZ2h0BwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACNpbnZhbGlkIHByaWNlIGhpc3RvcnkgaW5kZXg6IGluZGV4PQkAAaQAAAABBQAAAAVpbmRleAIAAAAMIHByaWNlSW5kZXg9CQABpAAAAAEFAAAACnByaWNlSW5kZXgCAAAADSBpbmRleEhlaWdodD0JAAGkAAAAAQUAAAALaW5kZXhIZWlnaHQCAAAADiB1bmxvY2tIZWlnaHQ9CQABpAAAAAEFAAAADHVubG9ja0hlaWdodAIAAAARIHByZXZJbmRleEhlaWdodD0JAAGkAAAAAQUAAAAPcHJldkluZGV4SGVpZ2h0AwMJAABnAAAAAgAAAAAAAAAAAAUAAAAObmV1dHJpbm9BbW91bnQJAABnAAAAAgAAAAAAAAAAAAUAAAALd2F2ZXNBbW91bnQHCQAAAgAAAAECAAAAE2JhbGFuY2UgZXF1YWxzIHplcm8JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABhnZXRXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAbZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQAAZQAAAAIFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQUAAAAWdXNlcldhdmVzTG9ja2VkQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5CQAAZQAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQUAAAAZdXNlck5ldXRyaW5vTG9ja2VkQmFsYW5jZQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhY2NvdW50BQAAAAt3YXZlc0Ftb3VudAUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhY2NvdW50BQAAAA5uZXV0cmlub0Ftb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAABaQEAAAARdHJhbnNmZXJUb0F1Y3Rpb24AAAAABAAAAA9hdWN0aW9uTkJBbW91bnQJAABlAAAAAgUAAAAObmV1dHJpbm9TdXBwbHkJAAPwAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAPYXVjdGlvbkNvbnRyYWN0BQAAAAtib25kQXNzZXRJZAQAAAAWc3VycGx1c1dpdGhMaXF1aWRhdGlvbgkAAGUAAAACBQAAAAdzdXJwbHVzCQAD8AAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QFAAAAD25ldXRyaW5vQXNzZXRJZAMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAFpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5D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", "chainId": 87, "height": 2230055, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H58rwpD9UBuLoJLk7LGBabzZrA6hakkjyAAMM97CMsXk Next: GrqRiidEKsesx7Awz59GX61TbACe9KkkQEmWewFFhjxc Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 3 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getNumberByKey (key) = match getInteger(this, key) {
5- case a: Int =>
6- a
7- case _ =>
8- 0
9-}
4+func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
105
116
12-func getStringByKey (key) = match getString(this, key) {
13- case a: String =>
14- a
15- case _ =>
16- ""
17-}
7+func getStringByKey (key) = valueOrElse(getString(this, key), "")
188
199
20-func getBoolByKey (key) = match getBoolean(this, key) {
21- case a: Boolean =>
22- a
23- case _ =>
24- false
25-}
10+func getBoolByKey (key) = valueOrElse(getBoolean(this, key), false)
2611
2712
28-func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
29- case a: Int =>
30- a
31- case _ =>
32- 0
33-}
13+func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(addressFromStringValue(address), key), 0)
3414
3515
36-func getStringByAddressAndKey (address,key) = match getString(addressFromStringValue(address), key) {
37- case a: String =>
38- a
39- case _ =>
40- ""
41-}
16+func getStringByAddressAndKey (address,key) = valueOrElse(getString(addressFromStringValue(address), key), "")
4217
4318
44-func getBoolByAddressAndKey (address,key) = match getBoolean(addressFromStringValue(address), key) {
45- case a: Boolean =>
46- a
47- case _ =>
48- false
49-}
19+func getBoolByAddressAndKey (address,key) = valueOrElse(getBoolean(addressFromStringValue(address), key), false)
5020
5121
5222 let pubKeyAdminsList = ["BLEoguzPVKVTfXxxT3W7Rqf8aUm2ggC9Vemd2MQawM2G", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
176146
177147 let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
178148
179-let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
149+let reserve = (wavesBalance(neutrinoContract).regular - wavesLockedBalance)
180150
181-let neutrinoSupply = (((neutrinoLockedBalance + extract(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
151+let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
182152
183153 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
184154
190160 let realNeutrinoFee = convertWavesToNeutrino(MINTRANSFERFEE, currentPrice)
191161 let minNeutrinoFee = (realNeutrinoFee * 2)
192162 let maxNeutrinoFee = fraction(realNeutrinoFee, SponsoredFeeUpperBound, 100)
193- let inputFee = extract(tx.minSponsoredAssetFee)
163+ let inputFee = value(tx.minSponsoredAssetFee)
194164 if (if ((inputFee >= minNeutrinoFee))
195165 then (maxNeutrinoFee >= inputFee)
196166 else false)
225195
226196 @Callable(i)
227197 func swapWavesToNeutrino () = {
228- let pmt = extract(i.payment)
198+ let pmt = value(i.payments[0])
229199 let account = toString(i.caller)
230200 if ((minWavesSwapAmount > pmt.amount))
231201 then throw((("The specified Waves amount is less than the required minimum of " + toString(minWavesSwapAmount)) + " wavelets."))
239209 then true
240210 else (getWavesLockedBalance(account) != 0))
241211 then throw("please withdraw locked funds first")
242- else WriteSet([DataEntry(getWavesLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceWavesLockInterval)), DataEntry(WavesLockedBalanceKey, (wavesLockedBalance + pmt.amount))])
212+ else [IntegerEntry(getWavesLockedBalanceKey(account), pmt.amount), IntegerEntry(getBalanceUnlockBlockKey(account), (height + balanceWavesLockInterval)), IntegerEntry(WavesLockedBalanceKey, (wavesLockedBalance + pmt.amount))]
243213 }
244214
245215
246216
247217 @Callable(i)
248218 func swapNeutrinoToWaves () = {
249- let pmt = extract(i.payment)
219+ let pmt = value(i.payments[0])
250220 let account = toString(i.caller)
251221 if ((minNeutrinoSwapAmount > pmt.amount))
252222 then throw((("The specified Neutrino amount is less than the required minimum of " + toString(minNeutrinoSwapAmount)) + " Neutrino cents."))
260230 then true
261231 else (getWavesLockedBalance(account) != 0))
262232 then throw("please withdraw locked funds first")
263- else WriteSet([DataEntry(getNeutrinoLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceNeutrinoLockInterval)), DataEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance + pmt.amount))])
233+ else [IntegerEntry(getNeutrinoLockedBalanceKey(account), pmt.amount), IntegerEntry(getBalanceUnlockBlockKey(account), (height + balanceNeutrinoLockInterval)), IntegerEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance + pmt.amount))]
264234 }
265235
266236
292262 then (0 >= wavesAmount)
293263 else false)
294264 then throw("balance equals zero")
295- else ScriptResult(WriteSet([DataEntry(getWavesLockedBalanceKey(account), 0), DataEntry(getNeutrinoLockedBalanceKey(account), 0), DataEntry(WavesLockedBalanceKey, (wavesLockedBalance - userWavesLockedBalance)), DataEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance - userNeutrinoLockedBalance))]), TransferSet([ScriptTransfer(addressFromStringValue(account), wavesAmount, unit), ScriptTransfer(addressFromStringValue(account), neutrinoAmount, neutrinoAssetId)]))
265+ else [IntegerEntry(getWavesLockedBalanceKey(account), 0), IntegerEntry(getNeutrinoLockedBalanceKey(account), 0), IntegerEntry(WavesLockedBalanceKey, (wavesLockedBalance - userWavesLockedBalance)), IntegerEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance - userNeutrinoLockedBalance)), ScriptTransfer(addressFromStringValue(account), wavesAmount, unit), ScriptTransfer(addressFromStringValue(account), neutrinoAmount, neutrinoAssetId)]
296266 }
297267
298268
304274 if (isBlocked)
305275 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
306276 else if ((auctionNBAmount > (1 * PAULI)))
307- then TransferSet([ScriptTransfer(addressFromStringValue(auctionContract), auctionNBAmount, bondAssetId)])
277+ then [ScriptTransfer(addressFromStringValue(auctionContract), auctionNBAmount, bondAssetId)]
308278 else if ((surplusWithLiquidation >= (1 * PAULI)))
309- then TransferSet([ScriptTransfer(addressFromStringValue(liquidationContract), surplusWithLiquidation, neutrinoAssetId)])
279+ then [ScriptTransfer(addressFromStringValue(liquidationContract), surplusWithLiquidation, neutrinoAssetId)]
310280 else throw(((((((("bond were generated or do not need it. Deficit:" + toString(auctionNBAmount)) + "|") + toString(0)) + ". Surplus:") + toString(surplusWithLiquidation)) + "|") + toString(surplus)))
311281 }
312282
314284
315285 @Callable(i)
316286 func transfer (account) = {
317- let pmt = extract(i.payment)
318- TransferSet([ScriptTransfer(addressFromStringValue(account), pmt.amount, pmt.assetId)])
287+ let pmt = value(i.payments[0])
288+[ScriptTransfer(addressFromStringValue(account), pmt.amount, pmt.assetId)]
319289 }
320290
321291
322292
323293 @Callable(i)
324294 func migrationUSDNB2NSBTSwap () = {
325- let pmt = extract(i.payment)
295+ let pmt = value(i.payments[0])
326296 let account = i.caller
327297 if ((deprecatedBondAssetId != pmt.assetId))
328298 then throw("error: attempt to swap not USDNB tokens")
329- else TransferSet([ScriptTransfer(account, (pmt.amount * PAULI), bondAssetId)])
299+ else [ScriptTransfer(account, (pmt.amount * PAULI), bondAssetId)]
330300 }
331301
332302
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 3 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func getNumberByKey (key) = match getInteger(this, key) {
5- case a: Int =>
6- a
7- case _ =>
8- 0
9-}
4+func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
105
116
12-func getStringByKey (key) = match getString(this, key) {
13- case a: String =>
14- a
15- case _ =>
16- ""
17-}
7+func getStringByKey (key) = valueOrElse(getString(this, key), "")
188
199
20-func getBoolByKey (key) = match getBoolean(this, key) {
21- case a: Boolean =>
22- a
23- case _ =>
24- false
25-}
10+func getBoolByKey (key) = valueOrElse(getBoolean(this, key), false)
2611
2712
28-func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
29- case a: Int =>
30- a
31- case _ =>
32- 0
33-}
13+func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(addressFromStringValue(address), key), 0)
3414
3515
36-func getStringByAddressAndKey (address,key) = match getString(addressFromStringValue(address), key) {
37- case a: String =>
38- a
39- case _ =>
40- ""
41-}
16+func getStringByAddressAndKey (address,key) = valueOrElse(getString(addressFromStringValue(address), key), "")
4217
4318
44-func getBoolByAddressAndKey (address,key) = match getBoolean(addressFromStringValue(address), key) {
45- case a: Boolean =>
46- a
47- case _ =>
48- false
49-}
19+func getBoolByAddressAndKey (address,key) = valueOrElse(getBoolean(addressFromStringValue(address), key), false)
5020
5121
5222 let pubKeyAdminsList = ["BLEoguzPVKVTfXxxT3W7Rqf8aUm2ggC9Vemd2MQawM2G", "FWVffYr2ALmHMejZm3WqeLz6Sdym3gLFGtJn4KTwyU5x", "3Wh2LaWcb5gg7K2pPcW3Ep6EAuRBzYkAgrdpt43jTDFa", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
5323
5424 let SENDTXEXPIRE = 30
5525
5626 let LISTSPLITSYMBOL = "_"
5727
5828 let LISTDATASYMBOL = "+"
5929
6030 let WAVELET = 100000000
6131
6232 let PAULI = 1000000
6333
6434 let PRICELET = 1000000
6535
6636 let NeutrinoAssetIdKey = "neutrino_asset_id"
6737
6838 let BondAssetIdKey = "bond_asset_id"
6939
7040 let AuctionContractKey = "auction_contract"
7141
7242 let LiquidationContractKey = "liquidation_contract"
7343
7444 let RPDContractKey = "rpd_contract"
7545
7646 let ContolContractKey = "control_contract"
7747
7848 let BalanceWavesLockIntervalKey = "balance_waves_lock_interval"
7949
8050 let BalanceNeutrinoLockIntervalKey = "balance_neutrino_lock_interval"
8151
8252 let MinWavesSwapAmountKey = "min_waves_swap_amount"
8353
8454 let MinNeutrinoSwapAmountKey = "min_neutrino_swap_amount"
8555
8656 let NodeOracleProviderPubKeyKey = "node_oracle_provider"
8757
8858 let RPDBalanceKey = "rpd_balance"
8959
9060 func getRPDContractBalanceKey (assetId) = ((RPDBalanceKey + "_") + toBase58String(assetId))
9161
9262
9363 let PriceKey = "price"
9464
9565 let PriceIndexKey = "price_index"
9666
9767 let IsBlockedKey = "is_blocked"
9868
9969 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
10070
10171
10272 func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
10373
10474
10575 let BalanceLockedkKey = "balance_lock_"
10676
10777 let WavesLockedBalanceKey = (BalanceLockedkKey + "waves")
10878
10979 let NeutrinoLockedBalanceKey = (BalanceLockedkKey + "neutrino")
11080
11181 func getRPDSnapshotContractBalanceKey (count,assetId) = ((((RPDBalanceKey + "_") + toBase58String(assetId)) + "_") + toString(count))
11282
11383
11484 func getCancelLeaseTxReserveFeeKey (hash) = (("cancel_lease_tx_reserve_fee" + "_") + hash)
11585
11686
11787 func getWavesLockedBalanceKey (owner) = ((WavesLockedBalanceKey + "_") + owner)
11888
11989
12090 func getNeutrinoLockedBalanceKey (owner) = ((NeutrinoLockedBalanceKey + "_") + owner)
12191
12292
12393 func getBalanceUnlockBlockKey (owner) = ("balance_unlock_block_" + owner)
12494
12595
12696 func getRPDProfitKey (count) = (("rpd_profit" + "_") + toString(count))
12797
12898
12999 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, PRICELET, price), WAVELET, PAULI)
130100
131101
132102 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, PRICELET), PAULI, WAVELET)
133103
134104
135105 func convertWavesToBond (amount,price) = convertWavesToNeutrino(amount, price)
136106
137107
138108 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
139109
140110
141111 let liquidationContract = getStringByKey(LiquidationContractKey)
142112
143113 let neutrinoAssetIdString = getStringByKey(NeutrinoAssetIdKey)
144114
145115 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
146116
147117 let auctionContract = getStringByKey(AuctionContractKey)
148118
149119 let rpdContract = getStringByKey(RPDContractKey)
150120
151121 let controlContract = getStringByKey(ContolContractKey)
152122
153123 let priceIndex = getNumberByAddressAndKey(controlContract, PriceIndexKey)
154124
155125 let isBlocked = getBoolByAddressAndKey(controlContract, IsBlockedKey)
156126
157127 let nodeOracleProviderPubKey = fromBase58String(getStringByKey(NodeOracleProviderPubKeyKey))
158128
159129 let balanceWavesLockInterval = getNumberByKey(BalanceWavesLockIntervalKey)
160130
161131 let balanceNeutrinoLockInterval = getNumberByKey(BalanceNeutrinoLockIntervalKey)
162132
163133 let minWavesSwapAmount = getNumberByKey(MinWavesSwapAmountKey)
164134
165135 let minNeutrinoSwapAmount = getNumberByKey(MinNeutrinoSwapAmountKey)
166136
167137 let bondAssetId = fromBase58String("6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g")
168138
169139 let deprecatedBondAssetId = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
170140
171141 let neutrinoContract = this
172142
173143 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
174144
175145 let neutrinoLockedBalance = getNumberByKey(NeutrinoLockedBalanceKey)
176146
177147 let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
178148
179-let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
149+let reserve = (wavesBalance(neutrinoContract).regular - wavesLockedBalance)
180150
181-let neutrinoSupply = (((neutrinoLockedBalance + extract(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
151+let neutrinoSupply = (((neutrinoLockedBalance + value(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
182152
183153 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
184154
185155 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, currentPrice))
186156
187157 func checkIsValidMinSponsoredFee (tx) = {
188158 let MINTRANSFERFEE = 100000
189159 let SponsoredFeeUpperBound = 1000
190160 let realNeutrinoFee = convertWavesToNeutrino(MINTRANSFERFEE, currentPrice)
191161 let minNeutrinoFee = (realNeutrinoFee * 2)
192162 let maxNeutrinoFee = fraction(realNeutrinoFee, SponsoredFeeUpperBound, 100)
193- let inputFee = extract(tx.minSponsoredAssetFee)
163+ let inputFee = value(tx.minSponsoredAssetFee)
194164 if (if ((inputFee >= minNeutrinoFee))
195165 then (maxNeutrinoFee >= inputFee)
196166 else false)
197167 then (tx.assetId == neutrinoAssetId)
198168 else false
199169 }
200170
201171
202172 func getRPDContractBalance (assetId) = getNumberByAddressAndKey(rpdContract, getRPDContractBalanceKey(assetId))
203173
204174
205175 func getPriceHistory (block) = getNumberByAddressAndKey(controlContract, getPriceHistoryKey(block))
206176
207177
208178 func getHeightPriceByIndex (index) = getNumberByAddressAndKey(controlContract, getHeightPriceByIndexKey(index))
209179
210180
211181 func getCancelLeaseTxReserveFee (hash) = getNumberByKey(getCancelLeaseTxReserveFeeKey(hash))
212182
213183
214184 func getWavesLockedBalance (owner) = getNumberByKey(getWavesLockedBalanceKey(owner))
215185
216186
217187 func getNeutrinoLockedBalance (owner) = getNumberByKey(getNeutrinoLockedBalanceKey(owner))
218188
219189
220190 func getUnlockBalanceBlock (owner) = getNumberByKey(getBalanceUnlockBlockKey(owner))
221191
222192
223193 func getRPDProfit (count) = getNumberByKey(getRPDProfitKey(count))
224194
225195
226196 @Callable(i)
227197 func swapWavesToNeutrino () = {
228- let pmt = extract(i.payment)
198+ let pmt = value(i.payments[0])
229199 let account = toString(i.caller)
230200 if ((minWavesSwapAmount > pmt.amount))
231201 then throw((("The specified Waves amount is less than the required minimum of " + toString(minWavesSwapAmount)) + " wavelets."))
232202 else if (isDefined(pmt.assetId))
233203 then throw("Only Waves token is allowed for swapping.")
234204 else if (isBlocked)
235205 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
236206 else if ((getUnlockBalanceBlock(account) > height))
237207 then throw((("await " + toString((getUnlockBalanceBlock(account) - height))) + " blocks"))
238208 else if (if ((getNeutrinoLockedBalance(account) != 0))
239209 then true
240210 else (getWavesLockedBalance(account) != 0))
241211 then throw("please withdraw locked funds first")
242- else WriteSet([DataEntry(getWavesLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceWavesLockInterval)), DataEntry(WavesLockedBalanceKey, (wavesLockedBalance + pmt.amount))])
212+ else [IntegerEntry(getWavesLockedBalanceKey(account), pmt.amount), IntegerEntry(getBalanceUnlockBlockKey(account), (height + balanceWavesLockInterval)), IntegerEntry(WavesLockedBalanceKey, (wavesLockedBalance + pmt.amount))]
243213 }
244214
245215
246216
247217 @Callable(i)
248218 func swapNeutrinoToWaves () = {
249- let pmt = extract(i.payment)
219+ let pmt = value(i.payments[0])
250220 let account = toString(i.caller)
251221 if ((minNeutrinoSwapAmount > pmt.amount))
252222 then throw((("The specified Neutrino amount is less than the required minimum of " + toString(minNeutrinoSwapAmount)) + " Neutrino cents."))
253223 else if (isBlocked)
254224 then throw("The contract is blocked by EMERGENCY SHUTDOWN. Please wait for reactivation by emergency oracles.")
255225 else if ((pmt.assetId != neutrinoAssetId))
256226 then throw("Only appropriate Neutrino tokens are allowed for swapping.")
257227 else if ((getUnlockBalanceBlock(account) > height))
258228 then throw((("await " + toString((getUnlockBalanceBlock(account) - height))) + " blocks"))
259229 else if (if ((getNeutrinoLockedBalance(account) != 0))
260230 then true
261231 else (getWavesLockedBalance(account) != 0))
262232 then throw("please withdraw locked funds first")
263- else WriteSet([DataEntry(getNeutrinoLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceNeutrinoLockInterval)), DataEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance + pmt.amount))])
233+ else [IntegerEntry(getNeutrinoLockedBalanceKey(account), pmt.amount), IntegerEntry(getBalanceUnlockBlockKey(account), (height + balanceNeutrinoLockInterval)), IntegerEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance + pmt.amount))]
264234 }
265235
266236
267237
268238 @Callable(i)
269239 func withdraw (account,index) = {
270240 let unlockHeight = getUnlockBalanceBlock(account)
271241 let userWavesLockedBalance = getWavesLockedBalance(account)
272242 let userNeutrinoLockedBalance = getNeutrinoLockedBalance(account)
273243 let indexHeight = getHeightPriceByIndex(index)
274244 let prevIndexHeight = getHeightPriceByIndex((index - 1))
275245 let priceByIndex = getPriceHistory(indexHeight)
276246 let spread = 0
277247 let neutrinoAmount = convertWavesToNeutrino(userWavesLockedBalance, (priceByIndex - spread))
278248 let wavesAmount = convertNeutrinoToWaves(userNeutrinoLockedBalance, (priceByIndex + spread))
279249 if (isBlocked)
280250 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
281251 else if ((unlockHeight > height))
282252 then throw((("please wait for: " + toString(unlockHeight)) + " block height to withdraw WAVES funds"))
283253 else if (if (if ((index > priceIndex))
284254 then true
285255 else (unlockHeight > indexHeight))
286256 then true
287257 else if ((prevIndexHeight != 0))
288258 then (prevIndexHeight >= unlockHeight)
289259 else false)
290260 then throw(((((((((("invalid price history index: index=" + toString(index)) + " priceIndex=") + toString(priceIndex)) + " indexHeight=") + toString(indexHeight)) + " unlockHeight=") + toString(unlockHeight)) + " prevIndexHeight=") + toString(prevIndexHeight)))
291261 else if (if ((0 >= neutrinoAmount))
292262 then (0 >= wavesAmount)
293263 else false)
294264 then throw("balance equals zero")
295- else ScriptResult(WriteSet([DataEntry(getWavesLockedBalanceKey(account), 0), DataEntry(getNeutrinoLockedBalanceKey(account), 0), DataEntry(WavesLockedBalanceKey, (wavesLockedBalance - userWavesLockedBalance)), DataEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance - userNeutrinoLockedBalance))]), TransferSet([ScriptTransfer(addressFromStringValue(account), wavesAmount, unit), ScriptTransfer(addressFromStringValue(account), neutrinoAmount, neutrinoAssetId)]))
265+ else [IntegerEntry(getWavesLockedBalanceKey(account), 0), IntegerEntry(getNeutrinoLockedBalanceKey(account), 0), IntegerEntry(WavesLockedBalanceKey, (wavesLockedBalance - userWavesLockedBalance)), IntegerEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance - userNeutrinoLockedBalance)), ScriptTransfer(addressFromStringValue(account), wavesAmount, unit), ScriptTransfer(addressFromStringValue(account), neutrinoAmount, neutrinoAssetId)]
296266 }
297267
298268
299269
300270 @Callable(i)
301271 func transferToAuction () = {
302272 let auctionNBAmount = (neutrinoSupply - assetBalance(addressFromStringValue(auctionContract), bondAssetId))
303273 let surplusWithLiquidation = (surplus - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
304274 if (isBlocked)
305275 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
306276 else if ((auctionNBAmount > (1 * PAULI)))
307- then TransferSet([ScriptTransfer(addressFromStringValue(auctionContract), auctionNBAmount, bondAssetId)])
277+ then [ScriptTransfer(addressFromStringValue(auctionContract), auctionNBAmount, bondAssetId)]
308278 else if ((surplusWithLiquidation >= (1 * PAULI)))
309- then TransferSet([ScriptTransfer(addressFromStringValue(liquidationContract), surplusWithLiquidation, neutrinoAssetId)])
279+ then [ScriptTransfer(addressFromStringValue(liquidationContract), surplusWithLiquidation, neutrinoAssetId)]
310280 else throw(((((((("bond were generated or do not need it. Deficit:" + toString(auctionNBAmount)) + "|") + toString(0)) + ". Surplus:") + toString(surplusWithLiquidation)) + "|") + toString(surplus)))
311281 }
312282
313283
314284
315285 @Callable(i)
316286 func transfer (account) = {
317- let pmt = extract(i.payment)
318- TransferSet([ScriptTransfer(addressFromStringValue(account), pmt.amount, pmt.assetId)])
287+ let pmt = value(i.payments[0])
288+[ScriptTransfer(addressFromStringValue(account), pmt.amount, pmt.assetId)]
319289 }
320290
321291
322292
323293 @Callable(i)
324294 func migrationUSDNB2NSBTSwap () = {
325- let pmt = extract(i.payment)
295+ let pmt = value(i.payments[0])
326296 let account = i.caller
327297 if ((deprecatedBondAssetId != pmt.assetId))
328298 then throw("error: attempt to swap not USDNB tokens")
329- else TransferSet([ScriptTransfer(account, (pmt.amount * PAULI), bondAssetId)])
299+ else [ScriptTransfer(account, (pmt.amount * PAULI), bondAssetId)]
330300 }
331301
332302
333303 @Verifier(tx)
334304 func verify () = {
335305 let id = toBase58String(tx.id)
336306 let count = ((((if (sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(pubKeyAdminsList[0])))
337307 then 1
338308 else 0) + (if (sigVerify(tx.bodyBytes, tx.proofs[1], fromBase58String(pubKeyAdminsList[1])))
339309 then 1
340310 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[2], fromBase58String(pubKeyAdminsList[2])))
341311 then 1
342312 else 0)) + (if (sigVerify(tx.bodyBytes, tx.proofs[3], fromBase58String(pubKeyAdminsList[3])))
343313 then 2
344314 else 0))
345315 match tx {
346316 case leasingTx: LeaseCancelTransaction|LeaseTransaction =>
347317 sigVerify(leasingTx.bodyBytes, leasingTx.proofs[0], nodeOracleProviderPubKey)
348318 case sponsorTx: SponsorFeeTransaction =>
349319 if (checkIsValidMinSponsoredFee(sponsorTx))
350320 then (count >= 3)
351321 else false
352322 case _ =>
353323 (count >= 3)
354324 }
355325 }
356326

github/deemru/w8io/786bc32 
77.96 ms