tx · H4hTfBNTa542YFxbMpo1gQ9EAKFy2h8BWmvXF1S7PuuD 3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi: -0.01400000 Waves 2021.11.30 16:55 [1813860] smart account 3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi > SELF 0.00000000 Waves
{ "type": 13, "id": "H4hTfBNTa542YFxbMpo1gQ9EAKFy2h8BWmvXF1S7PuuD", "fee": 1400000, "feeAssetId": null, "timestamp": 1638280530381, "version": 2, "chainId": 84, "sender": "3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi", "senderPublicKey": "FRotxVW1MhTQRDvVbMM4yvYGWzBFvHqvMsonvGeEXQUy", "proofs": [ "3uA4aENoqKmZvy3yQHEnMiQiN431gws4HAsm1wS4qNTnUAw2kdPUJvSt4dEPTmSnYaPBTr9b5mGpmbTQMzCTCdTQ", "5K6x96qXxPo4z6Wcb2UShoq7nDTBkKgvVADzkcf7JDuc1n5DRmF6GecsqjBu5Lhzj2qNULfbmJSVYCSk53hjsd9w" ], "script": "base64:AAIFAAAAAAAAADwIAhIECgIBCBIDCgEIEgsKCQgBAQEBAQEBARIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIECgIBARIAEgAAAAA2AAAAAAlrZXlBY3RpdmUCAAAABmFjdGl2ZQAAAAAPa2V5QWRtaW5QdWJLZXkxAgAAAAthZG1pbl9wdWJfMQAAAAAPa2V5QWRtaW5QdWJLZXkyAgAAAAthZG1pbl9wdWJfMgAAAAAPa2V5QWRtaW5QdWJLZXkzAgAAAAthZG1pbl9wdWJfMwAAAAAha2V5TGF1bmNocGFkRGF0YVRyYW5zYWN0aW9uU3RhdHVzAgAAACFsYXVuY2hwYWRfZGF0YV90cmFuc2FjdGlvbl9zdGF0dXMAAAAAEmtleUxhdW5jaHBhZE5leHRJZAIAAAARbGF1bmNocGFkX25leHRfaWQAAAAAFGtleUxhdW5jaHBhZEFjdGl2ZUlkAgAAABNsYXVuY2hwYWRfYWN0aXZlX2lkAAAAAA1rZXlJbml0Q2FsbGVyAgAAAAtpbml0X2NhbGxlcgAAAAAKa2V5QWRkcmVzcwIAAAAIX2FkZHJlc3MAAAAADWtleUluaXRIZWlnaHQCAAAADF9pbml0X2hlaWdodAAAAAAOa2V5U3RhcnRIZWlnaHQCAAAADV9zdGFydF9oZWlnaHQAAAAAEWtleUZpbmFsaXNlSGVpZ2h0AgAAABBfZmluYWxpc2VfaGVpZ2h0AAAAAAxrZXlDb21pc3Npb24CAAAACl9jb21pc3Npb24AAAAACmtleUFzc2V0SWQCAAAACV9hc3NldF9pZAAAAAATa2V5VG90YWxUb2tlbkFtb3VudAIAAAATX3RvdGFsX3Rva2VuX2Ftb3VudAAAAAAWa2V5VG90YWxBbW91bnRVc2RuU29sZAIAAAAQX3RvdGFsX3VzZG5fc29sZAAAAAASa2V5VG9rZW5zUGVyVGlja2V0AgAAABJfdG9rZW5zX3Blcl90aWNrZXQAAAAAEGtleVByaWNlUGVyVG9rZW4CAAAAEF9wcmljZV9wZXJfdG9rZW4AAAAAEGtleVN3b3BQZXJUaWNrZXQCAAAAEF9zd29wX3Blcl90aWNrZXQAAAAAFmtleVN3b3BmaVRpY2tldHNBbW91bnQCAAAAF190aWNrZXRzX3N3b3BmaV9tZW1iZXJzAAAAABdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudAIAAAATX3Rva2Vuc19hY2Nlc3NfbGlzdAAAAAAWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgIAAAAWX3Rva2Vuc19wZXJfYWxsb2NhdGlvbgAAAAATa2V5VGlja2V0TGFzdE51bWJlcgIAAAATX3RpY2tldF9sYXN0X251bWJlcgAAAAATa2V5R292ZXJuYW5jZVN0YWtlZAIAAAAMX1NXT1BfYW1vdW50AAAAAAxrZXlVc2VyUmVmSWQCAAAAB19yZWZfaWQAAAAADWtleVZlcmlmeUhhc2gCAAAADF92ZXJpZnlfaGFzaAAAAAALa2V5RHVyYXRpb24CAAAACV9kdXJhdGlvbgAAAAAYa2V5QW1vdW50VVNETkluTWFya2V0aW5nAgAAACJfdG90YWxfcHVyY2hhc2VkX3VzZG5faW5fbWFya2V0aW5nAAAAACFrZXlBbW91bnRVU0ROSW5NYXJrZXRpbmdGaW5hbGl6ZWQCAAAALF90b3RhbF9wdXJjaGFzZWRfdXNkbl9pbl9tYXJrZXRpbmdfZmluYWxpemVkAAAAAA5rZXlUcmFuc2ZlclVzZAIAAAANX3RyYW5zZmVyX3VzZAAAAAAaa2V5VXNlckJvdWdodFRpY2tldHNBbW91bnQCAAAAD19ib3VnaHRfdGlja2V0cwAAAAAOa2V5VXNlclRpY2tldHMCAAAAD190aWNrZXRzX251bWJlcgAAAAAba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAAca2V5VXNlckFtb3VudFVTRE5Jbk1hcmtldGluZwIAAAAcX3B1cmNoYXNlZF91c2RuX2luX21hcmtldGluZwAAAAAYa2V5VXNlckJvdWdodEFsbG9jYXRpb25zAgAAABNfYm91Z2h0X2FsbG9jYXRpb25zAAAAABJrZXlVc2VyQ2xhaW1TdGF0dXMCAAAADV9jbGFpbV9zdGF0dXMAAAAAGmtleVVzZXJXaW5uZWRUaWNrZXRzQW1vdW50AgAAAA9fdGlja2V0c19yZXN1bHQAAAAAEGxhdWNocGFkRHVyYXRpb24AAAAAAAAAAGQAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MA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TAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAAA1rZXlWZXJpZnlIYXNoBQAAAARoYXNoBQAAAANuaWwAAAABaQEAAAAKaW5pdENhbGxlcgAAAAEAAAAHYWRkcmVzcwMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rZXlJbml0Q2FsbGVyBQAAAAdhZGRyZXNzBQAAAANuaWwAAAABaQEAAAAEaW5pdAAAAAkAAAAOcHJvamVjdEFkZHJlc3MAAAALc3RhcnRIZWlnaHQAAAAKY29tbWlzc2lvbgAAAA90b2tlbnNQZXJUaWNrZXQAAAANcHJpY2VQZXJUb2tlbgAAABNzd29wZmlUaWNrZXRzQW1vdW50AAAAFGNhbXBhaWduVG9rZW5zQW1vdW50AAAAE3Rva2Vuc1BlckFsbG9jYXRpb24AAAANc3dvcFBlclRpY2tldAQAAAALJHQwNDIwMDQyNzUJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDA0MjAwNDI3NQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDQyMDA0Mjc1AAAAAl8yAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAANa2V5SW5pdENhbGxlcgIAAAAACQAAAgAAAAECAAAAKU9ubHkgcHJvamVjdCBhZG1pbiBjYW4gY2FsbCBpbml0IGZ1bmN0aW9uAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAtzdGFydEhlaWdodAkAAAIAAAABAgAAADNTdGFydCBoZWlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gYmxvY2tjaGFpbiBoZWlnaHQEAAAACyR0MDQ3MDM0Nzc2CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAAKcG10QXNzZXRJZAQAAAANcG10U3RyQXNzZXRJZAgFAAAACyR0MDQ3MDM0Nzc2AAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAAskdDA0NzAzNDc3NgAAAAJfMgQAAAALcG10RGVjaW1hbHMIBQAAAAskdDA0NzAzNDc3NgAAAAJfMwQAAAALbGF1bmNocGFkSWQJAQAAABJnZXRMYXVuY2hwYWROZXh0SWQAAAAABAAAAA5sYXVuY2hwYWRJZFN0cgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA1wbXRTdHJBc3NldElkAgAAAApfbGF1bmNocGFkBQAAAAtsYXVuY2hwYWRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa2V5TGF1bmNocGFkTmV4dElkCQAAZAAAAAIFAAAAC2xhdW5jaHBhZElkAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAACmtleUFkZHJlc3MFAAAADnByb2plY3RBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAA1rZXlJbml0SGVpZ2h0BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAADmtleVN0YXJ0SGVpZ2h0BQAAAAtzdGFydEhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAALa2V5RHVyYXRpb24FAAAAEGxhdWNocGFkRHVyYXRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAE2tleVRvdGFsVG9rZW5BbW91bnQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAprZXlBc3NldElkBQAAAA1wbXRTdHJBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAxrZXlDb21pc3Npb24FAAAACmNvbW1pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAE2tleVRpY2tldExhc3ROdW1iZXIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAEmtleVRva2Vuc1BlclRpY2tldAUAAAAPdG9rZW5zUGVyVGlja2V0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABBrZXlQcmljZVBlclRva2VuBQAAAA1wcmljZVBlclRva2VuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABBrZXlTd29wUGVyVGlja2V0BQAAAA1zd29wUGVyVGlja2V0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABZrZXlTd29wZmlUaWNrZXRzQW1vdW50BQAAABNzd29wZmlUaWNrZXRzQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudAUAAAAUY2FtcGFpZ25Ub2tlbnNBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAFmtleVRva2Vuc1BlckFsbG9jYXRpb24FAAAAE3Rva2Vuc1BlckFsbG9jYXRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFGtleUxhdW5jaHBhZEFjdGl2ZUlkBQAAAAtsYXVuY2hwYWRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rZXlJbml0Q2FsbGVyAgAAAAAFAAAAA25pbAAAAAFpAQAAABBjb21taXRTd29wZmlTYWxlAAAAAgAAAAtsYXVuY2hwYWRJZAAAAAVyZWZJZAQAAAALJHQwNjI3MDYzNDUJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDA2MjcwNjM0NQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDYyNzA2MzQ1AAAAAl8yBAAAAAtzdGFrZWRTd29wcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkA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bgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAAAxrZXlDb21pc3Npb24EAAAADnRyYW5zZmVyZWRVc2RuCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAOa2V5VHJhbnNmZXJVc2QAAAAAAAAAAAAEAAAAF3N3b3BmaU1lbWJlcnNVc2RuQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAFmtleVRvdGFsQW1vdW50VXNkblNvbGQEAAAAFnN3b3BmaU1lbWJlcnNDb21pc3Npb24JAABrAAAAAwUAAAAXc3dvcGZpTWVtYmVyc1VzZG5BbW91bnQFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQEAAAAGnRvdGFsQW1vdW50VXNkbkluTWFya2V0aW5nCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAIWtleUFtb3VudFVTRE5Jbk1hcmtldGluZ0ZpbmFsaXplZAQAAAASbWFya2V0aW5nQ29taXNzaW9uCQAAawAAAAMFAAAAGnRvdGFsQW1vdW50VXNkbkluTWFya2V0aW5nBQAAAApjb21taXNzaW9uAAAAAAAAAABkBAAAAA11bnN0YWtlQW1vdW50CQAAZAAAAAIJAABkAAAAAgkAAGQAAAACBQAAABdzd29wZmlNZW1iZXJzVXNkbkFtb3VudAUAAAAadG90YWxBbW91bnRVc2RuSW5NYXJrZXRpbmcFAAAAFnN3b3BmaU1lbWJlcnNDb21pc3Npb24FAAAAEm1hcmtldGluZ0NvbWlzc2lvbgMJAABmAAAAAgUAAAAOdHJhbnNmZXJlZFVzZG4JAABkAAAAAgUAAAAXc3dvcGZpTWVtYmVyc1VzZG5BbW91bnQFAAAAGnRvdGFsQW1vdW50VXNkbkluTWFya2V0aW5nCQAAAgAAAAECAAAAKENhbid0IHRyYW5zZmVyIG5lZ2F0aXZlIHZhbHVlIHRvIHByb2plY3QEAAAAA2ludgkAA/wAAAAEBQAAABJzdGFraW5nVVNETkFkZHJlc3MCAAAADnVubG9ja05ldXRyaW5vCQAETAAAAAIFAAAADXVuc3Rha2VBbW91bnQJAARMAAAAAgkAAlgAAAABBQAAAARVU0ROBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAADaW52BQAAAANpbnYJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAARa2V5RmluYWxpc2VIZWlnaHQFAAAABmhlaWdodAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA5wcm9qZWN0QWRkcmVzcwkAAGUAAAACCQAAZAAAAAIFAAAAF3N3b3BmaU1lbWJlcnNVc2RuQW1vdW50BQAAABp0b3RhbEFtb3VudFVzZG5Jbk1hcmtldGluZwUAAAAOdHJhbnNmZXJlZFVzZG4FAAAABFVTRE4JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAQY29tbWlzc2lvbldhbGxldAkAAGQAAAACBQAAABZzd29wZmlNZW1iZXJzQ29taXNzaW9uBQAAABJtYXJrZXRpbmdDb21pc3Npb24FAAAABFVTRE4FAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAFY2xhaW0AAAABAAAAC2xhdW5jaHBhZElkBAAAAA91c2VyQ2xhaW1TdGF0dXMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAEmtleVVzZXJDbGFpbVN0YXR1cwcEAAAADWJvdWdodFRpY2tldHMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXICAAAAAV8JAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAGmtleVVzZXJCb3VnaHRUaWNrZXRzQW1vdW50AAAAAAAAAAAABAAAABFib3VnaHRBbGxvY2F0aW9ucwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAYa2V5VXNlckJvdWdodEFsbG9jYXRpb25zAAAAAAAAAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAEWtleUZpbmFsaXNlSGVpZ2h0CQAAAgAAAAECAAAAMVlvdSBjYW4ndCBjbGFpbSBiZWNhdXNlIHJlc3VsdHMgYXJlIG5vdCBmaW5hbGl6ZWQDBQAAAA91c2VyQ2xhaW1TdGF0dXMJAAACAAAAAQIAAAAXWW91IGFyZSBhbHJlYWR5IGNsYWltZWQDAwkAAAAAAAACBQAAAA1ib3VnaHRUaWNrZXRzAAAAAAAAAAAACQAAAAAAAAIFAAAAEWJvdWdodEFsbG9jYXRpb25zAAAAAAAAAAAABwkAAAIAAAABAgAAAC5Zb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSB5b3UgZG9uJ3QgYnV5IGFueXRoaW5nBAAAAAd0b2tlbklkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAKa2V5QXNzZXRJZAQAAAANd29ubmVkVGlja2V0cwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgIAAAABXwkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAaa2V5VXNlcldpbm5lZFRpY2tldHNBbW91bnQAAAAAAAAAAAAEAAAAFGF3YWlsYWJsZUFsbG9jYXRpb25zCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABtrZXlVc2VyQXZhaWxhYmxlQWxsb2NhdGlvbnMAAAAAAAAAAAAEAAAACmNvbW1pc3Npb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAMa2V5Q29taXNzaW9uBAAAABJhbGxvd2VkQWxsb2NhdGlvbnMJAAGXAAAAAQkABEwAAAACBQAAABFib3VnaHRBbGxvY2F0aW9ucwkABEwAAAACBQAAABRhd2FpbGFibGVBbGxvY2F0aW9ucwUAAAADbmlsBAAAAAp0b2tlblByaWNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAEGtleVByaWNlUGVyVG9rZW4EAAAAD3Rva2Vuc1BlclRpY2tldAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABJrZXlUb2tlbnNQZXJUaWNrZXQEAAAADSR0MDE2OTQ1MTcwMjEJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAd0b2tlbklkBAAAAA90b2tlblN0ckFzc2V0SWQIBQAAAA0kdDAxNjk0NTE3MDIxAAAAAl8xBAAAAA50b2tlbkFzc2V0TmFtZQgFAAAADSR0MDE2OTQ1MTcwMjEAAAACXzIEAAAADXRva2VuRGVjaW1hbHMIBQAAAA0kdDAxNjk0NTE3MDIxAAAAAl8zBAAAAAt0aWNrZXRQcmljZQkAAGsAAAADBQAAAA90b2tlbnNQZXJUaWNrZXQFAAAACnRva2VuUHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAANdG9rZW5EZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAATdG9rZW5zUGVyQWxsb2NhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uBAAAABR0cmFuc2ZlclRva2Vuc0Ftb3VudAkAAGQAAAACCQAAaAAAAAIFAAAADXdvbm5lZFRpY2tldHMFAAAAD3Rva2Vuc1BlclRpY2tldAkAAGgAAAACBQAAABJhbGxvd2VkQWxsb2NhdGlvbnMFAAAAE3Rva2Vuc1BlckFsbG9jYXRpb24EAAAAG25vdEFsbG93ZWRBbGxvY2F0aW9uc1Rva2VucwkAAGgAAAACCQAAZQAAAAIFAAAAEWJvdWdodEFsbG9jYXRpb25zBQAAABJhbGxvd2VkQWxsb2NhdGlvbnMFAAAAE3Rva2Vuc1BlckFsbG9jYXRpb24EAAAAEnVzZG5Gb3JBbGxvY2F0aW9ucwkAAGsAAAADCQAAawAAAAMFAAAAG25vdEFsbG93ZWRBbGxvY2F0aW9uc1Rva2VucwUAAAAKdG9rZW5QcmljZQkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAA10b2tlbkRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOCQAAZAAAAAIAAAAAAAAAAGQFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQEAAAAFnVzZG5Gb3JVbndvbm5lZFRpY2tldHMJAABrAAAAAwkAAGgAAAACCQAAZQAAAAIFAAAADWJvdWdodFRpY2tldHMFAAAADXdvbm5lZFRpY2tldHMFAAAAC3RpY2tldFByaWNlCQAAZAAAAAIAAAAAAAAAAGQFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQDAwkAAGYAAAACAAAAAAAAAAAABQAAABJ1c2RuRm9yQWxsb2NhdGlvbnMGCQAAZgAAAAIAAAAAAAAAAAAFAAAAFnVzZG5Gb3JVbndvbm5lZFRpY2tldHMJAAACAAAAAQIAAABSRXJyb3Igd2l0aCBh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", "height": 1813860, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BAaUTUxAp6nNLCyN5sLJ8gxi4hE9EwJ68Kmy9edw8q9b Next: 3DWedvTbm36mW5YHnShZYJrsqLZbNHYMZ2uDJp5fBE6L Diff:
Old | New | Differences | |
---|---|---|---|
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "active" | |
5 | 5 | ||
6 | - | let b = " | |
6 | + | let b = "admin_pub_1" | |
7 | 7 | ||
8 | - | let c = " | |
8 | + | let c = "admin_pub_2" | |
9 | 9 | ||
10 | - | let d = " | |
10 | + | let d = "admin_pub_3" | |
11 | 11 | ||
12 | - | let e = " | |
12 | + | let e = "launchpad_data_transaction_status" | |
13 | 13 | ||
14 | - | let f = " | |
14 | + | let f = "launchpad_next_id" | |
15 | 15 | ||
16 | - | let g = " | |
16 | + | let g = "launchpad_active_id" | |
17 | 17 | ||
18 | - | let h = " | |
18 | + | let h = "init_caller" | |
19 | 19 | ||
20 | - | let i = " | |
20 | + | let i = "_address" | |
21 | 21 | ||
22 | - | let j = " | |
22 | + | let j = "_init_height" | |
23 | 23 | ||
24 | - | let k = " | |
24 | + | let k = "_start_height" | |
25 | 25 | ||
26 | - | let l = "_ | |
26 | + | let l = "_finalise_height" | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = "_comission" | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = "_asset_id" | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = "_total_token_amount" | |
33 | 33 | ||
34 | - | let p = " | |
34 | + | let p = "_total_usdn_sold" | |
35 | 35 | ||
36 | - | let q = " | |
36 | + | let q = "_tokens_per_ticket" | |
37 | 37 | ||
38 | - | let r = " | |
38 | + | let r = "_price_per_token" | |
39 | 39 | ||
40 | - | func s (t) = { | |
41 | - | let u = getString(m, t) | |
42 | - | if ($isInstanceOf(u, "String")) | |
40 | + | let s = "_swop_per_ticket" | |
41 | + | ||
42 | + | let t = "_tickets_swopfi_members" | |
43 | + | ||
44 | + | let u = "_tokens_access_list" | |
45 | + | ||
46 | + | let v = "_tokens_per_allocation" | |
47 | + | ||
48 | + | let w = "_ticket_last_number" | |
49 | + | ||
50 | + | let x = "_SWOP_amount" | |
51 | + | ||
52 | + | let y = "_ref_id" | |
53 | + | ||
54 | + | let z = "_verify_hash" | |
55 | + | ||
56 | + | let A = "_duration" | |
57 | + | ||
58 | + | let B = "_total_purchased_usdn_in_marketing" | |
59 | + | ||
60 | + | let C = "_total_purchased_usdn_in_marketing_finalized" | |
61 | + | ||
62 | + | let D = "_transfer_usd" | |
63 | + | ||
64 | + | let E = "_bought_tickets" | |
65 | + | ||
66 | + | let F = "_tickets_number" | |
67 | + | ||
68 | + | let G = "_available_purchase_marketing" | |
69 | + | ||
70 | + | let H = "_purchased_usdn_in_marketing" | |
71 | + | ||
72 | + | let I = "_bought_allocations" | |
73 | + | ||
74 | + | let J = "_claim_status" | |
75 | + | ||
76 | + | let K = "_tickets_result" | |
77 | + | ||
78 | + | let L = 100 | |
79 | + | ||
80 | + | let M = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9') | |
81 | + | ||
82 | + | let N = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU') | |
83 | + | ||
84 | + | let O = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG') | |
85 | + | ||
86 | + | let P = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg') | |
87 | + | ||
88 | + | let Q = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
89 | + | ||
90 | + | let R = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
91 | + | ||
92 | + | let S = 2 | |
93 | + | ||
94 | + | let T = valueOrElse(getBoolean(this, a), true) | |
95 | + | ||
96 | + | let U = valueOrElse(getIntegerValue(this, g), -1) | |
97 | + | ||
98 | + | func V (W) = { | |
99 | + | let X = getString(M, W) | |
100 | + | if ($isInstanceOf(X, "String")) | |
43 | 101 | then { | |
44 | - | let | |
45 | - | fromBase58String( | |
102 | + | let Y = X | |
103 | + | fromBase58String(Y) | |
46 | 104 | } | |
47 | 105 | else { | |
48 | - | let | |
106 | + | let Z = X | |
49 | 107 | throw("Admin public key is empty") | |
50 | 108 | } | |
51 | 109 | } | |
52 | 110 | ||
53 | 111 | ||
54 | - | let | |
112 | + | let aa = V(b) | |
55 | 113 | ||
56 | - | let | |
114 | + | let ab = V(c) | |
57 | 115 | ||
58 | - | let | |
116 | + | let ac = V(d) | |
59 | 117 | ||
60 | - | let A = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
61 | - | ||
62 | - | let B = fromBase58String(getStringValue(n, h)) | |
63 | - | ||
64 | - | let C = valueOrElse(getBoolean(this, a), true) | |
65 | - | ||
66 | - | func D (E,F) = if ((E == "")) | |
67 | - | then (E + toString(F)) | |
68 | - | else ((E + ",") + toString(F)) | |
69 | - | ||
70 | - | ||
71 | - | func G (E,F) = (E :+ parseIntValue(F)) | |
72 | - | ||
73 | - | ||
74 | - | func H (E,F) = { | |
75 | - | let I = E | |
76 | - | let J = I._1 | |
77 | - | let K = I._2 | |
78 | - | $Tuple2(J, (K :+ (J / F))) | |
118 | + | func ad (ae) = { | |
119 | + | let X = ae | |
120 | + | if ($isInstanceOf(X, "ByteVector")) | |
121 | + | then { | |
122 | + | let af = X | |
123 | + | let ag = toBase58String(af) | |
124 | + | let ah = valueOrErrorMessage(assetInfo(af), (("Asset " + ag) + " doesn't exist")) | |
125 | + | $Tuple3(ag, ah.name, ah.decimals) | |
126 | + | } | |
127 | + | else if ($isInstanceOf(X, "Unit")) | |
128 | + | then { | |
129 | + | let ai = X | |
130 | + | $Tuple3("WAVES", "WAVES", 8) | |
131 | + | } | |
132 | + | else throw("Match error") | |
79 | 133 | } | |
80 | 134 | ||
81 | 135 | ||
82 | - | func L (M) = { | |
83 | - | let N = { | |
84 | - | let O = split(getStringValue(this, f), ",") | |
85 | - | let P = size(O) | |
86 | - | let Q = nil | |
87 | - | func R (S,T) = if ((T >= P)) | |
88 | - | then S | |
89 | - | else G(S, O[T]) | |
136 | + | func aj () = valueOrElse(getInteger(this, f), 1) | |
90 | 137 | ||
91 | - | func U (S,T) = if ((T >= P)) | |
92 | - | then S | |
93 | - | else throw("List size exceeds 5") | |
94 | 138 | ||
95 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
96 | - | } | |
97 | - | if ((N[3] >= M)) | |
98 | - | then 4 | |
99 | - | else if ((N[2] >= M)) | |
100 | - | then 3 | |
101 | - | else if ((N[1] >= M)) | |
102 | - | then 2 | |
103 | - | else if ((N[0] >= M)) | |
104 | - | then 1 | |
105 | - | else 0 | |
139 | + | func ak () = valueOrElse(getInteger(P, ((("rpd_balance_" + toBase58String(Q)) + "_") + toString(this))), 0) | |
140 | + | ||
141 | + | ||
142 | + | @Callable(al) | |
143 | + | func hashingRandom (am,an) = if (!(T)) | |
144 | + | then throw("DApp is inactive at this moment") | |
145 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
146 | + | then throw("Only admin can call this function") | |
147 | + | else [StringEntry((toString(am) + z), an)] | |
148 | + | ||
149 | + | ||
150 | + | ||
151 | + | @Callable(al) | |
152 | + | func initCaller (ao) = if (!(T)) | |
153 | + | then throw("DApp is inactive at this moment") | |
154 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
155 | + | then throw("Only admin can call this function") | |
156 | + | else [StringEntry(h, ao)] | |
157 | + | ||
158 | + | ||
159 | + | ||
160 | + | @Callable(al) | |
161 | + | func init (ap,aq,ar,as,at,au,av,aw,ax) = { | |
162 | + | let ay = $Tuple2(al.payments[0].amount, al.payments[0].assetId) | |
163 | + | let az = ay._1 | |
164 | + | let aA = ay._2 | |
165 | + | if (!(T)) | |
166 | + | then throw("DApp is inactive at this moment") | |
167 | + | else if ((toString(al.caller) != valueOrElse(getString(this, h), ""))) | |
168 | + | then throw("Only project admin can call init function") | |
169 | + | else if ((size(al.payments) != 1)) | |
170 | + | then throw("One attached payment expected") | |
171 | + | else if ((height > aq)) | |
172 | + | then throw("Start height must be greater than blockchain height") | |
173 | + | else { | |
174 | + | let aB = ad(aA) | |
175 | + | let aC = aB._1 | |
176 | + | let aD = aB._2 | |
177 | + | let aE = aB._3 | |
178 | + | let am = aj() | |
179 | + | let aF = toString(am) | |
180 | + | [IntegerEntry((aC + "_launchpad"), am), IntegerEntry(f, (am + 1)), StringEntry((aF + i), ap), IntegerEntry((aF + j), height), IntegerEntry((aF + k), aq), IntegerEntry((aF + A), L), IntegerEntry((aF + o), az), StringEntry((aF + n), aC), IntegerEntry((aF + m), ar), IntegerEntry((aF + w), 0), IntegerEntry((aF + q), as), IntegerEntry((aF + r), at), IntegerEntry((aF + s), ax), IntegerEntry((aF + t), au), IntegerEntry((aF + u), av), IntegerEntry((aF + v), aw), IntegerEntry(g, am), StringEntry(h, "")] | |
181 | + | } | |
106 | 182 | } | |
107 | 183 | ||
108 | 184 | ||
109 | - | @Callable(V) | |
110 | - | func init (W,X,Y,N,Z) = if (!(containsElement([x, y, z], V.callerPublicKey))) | |
111 | - | then throw("Only admin can call this function") | |
112 | - | else if (isDefined(getInteger(this, b))) | |
113 | - | then throw("DApp is already inited") | |
114 | - | else if ((height > W)) | |
115 | - | then throw("Burning ending must be greater than current height") | |
116 | - | else if (if ((size(X) != 5)) | |
117 | - | then true | |
118 | - | else (size(Y) != 5)) | |
119 | - | then throw("Amount of prizes achievemts lists must equal to 5") | |
120 | - | else if (if ((size(N) != 4)) | |
121 | - | then true | |
122 | - | else (size(Z) != 4)) | |
123 | - | then throw("Amount of levels lists must equal to 4") | |
124 | - | else { | |
125 | - | let aa = { | |
126 | - | let O = X | |
127 | - | let P = size(O) | |
128 | - | let Q = "" | |
129 | - | func R (S,T) = if ((T >= P)) | |
130 | - | then S | |
131 | - | else D(S, O[T]) | |
132 | 185 | ||
133 | - | func U (S,T) = if ((T >= P)) | |
134 | - | then S | |
135 | - | else throw("List size exceeds 5") | |
136 | - | ||
137 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
138 | - | } | |
139 | - | let ab = makeString(Y, ",") | |
140 | - | let ac = { | |
141 | - | let O = N | |
142 | - | let P = size(O) | |
143 | - | let Q = "" | |
144 | - | func R (S,T) = if ((T >= P)) | |
145 | - | then S | |
146 | - | else D(S, O[T]) | |
147 | - | ||
148 | - | func U (S,T) = if ((T >= P)) | |
149 | - | then S | |
150 | - | else throw("List size exceeds 5") | |
151 | - | ||
152 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
153 | - | } | |
154 | - | let ad = makeString(Z, ",") | |
155 | - | let ae = "0,0,0,0,0" | |
156 | - | [IntegerEntry(b, W), StringEntry(c, aa), StringEntry(d, ab), StringEntry(f, ac), StringEntry(g, ad), StringEntry(e, ae)] | |
157 | - | } | |
186 | + | @Callable(al) | |
187 | + | func commitSwopfiSale (am,aG) = { | |
188 | + | let aH = $Tuple2(al.payments[0].amount, al.payments[0].assetId) | |
189 | + | let az = aH._1 | |
190 | + | let aA = aH._2 | |
191 | + | let aI = valueOrElse(getInteger(N, (toString(al.caller) + x)), 0) | |
192 | + | let aJ = (aI / getIntegerValue(this, (toString(am) + s))) | |
193 | + | let aK = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + E)), 0) | |
194 | + | let aL = (aJ - aK) | |
195 | + | let aq = value(getInteger(this, (toString(am) + k))) | |
196 | + | let aM = value(getInteger(this, (toString(am) + A))) | |
197 | + | if (!(T)) | |
198 | + | then throw("DApp is inactive at this moment") | |
199 | + | else if ((U != am)) | |
200 | + | then throw("There is no active launchpad or this launchpad is ended") | |
201 | + | else if ((aq > height)) | |
202 | + | then throw("Launchpad sale not started yet") | |
203 | + | else if ((height > (aq + aM))) | |
204 | + | then throw("Launchpad sale ended") | |
205 | + | else if (if ((size(al.payments) != 1)) | |
206 | + | then true | |
207 | + | else (aA != Q)) | |
208 | + | then throw("One attached payment in USDN expected") | |
209 | + | else if (if ((0 >= aJ)) | |
210 | + | then true | |
211 | + | else (0 >= aL)) | |
212 | + | then throw("Not enought SWOP in staking to buy tickets") | |
213 | + | else { | |
214 | + | let aN = getIntegerValue(this, (toString(am) + r)) | |
215 | + | let as = getIntegerValue(this, (toString(am) + q)) | |
216 | + | let aO = fromBase58String(getStringValue(this, (toString(am) + n))) | |
217 | + | let aP = ad(aO) | |
218 | + | let aQ = aP._1 | |
219 | + | let aR = aP._2 | |
220 | + | let aS = aP._3 | |
221 | + | let aT = fraction(as, aN, pow(10, 0, aS, 0, 0, DOWN)) | |
222 | + | let aU = fraction(aT, getIntegerValue(this, (toString(am) + m)), 100) | |
223 | + | let aV = (az / (aT + aU)) | |
224 | + | let aW = min([aV, aL]) | |
225 | + | let aX = (aW * (aT + aU)) | |
226 | + | let aY = (az - aX) | |
227 | + | if ((aV == 0)) | |
228 | + | then throw("Not enought USDN to buy tickets") | |
229 | + | else if ((aY != 0)) | |
230 | + | then throw((((("Wrong payment. To buy " + toString(aW)) + "tickets you need to pay ") + toString(aX)) + "USDN")) | |
231 | + | else { | |
232 | + | let aZ = valueOrElse(getString(this, (((toString(al.caller) + "_") + toString(am)) + F)), "") | |
233 | + | let ba = getIntegerValue(this, (toString(am) + w)) | |
234 | + | let bb = ((toString((ba + 1)) + "-") + toString((ba + aW))) | |
235 | + | let bc = (aZ + (if ((aZ != "")) | |
236 | + | then ("," + bb) | |
237 | + | else ("" + bb))) | |
238 | + | let bd = invoke(P, "lockNeutrino", nil, [AttachedPayment(aA, az)]) | |
239 | + | if ((bd == bd)) | |
240 | + | then { | |
241 | + | let be = [IntegerEntry((((toString(al.caller) + "_") + toString(am)) + E), (aK + aW)), IntegerEntry((toString(am) + w), (ba + aW)), StringEntry((((toString(al.caller) + "_") + toString(am)) + F), bc)] | |
242 | + | if (!(isDefined(getString(this, (((toString(al.caller) + "_") + toString(am)) + y))))) | |
243 | + | then (be ++ [StringEntry((((toString(al.caller) + "_") + toString(am)) + y), aG)]) | |
244 | + | else be | |
245 | + | } | |
246 | + | else throw("Strict value is not equal to itself.") | |
247 | + | } | |
248 | + | } | |
249 | + | } | |
158 | 250 | ||
159 | 251 | ||
160 | 252 | ||
161 | - | @Callable(V) | |
162 | - | func add () = { | |
163 | - | let af = $Tuple2(V.payments[0].amount, V.payments[0].assetId) | |
164 | - | let ag = af._1 | |
165 | - | let ah = af._2 | |
166 | - | let W = valueOrElse(getInteger(this, b), 0) | |
167 | - | if (!(C)) | |
253 | + | @Callable(al) | |
254 | + | func commitAccessListSale (am,aG) = { | |
255 | + | let bf = $Tuple2(al.payments[0].amount, al.payments[0].assetId) | |
256 | + | let az = bf._1 | |
257 | + | let aA = bf._2 | |
258 | + | let bg = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + H)), 0) | |
259 | + | let bh = valueOrElse(getInteger(this, (toString(am) + B)), 0) | |
260 | + | let bi = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + I)), 0) | |
261 | + | let ar = getIntegerValue(this, (toString(am) + m)) | |
262 | + | let aN = getIntegerValue(this, (toString(am) + r)) | |
263 | + | let aw = getIntegerValue(this, (toString(am) + v)) | |
264 | + | let aO = fromBase58String(getStringValue(this, (toString(am) + n))) | |
265 | + | let bj = ad(aO) | |
266 | + | let aQ = bj._1 | |
267 | + | let aR = bj._2 | |
268 | + | let aS = bj._3 | |
269 | + | let bk = fraction(fraction(aN, aw, pow(10, 0, aS, 0, 0, DOWN)), (100 + ar), 100) | |
270 | + | let aq = value(getInteger(this, (toString(am) + k))) | |
271 | + | let aM = value(getInteger(this, (toString(am) + A))) | |
272 | + | if (!(T)) | |
168 | 273 | then throw("DApp is inactive at this moment") | |
169 | - | else if (if ((height > W)) | |
170 | - | then true | |
171 | - | else (W == 0)) | |
172 | - | then throw("Swop burning are ended or not started yet") | |
173 | - | else if ((ah != B)) | |
174 | - | then throw("You can add only SWOP token") | |
175 | - | else { | |
176 | - | let ai = (valueOrElse(getInteger(this, i), 0) + ag) | |
177 | - | let aj = valueOrElse(getInteger(this, (toString(V.caller) + l)), 0) | |
178 | - | let ak = { | |
179 | - | let O = split(getStringValue(this, e), ",") | |
180 | - | let P = size(O) | |
181 | - | let Q = nil | |
182 | - | func R (S,T) = if ((T >= P)) | |
183 | - | then S | |
184 | - | else G(S, O[T]) | |
185 | - | ||
186 | - | func U (S,T) = if ((T >= P)) | |
187 | - | then S | |
188 | - | else throw("List size exceeds 5") | |
189 | - | ||
190 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
191 | - | } | |
192 | - | let al = { | |
193 | - | let O = split(getStringValue(this, c), ",") | |
194 | - | let P = size(O) | |
195 | - | let Q = nil | |
196 | - | func R (S,T) = if ((T >= P)) | |
197 | - | then S | |
198 | - | else G(S, O[T]) | |
199 | - | ||
200 | - | func U (S,T) = if ((T >= P)) | |
201 | - | then S | |
202 | - | else throw("List size exceeds 5") | |
203 | - | ||
204 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
205 | - | } | |
206 | - | let am = split(getStringValue(this, d), ",") | |
207 | - | let an = split(getStringValue(this, g), ",") | |
208 | - | let ao = { | |
209 | - | let O = al | |
210 | - | let P = size(O) | |
211 | - | let Q = $Tuple2(ai, nil) | |
212 | - | func R (S,T) = if ((T >= P)) | |
213 | - | then S | |
214 | - | else H(S, O[T]) | |
215 | - | ||
216 | - | func U (S,T) = if ((T >= P)) | |
217 | - | then S | |
218 | - | else throw("List size exceeds 5") | |
219 | - | ||
220 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
221 | - | } | |
222 | - | let ap = ao._2 | |
223 | - | let aq = { | |
224 | - | let O = ap | |
225 | - | let P = size(O) | |
226 | - | let Q = "" | |
227 | - | func R (S,T) = if ((T >= P)) | |
228 | - | then S | |
229 | - | else D(S, O[T]) | |
230 | - | ||
231 | - | func U (S,T) = if ((T >= P)) | |
232 | - | then S | |
233 | - | else throw("List size exceeds 5") | |
234 | - | ||
235 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
236 | - | } | |
237 | - | let ar = if ((ap[0] != ak[0])) | |
238 | - | then { | |
239 | - | let as = (ap[0] - ak[0]) | |
240 | - | invoke(o, "add", [am[0], as], nil) | |
241 | - | } | |
242 | - | else 0 | |
243 | - | if ((ar == ar)) | |
244 | - | then { | |
245 | - | let at = if ((ap[1] != ak[1])) | |
246 | - | then { | |
247 | - | let as = (ap[1] - ak[1]) | |
248 | - | invoke(o, "add", [am[1], as], nil) | |
249 | - | } | |
250 | - | else 0 | |
251 | - | if ((at == at)) | |
252 | - | then { | |
253 | - | let au = if ((ap[2] != ak[2])) | |
274 | + | else if ((U != am)) | |
275 | + | then throw("There is no active launchpad or this launchpad is ended") | |
276 | + | else if ((aq > height)) | |
277 | + | then throw("Launchpad sale not started yet") | |
278 | + | else if ((height > (aq + aM))) | |
279 | + | then throw("Launchpad sale ended") | |
280 | + | else if (if ((size(al.payments) != 1)) | |
281 | + | then true | |
282 | + | else (aA != Q)) | |
283 | + | then throw("One attached payment in USDN expected") | |
284 | + | else if ((bi >= S)) | |
285 | + | then throw((("You can buy only " + toString(S)) + "allocations")) | |
286 | + | else if (if ((bk != az)) | |
287 | + | then ((bk * 2) != az) | |
288 | + | else false) | |
289 | + | then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString(bk)) + " USDN per allocation")) | |
290 | + | else { | |
291 | + | let bl = (az / bk) | |
292 | + | let bd = invoke(P, "lockNeutrino", nil, [AttachedPayment(aA, az)]) | |
293 | + | if ((bd == bd)) | |
254 | 294 | then { | |
255 | - | let as = (ap[2] - ak[2]) | |
256 | - | invoke(o, "add", [am[2], as], nil) | |
257 | - | } | |
258 | - | else 0 | |
259 | - | if ((au == au)) | |
260 | - | then { | |
261 | - | let av = if ((ap[3] != ak[3])) | |
262 | - | then { | |
263 | - | let as = (ap[3] - ak[3]) | |
264 | - | invoke(o, "add", [am[3], as], nil) | |
265 | - | } | |
266 | - | else 0 | |
267 | - | if ((av == av)) | |
268 | - | then { | |
269 | - | let aw = if ((ap[4] != ak[4])) | |
270 | - | then { | |
271 | - | let as = (ap[4] - ak[4]) | |
272 | - | invoke(o, "add", [am[4], as], nil) | |
273 | - | } | |
274 | - | else 0 | |
275 | - | if ((aw == aw)) | |
276 | - | then { | |
277 | - | let ax = [IntegerEntry(i, ai), IntegerEntry((toString(V.caller) + l), (aj + ag)), StringEntry(e, aq)] | |
278 | - | let ay = L(aj) | |
279 | - | let az = L(ai) | |
280 | - | let aA = (az - ay) | |
281 | - | if ((aA > 0)) | |
282 | - | then { | |
283 | - | let aB = if ((aA == 1)) | |
284 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
285 | - | else 0 | |
286 | - | if ((aB == aB)) | |
287 | - | then { | |
288 | - | let aC = if ((aA >= 2)) | |
289 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
290 | - | else 0 | |
291 | - | if ((aC == aC)) | |
292 | - | then { | |
293 | - | let aD = if ((aA >= 3)) | |
294 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
295 | - | else 0 | |
296 | - | if ((aD == aD)) | |
297 | - | then { | |
298 | - | let aE = if ((aA == 4)) | |
299 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
300 | - | else 0 | |
301 | - | if ((aE == aE)) | |
302 | - | then ax | |
303 | - | else throw("Strict value is not equal to itself.") | |
304 | - | } | |
305 | - | else throw("Strict value is not equal to itself.") | |
306 | - | } | |
307 | - | else throw("Strict value is not equal to itself.") | |
308 | - | } | |
309 | - | else throw("Strict value is not equal to itself.") | |
310 | - | } | |
311 | - | else ax | |
312 | - | } | |
313 | - | else throw("Strict value is not equal to itself.") | |
314 | - | } | |
315 | - | else throw("Strict value is not equal to itself.") | |
295 | + | let be = [IntegerEntry((((toString(al.caller) + "_") + toString(am)) + I), (bi + bl)), IntegerEntry((((toString(al.caller) + "_") + toString(am)) + H), (bg + az)), IntegerEntry((toString(am) + B), (bh + az))] | |
296 | + | if (!(isDefined(getString(this, (((toString(al.caller) + "_") + toString(am)) + y))))) | |
297 | + | then (be ++ [StringEntry((((toString(al.caller) + "_") + toString(am)) + y), aG)]) | |
298 | + | else be | |
316 | 299 | } | |
317 | 300 | else throw("Strict value is not equal to itself.") | |
318 | 301 | } | |
302 | + | } | |
303 | + | ||
304 | + | ||
305 | + | ||
306 | + | @Callable(al) | |
307 | + | func finalise (am,bm,bn) = { | |
308 | + | let bo = getStringValue(this, (toString(am) + z)) | |
309 | + | let bp = toBase58String(sha256((toBytes(bm) + toBytes(bn)))) | |
310 | + | if (!(T)) | |
311 | + | then throw("DApp is inactive at this moment") | |
312 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
313 | + | then throw("Only admin can call this function") | |
314 | + | else if ((bp != bo)) | |
315 | + | then throw("vrf Height hash not matching") | |
316 | + | else { | |
317 | + | let ap = addressFromStringValue(getStringValue(this, (toString(am) + i))) | |
318 | + | let ar = getIntegerValue(this, (toString(am) + m)) | |
319 | + | let bq = valueOrElse(getInteger(this, (toString(am) + D)), 0) | |
320 | + | let br = getIntegerValue(this, (toString(am) + p)) | |
321 | + | let bs = fraction(br, ar, 100) | |
322 | + | let bt = getIntegerValue(this, (toString(am) + C)) | |
323 | + | let bu = fraction(bt, ar, 100) | |
324 | + | let bv = (((br + bt) + bs) + bu) | |
325 | + | if ((bq > (br + bt))) | |
326 | + | then throw("Can't transfer negative value to project") | |
327 | + | else { | |
328 | + | let bd = invoke(P, "unlockNeutrino", [bv, toBase58String(Q)], nil) | |
329 | + | if ((bd == bd)) | |
330 | + | then [IntegerEntry((toString(am) + l), height), ScriptTransfer(ap, ((br + bt) - bq), Q), ScriptTransfer(O, (bs + bu), Q)] | |
319 | 331 | else throw("Strict value is not equal to itself.") | |
320 | 332 | } | |
321 | - | else throw("Strict value is not equal to itself.") | |
322 | 333 | } | |
323 | 334 | } | |
324 | 335 | ||
325 | 336 | ||
326 | 337 | ||
327 | - | @Callable(V) | |
328 | - | func hashingRandom (aF) = if (!(C)) | |
329 | - | then throw("DApp is inactive at this moment") | |
330 | - | else if (!(containsElement([x, y, z], V.callerPublicKey))) | |
331 | - | then throw("Only admin can call this function") | |
332 | - | else [StringEntry(j, aF)] | |
333 | - | ||
334 | - | ||
335 | - | ||
336 | - | @Callable(V) | |
337 | - | func finalize (aG,aH) = { | |
338 | - | let aI = getStringValue(this, j) | |
339 | - | let aJ = toBase58String(sha256((toBytes(aG) + toBytes(aH)))) | |
340 | - | if (!(C)) | |
338 | + | @Callable(al) | |
339 | + | func claim (am) = { | |
340 | + | let bw = valueOrElse(getBoolean(this, (((toString(al.caller) + "_") + toString(am)) + J)), false) | |
341 | + | let bx = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + E)), 0) | |
342 | + | let bi = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + I)), 0) | |
343 | + | if (!(T)) | |
341 | 344 | then throw("DApp is inactive at this moment") | |
342 | - | else if (!(containsElement([x, y, z], V.callerPublicKey))) | |
343 | - | then throw("Only admin can call this function") | |
344 | - | else if ((aJ != aI)) | |
345 | - | then throw("vrf Height hash not matching") | |
346 | - | else { | |
347 | - | let aK = getIntegerValue(this, i) | |
348 | - | [Burn(B, aK), IntegerEntry(k, height)] | |
349 | - | } | |
345 | + | else if (!(isDefined(getInteger(this, (toString(am) + l))))) | |
346 | + | then throw("You can't claim because results are not finalized") | |
347 | + | else if (bw) | |
348 | + | then throw("You are already claimed") | |
349 | + | else if (if ((bx == 0)) | |
350 | + | then (bi == 0) | |
351 | + | else false) | |
352 | + | then throw("You can't claim because you don't buy anything") | |
353 | + | else { | |
354 | + | let aO = fromBase58String(getStringValue(this, (toString(am) + n))) | |
355 | + | let by = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + K)), 0) | |
356 | + | let bz = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + G)), 0) | |
357 | + | let ar = getIntegerValue(this, (toString(am) + m)) | |
358 | + | let bA = min([bi, bz]) | |
359 | + | let aN = getIntegerValue(this, (toString(am) + r)) | |
360 | + | let as = getIntegerValue(this, (toString(am) + q)) | |
361 | + | let bB = ad(aO) | |
362 | + | let aQ = bB._1 | |
363 | + | let aR = bB._2 | |
364 | + | let aS = bB._3 | |
365 | + | let aT = fraction(as, aN, pow(10, 0, aS, 0, 0, DOWN)) | |
366 | + | let aw = getIntegerValue(this, (toString(am) + v)) | |
367 | + | let bC = ((by * as) + (bA * aw)) | |
368 | + | let bD = ((bi - bA) * aw) | |
369 | + | let bE = fraction(fraction(bD, aN, pow(10, 0, aS, 0, 0, DOWN)), (100 + ar), 100) | |
370 | + | let bF = fraction(((bx - by) * aT), (100 + ar), 100) | |
371 | + | if (if ((0 > bE)) | |
372 | + | then true | |
373 | + | else (0 > bF)) | |
374 | + | then throw("Error with allowed allocation param or wonned tickets param please contact support") | |
375 | + | else { | |
376 | + | let bG = (bE + bF) | |
377 | + | let bH = if ((bG > 0)) | |
378 | + | then [ScriptTransfer(al.caller, bG, Q)] | |
379 | + | else nil | |
380 | + | let bI = if ((bC > 0)) | |
381 | + | then [ScriptTransfer(al.caller, bC, aO)] | |
382 | + | else nil | |
383 | + | let bd = if ((bG > 0)) | |
384 | + | then invoke(P, "unlockNeutrino", [bG, toBase58String(Q)], nil) | |
385 | + | else 0 | |
386 | + | if ((bd == bd)) | |
387 | + | then (([BooleanEntry((((toString(al.caller) + "_") + toString(am)) + J), true)] ++ bI) ++ bH) | |
388 | + | else throw("Strict value is not equal to itself.") | |
389 | + | } | |
390 | + | } | |
350 | 391 | } | |
351 | 392 | ||
352 | 393 | ||
353 | 394 | ||
354 | - | @Callable(V) | |
355 | - | func shutdown () = if (!(C)) | |
395 | + | @Callable(al) | |
396 | + | func transferUsd (am,bJ) = if (!(T)) | |
397 | + | then throw("DApp is inactive") | |
398 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
399 | + | then throw("Only admin can call this function") | |
400 | + | else { | |
401 | + | let ap = addressFromStringValue(getStringValue(this, (toString(am) + i))) | |
402 | + | [IntegerEntry((toString(am) + D), bJ), ScriptTransfer(ap, bJ, Q)] | |
403 | + | } | |
404 | + | ||
405 | + | ||
406 | + | ||
407 | + | @Callable(al) | |
408 | + | func shutdown () = if (!(T)) | |
356 | 409 | then throw("DApp already inactive") | |
357 | - | else if (!(containsElement([ | |
410 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
358 | 411 | then throw("Only admin can call this function") | |
359 | 412 | else [BooleanEntry(a, false)] | |
360 | 413 | ||
361 | 414 | ||
362 | 415 | ||
363 | - | @Callable( | |
364 | - | func activate () = if ( | |
416 | + | @Callable(al) | |
417 | + | func activate () = if (T) | |
365 | 418 | then throw("DApp already active") | |
366 | - | else if (!(containsElement([ | |
419 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
367 | 420 | then throw("Only admin can call this function") | |
368 | 421 | else [BooleanEntry(a, true)] | |
369 | 422 | ||
370 | 423 | ||
371 | - | @Verifier( | |
372 | - | func | |
373 | - | let | |
374 | - | let | |
424 | + | @Verifier(bK) | |
425 | + | func bL () = { | |
426 | + | let bM = { | |
427 | + | let bN = if (sigVerify(bK.bodyBytes, bK.proofs[0], aa)) | |
375 | 428 | then 1 | |
376 | 429 | else 0 | |
377 | - | let | |
430 | + | let bO = if (sigVerify(bK.bodyBytes, bK.proofs[1], ab)) | |
378 | 431 | then 1 | |
379 | 432 | else 0 | |
380 | - | let | |
433 | + | let bP = if (sigVerify(bK.bodyBytes, bK.proofs[2], ac)) | |
381 | 434 | then 1 | |
382 | 435 | else 0 | |
383 | - | ((( | |
436 | + | (((bN + bO) + bP) >= 2) | |
384 | 437 | } | |
385 | - | let | |
438 | + | let bQ = if (if (if (sigVerify(bK.bodyBytes, bK.proofs[0], aa)) | |
386 | 439 | then true | |
387 | - | else sigVerify( | |
440 | + | else sigVerify(bK.bodyBytes, bK.proofs[0], ab)) | |
388 | 441 | then true | |
389 | - | else sigVerify( | |
442 | + | else sigVerify(bK.bodyBytes, bK.proofs[0], ac)) | |
390 | 443 | then true | |
391 | - | else sigVerify(aL.bodyBytes, aL.proofs[0], A) | |
392 | - | let u = aL | |
393 | - | aN | |
444 | + | else sigVerify(bK.bodyBytes, bK.proofs[0], R) | |
445 | + | let X = bK | |
446 | + | if ($isInstanceOf(X, "DataTransaction")) | |
447 | + | then { | |
448 | + | let bR = X | |
449 | + | if (valueOrElse(getBoolean(M, e), false)) | |
450 | + | then bQ | |
451 | + | else false | |
452 | + | } | |
453 | + | else bM | |
394 | 454 | } | |
395 | 455 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "active" | |
5 | 5 | ||
6 | - | let b = " | |
6 | + | let b = "admin_pub_1" | |
7 | 7 | ||
8 | - | let c = " | |
8 | + | let c = "admin_pub_2" | |
9 | 9 | ||
10 | - | let d = " | |
10 | + | let d = "admin_pub_3" | |
11 | 11 | ||
12 | - | let e = " | |
12 | + | let e = "launchpad_data_transaction_status" | |
13 | 13 | ||
14 | - | let f = " | |
14 | + | let f = "launchpad_next_id" | |
15 | 15 | ||
16 | - | let g = " | |
16 | + | let g = "launchpad_active_id" | |
17 | 17 | ||
18 | - | let h = " | |
18 | + | let h = "init_caller" | |
19 | 19 | ||
20 | - | let i = " | |
20 | + | let i = "_address" | |
21 | 21 | ||
22 | - | let j = " | |
22 | + | let j = "_init_height" | |
23 | 23 | ||
24 | - | let k = " | |
24 | + | let k = "_start_height" | |
25 | 25 | ||
26 | - | let l = "_ | |
26 | + | let l = "_finalise_height" | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = "_comission" | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = "_asset_id" | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = "_total_token_amount" | |
33 | 33 | ||
34 | - | let p = " | |
34 | + | let p = "_total_usdn_sold" | |
35 | 35 | ||
36 | - | let q = " | |
36 | + | let q = "_tokens_per_ticket" | |
37 | 37 | ||
38 | - | let r = " | |
38 | + | let r = "_price_per_token" | |
39 | 39 | ||
40 | - | func s (t) = { | |
41 | - | let u = getString(m, t) | |
42 | - | if ($isInstanceOf(u, "String")) | |
40 | + | let s = "_swop_per_ticket" | |
41 | + | ||
42 | + | let t = "_tickets_swopfi_members" | |
43 | + | ||
44 | + | let u = "_tokens_access_list" | |
45 | + | ||
46 | + | let v = "_tokens_per_allocation" | |
47 | + | ||
48 | + | let w = "_ticket_last_number" | |
49 | + | ||
50 | + | let x = "_SWOP_amount" | |
51 | + | ||
52 | + | let y = "_ref_id" | |
53 | + | ||
54 | + | let z = "_verify_hash" | |
55 | + | ||
56 | + | let A = "_duration" | |
57 | + | ||
58 | + | let B = "_total_purchased_usdn_in_marketing" | |
59 | + | ||
60 | + | let C = "_total_purchased_usdn_in_marketing_finalized" | |
61 | + | ||
62 | + | let D = "_transfer_usd" | |
63 | + | ||
64 | + | let E = "_bought_tickets" | |
65 | + | ||
66 | + | let F = "_tickets_number" | |
67 | + | ||
68 | + | let G = "_available_purchase_marketing" | |
69 | + | ||
70 | + | let H = "_purchased_usdn_in_marketing" | |
71 | + | ||
72 | + | let I = "_bought_allocations" | |
73 | + | ||
74 | + | let J = "_claim_status" | |
75 | + | ||
76 | + | let K = "_tickets_result" | |
77 | + | ||
78 | + | let L = 100 | |
79 | + | ||
80 | + | let M = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9') | |
81 | + | ||
82 | + | let N = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU') | |
83 | + | ||
84 | + | let O = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG') | |
85 | + | ||
86 | + | let P = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg') | |
87 | + | ||
88 | + | let Q = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
89 | + | ||
90 | + | let R = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
91 | + | ||
92 | + | let S = 2 | |
93 | + | ||
94 | + | let T = valueOrElse(getBoolean(this, a), true) | |
95 | + | ||
96 | + | let U = valueOrElse(getIntegerValue(this, g), -1) | |
97 | + | ||
98 | + | func V (W) = { | |
99 | + | let X = getString(M, W) | |
100 | + | if ($isInstanceOf(X, "String")) | |
43 | 101 | then { | |
44 | - | let | |
45 | - | fromBase58String( | |
102 | + | let Y = X | |
103 | + | fromBase58String(Y) | |
46 | 104 | } | |
47 | 105 | else { | |
48 | - | let | |
106 | + | let Z = X | |
49 | 107 | throw("Admin public key is empty") | |
50 | 108 | } | |
51 | 109 | } | |
52 | 110 | ||
53 | 111 | ||
54 | - | let | |
112 | + | let aa = V(b) | |
55 | 113 | ||
56 | - | let | |
114 | + | let ab = V(c) | |
57 | 115 | ||
58 | - | let | |
116 | + | let ac = V(d) | |
59 | 117 | ||
60 | - | let A = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK' | |
61 | - | ||
62 | - | let B = fromBase58String(getStringValue(n, h)) | |
63 | - | ||
64 | - | let C = valueOrElse(getBoolean(this, a), true) | |
65 | - | ||
66 | - | func D (E,F) = if ((E == "")) | |
67 | - | then (E + toString(F)) | |
68 | - | else ((E + ",") + toString(F)) | |
69 | - | ||
70 | - | ||
71 | - | func G (E,F) = (E :+ parseIntValue(F)) | |
72 | - | ||
73 | - | ||
74 | - | func H (E,F) = { | |
75 | - | let I = E | |
76 | - | let J = I._1 | |
77 | - | let K = I._2 | |
78 | - | $Tuple2(J, (K :+ (J / F))) | |
118 | + | func ad (ae) = { | |
119 | + | let X = ae | |
120 | + | if ($isInstanceOf(X, "ByteVector")) | |
121 | + | then { | |
122 | + | let af = X | |
123 | + | let ag = toBase58String(af) | |
124 | + | let ah = valueOrErrorMessage(assetInfo(af), (("Asset " + ag) + " doesn't exist")) | |
125 | + | $Tuple3(ag, ah.name, ah.decimals) | |
126 | + | } | |
127 | + | else if ($isInstanceOf(X, "Unit")) | |
128 | + | then { | |
129 | + | let ai = X | |
130 | + | $Tuple3("WAVES", "WAVES", 8) | |
131 | + | } | |
132 | + | else throw("Match error") | |
79 | 133 | } | |
80 | 134 | ||
81 | 135 | ||
82 | - | func L (M) = { | |
83 | - | let N = { | |
84 | - | let O = split(getStringValue(this, f), ",") | |
85 | - | let P = size(O) | |
86 | - | let Q = nil | |
87 | - | func R (S,T) = if ((T >= P)) | |
88 | - | then S | |
89 | - | else G(S, O[T]) | |
136 | + | func aj () = valueOrElse(getInteger(this, f), 1) | |
90 | 137 | ||
91 | - | func U (S,T) = if ((T >= P)) | |
92 | - | then S | |
93 | - | else throw("List size exceeds 5") | |
94 | 138 | ||
95 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
96 | - | } | |
97 | - | if ((N[3] >= M)) | |
98 | - | then 4 | |
99 | - | else if ((N[2] >= M)) | |
100 | - | then 3 | |
101 | - | else if ((N[1] >= M)) | |
102 | - | then 2 | |
103 | - | else if ((N[0] >= M)) | |
104 | - | then 1 | |
105 | - | else 0 | |
139 | + | func ak () = valueOrElse(getInteger(P, ((("rpd_balance_" + toBase58String(Q)) + "_") + toString(this))), 0) | |
140 | + | ||
141 | + | ||
142 | + | @Callable(al) | |
143 | + | func hashingRandom (am,an) = if (!(T)) | |
144 | + | then throw("DApp is inactive at this moment") | |
145 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
146 | + | then throw("Only admin can call this function") | |
147 | + | else [StringEntry((toString(am) + z), an)] | |
148 | + | ||
149 | + | ||
150 | + | ||
151 | + | @Callable(al) | |
152 | + | func initCaller (ao) = if (!(T)) | |
153 | + | then throw("DApp is inactive at this moment") | |
154 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
155 | + | then throw("Only admin can call this function") | |
156 | + | else [StringEntry(h, ao)] | |
157 | + | ||
158 | + | ||
159 | + | ||
160 | + | @Callable(al) | |
161 | + | func init (ap,aq,ar,as,at,au,av,aw,ax) = { | |
162 | + | let ay = $Tuple2(al.payments[0].amount, al.payments[0].assetId) | |
163 | + | let az = ay._1 | |
164 | + | let aA = ay._2 | |
165 | + | if (!(T)) | |
166 | + | then throw("DApp is inactive at this moment") | |
167 | + | else if ((toString(al.caller) != valueOrElse(getString(this, h), ""))) | |
168 | + | then throw("Only project admin can call init function") | |
169 | + | else if ((size(al.payments) != 1)) | |
170 | + | then throw("One attached payment expected") | |
171 | + | else if ((height > aq)) | |
172 | + | then throw("Start height must be greater than blockchain height") | |
173 | + | else { | |
174 | + | let aB = ad(aA) | |
175 | + | let aC = aB._1 | |
176 | + | let aD = aB._2 | |
177 | + | let aE = aB._3 | |
178 | + | let am = aj() | |
179 | + | let aF = toString(am) | |
180 | + | [IntegerEntry((aC + "_launchpad"), am), IntegerEntry(f, (am + 1)), StringEntry((aF + i), ap), IntegerEntry((aF + j), height), IntegerEntry((aF + k), aq), IntegerEntry((aF + A), L), IntegerEntry((aF + o), az), StringEntry((aF + n), aC), IntegerEntry((aF + m), ar), IntegerEntry((aF + w), 0), IntegerEntry((aF + q), as), IntegerEntry((aF + r), at), IntegerEntry((aF + s), ax), IntegerEntry((aF + t), au), IntegerEntry((aF + u), av), IntegerEntry((aF + v), aw), IntegerEntry(g, am), StringEntry(h, "")] | |
181 | + | } | |
106 | 182 | } | |
107 | 183 | ||
108 | 184 | ||
109 | - | @Callable(V) | |
110 | - | func init (W,X,Y,N,Z) = if (!(containsElement([x, y, z], V.callerPublicKey))) | |
111 | - | then throw("Only admin can call this function") | |
112 | - | else if (isDefined(getInteger(this, b))) | |
113 | - | then throw("DApp is already inited") | |
114 | - | else if ((height > W)) | |
115 | - | then throw("Burning ending must be greater than current height") | |
116 | - | else if (if ((size(X) != 5)) | |
117 | - | then true | |
118 | - | else (size(Y) != 5)) | |
119 | - | then throw("Amount of prizes achievemts lists must equal to 5") | |
120 | - | else if (if ((size(N) != 4)) | |
121 | - | then true | |
122 | - | else (size(Z) != 4)) | |
123 | - | then throw("Amount of levels lists must equal to 4") | |
124 | - | else { | |
125 | - | let aa = { | |
126 | - | let O = X | |
127 | - | let P = size(O) | |
128 | - | let Q = "" | |
129 | - | func R (S,T) = if ((T >= P)) | |
130 | - | then S | |
131 | - | else D(S, O[T]) | |
132 | 185 | ||
133 | - | func U (S,T) = if ((T >= P)) | |
134 | - | then S | |
135 | - | else throw("List size exceeds 5") | |
136 | - | ||
137 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
138 | - | } | |
139 | - | let ab = makeString(Y, ",") | |
140 | - | let ac = { | |
141 | - | let O = N | |
142 | - | let P = size(O) | |
143 | - | let Q = "" | |
144 | - | func R (S,T) = if ((T >= P)) | |
145 | - | then S | |
146 | - | else D(S, O[T]) | |
147 | - | ||
148 | - | func U (S,T) = if ((T >= P)) | |
149 | - | then S | |
150 | - | else throw("List size exceeds 5") | |
151 | - | ||
152 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
153 | - | } | |
154 | - | let ad = makeString(Z, ",") | |
155 | - | let ae = "0,0,0,0,0" | |
156 | - | [IntegerEntry(b, W), StringEntry(c, aa), StringEntry(d, ab), StringEntry(f, ac), StringEntry(g, ad), StringEntry(e, ae)] | |
157 | - | } | |
186 | + | @Callable(al) | |
187 | + | func commitSwopfiSale (am,aG) = { | |
188 | + | let aH = $Tuple2(al.payments[0].amount, al.payments[0].assetId) | |
189 | + | let az = aH._1 | |
190 | + | let aA = aH._2 | |
191 | + | let aI = valueOrElse(getInteger(N, (toString(al.caller) + x)), 0) | |
192 | + | let aJ = (aI / getIntegerValue(this, (toString(am) + s))) | |
193 | + | let aK = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + E)), 0) | |
194 | + | let aL = (aJ - aK) | |
195 | + | let aq = value(getInteger(this, (toString(am) + k))) | |
196 | + | let aM = value(getInteger(this, (toString(am) + A))) | |
197 | + | if (!(T)) | |
198 | + | then throw("DApp is inactive at this moment") | |
199 | + | else if ((U != am)) | |
200 | + | then throw("There is no active launchpad or this launchpad is ended") | |
201 | + | else if ((aq > height)) | |
202 | + | then throw("Launchpad sale not started yet") | |
203 | + | else if ((height > (aq + aM))) | |
204 | + | then throw("Launchpad sale ended") | |
205 | + | else if (if ((size(al.payments) != 1)) | |
206 | + | then true | |
207 | + | else (aA != Q)) | |
208 | + | then throw("One attached payment in USDN expected") | |
209 | + | else if (if ((0 >= aJ)) | |
210 | + | then true | |
211 | + | else (0 >= aL)) | |
212 | + | then throw("Not enought SWOP in staking to buy tickets") | |
213 | + | else { | |
214 | + | let aN = getIntegerValue(this, (toString(am) + r)) | |
215 | + | let as = getIntegerValue(this, (toString(am) + q)) | |
216 | + | let aO = fromBase58String(getStringValue(this, (toString(am) + n))) | |
217 | + | let aP = ad(aO) | |
218 | + | let aQ = aP._1 | |
219 | + | let aR = aP._2 | |
220 | + | let aS = aP._3 | |
221 | + | let aT = fraction(as, aN, pow(10, 0, aS, 0, 0, DOWN)) | |
222 | + | let aU = fraction(aT, getIntegerValue(this, (toString(am) + m)), 100) | |
223 | + | let aV = (az / (aT + aU)) | |
224 | + | let aW = min([aV, aL]) | |
225 | + | let aX = (aW * (aT + aU)) | |
226 | + | let aY = (az - aX) | |
227 | + | if ((aV == 0)) | |
228 | + | then throw("Not enought USDN to buy tickets") | |
229 | + | else if ((aY != 0)) | |
230 | + | then throw((((("Wrong payment. To buy " + toString(aW)) + "tickets you need to pay ") + toString(aX)) + "USDN")) | |
231 | + | else { | |
232 | + | let aZ = valueOrElse(getString(this, (((toString(al.caller) + "_") + toString(am)) + F)), "") | |
233 | + | let ba = getIntegerValue(this, (toString(am) + w)) | |
234 | + | let bb = ((toString((ba + 1)) + "-") + toString((ba + aW))) | |
235 | + | let bc = (aZ + (if ((aZ != "")) | |
236 | + | then ("," + bb) | |
237 | + | else ("" + bb))) | |
238 | + | let bd = invoke(P, "lockNeutrino", nil, [AttachedPayment(aA, az)]) | |
239 | + | if ((bd == bd)) | |
240 | + | then { | |
241 | + | let be = [IntegerEntry((((toString(al.caller) + "_") + toString(am)) + E), (aK + aW)), IntegerEntry((toString(am) + w), (ba + aW)), StringEntry((((toString(al.caller) + "_") + toString(am)) + F), bc)] | |
242 | + | if (!(isDefined(getString(this, (((toString(al.caller) + "_") + toString(am)) + y))))) | |
243 | + | then (be ++ [StringEntry((((toString(al.caller) + "_") + toString(am)) + y), aG)]) | |
244 | + | else be | |
245 | + | } | |
246 | + | else throw("Strict value is not equal to itself.") | |
247 | + | } | |
248 | + | } | |
249 | + | } | |
158 | 250 | ||
159 | 251 | ||
160 | 252 | ||
161 | - | @Callable(V) | |
162 | - | func add () = { | |
163 | - | let af = $Tuple2(V.payments[0].amount, V.payments[0].assetId) | |
164 | - | let ag = af._1 | |
165 | - | let ah = af._2 | |
166 | - | let W = valueOrElse(getInteger(this, b), 0) | |
167 | - | if (!(C)) | |
253 | + | @Callable(al) | |
254 | + | func commitAccessListSale (am,aG) = { | |
255 | + | let bf = $Tuple2(al.payments[0].amount, al.payments[0].assetId) | |
256 | + | let az = bf._1 | |
257 | + | let aA = bf._2 | |
258 | + | let bg = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + H)), 0) | |
259 | + | let bh = valueOrElse(getInteger(this, (toString(am) + B)), 0) | |
260 | + | let bi = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + I)), 0) | |
261 | + | let ar = getIntegerValue(this, (toString(am) + m)) | |
262 | + | let aN = getIntegerValue(this, (toString(am) + r)) | |
263 | + | let aw = getIntegerValue(this, (toString(am) + v)) | |
264 | + | let aO = fromBase58String(getStringValue(this, (toString(am) + n))) | |
265 | + | let bj = ad(aO) | |
266 | + | let aQ = bj._1 | |
267 | + | let aR = bj._2 | |
268 | + | let aS = bj._3 | |
269 | + | let bk = fraction(fraction(aN, aw, pow(10, 0, aS, 0, 0, DOWN)), (100 + ar), 100) | |
270 | + | let aq = value(getInteger(this, (toString(am) + k))) | |
271 | + | let aM = value(getInteger(this, (toString(am) + A))) | |
272 | + | if (!(T)) | |
168 | 273 | then throw("DApp is inactive at this moment") | |
169 | - | else if (if ((height > W)) | |
170 | - | then true | |
171 | - | else (W == 0)) | |
172 | - | then throw("Swop burning are ended or not started yet") | |
173 | - | else if ((ah != B)) | |
174 | - | then throw("You can add only SWOP token") | |
175 | - | else { | |
176 | - | let ai = (valueOrElse(getInteger(this, i), 0) + ag) | |
177 | - | let aj = valueOrElse(getInteger(this, (toString(V.caller) + l)), 0) | |
178 | - | let ak = { | |
179 | - | let O = split(getStringValue(this, e), ",") | |
180 | - | let P = size(O) | |
181 | - | let Q = nil | |
182 | - | func R (S,T) = if ((T >= P)) | |
183 | - | then S | |
184 | - | else G(S, O[T]) | |
185 | - | ||
186 | - | func U (S,T) = if ((T >= P)) | |
187 | - | then S | |
188 | - | else throw("List size exceeds 5") | |
189 | - | ||
190 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
191 | - | } | |
192 | - | let al = { | |
193 | - | let O = split(getStringValue(this, c), ",") | |
194 | - | let P = size(O) | |
195 | - | let Q = nil | |
196 | - | func R (S,T) = if ((T >= P)) | |
197 | - | then S | |
198 | - | else G(S, O[T]) | |
199 | - | ||
200 | - | func U (S,T) = if ((T >= P)) | |
201 | - | then S | |
202 | - | else throw("List size exceeds 5") | |
203 | - | ||
204 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
205 | - | } | |
206 | - | let am = split(getStringValue(this, d), ",") | |
207 | - | let an = split(getStringValue(this, g), ",") | |
208 | - | let ao = { | |
209 | - | let O = al | |
210 | - | let P = size(O) | |
211 | - | let Q = $Tuple2(ai, nil) | |
212 | - | func R (S,T) = if ((T >= P)) | |
213 | - | then S | |
214 | - | else H(S, O[T]) | |
215 | - | ||
216 | - | func U (S,T) = if ((T >= P)) | |
217 | - | then S | |
218 | - | else throw("List size exceeds 5") | |
219 | - | ||
220 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
221 | - | } | |
222 | - | let ap = ao._2 | |
223 | - | let aq = { | |
224 | - | let O = ap | |
225 | - | let P = size(O) | |
226 | - | let Q = "" | |
227 | - | func R (S,T) = if ((T >= P)) | |
228 | - | then S | |
229 | - | else D(S, O[T]) | |
230 | - | ||
231 | - | func U (S,T) = if ((T >= P)) | |
232 | - | then S | |
233 | - | else throw("List size exceeds 5") | |
234 | - | ||
235 | - | U(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5) | |
236 | - | } | |
237 | - | let ar = if ((ap[0] != ak[0])) | |
238 | - | then { | |
239 | - | let as = (ap[0] - ak[0]) | |
240 | - | invoke(o, "add", [am[0], as], nil) | |
241 | - | } | |
242 | - | else 0 | |
243 | - | if ((ar == ar)) | |
244 | - | then { | |
245 | - | let at = if ((ap[1] != ak[1])) | |
246 | - | then { | |
247 | - | let as = (ap[1] - ak[1]) | |
248 | - | invoke(o, "add", [am[1], as], nil) | |
249 | - | } | |
250 | - | else 0 | |
251 | - | if ((at == at)) | |
252 | - | then { | |
253 | - | let au = if ((ap[2] != ak[2])) | |
274 | + | else if ((U != am)) | |
275 | + | then throw("There is no active launchpad or this launchpad is ended") | |
276 | + | else if ((aq > height)) | |
277 | + | then throw("Launchpad sale not started yet") | |
278 | + | else if ((height > (aq + aM))) | |
279 | + | then throw("Launchpad sale ended") | |
280 | + | else if (if ((size(al.payments) != 1)) | |
281 | + | then true | |
282 | + | else (aA != Q)) | |
283 | + | then throw("One attached payment in USDN expected") | |
284 | + | else if ((bi >= S)) | |
285 | + | then throw((("You can buy only " + toString(S)) + "allocations")) | |
286 | + | else if (if ((bk != az)) | |
287 | + | then ((bk * 2) != az) | |
288 | + | else false) | |
289 | + | then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString(bk)) + " USDN per allocation")) | |
290 | + | else { | |
291 | + | let bl = (az / bk) | |
292 | + | let bd = invoke(P, "lockNeutrino", nil, [AttachedPayment(aA, az)]) | |
293 | + | if ((bd == bd)) | |
254 | 294 | then { | |
255 | - | let as = (ap[2] - ak[2]) | |
256 | - | invoke(o, "add", [am[2], as], nil) | |
257 | - | } | |
258 | - | else 0 | |
259 | - | if ((au == au)) | |
260 | - | then { | |
261 | - | let av = if ((ap[3] != ak[3])) | |
262 | - | then { | |
263 | - | let as = (ap[3] - ak[3]) | |
264 | - | invoke(o, "add", [am[3], as], nil) | |
265 | - | } | |
266 | - | else 0 | |
267 | - | if ((av == av)) | |
268 | - | then { | |
269 | - | let aw = if ((ap[4] != ak[4])) | |
270 | - | then { | |
271 | - | let as = (ap[4] - ak[4]) | |
272 | - | invoke(o, "add", [am[4], as], nil) | |
273 | - | } | |
274 | - | else 0 | |
275 | - | if ((aw == aw)) | |
276 | - | then { | |
277 | - | let ax = [IntegerEntry(i, ai), IntegerEntry((toString(V.caller) + l), (aj + ag)), StringEntry(e, aq)] | |
278 | - | let ay = L(aj) | |
279 | - | let az = L(ai) | |
280 | - | let aA = (az - ay) | |
281 | - | if ((aA > 0)) | |
282 | - | then { | |
283 | - | let aB = if ((aA == 1)) | |
284 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
285 | - | else 0 | |
286 | - | if ((aB == aB)) | |
287 | - | then { | |
288 | - | let aC = if ((aA >= 2)) | |
289 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
290 | - | else 0 | |
291 | - | if ((aC == aC)) | |
292 | - | then { | |
293 | - | let aD = if ((aA >= 3)) | |
294 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
295 | - | else 0 | |
296 | - | if ((aD == aD)) | |
297 | - | then { | |
298 | - | let aE = if ((aA == 4)) | |
299 | - | then invoke(o, "add", [an[(az - 1)], 1], nil) | |
300 | - | else 0 | |
301 | - | if ((aE == aE)) | |
302 | - | then ax | |
303 | - | else throw("Strict value is not equal to itself.") | |
304 | - | } | |
305 | - | else throw("Strict value is not equal to itself.") | |
306 | - | } | |
307 | - | else throw("Strict value is not equal to itself.") | |
308 | - | } | |
309 | - | else throw("Strict value is not equal to itself.") | |
310 | - | } | |
311 | - | else ax | |
312 | - | } | |
313 | - | else throw("Strict value is not equal to itself.") | |
314 | - | } | |
315 | - | else throw("Strict value is not equal to itself.") | |
295 | + | let be = [IntegerEntry((((toString(al.caller) + "_") + toString(am)) + I), (bi + bl)), IntegerEntry((((toString(al.caller) + "_") + toString(am)) + H), (bg + az)), IntegerEntry((toString(am) + B), (bh + az))] | |
296 | + | if (!(isDefined(getString(this, (((toString(al.caller) + "_") + toString(am)) + y))))) | |
297 | + | then (be ++ [StringEntry((((toString(al.caller) + "_") + toString(am)) + y), aG)]) | |
298 | + | else be | |
316 | 299 | } | |
317 | 300 | else throw("Strict value is not equal to itself.") | |
318 | 301 | } | |
302 | + | } | |
303 | + | ||
304 | + | ||
305 | + | ||
306 | + | @Callable(al) | |
307 | + | func finalise (am,bm,bn) = { | |
308 | + | let bo = getStringValue(this, (toString(am) + z)) | |
309 | + | let bp = toBase58String(sha256((toBytes(bm) + toBytes(bn)))) | |
310 | + | if (!(T)) | |
311 | + | then throw("DApp is inactive at this moment") | |
312 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
313 | + | then throw("Only admin can call this function") | |
314 | + | else if ((bp != bo)) | |
315 | + | then throw("vrf Height hash not matching") | |
316 | + | else { | |
317 | + | let ap = addressFromStringValue(getStringValue(this, (toString(am) + i))) | |
318 | + | let ar = getIntegerValue(this, (toString(am) + m)) | |
319 | + | let bq = valueOrElse(getInteger(this, (toString(am) + D)), 0) | |
320 | + | let br = getIntegerValue(this, (toString(am) + p)) | |
321 | + | let bs = fraction(br, ar, 100) | |
322 | + | let bt = getIntegerValue(this, (toString(am) + C)) | |
323 | + | let bu = fraction(bt, ar, 100) | |
324 | + | let bv = (((br + bt) + bs) + bu) | |
325 | + | if ((bq > (br + bt))) | |
326 | + | then throw("Can't transfer negative value to project") | |
327 | + | else { | |
328 | + | let bd = invoke(P, "unlockNeutrino", [bv, toBase58String(Q)], nil) | |
329 | + | if ((bd == bd)) | |
330 | + | then [IntegerEntry((toString(am) + l), height), ScriptTransfer(ap, ((br + bt) - bq), Q), ScriptTransfer(O, (bs + bu), Q)] | |
319 | 331 | else throw("Strict value is not equal to itself.") | |
320 | 332 | } | |
321 | - | else throw("Strict value is not equal to itself.") | |
322 | 333 | } | |
323 | 334 | } | |
324 | 335 | ||
325 | 336 | ||
326 | 337 | ||
327 | - | @Callable(V) | |
328 | - | func hashingRandom (aF) = if (!(C)) | |
329 | - | then throw("DApp is inactive at this moment") | |
330 | - | else if (!(containsElement([x, y, z], V.callerPublicKey))) | |
331 | - | then throw("Only admin can call this function") | |
332 | - | else [StringEntry(j, aF)] | |
333 | - | ||
334 | - | ||
335 | - | ||
336 | - | @Callable(V) | |
337 | - | func finalize (aG,aH) = { | |
338 | - | let aI = getStringValue(this, j) | |
339 | - | let aJ = toBase58String(sha256((toBytes(aG) + toBytes(aH)))) | |
340 | - | if (!(C)) | |
338 | + | @Callable(al) | |
339 | + | func claim (am) = { | |
340 | + | let bw = valueOrElse(getBoolean(this, (((toString(al.caller) + "_") + toString(am)) + J)), false) | |
341 | + | let bx = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + E)), 0) | |
342 | + | let bi = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + I)), 0) | |
343 | + | if (!(T)) | |
341 | 344 | then throw("DApp is inactive at this moment") | |
342 | - | else if (!(containsElement([x, y, z], V.callerPublicKey))) | |
343 | - | then throw("Only admin can call this function") | |
344 | - | else if ((aJ != aI)) | |
345 | - | then throw("vrf Height hash not matching") | |
346 | - | else { | |
347 | - | let aK = getIntegerValue(this, i) | |
348 | - | [Burn(B, aK), IntegerEntry(k, height)] | |
349 | - | } | |
345 | + | else if (!(isDefined(getInteger(this, (toString(am) + l))))) | |
346 | + | then throw("You can't claim because results are not finalized") | |
347 | + | else if (bw) | |
348 | + | then throw("You are already claimed") | |
349 | + | else if (if ((bx == 0)) | |
350 | + | then (bi == 0) | |
351 | + | else false) | |
352 | + | then throw("You can't claim because you don't buy anything") | |
353 | + | else { | |
354 | + | let aO = fromBase58String(getStringValue(this, (toString(am) + n))) | |
355 | + | let by = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + K)), 0) | |
356 | + | let bz = valueOrElse(getInteger(this, (((toString(al.caller) + "_") + toString(am)) + G)), 0) | |
357 | + | let ar = getIntegerValue(this, (toString(am) + m)) | |
358 | + | let bA = min([bi, bz]) | |
359 | + | let aN = getIntegerValue(this, (toString(am) + r)) | |
360 | + | let as = getIntegerValue(this, (toString(am) + q)) | |
361 | + | let bB = ad(aO) | |
362 | + | let aQ = bB._1 | |
363 | + | let aR = bB._2 | |
364 | + | let aS = bB._3 | |
365 | + | let aT = fraction(as, aN, pow(10, 0, aS, 0, 0, DOWN)) | |
366 | + | let aw = getIntegerValue(this, (toString(am) + v)) | |
367 | + | let bC = ((by * as) + (bA * aw)) | |
368 | + | let bD = ((bi - bA) * aw) | |
369 | + | let bE = fraction(fraction(bD, aN, pow(10, 0, aS, 0, 0, DOWN)), (100 + ar), 100) | |
370 | + | let bF = fraction(((bx - by) * aT), (100 + ar), 100) | |
371 | + | if (if ((0 > bE)) | |
372 | + | then true | |
373 | + | else (0 > bF)) | |
374 | + | then throw("Error with allowed allocation param or wonned tickets param please contact support") | |
375 | + | else { | |
376 | + | let bG = (bE + bF) | |
377 | + | let bH = if ((bG > 0)) | |
378 | + | then [ScriptTransfer(al.caller, bG, Q)] | |
379 | + | else nil | |
380 | + | let bI = if ((bC > 0)) | |
381 | + | then [ScriptTransfer(al.caller, bC, aO)] | |
382 | + | else nil | |
383 | + | let bd = if ((bG > 0)) | |
384 | + | then invoke(P, "unlockNeutrino", [bG, toBase58String(Q)], nil) | |
385 | + | else 0 | |
386 | + | if ((bd == bd)) | |
387 | + | then (([BooleanEntry((((toString(al.caller) + "_") + toString(am)) + J), true)] ++ bI) ++ bH) | |
388 | + | else throw("Strict value is not equal to itself.") | |
389 | + | } | |
390 | + | } | |
350 | 391 | } | |
351 | 392 | ||
352 | 393 | ||
353 | 394 | ||
354 | - | @Callable(V) | |
355 | - | func shutdown () = if (!(C)) | |
395 | + | @Callable(al) | |
396 | + | func transferUsd (am,bJ) = if (!(T)) | |
397 | + | then throw("DApp is inactive") | |
398 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
399 | + | then throw("Only admin can call this function") | |
400 | + | else { | |
401 | + | let ap = addressFromStringValue(getStringValue(this, (toString(am) + i))) | |
402 | + | [IntegerEntry((toString(am) + D), bJ), ScriptTransfer(ap, bJ, Q)] | |
403 | + | } | |
404 | + | ||
405 | + | ||
406 | + | ||
407 | + | @Callable(al) | |
408 | + | func shutdown () = if (!(T)) | |
356 | 409 | then throw("DApp already inactive") | |
357 | - | else if (!(containsElement([ | |
410 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
358 | 411 | then throw("Only admin can call this function") | |
359 | 412 | else [BooleanEntry(a, false)] | |
360 | 413 | ||
361 | 414 | ||
362 | 415 | ||
363 | - | @Callable( | |
364 | - | func activate () = if ( | |
416 | + | @Callable(al) | |
417 | + | func activate () = if (T) | |
365 | 418 | then throw("DApp already active") | |
366 | - | else if (!(containsElement([ | |
419 | + | else if (!(containsElement([aa, ab, ac], al.callerPublicKey))) | |
367 | 420 | then throw("Only admin can call this function") | |
368 | 421 | else [BooleanEntry(a, true)] | |
369 | 422 | ||
370 | 423 | ||
371 | - | @Verifier( | |
372 | - | func | |
373 | - | let | |
374 | - | let | |
424 | + | @Verifier(bK) | |
425 | + | func bL () = { | |
426 | + | let bM = { | |
427 | + | let bN = if (sigVerify(bK.bodyBytes, bK.proofs[0], aa)) | |
375 | 428 | then 1 | |
376 | 429 | else 0 | |
377 | - | let | |
430 | + | let bO = if (sigVerify(bK.bodyBytes, bK.proofs[1], ab)) | |
378 | 431 | then 1 | |
379 | 432 | else 0 | |
380 | - | let | |
433 | + | let bP = if (sigVerify(bK.bodyBytes, bK.proofs[2], ac)) | |
381 | 434 | then 1 | |
382 | 435 | else 0 | |
383 | - | ((( | |
436 | + | (((bN + bO) + bP) >= 2) | |
384 | 437 | } | |
385 | - | let | |
438 | + | let bQ = if (if (if (sigVerify(bK.bodyBytes, bK.proofs[0], aa)) | |
386 | 439 | then true | |
387 | - | else sigVerify( | |
440 | + | else sigVerify(bK.bodyBytes, bK.proofs[0], ab)) | |
388 | 441 | then true | |
389 | - | else sigVerify( | |
442 | + | else sigVerify(bK.bodyBytes, bK.proofs[0], ac)) | |
390 | 443 | then true | |
391 | - | else sigVerify(aL.bodyBytes, aL.proofs[0], A) | |
392 | - | let u = aL | |
393 | - | aN | |
444 | + | else sigVerify(bK.bodyBytes, bK.proofs[0], R) | |
445 | + | let X = bK | |
446 | + | if ($isInstanceOf(X, "DataTransaction")) | |
447 | + | then { | |
448 | + | let bR = X | |
449 | + | if (valueOrElse(getBoolean(M, e), false)) | |
450 | + | then bQ | |
451 | + | else false | |
452 | + | } | |
453 | + | else bM | |
394 | 454 | } | |
395 | 455 |
github/deemru/w8io/026f985 72.12 ms ◑