tx · quD6he62NydGksnG2U9Cgp7Jdn99xNvwo2aS5mmACpX

3MucnifgqjCVTQDsVvyBbDfUYL4NzUJme6c:  -0.01400000 Waves

2022.02.04 16:40 [1908939] smart account 3MucnifgqjCVTQDsVvyBbDfUYL4NzUJme6c > SELF 0.00000000 Waves

{ "type": 13, "id": "quD6he62NydGksnG2U9Cgp7Jdn99xNvwo2aS5mmACpX", "fee": 1400000, "feeAssetId": null, "timestamp": 1643982044762, "version": 2, "chainId": 84, "sender": "3MucnifgqjCVTQDsVvyBbDfUYL4NzUJme6c", "senderPublicKey": "5VeehaC8J2hY5k7GyMevtfCSC4on8kxpPvqqQqNe5erh", "proofs": [ "4TePTm6aMmbxWB4Eqe2p6JcH95eYV3KyTGGiMEFQBtL7eMWsKd13W1w9YExNf6TnKyiTCGoDQfaWynd85EyxwYh4" ], "script": "base64:AAIFAAAAAAAAAAwIAhIICgYIAQEBAQEAAABGAAAAAAZwYXJhbXMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAECAAAAIzNOMmpaYUgxakxaNXVoS2tOaWs2Z2VBNTdIek1Hdzk4aWdSAAAAAA1rZXlJbml0VjFEb25lAgAAAAxpbml0X3YxX2RvbmUAAAAACmtleVRva2VuSWQCAAAAB3Rva2VuSWQAAAAAG2tleUluaXRpYWxDaGFyQ3JlYXRpb25TdGF0cwIAAAAYaW5pdGlhbENoYXJDcmVhdGlvblN0YXRzAAAAAAlzZXBhcmF0b3ICAAAAAV8AAAAAEGtleUl0ZW1zSWRzQ291bnQCAAAADWl0ZW1zSWRzQ291bnQAAAAAEWtleVNwZWxsc0lkc0NvdW50AgAAAA5zcGVsbHNJZHNDb3VudAAAAAAPa2V5TW9ic0lkc0NvdW50AgAAAAxtb2JzSWRzQ291bnQAAAAAC2tleUl0ZW1UeXBlAgAAAAhpdGVtVHlwZQAAAAAQa2V5SXRlbVN0YXQxVHlwZQIAAAANaXRlbVN0YXQxVHlwZQAAAAAQa2V5SXRlbVN0YXQyVHlwZQIAAAANaXRlbVN0YXQyVHlwZQAAAAAQa2V5SXRlbVN0YXQzVHlwZQIAAAANaXRlbVN0YXQzVHlwZQAAAAARa2V5SXRlbVN0YXQxVmFsdWUCAAAADml0ZW1TdGF0MVZhbHVlAAAAABFrZXlJdGVtU3RhdDJWYWx1ZQIAAAAOaXRlbVN0YXQyVmFsdWUAAAAAEWtleUl0ZW1TdGF0M1ZhbHVlAgAAAA5pdGVtU3RhdDNWYWx1ZQAAAAAPa2V5U3BlbGxEbWdUeXBlAgAAAAlzcGVsbEVsZW0AAAAADmtleVNwZWxsTWluRG1nAgAAAAtzcGVsbE1pbkRtZwAAAAAOa2V5U3BlbGxNYXhEbWcCAAAAC3NwZWxsTWF4RG1nAAAAABFrZXlTcGVsbFN0YXQxVHlwZQIAAAAOc3BlbGxTdGF0MVR5cGUAAAAAEWtleVNwZWxsU3RhdDJUeXBlAgAAAA5zcGVsbFN0YXQyVHlwZQAAAAARa2V5U3BlbGxTdGF0M1R5cGUCAAAADnNwZWxsU3RhdDNUeXBlAAAAABJrZXlTcGVsbFN0YXQxVmFsdWUCAAAAD3NwZWxsU3RhdDFWYWx1ZQAAAAASa2V5U3BlbGxTdGF0MlZhbHVlAgAAAA9zcGVsbFN0YXQyVmFsdWUAAAAAEmtleVNwZWxsU3RhdDNWYWx1ZQIAAAAPc3BlbGxTdGF0M1ZhbHVlAAAAABNrZXlNb2JDdXJyZW50SGVhbHRoAgAAABBtb2JDdXJyZW50SGVhbHRoAAAAAA9rZXlNb2JNYXhIZWFsdGgCAAAADG1vYk1heEhlYWx0aAAAAAAPa2V5TW9iRXhwUG9pbnRzAgAAAAxtb2JFeHBQb2ludHMAAAAACmtleU1vYkdvbGQCAAAAB21vYkdvbGQAAAAAEGtleU1vYkxvb3RDaGFuY2UCAAAADW1vYkxvb3RDaGFuY2UAAAAADWtleU1vYlN0YWZmSWQCAAAACm1vYlN0YWZmSWQAAAAADGtleU1vYlJvYmVJZAIAAAAJbW9iUm9iZUlkAAAAAAxrZXlNb2JSaW5nSWQCAAAACW1vYlJpbmdJZAAAAAAOa2V5TW9iU3BlbGwxSWQCAAAAC21vYlNwZWxsMUlkAAAAAA5rZXlNb2JTcGVsbDJJZAIAAAALbW9iU3BlbGwySWQAAAAADmtleU1vYlNwZWxsM0lkAgAAAAttb2JTcGVsbDNJZAAAAAAHa2V5TmFtZQIAAAAEbmFtZQAAAAAGa2V5U2V4AgAAAANzZXgAAAAAB2tleVJhbmsCAAAABHJhbmsAAAAAEGtleUhlYWx0aEN1cnJlbnQCAAAADWhlYWx0aEN1cnJlbnQAAAAADGtleUhlYWx0aE1heAIAAAAJaGVhbHRoTWF4AAAAABNrZXlNaW5IZWFsdGhQZXJSYW5rAgAAABBtaW5IZWFsdGhQZXJSYW5rAAAAABNrZXlNYXhIZWFsdGhQZXJSYW5rAgAAABBtYXhIZWFsdGhQZXJSYW5rAAAAAA5rZXlIZWFsdGhSZWdlbgIAAAALaGVhbHRoUmVnZW4AAAAAGGtleU1pbkhlYWx0aFJlZ2VuUGVyUmFuawIAAAAVbWluSGVhbHRoUmVnZW5QZXJSYW5rAAAAABhrZXlNYXhIZWFsdGhSZWdlblBlclJhbmsCAAAAFW1heEhlYWx0aFJlZ2VuUGVyUmFuawAAAAAOa2V5TWFuYUN1cnJlbnQCAAAAC21hbmFDdXJyZW50AAAAAAprZXlNYW5hTWF4AgAAAAdtYW5hTWF4AAAAABFrZXlNaW5NYW5hUGVyUmFuawIAAAAObWluTWFuYVBlclJhbmsAAAAAEWtleU1heE1hbmFQZXJSYW5rAgAAAA5tYXhNYW5hUGVyUmFuawAAAAAMa2V5TWFuYVJlZ2VuAgAAAAltYW5hUmVnZW4AAAAAFmtleU1pbk1hbmFSZWdlblBlclJhbmsCAAAAE21pbk1hbmFSZWdlblBlclJhbmsAAAAAFmtleU1heE1hbmFSZWdlblBlclJhbmsCAAAAE21heE1hbmFSZWdlblBlclJhbmsAAAAAB2tleVB5cm8CAAAABHB5cm8AAAAAEWtleU1pblB5cm9QZXJSYW5rAgAAAA5taW5QeXJvUGVyUmFuawAAAAARa2V5TWF4UHlyb1BlclJhbmsCAAAADm1heFB5cm9QZXJSYW5rAAAAAAdrZXlBZXJvAgAAAARhZXJvAAAAABFrZXlNaW5BZXJvUGVyUmFuawIAAAAObWluQWVyb1BlclJhbmsAAAAAEWtleU1heEFlcm9QZXJSYW5rAgAAAA5tYXhBZXJvUGVyUmFuawAAAAAHa2V5QXF1YQIAAAAEYXF1YQAAAAARa2V5TWluQXF1YVBlclJhbmsCAAAADm1pbkFxdWFQZXJSYW5rAAAAABFrZXlNYXhBcXVhUGVyUmFuawIAAAAObWF4QXF1YVBlclJhbmsAAAAACGtleVRlcnJhAgAAAAV0ZXJyYQAAAAASa2V5TWluVGVycmFQZXJSYW5rAgAAAA9taW5UZXJyYVBlclJhbmsAAAAAEmtleU1heFRlcnJhUGVyUmFuawIAAAAPbWF4VGVycmFQZXJSYW5rAQAAAAR3aXRoAAAAAgAAAARzdHIxAAAABHN0cjIJAAEsAAAAAgkAASwAAAACBQAAAARzdHIxBQAAAAlzZXBhcmF0b3IFAAAABHN0cjIBAAAAEmdldEN1cnJlbnRSYW5kSGFzaAAAAAEAAAAEdHhJZAkAC1QAAAABCQAAywAAAAIJAQAAAAV2YWx1ZQAAAAEICQEAAAAFdmFsdWUAAAABCQAD7QAAAAEFAAAABmhlaWdodAAAAAN2cmYFAAAABHR4SWQBAAAAB3JhbmRJbnQAAAAEAAAAA21pbgAAAANtYXgAAAAIcmFuZEhhc2gAAAAFbm9uY2UJAABkAAAAAgkAAGoAAAACCQAE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U3RhdDNUeXBlBQAAAApzcGVsbElkU3RyBQAAAAJzMwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABJrZXlTcGVsbFN0YXQxVmFsdWUFAAAACnNwZWxsSWRTdHIFAAAAAnYxCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAEmtleVNwZWxsU3RhdDJWYWx1ZQUAAAAKc3BlbGxJZFN0cgUAAAACdjIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAASa2V5U3BlbGxTdGF0M1ZhbHVlBQAAAApzcGVsbElkU3RyBQAAAAJ2MwUAAAADbmlsAQAAABBnZW5lcmF0ZU1vYkVudHJ5AAAAAgAAAAhyYW5kSGFzaAAAAAxjdXJyZW50Tm9uY2UEAAAADWN1cnJlbnRJdGVtSWQJAQAAABFAZXh0ck5hdGl2ZSgxMDU1KQAAAAEFAAAAEGtleUl0ZW1zSWRzQ291bnQEAAAADmN1cnJlbnRTcGVsbElkCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAABFrZXlTcGVsbHNJZHNDb3VudAQAAAAMY3VycmVudE1vYklkCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABBQAAAA9rZXlNb2JzSWRzQ291bnQEAAAAD2N1cnJlbnRNb2JJZFN0cgkAAaQAAAABBQAAAAxjdXJyZW50TW9iSWQEAAAABXN0YWZmCQEAAAAMZ2VuZXJhdGVJdGVtAAAABAAAAAAAAAAAAAUAAAANY3VycmVudEl0ZW1JZAUAAAAIcmFuZEhhc2gJAABkAAAAAgUAAAAMY3VycmVudE5vbmNlAAAAAAAAAABkBAAAAARyb2JlCQEAAAAMZ2VuZXJhdGVJdGVtAAAABAAAAAAAAAAAAQkAAGQAAAACBQAAAA1jdXJyZW50SXRlbUlkAAAAAAAAAAABBQAAAAhyYW5kSGFzaAkAAGQAAAACBQAAAAxjdXJyZW50Tm9uY2UAAAAAAAAAAMgEAAAABHJpbmcJAQAAAAxnZW5lcmF0ZUl0ZW0AAAAEAAAAAAAAAAACCQAAZAAAAAIFAAAADWN1cnJlbnRJdGVtSWQAAAAAAAAAAAIFAAAACHJhbmRIYXNoCQAAZAAAAAIFAAAADGN1cnJlbnROb25jZQAAAAAAAAABLAQAAAAGc3BlbGwxCQEAAAANZ2VuZXJhdGVTcGVsbAAAAAMFAAAADmN1cnJlbnRTcGVsbElkBQAAAAhyYW5kSGFzaAkAAGQAAAACBQAAAAxjdXJyZW50Tm9uY2UAAAAAAAAAAZAEAAAABnNwZWxsMgkBAAAADWdlbmVyYXRlU3BlbGwAAAADCQAAZAAAAAIFAAAADmN1cnJlbnRTcGVsbElkAAAAAAAAAAABBQAAAAhyYW5kSGFzaAkAAGQAAAACBQAAAAxjdXJyZW50Tm9uY2UAAAAAAAAAAfQEAAAABnNwZWxsMwkBAAAADWdlbmVyYXRlU3BlbGwAAAADCQAAZAAAAAIFAAAADmN1cnJlbnRTcGVsbElkAAAAAAAAAAACBQAAAAhyYW5kSGFzaAkAAGQAAAACBQAAAAxjdXJyZW50Tm9uY2UAAAAAAAAAAlgEAAAACW1vYkhlYWx0aAkBAAAAB3JhbmRJbnQAAAAEAAAAAAAAAAPoAAAAAAAAAAXcBQAAAAhyYW5kSGFzaAkAAGQAAAACBQAAAAxjdXJyZW50Tm9uY2UAAAAAAAAAArwEAAAABm1vYkV4cAkBAAAAB3JhbmRJbnQAAAAEAAAAAAAAAABkAAAAAAAAAADIBQAAAAhyYW5kSGFzaAkAAGQAAAACBQAAAAxjdXJyZW50Tm9uY2UAAAAAAAAAAr0EAAAAB21vYkdvbGQJAQAAAAdyYW5kSW50AAAABAAAAAAAAAAB9AAAAAAAAAAH0AUAAAAIcmFuZEhhc2gJAABkAAAAAgUAAAAMY3VycmVudE5vbmNlAAAAAAAAAAK+BAAAAA1tb2JMb290Q2hhbmNlCQEAAAAHcmFuZEludAAAAAQAAAAAAAAAAAUAAAAAAAAAABQFAAAACHJhbmRIYXNoCQAAZAAAAAIFAAAADGN1cnJlbnROb25jZQAAAAAAAAACvwkABE4AAAACCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAAROAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABNrZXlNb2JDdXJyZW50SGVhbHRoBQAAAA9jdXJyZW50TW9iSWRTdHIFAAAACW1vYkhlYWx0aAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAAA9rZXlNb2JNYXhIZWFsdGgFAAAAD2N1cnJlbnRNb2JJZFN0cgUAAAAJbW9iSGVhbHRoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAD2tleU1vYkV4cFBvaW50cwUAAAAPY3VycmVudE1vYklkU3RyBQAAAAZtb2JFeHAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAAKa2V5TW9iR29sZAUAAAAPY3VycmVudE1vYklkU3RyBQAAAAdtb2JHb2xkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAEGtleU1vYkxvb3RDaGFuY2UFAAAAD2N1cnJlbnRNb2JJZFN0cgUAAAANbW9iTG9vdENoYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAAA1rZXlNb2JTdGFmZklkBQAAAA9jdXJyZW50TW9iSWRTdHIFAAAADWN1cnJlbnRJdGVtSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAAMa2V5TW9iUm9iZUlkBQAAAA9jdXJyZW50TW9iSWRTdHIJAABkAAAAAgUAAAANY3VycmVudEl0ZW1JZAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAAAxrZXlNb2JSaW5nSWQFAAAAD2N1cnJlbnRNb2JJZFN0cgkAAGQAAAACBQAAAA1jdXJyZW50SXRlbUlkAAAAAAAAAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAADmtleU1vYlNwZWxsMUlkBQAAAA9jdXJyZW50TW9iSWRTdHIFAAAADmN1cnJlbnRTcGVsbElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAADmtleU1vYlNwZWxs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blRlcnJhBQAAAAV0ZXJyYQUAAAAIcmFuZEhhc2gAAAAAAAAAAAcEAAAACG1vYkVudHJ5CQEAAAAQZ2VuZXJhdGVNb2JFbnRyeQAAAAIFAAAACHJhbmRIYXNoAAAAAAAAAABkCQAETgAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAAAdrZXlOYW1lBQAAAAljaGFySWRTdHIFAAAABG5hbWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAAGa2V5U2V4BQAAAAljaGFySWRTdHIFAAAAA3NleAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAAAdrZXlSYW5rBQAAAAljaGFySWRTdHIAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAAQa2V5SGVhbHRoQ3VycmVudAUAAAAJY2hhcklkU3RyBQAAAApyYW5kSGVhbHRoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAADGtleUhlYWx0aE1heAUAAAAJY2hhcklkU3RyBQAAAApyYW5kSGVhbHRoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAE2tleU1pbkhlYWx0aFBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAJbWluSGVhbHRoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAE2tleU1heEhlYWx0aFBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAJbWluSGVhbHRoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAADmtleUhlYWx0aFJlZ2VuBQAAAAljaGFySWRTdHIFAAAAD3JhbmRIZWFsdGhSZWdlbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABhrZXlNaW5IZWFsdGhSZWdlblBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAObWluSGVhbHRoUmVnZW4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAAYa2V5TWF4SGVhbHRoUmVnZW5QZXJSYW5rBQAAAAljaGFySWRTdHIFAAAADm1heEhlYWx0aFJlZ2VuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAADmtleU1hbmFDdXJyZW50BQAAAAljaGFySWRTdHIFAAAACHJhbmRNYW5hCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAACmtleU1hbmFNYXgFAAAACWNoYXJJZFN0cgUAAAAIcmFuZE1hbmEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAARa2V5TWluTWFuYVBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAHbWluTWFuYQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABFrZXlNYXhNYW5hUGVyUmFuawUAAAAJY2hhcklkU3RyBQAAAAdtYXhNYW5hCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAADGtleU1hbmFSZWdlbgUAAAAJY2hhcklkU3RyBQAAAA1yYW5kTWFuYVJlZ2VuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAFmtleU1pbk1hbmFSZWdlblBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAMbWluTWFuYVJlZ2VuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAFmtleU1heE1hbmFSZWdlblBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAMbWF4TWFuYVJlZ2VuCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAB2tleVB5cm8FAAAACWNoYXJJZFN0cgUAAAAIcmFuZFB5cm8JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAARa2V5TWluUHlyb1BlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAHbWluUHlybwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABFrZXlNYXhQeXJvUGVyUmFuawUAAAAJY2hhcklkU3RyBQAAAARweXJvCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAB2tleUFlcm8FAAAACWNoYXJJZFN0cgUAAAAIcmFuZEFlcm8JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAARa2V5TWluQWVyb1BlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAHbWluQWVybwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABFrZXlNYXhBZXJvUGVyUmFuawUAAAAJY2hhcklkU3RyBQAAAARhZXJvCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAAB2tleUFxdWEFAAAACWNoYXJJZFN0cgUAAAAIcmFuZEFxdWEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAARa2V5TWluQXF1YVBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAHbWluQXF1YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABFrZXlNYXhBcXVhUGVyUmFuawUAAAAJY2hhcklkU3RyBQAAAARhcXVhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAEd2l0aAAAAAIFAAAACGtleVRlcnJhBQAAAAljaGFySWRTdHIFAAAACXJhbmRUZXJyYQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABHdpdGgAAAACBQAAABJrZXlNaW5UZXJyYVBlclJhbmsFAAAACWNoYXJJZFN0cgUAAAAIbWluVGVycmEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAR3aXRoAAAAAgUAAAASa2V5TWF4VGVycmFQZXJSYW5rBQAAAAljaGFySWRTdHIFAAAABXRlcnJhCQAETAAAAAIFAAAACWNoYXJJc3N1ZQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIAAAAAAAAAAAEFAAAABmNoYXJJZAUAAAADbmlsBQAAAAhtb2JFbnRyeQAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5dQsvQQ==", "height": 1908939, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GsrYNRJs4Q5w4vdjaKKv11HytnEvJcCqSkMWuxiHNmoh Next: 2Ho5XorzWUpkp24CvTFdf2BawSUYBYR57uZ8ny9n1HEV Diff:
OldNewDifferences
1010 let keyInitialCharCreationStats = "initialCharCreationStats"
1111
1212 let separator = "_"
13+
14+let keyItemsIdsCount = "itemsIdsCount"
15+
16+let keySpellsIdsCount = "spellsIdsCount"
17+
18+let keyMobsIdsCount = "mobsIdsCount"
19+
20+let keyItemType = "itemType"
21+
22+let keyItemStat1Type = "itemStat1Type"
23+
24+let keyItemStat2Type = "itemStat2Type"
25+
26+let keyItemStat3Type = "itemStat3Type"
27+
28+let keyItemStat1Value = "itemStat1Value"
29+
30+let keyItemStat2Value = "itemStat2Value"
31+
32+let keyItemStat3Value = "itemStat3Value"
33+
34+let keySpellDmgType = "spellElem"
35+
36+let keySpellMinDmg = "spellMinDmg"
37+
38+let keySpellMaxDmg = "spellMaxDmg"
39+
40+let keySpellStat1Type = "spellStat1Type"
41+
42+let keySpellStat2Type = "spellStat2Type"
43+
44+let keySpellStat3Type = "spellStat3Type"
45+
46+let keySpellStat1Value = "spellStat1Value"
47+
48+let keySpellStat2Value = "spellStat2Value"
49+
50+let keySpellStat3Value = "spellStat3Value"
51+
52+let keyMobCurrentHealth = "mobCurrentHealth"
53+
54+let keyMobMaxHealth = "mobMaxHealth"
55+
56+let keyMobExpPoints = "mobExpPoints"
57+
58+let keyMobGold = "mobGold"
59+
60+let keyMobLootChance = "mobLootChance"
61+
62+let keyMobStaffId = "mobStaffId"
63+
64+let keyMobRobeId = "mobRobeId"
65+
66+let keyMobRingId = "mobRingId"
67+
68+let keyMobSpell1Id = "mobSpell1Id"
69+
70+let keyMobSpell2Id = "mobSpell2Id"
71+
72+let keyMobSpell3Id = "mobSpell3Id"
1373
1474 let keyName = "name"
1575
72132 func with (str1,str2) = ((str1 + separator) + str2)
73133
74134
75-func randInt (min,max,txId,nonce) = ((toInt(sha256_16Kb((value(value(blockInfoByHeight(height)).vrf) + txId)), nonce) % ((max - min) + 1)) + min)
135+func getCurrentRandHash (txId) = sha256_16Kb((value(value(blockInfoByHeight(height)).vrf) + txId))
136+
137+
138+func randInt (min,max,randHash,nonce) = ((toInt(randHash, nonce) % ((max - min) + 1)) + min)
139+
140+
141+func generateItem (type,itemId,randHash,currentNonce) = {
142+ let statsRange = [[1, 5], [5, 25], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [5, 15], [5, 15], [5, 15], [1, 5], [5, 10]]
143+ let statsAvailable = if ((type == 0))
144+ then [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14]
145+ else if ((type == 1))
146+ then [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13]
147+ else if ((type == 2))
148+ then [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
149+ else throw("Unknown item type")
150+ let statsAmount = size(statsAvailable)
151+ let s1 = statsAvailable[randInt(0, (statsAmount - 1), randHash, (currentNonce + 1))]
152+ let s2 = statsAvailable[randInt(0, (statsAmount - 1), randHash, (currentNonce + 2))]
153+ let s3 = statsAvailable[randInt(0, (statsAmount - 1), randHash, (currentNonce + 3))]
154+ let v1 = randInt(statsRange[s1][0], statsRange[s1][1], randHash, (currentNonce + 4))
155+ let v2 = randInt(statsRange[s2][0], statsRange[s2][1], randHash, (currentNonce + 5))
156+ let v3 = randInt(statsRange[s3][0], statsRange[s3][1], randHash, (currentNonce + 6))
157+ let itemIdStr = toString(itemId)
158+[IntegerEntry(with(keyItemType, itemIdStr), type), IntegerEntry(with(keyItemStat1Type, itemIdStr), s1), IntegerEntry(with(keyItemStat2Type, itemIdStr), s2), IntegerEntry(with(keyItemStat3Type, itemIdStr), s3), IntegerEntry(with(keyItemStat1Value, itemIdStr), v1), IntegerEntry(with(keyItemStat2Value, itemIdStr), v2), IntegerEntry(with(keyItemStat3Value, itemIdStr), v3)]
159+ }
160+
161+
162+func generateSpell (spellId,randHash,currentNonce) = {
163+ let statsRange = [[1, 5], [5, 25], [100, 200], [100, 150], [1, 5], [1, 5], [1, 5], [1, 5], [5, 10]]
164+ let dmgType = randInt(0, 3, randHash, (currentNonce + 1))
165+ let dmgMinRange = randInt(200, 250, randHash, (currentNonce + 2))
166+ let dmgMaxRange = randInt(251, 400, randHash, (currentNonce + 3))
167+ let s1 = randInt(0, 8, randHash, (currentNonce + 4))
168+ let s2 = randInt(0, 8, randHash, (currentNonce + 5))
169+ let s3 = randInt(0, 8, randHash, (currentNonce + 6))
170+ let v1 = randInt(statsRange[s1][0], statsRange[s1][1], randHash, (currentNonce + 7))
171+ let v2 = randInt(statsRange[s2][0], statsRange[s2][1], randHash, (currentNonce + 8))
172+ let v3 = randInt(statsRange[s3][0], statsRange[s3][1], randHash, (currentNonce + 9))
173+ let spellIdStr = toString(spellId)
174+[IntegerEntry(with(keySpellDmgType, spellIdStr), dmgType), IntegerEntry(with(keySpellMinDmg, spellIdStr), dmgMinRange), IntegerEntry(with(keySpellMaxDmg, spellIdStr), dmgMaxRange), IntegerEntry(with(keySpellStat1Type, spellIdStr), s1), IntegerEntry(with(keySpellStat2Type, spellIdStr), s2), IntegerEntry(with(keySpellStat3Type, spellIdStr), s3), IntegerEntry(with(keySpellStat1Value, spellIdStr), v1), IntegerEntry(with(keySpellStat2Value, spellIdStr), v2), IntegerEntry(with(keySpellStat3Value, spellIdStr), v3)]
175+ }
176+
177+
178+func generateMobEntry (randHash,currentNonce) = {
179+ let currentItemId = getIntegerValue(keyItemsIdsCount)
180+ let currentSpellId = getIntegerValue(keySpellsIdsCount)
181+ let currentMobId = getIntegerValue(keyMobsIdsCount)
182+ let currentMobIdStr = toString(currentMobId)
183+ let staff = generateItem(0, currentItemId, randHash, (currentNonce + 100))
184+ let robe = generateItem(1, (currentItemId + 1), randHash, (currentNonce + 200))
185+ let ring = generateItem(2, (currentItemId + 2), randHash, (currentNonce + 300))
186+ let spell1 = generateSpell(currentSpellId, randHash, (currentNonce + 400))
187+ let spell2 = generateSpell((currentSpellId + 1), randHash, (currentNonce + 500))
188+ let spell3 = generateSpell((currentSpellId + 2), randHash, (currentNonce + 600))
189+ let mobHealth = randInt(1000, 1500, randHash, (currentNonce + 700))
190+ let mobExp = randInt(100, 200, randHash, (currentNonce + 701))
191+ let mobGold = randInt(500, 2000, randHash, (currentNonce + 702))
192+ let mobLootChance = randInt(5, 20, randHash, (currentNonce + 703))
193+ (((((([IntegerEntry(with(keyMobCurrentHealth, currentMobIdStr), mobHealth), IntegerEntry(with(keyMobMaxHealth, currentMobIdStr), mobHealth), IntegerEntry(with(keyMobExpPoints, currentMobIdStr), mobExp), IntegerEntry(with(keyMobGold, currentMobIdStr), mobGold), IntegerEntry(with(keyMobLootChance, currentMobIdStr), mobLootChance), IntegerEntry(with(keyMobStaffId, currentMobIdStr), currentItemId), IntegerEntry(with(keyMobRobeId, currentMobIdStr), (currentItemId + 1)), IntegerEntry(with(keyMobRingId, currentMobIdStr), (currentItemId + 2)), IntegerEntry(with(keyMobSpell1Id, currentMobIdStr), currentSpellId), IntegerEntry(with(keyMobSpell2Id, currentMobIdStr), (currentSpellId + 1)), IntegerEntry(with(keyMobSpell3Id, currentMobIdStr), (currentSpellId + 2)), IntegerEntry(keyItemsIdsCount, (currentItemId + 3)), IntegerEntry(keySpellsIdsCount, (currentSpellId + 3)), IntegerEntry(keyMobsIdsCount, (currentMobId + 1))] ++ staff) ++ robe) ++ ring) ++ spell1) ++ spell2) ++ spell3)
194+ }
76195
77196
78197 @Callable(i)
125244 let charIssue = Issue(name, "", 1, 0, false, unit, 0)
126245 let charId = calculateAssetId(charIssue)
127246 let charIdStr = toBase58String(charId)
128- let tx = i.transactionId
247+ let randHash = getCurrentRandHash(i.transactionId)
129248 let minHealth = parseIntValue(initialStats[3])
130249 let maxHealth = parseIntValue(initialStats[4])
131- let randHealth = (parseIntValue(initialStats[2]) + randInt(minHealth, maxHealth, tx, 0))
250+ let randHealth = (parseIntValue(initialStats[2]) + randInt(minHealth, maxHealth, randHash, 0))
132251 let minHealthRegen = parseIntValue(initialStats[6])
133252 let maxHealthRegen = parseIntValue(initialStats[7])
134- let randHealthRegen = (parseIntValue(initialStats[5]) + randInt(minHealthRegen, maxHealthRegen, tx, 1))
253+ let randHealthRegen = (parseIntValue(initialStats[5]) + randInt(minHealthRegen, maxHealthRegen, randHash, 1))
135254 let minMana = parseIntValue(initialStats[9])
136255 let maxMana = parseIntValue(initialStats[10])
137- let randMana = (parseIntValue(initialStats[8]) + randInt(minMana, maxMana, tx, 2))
256+ let randMana = (parseIntValue(initialStats[8]) + randInt(minMana, maxMana, randHash, 2))
138257 let minManaRegen = parseIntValue(initialStats[12])
139258 let maxManaRegen = parseIntValue(initialStats[13])
140- let randManaRegen = (parseIntValue(initialStats[11]) + randInt(minManaRegen, maxManaRegen, tx, 3))
259+ let randManaRegen = (parseIntValue(initialStats[11]) + randInt(minManaRegen, maxManaRegen, randHash, 3))
141260 let minPyro = parseIntValue(initialStats[14])
142- let randPyro = randInt(minPyro, pyro, tx, 4)
261+ let randPyro = randInt(minPyro, pyro, randHash, 4)
143262 let minAero = parseIntValue(initialStats[15])
144- let randAero = randInt(minAero, aero, tx, 5)
263+ let randAero = randInt(minAero, aero, randHash, 5)
145264 let minAqua = parseIntValue(initialStats[16])
146- let randAqua = randInt(minAqua, aqua, tx, 6)
265+ let randAqua = randInt(minAqua, aqua, randHash, 6)
147266 let minTerra = parseIntValue(initialStats[17])
148- let randTerra = randInt(minTerra, terra, tx, 7)
149-[StringEntry(with(keyName, charIdStr), name), IntegerEntry(with(keySex, charIdStr), sex), IntegerEntry(with(keyRank, charIdStr), 1), IntegerEntry(with(keyHealthCurrent, charIdStr), randHealth), IntegerEntry(with(keyHealthMax, charIdStr), randHealth), IntegerEntry(with(keyMinHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyMaxHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyHealthRegen, charIdStr), randHealthRegen), IntegerEntry(with(keyMinHealthRegenPerRank, charIdStr), minHealthRegen), IntegerEntry(with(keyMaxHealthRegenPerRank, charIdStr), maxHealthRegen), IntegerEntry(with(keyManaCurrent, charIdStr), randMana), IntegerEntry(with(keyManaMax, charIdStr), randMana), IntegerEntry(with(keyMinManaPerRank, charIdStr), minMana), IntegerEntry(with(keyMaxManaPerRank, charIdStr), maxMana), IntegerEntry(with(keyManaRegen, charIdStr), randManaRegen), IntegerEntry(with(keyMinManaRegenPerRank, charIdStr), minManaRegen), IntegerEntry(with(keyMaxManaRegenPerRank, charIdStr), maxManaRegen), IntegerEntry(with(keyPyro, charIdStr), randPyro), IntegerEntry(with(keyMinPyroPerRank, charIdStr), minPyro), IntegerEntry(with(keyMaxPyroPerRank, charIdStr), pyro), IntegerEntry(with(keyAero, charIdStr), randAero), IntegerEntry(with(keyMinAeroPerRank, charIdStr), minAero), IntegerEntry(with(keyMaxAeroPerRank, charIdStr), aero), IntegerEntry(with(keyAqua, charIdStr), randAqua), IntegerEntry(with(keyMinAquaPerRank, charIdStr), minAqua), IntegerEntry(with(keyMaxAquaPerRank, charIdStr), aqua), IntegerEntry(with(keyTerra, charIdStr), randTerra), IntegerEntry(with(keyMinTerraPerRank, charIdStr), minTerra), IntegerEntry(with(keyMaxTerraPerRank, charIdStr), terra), charIssue, ScriptTransfer(i.caller, 1, charId), IntegerEntry("test", toInt(value(value(blockInfoByHeight(height)).vrf))), IntegerEntry("test2", toInt(value(value(blockInfoByHeight(height)).vrf))), IntegerEntry("test3", toInt(value(value(blockInfoByHeight(height)).vrf)))]
267+ let randTerra = randInt(minTerra, terra, randHash, 7)
268+ let mobEntry = generateMobEntry(randHash, 100)
269+ ([StringEntry(with(keyName, charIdStr), name), IntegerEntry(with(keySex, charIdStr), sex), IntegerEntry(with(keyRank, charIdStr), 1), IntegerEntry(with(keyHealthCurrent, charIdStr), randHealth), IntegerEntry(with(keyHealthMax, charIdStr), randHealth), IntegerEntry(with(keyMinHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyMaxHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyHealthRegen, charIdStr), randHealthRegen), IntegerEntry(with(keyMinHealthRegenPerRank, charIdStr), minHealthRegen), IntegerEntry(with(keyMaxHealthRegenPerRank, charIdStr), maxHealthRegen), IntegerEntry(with(keyManaCurrent, charIdStr), randMana), IntegerEntry(with(keyManaMax, charIdStr), randMana), IntegerEntry(with(keyMinManaPerRank, charIdStr), minMana), IntegerEntry(with(keyMaxManaPerRank, charIdStr), maxMana), IntegerEntry(with(keyManaRegen, charIdStr), randManaRegen), IntegerEntry(with(keyMinManaRegenPerRank, charIdStr), minManaRegen), IntegerEntry(with(keyMaxManaRegenPerRank, charIdStr), maxManaRegen), IntegerEntry(with(keyPyro, charIdStr), randPyro), IntegerEntry(with(keyMinPyroPerRank, charIdStr), minPyro), IntegerEntry(with(keyMaxPyroPerRank, charIdStr), pyro), IntegerEntry(with(keyAero, charIdStr), randAero), IntegerEntry(with(keyMinAeroPerRank, charIdStr), minAero), IntegerEntry(with(keyMaxAeroPerRank, charIdStr), aero), IntegerEntry(with(keyAqua, charIdStr), randAqua), IntegerEntry(with(keyMinAquaPerRank, charIdStr), minAqua), IntegerEntry(with(keyMaxAquaPerRank, charIdStr), aqua), IntegerEntry(with(keyTerra, charIdStr), randTerra), IntegerEntry(with(keyMinTerraPerRank, charIdStr), minTerra), IntegerEntry(with(keyMaxTerraPerRank, charIdStr), terra), charIssue, ScriptTransfer(i.caller, 1, charId)] ++ mobEntry)
150270 }
151271 }
152272
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let params = addressFromStringValue("3N2jZaH1jLZ5uhKkNik6geA57HzMGw98igR")
55
66 let keyInitV1Done = "init_v1_done"
77
88 let keyTokenId = "tokenId"
99
1010 let keyInitialCharCreationStats = "initialCharCreationStats"
1111
1212 let separator = "_"
13+
14+let keyItemsIdsCount = "itemsIdsCount"
15+
16+let keySpellsIdsCount = "spellsIdsCount"
17+
18+let keyMobsIdsCount = "mobsIdsCount"
19+
20+let keyItemType = "itemType"
21+
22+let keyItemStat1Type = "itemStat1Type"
23+
24+let keyItemStat2Type = "itemStat2Type"
25+
26+let keyItemStat3Type = "itemStat3Type"
27+
28+let keyItemStat1Value = "itemStat1Value"
29+
30+let keyItemStat2Value = "itemStat2Value"
31+
32+let keyItemStat3Value = "itemStat3Value"
33+
34+let keySpellDmgType = "spellElem"
35+
36+let keySpellMinDmg = "spellMinDmg"
37+
38+let keySpellMaxDmg = "spellMaxDmg"
39+
40+let keySpellStat1Type = "spellStat1Type"
41+
42+let keySpellStat2Type = "spellStat2Type"
43+
44+let keySpellStat3Type = "spellStat3Type"
45+
46+let keySpellStat1Value = "spellStat1Value"
47+
48+let keySpellStat2Value = "spellStat2Value"
49+
50+let keySpellStat3Value = "spellStat3Value"
51+
52+let keyMobCurrentHealth = "mobCurrentHealth"
53+
54+let keyMobMaxHealth = "mobMaxHealth"
55+
56+let keyMobExpPoints = "mobExpPoints"
57+
58+let keyMobGold = "mobGold"
59+
60+let keyMobLootChance = "mobLootChance"
61+
62+let keyMobStaffId = "mobStaffId"
63+
64+let keyMobRobeId = "mobRobeId"
65+
66+let keyMobRingId = "mobRingId"
67+
68+let keyMobSpell1Id = "mobSpell1Id"
69+
70+let keyMobSpell2Id = "mobSpell2Id"
71+
72+let keyMobSpell3Id = "mobSpell3Id"
1373
1474 let keyName = "name"
1575
1676 let keySex = "sex"
1777
1878 let keyRank = "rank"
1979
2080 let keyHealthCurrent = "healthCurrent"
2181
2282 let keyHealthMax = "healthMax"
2383
2484 let keyMinHealthPerRank = "minHealthPerRank"
2585
2686 let keyMaxHealthPerRank = "maxHealthPerRank"
2787
2888 let keyHealthRegen = "healthRegen"
2989
3090 let keyMinHealthRegenPerRank = "minHealthRegenPerRank"
3191
3292 let keyMaxHealthRegenPerRank = "maxHealthRegenPerRank"
3393
3494 let keyManaCurrent = "manaCurrent"
3595
3696 let keyManaMax = "manaMax"
3797
3898 let keyMinManaPerRank = "minManaPerRank"
3999
40100 let keyMaxManaPerRank = "maxManaPerRank"
41101
42102 let keyManaRegen = "manaRegen"
43103
44104 let keyMinManaRegenPerRank = "minManaRegenPerRank"
45105
46106 let keyMaxManaRegenPerRank = "maxManaRegenPerRank"
47107
48108 let keyPyro = "pyro"
49109
50110 let keyMinPyroPerRank = "minPyroPerRank"
51111
52112 let keyMaxPyroPerRank = "maxPyroPerRank"
53113
54114 let keyAero = "aero"
55115
56116 let keyMinAeroPerRank = "minAeroPerRank"
57117
58118 let keyMaxAeroPerRank = "maxAeroPerRank"
59119
60120 let keyAqua = "aqua"
61121
62122 let keyMinAquaPerRank = "minAquaPerRank"
63123
64124 let keyMaxAquaPerRank = "maxAquaPerRank"
65125
66126 let keyTerra = "terra"
67127
68128 let keyMinTerraPerRank = "minTerraPerRank"
69129
70130 let keyMaxTerraPerRank = "maxTerraPerRank"
71131
72132 func with (str1,str2) = ((str1 + separator) + str2)
73133
74134
75-func randInt (min,max,txId,nonce) = ((toInt(sha256_16Kb((value(value(blockInfoByHeight(height)).vrf) + txId)), nonce) % ((max - min) + 1)) + min)
135+func getCurrentRandHash (txId) = sha256_16Kb((value(value(blockInfoByHeight(height)).vrf) + txId))
136+
137+
138+func randInt (min,max,randHash,nonce) = ((toInt(randHash, nonce) % ((max - min) + 1)) + min)
139+
140+
141+func generateItem (type,itemId,randHash,currentNonce) = {
142+ let statsRange = [[1, 5], [5, 25], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [1, 5], [5, 15], [5, 15], [5, 15], [1, 5], [5, 10]]
143+ let statsAvailable = if ((type == 0))
144+ then [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14]
145+ else if ((type == 1))
146+ then [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13]
147+ else if ((type == 2))
148+ then [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
149+ else throw("Unknown item type")
150+ let statsAmount = size(statsAvailable)
151+ let s1 = statsAvailable[randInt(0, (statsAmount - 1), randHash, (currentNonce + 1))]
152+ let s2 = statsAvailable[randInt(0, (statsAmount - 1), randHash, (currentNonce + 2))]
153+ let s3 = statsAvailable[randInt(0, (statsAmount - 1), randHash, (currentNonce + 3))]
154+ let v1 = randInt(statsRange[s1][0], statsRange[s1][1], randHash, (currentNonce + 4))
155+ let v2 = randInt(statsRange[s2][0], statsRange[s2][1], randHash, (currentNonce + 5))
156+ let v3 = randInt(statsRange[s3][0], statsRange[s3][1], randHash, (currentNonce + 6))
157+ let itemIdStr = toString(itemId)
158+[IntegerEntry(with(keyItemType, itemIdStr), type), IntegerEntry(with(keyItemStat1Type, itemIdStr), s1), IntegerEntry(with(keyItemStat2Type, itemIdStr), s2), IntegerEntry(with(keyItemStat3Type, itemIdStr), s3), IntegerEntry(with(keyItemStat1Value, itemIdStr), v1), IntegerEntry(with(keyItemStat2Value, itemIdStr), v2), IntegerEntry(with(keyItemStat3Value, itemIdStr), v3)]
159+ }
160+
161+
162+func generateSpell (spellId,randHash,currentNonce) = {
163+ let statsRange = [[1, 5], [5, 25], [100, 200], [100, 150], [1, 5], [1, 5], [1, 5], [1, 5], [5, 10]]
164+ let dmgType = randInt(0, 3, randHash, (currentNonce + 1))
165+ let dmgMinRange = randInt(200, 250, randHash, (currentNonce + 2))
166+ let dmgMaxRange = randInt(251, 400, randHash, (currentNonce + 3))
167+ let s1 = randInt(0, 8, randHash, (currentNonce + 4))
168+ let s2 = randInt(0, 8, randHash, (currentNonce + 5))
169+ let s3 = randInt(0, 8, randHash, (currentNonce + 6))
170+ let v1 = randInt(statsRange[s1][0], statsRange[s1][1], randHash, (currentNonce + 7))
171+ let v2 = randInt(statsRange[s2][0], statsRange[s2][1], randHash, (currentNonce + 8))
172+ let v3 = randInt(statsRange[s3][0], statsRange[s3][1], randHash, (currentNonce + 9))
173+ let spellIdStr = toString(spellId)
174+[IntegerEntry(with(keySpellDmgType, spellIdStr), dmgType), IntegerEntry(with(keySpellMinDmg, spellIdStr), dmgMinRange), IntegerEntry(with(keySpellMaxDmg, spellIdStr), dmgMaxRange), IntegerEntry(with(keySpellStat1Type, spellIdStr), s1), IntegerEntry(with(keySpellStat2Type, spellIdStr), s2), IntegerEntry(with(keySpellStat3Type, spellIdStr), s3), IntegerEntry(with(keySpellStat1Value, spellIdStr), v1), IntegerEntry(with(keySpellStat2Value, spellIdStr), v2), IntegerEntry(with(keySpellStat3Value, spellIdStr), v3)]
175+ }
176+
177+
178+func generateMobEntry (randHash,currentNonce) = {
179+ let currentItemId = getIntegerValue(keyItemsIdsCount)
180+ let currentSpellId = getIntegerValue(keySpellsIdsCount)
181+ let currentMobId = getIntegerValue(keyMobsIdsCount)
182+ let currentMobIdStr = toString(currentMobId)
183+ let staff = generateItem(0, currentItemId, randHash, (currentNonce + 100))
184+ let robe = generateItem(1, (currentItemId + 1), randHash, (currentNonce + 200))
185+ let ring = generateItem(2, (currentItemId + 2), randHash, (currentNonce + 300))
186+ let spell1 = generateSpell(currentSpellId, randHash, (currentNonce + 400))
187+ let spell2 = generateSpell((currentSpellId + 1), randHash, (currentNonce + 500))
188+ let spell3 = generateSpell((currentSpellId + 2), randHash, (currentNonce + 600))
189+ let mobHealth = randInt(1000, 1500, randHash, (currentNonce + 700))
190+ let mobExp = randInt(100, 200, randHash, (currentNonce + 701))
191+ let mobGold = randInt(500, 2000, randHash, (currentNonce + 702))
192+ let mobLootChance = randInt(5, 20, randHash, (currentNonce + 703))
193+ (((((([IntegerEntry(with(keyMobCurrentHealth, currentMobIdStr), mobHealth), IntegerEntry(with(keyMobMaxHealth, currentMobIdStr), mobHealth), IntegerEntry(with(keyMobExpPoints, currentMobIdStr), mobExp), IntegerEntry(with(keyMobGold, currentMobIdStr), mobGold), IntegerEntry(with(keyMobLootChance, currentMobIdStr), mobLootChance), IntegerEntry(with(keyMobStaffId, currentMobIdStr), currentItemId), IntegerEntry(with(keyMobRobeId, currentMobIdStr), (currentItemId + 1)), IntegerEntry(with(keyMobRingId, currentMobIdStr), (currentItemId + 2)), IntegerEntry(with(keyMobSpell1Id, currentMobIdStr), currentSpellId), IntegerEntry(with(keyMobSpell2Id, currentMobIdStr), (currentSpellId + 1)), IntegerEntry(with(keyMobSpell3Id, currentMobIdStr), (currentSpellId + 2)), IntegerEntry(keyItemsIdsCount, (currentItemId + 3)), IntegerEntry(keySpellsIdsCount, (currentSpellId + 3)), IntegerEntry(keyMobsIdsCount, (currentMobId + 1))] ++ staff) ++ robe) ++ ring) ++ spell1) ++ spell2) ++ spell3)
194+ }
76195
77196
78197 @Callable(i)
79198 func create (name,sex,pyro,aero,aqua,terra) = {
80199 let initialStats = split(getStringValue(params, keyInitialCharCreationStats), separator)
81200 let nameSize = size(name)
82201 if (if ((parseIntValue(initialStats[0]) > nameSize))
83202 then true
84203 else (nameSize > parseIntValue(initialStats[1])))
85204 then throw("Char name size not valid")
86205 else if (if (contains(name, " "))
87206 then true
88207 else contains(name, separator))
89208 then throw((("Whitespaces or " + separator) + " not allowed"))
90209 else if (if ((sex != 1))
91210 then (sex != 2)
92211 else false)
93212 then throw("Somethings wrong with char sex")
94213 else if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (((((pyro + aero) + aqua) + terra) != 14))
95214 then true
96215 else (2 > pyro))
97216 then true
98217 else (pyro > 5))
99218 then true
100219 else (2 > aero))
101220 then true
102221 else (aero > 5))
103222 then true
104223 else (2 > aqua))
105224 then true
106225 else (aqua > 5))
107226 then true
108227 else (2 > terra))
109228 then true
110229 else (terra > 5))
111230 then true
112231 else (pyro == aero))
113232 then true
114233 else (pyro == aqua))
115234 then true
116235 else (pyro == terra))
117236 then true
118237 else (aero == aqua))
119238 then true
120239 else (aero == terra))
121240 then true
122241 else (aqua == terra))
123242 then throw("Elem spec issue")
124243 else {
125244 let charIssue = Issue(name, "", 1, 0, false, unit, 0)
126245 let charId = calculateAssetId(charIssue)
127246 let charIdStr = toBase58String(charId)
128- let tx = i.transactionId
247+ let randHash = getCurrentRandHash(i.transactionId)
129248 let minHealth = parseIntValue(initialStats[3])
130249 let maxHealth = parseIntValue(initialStats[4])
131- let randHealth = (parseIntValue(initialStats[2]) + randInt(minHealth, maxHealth, tx, 0))
250+ let randHealth = (parseIntValue(initialStats[2]) + randInt(minHealth, maxHealth, randHash, 0))
132251 let minHealthRegen = parseIntValue(initialStats[6])
133252 let maxHealthRegen = parseIntValue(initialStats[7])
134- let randHealthRegen = (parseIntValue(initialStats[5]) + randInt(minHealthRegen, maxHealthRegen, tx, 1))
253+ let randHealthRegen = (parseIntValue(initialStats[5]) + randInt(minHealthRegen, maxHealthRegen, randHash, 1))
135254 let minMana = parseIntValue(initialStats[9])
136255 let maxMana = parseIntValue(initialStats[10])
137- let randMana = (parseIntValue(initialStats[8]) + randInt(minMana, maxMana, tx, 2))
256+ let randMana = (parseIntValue(initialStats[8]) + randInt(minMana, maxMana, randHash, 2))
138257 let minManaRegen = parseIntValue(initialStats[12])
139258 let maxManaRegen = parseIntValue(initialStats[13])
140- let randManaRegen = (parseIntValue(initialStats[11]) + randInt(minManaRegen, maxManaRegen, tx, 3))
259+ let randManaRegen = (parseIntValue(initialStats[11]) + randInt(minManaRegen, maxManaRegen, randHash, 3))
141260 let minPyro = parseIntValue(initialStats[14])
142- let randPyro = randInt(minPyro, pyro, tx, 4)
261+ let randPyro = randInt(minPyro, pyro, randHash, 4)
143262 let minAero = parseIntValue(initialStats[15])
144- let randAero = randInt(minAero, aero, tx, 5)
263+ let randAero = randInt(minAero, aero, randHash, 5)
145264 let minAqua = parseIntValue(initialStats[16])
146- let randAqua = randInt(minAqua, aqua, tx, 6)
265+ let randAqua = randInt(minAqua, aqua, randHash, 6)
147266 let minTerra = parseIntValue(initialStats[17])
148- let randTerra = randInt(minTerra, terra, tx, 7)
149-[StringEntry(with(keyName, charIdStr), name), IntegerEntry(with(keySex, charIdStr), sex), IntegerEntry(with(keyRank, charIdStr), 1), IntegerEntry(with(keyHealthCurrent, charIdStr), randHealth), IntegerEntry(with(keyHealthMax, charIdStr), randHealth), IntegerEntry(with(keyMinHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyMaxHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyHealthRegen, charIdStr), randHealthRegen), IntegerEntry(with(keyMinHealthRegenPerRank, charIdStr), minHealthRegen), IntegerEntry(with(keyMaxHealthRegenPerRank, charIdStr), maxHealthRegen), IntegerEntry(with(keyManaCurrent, charIdStr), randMana), IntegerEntry(with(keyManaMax, charIdStr), randMana), IntegerEntry(with(keyMinManaPerRank, charIdStr), minMana), IntegerEntry(with(keyMaxManaPerRank, charIdStr), maxMana), IntegerEntry(with(keyManaRegen, charIdStr), randManaRegen), IntegerEntry(with(keyMinManaRegenPerRank, charIdStr), minManaRegen), IntegerEntry(with(keyMaxManaRegenPerRank, charIdStr), maxManaRegen), IntegerEntry(with(keyPyro, charIdStr), randPyro), IntegerEntry(with(keyMinPyroPerRank, charIdStr), minPyro), IntegerEntry(with(keyMaxPyroPerRank, charIdStr), pyro), IntegerEntry(with(keyAero, charIdStr), randAero), IntegerEntry(with(keyMinAeroPerRank, charIdStr), minAero), IntegerEntry(with(keyMaxAeroPerRank, charIdStr), aero), IntegerEntry(with(keyAqua, charIdStr), randAqua), IntegerEntry(with(keyMinAquaPerRank, charIdStr), minAqua), IntegerEntry(with(keyMaxAquaPerRank, charIdStr), aqua), IntegerEntry(with(keyTerra, charIdStr), randTerra), IntegerEntry(with(keyMinTerraPerRank, charIdStr), minTerra), IntegerEntry(with(keyMaxTerraPerRank, charIdStr), terra), charIssue, ScriptTransfer(i.caller, 1, charId), IntegerEntry("test", toInt(value(value(blockInfoByHeight(height)).vrf))), IntegerEntry("test2", toInt(value(value(blockInfoByHeight(height)).vrf))), IntegerEntry("test3", toInt(value(value(blockInfoByHeight(height)).vrf)))]
267+ let randTerra = randInt(minTerra, terra, randHash, 7)
268+ let mobEntry = generateMobEntry(randHash, 100)
269+ ([StringEntry(with(keyName, charIdStr), name), IntegerEntry(with(keySex, charIdStr), sex), IntegerEntry(with(keyRank, charIdStr), 1), IntegerEntry(with(keyHealthCurrent, charIdStr), randHealth), IntegerEntry(with(keyHealthMax, charIdStr), randHealth), IntegerEntry(with(keyMinHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyMaxHealthPerRank, charIdStr), minHealth), IntegerEntry(with(keyHealthRegen, charIdStr), randHealthRegen), IntegerEntry(with(keyMinHealthRegenPerRank, charIdStr), minHealthRegen), IntegerEntry(with(keyMaxHealthRegenPerRank, charIdStr), maxHealthRegen), IntegerEntry(with(keyManaCurrent, charIdStr), randMana), IntegerEntry(with(keyManaMax, charIdStr), randMana), IntegerEntry(with(keyMinManaPerRank, charIdStr), minMana), IntegerEntry(with(keyMaxManaPerRank, charIdStr), maxMana), IntegerEntry(with(keyManaRegen, charIdStr), randManaRegen), IntegerEntry(with(keyMinManaRegenPerRank, charIdStr), minManaRegen), IntegerEntry(with(keyMaxManaRegenPerRank, charIdStr), maxManaRegen), IntegerEntry(with(keyPyro, charIdStr), randPyro), IntegerEntry(with(keyMinPyroPerRank, charIdStr), minPyro), IntegerEntry(with(keyMaxPyroPerRank, charIdStr), pyro), IntegerEntry(with(keyAero, charIdStr), randAero), IntegerEntry(with(keyMinAeroPerRank, charIdStr), minAero), IntegerEntry(with(keyMaxAeroPerRank, charIdStr), aero), IntegerEntry(with(keyAqua, charIdStr), randAqua), IntegerEntry(with(keyMinAquaPerRank, charIdStr), minAqua), IntegerEntry(with(keyMaxAquaPerRank, charIdStr), aqua), IntegerEntry(with(keyTerra, charIdStr), randTerra), IntegerEntry(with(keyMinTerraPerRank, charIdStr), minTerra), IntegerEntry(with(keyMaxTerraPerRank, charIdStr), terra), charIssue, ScriptTransfer(i.caller, 1, charId)] ++ mobEntry)
150270 }
151271 }
152272
153273
154274 @Verifier(tx)
155275 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
156276

github/deemru/w8io/873ac7e 
46.87 ms