tx · EpGzd8gU6ARaj5CQgojMmYgZY2D77dcgcwi1rXeo9aVV

3PNK5ypnPJioLmLUzfK6ezpaePHLxZd6QLj:  -0.01400000 Waves

2022.01.27 19:25 [2962619] smart account 3PNK5ypnPJioLmLUzfK6ezpaePHLxZd6QLj > SELF 0.00000000 Waves

{ "type": 13, "id": "EpGzd8gU6ARaj5CQgojMmYgZY2D77dcgcwi1rXeo9aVV", "fee": 1400000, "feeAssetId": null, "timestamp": 1643300758770, "version": 2, "chainId": 87, "sender": "3PNK5ypnPJioLmLUzfK6ezpaePHLxZd6QLj", "senderPublicKey": "HsPDQJBmgyypcSDRbTgeuiQneThCQ1itqKm7xP5SbzWh", "proofs": [ "3E55Sr8uFSsH1fm1eHaiH5uKom5LGWcYpfighbSXPJ7jonJLb1LdsjGV6jWCpdpeqrAfoViCp4dWCocaWuQeVGXJ" ], "script": "base64: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AAAHJG1hdGNoMAkAA/AAAAACBQAAAAR0aGlzBQAAAAF0CAkAA+8AAAABBQAAAAR0aGlzAAAACWF2YWlsYWJsZQEAAAAdY2FsY3VsYXRlQ3VycmVudEFzc2V0SW50ZXJlc3QAAAAEAAAAB2Fzc2V0SWQAAAAKYXNzZXRJZFN0cgAAAAhhQmFsYW5jZQAAABZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrBAAAAAt0b3RhbFN0YWtlZAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABJnbG9iYWxfaW5kZXhTdGFrZWQEAAAAFXRva2VuQmFsYW5jZUxhc3RDaGVjawUAAAAWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawQAAAATY3VycmVudEJhbGFuY2VEZWx0YQkAAGUAAAACCQEAAAAPZ2V0VG9rZW5CYWxhbmNlAAAAAQUAAAAHYXNzZXRJZAUAAAAIYUJhbGFuY2UEAAAAFGN1cnJlbnRUb2tlbkVhcm5pbmdzAwkAAGYAAAACBQAAABNjdXJyZW50QmFsYW5jZURlbHRhBQAAABV0b2tlbkJhbGFuY2VMYXN0Q2hlY2sFAAAAE2N1cnJlbnRCYWxhbmNlRGVsdGEFAAAAFXRva2VuQmFsYW5jZUxhc3RDaGVjawQAAAALbmV3RWFybmluZ3MJAABlAAAAAgUAAAAUY3VycmVudFRva2VuRWFybmluZ3MFAAAAFXRva2VuQmFsYW5jZUxhc3RDaGVjawQAAAALbmV3SW50ZXJlc3QDCQAAAAAAAAIFAAAAC3RvdGFsU3Rha2VkAAAAAAAAAAAAAAAAAAAAAAAACQAAawAAAAMFAAAAC25ld0Vhcm5pbmdzBQAAAAZTY2FsZTgFAAAAC3RvdGFsU3Rha2VkBAAAABFsYXN0Q2hlY2tJbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARZ2xvYmFsX2xhc3RDaGVja18FAAAACmFzc2V0SWRTdHICAAAACV9pbnRlcmVzdAkAAGQAAAACBQAAABFsYXN0Q2hlY2tJbnRlcmVzdAUAAAALbmV3SW50ZXJlc3QBAAAAC2NsYWltUmVzdWx0AAAAAQAAAAdhZGRyZXNzBAAAAAphZGRyZXNzU3RyCQAEJQAAAAEFAAAAB2FkZHJlc3MEAAAADHB1enpsZUFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADF9pbmRleFN0YWtlZAoBAAAAB2hhbmRsZXIAAAACAAAABWFjY3VtAAAAB2Fzc2V0SWQEAAAACmFzc2V0SWRTdHIJAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB2Fzc2V0SWQEAAAACGFCYWxhbmNlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABBQAAAAdhc3NldElkAgAAAAhfYmFsYW5jZQQAAAAWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARZ2xvYmFsX2xhc3RDaGVja18FAAAACmFzc2V0SWRTdHICAAAACV9lYXJuaW5ncwQAAAAUY3VycmVudFRva2VuSW50ZXJlc3QJAQAAAB1jYWxjdWxhdGVDdXJyZW50QXNzZXRJbnRlcmVzdAAAAAQFAAAAB2Fzc2V0SWQFAAAACmFzc2V0SWRTdHIFAAAACGFCYWxhbmNlBQAAABZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrBAAAABRjdXJyZW50VG9rZW5FYXJuaW5ncwkAAZYAAAABCQAETAAAAAIFAAAAFnRva2VuRWFybmluZ3NMYXN0Q2hlY2sJAARMAAAAAgkAAGUAAAACCQEAAAAPZ2V0VG9rZW5CYWxhbmNlAAAAAQUAAAAHYXNzZXRJZAUAAAAIYUJhbGFuY2UFAAAAA25pbAQAAAAMcmV3YXJkQW1vdW50CQAAawAAAAMFAAAADHB1enpsZUFtb3VudAkAAGUAAAACBQAAABRjdXJyZW50VG9rZW5JbnRlcmVzdAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAAtfbGFzdENoZWNrXwUAAAAKYXNzZXRJZFN0cgIAAAAJX2ludGVyZXN0BQAAAAZTY2FsZTgEAAAACHRyYW5zZmVyAwkAAAAAAAACBQAAAAxyZXdh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bF9wb29sVG9rZW5faWQJAAACAAAAAQIAAAAUd3JvbmcgYXNzZXQgYXR0YWNoZWQJAQAAABBpbmRleFN0YWtlUmVzdWx0AAAAAgUAAAAKYWRkcmVzc1N0cggFAAAAA3BtdAAAAAZhbW91bnQAAAABaQEAAAAMdW5zdGFrZUluZGV4AAAAAQAAAAxwdXp6bGVBbW91bnQEAAAACmFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAA9wdXp6bGVBdmFpbGFibGUJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAAxfaW5kZXhTdGFrZWQDCQAAZgAAAAIFAAAADHB1enpsZUFtb3VudAUAAAAPcHV6emxlQXZhaWxhYmxlCQAAAgAAAAECAAAAJXlvdSBkb24ndCBoYXZlIGluZGV4IHRva2VucyBhdmFpbGFibGUJAAROAAAAAgkBAAAAC2NsYWltUmVzdWx0AAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAADF9pbmRleFN0YWtlZAkAAGUAAAACBQAAAA9wdXp6bGVBdmFpbGFibGUFAAAADHB1enpsZUFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAASZ2xvYmFsX2luZGV4U3Rha2VkCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAASZ2xvYmFsX2luZGV4U3Rha2VkBQAAAAxwdXp6bGVBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxwdXp6bGVBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDU3KQAAAAECAAAAE2dsb2JhbF9wb29sVG9rZW5faWQFAAAAA25pbAAAAAFpAQAAABFjbGFpbUluZGV4UmV3YXJkcwAAAAAJAQAAAAtjbGFpbVJlc3VsdAAAAAEIBQAAAAFpAAAABmNhbGxlcgAAAAFpAQAAAAtyZWRlZW1JbmRleAAAAAEAAAAMc2VuZFRvT3JpZ2luBAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQJAQAAAAx0cnlHZXRCaW5hcnkAAAABAgAAABNnbG9iYWxfcG9vbFRva2VuX2lkCQAAAgAAAAECAAAAHnBsZWFzZSBhdHRhY2ggcG9vbCBzaGFyZSB0b2tlbgQAAAAJUFJlZGVlbWVkCAUAAAADcG10AAAABmFtb3VudAQAAAAGcmVzdWx0CQEAAAAWaGFuZGxlUG9vbFRva2Vuc1JlZGVlbQAAAAIFAAAACVBSZWRlZW1lZAMFAAAADHNlbmRUb09yaWdpbggFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAZjYWxsZXIJAAROAAAAAgUAAAAGcmVzdWx0CQAETAAAAAIJAQAAAARCdXJuAAAAAgkBAAAADHRyeUdldEJpbmFyeQAAAAECAAAAE2dsb2JhbF9wb29sVG9rZW5faWQFAAAACVBSZWRlZW1lZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQJAABlAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAUAAAAJUFJlZGVlbWVkBQAAAANuaWwAAAABaQEAAAAEc3dhcAAAAAIAAAAIYXNzZXRPdXQAAAAHbWluaW11bQQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAhBbW91bnRJbgkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAAAdBc3NldEluCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAACEFzc2V0T3V0CQEAAAANZ2V0QXNzZXRCeXRlcwAAAAEFAAAACGFzc2V0T3V0BAAAAAlwdXp6bGVGZWUJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAADkFzc2V0SW5CYWxhbmNlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQEAAAAOZ2V0QXNzZXRTdHJpbmcAAAABBQAAAAdBc3NldEluAgAAAAhfYmFsYW5jZQQAAAAPQXNzZXRPdXRCYWxhbmNlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfBQAAAAhhc3NldE91dAIAAAAIX2JhbGFuY2UEAAAACUFtb3VudE91dAkBAAAAEmNhbGN1bGF0ZU91dEFtb3VudAAAAAUFAAAACEFtb3VudEluBQAAAAdBc3NldEluBQAAAAhBc3NldE91dAUAAAAOQXNzZXRJbkJhbGFuY2UFAAAAD0Fzc2V0T3V0QmFsYW5jZQQAAAAJZmVlQW1vdW50CQAAawAAAAMFAAAACUFtb3VudE91dAUAAAADRmVlBQAAAAhGZWVTY2FsZQQAAAARcHJvdG9jb2xGZWVBbW91bnQJAABrAAAAAwUAAAAJZmVlQW1vdW50AAAAAAAAAAAoAAAAAAAAAABkBAAAAA5jbGVhbkFtb3VudE91dAkAAGUAAAACBQAAAAlBbW91bnRPdXQFAAAACWZlZUFtb3VudAMJAABmAAAAAgUAAAAHbWluaW11bQUAAAAOY2xlYW5BbW91bnRPdXQJAAACAAAAAQkAASwAAAACAgAAACthbW91bnQgdG8gcmVjaWV2ZSBpcyBsb3dlciB0aGFuIGdpdmVuIG9uZTogCQABpAAAAAEFAAAADmNsZWFuQW1vdW50T3V0AwkAAGYAAAACAAAAAAAAACcQBQAAAAhBbW91bnRJbgkAAAIAAAABAgAAABxzdW0gdG8gZXhjaGFuZ2UgaXMgdG9vIHNtYWxsAwkAAGYAAAACAAAAAAAAAAAACQAAZQAAAAIFAAAAD0Fzc2V0T3V0QmFsYW5jZQUAAAAJQW1vdW50T3V0CQAAAgAAAAECAAAAG2NvbnRyYWN0IGlzIG91dCBvZiByZXNlcnZlcwQAAAAMbmV3QmFsYW5jZUluCQAAZAAAAAIFAAAADkFzc2V0SW5CYWxhbmNlBQAAAAhBbW91bnRJbgQAAAANbmV3QmFsYW5jZU91dAkAAGUAAAACBQAAAA9Bc3NldE91dEJhbGFuY2UFAAAACUFtb3VudE91dAMFAAAACXB1enpsZUZlZQQAAAAOY2FzaGJhY2tBbW91bnQFAAAAEXByb3RvY29sRmVlQW1vdW50BAAAAAt1c2RuQXNzZXRJZAEAAAAgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEEAAAAC3VzZG5CYWxhbmNlAwkAAAAAAAACBQAAAAdBc3NldEluBQAAAAt1c2RuQXNzZXRJZAUAAAAMbmV3QmFsYW5jZUluAwkAAAAAAAACBQAAAAhBc3NldE91dAUAAAALdXNkbkFzc2V0SWQFAAAADW5ld0JhbGFuY2VPdXQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAC3VzZG5Bc3NldElkAgAAAAhfYmFsYW5jZQQAAAASdXNkbkNhc2hiYWNrQW1vdW50AwkAAAAAAAACBQAAAAhBc3NldE91dAUAAAALdXNkbkFzc2V0SWQFAAAADmNhc2hiYWNrQW1vdW50CQEAAAASY2FsY3VsYXRlT3V0QW1vdW50AAAABQUAAAAOY2FzaGJhY2tBbW91bnQFAAAACEFzc2V0T3V0BQAAAAt1c2RuQXNzZXRJZAUAAAANbmV3QmFsYW5jZU91dAUAAAALdXNkbkJhbGFuY2UEAAAAEXVzZG5CYWxhbmNlQ2hhbmdlAwkBAAAAAiE9AAAAAgUAAAAIQXNzZXRPdXQFAAAAC3VzZG5Bc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkAAlgAAAABBQAAAAt1c2RuQXNzZXRJZAIAAAAIX2JhbGFuY2UJAABlAAAAAgUAAAALdXNkbkJhbGFuY2UFAAAAEnVzZG5DYXNoYmFja0Ftb3VudAUAAAADbmlsBQAAAANuaWwEAAAADHN0YWtpbmdUb3BVcAkAA/0AAAAECQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXlGiM+e6iuaqf1vWOvKmPZxqcBvQWKYm7AgAAAAt0b3BVcFJld2FyZAUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAt1c2RuQXNzZXRJZAUAAAASdXNkbkNhc2hiYWNrQW1vdW50BQAAAANuaWwDCQAAAAAAAAIFAAAADHN0YWtpbmdUb3BVcAUAAAAMc3Rha2luZ1RvcFVwCQAFFAAAAAIJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8FAAAACGFzc2V0T3V0AgAAAAhfYmFsYW5jZQkAAGQAAAACBQAAAA1uZXdCYWxhbmNlT3V0BQAAAA5jYXNoYmFja0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB0Fzc2V0SW4CAAAACF9iYWxhbmNlBQAAAAxuZXdCYWxhbmNlSW4JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA5jbGVhbkFtb3VudE91dAUAAAAIQXNzZXRPdXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADWdsb2JhbF92b2x1bWUJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAA1nbG9iYWxfdm9sdW1lCQEAAAASY2FsY3VsYXRlVXNkblZhbHVlAAAAAwUAAAAHQXNzZXRJbgUAAAAIQW1vdW50SW4FAAAADkFzc2V0SW5CYWxhbmNlBQAAAANuaWwFAAAAEXVzZG5CYWxhbmNlQ2hhbmdlBQAAAA5jbGVhbkFtb3VudE91dAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAUUAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8FAAAACGFzc2V0T3V0AgAAAAhfYmFsYW5jZQUAAAANbmV3QmFsYW5jZU91dAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAQAAAA5nZXRBc3NldFN0cmluZwAAAAEFAAAAB0Fzc2V0SW4CAAAACF9iYWxhbmNlBQAAAAxuZXdCYWxhbmNlSW4JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA5jbGVhbkFtb3VudE91dAUAAAAIQXNzZXRPdXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADWdsb2JhbF92b2x1bWUJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAA1nbG9iYWxfdm9sdW1lCQEAAAASY2FsY3VsYXRlVXNkblZhbHVlAAAAAwUAAAAHQXNzZXRJbgUAAAAIQW1vdW50SW4FAAAADkFzc2V0SW5CYWxhbmNlBQAAAANuaWwFAAAADmNsZWFuQW1vdW50T3V0AAAAAWkBAAAAEHN3YXBXaXRoUmVmZXJyYWwAAAADAAAACGFzc2V0T3V0AAAAB21pbmltdW0AAAAGcmVmS2V5BAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAACEFtb3VudEluCQEAAAAFdmFsdWUAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAB0Fzc2V0SW4IBQAAAANwbXQAAAAHYXNzZXRJZAQAAAAIQXNzZXRPdXQJAQAAAA1nZXRBc3NldEJ5dGVzAAAAAQUAAAAIYXNzZXRPdXQEAAAAD3JlZmVycmFsQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABAQAAABoBV/UeNEq8uzpARwJdHenVP/z5u/N/pHDYRAQAAAAJcHV6emxlRmVlCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcggFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAA5Bc3NldEluQmFsYW5jZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQUAAAAHQXNzZXRJbgIAAAAIX2JhbGFuY2UEAAAAD0Fzc2V0T3V0QmFsYW5jZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwUAAAAIYXNzZXRPdXQCAAAACF9iYWxhbmNlBAAAAAlBbW91bnRPdXQJAQAAABJjYWxjdWxhdGVPdXRBbW91bnQAAAAFBQAAAAhBbW91bnRJbgUAAAAHQXNzZXRJbgUAAAAIQXNzZXRPdXQFAAAADkFzc2V0SW5CYWxhbmNlBQAAAA9Bc3NldE91dEJhbGFuY2UEAAAACWZlZUFtb3VudAkAAGsAAAADBQAAAAlBbW91bnRPdXQFAAAAA0ZlZQUAAAAIRmVlU2NhbGUEAAAAEXByb3RvY29sRmVlQW1vdW50CQAAawAAAAMFAAAACWZlZUFtb3VudAAAAAAAAAAAKAAAAAAAAAAAZAQAAAAOY2xlYW5BbW91bnRPdXQJAABlAAAAAgUAAAAJQW1vdW50T3V0BQAAAAlmZWVBbW91bnQDCQAAZgAAAAIFAAAAB21pbmltdW0FAAAADmNsZWFuQW1vdW50T3V0CQAAAgAAAAEJAAEsAAAAAgIAAAArYW1vdW50IHRvIHJlY2lldmUgaXMgbG93ZXIgdGhhbiBnaXZlbiBvbmU6IAkAAaQAAAABBQAAAA5jbGVhbkFtb3VudE91dAMJAABmAAAAAgAAAAAAAAAnEAUAAAAIQW1vdW50SW4JAAACAAAAAQIAAAAcc3VtIHRvIGV4Y2hhbmdlIGlzIHRvbyBzbWFsbAMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACBQAAAA9Bc3NldE91dEJhbGFuY2UFAAAACUFtb3VudE91dAkAAAIAAAABAgAAABtjb250cmFjdCBpcyBvdXQgb2YgcmVzZXJ2ZXMEAAAADG5ld0JhbGFuY2VJbgkAAGQAAAACBQAAAA5Bc3NldEluQmFsYW5jZQUAAAAIQW1vdW50SW4EAAAADW5ld0JhbGFuY2VPdXQJAABlAAAAAgUAAAAPQXNzZXRPdXRCYWxhbmNlBQAAAAlBbW91bnRPdXQDBQAAAAlwdXp6bGVGZWUEAAAADmNhc2hiYWNrQW1vdW50BQAAABFwcm90b2NvbEZlZUFtb3VudAQAAAALdXNkbkFzc2V0SWQBAAAAILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRBAAAAAt1c2RuQmFsYW5jZQMJAAAAAAAAAgUAAAAHQXNzZXRJbgUAAAALdXNkbkFzc2V0SWQF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Q2FzaGJhY2tBbW91bnQAAAAAAAAAAAQFAAAAC3VzZG5Bc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA1nbG9iYWxfdm9sdW1lCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAANZ2xvYmFsX3ZvbHVtZQkBAAAAEmNhbGN1bGF0ZVVzZG5WYWx1ZQAAAAMFAAAAB0Fzc2V0SW4FAAAACEFtb3VudEluBQAAAA5Bc3NldEluQmFsYW5jZQUAAAADbmlsBQAAABF1c2RuQmFsYW5jZUNoYW5nZQUAAAAOY2xlYW5BbW91bnRPdXQJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkABRQAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwUAAAAIYXNzZXRPdXQCAAAACF9iYWxhbmNlBQAAAA1uZXdCYWxhbmNlT3V0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkBAAAADmdldEFzc2V0U3RyaW5nAAAAAQUAAAAHQXNzZXRJbgIAAAAIX2JhbGFuY2UFAAAADG5ld0JhbGFuY2VJbgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADmNsZWFuQW1vdW50T3V0BQAAAAhBc3NldE91dAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAANZ2xvYmFsX3ZvbHVtZQkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAADWdsb2JhbF92b2x1bWUJAQAAABJjYWxjdWxhdGVVc2RuVmFsdWUAAAADBQAAAAdBc3NldEluBQAAAAhBbW91bnRJbgUAAAAOQXNzZXRJbkJhbGFuY2UFAAAAA25pbAUAAAAOY2xlYW5BbW91bnRPdXQAAAAAwvCqyg==", "height": 2962619, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: rGXXcYRTgLWx6xAdbnTLtw1SYBi8rXGg1jMMa65woiH Next: 9ztgVndfcpYprCc11ozquXbbLwGUgZ8mCXJTiJLHWjwb Diff:
OldNewDifferences
511511 let usdnBalanceChange = if ((AssetOut != usdnAssetId))
512512 then [IntegerEntry((("global_" + toBase58String(usdnAssetId)) + "_balance"), (usdnBalance - usdnCashbackAmount))]
513513 else nil
514- let puzzlePool = Address(base58'3PFDgzu1UtswAkCMxqqQjbTeHaX4cMab8Kh')
515- let puzzleAssetId = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS'
516- let puzzleCashbackAmount = match reentrantInvoke(puzzlePool, "swap", [toBase58String(puzzleAssetId), 0], [AttachedPayment(usdnAssetId, (usdnCashbackAmount / 2))]) {
517- case x: Int =>
518- x
519- case _ =>
520- 0
521- }
522- if ((puzzleCashbackAmount == puzzleCashbackAmount))
523- then {
524- let stakingTopUp = reentrantInvoke(Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'), "topUpReward", nil, [AttachedPayment(usdnAssetId, (usdnCashbackAmount / 2))])
525- if ((stakingTopUp == stakingTopUp))
526- then $Tuple2(([IntegerEntry((("global_" + assetOut) + "_balance"), (newBalanceOut + cashbackAmount)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), ScriptTransfer(i.caller, puzzleCashbackAmount, puzzleAssetId), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))] ++ usdnBalanceChange), cleanAmountOut)
527- else throw("Strict value is not equal to itself.")
528- }
514+ let stakingTopUp = reentrantInvoke(Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'), "topUpReward", nil, [AttachedPayment(usdnAssetId, usdnCashbackAmount)])
515+ if ((stakingTopUp == stakingTopUp))
516+ then $Tuple2(([IntegerEntry((("global_" + assetOut) + "_balance"), (newBalanceOut + cashbackAmount)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))] ++ usdnBalanceChange), cleanAmountOut)
529517 else throw("Strict value is not equal to itself.")
530518 }
531519 else $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), newBalanceOut), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let T = 3
55
66 let assetIds = [base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS', base58'D4TPjtzpsDEJFS1pUAkvh1tJJJMNWGcSrds9sveBoQka', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p']
77
88 let AssetsWeights = [40, 40, 20]
99
1010 let AssetsWeightsDecimals = 2
1111
1212 let PoolTokenDecimals = 8
1313
1414 let Decimals = [8, 8, 6]
1515
1616 let Scales = [100000000, 100000000, 1000000]
1717
1818 let Fee = 200
1919
2020 let Scale = 10000
2121
2222 let Scale8 = 100000000
2323
2424 let FeeScale = 10000
2525
2626 func getAssetString (assetId) = match assetId {
2727 case b: ByteVector =>
2828 toBase58String(b)
2929 case _ =>
3030 "WAVES"
3131 }
3232
3333
3434 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
3535 then unit
3636 else fromBase58String(assetIdStr)
3737
3838
3939 let earnedAssets = assetIds
4040
4141 func tryGetInteger (key) = match getInteger(this, key) {
4242 case b: Int =>
4343 b
4444 case _ =>
4545 0
4646 }
4747
4848
4949 func tryGetBinary (key) = match getBinary(this, key) {
5050 case b: ByteVector =>
5151 b
5252 case _ =>
5353 base58''
5454 }
5555
5656
5757 func getCurrentTokenBalance (tokenType) = {
5858 let tokenId = getAssetString(assetIds[tokenType])
5959 tryGetInteger((("global_" + tokenId) + "_balance"))
6060 }
6161
6262
6363 func calculatePIssued (amount,tokenId) = {
6464 let Psupply = tryGetInteger("global_poolToken_amount")
6565 let Balance = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
6666 fraction(amount, Psupply, Balance, DOWN)
6767 }
6868
6969
7070 func getMinPIssued (payments) = {
7171 func handler (accum,current) = {
7272 let PIssued = calculatePIssued(current.amount, current.assetId)
7373 if (if ((accum == 0))
7474 then true
7575 else (accum > PIssued))
7676 then PIssued
7777 else accum
7878 }
7979
8080 let minPIssed = {
8181 let $l = payments
8282 let $s = size($l)
8383 let $acc0 = 0
8484 func $f0_1 ($a,$i) = if (($i >= $s))
8585 then $a
8686 else handler($a, $l[$i])
8787
8888 func $f0_2 ($a,$i) = if (($i >= $s))
8989 then $a
9090 else throw("List size exceeds 10")
9191
9292 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
9393 }
9494 minPIssed
9595 }
9696
9797
9898 func calculateUsdnValue (assetId,amount,aBalance) = {
9999 let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
100100 let usdnWeight = AssetsWeights[value(indexOf(assetIds, usdnId))]
101101 let assetWeight = AssetsWeights[value(indexOf(assetIds, assetId))]
102102 let usdnBalance = tryGetInteger((("global_" + getAssetString(usdnId)) + "_balance"))
103103 fraction(amount, (usdnBalance / usdnWeight), (aBalance / assetWeight))
104104 }
105105
106106
107107 func checkTokensValidity (payments) = {
108108 func handler1 (accum,payment) = (accum ++ [payment.assetId])
109109
110110 let ids = {
111111 let $l = payments
112112 let $s = size($l)
113113 let $acc0 = nil
114114 func $f0_1 ($a,$i) = if (($i >= $s))
115115 then $a
116116 else handler1($a, $l[$i])
117117
118118 func $f0_2 ($a,$i) = if (($i >= $s))
119119 then $a
120120 else throw("List size exceeds 10")
121121
122122 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
123123 }
124124 if ((ids == ids))
125125 then {
126126 func handler2 (accum,assetId) = if ((indexOf(ids, assetId) != unit))
127127 then (accum + 1)
128128 else throw(("asset not attached: " + getAssetString(assetId)))
129129
130130 let checks = {
131131 let $l = assetIds
132132 let $s = size($l)
133133 let $acc0 = 0
134134 func $f1_1 ($a,$i) = if (($i >= $s))
135135 then $a
136136 else handler2($a, $l[$i])
137137
138138 func $f1_2 ($a,$i) = if (($i >= $s))
139139 then $a
140140 else throw("List size exceeds 10")
141141
142142 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
143143 }
144144 if ((checks == checks))
145145 then true
146146 else throw("Strict value is not equal to itself.")
147147 }
148148 else throw("Strict value is not equal to itself.")
149149 }
150150
151151
152152 func handlePoolTokensAdd (PIssued,payments,userAddress,needChange) = {
153153 func getTokenPaymentAmount (tokenId) = {
154154 func handler (accum,payment) = if ((payment.assetId == tokenId))
155155 then payment.amount
156156 else accum
157157
158158 let $l = payments
159159 let $s = size($l)
160160 let $acc0 = 0
161161 func $f0_1 ($a,$i) = if (($i >= $s))
162162 then $a
163163 else handler($a, $l[$i])
164164
165165 func $f0_2 ($a,$i) = if (($i >= $s))
166166 then $a
167167 else throw("List size exceeds 10")
168168
169169 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
170170 }
171171
172172 func handleTokenChange (accum,tokenId) = {
173173 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
174174 let PSupply = tryGetInteger("global_poolToken_amount")
175175 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
176176 let Dk = fraction((fraction((PSupply + PIssued), tokenDecimals, PSupply, DOWN) - tokenDecimals), Bk, tokenDecimals, DOWN)
177177 let paymentAmount = getTokenPaymentAmount(tokenId)
178178 let toReturn = ((if ((paymentAmount != 0))
179179 then paymentAmount
180180 else 0) - Dk)
181181 let t = if (needChange)
182182 then [ScriptTransfer(userAddress, toReturn, tokenId)]
183183 else nil
184184 ((accum ++ t) ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk + Dk))])
185185 }
186186
187187 let $l = assetIds
188188 let $s = size($l)
189189 let $acc0 = nil
190190 func $f0_1 ($a,$i) = if (($i >= $s))
191191 then $a
192192 else handleTokenChange($a, $l[$i])
193193
194194 func $f0_2 ($a,$i) = if (($i >= $s))
195195 then $a
196196 else throw("List size exceeds 10")
197197
198198 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
199199 }
200200
201201
202202 func handlePoolTokensRedeem (PRedeemed,userAddress) = {
203203 func handleTokenRedeem (accum,tokenId) = {
204204 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
205205 let PSupply = tryGetInteger("global_poolToken_amount")
206206 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
207207 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
208208 (accum ++ [IntegerEntry((("global_" + getAssetString(tokenId)) + "_balance"), (Bk - amount))])
209209 }
210210
211211 func handleTokenRedeem2 (accum,tokenId) = {
212212 let Bk = tryGetInteger((("global_" + getAssetString(tokenId)) + "_balance"))
213213 let PSupply = tryGetInteger("global_poolToken_amount")
214214 let tokenDecimals = tryGetInteger((("static_" + getAssetString(tokenId)) + "_scale"))
215215 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
216216 (accum ++ [ScriptTransfer(userAddress, amount, tokenId)])
217217 }
218218
219219 ({
220220 let $l = assetIds
221221 let $s = size($l)
222222 let $acc0 = nil
223223 func $f0_1 ($a,$i) = if (($i >= $s))
224224 then $a
225225 else handleTokenRedeem($a, $l[$i])
226226
227227 func $f0_2 ($a,$i) = if (($i >= $s))
228228 then $a
229229 else throw("List size exceeds 10")
230230
231231 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232232 } ++ {
233233 let $l = assetIds
234234 let $s = size($l)
235235 let $acc0 = nil
236236 func $f1_1 ($a,$i) = if (($i >= $s))
237237 then $a
238238 else handleTokenRedeem2($a, $l[$i])
239239
240240 func $f1_2 ($a,$i) = if (($i >= $s))
241241 then $a
242242 else throw("List size exceeds 10")
243243
244244 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
245245 })
246246 }
247247
248248
249249 func calculateOutAmount (AmountIn,assetIn,assetOut,BalanceIn,BalanceOut) = {
250250 let IndexIn = value(indexOf(assetIds, assetIn))
251251 let IndexOut = value(indexOf(assetIds, assetOut))
252252 if ((IndexIn == IndexOut))
253253 then throw("inalid tokens pair")
254254 else fraction(BalanceOut, (Scales[IndexOut] - pow(fraction(BalanceIn, Scales[IndexIn], (BalanceIn + AmountIn)), Decimals[IndexIn], fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut]), 4, Decimals[IndexOut], CEILING)), Scales[IndexOut], DOWN)
255255 }
256256
257257
258258 func getTokenBalance (assetId) = match assetId {
259259 case t: ByteVector =>
260260 assetBalance(this, t)
261261 case _ =>
262262 wavesBalance(this).available
263263 }
264264
265265
266266 func calculateCurrentAssetInterest (assetId,assetIdStr,aBalance,tokenEarningsLastCheck) = {
267267 let totalStaked = tryGetInteger("global_indexStaked")
268268 let tokenBalanceLastCheck = tokenEarningsLastCheck
269269 let currentBalanceDelta = (getTokenBalance(assetId) - aBalance)
270270 let currentTokenEarnings = if ((currentBalanceDelta > tokenBalanceLastCheck))
271271 then currentBalanceDelta
272272 else tokenBalanceLastCheck
273273 let newEarnings = (currentTokenEarnings - tokenBalanceLastCheck)
274274 let newInterest = if ((totalStaked == 0))
275275 then 0
276276 else fraction(newEarnings, Scale8, totalStaked)
277277 let lastCheckInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest"))
278278 (lastCheckInterest + newInterest)
279279 }
280280
281281
282282 func claimResult (address) = {
283283 let addressStr = toString(address)
284284 let puzzleAmount = tryGetInteger((addressStr + "_indexStaked"))
285285 func handler (accum,assetId) = {
286286 let assetIdStr = getAssetString(assetId)
287287 let aBalance = tryGetInteger((("global_" + getAssetString(assetId)) + "_balance"))
288288 let tokenEarningsLastCheck = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_earnings"))
289289 let currentTokenInterest = calculateCurrentAssetInterest(assetId, assetIdStr, aBalance, tokenEarningsLastCheck)
290290 let currentTokenEarnings = max([tokenEarningsLastCheck, (getTokenBalance(assetId) - aBalance)])
291291 let rewardAmount = fraction(puzzleAmount, (currentTokenInterest - tryGetInteger((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"))), Scale8)
292292 let transfer = if ((rewardAmount == 0))
293293 then nil
294294 else [ScriptTransfer(address, rewardAmount, assetId)]
295295 $Tuple2(((accum._1 ++ transfer) ++ [IntegerEntry((("global_lastCheck_" + assetIdStr) + "_earnings"), (currentTokenEarnings - rewardAmount)), IntegerEntry((("global_lastCheck_" + assetIdStr) + "_interest"), currentTokenInterest), IntegerEntry((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"), currentTokenInterest)]), (accum._2 + calculateUsdnValue(assetId, rewardAmount, aBalance)))
296296 }
297297
298298 let accum = {
299299 let $l = earnedAssets
300300 let $s = size($l)
301301 let $acc0 = $Tuple2(nil, 0)
302302 func $f0_1 ($a,$i) = if (($i >= $s))
303303 then $a
304304 else handler($a, $l[$i])
305305
306306 func $f0_2 ($a,$i) = if (($i >= $s))
307307 then $a
308308 else throw("List size exceeds 10")
309309
310310 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
311311 }
312312 (accum._1 ++ [IntegerEntry((addressStr + "_claimedRewardValue"), (tryGetInteger((addressStr + "_claimedRewardValue")) + accum._2)), IntegerEntry((addressStr + "_lastClaim"), lastBlock.timestamp)])
313313 }
314314
315315
316316 func indexStakeResult (addressStr,amount) = {
317317 let li = claimResult(addressFromStringValue(addressStr))
318318 (li ++ [IntegerEntry((addressStr + "_indexStaked"), (tryGetInteger((addressStr + "_indexStaked")) + amount)), IntegerEntry("global_indexStaked", (tryGetInteger("global_indexStaked") + amount))])
319319 }
320320
321321
322322 @Callable(i)
323323 func preInit () = {
324324 func handler (accum,assetNum) = if ((assetNum >= T))
325325 then accum
326326 else (accum ++ [IntegerEntry((("static_" + getAssetString(assetIds[assetNum])) + "_scale"), Scales[assetNum]), IntegerEntry((("static_" + getAssetString(assetIds[assetNum])) + "_weight"), AssetsWeights[assetNum])])
327327
328328 let $l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
329329 let $s = size($l)
330330 let $acc0 = nil
331331 func $f0_1 ($a,$i) = if (($i >= $s))
332332 then $a
333333 else handler($a, $l[$i])
334334
335335 func $f0_2 ($a,$i) = if (($i >= $s))
336336 then $a
337337 else throw("List size exceeds 10")
338338
339339 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
340340 }
341341
342342
343343
344344 @Callable(i)
345345 func deInit () = if ((i.caller != this))
346346 then throw("admin only")
347347 else [IntegerEntry("global_wasInited", 0)]
348348
349349
350350
351351 @Callable(i)
352352 func init () = {
353353 func prepareList () = {
354354 func handler (accum,n) = (accum ++ [IntegerEntry((("global_" + getAssetString(n.assetId)) + "_balance"), n.amount)])
355355
356356 let $l = i.payments
357357 let $s = size($l)
358358 let $acc0 = nil
359359 func $f0_1 ($a,$i) = if (($i >= $s))
360360 then $a
361361 else handler($a, $l[$i])
362362
363363 func $f0_2 ($a,$i) = if (($i >= $s))
364364 then $a
365365 else throw("List size exceeds 10")
366366
367367 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
368368 }
369369
370370 func calculatePoolTokensAmount (payments) = {
371371 func handler (accum,pmt) = {
372372 let assetId = pmt.assetId
373373 func handler2 (accum,n) = if ((n == assetId))
374374 then value(indexOf(assetIds, n))
375375 else accum
376376
377377 let Token = {
378378 let $l = assetIds
379379 let $s = size($l)
380380 let $acc0 = 1
381381 func $f0_1 ($a,$i) = if (($i >= $s))
382382 then $a
383383 else handler2($a, $l[$i])
384384
385385 func $f0_2 ($a,$i) = if (($i >= $s))
386386 then $a
387387 else throw("List size exceeds 10")
388388
389389 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
390390 }
391391 (accum * pow(pmt.amount, Decimals[Token], AssetsWeights[Token], AssetsWeightsDecimals, 1, FLOOR))
392392 }
393393
394394 let $l = payments
395395 let $s = size($l)
396396 let $acc0 = 1
397397 func $f0_1 ($a,$i) = if (($i >= $s))
398398 then $a
399399 else handler($a, $l[$i])
400400
401401 func $f0_2 ($a,$i) = if (($i >= $s))
402402 then $a
403403 else throw("List size exceeds 10")
404404
405405 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
406406 }
407407
408408 if ((tryGetInteger("global_wasInited") > 0))
409409 then throw("pool already inited")
410410 else {
411411 let initialPoolTokens = calculatePoolTokensAmount(i.payments)
412412 let poolTokenIssue = Issue("PZ Race Index", "Puzzle Swap: race pool index", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
413413 let poolTokenId = calculateAssetId(poolTokenIssue)
414414 (prepareList() ++ [poolTokenIssue, IntegerEntry("global_poolToken_amount", initialPoolTokens), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", poolTokenId), ScriptTransfer(i.caller, initialPoolTokens, poolTokenId)])
415415 }
416416 }
417417
418418
419419
420420 @Callable(i)
421421 func generateIndex (needChange) = if ((size(i.payments) != T))
422422 then throw(("you need to attach all pool tokens. amount of pool tokens: " + toString(T)))
423423 else if (!(checkTokensValidity(i.payments)))
424424 then throw("wrong assets attached")
425425 else {
426426 let PIssued = getMinPIssued(i.payments)
427427 let reissue = Reissue(getBinaryValue("global_poolToken_id"), PIssued, true)
428428 let result = handlePoolTokensAdd(PIssued, i.payments, i.originCaller, needChange)
429429 $Tuple2((result ++ [ScriptTransfer(i.caller, PIssued, tryGetBinary("global_poolToken_id")), reissue, IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") + PIssued))]), PIssued)
430430 }
431431
432432
433433
434434 @Callable(i)
435435 func stakeIndex () = {
436436 let addressStr = toString(i.originCaller)
437437 let pmt = i.payments[0]
438438 if ((value(pmt.assetId) != tryGetBinary("global_poolToken_id")))
439439 then throw("wrong asset attached")
440440 else indexStakeResult(addressStr, pmt.amount)
441441 }
442442
443443
444444
445445 @Callable(i)
446446 func unstakeIndex (puzzleAmount) = {
447447 let addressStr = toString(i.originCaller)
448448 let puzzleAvailable = tryGetInteger((addressStr + "_indexStaked"))
449449 if ((puzzleAmount > puzzleAvailable))
450450 then throw("you don't have index tokens available")
451451 else (claimResult(i.originCaller) ++ [IntegerEntry((addressStr + "_indexStaked"), (puzzleAvailable - puzzleAmount)), IntegerEntry("global_indexStaked", (tryGetInteger("global_indexStaked") - puzzleAmount)), ScriptTransfer(i.caller, puzzleAmount, getBinaryValue("global_poolToken_id"))])
452452 }
453453
454454
455455
456456 @Callable(i)
457457 func claimIndexRewards () = claimResult(i.caller)
458458
459459
460460
461461 @Callable(i)
462462 func redeemIndex (sendToOrigin) = {
463463 let pmt = i.payments[0]
464464 if ((pmt.assetId != tryGetBinary("global_poolToken_id")))
465465 then throw("please attach pool share token")
466466 else {
467467 let PRedeemed = pmt.amount
468468 let result = handlePoolTokensRedeem(PRedeemed, if (sendToOrigin)
469469 then i.originCaller
470470 else i.caller)
471471 (result ++ [Burn(tryGetBinary("global_poolToken_id"), PRedeemed), IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") - PRedeemed))])
472472 }
473473 }
474474
475475
476476
477477 @Callable(i)
478478 func swap (assetOut,minimum) = {
479479 let pmt = value(i.payments[0])
480480 let AmountIn = value(i.payments[0].amount)
481481 let AssetIn = pmt.assetId
482482 let AssetOut = getAssetBytes(assetOut)
483483 let puzzleFee = (i.caller == i.originCaller)
484484 let AssetInBalance = tryGetInteger((("global_" + getAssetString(AssetIn)) + "_balance"))
485485 let AssetOutBalance = tryGetInteger((("global_" + assetOut) + "_balance"))
486486 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
487487 let feeAmount = fraction(AmountOut, Fee, FeeScale)
488488 let protocolFeeAmount = fraction(feeAmount, 40, 100)
489489 let cleanAmountOut = (AmountOut - feeAmount)
490490 if ((minimum > cleanAmountOut))
491491 then throw(("amount to recieve is lower than given one: " + toString(cleanAmountOut)))
492492 else if ((10000 > AmountIn))
493493 then throw("sum to exchange is too small")
494494 else if ((0 > (AssetOutBalance - AmountOut)))
495495 then throw("contract is out of reserves")
496496 else {
497497 let newBalanceIn = (AssetInBalance + AmountIn)
498498 let newBalanceOut = (AssetOutBalance - AmountOut)
499499 if (puzzleFee)
500500 then {
501501 let cashbackAmount = protocolFeeAmount
502502 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
503503 let usdnBalance = if ((AssetIn == usdnAssetId))
504504 then newBalanceIn
505505 else if ((AssetOut == usdnAssetId))
506506 then newBalanceOut
507507 else tryGetInteger((("global_" + getAssetString(usdnAssetId)) + "_balance"))
508508 let usdnCashbackAmount = if ((AssetOut == usdnAssetId))
509509 then cashbackAmount
510510 else calculateOutAmount(cashbackAmount, AssetOut, usdnAssetId, newBalanceOut, usdnBalance)
511511 let usdnBalanceChange = if ((AssetOut != usdnAssetId))
512512 then [IntegerEntry((("global_" + toBase58String(usdnAssetId)) + "_balance"), (usdnBalance - usdnCashbackAmount))]
513513 else nil
514- let puzzlePool = Address(base58'3PFDgzu1UtswAkCMxqqQjbTeHaX4cMab8Kh')
515- let puzzleAssetId = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS'
516- let puzzleCashbackAmount = match reentrantInvoke(puzzlePool, "swap", [toBase58String(puzzleAssetId), 0], [AttachedPayment(usdnAssetId, (usdnCashbackAmount / 2))]) {
517- case x: Int =>
518- x
519- case _ =>
520- 0
521- }
522- if ((puzzleCashbackAmount == puzzleCashbackAmount))
523- then {
524- let stakingTopUp = reentrantInvoke(Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'), "topUpReward", nil, [AttachedPayment(usdnAssetId, (usdnCashbackAmount / 2))])
525- if ((stakingTopUp == stakingTopUp))
526- then $Tuple2(([IntegerEntry((("global_" + assetOut) + "_balance"), (newBalanceOut + cashbackAmount)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), ScriptTransfer(i.caller, puzzleCashbackAmount, puzzleAssetId), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))] ++ usdnBalanceChange), cleanAmountOut)
527- else throw("Strict value is not equal to itself.")
528- }
514+ let stakingTopUp = reentrantInvoke(Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'), "topUpReward", nil, [AttachedPayment(usdnAssetId, usdnCashbackAmount)])
515+ if ((stakingTopUp == stakingTopUp))
516+ then $Tuple2(([IntegerEntry((("global_" + assetOut) + "_balance"), (newBalanceOut + cashbackAmount)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))] ++ usdnBalanceChange), cleanAmountOut)
529517 else throw("Strict value is not equal to itself.")
530518 }
531519 else $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), newBalanceOut), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
532520 }
533521 }
534522
535523
536524
537525 @Callable(i)
538526 func swapWithReferral (assetOut,minimum,refKey) = {
539527 let pmt = value(i.payments[0])
540528 let AmountIn = value(i.payments[0].amount)
541529 let AssetIn = pmt.assetId
542530 let AssetOut = getAssetBytes(assetOut)
543531 let referralAddress = Address(base58'3PQGxTse5eWufds6GA41UnbUNqLcCEnVJL3')
544532 let puzzleFee = (i.caller == i.originCaller)
545533 let AssetInBalance = tryGetInteger((("global_" + getAssetString(AssetIn)) + "_balance"))
546534 let AssetOutBalance = tryGetInteger((("global_" + assetOut) + "_balance"))
547535 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut, AssetInBalance, AssetOutBalance)
548536 let feeAmount = fraction(AmountOut, Fee, FeeScale)
549537 let protocolFeeAmount = fraction(feeAmount, 40, 100)
550538 let cleanAmountOut = (AmountOut - feeAmount)
551539 if ((minimum > cleanAmountOut))
552540 then throw(("amount to recieve is lower than given one: " + toString(cleanAmountOut)))
553541 else if ((10000 > AmountIn))
554542 then throw("sum to exchange is too small")
555543 else if ((0 > (AssetOutBalance - AmountOut)))
556544 then throw("contract is out of reserves")
557545 else {
558546 let newBalanceIn = (AssetInBalance + AmountIn)
559547 let newBalanceOut = (AssetOutBalance - AmountOut)
560548 if (puzzleFee)
561549 then {
562550 let cashbackAmount = protocolFeeAmount
563551 let usdnAssetId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
564552 let usdnBalance = if ((AssetIn == usdnAssetId))
565553 then newBalanceIn
566554 else if ((AssetOut == usdnAssetId))
567555 then newBalanceOut
568556 else tryGetInteger((("global_" + getAssetString(usdnAssetId)) + "_balance"))
569557 let usdnCashbackAmount = if ((AssetOut == usdnAssetId))
570558 then cashbackAmount
571559 else calculateOutAmount(cashbackAmount, AssetOut, usdnAssetId, newBalanceOut, usdnBalance)
572560 let usdnBalanceChange = if ((AssetOut != usdnAssetId))
573561 then [IntegerEntry((("global_" + toBase58String(usdnAssetId)) + "_balance"), (usdnBalance - usdnCashbackAmount))]
574562 else nil
575563 let puzzlePool = Address(base58'3PFDgzu1UtswAkCMxqqQjbTeHaX4cMab8Kh')
576564 let puzzleAssetId = base58'HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS'
577565 let puzzleCashbackAmount = match reentrantInvoke(puzzlePool, "swap", [toBase58String(puzzleAssetId), 0], [AttachedPayment(usdnAssetId, (usdnCashbackAmount / 4))]) {
578566 case x: Int =>
579567 x
580568 case _ =>
581569 0
582570 }
583571 if ((puzzleCashbackAmount == puzzleCashbackAmount))
584572 then {
585573 let stakingTopUp = reentrantInvoke(Address(base58'3PFTbywqxtFfukX3HyT881g4iW5K4QL3FAS'), "topUpReward", nil, [AttachedPayment(usdnAssetId, (usdnCashbackAmount / 2))])
586574 if ((stakingTopUp == stakingTopUp))
587575 then $Tuple2(([IntegerEntry((("global_" + assetOut) + "_balance"), (newBalanceOut + cashbackAmount)), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), ScriptTransfer(i.caller, puzzleCashbackAmount, puzzleAssetId), ScriptTransfer(referralAddress, (usdnCashbackAmount / 4), usdnAssetId), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))] ++ usdnBalanceChange), cleanAmountOut)
588576 else throw("Strict value is not equal to itself.")
589577 }
590578 else throw("Strict value is not equal to itself.")
591579 }
592580 else $Tuple2([IntegerEntry((("global_" + assetOut) + "_balance"), newBalanceOut), IntegerEntry((("global_" + getAssetString(AssetIn)) + "_balance"), newBalanceIn), ScriptTransfer(i.caller, cleanAmountOut, AssetOut), IntegerEntry("global_volume", (tryGetInteger("global_volume") + calculateUsdnValue(AssetIn, AmountIn, AssetInBalance)))], cleanAmountOut)
593581 }
594582 }
595583
596584

github/deemru/w8io/3ef1775 
73.39 ms