tx · FANvdUD69AmAbDDCwtvkxuKJzLMN9ehHWEFBEepVWrrp

3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J:  -0.04000000 Waves

2022.07.29 14:05 [2161025] smart account 3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J > SELF 0.00000000 Waves

{ "type": 13, "id": "FANvdUD69AmAbDDCwtvkxuKJzLMN9ehHWEFBEepVWrrp", "fee": 4000000, "feeAssetId": null, "timestamp": 1659092778489, "version": 1, "sender": "3MuGfNhF98CNBCfthhoJEo6SYUv7zTgkK4J", "senderPublicKey": "4DthuG3xjZV9WtZ34Y66AummdAr67wRzwWsVQL4y2bob", "proofs": [ "3Zsawxppaui4FhHAF6mjoja2BguJpHoTiyyzrR9CcVsmcnbADem6NdvdBsnrsMBJy2Mm6Z59QUduUv9yMT6pGgxq", "46yzSwutUWcA1uJLHYbMDyz4GgRoTZLoBSA5xxetV6Wa4AduCoMeoQYKBg2d1euhGphX26rtJkaKtgSPWk4epMwr", "2P4srFV7KZt66twwgKsKPWzGkme2UKyNFhmeXn6TgVh3FTk8EToU6jf44bMzVXGnGpFEdwGSF9cqW1aCPvsB1FR1" ], "script": "base64:AAIFAAAAAAAAACAIAhIHCgUICAEBCBIAEgMKAQESABIAEgMKAQgSAwoBCAAAAEYAAAAACXNlcGFyYXRvcgIAAAACX18AAAAAA1NFUAIAAAACX18AAAAABU1VTFQ2AAAAAAAAD0JAAAAAAAVNVUxUOAAAAAAABfXhAAAAAAAGTVVMVFg2CQABNgAAAAEFAAAABU1VTFQ2AAAAAAZNVUxUWDgJAAE2AAAAAQUAAAAFTVVMVDgAAAAAB01VTFRYMTgJAAE2AAAAAQAN4Lazp2QAAAAAAAAKV0FWRVNJRFNUUgIAAAAFV0FWRVMAAAAAB1dBVkVTSUQJAAJZAAAAAQUAAAAKV0FWRVNJRFNUUgAAAAAZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAAAAAAAAAAAAQAAAAAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAAAAAAAAAACAAAAABRJZHhDb250cm9sQ2ZnUnBkRGFwcAAAAAAAAAAAAwAAAAAVSWR4Q29udHJvbENmZ01hdGhEYXBwAAAAAAAAAAAEAAAAABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAAAAAAAAAAFAAAAABVJZHhDb250cm9sQ2ZnUmVzdERhcHAAAAAAAAAAAAYAAAAAHUlkeENvbnRyb2xDZmdOb2RlUmVnaXN0cnlEYXBwAAAAAAAAAAAHAAAAABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAAAAAAAAAAIAAAAABlJZHhDb250cm9sQ2ZnTWVkaWF0b3JEYXBwAAAAAAAAAAAJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACm1hbmRhdG9yeSAJAAQlAAAAAQUAAAAHYWRkcmVzcwIAAAABLgUAAAADa2V5AgAAAA8gaXMgbm90IGRlZmluZWQBAAAAEWtleUNvbnRyb2xBZGRyZXNzAAAAAAIAAAAcJXMlc19fY29uZmlnX19jb250cm9sQWRkcmVzcwEAAAANa2V5Q29udHJvbENmZwAAAAACAAAAESVzX19jb250cm9sQ29uZmlnAQAAABRyZWFkQ29udHJvbENmZ09yRmFpbAAAAAEAAAAHY29udHJvbAkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAgUAAAAHY29udHJvbAkBAAAADWtleUNvbnRyb2xDZmcAAAAABQAAAANTRVABAAAAGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAAAAAIAAAAKY29udHJvbENmZwAAAANpZHgJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQABkQAAAAIFAAAACmNvbnRyb2xDZmcFAAAAA2lkeAkAASwAAAACAgAAAC1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAAGkAAAAAQUAAAADaWR4AAAAAA9jb250cm9sQ29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAEWtleUNvbnRyb2xBZGRyZXNzAAAAAAIAAAAjM040TlM3ZDRKbzlhNkYxNExpRlVLS1lWZFVra2YyZVA0WngAAAAACmNvbnRyb2xDZmcJAQAAABRyZWFkQ29udHJvbENmZ09yRmFpbAAAAAEFAAAAD2NvbnRyb2xDb250cmFjdAAAAAAMbWF0aENvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAVSWR4Q29udHJvbENmZ01hdGhEYXBwAAAAABBuZXV0cmlub0NvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAAAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAAAAAgUAAAAKY29udHJvbENmZwUAAAAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAQAAAAxrZXlCb25kQXNzZXQAAAAAAgAAAA1ib25kX2Fzc2V0X2lkAQAAABprZXlOZXV0cmlub0NvbnRyYWN0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bW91bnQAAAAIb2xkU3RhcnQAAAAJbmV3QW1vdW50AAAACG5ld1N0YXJ0CQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5SGlzdG9yeVJlY29yZAAAAAMFAAAABHR5cGUFAAAAC3VzZXJBZGRyZXNzBQAAAAR0eElkCQEAAAATZm9ybWF0SGlzdG9yeVJlY29yZAAAAAQFAAAACW9sZEFtb3VudAUAAAAIb2xkU3RhcnQFAAAACW5ld0Ftb3VudAUAAAAIbmV3U3RhcnQBAAAAEUNsYWltSGlzdG9yeUVudHJ5AAAAAwAAAAt1c2VyQWRkcmVzcwAAAAR0eElkAAAADmNsYWltZWRSZXdhcmRzCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5SGlzdG9yeVJlY29yZAAAAAMCAAAABWNsYWltBQAAAAt1c2VyQWRkcmVzcwUAAAAEdHhJZAkBAAAAGGZvcm1hdENsYWltSGlzdG9yeVJlY29yZAAAAAIJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MFAAAADmNsYWltZWRSZXdhcmRzAQAAAAtTdGF0c1Jlc3VsdAAAAAMAAAAOdG90YWxMb2NrZWRJbmMAAAAMbG9ja0NvdW50SW5jAAAADXVzZXJzQ291bnRJbmMEAAAACmxvY2tzQ291bnQJAQAAAAxnZXRJbnRPclplcm8AAAABCQEAAAASa2V5U3RhdHNMb2Nrc0NvdW50AAAAAAQAAAAKdXNlcnNDb3VudAkBAAAADGdldEludE9yWmVybwAAAAEJAQAAABJrZXlTdGF0c1VzZXJzQ291bnQAAAAABAAAAAt0b3RhbEFtb3VudAkBAAAADGdldEludE9yWmVybwAAAAEJAQAAABdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAAAAAEAAAADnRvdGFsQW1vdW50TmV3CQAAZAAAAAIFAAAAC3RvdGFsQW1vdW50BQAAAA50b3RhbExvY2tlZEluYwkABRUAAAADCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5U3RhdHNMb2Nrc0NvdW50AAAAAAkAAGQAAAACBQAAAApsb2Nrc0NvdW50BQAAAAxsb2NrQ291bnRJbmMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJrZXlTdGF0c1VzZXJzQ291bnQAAAAACQAAZAAAAAIFAAAACnVzZXJzQ291bnQFAAAADXVzZXJzQ291bnRJbmMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAAAAAFAAAADnRvdGFsQW1vdW50TmV3BQAAAANuaWwFAAAAC3RvdGFsQW1vdW50BQAAAA50b3RhbEFtb3VudE5ldwEAAAAPTG9ja1BhcmFtc0VudHJ5AAAAAwAAAAt1c2VyQWRkcmVzcwAAAAZhbW91bnQAAAAFc3RhcnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AAAAAQUAAAALdXNlckFkZHJlc3MFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAAFc3RhcnQFAAAAA25pbAEAAAAPZ2V0UGFyYW1zT3JGYWlsAAAAAAkABRUAAAADCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAAEG5ldXRyaW5vQ29udHJhY3QJAQAAAAxrZXlCb25kQXNzZXQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAEGtleU1pbkxvY2tBbW91bnQAAAAACQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAC2tleUhhbGZMaWZlAAAAAAEAAAAMaXNBY3RpdmVVc2VyAAAAAQAAAAt1c2VyQWRkcmVzcwkAAGYAAAACCQEAAAAMZ2V0SW50T3JFbHNlAAAAAgkBAAAAFmtleUxvY2tQYXJhbVVzZXJBbW91bnQAAAABBQAAAAt1c2VyQWRkcmVzcwAAAAAAAAAAAAAAAAAAAAAAAAEAAAATZ2V0VXNlclBhcmFtc09yVW5pdAAAAAEAAAALdXNlckFkZHJlc3MDCQEAAAAMaXNBY3RpdmVVc2VyAAAAAQUAAAALdXNlckFkZHJlc3MJAAUVAAAAAwcJAQAAAAxnZXRJbnRPckZhaWwAAAABCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAC3VzZXJBZGRyZXNzCQEAAAAMZ2V0SW50T3JGYWlsAAAAAQkBAAAAFmtleUxvY2tQYXJhbVN0YXJ0QmxvY2sAAAABBQAAAAt1c2VyQWRkcmVzcwUAAAAEdW5pdAEAAAATZ2V0VXNlclBhcmFtc09yRmFpbAAAAAEAAAALdXNlckFkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAABVVzZXIgCQAEJQAAAAEFAAAAC3VzZXJBZGRyZXNzAgAAAA8gaXMgbm90IGRlZmluZWQAAAAAEnN1cHBvcnRlZEFzc2V0c1N0cgkBAAAADGdldFN0ck9yRWxzZQAAAAIJAQAAABhrZXlTdXBwb3J0ZWRSZXdhcmRBc3NldHMAAAAAAgAAAAAAAAAAE3N1cHBvcnRlZEFzc2V0c0xpc3QJAAS1AAAAAgUAAAASc3VwcG9ydGVkQXNzZXRzU3RyAgAAAAFfAQAAAApjYWxjUmV3YXJkAAAABQAAAAt1c2VyQWRkcmVzcwAAAAdhc3NldElkAAAADXN0YWtlZEFtb3VudFgAAAAOZGVwb3NpdE51bVVzZXIAAAAOZGVwb3NpdE51bUxhc3QEAAAAF3Jld2FyZFBlck5zYnRTdW1MYXN0S0VZCQEAAAAVa2V5UmV3YXJkUGVyTnNidFN1bUF0AAAAAgUAAAAOZGVwb3NpdE51bUxhc3QFAAAAB2Fzc2V0SWQEAAAACnN1bUxhc3RYMTgJAAGnAAAAAQkBAAAADGdldFN0ck9yRWxzZQAAAAIJAQAAABVrZXlSZXdhcmRQZXJOc2J0U3VtQXQAAAACBQAAAA5kZXBvc2l0TnVtTGFzdAUAAAAHYXNzZXRJZAIAAAABMAQAAAAKc3VtVXNlclgxOAkAAacAAAABCQEAAAAMZ2V0U3RyT3JFbHNlAAAAAgkBAAAAFWtleVJld2FyZFBlck5zYnRTdW1BdAAAAAIFAAAADmRlcG9zaXROdW1Vc2VyBQAAAAdhc3NldElkAgAAAAEwBAAAABFyZXdhcmREeW5hbWljUGFydAkAAaAAAAABCQABPAAAAAMJAAE4AAAAAgUAAAAKc3VtTGFzdFgxOAUAAAAKc3VtVXNlclgxOAUAAAANc3Rha2VkQW1vdW50WAUAAAAHTVVMVFgxOAQAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQkBAAAACWtleVJld2FyZAAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAAdhc3NldElkBAAAABByZXdhcmRDYWNoZWRQYXJ0CQEAAAAMZ2V0SW50T3JFbHNlAAAAAgUAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQAAAAAAAAAAAAkABRYAAAAECQAAZAAAAAIFAAAAEHJld2FyZENhY2hlZFBhcnQFAAAAEXJld2FyZER5bmFtaWNQYXJ0BQAAABByZXdhcmRDYWNoZWRQYXJ0BQAAABFyZXdhcmREeW5hbWljUGFydAUAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQEAAAANUmV3YXJkRW50cmllcwAAAAMAAAAJaXNOZXdVc2VyAAAAC3VzZXJBZGRyZXNzAAAADHN0YWtlZEFtb3VudAQAAAANc3Rha2VkQW1vdW50WAkAATYAAAABBQAAAAxzdGFrZWRBbW91bnQEAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBAAAAG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQAAAAEFAAAAC3VzZXJBZGRyZXNzBAAAAA5kZXBvc2l0TnVtVXNlcgkBAAAADGdldEludE9yRWxzZQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD//////////wQAAAAOZGVwb3NpdE51bUxhc3QJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAARa2V5RGVwb3NpdE51bUxhc3QAAAAAAP//////////CgEAAAAbZm9yRWFjaEFzc2V0Q2FjaGVVc2VyUmV3YXJkAAAAAgAAAAVhY2N1bQAAAAVhc3NldAQAAAALJHQwODQwOTg1NDQJAQAAAApjYWxjUmV3YXJkAAAABQUAAAALdXNlckFkZHJlc3MFAAAABWFzc2V0BQAAAA1zdGFrZWRBbW91bnRYBQAAAA5kZXBvc2l0TnVtVXNlcgUAAAAOZGVwb3NpdE51bUxhc3QEAAAAC3Jld2FyZFRvdGFsCAUAAAALJHQwODQwOTg1NDQAAAAC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AgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFAAAADmRlcG9zaXROdW1MYXN0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJHVuY292ZXJlZCBjb25kaXRpb246IGRlcG9zaXROdW1MYXN0PQkAAaQAAAABBQAAAA5kZXBvc2l0TnVtTGFzdAIAAAAQIGRlcG9zaXROdW1Vc2VyPQkAAaQAAAABBQAAAA5kZXBvc2l0TnVtVXNlcgEAAAAiSW5jcmVtZW50Tm90RGlzdHJpYnV0ZWRSZXdhcmRFbnRyeQAAAAIAAAADdGtuAAAACWFtb3VudEluYwQAAAAXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkJAQAAABdrZXlOb3REaXN0cmlidXRlZFJld2FyZAAAAAEFAAAAA3RrbgQAAAAUbm90RGlzdHJpYnV0ZWRSZXdhcmQJAQAAAAxnZXRJbnRPckVsc2UAAAACBQAAABdub3REaXN0cmlidXRlZFJld2FyZEtFWQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkJAABkAAAAAgUAAAAUbm90RGlzdHJpYnV0ZWRSZXdhcmQFAAAACWFtb3VudEluYwUAAAADbmlsAAAABwAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAUAAAAXbmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAATbWF0aENvbnRyYWN0QWRkcmVzcwAAAA1taW5Mb2NrQW1vdW50AAAACGhhbGZMaWZlAAAAFXN1cHBvcnRlZFJld2FyZEFzc2V0cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5TmV1dHJpbm9Db250cmFjdEFkZHJlc3MAAAAABQAAABduZXV0cmlub0NvbnRyYWN0QWRkcmVzcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWa2V5TWF0aENvbnRyYWN0QWRkcmVzcwAAAAAFAAAAE21hdGhDb250cmFjdEFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBrZXlNaW5Mb2NrQW1vdW50AAAAAAUAAAANbWluTG9ja0Ftb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAC2tleUhhbGZMaWZlAAAAAAUAAAAIaGFsZkxpZmUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwAAAAAFAAAAFXN1cHBvcnRlZFJld2FyZEFzc2V0cwUAAAADbmlsAAAAAWkBAAAABXN0YWtlAAAAAAQAAAANJHQwMTIyMTgxMjI4MAkBAAAAD2dldFBhcmFtc09yRmFpbAAAAAAEAAAAC2JvbmRBc3NldElkCAUAAAANJHQwMTIyMTgxMjI4MAAAAAJfMQQAAAANbWluTG9ja0Ftb3VudAgFAAAADSR0MDEyMjE4MTIyODAAAAACXzIEAAAACGhhbGZMaWZlCAUAAAANJHQwMTIyMTgxMjI4MAAAAAJfMwMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAVSW52YWxpZCBwYXltZW50cyBzaXplBAAAAAdwYXltZW50CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAATaW52YWxpZEFzc2V0TWVzc2FnZQkAASwAAAACCQABLAAAAAICAAAAD0ludmFsaWQgYXNzZXQuIAkAAlgAAAABBQAAAAtib25kQXNzZXRJZAIAAAAMIGlzIGV4cGVjdGVkBAAAAAdhc3NldElkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAE2ludmFsaWRBc3NldE1lc3NhZ2UDCQEAAAACIT0AAAACBQAAAAdhc3NldElkBQAAAAtib25kQXNzZXRJZAkAAAIAAAABBQAAABNpbnZhbGlkQXNzZXRNZXNzYWdlBAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADSR0MDEyODIyMTI5MjkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAABNnZXRVc2VyUGFyYW1zT3JVbml0AAAAAQUAAAALdXNlckFkZHJlc3MJAAUVAAAAAwYAAAAAAAAAAAAA//////////8EAAAACWlzTmV3VXNlcggFAAAADSR0MDEyODIyMTI5MjkAAAACXzEEAAAACmxvY2tBbW91bnQIBQAAAA0kdDAxMjgyMjEyOTI5AAAAAl8yBAAAAA9sb2NrU3RhcnRIZWlnaHQIBQAAAA0kdDAxMjgyMjEyOTI5AAAAAl8zBAAAAAxtZXJnZWRBbW91bnQDBQAAAAlpc05ld1VzZXIFAAAABmFtb3VudAkAAGQAAAACBQAAAAZhbW91bnQFAAAACmxvY2tBbW91bnQEAAAAEW1lcmdlZFN0YXJ0SGVpZ2h0AwUAAAAJaXNOZXdVc2VyBQAAAAZoZWlnaHQJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAABNtZXJnZVN0YWtlc1JFQURPTkxZCQAETAAAAAIFAAAABmFtb3VudAkABEwAAAACBQAAAAZoZWlnaHQJAARMAAAAAgUAAAAKbG9ja0Ftb3VudAkABEwAAAACBQAAAA9sb2NrU3RhcnRIZWlnaHQJAARMAAAAAgUAAAAIaGFsZkxpZmUFAAAAA25pbAUAAAADbmlsAwkAAGYAAAACBQAAAA1taW5Mb2NrQW1vdW50BQAAAAxtZXJnZWRBbW91bnQJAAACAAAAAQkAASwAAAACAgAAABNNaW4gbG9jayBhbW91bnQgaXMgCQABpAAAAAEFAAAADW1pbkxvY2tBbW91bnQEAAAADSR0MDEzMjkwMTMzOTIJAQAAAAtTdGF0c1Jlc3VsdAAAAAMFAAAABmFtb3VudAAAAAAAAAAAAQMFAAAACWlzTmV3VXNlcgAAAAAAAAAAAQAAAAAAAAAAAAQAAAAMc3RhdHNFbnRyaWVzCAUAAAANJHQwMTMyOTAxMzM5MgAAAAJfMQQAAAALdG90YWxTdGFrZWQIBQAAAA0kdDAxMzI5MDEzMzkyAAAAAl8yBAAAAA50b3RhbFN0YWtlZE5ldwgFAAAADSR0MDEzMjkwMTMzOTIAAAACXzMJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAARMAAAAAgkBAAAAEkhpc3RvcnlSZWNvcmRFbnRyeQAAAAcCAAAABXN0YWtlBQAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAKbG9ja0Ftb3VudAUAAAAPbG9ja1N0YXJ0SGVpZ2h0BQAAAAxtZXJnZWRBbW91bnQFAAAAEW1lcmdlZFN0YXJ0SGVpZ2h0BQAAAANuaWwJAQAAAA1SZXdhcmRFbnRyaWVzAAAAAwUAAAAJaXNOZXdVc2VyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAKbG9ja0Ftb3VudAkBAAAAD0xvY2tQYXJhbXNFbnRyeQAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAAAxtZXJnZWRBbW91bnQFAAAAEW1lcmdlZFN0YXJ0SGVpZ2h0BQAAAAxzdGF0c0VudHJpZXMAAAABaQEAAAAHdW5zdGFrZQAAAAEAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAACN1bnN0YWtlIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudAQAAAALdXNlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAAOdXNlckFkZHJlc3NTdHIJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MEAAAADSR0MDEzODc4MTM5NDAJAQAAAA9nZXRQYXJhbXNPckZhaWwAAAAABAAAAAtib25kQXNzZXRJZAgFAAAADSR0MDEzODc4MTM5NDAAAAACXzEEAAAADW1pbkxvY2tBbW91bnQIBQAAAA0kdDAxMzg3ODEz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V0FWRVNJRAUAAAAGTVVMVFg4BQAAAAZNVUxUWDYEAAAAB2Ftb3VudFgJAAE2AAAAAQUAAAAGYW1vdW50BAAAAAt0b3RhbFN0YWtlZAkBAAAADGdldEludE9yRWxzZQAAAAIJAQAAABdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAAAAAAAAAAAAAAAAAEAAAADHRvdGFsU3Rha2VkWAkAATYAAAABBQAAAAt0b3RhbFN0YWtlZAMJAABmAAAAAgAAAAAAAAAAAAUAAAALdG90YWxTdGFrZWQJAAACAAAAAQIAAAAbVE9ETzogY2FzZSBpcyBub3Qgc3VwcG9ydGVkAwkAAAAAAAACBQAAAAt0b3RhbFN0YWtlZAAAAAAAAAAAAAkBAAAAIkluY3JlbWVudE5vdERpc3RyaWJ1dGVkUmV3YXJkRW50cnkAAAACBQAAAA1wbXRBc3NldElkU3RyBQAAAAZhbW91bnQEAAAAEHJld2FyZFBlck5zYnRYMTgJAAE8AAAAAwUAAAAHYW1vdW50WAUAAAAHTVVMVFgxOAUAAAAMdG90YWxTdGFrZWRYBAAAABFkZXBvc2l0TnVtTGFzdEtFWQkBAAAAEWtleURlcG9zaXROdW1MYXN0AAAAAAQAAAAOZGVwb3NpdE51bUxhc3QJAQAAAAxnZXRJbnRPckVsc2UAAAACBQAAABFkZXBvc2l0TnVtTGFzdEtFWQD//////////wQAAAANZGVwb3NpdE51bU5ldwkAAGQAAAACBQAAAA5kZXBvc2l0TnVtTGFzdAAAAAAAAAAAAQMJAQAAAAEhAAAAAQkBAAAACGNvbnRhaW5zAAAAAgUAAAASc3VwcG9ydGVkQXNzZXRzU3RyBQAAAA1wbXRBc3NldElkU3RyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACBQAAABJzdXBwb3J0ZWRBc3NldHNTdHICAAAAESBkb2Vzbid0IGNvbnRhaW4gBQAAAA1wbXRBc3NldElkU3RyCgEAAAAXcmVmcmVzaFJld2FyZFBlck5zYnRTVU0AAAACAAAABWFjY3VtAAAACW5leHRBc3NldAQAAAAWcmV3YXJkUGVyTnNidFN1bU5ld0tFWQkBAAAAFWtleVJld2FyZFBlck5zYnRTdW1BdAAAAAIFAAAADWRlcG9zaXROdW1OZXcFAAAACW5leHRBc3NldAQAAAAKc3VtTGFzdFN0cgkBAAAADGdldFN0ck9yRWxzZQAAAAIJAQAAABVrZXlSZXdhcmRQZXJOc2J0U3VtQXQAAAACBQAAAA5kZXBvc2l0TnVtTGFzdAUAAAAJbmV4dEFzc2V0AgAAAAEwCQAETQAAAAIFAAAABWFjY3VtAwkAAAAAAAACBQAAAAluZXh0QXNzZXQFAAAADXBtdEFzc2V0SWRTdHIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFnJld2FyZFBlck5zYnRTdW1OZXdLRVkJAAGmAAAAAQkAATcAAAACCQABpwAAAAEFAAAACnN1bUxhc3RTdHIFAAAAEHJld2FyZFBlck5zYnRYMTgJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAFnJld2FyZFBlck5zYnRTdW1OZXdLRVkFAAAACnN1bUxhc3RTdHIJAARNAAAAAgoAAAAAAiRsBQAAABNzdXBwb3J0ZWRBc3NldHNMaXN0CgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAUAAAADbmlsCgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAXcmVmcmVzaFJld2FyZFBlck5zYnRTVU0AAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARZGVwb3NpdE51bUxhc3RLRVkFAAAADWRlcG9zaXROdW1OZXcAAAABaQEAAAAMY2xhaW1SZXdhcmRzAAAAAAQAAAALdXNlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAAOdXNlckFkZHJlc3NTdHIJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MDCQAAZgAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAAZcGF5bWVudHMgYXJlIG5vdCBhY2NlcHRlZAQAAAANJHQwMTY3MzIxNjgzNwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAE2dldFVzZXJQYXJhbXNPclVuaXQAAAABBQAAAAt1c2VyQWRkcmVzcwkABRUAAAADBgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAJaXNOZXdVc2VyCAUAAAANJHQwMTY3MzIxNjgzNwAAAAJfMQQAAAAMc3Rha2VkQW1vdW50CAUAAAANJHQwMTY3MzIxNjgzNwAAAAJfMgQAAAAMc3Rha2luZ1N0YXJ0CAUAAAANJHQwMTY3MzIxNjgzNwAAAAJfMwQAAAANc3Rha2VkQW1vdW50WAkAATYAAAABBQAAAAxzdGFrZWRBbW91bnQEAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBAAAAG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA5kZXBvc2l0TnVtVXNlcgkBAAAADGdldEludE9yRWxzZQAAAAIFAAAAG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD//////////wQAAAAOZGVwb3NpdE51bUxhc3QJAQAAAAxnZXRJbnRPckVsc2UAAAACCQEAAAARa2V5RGVwb3NpdE51bUxhc3QAAAAAAP//////////CgEAAAAfZm9yRWFjaEFzc2V0Q2FsY1VuY2xhaW1lZFJld2FyZAAAAAIAAAAFYWNjdW0AAAAFYXNzZXQEAAAADSR0MDE3MjA4MTczNDYJAQAAAApjYWxjUmV3YXJkAAAABQUAAAAOdXNlckFkZHJlc3NTdHIF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AAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgQAAAALdXNlckFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA0kdDAxODcxNTE4ODIwCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAATZ2V0VXNlclBhcmFtc09yVW5pdAAAAAEFAAAAC3VzZXJBZGRyZXNzCQAFFQAAAAMGAAAAAAAAAAAAAAAAAAAAAAAABAAAAAlpc05ld1VzZXIIBQAAAA0kdDAxODcxNTE4ODIwAAAAAl8xBAAAAAxzdGFrZWRBbW91bnQIBQAAAA0kdDAxODcxNTE4ODIwAAAAAl8yBAAAAAxzdGFraW5nU3RhcnQIBQAAAA0kdDAxODcxNTE4ODIwAAAAAl8zBAAAAA1zdGFrZWRBbW91bnRYCQABNgAAAAEFAAAADHN0YWtlZEFtb3VudAQAAAAbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZCQEAAAAba2V5VXNlclJld2FyZEZyb21EZXBvc2l0TnVtAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIEAAAADmRlcG9zaXROdW1Vc2VyCQEAAAAMZ2V0SW50T3JFbHNlAAAAAgUAAAAbdXNlclJld2FyZEZyb21EZXBvc2l0TnVtS0VZAP//////////BAAAAA5kZXBvc2l0TnVtTGFzdAkBAAAADGdldEludE9yRWxzZQAAAAIJAQAAABFrZXlEZXBvc2l0TnVtTGFzdAAAAAAA//////////8KAQAAAB9mb3JFYWNoQXNzZXRDYWxjVW5jbGFpbWVkUmV3YXJkAAAAAgAAAAVhY2N1bQAAAAVhc3NldAQAAAANJHQwMTkxNjYxOTMwNAkBAAAACmNhbGNSZXdhcmQAAAAFBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAFYXNzZXQFAAAADXN0YWtlZEFtb3VudFgFAAAADmRlcG9zaXROdW1Vc2VyBQAAAA5kZXBvc2l0TnVtTGFzdAQAAAALcmV3YXJkVG90YWwIBQAAAA0kdDAxOTE2NjE5MzA0AAAAAl8xBAAAAAZjYWNoZWQIBQAAAA0kdDAxOTE2NjE5MzA0AAAAAl8yBAAAAAdkeW5hbWljCAUAAAANJHQwMTkxNjYxOTMwNAAAAAJfMwQAAAATcmV3YXJkQ2FjaGVkUGFydEtFWQgFAAAADSR0MDE5MTY2MTkzMDQAAAACXzQEAAAAB2NsYWltZWQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAACmtleUNsYWltZWQAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAFYXNzZXQAAAAAAAAAAAAJAAEsAAAAAgkAASwAAAACBQAAAAVhY2N1bQkABLkAAAACCQAETAAAAAIFAAAABWFzc2V0CQAETAAAAAIJAAGkAAAAAQUAAAALcmV3YXJkVG90YWwJAARMAAAAAgkAAaQAAAABBQAAAAdjbGFpbWVkBQAAAANuaWwCAAAAAToCAAAAAV8KAAAAAAIkbAUAAAATc3VwcG9ydGVkQXNzZXRzTGlzdAoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzACAAAAAAoBAAAABSRmMF8xAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAAH2ZvckVhY2hBc3NldENhbGNVbmNsYWltZWRSZXdhcmQAAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAUkZjBfMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKCQAFFAAAAAIFAAAAA25pbAkBAAAACWRyb3BSaWdodAAAAAIFAAAAEnVuY2xhaW1lZFJld2FyZFN0cgAAAAAAAAAAAQAAAAFpAQAAABZuc2J0U3Rha2luZ1NZU1JFQURPTkxZAAAAAQAAAA51c2VyQWRkcmVzc1N0cgQAAAAMdG90YWxOc2J0QW10CQEAAAAMZ2V0SW50T3JFbHNlAAAAAgkBAAAAF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50AAAAAAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAOdXNlckFkZHJlc3NTdHICAAAAAAkABRQAAAACBQAAAANuaWwJAARMAAAAAgAAAAAAAAAAAAkABEwAAAACBQAAAAx0b3RhbE5zYnRBbXQJAARMAAAAAgAAAAAAAAAAAAUAAAADbmlsBAAAAAt1c2VyQWRkcmVzcwkBAAAAD3RvQWRkcmVzc09yRmFpbAAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA0kdDAxOTk2OTIwMDczCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAATZ2V0VXNlclBhcmFtc09yVW5pdAAAAAEFAAAAC3VzZXJBZGRyZXNzCQAFFQAAAAMGAAAAAAAAAAAAAAAAAAAAAAAABAAAAAlpc05ld1VzZXIIBQAAAA0kdDAxOTk2OTIwMDczAAAAAl8xBAAAAAt1c2VyTnNidEFtdAgFAAAADSR0MDE5OTY5MjAwNzMAAAACXzIEAAAADHN0YWtpbmdTdGFydAgFAAAADSR0MDE5OTY5MjAwNzMAAAACXzMJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIFAAAAC3VzZXJOc2J0QW10CQAETAAAAAIFAAAADHRvdGFsTnNidEFtdAkABEwAAAACBQAAAAxzdGFraW5nU3RhcnQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAE3B1YktleUFkbWluc0xpc3RTdHIJAAS5AAAAAgkABEwAAAACAgAAACxFeHRFRUsxOW5tS2o5bUNwbld5dkVFSkZZQVRMTWNWRU12b2hoVUhreUhObQkABEwAAAACAgAAACxFdjVweTVGZkJRWDljWnBZS25mUXJUQjQ5QnlmOFFtcFpXZURWUmltNHlWNwkABEwAAAACAgAAACxEVXV1TGpYdTk4bkJ3WmM3ZnF3Q1RqdEEzbm5Sd2dUYmtNU3I1U1UyTm1EUgkABEwAAAACAgAAACxEVXV1TGpYdTk4bkJ3WmM3ZnF3Q1RqdEEzbm5Sd2dUYmtNU3I1U1UyTm1EUgUAAAADbmlsBQAAAANTRVAEAAAAEHB1YktleUFkbWluc0xpc3QJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAA9jb250cm9sQ29udHJhY3QCAAAADCVzX19tdWx0aXNpZwUAAAATcHViS2V5QWRtaW5zTGlzdFN0cgUAAAADU0VQBAAAAAVjb3VudAkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAABCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAQAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAACCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAgAAAAAAAAAAAQAAAAAAAAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAADCQACWQAAAAEJAAGRAAAAAgUAAAAQcHViS2V5QWRtaW5zTGlzdAAAAAAAAAAAAwAAAAAAAAAAAgAAAAAAAAAAAAkAAGcAAAACBQAAAAVjb3VudAAAAAAAAAAAAwsBW4E=", "chainId": 84, "height": 2161025, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5WiKyA1KQfvsWUt4BFKaDJfAKLpeyhebAVsEceEqi5FU Next: 91K4ci1qHUfjVPBT8ESPr26haHhYEcQeLJLc4uESEbzJ Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
6-let b = 1000000
6+let b = "__"
77
8-let c = 100000000
8+let c = 1000000
99
10-let d = toBigInt(b)
10+let d = 100000000
1111
1212 let e = toBigInt(c)
1313
14-let f = toBigInt(1000000000000000000)
14+let f = toBigInt(d)
1515
16-let g = "WAVES"
16+let g = toBigInt(1000000000000000000)
1717
18-let h = fromBase58String(g)
18+let h = "WAVES"
1919
20-func i () = "bond_asset_id"
20+let i = fromBase58String(h)
21+
22+let j = 1
23+
24+let k = 2
25+
26+let l = 3
27+
28+let m = 4
29+
30+let n = 5
31+
32+let o = 6
33+
34+let p = 7
35+
36+let q = 8
37+
38+let r = 9
39+
40+func s (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
2141
2242
23-func j () = "auction_contract"
43+func v () = "%s%s__config__controlAddress"
2444
2545
26-func k () = "%s__neutrinoContractAddress"
46+func w () = "%s__controlConfig"
2747
2848
29-func l () = "%s__mathContract"
49+func x (y) = split(s(y, w()), b)
3050
3151
32-func m () = "%s__minLockAmount"
52+func z (A,B) = valueOrErrorMessage(addressFromString(A[B]), ("Control cfg doesn't contain address at index " + toString(B)))
3353
3454
35-func n () = "%s__halfLife"
55+let C = addressFromStringValue(valueOrElse(getString(this, v()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
56+
57+let A = x(C)
58+
59+let D = z(A, m)
60+
61+let E = z(A, j)
62+
63+let F = z(A, k)
64+
65+func G () = "bond_asset_id"
3666
3767
38-func o (p) = makeString(["%s%s%s", "paramByUser", toString(p), "amount"], a)
68+func H () = "%s__neutrinoContractAddress"
3969
4070
41-func q (p) = makeString(["%s%s%s", "paramByUser", toString(p), "start"], a)
71+func I () = "%s__mathContract"
4272
4373
44-func r (s,p,t) = makeString(["%s%s%s%s", "history", s, toString(p), toBase58String(t)], a)
74+func J () = "%s__minLockAmount"
4575
4676
47-func u () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
77+func K () = "%s__halfLife"
4878
4979
50-func v () = makeString(["%s%s", "stats", "locksCount"], a)
80+func L (M) = makeString(["%s%s%s", "paramByUser", toString(M), "amount"], a)
5181
5282
53-func w () = makeString(["%s%s", "stats", "activeUsersCount"], a)
83+func N (M) = makeString(["%s%s%s", "paramByUser", toString(M), "start"], a)
5484
5585
56-func x () = "%s__nextPeriod"
86+func O (P,M,Q) = makeString(["%s%s%s%s", "history", P, toString(M), toBase58String(Q)], a)
5787
5888
59-func y () = "supportedRewardAssets"
89+func R () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
6090
6191
62-func z () = makeString(["%s%s%s", "dep", "lastNum"], a)
92+func S () = makeString(["%s%s", "stats", "locksCount"], a)
6393
6494
65-func A (p) = makeString(["%s%s%s", "userRwdFromDepNum", p], a)
95+func T () = makeString(["%s%s", "stats", "activeUsersCount"], a)
6696
6797
68-func B (C,D) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(C), D], a)
98+func U () = "%s__nextPeriod"
6999
70100
71-func E (p,D) = makeString(["%s%s%s", "rwd", p, D], a)
101+func V () = "supportedRewardAssets"
72102
73103
74-func F (p,D) = makeString(["%s%s%s", "clm", p, D], a)
104+func W () = makeString(["%s%s%s", "dep", "lastNum"], a)
75105
76106
77-func G (D) = makeString(["%s%s", "notDistributed", D], a)
107+func X (M) = makeString(["%s%s%s", "userRwdFromDepNum", M], a)
78108
79109
80-func H (I,J) = fraction(toBigInt(I), f, J)
110+func Y (Z,aa) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(Z), aa], a)
81111
82112
83-func K (L) = valueOrElse(getInteger(this, L), 0)
113+func ab (M,aa) = makeString(["%s%s%s", "rwd", M, aa], a)
84114
85115
86-func M (L,N) = valueOrElse(getInteger(this, L), N)
116+func ac (M,aa) = makeString(["%s%s%s", "clm", M, aa], a)
87117
88118
89-func O (L) = valueOrErrorMessage(getInteger(this, L), (("Mandatory this." + L) + " is not defined"))
119+func ad (aa) = makeString(["%s%s", "notDistributed", aa], a)
90120
91121
92-func P (L,N) = valueOrElse(getString(this, L), N)
122+func ae (af,ag) = fraction(toBigInt(af), g, ag)
93123
94124
95-func Q (L) = valueOrErrorMessage(getString(this, L), (("Mandatory this." + L) + " is not defined"))
125+func ah (u) = valueOrElse(getInteger(this, u), 0)
96126
97127
98-func R (S) = valueOrErrorMessage(addressFromString(S), ("couldn't parse passed addressStr=" + S))
128+func ai (u,aj) = valueOrElse(getInteger(this, u), aj)
99129
100130
101-func T (U) = if ((U == g))
102- then unit
103- else fromBase58String(U)
131+func ak (u) = valueOrErrorMessage(getInteger(this, u), (("Mandatory this." + u) + " is not defined"))
104132
105133
106-func V (W) = {
107- let X = W
108- if ($isInstanceOf(X, "Int"))
134+func al (u,aj) = valueOrElse(getString(this, u), aj)
135+
136+
137+func am (an) = valueOrErrorMessage(addressFromString(an), ("couldn't parse passed addressStr=" + an))
138+
139+
140+func ao (ap) = if ((ap == h))
141+ then unit
142+ else fromBase58String(ap)
143+
144+
145+func aq (ar) = {
146+ let as = ar
147+ if ($isInstanceOf(as, "Int"))
109148 then {
110- let Y = X
111- Y
149+ let at = as
150+ at
112151 }
113152 else throw("fail to cast into Int")
114153 }
115154
116155
117-func Z (aa,ab,ac,ad) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aa), toString(ab), toString(ac), toString(ad)], a)
156+func au (av,aw,ax,ay) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(av), toString(aw), toString(ax), toString(ay)], a)
118157
119158
120-func ae (af,ag) = makeString(["%s%d%d%s", af, toString(lastBlock.height), toString(lastBlock.timestamp), ag], a)
159+func az (aA,aB) = makeString(["%s%d%d%s", aA, toString(lastBlock.height), toString(lastBlock.timestamp), aB], a)
121160
122161
123-func ah (s,p,t,aa,ab,ac,ad) = StringEntry(r(s, p, t), Z(aa, ab, ac, ad))
162+func aC (P,M,Q,av,aw,ax,ay) = StringEntry(O(P, M, Q), au(av, aw, ax, ay))
124163
125164
126-func ai (p,t,ag) = StringEntry(r("claim", p, t), ae(toString(p), ag))
165+func aD (M,Q,aB) = StringEntry(O("claim", M, Q), az(toString(M), aB))
127166
128167
129-func aj (ak,al,am) = {
130- let an = K(v())
131- let ao = K(w())
132- let ap = K(u())
133- let aq = (ap + ak)
134- $Tuple3([IntegerEntry(v(), (an + al)), IntegerEntry(w(), (ao + am)), IntegerEntry(u(), aq)], ap, aq)
168+func aE (aF,aG,aH) = {
169+ let aI = ah(S())
170+ let aJ = ah(T())
171+ let aK = ah(R())
172+ let aL = (aK + aF)
173+ $Tuple3([IntegerEntry(S(), (aI + aG)), IntegerEntry(T(), (aJ + aH)), IntegerEntry(R(), aL)], aK, aL)
135174 }
136175
137176
138-func ar (p,as,at) = [IntegerEntry(o(p), as), IntegerEntry(q(p), at)]
177+func aM (M,aN,aO) = [IntegerEntry(L(M), aN), IntegerEntry(N(M), aO)]
139178
140179
141-func au () = {
142- let av = addressFromStringValue(Q(k()))
143- $Tuple4(fromBase58String(getStringValue(av, j())), fromBase58String(getStringValue(av, i())), O(m()), O(n()))
180+func aP () = $Tuple3(fromBase58String(getStringValue(E, G())), ak(J()), ak(K()))
181+
182+
183+func aQ (M) = (ai(L(M), 0) > 0)
184+
185+
186+func aR (M) = if (aQ(M))
187+ then $Tuple3(false, ak(L(M)), ak(N(M)))
188+ else unit
189+
190+
191+func aS (M) = valueOrErrorMessage(aR(M), (("User " + toString(M)) + " is not defined"))
192+
193+
194+let aT = al(V(), "")
195+
196+let aU = split(aT, "_")
197+
198+func aV (M,aW,aX,aY,aZ) = {
199+ let ba = Y(aZ, aW)
200+ let bb = parseBigIntValue(al(Y(aZ, aW), "0"))
201+ let bc = parseBigIntValue(al(Y(aY, aW), "0"))
202+ let bd = toInt(fraction((bb - bc), aX, g))
203+ let be = ab(M, aW)
204+ let bf = ai(be, 0)
205+ $Tuple4((bf + bd), bf, bd, be)
144206 }
145207
146208
147-func aw (p) = (M(o(p), 0) > 0)
209+func bg (bh,M,bi) = {
210+ let aX = toBigInt(bi)
211+ let bj = X(M)
212+ let aY = ai(bj, -1)
213+ let aZ = ai(W(), -1)
214+ func bk (bl,bm) = {
215+ let bn = aV(M, bm, aX, aY, aZ)
216+ let bo = bn._1
217+ let bp = bn._2
218+ let bq = bn._3
219+ let be = bn._4
220+ (bl :+ IntegerEntry(be, bo))
221+ }
148222
223+ if (if ((aZ == -1))
224+ then (aY == -1)
225+ else false)
226+ then nil
227+ else if (if ((aZ == -1))
228+ then (aY > -1)
229+ else false)
230+ then throw("invalid depositNumLast and depositNumUser state")
231+ else if (if ((aZ > -1))
232+ then (aY == -1)
233+ else false)
234+ then if (bh)
235+ then [IntegerEntry(bj, aZ)]
236+ else ({
237+ let br = aU
238+ let bs = size(br)
239+ let bt = nil
240+ func bu (bv,bw) = if ((bw >= bs))
241+ then bv
242+ else bk(bv, br[bw])
149243
150-func ax (p) = if (aw(p))
151- then $Tuple3(false, O(o(p)), O(q(p)))
152- else unit
244+ func bx (bv,bw) = if ((bw >= bs))
245+ then bv
246+ else throw("List size exceeds 10")
153247
248+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
249+ } :+ IntegerEntry(bj, aZ))
250+ else if (if ((aZ > -1))
251+ then (aY > -1)
252+ else false)
253+ then if (bh)
254+ then [IntegerEntry(bj, aZ)]
255+ else ({
256+ let br = aU
257+ let bs = size(br)
258+ let bt = nil
259+ func bu (bv,bw) = if ((bw >= bs))
260+ then bv
261+ else bk(bv, br[bw])
154262
155-func ay (p) = valueOrErrorMessage(ax(p), (("User " + toString(p)) + " is not defined"))
263+ func bx (bv,bw) = if ((bw >= bs))
264+ then bv
265+ else throw("List size exceeds 10")
156266
157-
158-let az = P(y(), "")
159-
160-let aA = split(az, "_")
161-
162-func aB (p,aC,aD,aE,aF) = {
163- let aG = B(aF, aC)
164- let aH = parseBigIntValue(P(B(aF, aC), "0"))
165- let aI = parseBigIntValue(P(B(aE, aC), "0"))
166- let aJ = toInt(fraction((aH - aI), aD, f))
167- let aK = E(p, aC)
168- let aL = M(aK, 0)
169- $Tuple4((aL + aJ), aL, aJ, aK)
267+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
268+ } :+ IntegerEntry(bj, aZ))
269+ else throw(((("uncovered condition: depositNumLast=" + toString(aZ)) + " depositNumUser=") + toString(aY)))
170270 }
171271
172272
173-func aM (aN,p,aO) = {
174- let aD = toBigInt(aO)
175- let aP = A(p)
176- let aE = M(aP, -1)
177- let aF = M(z(), -1)
178- func aQ (aR,aS) = {
179- let aT = aB(p, aS, aD, aE, aF)
180- let aU = aT._1
181- let aV = aT._2
182- let aW = aT._3
183- let aK = aT._4
184- (aR :+ IntegerEntry(aK, aU))
185- }
186-
187- if (if ((aF == -1))
188- then (aE == -1)
189- else false)
190- then nil
191- else if (if ((aF == -1))
192- then (aE > -1)
193- else false)
194- then throw("invalid depositNumLast and depositNumUser state")
195- else if (if ((aF > -1))
196- then (aE == -1)
197- else false)
198- then if (aN)
199- then [IntegerEntry(aP, aF)]
200- else ({
201- let aX = aA
202- let aY = size(aX)
203- let aZ = nil
204- func ba (bb,bc) = if ((bc >= aY))
205- then bb
206- else aQ(bb, aX[bc])
207-
208- func bd (bb,bc) = if ((bc >= aY))
209- then bb
210- else throw("List size exceeds 10")
211-
212- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
213- } :+ IntegerEntry(aP, aF))
214- else if (if ((aF > -1))
215- then (aE > -1)
216- else false)
217- then if (aN)
218- then [IntegerEntry(aP, aF)]
219- else ({
220- let aX = aA
221- let aY = size(aX)
222- let aZ = nil
223- func ba (bb,bc) = if ((bc >= aY))
224- then bb
225- else aQ(bb, aX[bc])
226-
227- func bd (bb,bc) = if ((bc >= aY))
228- then bb
229- else throw("List size exceeds 10")
230-
231- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232- } :+ IntegerEntry(aP, aF))
233- else throw(((("uncovered condition: depositNumLast=" + toString(aF)) + " depositNumUser=") + toString(aE)))
273+func by (aa,bz) = {
274+ let bA = ad(aa)
275+ let bB = ai(bA, 0)
276+[IntegerEntry(bA, (bB + bz))]
234277 }
235278
236279
237-func be (D,bf) = {
238- let bg = G(D)
239- let bh = M(bg, 0)
240-[IntegerEntry(bg, (bh + bf))]
241- }
242-
243-
244-@Callable(bi)
245-func constructor (bj,bk,bl,bm,bn) = if ((bi.caller != this))
280+@Callable(bC)
281+func constructor (bD,bE,bF,bG,bH) = if ((bC.caller != this))
246282 then throw("Permission denied")
247- else [StringEntry(k(), bj), StringEntry(l(), bk), IntegerEntry(m(), bl), IntegerEntry(n(), bm), StringEntry(y(), bn)]
283+ else [StringEntry(H(), bD), StringEntry(I(), bE), IntegerEntry(J(), bF), IntegerEntry(K(), bG), StringEntry(V(), bH)]
248284
249285
250286
251-@Callable(bi)
287+@Callable(bC)
252288 func stake () = {
253- let bo = au()
254- let bp = bo._1
255- let bq = bo._2
256- let bl = bo._3
257- let bm = bo._4
258- if ((size(bi.payments) != 1))
289+ let bI = aP()
290+ let bJ = bI._1
291+ let bF = bI._2
292+ let bG = bI._3
293+ if ((size(bC.payments) != 1))
259294 then throw("Invalid payments size")
260295 else {
261- let br = bi.payments[0]
262- let as = br.amount
263- let bs = (("Invalid asset. " + toBase58String(bq)) + " is expected")
264- let aC = valueOrErrorMessage(br.assetId, bs)
265- if ((aC != bq))
266- then throw(bs)
296+ let bK = bC.payments[0]
297+ let aN = bK.amount
298+ let bL = (("Invalid asset. " + toBase58String(bJ)) + " is expected")
299+ let aW = valueOrErrorMessage(bK.assetId, bL)
300+ if ((aW != bJ))
301+ then throw(bL)
267302 else {
268- let p = bi.caller
269- let bt = toString(bi.caller)
270- let bu = valueOrElse(ax(p), $Tuple3(true, 0, -1))
271- let aN = bu._1
272- let bv = bu._2
273- let bw = bu._3
274- let bx = if (aN)
275- then as
276- else (as + bv)
277- let by = if (aN)
303+ let M = bC.caller
304+ let bM = toString(bC.caller)
305+ let bN = valueOrElse(aR(M), $Tuple3(true, 0, -1))
306+ let bh = bN._1
307+ let bO = bN._2
308+ let bP = bN._3
309+ let bQ = if (bh)
310+ then aN
311+ else (aN + bO)
312+ let bR = if (bh)
278313 then height
314+ else aq(invoke(D, "mergeStakesREADONLY", [aN, height, bO, bP, bG], nil))
315+ if ((bF > bQ))
316+ then throw(("Min lock amount is " + toString(bF)))
279317 else {
280- let bz = addressFromStringValue(Q(l()))
281- V(invoke(bz, "mergeStakesREADONLY", [as, height, bv, bw, bm], nil))
282- }
283- if ((bl > bx))
284- then throw(("Min lock amount is " + toString(bl)))
285- else {
286- let bA = aj(as, 1, if (aN)
318+ let bS = aE(aN, 1, if (bh)
287319 then 1
288320 else 0)
289- let bB = bA._1
290- let bC = bA._2
291- let bD = bA._3
292- ((([ah("stake", p, bi.transactionId, bv, bw, bx, by)] ++ aM(aN, bt, bv)) ++ ar(p, bx, by)) ++ bB)
321+ let bT = bS._1
322+ let bU = bS._2
323+ let bV = bS._3
324+ ((([aC("stake", M, bC.transactionId, bO, bP, bQ, bR)] ++ bg(bh, bM, bO)) ++ aM(M, bQ, bR)) ++ bT)
293325 }
294326 }
295327 }
297329
298330
299331
300-@Callable(bi)
301-func unstake (as) = if ((size(bi.payments) != 0))
332+@Callable(bC)
333+func unstake (aN) = if ((size(bC.payments) != 0))
302334 then throw("unstake doesn't require any payment")
303335 else {
304- let p = bi.caller
305- let bt = toString(p)
306- let bE = au()
307- let bF = bE._1
308- let bq = bE._2
309- let bl = bE._3
310- let bm = bE._4
311- let bG = ay(p)
312- let aN = bG._1
313- let bv = bG._2
314- let bH = bG._3
315- if ((0 >= bv))
336+ let M = bC.caller
337+ let bM = toString(M)
338+ let bW = aP()
339+ let bJ = bW._1
340+ let bF = bW._2
341+ let bG = bW._3
342+ let bX = aS(M)
343+ let bh = bX._1
344+ let bO = bX._2
345+ let bY = bX._3
346+ if ((0 >= bO))
316347 then throw("Nothing to unstake")
317- else if ((as > bv))
318- then throw(((("Requested " + toString(as)) + ", but staked only ") + toString(bv)))
348+ else if ((aN > bO))
349+ then throw(((("Requested " + toString(aN)) + ", but staked only ") + toString(bO)))
319350 else {
320- let bz = addressFromStringValue(Q(l()))
321- let bI = V(invoke(bz, "getUnstakeComissionAmountREADONLY", [as, bH, bm], nil))
322- let bJ = aj(-(as), if ((as == bv))
351+ let bZ = aq(invoke(D, "getUnstakeComissionAmountREADONLY", [aN, bY, bG], nil))
352+ let ca = aE(-(aN), if ((aN == bO))
323353 then -1
324- else 0, if ((as == bv))
354+ else 0, if ((aN == bO))
325355 then -1
326356 else 0)
327- let bB = bJ._1
328- let bC = bJ._2
329- let bD = bJ._3
330- ((([ScriptTransfer(p, (as - bI), bq), ScriptTransfer(Address(bF), bI, bq), ah("unstake", p, bi.transactionId, bv, bH, (bv - as), bH)] ++ aM(false, bt, bv)) ++ ar(p, (bv - as), bH)) ++ bB)
357+ let bT = ca._1
358+ let bU = ca._2
359+ let bV = ca._3
360+ ((([ScriptTransfer(M, (aN - bZ), bJ), ScriptTransfer(F, bZ, bJ), aC("unstake", M, bC.transactionId, bO, bY, (bO - aN), bY)] ++ bg(false, bM, bO)) ++ aM(M, (bO - aN), bY)) ++ bT)
331361 }
332362 }
333363
334364
335365
336-@Callable(bi)
337-func deposit () = if ((size(bi.payments) != 1))
366+@Callable(bC)
367+func deposit () = if ((size(bC.payments) != 1))
338368 then throw("exact 1 payment is allowed only")
339369 else {
340- let bK = bi.payments[0]
341- let as = bK.amount
342- let bL = valueOrElse(bK.assetId, h)
343- let bM = toBase58String(bL)
344- let bN = if ((bL == h))
345- then e
346- else d
347- let bO = toBigInt(as)
348- let bC = M(u(), 0)
349- let bP = toBigInt(bC)
350- if ((0 > bC))
370+ let cb = bC.payments[0]
371+ let aN = cb.amount
372+ let cc = valueOrElse(cb.assetId, i)
373+ let cd = toBase58String(cc)
374+ let ce = if ((cc == i))
375+ then f
376+ else e
377+ let cf = toBigInt(aN)
378+ let bU = ai(R(), 0)
379+ let cg = toBigInt(bU)
380+ if ((0 > bU))
351381 then throw("TODO: case is not supported")
352- else if ((bC == 0))
353- then be(bM, as)
382+ else if ((bU == 0))
383+ then by(cd, aN)
354384 else {
355- let bQ = fraction(bO, f, bP)
356- let bR = z()
357- let aF = M(bR, -1)
358- let bS = (aF + 1)
359- if (!(contains(az, bM)))
360- then throw(((az + " doesn't contain ") + bM))
385+ let ch = fraction(cf, g, cg)
386+ let ci = W()
387+ let aZ = ai(ci, -1)
388+ let cj = (aZ + 1)
389+ if (!(contains(aT, cd)))
390+ then throw(((aT + " doesn't contain ") + cd))
361391 else {
362- func bT (aR,bU) = {
363- let bV = B(bS, bU)
364- let bW = P(B(aF, bU), "0")
365- (aR :+ (if ((bU == bM))
366- then StringEntry(bV, toString((parseBigIntValue(bW) + bQ)))
367- else StringEntry(bV, bW)))
392+ func ck (bl,cl) = {
393+ let cm = Y(cj, cl)
394+ let cn = al(Y(aZ, cl), "0")
395+ (bl :+ (if ((cl == cd))
396+ then StringEntry(cm, toString((parseBigIntValue(cn) + ch)))
397+ else StringEntry(cm, cn)))
368398 }
369399
370400 ({
371- let aX = aA
372- let aY = size(aX)
373- let aZ = nil
374- func ba (bb,bc) = if ((bc >= aY))
375- then bb
376- else bT(bb, aX[bc])
401+ let br = aU
402+ let bs = size(br)
403+ let bt = nil
404+ func bu (bv,bw) = if ((bw >= bs))
405+ then bv
406+ else ck(bv, br[bw])
377407
378- func bd (bb,bc) = if ((bc >= aY))
379- then bb
408+ func bx (bv,bw) = if ((bw >= bs))
409+ then bv
380410 else throw("List size exceeds 10")
381411
382- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
383- } :+ IntegerEntry(bR, bS))
412+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
413+ } :+ IntegerEntry(ci, cj))
384414 }
385415 }
386416 }
387417
388418
389419
390-@Callable(bi)
420+@Callable(bC)
391421 func claimRewards () = {
392- let p = bi.caller
393- let bt = toString(p)
394- if ((size(bi.payments) > 0))
422+ let M = bC.caller
423+ let bM = toString(M)
424+ if ((size(bC.payments) > 0))
395425 then throw("payments are not accepted")
396426 else {
397- let bX = valueOrElse(ax(p), $Tuple3(true, 0, 0))
398- let aN = bX._1
399- let aO = bX._2
400- let bY = bX._3
401- let aD = toBigInt(aO)
402- let aP = A(bt)
403- let aE = M(aP, -1)
404- let aF = M(z(), -1)
405- func bZ (aR,aS) = {
406- let ca = aB(bt, aS, aD, aE, aF)
407- let aU = ca._1
408- let aV = ca._2
409- let aW = ca._3
410- let aK = ca._4
411- let cb = F(bt, aS)
412- let cc = aR
413- let cd = cc._1
414- let ce = cc._2
415- let cf = makeString([aS, toString(aU)], ":")
416- let cg = makeString([ce, cf], "_")
417- if ((0 >= aU))
418- then $Tuple2(cd, cg)
419- else $Tuple2((((cd :+ ScriptTransfer(p, aU, T(aS))) :+ IntegerEntry(cb, (valueOrElse(getInteger(cb), 0) + aU))) :+ IntegerEntry(aK, 0)), cg)
427+ let co = valueOrElse(aR(M), $Tuple3(true, 0, 0))
428+ let bh = co._1
429+ let bi = co._2
430+ let cp = co._3
431+ let aX = toBigInt(bi)
432+ let bj = X(bM)
433+ let aY = ai(bj, -1)
434+ let aZ = ai(W(), -1)
435+ func cq (bl,bm) = {
436+ let cr = aV(bM, bm, aX, aY, aZ)
437+ let bo = cr._1
438+ let bp = cr._2
439+ let bq = cr._3
440+ let be = cr._4
441+ let cs = ac(bM, bm)
442+ let ct = bl
443+ let cu = ct._1
444+ let cv = ct._2
445+ let cw = makeString([bm, toString(bo)], ":")
446+ let cx = makeString([cv, cw], "_")
447+ if ((0 >= bo))
448+ then $Tuple2(cu, cx)
449+ else $Tuple2((((cu :+ ScriptTransfer(M, bo, ao(bm))) :+ IntegerEntry(cs, (valueOrElse(getInteger(cs), 0) + bo))) :+ IntegerEntry(be, 0)), cx)
420450 }
421451
422- let ch = {
423- let aX = aA
424- let aY = size(aX)
425- let aZ = $Tuple2(nil, "")
426- func ba (bb,bc) = if ((bc >= aY))
427- then bb
428- else bZ(bb, aX[bc])
452+ let cy = {
453+ let br = aU
454+ let bs = size(br)
455+ let bt = $Tuple2(nil, "")
456+ func bu (bv,bw) = if ((bw >= bs))
457+ then bv
458+ else cq(bv, br[bw])
429459
430- func bd (bb,bc) = if ((bc >= aY))
431- then bb
460+ func bx (bv,bw) = if ((bw >= bs))
461+ then bv
432462 else throw("List size exceeds 10")
433463
434- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
464+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
435465 }
436- let ci = ch._1
437- let cj = ch._2
438- if ((0 >= size(ci)))
466+ let cz = cy._1
467+ let cA = cy._2
468+ if ((0 >= size(cz)))
439469 then throw("nothing to claim")
440- else ((ci :+ IntegerEntry(aP, aF)) :+ ai(p, bi.transactionId, drop(cj, 1)))
470+ else ((cz :+ IntegerEntry(bj, aZ)) :+ aD(M, bC.transactionId, drop(cA, 1)))
441471 }
442472 }
443473
444474
445475
446-@Callable(bi)
447-func unclaimedRewardsREADONLY (bt) = {
448- func ck (aR,aS) = ((aR + makeString([aS, "0", "0"], ":")) + "_")
476+@Callable(bC)
477+func unclaimedRewardsREADONLY (bM) = {
478+ func cB (bl,bm) = ((bl + makeString([bm, "0", "0"], ":")) + "_")
449479
450- let cl = if ((bt == ""))
480+ let cC = if ((bM == ""))
451481 then {
452- let aX = aA
453- let aY = size(aX)
454- let aZ = ""
455- func ba (bb,bc) = if ((bc >= aY))
456- then bb
457- else ck(bb, aX[bc])
482+ let br = aU
483+ let bs = size(br)
484+ let bt = ""
485+ func bu (bv,bw) = if ((bw >= bs))
486+ then bv
487+ else cB(bv, br[bw])
458488
459- func bd (bb,bc) = if ((bc >= aY))
460- then bb
489+ func bx (bv,bw) = if ((bw >= bs))
490+ then bv
461491 else throw("List size exceeds 10")
462492
463- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
493+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
464494 }
465495 else {
466- let p = addressFromStringValue(bt)
467- let cm = valueOrElse(ax(p), $Tuple3(true, 0, 0))
468- let aN = cm._1
469- let aO = cm._2
470- let bY = cm._3
471- let aD = toBigInt(aO)
472- let aP = A(bt)
473- let aE = M(aP, -1)
474- let aF = M(z(), -1)
475- func bZ (aR,aS) = {
476- let cn = aB(bt, aS, aD, aE, aF)
477- let aU = cn._1
478- let aV = cn._2
479- let aW = cn._3
480- let aK = cn._4
481- let co = valueOrElse(getInteger(F(bt, aS)), 0)
482- ((aR + makeString([aS, toString(aU), toString(co)], ":")) + "_")
496+ let M = addressFromStringValue(bM)
497+ let cD = valueOrElse(aR(M), $Tuple3(true, 0, 0))
498+ let bh = cD._1
499+ let bi = cD._2
500+ let cp = cD._3
501+ let aX = toBigInt(bi)
502+ let bj = X(bM)
503+ let aY = ai(bj, -1)
504+ let aZ = ai(W(), -1)
505+ func cq (bl,bm) = {
506+ let cE = aV(bM, bm, aX, aY, aZ)
507+ let bo = cE._1
508+ let bp = cE._2
509+ let bq = cE._3
510+ let be = cE._4
511+ let cF = valueOrElse(getInteger(ac(bM, bm)), 0)
512+ ((bl + makeString([bm, toString(bo), toString(cF)], ":")) + "_")
483513 }
484514
485- let aX = aA
486- let aY = size(aX)
487- let aZ = ""
488- func ba (bb,bc) = if ((bc >= aY))
489- then bb
490- else bZ(bb, aX[bc])
515+ let br = aU
516+ let bs = size(br)
517+ let bt = ""
518+ func bu (bv,bw) = if ((bw >= bs))
519+ then bv
520+ else cq(bv, br[bw])
491521
492- func bd (bb,bc) = if ((bc >= aY))
493- then bb
522+ func bx (bv,bw) = if ((bw >= bs))
523+ then bv
494524 else throw("List size exceeds 10")
495525
496- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
526+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
497527 }
498- $Tuple2(nil, dropRight(cl, 1))
528+ $Tuple2(nil, dropRight(cC, 1))
499529 }
500530
501531
502532
503-@Callable(bi)
504-func nsbtStakingSYSREADONLY (bt) = {
505- let cp = M(u(), 0)
506- if ((bt == ""))
507- then $Tuple2(nil, [0, cp, 0])
533+@Callable(bC)
534+func nsbtStakingSYSREADONLY (bM) = {
535+ let cG = ai(R(), 0)
536+ if ((bM == ""))
537+ then $Tuple2(nil, [0, cG, 0])
508538 else {
509- let p = R(bt)
510- let cq = valueOrElse(ax(p), $Tuple3(true, 0, 0))
511- let aN = cq._1
512- let cr = cq._2
513- let bY = cq._3
514- $Tuple2(nil, [cr, cp, bY])
539+ let M = am(bM)
540+ let cH = valueOrElse(aR(M), $Tuple3(true, 0, 0))
541+ let bh = cH._1
542+ let cI = cH._2
543+ let cp = cH._3
544+ $Tuple2(nil, [cI, cG, cp])
515545 }
516546 }
517547
518548
519-@Verifier(cs)
520-func ct () = {
521- let cu = ["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
522- let cv = ((((if (sigVerify(cs.bodyBytes, cs.proofs[0], fromBase58String(cu[0])))
549+@Verifier(cJ)
550+func cK () = {
551+ let cL = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
552+ let cM = split(valueOrElse(getString(C, "%s__multisig"), cL), b)
553+ let cN = ((((if (sigVerify(cJ.bodyBytes, cJ.proofs[0], fromBase58String(cM[0])))
523554 then 1
524- else 0) + (if (sigVerify(cs.bodyBytes, cs.proofs[1], fromBase58String(cu[1])))
555+ else 0) + (if (sigVerify(cJ.bodyBytes, cJ.proofs[1], fromBase58String(cM[1])))
525556 then 1
526- else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[2], fromBase58String(cu[2])))
557+ else 0)) + (if (sigVerify(cJ.bodyBytes, cJ.proofs[2], fromBase58String(cM[2])))
527558 then 1
528- else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[3], fromBase58String(cu[3])))
559+ else 0)) + (if (sigVerify(cJ.bodyBytes, cJ.proofs[3], fromBase58String(cM[3])))
529560 then 2
530561 else 0))
531- (cv >= 3)
562+ (cN >= 3)
532563 }
533564
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
6-let b = 1000000
6+let b = "__"
77
8-let c = 100000000
8+let c = 1000000
99
10-let d = toBigInt(b)
10+let d = 100000000
1111
1212 let e = toBigInt(c)
1313
14-let f = toBigInt(1000000000000000000)
14+let f = toBigInt(d)
1515
16-let g = "WAVES"
16+let g = toBigInt(1000000000000000000)
1717
18-let h = fromBase58String(g)
18+let h = "WAVES"
1919
20-func i () = "bond_asset_id"
20+let i = fromBase58String(h)
21+
22+let j = 1
23+
24+let k = 2
25+
26+let l = 3
27+
28+let m = 4
29+
30+let n = 5
31+
32+let o = 6
33+
34+let p = 7
35+
36+let q = 8
37+
38+let r = 9
39+
40+func s (t,u) = valueOrErrorMessage(getString(t, u), (((("mandatory " + toString(t)) + ".") + u) + " is not defined"))
2141
2242
23-func j () = "auction_contract"
43+func v () = "%s%s__config__controlAddress"
2444
2545
26-func k () = "%s__neutrinoContractAddress"
46+func w () = "%s__controlConfig"
2747
2848
29-func l () = "%s__mathContract"
49+func x (y) = split(s(y, w()), b)
3050
3151
32-func m () = "%s__minLockAmount"
52+func z (A,B) = valueOrErrorMessage(addressFromString(A[B]), ("Control cfg doesn't contain address at index " + toString(B)))
3353
3454
35-func n () = "%s__halfLife"
55+let C = addressFromStringValue(valueOrElse(getString(this, v()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
56+
57+let A = x(C)
58+
59+let D = z(A, m)
60+
61+let E = z(A, j)
62+
63+let F = z(A, k)
64+
65+func G () = "bond_asset_id"
3666
3767
38-func o (p) = makeString(["%s%s%s", "paramByUser", toString(p), "amount"], a)
68+func H () = "%s__neutrinoContractAddress"
3969
4070
41-func q (p) = makeString(["%s%s%s", "paramByUser", toString(p), "start"], a)
71+func I () = "%s__mathContract"
4272
4373
44-func r (s,p,t) = makeString(["%s%s%s%s", "history", s, toString(p), toBase58String(t)], a)
74+func J () = "%s__minLockAmount"
4575
4676
47-func u () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
77+func K () = "%s__halfLife"
4878
4979
50-func v () = makeString(["%s%s", "stats", "locksCount"], a)
80+func L (M) = makeString(["%s%s%s", "paramByUser", toString(M), "amount"], a)
5181
5282
53-func w () = makeString(["%s%s", "stats", "activeUsersCount"], a)
83+func N (M) = makeString(["%s%s%s", "paramByUser", toString(M), "start"], a)
5484
5585
56-func x () = "%s__nextPeriod"
86+func O (P,M,Q) = makeString(["%s%s%s%s", "history", P, toString(M), toBase58String(Q)], a)
5787
5888
59-func y () = "supportedRewardAssets"
89+func R () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
6090
6191
62-func z () = makeString(["%s%s%s", "dep", "lastNum"], a)
92+func S () = makeString(["%s%s", "stats", "locksCount"], a)
6393
6494
65-func A (p) = makeString(["%s%s%s", "userRwdFromDepNum", p], a)
95+func T () = makeString(["%s%s", "stats", "activeUsersCount"], a)
6696
6797
68-func B (C,D) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(C), D], a)
98+func U () = "%s__nextPeriod"
6999
70100
71-func E (p,D) = makeString(["%s%s%s", "rwd", p, D], a)
101+func V () = "supportedRewardAssets"
72102
73103
74-func F (p,D) = makeString(["%s%s%s", "clm", p, D], a)
104+func W () = makeString(["%s%s%s", "dep", "lastNum"], a)
75105
76106
77-func G (D) = makeString(["%s%s", "notDistributed", D], a)
107+func X (M) = makeString(["%s%s%s", "userRwdFromDepNum", M], a)
78108
79109
80-func H (I,J) = fraction(toBigInt(I), f, J)
110+func Y (Z,aa) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(Z), aa], a)
81111
82112
83-func K (L) = valueOrElse(getInteger(this, L), 0)
113+func ab (M,aa) = makeString(["%s%s%s", "rwd", M, aa], a)
84114
85115
86-func M (L,N) = valueOrElse(getInteger(this, L), N)
116+func ac (M,aa) = makeString(["%s%s%s", "clm", M, aa], a)
87117
88118
89-func O (L) = valueOrErrorMessage(getInteger(this, L), (("Mandatory this." + L) + " is not defined"))
119+func ad (aa) = makeString(["%s%s", "notDistributed", aa], a)
90120
91121
92-func P (L,N) = valueOrElse(getString(this, L), N)
122+func ae (af,ag) = fraction(toBigInt(af), g, ag)
93123
94124
95-func Q (L) = valueOrErrorMessage(getString(this, L), (("Mandatory this." + L) + " is not defined"))
125+func ah (u) = valueOrElse(getInteger(this, u), 0)
96126
97127
98-func R (S) = valueOrErrorMessage(addressFromString(S), ("couldn't parse passed addressStr=" + S))
128+func ai (u,aj) = valueOrElse(getInteger(this, u), aj)
99129
100130
101-func T (U) = if ((U == g))
102- then unit
103- else fromBase58String(U)
131+func ak (u) = valueOrErrorMessage(getInteger(this, u), (("Mandatory this." + u) + " is not defined"))
104132
105133
106-func V (W) = {
107- let X = W
108- if ($isInstanceOf(X, "Int"))
134+func al (u,aj) = valueOrElse(getString(this, u), aj)
135+
136+
137+func am (an) = valueOrErrorMessage(addressFromString(an), ("couldn't parse passed addressStr=" + an))
138+
139+
140+func ao (ap) = if ((ap == h))
141+ then unit
142+ else fromBase58String(ap)
143+
144+
145+func aq (ar) = {
146+ let as = ar
147+ if ($isInstanceOf(as, "Int"))
109148 then {
110- let Y = X
111- Y
149+ let at = as
150+ at
112151 }
113152 else throw("fail to cast into Int")
114153 }
115154
116155
117-func Z (aa,ab,ac,ad) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aa), toString(ab), toString(ac), toString(ad)], a)
156+func au (av,aw,ax,ay) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(av), toString(aw), toString(ax), toString(ay)], a)
118157
119158
120-func ae (af,ag) = makeString(["%s%d%d%s", af, toString(lastBlock.height), toString(lastBlock.timestamp), ag], a)
159+func az (aA,aB) = makeString(["%s%d%d%s", aA, toString(lastBlock.height), toString(lastBlock.timestamp), aB], a)
121160
122161
123-func ah (s,p,t,aa,ab,ac,ad) = StringEntry(r(s, p, t), Z(aa, ab, ac, ad))
162+func aC (P,M,Q,av,aw,ax,ay) = StringEntry(O(P, M, Q), au(av, aw, ax, ay))
124163
125164
126-func ai (p,t,ag) = StringEntry(r("claim", p, t), ae(toString(p), ag))
165+func aD (M,Q,aB) = StringEntry(O("claim", M, Q), az(toString(M), aB))
127166
128167
129-func aj (ak,al,am) = {
130- let an = K(v())
131- let ao = K(w())
132- let ap = K(u())
133- let aq = (ap + ak)
134- $Tuple3([IntegerEntry(v(), (an + al)), IntegerEntry(w(), (ao + am)), IntegerEntry(u(), aq)], ap, aq)
168+func aE (aF,aG,aH) = {
169+ let aI = ah(S())
170+ let aJ = ah(T())
171+ let aK = ah(R())
172+ let aL = (aK + aF)
173+ $Tuple3([IntegerEntry(S(), (aI + aG)), IntegerEntry(T(), (aJ + aH)), IntegerEntry(R(), aL)], aK, aL)
135174 }
136175
137176
138-func ar (p,as,at) = [IntegerEntry(o(p), as), IntegerEntry(q(p), at)]
177+func aM (M,aN,aO) = [IntegerEntry(L(M), aN), IntegerEntry(N(M), aO)]
139178
140179
141-func au () = {
142- let av = addressFromStringValue(Q(k()))
143- $Tuple4(fromBase58String(getStringValue(av, j())), fromBase58String(getStringValue(av, i())), O(m()), O(n()))
180+func aP () = $Tuple3(fromBase58String(getStringValue(E, G())), ak(J()), ak(K()))
181+
182+
183+func aQ (M) = (ai(L(M), 0) > 0)
184+
185+
186+func aR (M) = if (aQ(M))
187+ then $Tuple3(false, ak(L(M)), ak(N(M)))
188+ else unit
189+
190+
191+func aS (M) = valueOrErrorMessage(aR(M), (("User " + toString(M)) + " is not defined"))
192+
193+
194+let aT = al(V(), "")
195+
196+let aU = split(aT, "_")
197+
198+func aV (M,aW,aX,aY,aZ) = {
199+ let ba = Y(aZ, aW)
200+ let bb = parseBigIntValue(al(Y(aZ, aW), "0"))
201+ let bc = parseBigIntValue(al(Y(aY, aW), "0"))
202+ let bd = toInt(fraction((bb - bc), aX, g))
203+ let be = ab(M, aW)
204+ let bf = ai(be, 0)
205+ $Tuple4((bf + bd), bf, bd, be)
144206 }
145207
146208
147-func aw (p) = (M(o(p), 0) > 0)
209+func bg (bh,M,bi) = {
210+ let aX = toBigInt(bi)
211+ let bj = X(M)
212+ let aY = ai(bj, -1)
213+ let aZ = ai(W(), -1)
214+ func bk (bl,bm) = {
215+ let bn = aV(M, bm, aX, aY, aZ)
216+ let bo = bn._1
217+ let bp = bn._2
218+ let bq = bn._3
219+ let be = bn._4
220+ (bl :+ IntegerEntry(be, bo))
221+ }
148222
223+ if (if ((aZ == -1))
224+ then (aY == -1)
225+ else false)
226+ then nil
227+ else if (if ((aZ == -1))
228+ then (aY > -1)
229+ else false)
230+ then throw("invalid depositNumLast and depositNumUser state")
231+ else if (if ((aZ > -1))
232+ then (aY == -1)
233+ else false)
234+ then if (bh)
235+ then [IntegerEntry(bj, aZ)]
236+ else ({
237+ let br = aU
238+ let bs = size(br)
239+ let bt = nil
240+ func bu (bv,bw) = if ((bw >= bs))
241+ then bv
242+ else bk(bv, br[bw])
149243
150-func ax (p) = if (aw(p))
151- then $Tuple3(false, O(o(p)), O(q(p)))
152- else unit
244+ func bx (bv,bw) = if ((bw >= bs))
245+ then bv
246+ else throw("List size exceeds 10")
153247
248+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
249+ } :+ IntegerEntry(bj, aZ))
250+ else if (if ((aZ > -1))
251+ then (aY > -1)
252+ else false)
253+ then if (bh)
254+ then [IntegerEntry(bj, aZ)]
255+ else ({
256+ let br = aU
257+ let bs = size(br)
258+ let bt = nil
259+ func bu (bv,bw) = if ((bw >= bs))
260+ then bv
261+ else bk(bv, br[bw])
154262
155-func ay (p) = valueOrErrorMessage(ax(p), (("User " + toString(p)) + " is not defined"))
263+ func bx (bv,bw) = if ((bw >= bs))
264+ then bv
265+ else throw("List size exceeds 10")
156266
157-
158-let az = P(y(), "")
159-
160-let aA = split(az, "_")
161-
162-func aB (p,aC,aD,aE,aF) = {
163- let aG = B(aF, aC)
164- let aH = parseBigIntValue(P(B(aF, aC), "0"))
165- let aI = parseBigIntValue(P(B(aE, aC), "0"))
166- let aJ = toInt(fraction((aH - aI), aD, f))
167- let aK = E(p, aC)
168- let aL = M(aK, 0)
169- $Tuple4((aL + aJ), aL, aJ, aK)
267+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
268+ } :+ IntegerEntry(bj, aZ))
269+ else throw(((("uncovered condition: depositNumLast=" + toString(aZ)) + " depositNumUser=") + toString(aY)))
170270 }
171271
172272
173-func aM (aN,p,aO) = {
174- let aD = toBigInt(aO)
175- let aP = A(p)
176- let aE = M(aP, -1)
177- let aF = M(z(), -1)
178- func aQ (aR,aS) = {
179- let aT = aB(p, aS, aD, aE, aF)
180- let aU = aT._1
181- let aV = aT._2
182- let aW = aT._3
183- let aK = aT._4
184- (aR :+ IntegerEntry(aK, aU))
185- }
186-
187- if (if ((aF == -1))
188- then (aE == -1)
189- else false)
190- then nil
191- else if (if ((aF == -1))
192- then (aE > -1)
193- else false)
194- then throw("invalid depositNumLast and depositNumUser state")
195- else if (if ((aF > -1))
196- then (aE == -1)
197- else false)
198- then if (aN)
199- then [IntegerEntry(aP, aF)]
200- else ({
201- let aX = aA
202- let aY = size(aX)
203- let aZ = nil
204- func ba (bb,bc) = if ((bc >= aY))
205- then bb
206- else aQ(bb, aX[bc])
207-
208- func bd (bb,bc) = if ((bc >= aY))
209- then bb
210- else throw("List size exceeds 10")
211-
212- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
213- } :+ IntegerEntry(aP, aF))
214- else if (if ((aF > -1))
215- then (aE > -1)
216- else false)
217- then if (aN)
218- then [IntegerEntry(aP, aF)]
219- else ({
220- let aX = aA
221- let aY = size(aX)
222- let aZ = nil
223- func ba (bb,bc) = if ((bc >= aY))
224- then bb
225- else aQ(bb, aX[bc])
226-
227- func bd (bb,bc) = if ((bc >= aY))
228- then bb
229- else throw("List size exceeds 10")
230-
231- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232- } :+ IntegerEntry(aP, aF))
233- else throw(((("uncovered condition: depositNumLast=" + toString(aF)) + " depositNumUser=") + toString(aE)))
273+func by (aa,bz) = {
274+ let bA = ad(aa)
275+ let bB = ai(bA, 0)
276+[IntegerEntry(bA, (bB + bz))]
234277 }
235278
236279
237-func be (D,bf) = {
238- let bg = G(D)
239- let bh = M(bg, 0)
240-[IntegerEntry(bg, (bh + bf))]
241- }
242-
243-
244-@Callable(bi)
245-func constructor (bj,bk,bl,bm,bn) = if ((bi.caller != this))
280+@Callable(bC)
281+func constructor (bD,bE,bF,bG,bH) = if ((bC.caller != this))
246282 then throw("Permission denied")
247- else [StringEntry(k(), bj), StringEntry(l(), bk), IntegerEntry(m(), bl), IntegerEntry(n(), bm), StringEntry(y(), bn)]
283+ else [StringEntry(H(), bD), StringEntry(I(), bE), IntegerEntry(J(), bF), IntegerEntry(K(), bG), StringEntry(V(), bH)]
248284
249285
250286
251-@Callable(bi)
287+@Callable(bC)
252288 func stake () = {
253- let bo = au()
254- let bp = bo._1
255- let bq = bo._2
256- let bl = bo._3
257- let bm = bo._4
258- if ((size(bi.payments) != 1))
289+ let bI = aP()
290+ let bJ = bI._1
291+ let bF = bI._2
292+ let bG = bI._3
293+ if ((size(bC.payments) != 1))
259294 then throw("Invalid payments size")
260295 else {
261- let br = bi.payments[0]
262- let as = br.amount
263- let bs = (("Invalid asset. " + toBase58String(bq)) + " is expected")
264- let aC = valueOrErrorMessage(br.assetId, bs)
265- if ((aC != bq))
266- then throw(bs)
296+ let bK = bC.payments[0]
297+ let aN = bK.amount
298+ let bL = (("Invalid asset. " + toBase58String(bJ)) + " is expected")
299+ let aW = valueOrErrorMessage(bK.assetId, bL)
300+ if ((aW != bJ))
301+ then throw(bL)
267302 else {
268- let p = bi.caller
269- let bt = toString(bi.caller)
270- let bu = valueOrElse(ax(p), $Tuple3(true, 0, -1))
271- let aN = bu._1
272- let bv = bu._2
273- let bw = bu._3
274- let bx = if (aN)
275- then as
276- else (as + bv)
277- let by = if (aN)
303+ let M = bC.caller
304+ let bM = toString(bC.caller)
305+ let bN = valueOrElse(aR(M), $Tuple3(true, 0, -1))
306+ let bh = bN._1
307+ let bO = bN._2
308+ let bP = bN._3
309+ let bQ = if (bh)
310+ then aN
311+ else (aN + bO)
312+ let bR = if (bh)
278313 then height
314+ else aq(invoke(D, "mergeStakesREADONLY", [aN, height, bO, bP, bG], nil))
315+ if ((bF > bQ))
316+ then throw(("Min lock amount is " + toString(bF)))
279317 else {
280- let bz = addressFromStringValue(Q(l()))
281- V(invoke(bz, "mergeStakesREADONLY", [as, height, bv, bw, bm], nil))
282- }
283- if ((bl > bx))
284- then throw(("Min lock amount is " + toString(bl)))
285- else {
286- let bA = aj(as, 1, if (aN)
318+ let bS = aE(aN, 1, if (bh)
287319 then 1
288320 else 0)
289- let bB = bA._1
290- let bC = bA._2
291- let bD = bA._3
292- ((([ah("stake", p, bi.transactionId, bv, bw, bx, by)] ++ aM(aN, bt, bv)) ++ ar(p, bx, by)) ++ bB)
321+ let bT = bS._1
322+ let bU = bS._2
323+ let bV = bS._3
324+ ((([aC("stake", M, bC.transactionId, bO, bP, bQ, bR)] ++ bg(bh, bM, bO)) ++ aM(M, bQ, bR)) ++ bT)
293325 }
294326 }
295327 }
296328 }
297329
298330
299331
300-@Callable(bi)
301-func unstake (as) = if ((size(bi.payments) != 0))
332+@Callable(bC)
333+func unstake (aN) = if ((size(bC.payments) != 0))
302334 then throw("unstake doesn't require any payment")
303335 else {
304- let p = bi.caller
305- let bt = toString(p)
306- let bE = au()
307- let bF = bE._1
308- let bq = bE._2
309- let bl = bE._3
310- let bm = bE._4
311- let bG = ay(p)
312- let aN = bG._1
313- let bv = bG._2
314- let bH = bG._3
315- if ((0 >= bv))
336+ let M = bC.caller
337+ let bM = toString(M)
338+ let bW = aP()
339+ let bJ = bW._1
340+ let bF = bW._2
341+ let bG = bW._3
342+ let bX = aS(M)
343+ let bh = bX._1
344+ let bO = bX._2
345+ let bY = bX._3
346+ if ((0 >= bO))
316347 then throw("Nothing to unstake")
317- else if ((as > bv))
318- then throw(((("Requested " + toString(as)) + ", but staked only ") + toString(bv)))
348+ else if ((aN > bO))
349+ then throw(((("Requested " + toString(aN)) + ", but staked only ") + toString(bO)))
319350 else {
320- let bz = addressFromStringValue(Q(l()))
321- let bI = V(invoke(bz, "getUnstakeComissionAmountREADONLY", [as, bH, bm], nil))
322- let bJ = aj(-(as), if ((as == bv))
351+ let bZ = aq(invoke(D, "getUnstakeComissionAmountREADONLY", [aN, bY, bG], nil))
352+ let ca = aE(-(aN), if ((aN == bO))
323353 then -1
324- else 0, if ((as == bv))
354+ else 0, if ((aN == bO))
325355 then -1
326356 else 0)
327- let bB = bJ._1
328- let bC = bJ._2
329- let bD = bJ._3
330- ((([ScriptTransfer(p, (as - bI), bq), ScriptTransfer(Address(bF), bI, bq), ah("unstake", p, bi.transactionId, bv, bH, (bv - as), bH)] ++ aM(false, bt, bv)) ++ ar(p, (bv - as), bH)) ++ bB)
357+ let bT = ca._1
358+ let bU = ca._2
359+ let bV = ca._3
360+ ((([ScriptTransfer(M, (aN - bZ), bJ), ScriptTransfer(F, bZ, bJ), aC("unstake", M, bC.transactionId, bO, bY, (bO - aN), bY)] ++ bg(false, bM, bO)) ++ aM(M, (bO - aN), bY)) ++ bT)
331361 }
332362 }
333363
334364
335365
336-@Callable(bi)
337-func deposit () = if ((size(bi.payments) != 1))
366+@Callable(bC)
367+func deposit () = if ((size(bC.payments) != 1))
338368 then throw("exact 1 payment is allowed only")
339369 else {
340- let bK = bi.payments[0]
341- let as = bK.amount
342- let bL = valueOrElse(bK.assetId, h)
343- let bM = toBase58String(bL)
344- let bN = if ((bL == h))
345- then e
346- else d
347- let bO = toBigInt(as)
348- let bC = M(u(), 0)
349- let bP = toBigInt(bC)
350- if ((0 > bC))
370+ let cb = bC.payments[0]
371+ let aN = cb.amount
372+ let cc = valueOrElse(cb.assetId, i)
373+ let cd = toBase58String(cc)
374+ let ce = if ((cc == i))
375+ then f
376+ else e
377+ let cf = toBigInt(aN)
378+ let bU = ai(R(), 0)
379+ let cg = toBigInt(bU)
380+ if ((0 > bU))
351381 then throw("TODO: case is not supported")
352- else if ((bC == 0))
353- then be(bM, as)
382+ else if ((bU == 0))
383+ then by(cd, aN)
354384 else {
355- let bQ = fraction(bO, f, bP)
356- let bR = z()
357- let aF = M(bR, -1)
358- let bS = (aF + 1)
359- if (!(contains(az, bM)))
360- then throw(((az + " doesn't contain ") + bM))
385+ let ch = fraction(cf, g, cg)
386+ let ci = W()
387+ let aZ = ai(ci, -1)
388+ let cj = (aZ + 1)
389+ if (!(contains(aT, cd)))
390+ then throw(((aT + " doesn't contain ") + cd))
361391 else {
362- func bT (aR,bU) = {
363- let bV = B(bS, bU)
364- let bW = P(B(aF, bU), "0")
365- (aR :+ (if ((bU == bM))
366- then StringEntry(bV, toString((parseBigIntValue(bW) + bQ)))
367- else StringEntry(bV, bW)))
392+ func ck (bl,cl) = {
393+ let cm = Y(cj, cl)
394+ let cn = al(Y(aZ, cl), "0")
395+ (bl :+ (if ((cl == cd))
396+ then StringEntry(cm, toString((parseBigIntValue(cn) + ch)))
397+ else StringEntry(cm, cn)))
368398 }
369399
370400 ({
371- let aX = aA
372- let aY = size(aX)
373- let aZ = nil
374- func ba (bb,bc) = if ((bc >= aY))
375- then bb
376- else bT(bb, aX[bc])
401+ let br = aU
402+ let bs = size(br)
403+ let bt = nil
404+ func bu (bv,bw) = if ((bw >= bs))
405+ then bv
406+ else ck(bv, br[bw])
377407
378- func bd (bb,bc) = if ((bc >= aY))
379- then bb
408+ func bx (bv,bw) = if ((bw >= bs))
409+ then bv
380410 else throw("List size exceeds 10")
381411
382- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
383- } :+ IntegerEntry(bR, bS))
412+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
413+ } :+ IntegerEntry(ci, cj))
384414 }
385415 }
386416 }
387417
388418
389419
390-@Callable(bi)
420+@Callable(bC)
391421 func claimRewards () = {
392- let p = bi.caller
393- let bt = toString(p)
394- if ((size(bi.payments) > 0))
422+ let M = bC.caller
423+ let bM = toString(M)
424+ if ((size(bC.payments) > 0))
395425 then throw("payments are not accepted")
396426 else {
397- let bX = valueOrElse(ax(p), $Tuple3(true, 0, 0))
398- let aN = bX._1
399- let aO = bX._2
400- let bY = bX._3
401- let aD = toBigInt(aO)
402- let aP = A(bt)
403- let aE = M(aP, -1)
404- let aF = M(z(), -1)
405- func bZ (aR,aS) = {
406- let ca = aB(bt, aS, aD, aE, aF)
407- let aU = ca._1
408- let aV = ca._2
409- let aW = ca._3
410- let aK = ca._4
411- let cb = F(bt, aS)
412- let cc = aR
413- let cd = cc._1
414- let ce = cc._2
415- let cf = makeString([aS, toString(aU)], ":")
416- let cg = makeString([ce, cf], "_")
417- if ((0 >= aU))
418- then $Tuple2(cd, cg)
419- else $Tuple2((((cd :+ ScriptTransfer(p, aU, T(aS))) :+ IntegerEntry(cb, (valueOrElse(getInteger(cb), 0) + aU))) :+ IntegerEntry(aK, 0)), cg)
427+ let co = valueOrElse(aR(M), $Tuple3(true, 0, 0))
428+ let bh = co._1
429+ let bi = co._2
430+ let cp = co._3
431+ let aX = toBigInt(bi)
432+ let bj = X(bM)
433+ let aY = ai(bj, -1)
434+ let aZ = ai(W(), -1)
435+ func cq (bl,bm) = {
436+ let cr = aV(bM, bm, aX, aY, aZ)
437+ let bo = cr._1
438+ let bp = cr._2
439+ let bq = cr._3
440+ let be = cr._4
441+ let cs = ac(bM, bm)
442+ let ct = bl
443+ let cu = ct._1
444+ let cv = ct._2
445+ let cw = makeString([bm, toString(bo)], ":")
446+ let cx = makeString([cv, cw], "_")
447+ if ((0 >= bo))
448+ then $Tuple2(cu, cx)
449+ else $Tuple2((((cu :+ ScriptTransfer(M, bo, ao(bm))) :+ IntegerEntry(cs, (valueOrElse(getInteger(cs), 0) + bo))) :+ IntegerEntry(be, 0)), cx)
420450 }
421451
422- let ch = {
423- let aX = aA
424- let aY = size(aX)
425- let aZ = $Tuple2(nil, "")
426- func ba (bb,bc) = if ((bc >= aY))
427- then bb
428- else bZ(bb, aX[bc])
452+ let cy = {
453+ let br = aU
454+ let bs = size(br)
455+ let bt = $Tuple2(nil, "")
456+ func bu (bv,bw) = if ((bw >= bs))
457+ then bv
458+ else cq(bv, br[bw])
429459
430- func bd (bb,bc) = if ((bc >= aY))
431- then bb
460+ func bx (bv,bw) = if ((bw >= bs))
461+ then bv
432462 else throw("List size exceeds 10")
433463
434- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
464+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
435465 }
436- let ci = ch._1
437- let cj = ch._2
438- if ((0 >= size(ci)))
466+ let cz = cy._1
467+ let cA = cy._2
468+ if ((0 >= size(cz)))
439469 then throw("nothing to claim")
440- else ((ci :+ IntegerEntry(aP, aF)) :+ ai(p, bi.transactionId, drop(cj, 1)))
470+ else ((cz :+ IntegerEntry(bj, aZ)) :+ aD(M, bC.transactionId, drop(cA, 1)))
441471 }
442472 }
443473
444474
445475
446-@Callable(bi)
447-func unclaimedRewardsREADONLY (bt) = {
448- func ck (aR,aS) = ((aR + makeString([aS, "0", "0"], ":")) + "_")
476+@Callable(bC)
477+func unclaimedRewardsREADONLY (bM) = {
478+ func cB (bl,bm) = ((bl + makeString([bm, "0", "0"], ":")) + "_")
449479
450- let cl = if ((bt == ""))
480+ let cC = if ((bM == ""))
451481 then {
452- let aX = aA
453- let aY = size(aX)
454- let aZ = ""
455- func ba (bb,bc) = if ((bc >= aY))
456- then bb
457- else ck(bb, aX[bc])
482+ let br = aU
483+ let bs = size(br)
484+ let bt = ""
485+ func bu (bv,bw) = if ((bw >= bs))
486+ then bv
487+ else cB(bv, br[bw])
458488
459- func bd (bb,bc) = if ((bc >= aY))
460- then bb
489+ func bx (bv,bw) = if ((bw >= bs))
490+ then bv
461491 else throw("List size exceeds 10")
462492
463- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
493+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
464494 }
465495 else {
466- let p = addressFromStringValue(bt)
467- let cm = valueOrElse(ax(p), $Tuple3(true, 0, 0))
468- let aN = cm._1
469- let aO = cm._2
470- let bY = cm._3
471- let aD = toBigInt(aO)
472- let aP = A(bt)
473- let aE = M(aP, -1)
474- let aF = M(z(), -1)
475- func bZ (aR,aS) = {
476- let cn = aB(bt, aS, aD, aE, aF)
477- let aU = cn._1
478- let aV = cn._2
479- let aW = cn._3
480- let aK = cn._4
481- let co = valueOrElse(getInteger(F(bt, aS)), 0)
482- ((aR + makeString([aS, toString(aU), toString(co)], ":")) + "_")
496+ let M = addressFromStringValue(bM)
497+ let cD = valueOrElse(aR(M), $Tuple3(true, 0, 0))
498+ let bh = cD._1
499+ let bi = cD._2
500+ let cp = cD._3
501+ let aX = toBigInt(bi)
502+ let bj = X(bM)
503+ let aY = ai(bj, -1)
504+ let aZ = ai(W(), -1)
505+ func cq (bl,bm) = {
506+ let cE = aV(bM, bm, aX, aY, aZ)
507+ let bo = cE._1
508+ let bp = cE._2
509+ let bq = cE._3
510+ let be = cE._4
511+ let cF = valueOrElse(getInteger(ac(bM, bm)), 0)
512+ ((bl + makeString([bm, toString(bo), toString(cF)], ":")) + "_")
483513 }
484514
485- let aX = aA
486- let aY = size(aX)
487- let aZ = ""
488- func ba (bb,bc) = if ((bc >= aY))
489- then bb
490- else bZ(bb, aX[bc])
515+ let br = aU
516+ let bs = size(br)
517+ let bt = ""
518+ func bu (bv,bw) = if ((bw >= bs))
519+ then bv
520+ else cq(bv, br[bw])
491521
492- func bd (bb,bc) = if ((bc >= aY))
493- then bb
522+ func bx (bv,bw) = if ((bw >= bs))
523+ then bv
494524 else throw("List size exceeds 10")
495525
496- bd(ba(ba(ba(ba(ba(ba(ba(ba(ba(ba(aZ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
526+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
497527 }
498- $Tuple2(nil, dropRight(cl, 1))
528+ $Tuple2(nil, dropRight(cC, 1))
499529 }
500530
501531
502532
503-@Callable(bi)
504-func nsbtStakingSYSREADONLY (bt) = {
505- let cp = M(u(), 0)
506- if ((bt == ""))
507- then $Tuple2(nil, [0, cp, 0])
533+@Callable(bC)
534+func nsbtStakingSYSREADONLY (bM) = {
535+ let cG = ai(R(), 0)
536+ if ((bM == ""))
537+ then $Tuple2(nil, [0, cG, 0])
508538 else {
509- let p = R(bt)
510- let cq = valueOrElse(ax(p), $Tuple3(true, 0, 0))
511- let aN = cq._1
512- let cr = cq._2
513- let bY = cq._3
514- $Tuple2(nil, [cr, cp, bY])
539+ let M = am(bM)
540+ let cH = valueOrElse(aR(M), $Tuple3(true, 0, 0))
541+ let bh = cH._1
542+ let cI = cH._2
543+ let cp = cH._3
544+ $Tuple2(nil, [cI, cG, cp])
515545 }
516546 }
517547
518548
519-@Verifier(cs)
520-func ct () = {
521- let cu = ["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"]
522- let cv = ((((if (sigVerify(cs.bodyBytes, cs.proofs[0], fromBase58String(cu[0])))
549+@Verifier(cJ)
550+func cK () = {
551+ let cL = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], b)
552+ let cM = split(valueOrElse(getString(C, "%s__multisig"), cL), b)
553+ let cN = ((((if (sigVerify(cJ.bodyBytes, cJ.proofs[0], fromBase58String(cM[0])))
523554 then 1
524- else 0) + (if (sigVerify(cs.bodyBytes, cs.proofs[1], fromBase58String(cu[1])))
555+ else 0) + (if (sigVerify(cJ.bodyBytes, cJ.proofs[1], fromBase58String(cM[1])))
525556 then 1
526- else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[2], fromBase58String(cu[2])))
557+ else 0)) + (if (sigVerify(cJ.bodyBytes, cJ.proofs[2], fromBase58String(cM[2])))
527558 then 1
528- else 0)) + (if (sigVerify(cs.bodyBytes, cs.proofs[3], fromBase58String(cu[3])))
559+ else 0)) + (if (sigVerify(cJ.bodyBytes, cJ.proofs[3], fromBase58String(cM[3])))
529560 then 2
530561 else 0))
531- (cv >= 3)
562+ (cN >= 3)
532563 }
533564

github/deemru/w8io/873ac7e 
196.60 ms