tx · 7Pf15rR2nQWUWupEEJdFiGrmDMuAr9eKaaKNB7uKAXy4

3N9eLqWNqb7jeF383m9qsXEBqpp8qfQmfbx:  -0.01500000 Waves

2022.06.20 14:01 [2104608] smart account 3N9eLqWNqb7jeF383m9qsXEBqpp8qfQmfbx > SELF 0.00000000 Waves

{ "type": 13, "id": "7Pf15rR2nQWUWupEEJdFiGrmDMuAr9eKaaKNB7uKAXy4", "fee": 1500000, "feeAssetId": null, "timestamp": 1655722881495, "version": 2, "chainId": 84, "sender": "3N9eLqWNqb7jeF383m9qsXEBqpp8qfQmfbx", "senderPublicKey": "5cWdpE4X7mfNkLmxJ389ws6qGZof4fwydqMcqPexhJ7w", "proofs": [ "2wN1ivdkaNVGAy21YSCfBUrhhWxc5PeNrmKXaZWTdHm9yD8Qnzwv18VLQ5tUURgNsWxqjGobSsa3SLfoz4FBQWpF" ], "script": "base64:AAIFAAAAAAAAAE0IAhIHCgUICAgBARIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSBAoCCAkSBQoDCAgBEgUKAwEIARIECgIIAQAAACQAAAAADGxvY2tpbmdTdG9yZQUAAAAEdGhpcwAAAAAMc3Rha2luZ1N0b3JlAgAAAAhfUmVzZXJ2ZQAAAAARbWluaW11bUxvY2tBbW91bnQCAAAADl9NaW5Mb2NrQW1vdW50AAAAABFtYXhpbXVtTG9ja0Ftb3VudAIAAAAOX01heExvY2tBbW91bnQAAAAACWFzc2V0TGlzdAUAAAADbmlsAAAAABF1bmxvY2tFbGlnaWJpbGl0eQIAAAAcX0VsaWdpYmxlX3RvX3VubG9ja19hdF9ibG9jawAAAAAMbG9ja2VkQW1vdW50AgAAAA5fQW1vdW50X2xvY2tlZAAAAAALbG9ja2VkQXNzZXQCAAAADV9Bc3NldF9sb2NrZWQAAAAABHVzZXICAAAABV9Vc2VyAAAAAApBUFlfQW1vdW50AgAAAAtfQVBZX2Ftb3VudAAAAAARdG90YWxMb2NrZWRBTW91bnQCAAAAFF9Ub3RhbF9Mb2NrZWRfQW1vdW50AAAAAA1sb2NraW5nUGVyaW9kAgAAAAxfRGF5c19sb2NrZWQAAAAACmVudHJ5SW5kZXgCAAAADF9FbnRyeV9JbmRleAAAAAAOYWxyZWFkeUNsYWltZWQCAAAAEF9BbHJlYWR5X0NsYWltZWQAAAAABWFkbWluAgAAAAZhZG1pbl8AAAAAC0Jsb2NrUGVyRGF5AAAAAAAAAAWgAAAAABR0aGlydHlEYXlzTG9ja1BlcmlvZAAAAAAAAAAAHgAAAAATc2l4dHlEYXlzTG9ja1BlcmlvZAAAAAAAAAAAPAAAAAAUbmluZXR5RGF5c0xvY2tQZXJpb2QAAAAAAAAAAFoAAAAAEG9uZURheUxvY2twZXJpb2QAAAAAAAAAAAEBAAAABGdldEkAAAABAAAAA2tleQkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkBAAAABGdldFMAAAABAAAAA2tleQkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkBAAAABWdldElWAAAAAQAAAANrZXkJAQAAAAV2YWx1ZQAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAAVnZXRTVgAAAAEAAAADa2V5CQEAAAAFdmFsdWUAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAHdGhyb3dJZgAAAAIAAAAJY29uZGl0aW9uAAAABWVycm9yAwUAAAAJY29uZGl0aW9uCQAAAgAAAAEFAAAABWVycm9yBgEAAAAOdGhyb3dPclJldHVybkkAAAACAAAAA3ZhbAAAAAVlcnJvcgQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA3ZhbAUAAAAHJG1hdGNoMAUAAAADdmFsCQAAAgAAAAEFAAAABWVycm9yAQAAAA50aHJvd09yUmV0dXJuUwAAAAIAAAADdmFsAAAABWVycm9yBAAAAAckbWF0Y2gwBQAAAAN2YWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAADdmFsBQAAAAckbWF0Y2gwBQAAAAN2YWwJAAACAAAAAQUAAAAFZXJyb3IBAAAACHdyaXRlSW50AAAAAgAAAANrZXkAAAAFdmFsdWUDCQAAZgAAAAIAAAAAAAAAAAAFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAF3dyaXRpbmcgbmVnYXRpdmUgdmFsdWUgCQABpAAAAAEFAAAABXZhbHVlAgAAAAkgZm9yIGtleSAFAAAAA2tleQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAA2tleQUAAAAFdmFsdWUBAAAACHdyaXRlU3RyAAAAAgAAAANrZXkAAAAFdmFsdWUDCQAAAAAAAAICAAAAASAFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgIAAAAYd3JpdGluZyBhbiBlbXB0eSBzdHJpbmcgBQAAAAV2YWx1ZQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAMZGF5c1RvQmxvY2tzAAAAAQAAAARkYXlzAwkBAAAAAiE9AAAAAgUAAAAEZGF5cwUAAAAUdGhpcnR5RGF5c0xvY2tQZXJpb2QDCQEAAAACIT0AAAACBQAAAARkYXlzBQAAABNzaXh0eURheXNMb2NrUGVyaW9kAwkBAAAAAiE9AAAAAgUAAAAEZGF5cwUAAAAUbmluZXR5RGF5c0xvY2tQZXJpb2QDCQEAAAACIT0AAAACBQAAAARkYXlzBQAAABBvbmVEYXlMb2NrcGVyaW9kCQAAAgAAAAECAAAAFmludmFsaWQgbG9ja2luZyBwZXJpb2QJAABkAAAAAgkAAGgAAAACCQAAZAAAAAIFAAAABGRheXMAAAAAAAAAAAEFAAAAC0Jsb2NrUGVyRGF5BQAAAAZoZWlnaHQJAABkAAAAAgkAAGgAAAACCQAAZAAAAAIFAAAABGRheXMAAAAAAAAAAAEFAAAAC0Jsb2NrUGVyRGF5BQAAAAZoZWlnaHQJAABkAAAAAgkAAGgAAAACCQAAZAAAAAIFAAAABGRheXMAAAAAAAAAAAEFAAAAC0Jsb2NrUGVyRGF5BQAAAAZoZWlnaHQJAABkAAAAAgkAAGgAAAACCQAAZAAAAAIFAAAABGRheXMAAAAAAAAAAAEFAAAAC0Jsb2NrUGVyRGF5BQAAAAZoZWlnaHQBAAAADGJsb2Nrc1RvRGF5cwAAAAEAAAAKYmxvY2tzTGVmdAMJAABnAAAAAgAAAAAAAAAAAAUAAAAKYmxvY2tzTGVmdAAAAAAAAAAAAAQAAAAKbXVsdGlwbGllcgkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAABQAAAAdDRUlMSU5HBAAAAAhkYXlzbGVmdAkAAGsAAAADBQAAAApibG9ja3NMZWZ0BQAAAAptdWx0aXBsaWVyBQAAAAtCbG9ja1BlckRheQUAAAAIZGF5c2xlZnQBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAQAAAARnZXRTAAAAAQUAAAADa2V5CQEAAAAId3JpdGVTdHIAAAACBQAAAANrZXkFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgIAAAAVYWxyZWFkeSBpbml0aWFsaXplZDogBQAAAANrZXkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgAAAANrZXkAAAAFdmFsdWUDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQEAAAAEZ2V0UwAAAAEFAAAAA2tleQkBAAAACHdyaXRlSW50AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAICAAAAFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUAAAADa2V5AQAAAAlhZG1pbk9ubHkAAAABAAAAAWkEAAAADGlucHV0QWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAApvdGhlckFkbWluCQABLAAAAAIFAAAABWFkbWluBQAAAAxpbnB1dEFkZHJlc3MEAAAAByRtYXRjaDAJAQAAAARnZXRTAAAAAQUAAAAFYWRtaW4DCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAMJAQAAAAIhPQAAAAIFAAAADGlucHV0QWRkcmVzcwkBAAAABGdldFMAAAABBQAAAAVhZG1pbgkAAAIAAAABAgAAAAx1bmF1dGhvcml6ZWQGBAAAAAckbWF0Y2gxCQEAAAAEZ2V0UwAAAAEFAAAACm90aGVyQWRtaW4DCQAAAQAAAAIFAAAAByRtYXRjaDECAAAABlN0cmluZwQAAAABYgUAAAAHJG1hdGNoMQMJAQAAAAIhPQAAAAIFAAAADGlucHV0QWRkcmVzcwkBAAAABGdldFMAAAABBQAAAApvdGhlckFkbWluCQAAAgAAAAECAAAADHVuYXV0aG9yaXplZAYJAAACAAAAAQIAAAALdW5hdXRob3JpemQBAAAAEHdyaXRlQ29uZmlnVmFsdWUAAAACAAAAA2tleQAAAARkYXRhBAAAAAckbWF0Y2gwBQAAAARkYXRhAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABGRhdGEFAAAAByRtYXRjaDAJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgUAAAADa2V5BQAAAARkYXRhAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABGRhdGEFAAAAByRtYXRjaDAJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAA2tleQUAAAAEZGF0YQkAAAIAAAABAgAAABd1bnN1cHBvcnRlZCBjb25maWcgdHlwZQEAAAATaW5jcmVtZW50RW50cnlJbmRleAAAAAEAAAADa2V5BAAAAAZ1SW5kZXgJAQAAAARnZXRJAAAAAQUAAAADa2V5AwkBAAAACWlzRGVmaW5lZAAAAAEFAAAABnVJbmRleAkAAGQAAAACCQEAAAAFdmFsdWUAAAABBQAAAAZ1SW5kZXgAAAAAAAAAAAEAAAAAAAAAAAAAAAANAAAAAWkBAAAACGFkZEFzc2V0AAAABQAAAAtBc3NldFRpY2tlcgAAAAdBc3NldElEAAAADEFzc2V0UmVzZXJ2ZQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50AAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQEAAAABWNoZWNrCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAFY2hlY2sFAAAABWNoZWNrBAAAAA1hU3Rha2luZ1N0b3JlCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAAAxzdGFraW5nU3RvcmUEAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWluaW11bUxvY2tBbW91bnQEAAAAEmFNYXhpbXVtTG9ja0Ftb3VudAkAASwAAAACBQAAAAtBc3NldFRpY2tlcgUAAAARbWF4aW11bUxvY2tBbW91bnQEAAAAC2NoZWNrTWluTWF4AwkAAGYAAAACBQAAABZBc3NldE1heGltdW1Mb2NrQW1vdW50BQAAABZBc3NldE1pbmltdW1Mb2NrQW1vdW50CQAETAAAAAIJAQAAABF3cml0ZUNvbnN0SW50ZWdlcgAAAAIFAAAAEmFNaW5pbXVtTG9ja0Ftb3VudAUAAAAWQXNzZXRNaW5pbXVtTG9ja0Ftb3VudAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWF4aW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQFAAAAA25pbAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAABJhTWluaW11bUxvY2tBbW91bnQFAAAAFkFzc2V0TWF4aW11bUxvY2tBbW91bnQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAASYU1heGltdW1Mb2NrQW1vdW50BQAA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cmV2aW91cyBhZGRyZXNzIGZvdW5kAwkAAAAAAAACBQAAAA9jaGVja09sZEFkZHJlc3MFAAAAD2NoZWNrT2xkQWRkcmVzcwQAAAAKZGVsQWRkcmVzcwkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAKb3RoZXJBZG1pbgMJAAAAAAAAAgUAAAAKZGVsQWRkcmVzcwUAAAAKZGVsQWRkcmVzcwkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAIFAAAACm90aGVyQWRtaW4JAAQlAAAAAQUAAAAJYWRtaW5BZGRyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAQcmVtb3ZlT3RoZXJBZG1pbgAAAAEAAAAHYWRkcmVzcwQAAAAGY2hlY2tzCQEAAAAJYWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAACWFkbWluQWRkcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAB2FkZHJlc3MCAAAAD2ludmFsaWQgYWRkcmVzcwQAAAAMb3RoZXJBZGRyZXNzCQABLAAAAAIFAAAABWFkbWluCQAEJQAAAAEFAAAACWFkbWluQWRkcgQAAAAIZGVsQWRtaW4JAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAADG90aGVyQWRkcmVzcwMJAAAAAAAAAgUAAAAIZGVsQWRtaW4FAAAACGRlbEFkbWluBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABF1cGRhdGVDb25maWdWYWx1ZQAAAAIAAAADa2V5AAAABGRhdGEEAAAABmNoZWNrcwkBAAAACWFkbWluT25seQAA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bSBzdGFja2luZyBhbW91bnQgbm90IHNwZWNpZmllZAQAAAAKbWF4VG9TdGFrZQkBAAAADnRocm93T3JSZXR1cm5JAAAAAgkBAAAABGdldEkAAAABCQABLAAAAAIFAAAAC0Fzc2V0VGlja2VyBQAAABFtYXhpbXVtTG9ja0Ftb3VudAIAAAA0aW50ZXJuYWwgZXJyb3I6IG1heGltdW0gc3Rha2luZyBhbW91bnQgbm90IHNwZWNpZmllZAQAAAAGY2hlY2szCQEAAAAHdGhyb3dJZgAAAAIDCQAAZgAAAAIFAAAACm1pblRvU3Rha2UFAAAADWFtb3VudFRvU3Rha2UGCQAAZgAAAAIFAAAADWFtb3VudFRvU3Rha2UFAAAACm1heFRvU3Rha2UCAAAAHnN0YWtpbmcgYW1vdW50IGlzIG91dCBvZiByYW5nZQMJAAAAAAAAAgUAAAAGY2hlY2szBQAAAAZjaGVjazMEAAAADHVUb3RhbExvY2tlZAkAASwAAAACBQAAAAZ1c2VySWQFAAAAEXRvdGFsTG9ja2VkQU1vdW50BAAAAAl1U3VtVG90YWwDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQEAAAAEZ2V0SQAAAAEFAAAADHVUb3RhbExvY2tlZAAAAAAAAAAAAAkAAGQAAAACBQAAAA1hbW91bnRUb1N0YWtlCQEAAAAFdmFsdWUAAAABCQEAAAAEZ2V0SQAAAAEFAAAADHVUb3RhbExvY2tlZAQAAAAGY2hlY2s0CQEAAAAHdGhyb3dJZgAAAAIJAABmAAAAAgUAAAAJdVN1bVRvdGFsBQAAAAptYXhUb1N0YWtlAgAAAB15b3UgaGF2ZSBtYXhlZCBvdXQgeW91ciBxdW90YQMJAAAAAAAAAgUAAAAGY2hlY2s0BQAAAAZjaGVjazQEAAAADnVFbnRyeVRvU3RyaW5nCQABpAAAAAEFAAAACkVudHJ5SW5kZXgEAAAABnVFbnRyeQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAABXwUAAAALQXNzZXRUaWNrZXICAAAAAV8FAAAADnVFbnRyeVRvU3RyaW5nBAAAAA11VXNlckVudHJ5S2V5CQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BAAAAAd1VXNlcklkCQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAABHVzZXIEAAAABnVBc3NldAkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAAtsb2NrZWRBc3NldAQAAAAOdUxvY2tpbmdQZXJpb2QJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAANbG9ja2luZ1BlcmlvZAQAAAANdUxvY2tlZEFtb3VudAkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAAxsb2NrZWRBbW91bnQEAAAABHVBUFkJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAAKQVBZX0Ftb3VudAQAAAASdVVubG9ja0VsaWdpYmlsaXR5CQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAAEXVubG9ja0VsaWdpYmlsaXR5BAAAAA91QWxyZWFkeUNsYWltZWQJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAAOYWxyZWFkeUNsYWltZWQEAAAACVN0b3JlZEFQWQkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAABWdldFNWAAAAAQUAAAAFYWRtaW4CAAAADGdldEFQWUFtb3VudAkABEwAAAACBQAAAAZ1c2VySWQJAARMAAAAAgUAAAALQXNzZXRUaWNrZXIJAARMAAAAAgUAAAAKRW50cnlJbmRleAUAAAADbmlsBQAAAANuaWwEAAAAA0FQWQQAAAAHJG1hdGNoMAUAAAAJU3RvcmVkQVBZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWMFAAAAByRtYXRjaDAFAAAAAWMJAAACAAAAAQkAASwAAAACAgAAACFjb3VsZCBub3QgZ2V0IHRoZSBBUFkgYW1vdW50IGZvciAFAAAABnVzZXJJZAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAAA11VXNlckVudHJ5S2V5BQAAAApFbnRyeUluZGV4CQAETAAAAAIJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgUAAAAHdVVzZXJJZAUAAAAGdXNlcklkCQAETAAAAAIJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgUAAAAGdUFzc2V0BQAAAAVhc3NldAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAAA51TG9ja2luZ1BlcmlvZAUAAAAKbG9ja1BlcmlvZAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAAA11TG9ja2VkQW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAAMdVRvdGFsTG9ja2VkBQAAAAl1U3VtVG90YWwJAARMAAAAAgkBAAAAEXdyaXRlQ29uc3RJbnRlZ2VyAAAAAgUAAAASdVVubG9ja0VsaWdpYmlsaXR5CQEAAAAMZGF5c1RvQmxvY2tzAAAAAQUAAAAKTG9ja1BlcmlvZAkABEwAAAACCQEAAAARd3JpdGVDb25zdEludGVnZXIAAAACBQAAAAR1QVBZBQAAAANBUFkJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAD3VBbHJlYWR5Q2xhaW1lZAcFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAFQ2xhaW0AAAACAAAAC0Fzc2V0VGlja2VyAAAACkVudHJ5SW5kZXgEAAAABnVzZXJJZAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAABWFzc2V0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQUAAAALQXNzZXRUaWNrZXICAAAADWludmFsaWQgYXNzZXQDCQAAAAAAAAIFAAAABWFzc2V0BQAAAAVhc3NldAQAAAAGdUVudHJ5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAFfBQAAAAtBc3NldFRpY2tlcgIAAAABXwkAAaQAAAABBQAAAApFbnRyeUluZGV4BAAAAAd1VXNlcklECQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAAR1c2VyCQABLAAAAAICAAAAGG5vIGVudHJ5IGZvdW5kIGZvciB1c2VyIAUAAAAGdXNlcklkAwkAAAAAAAACBQAAAAd1VXNlcklEBQAAAAd1VXNlcklEBAAAAAx1TG9ja2VkQXNzZXQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldFMAAAABCQABLAAAAAIJAAEsAAAAAgUAAAAGdXNlcklkBQAAAAZ1RW50cnkFAAAAC2xvY2tlZEFzc2V0AgAAABhhc3NldCBub3QgbG9ja2VkIGJ5IHVzZXIEAAAAEnVBbHJlYWR5Q2xhaW1lZEtleQkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAA5hbHJlYWR5Q2xhaW1lZAQAAAAGY2hlY2swCQEAAAAHdGhyb3dJZgAAAAIJAAAAAAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIAAAAAEFAAAAEnVBbHJlYWR5Q2xhaW1lZEtleQIAAAAdY2Fubm90IGFzY2VydGFpbiBjbGFpbWFiaWxpdHkGCQABLAAAAAIJAAEsAAAAAgIAAAAHdXNlciArIAUAAAAGdXNlcklkAgAAABAgYWxyZWFkeSBjbGFpbWVkAwkAAAAAAAACBQAAAAZjaGVjazAFAAAABmNoZWNrMAQAAAANdUxvY2tlZEFtb3VudAkBAAAABWdldElWAAAAAQkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAAxsb2NrZWRBbW91bnQEAAAADnN0YWtpbmdSZXNlcnZlCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAOdGhyb3dPclJldHVyblMAAAACCQEAAAAEZ2V0UwAAAAEJAAEsAAAAAgUAAAALQXNzZXRUaWNrZXIFAAAADHN0YWtpbmdTdG9yZQIAAAAgaW50ZXJuYWwgZXJyb3I6IG5vIHJlc2VydmUgZm91bmQEAAAACUFQWUFNb3VudAkBAAAABWdldElWAAAAAQkAASwAAAACCQABLAAAAAIFAAAABnVzZXJJZAUAAAAGdUVudHJ5BQAAAApBUFlfQW1vdW50BAAAAAZwZXJpb2QJAQAAAAVnZXRJVgAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAZ1c2VySWQFAAAABnVFbnRyeQUAAAARdW5sb2NrRWxpZ2liaWxpdHkEAAAACmJsb2Nrc0xlZnQDCQAAZwAAAAIAAAAAAAAAAAAJAABlAAAAAgUAAAAGcGVyaW9kBQAAAAZoZWlnaHQAAAAAAAAAAAAJAABlAAAAAgUAAAAGcGVyaW9kBQAAAAZoZWlnaHQEAAAACGRheXNMZWZ0CQEAAAAMYmxvY2tzVG9EYXlzAAAAAQUAAAAKYmxvY2tzTGVmdAQAAAAGY2hlY2sxCQEAAAAHdGhyb3dJZgAAAAIJAABmAAAAAgUAAAAGcGVyaW9kBQAAAAZoZWlnaHQJAAEsAAAAAgkAAaQAAAABBQAAAAhkYXlzTGVmdAIAAAAYLzEwMDAgZGF5cyBsZWZ0IHRvIGNsYWltAwkAAAAAAAACBQAAAAZjaGVjazEFAAAABmNoZWNrMQQAAAARdHJhbnNmZXJBUFlBbW91bnQJAAP8AAAABAUAAAAOc3Rha2luZ1Jlc2VydmUCAAAAEHRyYW5zZmVySW50ZXJlc3QJAARMAAAAAgUAAAAGdXNlcklkCQAETAAAAAIFAAAACUFQWUFNb3VudAkABEwAAAACCQACWQAAAAEFAAAADHVMb2NrZWRBc3NldAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEXRyYW5zZmVyQVBZQW1vdW50BQAAABF0cmFuc2ZlckFQWUFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAZ1c2VySWQFAAAADXVMb2NrZWRBbW91bnQJAAJZAAAAAQUAAAAMdUxvY2tlZEFzc2V0CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAABJ1QWxyZWFkeUNsYWltZWRLZXkGBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAADsg4hh", "height": 2104608, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GqH6Qyim6i42SnV9Wq1dMPeHeXxQikSNB7kd6itXcM6b Next: dMLjbkmZnzYnawCidJSNLeXrV647NcM8oqbVF7QcwrS Diff:
OldNewDifferences
406406 let check1 = throwIf((period > height), (toString(daysLeft) + "/1000 days left to claim"))
407407 if ((check1 == check1))
408408 then {
409- let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, toBytes(uLockedAsset)], nil)
409+ let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, fromBase58String(uLockedAsset)], nil)
410410 if ((transferAPYAmount == transferAPYAmount))
411- then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, toBytes(uLockedAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
411+ then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, fromBase58String(uLockedAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
412412 else throw("Strict value is not equal to itself.")
413413 }
414414 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let lockingStore = this
55
66 let stakingStore = "_Reserve"
77
88 let minimumLockAmount = "_MinLockAmount"
99
1010 let maximumLockAmount = "_MaxLockAmount"
1111
1212 let assetList = nil
1313
1414 let unlockEligibility = "_Eligible_to_unlock_at_block"
1515
1616 let lockedAmount = "_Amount_locked"
1717
1818 let lockedAsset = "_Asset_locked"
1919
2020 let user = "_User"
2121
2222 let APY_Amount = "_APY_amount"
2323
2424 let totalLockedAMount = "_Total_Locked_Amount"
2525
2626 let lockingPeriod = "_Days_locked"
2727
2828 let entryIndex = "_Entry_Index"
2929
3030 let alreadyClaimed = "_Already_Claimed"
3131
3232 let admin = "admin_"
3333
3434 let BlockPerDay = 1440
3535
3636 let thirtyDaysLockPeriod = 30
3737
3838 let sixtyDaysLockPeriod = 60
3939
4040 let ninetyDaysLockPeriod = 90
4141
4242 let oneDayLockperiod = 1
4343
4444 func getI (key) = getInteger(this, key)
4545
4646
4747 func getS (key) = getString(this, key)
4848
4949
5050 func getIV (key) = value(getInteger(this, key))
5151
5252
5353 func getSV (key) = value(getString(this, key))
5454
5555
5656 func throwIf (condition,error) = if (condition)
5757 then throw(error)
5858 else true
5959
6060
6161 func throwOrReturnI (val,error) = match val {
6262 case val: Int =>
6363 val
6464 case _ =>
6565 throw(error)
6666 }
6767
6868
6969 func throwOrReturnS (val,error) = match val {
7070 case val: String =>
7171 val
7272 case _ =>
7373 throw(error)
7474 }
7575
7676
7777 func writeInt (key,value) = if ((0 > value))
7878 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
7979 else IntegerEntry(key, value)
8080
8181
8282 func writeStr (key,value) = if ((" " == value))
8383 then throw(("writing an empty string " + value))
8484 else StringEntry(key, value)
8585
8686
8787 func daysToBlocks (days) = if ((days != thirtyDaysLockPeriod))
8888 then if ((days != sixtyDaysLockPeriod))
8989 then if ((days != ninetyDaysLockPeriod))
9090 then if ((days != oneDayLockperiod))
9191 then throw("invalid locking period")
9292 else (((days + 1) * BlockPerDay) + height)
9393 else (((days + 1) * BlockPerDay) + height)
9494 else (((days + 1) * BlockPerDay) + height)
9595 else (((days + 1) * BlockPerDay) + height)
9696
9797
9898 func blocksToDays (blocksLeft) = if ((0 >= blocksLeft))
9999 then 0
100100 else {
101101 let multiplier = pow(10, 0, 3, 0, 0, CEILING)
102102 let daysleft = fraction(blocksLeft, multiplier, BlockPerDay)
103103 daysleft
104104 }
105105
106106
107107 func writeConstString (key,value) = if (!(isDefined(getS(key))))
108108 then writeStr(key, value)
109109 else throw(("already initialized: " + key))
110110
111111
112112 func writeConstInteger (key,value) = if (!(isDefined(getS(key))))
113113 then writeInt(key, value)
114114 else throw(("already initialized: " + key))
115115
116116
117117 func adminOnly (i) = {
118118 let inputAddress = toBase58String(i.caller.bytes)
119119 let otherAdmin = (admin + inputAddress)
120120 match getS(admin) {
121121 case a: String =>
122122 if ((inputAddress != getS(admin)))
123123 then throw("unauthorized")
124124 else true
125125 case _ =>
126126 match getS(otherAdmin) {
127127 case b: String =>
128128 if ((inputAddress != getS(otherAdmin)))
129129 then throw("unauthorized")
130130 else true
131131 case _ =>
132132 throw("unauthorizd")
133133 }
134134 }
135135 }
136136
137137
138138 func writeConfigValue (key,data) = match data {
139139 case data: String =>
140140 writeConstString(key, data)
141141 case data: Int =>
142142 writeConstInteger(key, data)
143143 case _ =>
144144 throw("unsupported config type")
145145 }
146146
147147
148148 func incrementEntryIndex (key) = {
149149 let uIndex = getI(key)
150150 if (isDefined(uIndex))
151151 then (value(uIndex) + 1)
152152 else 0
153153 }
154154
155155
156156 @Callable(i)
157157 func addAsset (AssetTicker,AssetID,AssetReserve,AssetMinimumLockAmount,AssetMaximumLockAmount) = {
158158 let check = adminOnly(i)
159159 if ((check == check))
160160 then {
161161 let aStakingStore = (AssetTicker + stakingStore)
162162 let aMinimumLockAmount = (AssetTicker + minimumLockAmount)
163163 let aMaximumLockAmount = (AssetTicker + maximumLockAmount)
164164 let checkMinMax = if ((AssetMaximumLockAmount > AssetMinimumLockAmount))
165165 then [writeConstInteger(aMinimumLockAmount, AssetMinimumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMaximumLockAmount)]
166166 else [writeConstInteger(aMinimumLockAmount, AssetMaximumLockAmount), writeConstInteger(aMaximumLockAmount, AssetMinimumLockAmount)]
167167 ([writeConstString(AssetTicker, AssetID), writeConstString(aStakingStore, AssetReserve)] ++ checkMinMax)
168168 }
169169 else throw("Strict value is not equal to itself.")
170170 }
171171
172172
173173
174174 @Callable(i)
175175 func deleteAsset (AssetTicker) = {
176176 let check = adminOnly(i)
177177 if ((check == check))
178178 then {
179179 let assetID = throwOrReturnS(getS(AssetTicker), (("asset with ticker " + AssetTicker) + " not found"))
180180 if ((assetID == assetID))
181181 then [DeleteEntry(AssetTicker), DeleteEntry((AssetTicker + minimumLockAmount)), DeleteEntry((AssetTicker + maximumLockAmount)), DeleteEntry((AssetTicker + stakingStore))]
182182 else throw("Strict value is not equal to itself.")
183183 }
184184 else throw("Strict value is not equal to itself.")
185185 }
186186
187187
188188
189189 @Callable(i)
190190 func _getAssetIdByTicker (AssetTicker) = {
191191 let check = adminOnly(i)
192192 if ((check == check))
193193 then {
194194 let a = throwOrReturnS(getS(AssetTicker), "asset not found")
195195 $Tuple2(nil, a)
196196 }
197197 else throw("Strict value is not equal to itself.")
198198 }
199199
200200
201201
202202 @Callable(i)
203203 func init (AdminAddress) = {
204204 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
205205 [writeConstString(admin, toString(adminAddr))]
206206 }
207207
208208
209209
210210 @Callable(i)
211211 func _deleteEntry (key) = {
212212 let check = adminOnly(i)
213213 if ((check == check))
214214 then [DeleteEntry(key)]
215215 else throw("Strict value is not equal to itself.")
216216 }
217217
218218
219219
220220 @Callable(i)
221221 func addAdmin (AdminAddress) = {
222222 let check = adminOnly(i)
223223 if ((check == check))
224224 then {
225225 let adminAddr = valueOrErrorMessage(addressFromString(AdminAddress), "invalid address")
226226 let newAdmin = (admin + toString(adminAddr))
227227 [writeConstString(newAdmin, AdminAddress)]
228228 }
229229 else throw("Strict value is not equal to itself.")
230230 }
231231
232232
233233
234234 @Callable(i)
235235 func changeMainAdmin (newAddress) = {
236236 let checks = adminOnly(i)
237237 if ((checks == checks))
238238 then {
239239 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
240240 let del = DeleteEntry(admin)
241241 if ((del == del))
242242 then [writeConstString(admin, toString(adminAddr))]
243243 else throw("Strict value is not equal to itself.")
244244 }
245245 else throw("Strict value is not equal to itself.")
246246 }
247247
248248
249249
250250 @Callable(i)
251251 func updateOtherAdminAddress (newAddress) = {
252252 let checks = adminOnly(i)
253253 if ((checks == checks))
254254 then {
255255 let adminAddr = valueOrErrorMessage(addressFromString(newAddress), "invalid address")
256256 let caller = toString(i.caller)
257257 let otherAdmin = (admin + caller)
258258 let checkOldAddress = throwOrReturnS(getS(otherAdmin), "no previous address found")
259259 if ((checkOldAddress == checkOldAddress))
260260 then {
261261 let delAddress = DeleteEntry(otherAdmin)
262262 if ((delAddress == delAddress))
263263 then [writeConstString(otherAdmin, toString(adminAddr))]
264264 else throw("Strict value is not equal to itself.")
265265 }
266266 else throw("Strict value is not equal to itself.")
267267 }
268268 else throw("Strict value is not equal to itself.")
269269 }
270270
271271
272272
273273 @Callable(i)
274274 func removeOtherAdmin (address) = {
275275 let checks = adminOnly(i)
276276 if ((checks == checks))
277277 then {
278278 let adminAddr = valueOrErrorMessage(addressFromString(address), "invalid address")
279279 let otherAddress = (admin + toString(adminAddr))
280280 let delAdmin = DeleteEntry(otherAddress)
281281 if ((delAdmin == delAdmin))
282282 then nil
283283 else throw("Strict value is not equal to itself.")
284284 }
285285 else throw("Strict value is not equal to itself.")
286286 }
287287
288288
289289
290290 @Callable(i)
291291 func updateConfigValue (key,data) = {
292292 let checks = adminOnly(i)
293293 if ((checks == checks))
294294 then {
295295 let del = DeleteEntry(key)
296296 if ((del == del))
297297 then [writeConfigValue(key, data)]
298298 else throw("Strict value is not equal to itself.")
299299 }
300300 else throw("Strict value is not equal to itself.")
301301 }
302302
303303
304304
305305 @Callable(i)
306306 func _getDaysLeftToClaim (userAddress,AssetTicker,EntryIndex) = {
307307 let check0 = adminOnly(i)
308308 if ((check0 == check0))
309309 then {
310310 let check1 = valueOrErrorMessage(addressFromString(userAddress), "invalid address")
311311 if ((check1 == check1))
312312 then {
313313 let uEntryIndex = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
314314 let uUnlockEligibility = ((userAddress + uEntryIndex) + unlockEligibility)
315315 let uBlocksLeft = valueOrErrorMessage(getI(uUnlockEligibility), ("no entry for " + userAddress))
316316 let uBlocksToDays = blocksToDays((uBlocksLeft - height))
317317 $Tuple2(nil, uBlocksToDays)
318318 }
319319 else throw("Strict value is not equal to itself.")
320320 }
321321 else throw("Strict value is not equal to itself.")
322322 }
323323
324324
325325
326326 @Callable(i)
327327 func Lock (LockPeriod,AssetTicker,EntryIndex) = {
328328 let check1 = throwIf((1 != size(i.payments)), "attach amount you want to lock")
329329 if ((check1 == check1))
330330 then {
331331 let assetValue = valueOrErrorMessage(i.payments[0].assetId, "no assetId for the attached asset")
332332 let asset = toBase58String(assetValue)
333333 let check2 = throwIf((getS(AssetTicker) != asset), "asset not supported")
334334 if ((check2 == check2))
335335 then {
336336 let lockPeriod = LockPeriod
337337 let userId = toBase58String(i.caller.bytes)
338338 let amountToStake = i.payments[0].amount
339339 let minToStake = throwOrReturnI(getI((AssetTicker + minimumLockAmount)), "internal error: minimum stacking amount not specified")
340340 let maxToStake = throwOrReturnI(getI((AssetTicker + maximumLockAmount)), "internal error: maximum staking amount not specified")
341341 let check3 = throwIf(if ((minToStake > amountToStake))
342342 then true
343343 else (amountToStake > maxToStake), "staking amount is out of range")
344344 if ((check3 == check3))
345345 then {
346346 let uTotalLocked = (userId + totalLockedAMount)
347347 let uSumTotal = if (!(isDefined(getI(uTotalLocked))))
348348 then 0
349349 else (amountToStake + value(getI(uTotalLocked)))
350350 let check4 = throwIf((uSumTotal > maxToStake), "you have maxed out your quota")
351351 if ((check4 == check4))
352352 then {
353353 let uEntryToString = toString(EntryIndex)
354354 let uEntry = ((("_" + AssetTicker) + "_") + uEntryToString)
355355 let uUserEntryKey = (userId + uEntry)
356356 let uUserId = ((userId + uEntry) + user)
357357 let uAsset = ((userId + uEntry) + lockedAsset)
358358 let uLockingPeriod = ((userId + uEntry) + lockingPeriod)
359359 let uLockedAmount = ((userId + uEntry) + lockedAmount)
360360 let uAPY = ((userId + uEntry) + APY_Amount)
361361 let uUnlockEligibility = ((userId + uEntry) + unlockEligibility)
362362 let uAlreadyClaimed = ((userId + uEntry) + alreadyClaimed)
363363 let StoredAPY = invoke(Address(fromBase58String(getSV(admin))), "getAPYAmount", [userId, AssetTicker, EntryIndex], nil)
364364 let APY = match StoredAPY {
365365 case c: Int =>
366366 c
367367 case _ =>
368368 throw(("could not get the APY amount for " + userId))
369369 }
370370 [writeConstInteger(uUserEntryKey, EntryIndex), writeConstString(uUserId, userId), writeConstString(uAsset, asset), writeConstInteger(uLockingPeriod, lockPeriod), writeConstInteger(uLockedAmount, i.payments[0].amount), writeConstInteger(uTotalLocked, uSumTotal), writeConstInteger(uUnlockEligibility, daysToBlocks(LockPeriod)), writeConstInteger(uAPY, APY), BooleanEntry(uAlreadyClaimed, false)]
371371 }
372372 else throw("Strict value is not equal to itself.")
373373 }
374374 else throw("Strict value is not equal to itself.")
375375 }
376376 else throw("Strict value is not equal to itself.")
377377 }
378378 else throw("Strict value is not equal to itself.")
379379 }
380380
381381
382382
383383 @Callable(i)
384384 func Claim (AssetTicker,EntryIndex) = {
385385 let userId = toString(i.caller)
386386 let asset = valueOrErrorMessage(getS(AssetTicker), "invalid asset")
387387 if ((asset == asset))
388388 then {
389389 let uEntry = ((("_" + AssetTicker) + "_") + toString(EntryIndex))
390390 let uUserID = valueOrErrorMessage(getS(((userId + uEntry) + user)), ("no entry found for user " + userId))
391391 if ((uUserID == uUserID))
392392 then {
393393 let uLockedAsset = valueOrErrorMessage(getS(((userId + uEntry) + lockedAsset)), "asset not locked by user")
394394 let uAlreadyClaimedKey = ((userId + uEntry) + alreadyClaimed)
395395 let check0 = throwIf((valueOrErrorMessage(getBoolean(uAlreadyClaimedKey), "cannot ascertain claimability") == true), (("user + " + userId) + " already claimed"))
396396 if ((check0 == check0))
397397 then {
398398 let uLockedAmount = getIV(((userId + uEntry) + lockedAmount))
399399 let stakingReserve = addressFromStringValue(throwOrReturnS(getS((AssetTicker + stakingStore)), "internal error: no reserve found"))
400400 let APYAMount = getIV(((userId + uEntry) + APY_Amount))
401401 let period = getIV(((userId + uEntry) + unlockEligibility))
402402 let blocksLeft = if ((0 >= (period - height)))
403403 then 0
404404 else (period - height)
405405 let daysLeft = blocksToDays(blocksLeft)
406406 let check1 = throwIf((period > height), (toString(daysLeft) + "/1000 days left to claim"))
407407 if ((check1 == check1))
408408 then {
409- let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, toBytes(uLockedAsset)], nil)
409+ let transferAPYAmount = invoke(stakingReserve, "transferInterest", [userId, APYAMount, fromBase58String(uLockedAsset)], nil)
410410 if ((transferAPYAmount == transferAPYAmount))
411- then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, toBytes(uLockedAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
411+ then [ScriptTransfer(addressFromStringValue(userId), uLockedAmount, fromBase58String(uLockedAsset)), BooleanEntry(uAlreadyClaimedKey, true)]
412412 else throw("Strict value is not equal to itself.")
413413 }
414414 else throw("Strict value is not equal to itself.")
415415 }
416416 else throw("Strict value is not equal to itself.")
417417 }
418418 else throw("Strict value is not equal to itself.")
419419 }
420420 else throw("Strict value is not equal to itself.")
421421 }
422422
423423

github/deemru/w8io/169f3d6 
56.65 ms