tx · hyNkCbjKA5pXxumzA5fHVZo9pFGeFfPY7RobJ26Hh4T

3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi:  -0.01400000 Waves

2021.10.28 12:58 [1765997] smart account 3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi > SELF 0.00000000 Waves

{ "type": 13, "id": "hyNkCbjKA5pXxumzA5fHVZo9pFGeFfPY7RobJ26Hh4T", "fee": 1400000, "feeAssetId": null, "timestamp": 1635415207312, "version": 2, "chainId": 84, "sender": "3MwkjgDrsm5k73WJU9Nbxbx4y2iy3zjQzMi", "senderPublicKey": "FRotxVW1MhTQRDvVbMM4yvYGWzBFvHqvMsonvGeEXQUy", "proofs": [ "2kRvVpkf46ecvMMMvEne1gMimGThzBSy3zDFf4by5YC3wPry8bKqhLAPeFGtK5Tihb1zwSAmeduQZrLCEttHZjGW", "3PmLecFjfAp3snXCJwSB7DBFZiWdZRaA2sUCpfVgFRDWKSYWAC9RxT34qPeaveZmMi4bKgCAcw9PjoHuHVeCr9Le" ], "script": "base64:AAIFAAAAAAAAADwIAhIECgIBCBIDCgEIEgsKCQgBAQEBAQEBARIECgIBCBIECgIBCBIFCgMBAQgSAwoBARIECgIBARIAEgAAAAA2AAAAAAlrZXlBY3RpdmUCAAAABmFjdGl2ZQAAAAAPa2V5QWRtaW5QdWJLZXkxAgAAAAthZG1pbl9wdWJfMQAAAAAPa2V5QWRtaW5QdWJLZXkyAgAAAAthZG1pbl9wdWJfMgAAAAAPa2V5QWRtaW5QdWJLZXkzAgAAAAthZG1pbl9wdWJfMwAAAAAha2V5TGF1bmNocGFkRGF0YVRyYW5zYWN0aW9uU3RhdHVzAgAAACFsYXVuY2hwYWRfZGF0YV90cmFuc2FjdGlvbl9zdGF0dXMAAAAAEmtleUxhdW5jaHBhZE5leHRJZAIAAAARbGF1bmNocGFkX25leHRfaWQAAAAAFGtleUxhdW5jaHBhZEFjdGl2ZUlkAgAAABNsYXVuY2hwYWRfYWN0aXZlX2lkAAAAAA1rZXlJbml0Q2FsbGVyAgAAAAtpbml0X2NhbGxlcgAAAAAKa2V5QWRkcmVzcwIAAAAIX2FkZHJlc3MAAAAADWtleUluaXRIZWlnaHQCAAAADF9pbml0X2hlaWdodAAAAAAOa2V5U3RhcnRIZWlnaHQCAAAADV9zdGFydF9oZWlnaHQAAAAAEWtleUZpbmFsaXNlSGVpZ2h0AgAAABBfZmluYWxpc2VfaGVpZ2h0AAAAAAxrZXlDb21pc3Npb24CAAAACl9jb21pc3Npb24AAAAACmtleUFzc2V0SWQCAAAACV9hc3NldF9pZAAAAAATa2V5VG90YWxUb2tlbkFtb3VudAIAAAATX3RvdGFsX3Rva2VuX2Ftb3VudAAAAAAWa2V5VG90YWxBbW91bnRVc2RuU29sZAIAAAAQX3RvdGFsX3VzZG5fc29sZAAAAAASa2V5VG9rZW5zUGVyVGlja2V0AgAAABJfdG9rZW5zX3Blcl90aWNrZXQAAAAAEGtleVByaWNlUGVyVG9rZW4CAAAAEF9wcmljZV9wZXJfdG9rZW4AAAAAEGtleVN3b3BQZXJUaWNrZXQCAAAAEF9zd29wX3Blcl90aWNrZXQAAAAAFmtleVN3b3BmaVRpY2tldHNBbW91bnQCAAAAF190aWNrZXRzX3N3b3BmaV9tZW1iZXJzAAAAABdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudAIAAAATX3Rva2Vuc19hY2Nlc3NfbGlzdAAAAAAWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgIAAAAWX3Rva2Vuc19wZXJfYWxsb2NhdGlvbgAAAAATa2V5VGlja2V0TGFzdE51bWJlcgIAAAATX3RpY2tldF9sYXN0X251bWJlcgAAAAATa2V5R292ZXJuYW5jZVN0YWtlZAIAAAAMX1NXT1BfYW1vdW50AAAAAAxrZXlVc2VyUmVmSWQCAAAAB19yZWZfaWQAAAAADWtleVZlcmlmeUhhc2gCAAAADF92ZXJpZnlfaGFzaAAAAAALa2V5RHVyYXRpb24CAAAACV9kdXJhdGlvbgAAAAAYa2V5QW1vdW50VVNETkluTWFya2V0aW5nAgAAACJfdG90YWxfcHVyY2hhc2VkX3VzZG5faW5fbWFya2V0aW5nAAAAACFrZXlBbW91bnRVU0ROSW5NYXJrZXRpbmdGaW5hbGl6ZWQCAAAALF90b3RhbF9wdXJjaGFzZWRfdXNkbl9pbl9tYXJrZXRpbmdfZmluYWxpemVkAAAAAA5rZXlUcmFuc2ZlclVzZAIAAAANX3RyYW5zZmVyX3VzZAAAAAAaa2V5VXNlckJvdWdodFRpY2tldHNBbW91bnQCAAAAD19ib3VnaHRfdGlja2V0cwAAAAAOa2V5VXNlclRpY2tldHMCAAAAD190aWNrZXRzX251bWJlcgAAAAAba2V5VXNlckF2YWlsYWJsZUFsbG9jYXRpb25zAgAAAB1fYXZhaWxhYmxlX3B1cmNoYXNlX21hcmtldGluZwAAAAAca2V5VXNlckFtb3VudFVTRE5Jbk1hcmtldGluZwIAAAAcX3B1cmNoYXNlZF91c2RuX2luX21hcmtldGluZwAAAAAYa2V5VXNlckJvdWdodEFsbG9jYXRpb25zAgAAABNfYm91Z2h0X2FsbG9jYXRpb25zAAAAABJrZXlVc2VyQ2xhaW1TdGF0dXMCAAAADV9jbGFpbV9zdGF0dXMAAAAAGmtleVVzZXJXaW5uZWRUaWNrZXRzQW1vdW50AgAAAA9fdGlja2V0c19yZXN1bHQAAAAAEGxhdWNocGFkRHVyYXRpb24AAAAAAAAABOwAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MA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TAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAAA1rZXlWZXJpZnlIYXNoBQAAAARoYXNoBQAAAANuaWwAAAABaQEAAAAKaW5pdENhbGxlcgAAAAEAAAAHYWRkcmVzcwMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rZXlJbml0Q2FsbGVyBQAAAAdhZGRyZXNzBQAAAANuaWwAAAABaQEAAAAEaW5pdAAAAAkAAAAOcHJvamVjdEFkZHJlc3MAAAALc3RhcnRIZWlnaHQAAAAKY29tbWlzc2lvbgAAAA90b2tlbnNQZXJUaWNrZXQAAAANcHJpY2VQZXJUb2tlbgAAABNzd29wZmlUaWNrZXRzQW1vdW50AAAAFGNhbXBhaWduVG9rZW5zQW1vdW50AAAAE3Rva2Vuc1BlckFsbG9jYXRpb24AAAANc3dvcFBlclRpY2tldAQAAAALJHQwNDE4NjQyNjEJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDA0MTg2NDI2MQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDQxODY0MjYxAAAAAl8yAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAANa2V5SW5pdENhbGxlcgIAAAAACQAAAgAAAAECAAAAKU9ubHkgcHJvamVjdCBhZG1pbiBjYW4gY2FsbCBpbml0IGZ1bmN0aW9uAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAAAtzdGFydEhlaWdodAkAAAIAAAABAgAAADNTdGFydCBoZWlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gYmxvY2tjaGFpbiBoZWlnaHQEAAAACyR0MDQ2ODk0NzYyCQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAAKcG10QXNzZXRJZAQAAAANcG10U3RyQXNzZXRJZAgFAAAACyR0MDQ2ODk0NzYyAAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAAskdDA0Njg5NDc2MgAAAAJfMgQAAAALcG10RGVjaW1hbHMIBQAAAAskdDA0Njg5NDc2MgAAAAJfMwQAAAALbGF1bmNocGFkSWQJAQAAABJnZXRMYXVuY2hwYWROZXh0SWQAAAAABAAAAA5sYXVuY2hwYWRJZFN0cgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA1wbXRTdHJBc3NldElkAgAAAApfbGF1bmNocGFkBQAAAAtsYXVuY2hwYWRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa2V5TGF1bmNocGFkTmV4dElkCQAAZAAAAAIFAAAAC2xhdW5jaHBhZElkAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAACmtleUFkZHJlc3MFAAAADnByb2plY3RBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAA1rZXlJbml0SGVpZ2h0BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAADmtleVN0YXJ0SGVpZ2h0BQAAAAtzdGFydEhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA5sYXVuY2hwYWRJZFN0cgUAAAALa2V5RHVyYXRpb24FAAAAEGxhdWNocGFkRHVyYXRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAE2tleVRvdGFsVG9rZW5BbW91bnQFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAprZXlBc3NldElkBQAAAA1wbXRTdHJBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAAAxrZXlDb21pc3Npb24FAAAACmNvbW1pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAE2tleVRpY2tldExhc3ROdW1iZXIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAEmtleVRva2Vuc1BlclRpY2tldAUAAAAPdG9rZW5zUGVyVGlja2V0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABBrZXlQcmljZVBlclRva2VuBQAAAA1wcmljZVBlclRva2VuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABBrZXlTd29wUGVyVGlja2V0BQAAAA1zd29wUGVyVGlja2V0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABZrZXlTd29wZmlUaWNrZXRzQW1vdW50BQAAABNzd29wZmlUaWNrZXRzQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADmxhdW5jaHBhZElkU3RyBQAAABdrZXlDYW1wYWlnblRva2Vuc0Ftb3VudAUAAAAUY2FtcGFpZ25Ub2tlbnNBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAObGF1bmNocGFkSWRTdHIFAAAAFmtleVRva2Vuc1BlckFsbG9jYXRpb24FAAAAE3Rva2Vuc1BlckFsbG9jYXRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFGtleUxhdW5jaHBhZEFjdGl2ZUlkBQAAAAtsYXVuY2hwYWRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA1rZXlJbml0Q2FsbGVyAgAAAAAFAAAAA25pbAAAAAFpAQAAABBjb21taXRTd29wZmlTYWxlAAAAAgAAAAtsYXVuY2hwYWRJZAAAAAVyZWZJZAQAAAALJHQwNjI1NjYzMzEJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAAskdDA2MjU2NjMzMQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAACyR0MDYyNTY2MzMxAAAAAl8yBAAAAAtzdGFrZWRTd29wcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkA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bgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAAAxrZXlDb21pc3Npb24EAAAADnRyYW5zZmVyZWRVc2RuCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAOa2V5VHJhbnNmZXJVc2QAAAAAAAAAAAAEAAAAF3N3b3BmaU1lbWJlcnNVc2RuQW1vdW50CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAFmtleVRvdGFsQW1vdW50VXNkblNvbGQEAAAAFnN3b3BmaU1lbWJlcnNDb21pc3Npb24JAABrAAAAAwUAAAAXc3dvcGZpTWVtYmVyc1VzZG5BbW91bnQFAAAACmNvbW1pc3Npb24AAAAAAAAAAGQEAAAAGnRvdGFsQW1vdW50VXNkbkluTWFya2V0aW5nCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAIWtleUFtb3VudFVTRE5Jbk1hcmtldGluZ0ZpbmFsaXplZAQAAAASbWFya2V0aW5nQ29taXNzaW9uCQAAawAAAAMFAAAAGnRvdGFsQW1vdW50VXNkbkluTWFya2V0aW5nBQAAAApjb21taXNzaW9uAAAAAAAAAABkBAAAAA11bnN0YWtlQW1vdW50CQAAZAAAAAIJAABkAAAAAgkAAGQAAAACBQAAABdzd29wZmlNZW1iZXJzVXNkbkFtb3VudAUAAAAadG90YWxBbW91bnRVc2RuSW5NYXJrZXRpbmcFAAAAFnN3b3BmaU1lbWJlcnNDb21pc3Npb24FAAAAEm1hcmtldGluZ0NvbWlzc2lvbgMJAABmAAAAAgUAAAAOdHJhbnNmZXJlZFVzZG4JAABkAAAAAgUAAAAXc3dvcGZpTWVtYmVyc1VzZG5BbW91bnQFAAAAGnRvdGFsQW1vdW50VXNkbkluTWFya2V0aW5nCQAAAgAAAAECAAAAKENhbid0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AAABBQAAAAtsYXVuY2hwYWRJZAUAAAAaa2V5VXNlcldpbm5lZFRpY2tldHNBbW91bnQAAAAAAAAAAAAEAAAAFGF3YWlsYWJsZUFsbG9jYXRpb25zCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAFfCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABtrZXlVc2VyQXZhaWxhYmxlQWxsb2NhdGlvbnMAAAAAAAAAAAAEAAAACmNvbW1pc3Npb24JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAAAtsYXVuY2hwYWRJZAUAAAAMa2V5Q29taXNzaW9uBAAAABJhbGxvd2VkQWxsb2NhdGlvbnMJAAGXAAAAAQkABEwAAAACBQAAABFib3VnaHRBbGxvY2F0aW9ucwkABEwAAAACBQAAABRhd2FpbGFibGVBbGxvY2F0aW9ucwUAAAADbmlsBAAAAAp0b2tlblByaWNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAALbGF1bmNocGFkSWQFAAAAEGtleVByaWNlUGVyVG9rZW4EAAAAD3Rva2Vuc1BlclRpY2tldAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABJrZXlUb2tlbnNQZXJUaWNrZXQEAAAADSR0MDE2OTEyMTY5ODgJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAd0b2tlbklkBAAAAA90b2tlblN0ckFzc2V0SWQIBQAAAA0kdDAxNjkxMjE2OTg4AAAAAl8xBAAAAA50b2tlbkFzc2V0TmFtZQgFAAAADSR0MDE2OTEyMTY5ODgAAAACXzIEAAAADXRva2VuRGVjaW1hbHMIBQAAAA0kdDAxNjkxMjE2OTg4AAAAAl8zBAAAAAt0aWNrZXRQcmljZQkAAGsAAAADBQAAAA90b2tlbnNQZXJUaWNrZXQFAAAACnRva2VuUHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAANdG9rZW5EZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAATdG9rZW5zUGVyQWxsb2NhdGlvbgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAC2xhdW5jaHBhZElkBQAAABZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uBAAAABR0cmFuc2ZlclRva2Vuc0Ftb3VudAkAAGQAAAACCQAAaAAAAAIFAAAADXdvbm5lZFRpY2tldHMFAAAAD3Rva2Vuc1BlclRpY2tldAkAAGgAAAACBQAAABJhbGxvd2VkQWxsb2NhdGlvbnMFAAAAE3Rva2Vuc1BlckFsbG9jYXRpb24EAAAAEnVzZG5Gb3JBbGxvY2F0aW9ucwkAAGsAAAADCQAAZQAAAAIFAAAAEWJvdWdodEFsbG9jYXRpb25zBQAAABJhbGxvd2VkQWxsb2NhdGlvbnMJAABkAAAAAgAAAAAAAAAAZAUAAAAKY29tbWlzc2lvbgAAAAAAAAAAZAQAAAAWdXNkbkZvclVud29ubmVkVGlja2V0cwkAAGsAAAADCQAAaAAAAAIJAABlAAAAAgUAAAANYm91Z2h0VGlja2V0cwUAAAANd29ubmVkVGlja2V0cwUAAAALdGlja2V0UHJpY2UJAABkAAAAAgAAAAAAAAAAZAUAAAAKY29tbWlzc2lvbgAAAAAAAAAAZAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEnVzZG5Gb3JBbGxvY2F0aW9ucwYJAABmAAAAAgAAAAAAAAAAAAUAAAAWdXNkbkZvclVud29ubmVkVGlja2V0cwkAAAIAAAABAgAAAFJFcnJvciB3aXRoIGFsbG93ZWQgYWxsb2NhdGlvbiBwYXJhbSBvciB3b25uZWQgdGlja2V0cyBwYXJhbSBwbGVhc2UgY29udGFjdCBzdXBwb3J0BAAAABJyZXR1cm5lZFVzZG5BbW91bnQJAABkAAAAAgUAAAASdXNkbkZvckFsbG9jYXRpb25zBQAAABZ1c2RuRm9yVW53b25uZWRUaWNrZXRzBAAAAAx0cmFuc2ZlclVzZG4DCQAAZgAAAAIFAAAAEnJldHVybmVkVXNk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", "height": 1765997, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7QjX34WmSRoKAny977zkPAXituAV1n9Sd8NkTbXSUiUy Next: SuJKQcPdMz2jx4GCEFgshtZ8UabgbB45ab3fyCEe5M2 Diff:
OldNewDifferences
5858 let keyAmountUSDNInMarketing = "_total_purchased_usdn_in_marketing"
5959
6060 let keyAmountUSDNInMarketingFinalized = "_total_purchased_usdn_in_marketing_finalized"
61+
62+let keyTransferUsd = "_transfer_usd"
6163
6264 let keyUserBoughtTicketsAmount = "_bought_tickets"
6365
145147
146148 @Callable(i)
147149 func init (projectAddress,startHeight,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket) = {
148- let $t041544229 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
149- let pmtAmount = $t041544229._1
150- let pmtAssetId = $t041544229._2
150+ let $t041864261 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
151+ let pmtAmount = $t041864261._1
152+ let pmtAssetId = $t041864261._2
151153 if (!(isActive))
152154 then throw("DApp is inactive at this moment")
153155 else if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
157159 else if ((height > startHeight))
158160 then throw("Start height must be greater than blockchain height")
159161 else {
160- let $t046574730 = getAssetInfo(pmtAssetId)
161- let pmtStrAssetId = $t046574730._1
162- let pmtAssetName = $t046574730._2
163- let pmtDecimals = $t046574730._3
162+ let $t046894762 = getAssetInfo(pmtAssetId)
163+ let pmtStrAssetId = $t046894762._1
164+ let pmtAssetName = $t046894762._2
165+ let pmtDecimals = $t046894762._3
164166 let launchpadId = getLaunchpadNextId()
165167 let launchpadIdStr = toString(launchpadId)
166168 [IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), lauchpadDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")]
171173
172174 @Callable(i)
173175 func commitSwopfiSale (launchpadId,refId) = {
174- let $t062246299 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
175- let pmtAmount = $t062246299._1
176- let pmtAssetId = $t062246299._2
176+ let $t062566331 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
177+ let pmtAmount = $t062566331._1
178+ let pmtAssetId = $t062566331._2
177179 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
178180 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
179181 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
200202 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
201203 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
202204 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyAssetId)))
203- let $t078237899 = getAssetInfo(tokenId)
204- let tokenStrAssetId = $t078237899._1
205- let tokenAssetName = $t078237899._2
206- let tokenDecimals = $t078237899._3
205+ let $t078557931 = getAssetInfo(tokenId)
206+ let tokenStrAssetId = $t078557931._1
207+ let tokenAssetName = $t078557931._2
208+ let tokenDecimals = $t078557931._3
207209 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
208210 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
209211 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
238240
239241 @Callable(i)
240242 func commitAccessListSale (launchpadId,refId) = {
241- let $t01021910294 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
242- let pmtAmount = $t01021910294._1
243- let pmtAssetId = $t01021910294._2
243+ let $t01025110326 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
244+ let pmtAmount = $t01025110326._1
245+ let pmtAssetId = $t01025110326._2
244246 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountUSDNInMarketing)), 0)
245247 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountUSDNInMarketing)), 0)
246248 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
248250 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
249251 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
250252 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyAssetId)))
251- let $t01104911125 = getAssetInfo(tokenId)
252- let tokenStrAssetId = $t01104911125._1
253- let tokenAssetName = $t01104911125._2
254- let tokenDecimals = $t01104911125._3
253+ let $t01108111157 = getAssetInfo(tokenId)
254+ let tokenStrAssetId = $t01108111157._1
255+ let tokenAssetName = $t01108111157._2
256+ let tokenDecimals = $t01108111157._3
255257 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
256258 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
257259 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
272274 else if (if ((allocationPriceWithComission != pmtAmount))
273275 then ((allocationPriceWithComission * 2) != pmtAmount)
274276 else false)
275- then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString((allocationPriceWithComission / 1000000))) + " USDN per allocation"))
277+ then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + " USDN per allocation"))
276278 else {
277279 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
278280 let inv = invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
302304 else {
303305 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
304306 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
307+ let transferedUsdn = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferUsd)), 0)
305308 let swopfiMembersUsdnAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountUsdnSold))
306309 let swopfiMembersComission = fraction(swopfiMembersUsdnAmount, commission, 100)
307310 let totalAmountUsdnInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountUSDNInMarketingFinalized))
308311 let marketingComission = fraction(totalAmountUsdnInMarketing, commission, 100)
309312 let unstakeAmount = (((swopfiMembersUsdnAmount + totalAmountUsdnInMarketing) + swopfiMembersComission) + marketingComission)
310- let inv = invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toString(this)], nil)
311- if ((inv == inv))
312- then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (swopfiMembersUsdnAmount + totalAmountUsdnInMarketing), USDN), ScriptTransfer(commissionWallet, (swopfiMembersComission + marketingComission), USDN)]
313- else throw("Strict value is not equal to itself.")
313+ if ((transferedUsdn > (swopfiMembersUsdnAmount + totalAmountUsdnInMarketing)))
314+ then throw("Can't transfer negative value to project")
315+ else {
316+ let inv = invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toString(this)], nil)
317+ if ((inv == inv))
318+ then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, ((swopfiMembersUsdnAmount + totalAmountUsdnInMarketing) - transferedUsdn), USDN), ScriptTransfer(commissionWallet, (swopfiMembersComission + marketingComission), USDN)]
319+ else throw("Strict value is not equal to itself.")
320+ }
314321 }
315322 }
316323
339346 let allowedAllocations = min([boughtAllocations, awailableAllocations])
340347 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
341348 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
342- let $t01658416660 = getAssetInfo(tokenId)
343- let tokenStrAssetId = $t01658416660._1
344- let tokenAssetName = $t01658416660._2
345- let tokenDecimals = $t01658416660._3
346- let ticketPrice = fraction(tokensPerTicket, tokenPrice, tokenDecimals)
349+ let $t01691216988 = getAssetInfo(tokenId)
350+ let tokenStrAssetId = $t01691216988._1
351+ let tokenAssetName = $t01691216988._2
352+ let tokenDecimals = $t01691216988._3
353+ let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
347354 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
348355 let transferTokensAmount = ((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation))
349356 let usdnForAllocations = fraction((boughtAllocations - allowedAllocations), (100 + commission), 100)
369376 }
370377 }
371378 }
379+
380+
381+
382+@Callable(i)
383+func transferUsd (launchpadId,amountUsdn) = if (isActive)
384+ then throw("DApp alredy active")
385+ else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
386+ then throw("Only admin can call this function")
387+ else {
388+ let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
389+[IntegerEntry((toString(launchpadId) + keyTransferUsd), amountUsdn), ScriptTransfer(projectAddress, amountUsdn, USDN)]
390+ }
372391
373392
374393
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyActive = "active"
55
66 let keyAdminPubKey1 = "admin_pub_1"
77
88 let keyAdminPubKey2 = "admin_pub_2"
99
1010 let keyAdminPubKey3 = "admin_pub_3"
1111
1212 let keyLaunchpadDataTransactionStatus = "launchpad_data_transaction_status"
1313
1414 let keyLaunchpadNextId = "launchpad_next_id"
1515
1616 let keyLaunchpadActiveId = "launchpad_active_id"
1717
1818 let keyInitCaller = "init_caller"
1919
2020 let keyAddress = "_address"
2121
2222 let keyInitHeight = "_init_height"
2323
2424 let keyStartHeight = "_start_height"
2525
2626 let keyFinaliseHeight = "_finalise_height"
2727
2828 let keyComission = "_comission"
2929
3030 let keyAssetId = "_asset_id"
3131
3232 let keyTotalTokenAmount = "_total_token_amount"
3333
3434 let keyTotalAmountUsdnSold = "_total_usdn_sold"
3535
3636 let keyTokensPerTicket = "_tokens_per_ticket"
3737
3838 let keyPricePerToken = "_price_per_token"
3939
4040 let keySwopPerTicket = "_swop_per_ticket"
4141
4242 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4343
4444 let keyCampaignTokensAmount = "_tokens_access_list"
4545
4646 let keyTokensPerAllocation = "_tokens_per_allocation"
4747
4848 let keyTicketLastNumber = "_ticket_last_number"
4949
5050 let keyGovernanceStaked = "_SWOP_amount"
5151
5252 let keyUserRefId = "_ref_id"
5353
5454 let keyVerifyHash = "_verify_hash"
5555
5656 let keyDuration = "_duration"
5757
5858 let keyAmountUSDNInMarketing = "_total_purchased_usdn_in_marketing"
5959
6060 let keyAmountUSDNInMarketingFinalized = "_total_purchased_usdn_in_marketing_finalized"
61+
62+let keyTransferUsd = "_transfer_usd"
6163
6264 let keyUserBoughtTicketsAmount = "_bought_tickets"
6365
6466 let keyUserTickets = "_tickets_number"
6567
6668 let keyUserAvailableAllocations = "_available_purchase_marketing"
6769
6870 let keyUserAmountUSDNInMarketing = "_purchased_usdn_in_marketing"
6971
7072 let keyUserBoughtAllocations = "_bought_allocations"
7173
7274 let keyUserClaimStatus = "_claim_status"
7375
7476 let keyUserWinnedTicketsAmount = "_tickets_result"
7577
7678 let lauchpadDuration = 1260
7779
7880 let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
7981
8082 let governance = Address(base58'3N5W8da2iiijVieA6qLGo7KzCJj8B19smWU')
8183
8284 let commissionWallet = Address(base58'3N2hBdeDEs7wCNA9EY8qv3B6drjgKD64xQG')
8385
8486 let stakingUSDNAddress = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
8587
8688 let USDN = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8789
8890 let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
8991
9092 let maxAllocationsAmount = 2
9193
9294 let isActive = valueOrElse(getBoolean(this, keyActive), true)
9395
9496 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
9597
9698 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
9799 case string: String =>
98100 fromBase58String(string)
99101 case nothing =>
100102 throw("Admin public key is empty")
101103 }
102104
103105
104106 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
105107
106108 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
107109
108110 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
109111
110112 func getAssetInfo (assetId) = match assetId {
111113 case id: ByteVector =>
112114 let stringId = toBase58String(id)
113115 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
114116 $Tuple3(stringId, info.name, info.decimals)
115117 case waves: Unit =>
116118 $Tuple3("WAVES", "WAVES", 8)
117119 case _ =>
118120 throw("Match error")
119121 }
120122
121123
122124 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
123125
124126
125127 func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
126128
127129
128130 @Callable(i)
129131 func hashingRandom (launchpadId,hash) = if (!(isActive))
130132 then throw("DApp is inactive at this moment")
131133 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
132134 then throw("Only admin can call this function")
133135 else [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]
134136
135137
136138
137139 @Callable(i)
138140 func initCaller (address) = if (!(isActive))
139141 then throw("DApp is inactive at this moment")
140142 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
141143 then throw("Only admin can call this function")
142144 else [StringEntry(keyInitCaller, address)]
143145
144146
145147
146148 @Callable(i)
147149 func init (projectAddress,startHeight,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket) = {
148- let $t041544229 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
149- let pmtAmount = $t041544229._1
150- let pmtAssetId = $t041544229._2
150+ let $t041864261 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
151+ let pmtAmount = $t041864261._1
152+ let pmtAssetId = $t041864261._2
151153 if (!(isActive))
152154 then throw("DApp is inactive at this moment")
153155 else if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
154156 then throw("Only project admin can call init function")
155157 else if ((size(i.payments) != 1))
156158 then throw("One attached payment expected")
157159 else if ((height > startHeight))
158160 then throw("Start height must be greater than blockchain height")
159161 else {
160- let $t046574730 = getAssetInfo(pmtAssetId)
161- let pmtStrAssetId = $t046574730._1
162- let pmtAssetName = $t046574730._2
163- let pmtDecimals = $t046574730._3
162+ let $t046894762 = getAssetInfo(pmtAssetId)
163+ let pmtStrAssetId = $t046894762._1
164+ let pmtAssetName = $t046894762._2
165+ let pmtDecimals = $t046894762._3
164166 let launchpadId = getLaunchpadNextId()
165167 let launchpadIdStr = toString(launchpadId)
166168 [IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), lauchpadDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")]
167169 }
168170 }
169171
170172
171173
172174 @Callable(i)
173175 func commitSwopfiSale (launchpadId,refId) = {
174- let $t062246299 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
175- let pmtAmount = $t062246299._1
176- let pmtAssetId = $t062246299._2
176+ let $t062566331 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
177+ let pmtAmount = $t062566331._1
178+ let pmtAssetId = $t062566331._2
177179 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
178180 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
179181 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
180182 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
181183 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
182184 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
183185 if (!(isActive))
184186 then throw("DApp is inactive at this moment")
185187 else if ((activeLaunchpadId != launchpadId))
186188 then throw("There is no active launchpad or this launchpad is ended")
187189 else if ((startHeight > height))
188190 then throw("Launchpad sale not started yet")
189191 else if ((height > (startHeight + duration)))
190192 then throw("Launchpad sale ended")
191193 else if (if ((size(i.payments) != 1))
192194 then true
193195 else (pmtAssetId != USDN))
194196 then throw("One attached payment in USDN expected")
195197 else if (if ((0 >= allowedTicketsAmountAll))
196198 then true
197199 else (0 >= allowedTicketsAmount))
198200 then throw("Not enought SWOP in staking to buy tickets")
199201 else {
200202 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
201203 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
202204 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyAssetId)))
203- let $t078237899 = getAssetInfo(tokenId)
204- let tokenStrAssetId = $t078237899._1
205- let tokenAssetName = $t078237899._2
206- let tokenDecimals = $t078237899._3
205+ let $t078557931 = getAssetInfo(tokenId)
206+ let tokenStrAssetId = $t078557931._1
207+ let tokenAssetName = $t078557931._2
208+ let tokenDecimals = $t078557931._3
207209 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
208210 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
209211 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
210212 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
211213 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
212214 let change = (pmtAmount - allowedBuyPriceWithComission)
213215 if ((buyTicketAmount == 0))
214216 then throw("Not enought USDN to buy tickets")
215217 else if ((change != 0))
216218 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + "USDN"))
217219 else {
218220 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
219221 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
220222 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
221223 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
222224 then ("," + boughtRange)
223225 else ("" + boughtRange)))
224226 let inv = invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
225227 if ((inv == inv))
226228 then {
227229 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount), (boughtTicketsAmount + allowedBuyTicketAmount)), IntegerEntry((toString(launchpadId) + keyTicketLastNumber), (lastBoughtTicketNumber + allowedBuyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets), newUserBoughtTicketsNumbers)]
228230 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
229231 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
230232 else baseEntry
231233 }
232234 else throw("Strict value is not equal to itself.")
233235 }
234236 }
235237 }
236238
237239
238240
239241 @Callable(i)
240242 func commitAccessListSale (launchpadId,refId) = {
241- let $t01021910294 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
242- let pmtAmount = $t01021910294._1
243- let pmtAssetId = $t01021910294._2
243+ let $t01025110326 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
244+ let pmtAmount = $t01025110326._1
245+ let pmtAssetId = $t01025110326._2
244246 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountUSDNInMarketing)), 0)
245247 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountUSDNInMarketing)), 0)
246248 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
247249 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
248250 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
249251 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
250252 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyAssetId)))
251- let $t01104911125 = getAssetInfo(tokenId)
252- let tokenStrAssetId = $t01104911125._1
253- let tokenAssetName = $t01104911125._2
254- let tokenDecimals = $t01104911125._3
253+ let $t01108111157 = getAssetInfo(tokenId)
254+ let tokenStrAssetId = $t01108111157._1
255+ let tokenAssetName = $t01108111157._2
256+ let tokenDecimals = $t01108111157._3
255257 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
256258 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
257259 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
258260 if (!(isActive))
259261 then throw("DApp is inactive at this moment")
260262 else if ((activeLaunchpadId != launchpadId))
261263 then throw("There is no active launchpad or this launchpad is ended")
262264 else if ((startHeight > height))
263265 then throw("Launchpad sale not started yet")
264266 else if ((height > (startHeight + duration)))
265267 then throw("Launchpad sale ended")
266268 else if (if ((size(i.payments) != 1))
267269 then true
268270 else (pmtAssetId != USDN))
269271 then throw("One attached payment in USDN expected")
270272 else if ((boughtAllocations >= maxAllocationsAmount))
271273 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
272274 else if (if ((allocationPriceWithComission != pmtAmount))
273275 then ((allocationPriceWithComission * 2) != pmtAmount)
274276 else false)
275- then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString((allocationPriceWithComission / 1000000))) + " USDN per allocation"))
277+ then throw((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + " USDN per allocation"))
276278 else {
277279 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
278280 let inv = invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
279281 if ((inv == inv))
280282 then {
281283 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations), (boughtAllocations + buyAllocationsAmount)), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountUSDNInMarketing), (userUsdnInMarketing + pmtAmount)), IntegerEntry((toString(launchpadId) + keyAmountUSDNInMarketing), (usdnInMarketing + pmtAmount))]
282284 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
283285 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
284286 else baseEntry
285287 }
286288 else throw("Strict value is not equal to itself.")
287289 }
288290 }
289291
290292
291293
292294 @Callable(i)
293295 func finalise (launchpadId,vrfHeight,secretWord) = {
294296 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
295297 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
296298 if (!(isActive))
297299 then throw("DApp is inactive at this moment")
298300 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
299301 then throw("Only admin can call this function")
300302 else if ((calcHash != savedHash))
301303 then throw("vrf Height hash not matching")
302304 else {
303305 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
304306 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
307+ let transferedUsdn = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferUsd)), 0)
305308 let swopfiMembersUsdnAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountUsdnSold))
306309 let swopfiMembersComission = fraction(swopfiMembersUsdnAmount, commission, 100)
307310 let totalAmountUsdnInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountUSDNInMarketingFinalized))
308311 let marketingComission = fraction(totalAmountUsdnInMarketing, commission, 100)
309312 let unstakeAmount = (((swopfiMembersUsdnAmount + totalAmountUsdnInMarketing) + swopfiMembersComission) + marketingComission)
310- let inv = invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toString(this)], nil)
311- if ((inv == inv))
312- then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (swopfiMembersUsdnAmount + totalAmountUsdnInMarketing), USDN), ScriptTransfer(commissionWallet, (swopfiMembersComission + marketingComission), USDN)]
313- else throw("Strict value is not equal to itself.")
313+ if ((transferedUsdn > (swopfiMembersUsdnAmount + totalAmountUsdnInMarketing)))
314+ then throw("Can't transfer negative value to project")
315+ else {
316+ let inv = invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toString(this)], nil)
317+ if ((inv == inv))
318+ then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, ((swopfiMembersUsdnAmount + totalAmountUsdnInMarketing) - transferedUsdn), USDN), ScriptTransfer(commissionWallet, (swopfiMembersComission + marketingComission), USDN)]
319+ else throw("Strict value is not equal to itself.")
320+ }
314321 }
315322 }
316323
317324
318325
319326 @Callable(i)
320327 func claim (launchpadId) = {
321328 let userClaimStatus = getBooleanValue(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus))
322329 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
323330 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
324331 if (!(isActive))
325332 then throw("DApp is inactive at this moment")
326333 else if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
327334 then throw("You can't claim because results are not finalized")
328335 else if (userClaimStatus)
329336 then throw("You are already claimed")
330337 else if (if ((boughtTickets == 0))
331338 then (boughtAllocations == 0)
332339 else false)
333340 then throw("You can't claim because you don't buy enething")
334341 else {
335342 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyAssetId)))
336343 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
337344 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
338345 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
339346 let allowedAllocations = min([boughtAllocations, awailableAllocations])
340347 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
341348 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
342- let $t01658416660 = getAssetInfo(tokenId)
343- let tokenStrAssetId = $t01658416660._1
344- let tokenAssetName = $t01658416660._2
345- let tokenDecimals = $t01658416660._3
346- let ticketPrice = fraction(tokensPerTicket, tokenPrice, tokenDecimals)
349+ let $t01691216988 = getAssetInfo(tokenId)
350+ let tokenStrAssetId = $t01691216988._1
351+ let tokenAssetName = $t01691216988._2
352+ let tokenDecimals = $t01691216988._3
353+ let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
347354 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
348355 let transferTokensAmount = ((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation))
349356 let usdnForAllocations = fraction((boughtAllocations - allowedAllocations), (100 + commission), 100)
350357 let usdnForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
351358 if (if ((0 > usdnForAllocations))
352359 then true
353360 else (0 > usdnForUnwonnedTickets))
354361 then throw("Error with allowed allocation param or wonned tickets param please contact support")
355362 else {
356363 let returnedUsdnAmount = (usdnForAllocations + usdnForUnwonnedTickets)
357364 let transferUsdn = if ((returnedUsdnAmount > 0))
358365 then [ScriptTransfer(i.caller, returnedUsdnAmount, USDN)]
359366 else nil
360367 let transferTokens = if ((transferTokensAmount > 0))
361368 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
362369 else nil
363370 let inv = if ((returnedUsdnAmount > 0))
364371 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedUsdnAmount, toString(this)], nil)
365372 else 0
366373 if ((inv == inv))
367374 then (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)] ++ transferTokens) ++ transferUsdn)
368375 else throw("Strict value is not equal to itself.")
369376 }
370377 }
371378 }
379+
380+
381+
382+@Callable(i)
383+func transferUsd (launchpadId,amountUsdn) = if (isActive)
384+ then throw("DApp alredy active")
385+ else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
386+ then throw("Only admin can call this function")
387+ else {
388+ let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
389+[IntegerEntry((toString(launchpadId) + keyTransferUsd), amountUsdn), ScriptTransfer(projectAddress, amountUsdn, USDN)]
390+ }
372391
373392
374393
375394 @Callable(i)
376395 func shutdown () = if (!(isActive))
377396 then throw("DApp alredy inactive")
378397 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
379398 then throw("Only admin can call this function")
380399 else [BooleanEntry(keyActive, false)]
381400
382401
383402
384403 @Callable(i)
385404 func activate () = if (isActive)
386405 then throw("DApp alredy active")
387406 else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey)))
388407 then throw("Only admin can call this function")
389408 else [BooleanEntry(keyActive, true)]
390409
391410
392411 @Verifier(tx)
393412 func verify () = {
394413 let multiSignedByAdmins = {
395414 let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
396415 then 1
397416 else 0
398417 let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
399418 then 1
400419 else 0
401420 let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
402421 then 1
403422 else 0
404423 (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
405424 }
406425 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
407426 then true
408427 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
409428 then true
410429 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey3))
411430 then true
412431 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKeyStaking)
413432 match tx {
414433 case dtx: DataTransaction =>
415434 if (valueOrElse(getBoolean(oracle, keyLaunchpadDataTransactionStatus), false))
416435 then signedByAdmin
417436 else false
418437 case _ =>
419438 multiSignedByAdmins
420439 }
421440 }
422441

github/deemru/w8io/169f3d6 
65.71 ms