tx · 6yySBBa3zedwV1ffXFRrmvEAamfY2NWHFr1rBZCa4B9o

3MzC83yF8x4UeBQdzXzBqDqjYmvZ5EyWbo5:  -0.01500000 Waves

2021.03.12 16:18 [1434514] smart account 3MzC83yF8x4UeBQdzXzBqDqjYmvZ5EyWbo5 > SELF 0.00000000 Waves

{ "type": 13, "id": "6yySBBa3zedwV1ffXFRrmvEAamfY2NWHFr1rBZCa4B9o", "fee": 1500000, "feeAssetId": null, "timestamp": 1615555184074, "version": 2, "chainId": 84, "sender": "3MzC83yF8x4UeBQdzXzBqDqjYmvZ5EyWbo5", "senderPublicKey": "BDozDgLsntv2g1J6jvS1uSyZkV51kQXrZTLjgzrZhaY9", "proofs": [ "2z2B9xf1Y31bB5r14xfkL9Zi9X1uhjJpPy4NQbbUP782ziKR7s9HqLNbB1QLY3gfyb8BurghxAzbGsdDQaigJkJp" ], "script": "base64:AAIDAAAAAAAAAA8IARIHCgUBAQEBCBIAEgAAAAATAAAAAApkQXBwQWRkcmVzAgAAACtGOURDR2lZZ1Q4eXZCcTFBUUZjU3BHRzRwOHNkek56OW1aY3pEdko0NUxMAAAAAAt0aWNrZXRBc3NldAEAAAAgRhz1lSBi1eJGtOgMmCIyAWadBG7dHU2jIBGpv2KvKCwAAAAADXRva2Vuc1BlclBsYXkAAAAAAAX14QAAAAAADWxvdHRlcnlhbW91bnQCAAAAB19hbW91bnQAAAAAEmxvdHRlcnlwcm9iYWJpbGl0eQIAAAAMX3Byb2JhYmlsaXR5AAAAABlsb3R0ZXJ5cHJvYmFiaWxpdHlkZWNpbWFsAgAAABRfcHJvYmFiaWxpdHlfZGVjaW1hbAAAAAAMbG90dGVyeVByaWNlAgAAAAZfcHJpY2UAAAAADWxvdHRlcnlQcmljZXMCAAAAD19sb3R0ZXJ5X3ByaWNlcwAAAAAObG90dGVyeUFzc2V0SWQCAAAAEV9sb3R0ZXJ5X2Fzc2V0X2lkAAAAAA1jb3VudE9mUHJpY2VzAgAAAA1fY291bnRfcHJpY2VzAAAAABRsYXN0SGFzaFJhbmRvbU51bWJlcgIAAAAVbGFzdF9zcGluX3JhbmRvbV9oYXNoAAAAABNsYXN0VG9rZW5SYW5kb21IYXNoAgAAABZsYXN0X3Rva2VuX3JhbmRvbV9oYXNoAAAAABBhbGxvd1NpemVMb3R0ZXJ5AAAAAAAAAAAEAAAAABF0b3RhbFByaWNlc0luUG9vbAIAAAARdG90YWxfcHJpemVzX3Bvb2wBAAAACnJhbmRvbWl6ZXIAAAABAAAAA2ludgQAAAAIbGFzdFBsYXkEAAAAByRtYXRjaDAJAAQcAAAAAgUAAAAEdGhpcwUAAAAUbGFzdEhhc2hSYW5kb21OdW1iZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQBAAAADFdhdmVzTG90dG9WMgkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgQAAAAEcmFuZAkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAMsAAAACCQAAywAAAAIFAAAACGxhc3RQ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aXNEZWZpbmVkAAAAAQUAAAAFdG9rZW4GCQEAAAACIT0AAAACBQAAAAV0b2tlbgIAAAAABAAAABB0b2tlblByb2JhYmlsaXR5CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABXRva2VuBQAAABJsb3R0ZXJ5cHJvYmFiaWxpdHkEAAAAF3Rva2VuUHJvYmFiaWxpdHlEZWNpbWFsCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABXRva2VuBQAAABlsb3R0ZXJ5cHJvYmFiaWxpdHlkZWNpbWFsBAAAAAlzaXplT2ZXaW4JAAGQAAAAAQUAAAADd2luAwkAAAAAAAACBQAAAAlzaXplT2ZXaW4AAAAAAAAAAAEEAAAADHJhbmRvbU51bWJlcgkAAZEAAAACBQAAAAN3aW4AAAAAAAAAAAAEAAAAFWNvbnZlcnRlZFJhbmRvbU51bWJlcgkAAlsAAAABBQAAAAxyYW5kb21OdW1iZXIEAAAAFmNvbnZlcnRlZERlY2ltYWxOdW1iZXIJAABoAAAAAgUAAAAXdG9rZW5Qcm9iYWJpbGl0eURlY2ltYWwAAAAAAAAAA+gEAAAAEGNvbXBhcmlzb25OdW1iZXIJAABqAAAAAgkABLEAAAABBQAAABVjb252ZXJ0ZWRSYW5kb21OdW1iZXIFAAAAFmNvbnZlcnRlZERlY2ltYWxOdW1iZXIDCQAAZgAAAAIFAAAAEHRva2VuUHJvYmFiaWxpdHkFAAAAEGNvbXBhcmlzb25OdW1iZXIJAARMAAAAAgUAAAAFdG9rZW4FAAAAA3dpbgUAAAADd2luBQAAAAN3aW4FAAAAA3dpbgAAAAMAAAABaQEAAAARdXBkYXRlcHJvYmFiaWxpdHkAAAAFAAAAC3Byb2JhYmlsaXR5AAAABmFtb3VudAAAAAlwb29scHJpY2UAAAALcHJvYkRlY2ltYWwAAAAHYXNzZXRJZAQAAAAFdG9rZW4JAAJaAAAAAQkBAAAAE2dlbmVyYXRvclJhbmRvbUhhc2gAAAABBQAAAAFpBAAAABBwYXltZW50SXNEZWZpbmVkAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAAWkAAAAHcGF5bWVu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eVByaWNlBQAAAAlwb29scHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWxvdHRlcnlQcmljZXMFAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAANY291bnRPZlByaWNlcwkAAGQAAAACBQAAAAtjb3VudFRva2VucwAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAV0b2tlbgUAAAAZbG90dGVyeXByb2JhYmlsaXR5ZGVjaW1hbAUAAAALcHJvYkRlY2ltYWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAFdG9rZW4FAAAADmxvdHRlcnlBc3NldElkBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABNsYXN0VG9rZW5SYW5kb21IYXNoBQAAAAV0b2tlbgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARdG90YWxQcmljZXNJblBvb2wFAAAAGHVwZGF0ZWRUb3RhbEFtb3VudFByaWNlcwUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgUAAAARdXBkYXRlTG90dGVyeVBvb2wJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAAA25pbAkAAAIAAAABCQABLAAAAAICAAAAI0xvdHRlcnkgcHJpY2VzIGhhcyByZWFjaGVkIG1heGltdW0gCQABpAAAAAEFAAAAEGFsbG93U2l6ZUxvdHRlcnkEAAAACXRuQmFsYW5jZQMFAAAADmxvdHRlcnlBc3NldFROCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAEdGhpcwkAA+sAAAACBQAAAAR0aGlzCQACWwAAAAEFAAAAB2Fzc2V0SWQDCQAAZgAAAAIFAAAAE3RvdGFsUmVxdWlyZWRBbW91bnQFAAAACXRuQmFsYW5jZQkAAAIAAAABAgAAABdOb3QgZW5vdWdoIEFzc2V0IEFtb3VudAQAAAAJdGVtcFZhbHVlBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAADWxvdHRlcnlQcmljZXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAIAAAAACQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAAApjb250YWluS2V5CQAEswAAAAIFAAAACXRlbXBWYWx1ZQUAAAAFdG9rZW4EAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwQAAAAHJG1hdGNoMAUAAAAKY29udGFpbktleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAkAASwAAAACCQABLAAAAAIFAAAACXRlbXBWYWx1ZQUAAAAFdG9rZW4CAAAAASwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABeAUAAAAHJG1hdGNoMAkAAAIAAAABAgAAABNUb2tlbiBpcyBkdXBsaWNhdGVkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAAAtjb3VudFRva2VucwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA1jb3VudE9mUHJpY2VzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQAAAAAAAAAAAAJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IDCQAAZgAAAAIFAAAAEGFsbG93U2l6ZUxvdHRlcnkFAAAAC2NvdW50VG9rZW5zBAAAABF1cGRhdGVMb3R0ZXJ5UG9vbAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAV0b2tlbgUAAAANbG90dGVyeWFtb3VudAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABXRva2VuBQAAABJsb3R0ZXJ5cHJvYmFiaWxpdHkFAAAAC3Byb2JhYmlsaXR5CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABXRva2VuBQAAAAxsb3R0ZXJ5UHJpY2UFAAAACXBvb2xwcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAANbG90dGVyeVByaWNlcwUAAAASc3RvcmVkVG9rZW5zVmFsdWVzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA1jb3VudE9mUHJpY2VzCQAAZAAAAAIFAAAAC2NvdW50VG9rZW5zAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAABXRva2VuBQAAABlsb3R0ZXJ5cHJvYmFiaWxpdHlkZWNpbWFsBQAAAAtwcm9iRGVjaW1hbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAV0b2tlbgUAAAAObG90dGVyeUFzc2V0SWQFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAE2xhc3RUb2tlblJhbmRvbUhhc2gFAAAABXRva2VuCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABF0b3RhbFByaWNlc0luUG9vbAUAAAAYdXBkYXRlZFRvdGFsQW1vdW50UHJpY2VzBQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACBQAAABF1cGRhdGVMb3R0ZXJ5UG9vbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAjTG90dGVyeSBwcmljZXMgaGFzIHJlYWNoZWQgbWF4aW11bSAJAAGkAAAAAQUAAAAQYWxsb3dTaXplTG90dGVyeQAAAAFpAQAAAAd0ZXN0VmFsAAAAAAQAAAALdG9rZW5BbW91bnQAAAAAAAK41cwEAAAAEXRva2VuQW1vdW50U3RyaW5nCQABpAAAAAEFAAAAC3Rva2VuQW1vdW50BAAAAApkZWNpbWFsVmFsAAAAAAAAAAAIBAAAAA90b2tlbkFtb3VudFNpemUJAAExAAAAAQkAAaQAAAABBQAAAAt0b2tlbkFtb3VudAMJAABmAAAAAgUAAAAPdG9rZW5BbW91bnRTaXplBQAAAApkZWNpbWFsVmFsBAAAAAl3cml0ZVNldHMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAB21lc3NhZ2UCAAAATTxoMT5CZXR0ZXIgbHVjayBuZXh0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MTA4MzQEAAAADyRhY2MwMTA3ODIxMDgzNAUAAAARbGlzdFdpbm5pbmdQcmljZXMDCQAAAAAAAAIFAAAADyRzaXplMTA3ODIxMDgzNAAAAAAAAAAAAAUAAAAPJGFjYzAxMDc4MjEwODM0BAAAAA8kYWNjMTEwNzgyMTA4MzQJAQAAAA1wcm9jZWRMb3R0ZXJ5AAAAAgUAAAAPJGFjYzAxMDc4MjEwODM0CQABkQAAAAIFAAAADyRsaXN0MTA3ODIxMDgzNAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAPJHNpemUxMDc4MjEwODM0AAAAAAAAAAABBQAAAA8kYWNjMTEwNzgyMTA4MzQEAAAADyRhY2MyMTA3ODIxMDgzNAkBAAAADXByb2NlZExvdHRlcnkAAAACBQAAAA8kYWNjMTEwNzgyMTA4MzQJAAGRAAAAAgUAAAAPJGxpc3QxMDc4MjEwODM0AAAAAAAAAAABAwkAAAAAAAACBQAAAA8kc2l6ZTEwNzgyMTA4MzQAAAAAAAAAAAIFAAAADyRhY2MyMTA3ODIxMDgzNAQAAAAPJGFjYzMxMDc4MjEwODM0CQEAAAANcHJvY2VkTG90dGVyeQAAAAIFAAAADyRhY2MyMTA3ODIxMDgzNAkAAZEAAAACBQAAAA8kbGlzdDEwNzgyMTA4MzQAAAAAAAAAAAIDCQAAAAAAAAIFAAAADyRzaXplMTA3ODIxMDgzNAAAAAAAAAAAAwUAAAAPJGFjYzMxMDc4MjEwODM0BAAAAA8kYWNjNDEwNzgyMTA4MzQJAQAAAA1wcm9jZWRMb3R0ZXJ5AAAAAgUAAAAPJGFjYzMxMDc4MjEwODM0CQABkQAAAAIFAAAADyRsaXN0MTA3ODIxMDgzNAAAAAAAAAAAAwMJAAAAAAAAAgUAAAAPJHNpemUxMDc4MjEwODM0AAAAAAAAAAAEBQAAAA8kYWNjNDEwNzgyMTA4MzQEAAAADyRhY2M1MTA3ODIxMDgzNAkBAAAADXByb2NlZExvdHRlcnkAAAACBQAAAA8kYWNjNDEwNzgyMTA4MzQJAAGRAAAAAgUAAAAPJGxpc3QxMDc4MjEwODM0AAAAAAAAAAAECQAAAgAAAAECAAAAEkxpc3Qgc2l6ZSBleGNlZWQgNAQAAAAPc2l6ZU9mV2luUHJpY2VzCQABkAAAAAEFAAAADHdpbm5pbmdUb2tlbgMJAAAAAAAAAgUAAAAPc2l6ZU9mV2luUHJpY2VzAAAAAAAAAAABBAAAAAl3cml0ZVNldHMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAB21lc3NhZ2UCAAAATTxoMT5CZXR0ZXIgbHVjayBuZXh0IHRpbWUhPC9oMT48YnI+PHA+SW52aXRlIG1vcmUgZnJpZW5kcyB0byBrZWVwIHBsYXlpbmcuPHA+CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRsYXN0SGFzaFJhbmRvbU51bWJlcgUAAAAKcmFuZE51bWJlcgUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgUAAAAJd3JpdGVTZXRzCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAANuaWwEAAAABXRva2VuCQABkQAAAAIFAAAADHdpbm5pbmdUb2tlbgAAAAAAAAAAAAQAAAANY3VycmVudEFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAV0b2tlbgUAAAANbG90dGVyeWFtb3VudAMJAAAAAAAAAgUAAAANY3VycmVudEFtb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAAA9BbW91bnQgZXhjZWVkZWQEAAAADGFjdHVhbEFtb3VudAkAAGUAAAACBQAAAA1jdXJyZW50QW1vdW50AAAAAAAAAAABBAAAAA50b2tlbldvbkFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAV0b2tlbgUAAAAMbG90dGVyeVByaWNlBAAAAAx0b2tlbkFzc2V0SWQJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAFdG9rZW4FAAAADmxvdHRlcnlBc3NldElkBAAAABJjdXJyZW50VG90YWxBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAARdG90YWxQcmljZXNJblBvb2wDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdAUAAAAHJG1hdGNoMAUAAAABdAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAAAAAAAAAAAAAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgQAAAANdXBkYXRlZEFtb3VudAkAAGUAAAACBQAAABJjdXJyZW50VG90YWxBbW91bnQFAAAADnRva2VuV29uQW1vdW50AwkAAAAAAAACBQAAAAxhY3R1YWxBbW91bnQAAAAAAAAAAAAEAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwQAAAAPJGxpc3QxMjQ3NTEyNTI1BQAAAAlwcmljZUxpc3QEAAAADyRzaXplMTI0NzUxMjUyNQkAAZAAAAABBQAAAA8kbGlzdDEyNDc1MTI1MjUEAAAADyRhY2MwMTI0NzUxMjUyNQUAAAAFdG9rZW4DCQAAAAAAAAIFAAAADyRzaXplMTI0NzUxMjUyNQAAAAAAAAAAAAUAAAAPJGFjYzAxMjQ3NTEyNTI1BAAAAA8kYWNjMTEyNDc1MTI1MjUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MwMTI0NzUxMjUyNQkAAZEAAAACBQAAAA8kbGlzdDEyNDc1MTI1MjUAAAAAAAAAAAADCQAAAAAAAAIFAAAADyRzaXplMTI0NzUxMjUyNQAAAAAAAAAAAQUAAAAPJGFjYzExMjQ3NTEyNTI1BAAAAA8kYWNjMjEyNDc1MTI1MjUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MxMTI0NzUxMjUyNQkAAZEAAAACBQAAAA8kbGlzdDEyNDc1MTI1MjUAAAAAAAAAAAEDCQAAAAAAAAIFAAAADyRzaXplMTI0NzUxMjUyNQAAAAAAAAAAAgUAAAAPJGFjYzIxMjQ3NTEyNTI1BAAAAA8kYWNjMzEyNDc1MTI1MjUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MyMTI0NzUxMjUyNQkAAZEAAAACBQAAAA8kbGlzdDEyNDc1MTI1MjUAAAAAAAAAAAIDCQAAAAAAAAIFAAAADyRzaXplMTI0NzUxMjUyNQAAAAAAAAAAAwUAAAAPJGFjYzMxMjQ3NTEyNTI1BAAAAA8kYWNjNDEyNDc1MTI1MjUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MzMTI0NzUxMjUyNQkAAZEAAAACBQAAAA8kbGlzdDEyNDc1MTI1MjUAAAAAAAAAAAMDCQAAAAAAAAIFAAAADyRzaXplMTI0NzUxMjUyNQAAAAAAAAAABAUAAAAPJGFjYzQxMjQ3NTEyNTI1BAAAAA8kYWNjNTEyNDc1MTI1MjUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2M0MTI0NzUxMjUyNQkAAZEAAAACBQAAAA8kbGlzdDEyNDc1MTI1MjUAAAAAAAAAAAQJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA0BAAAAAl0b2tlblNpemUJAABlAAAAAgkAAGUAAAACCQABMQAAAAEFAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwkAATEAAAABBQAAAAV0b2tlbgAAAAAAAAAAAQQAAAANdXBkYXRlZFByaWNlcwkBAAAACXRha2VSaWdodAAAAAIFAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwUAAAAJdG9rZW5TaXplBAAAAAl3cml0ZVNldHMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWNvdW50T2ZQcmljZXMJAABlAAAAAgUAAAALY291bnRUb2tlbnMAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWxvdHRlcnlQcmljZXMFAAAADXVwZGF0ZWRQcmljZXMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAFGxhc3RIYXNoUmFuZG9tTnVtYmVyBQAAAApyYW5kTnVtYmVyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABF0b3RhbFByaWNlc0luUG9vbAUAAAANdXBkYXRlZEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAHbWVzc2FnZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADU8aDE+Q29uZ3JhdHVsYXRpb25zIHlvdSB3b24hPC9oMT48YnI+PHA+WW91IGhhdmUgd29uIAkAAaQAAAABBQAAAA50b2tlbldvbkFtb3VudAIAAAABIAUAAAAMdG9rZW5Bc3NldElkAgAAAAQuPHA+BQAAAANuaWwDCQAAAAAAAAIFAAAADHRva2VuQXNzZXRJZAIAAAAABAAAAAt3aW5UcmFuc2ZlcgkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADnRva2VuV29uQW1vdW50BQAAAAR1bml0BQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACBQAAAAl3cml0ZVNldHMFAAAAC3dpblRyYW5zZmVyBAAAAA1hY3R1YWxBc3NldElkCQACWQAAAAEFAAAADHRva2VuQXNzZXRJZAQAAAALd2luVHJhbnNmZXIJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA50b2tlbldvbkFtb3VudAUAAAANYWN0dWFsQXNzZXRJZAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgUAAAAJd3JpdGVTZXRzBQAAAAt3aW5UcmFuc2ZlcgQAAAASc3RvcmVkVG9rZW5zVmFsdWVzBAAAAA8kbGlzdDE0MDg0MTQxMzQFAAAACXByaWNlTGlzdAQAAAAPJHNpemUxNDA4NDE0MTM0CQABkAAAAAEFAAAADyRsaXN0MTQwODQxNDEzNAQAAAAPJGFjYzAxNDA4NDE0MTM0BQAAAAV0b2tlbgMJAAAAAAAAAgUAAAAPJHNpemUxNDA4NDE0MTM0AAAAAAAAAAAABQAAAA8kYWNjMDE0MDg0MTQxMzQEAAAADyRhY2MxMTQwODQxNDEzNAkBAAAAF2dlbmVyYXRlTmV3TGlzdE9mUHJpY2VzAAAAAgUAAAAPJGFjYzAxNDA4NDE0MTM0CQABkQAAAAIFAAAADyRsaXN0MTQwODQxNDEzNAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAPJHNpemUxNDA4NDE0MTM0AAAAAAAAAAABBQAAAA8kYWNjMTE0MDg0MTQxMzQEAAAADyRhY2MyMTQwODQxNDEzNAkBAAAAF2dlbmVyYXRlTmV3TGlzdE9mUHJpY2VzAAAAAgUAAAAPJGFjYzExNDA4NDE0MTM0CQABkQAAAAIFAAAADyRsaXN0MTQwODQxNDEzNAAAAAAAAAAAAQMJAAAAAAAAAgUAAAAPJHNpemUxNDA4NDE0MTM0AAAAAAAAAAACBQAAAA8kYWNjMjE0MDg0MTQxMzQEAAAADyRhY2MzMTQwODQxNDEzNAkBAAAAF2dlbmVyYXRlTmV3TGlzdE9mUHJpY2VzAAAAAgUAAAAPJGFjYzIxNDA4NDE0MTM0CQABkQAAAAIFAAAADyRsaXN0MTQwODQxNDEzNAAAAAAAAAAAAgMJAAAAAAAAAgUAAAAPJHNpemUxNDA4NDE0MTM0AAAAAAAAAAADBQAAAA8kYWNjMzE0MDg0MTQxMzQEAAAADyRhY2M0MTQwODQxNDEzNAkBAAAAF2dlbmVyYXRlTmV3TGlzdE9mUHJpY2VzAAAAAgUAAAAPJGFjYzMxNDA4NDE0MTM0CQABkQAAAAIFAAAADyRsaXN0MTQwODQxNDEzNAAAAAAAAAAAAwMJAAAAAAAAAgUAAAAPJHNpemUxNDA4NDE0MTM0AAAAAAAAAAAEBQAAAA8kYWNjNDE0MDg0MTQxMzQEAAAADyRhY2M1MTQwODQxNDEzNAkBAAAAF2dlbmVyYXRlTmV3TGlzdE9mUHJpY2VzAAAAAgUAAAAPJGFjYzQxNDA4NDE0MTM0CQABkQAAAAIFAAAADyRsaXN0MTQwODQxNDEzNAAAAAAAAAAABAkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDQEAAAACXRva2VuU2l6ZQkAAGUAAAACCQAAZQAAAAIJAAExAAAAAQUAAAASc3RvcmVkVG9rZW5zVmFsdWVzCQABMQAAAAEFAAAABXRva2VuAAAAAAAAAAABBAAAAA11cGRhdGVkUHJpY2VzCQEAAAAJdGFrZVJpZ2h0AAAAAgUAAAASc3RvcmVkVG9rZW5zVmFsdWVzBQAAAAl0b2tlblNpemUEAAAACXdyaXRlU2V0cwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAV0b2tlbgUAAAANbG90dGVyeWFtb3VudAUAAAAMYWN0dWFsQW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRsYXN0SGFzaFJhbmRvbU51bWJlcgUAAAAKcmFuZE51bWJlcgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARdG90YWxQcmljZXNJblBvb2wFAAAADXVwZGF0ZWRBbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAB21lc3NhZ2UJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA1PGgxPkNvbmdyYXR1bGF0aW9ucyB5b3Ugd29uITwvaDE+PGJyPjxwPllvdSBoYXZlIHdvbiAJAAGkAAAAAQUAAAAOdG9rZW5Xb25BbW91bnQCAAAAASAFAAAADHRva2VuQXNzZXRJZAIAAAAELjxwPgUAAAADbmlsAwkAAAAAAAACBQAAAAx0b2tlbkFzc2V0SWQCAAAAAAQAAAALd2luVHJhbnNmZXIJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA50b2tlbldvbkFtb3VudAUAAAAEdW5pdAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgUAAAAJd3JpdGVTZXRzBQAAAAt3aW5UcmFuc2ZlcgQAAAANYWN0dWFsQXNzZXRJZAkAAlkAAAABBQAAAAx0b2tlbkFzc2V0SWQEAAAAC3dpblRyYW5zZmVyCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAOdG9rZW5Xb25BbW91bnQFAAAADWFjdHVhbEFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIFAAAACXdyaXRlU2V0cwUAAAALd2luVHJhbnNmZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAACVlvdSBuZWVkIAkAAlgAAAABBQAAAAt0aWNrZXRBc3NldAIAAAATIHRvIHBsYXkgdGhpcyBnYW1lLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4CQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleSYUDgg=", "height": 1434514, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let dAppAddres = "F9DCGiYgT8yvBq1AQFcSpGG4p8sdzNz9mZczDvJ45LL"
5+
6+let ticketAsset = base58'5ih9jd4KV9kSey55yvKMgLSHcwsYYkQ4pRDJtRNoxUhy'
7+
8+let tokensPerPlay = 100000000
9+
10+let lotteryamount = "_amount"
11+
12+let lotteryprobability = "_probability"
13+
14+let lotteryprobabilitydecimal = "_probability_decimal"
15+
16+let lotteryPrice = "_price"
17+
18+let lotteryPrices = "_lottery_prices"
19+
20+let lotteryAssetId = "_lottery_asset_id"
21+
22+let countOfPrices = "_count_prices"
23+
24+let lastHashRandomNumber = "last_spin_random_hash"
25+
26+let lastTokenRandomHash = "last_token_random_hash"
27+
28+let allowSizeLottery = 4
29+
30+let totalPricesInPool = "total_prizes_pool"
31+
32+func randomizer (inv) = {
33+ let lastPlay = match getBinary(this, lastHashRandomNumber) {
34+ case s: ByteVector =>
35+ s
36+ case _: Unit =>
37+ base58'2ee4oFDYriWJ9EMeR'
38+ case _ =>
39+ throw("Match error")
40+ }
41+ let rand = (((((lastPlay + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
42+ sha256(rand)
43+ }
44+
45+
46+func generatorRandomHash (inv) = {
47+ let lastHashForToken = match getBinary(this, lastTokenRandomHash) {
48+ case s: ByteVector =>
49+ s
50+ case _: Unit =>
51+ base58'4dD7osCQzvuXJdTiGfKvTwnKT'
52+ case _ =>
53+ throw("Match error")
54+ }
55+ let rand = (((((lastHashForToken + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
56+ sha256(rand)
57+ }
58+
59+
60+func getPriceArray () = {
61+ let currentPrices = match getString(this, lotteryPrices) {
62+ case a: String =>
63+ a
64+ case _: Unit =>
65+ ""
66+ case _ =>
67+ throw("Match error")
68+ }
69+ let sizePrices = size(currentPrices)
70+ if ((sizePrices == 0))
71+ then nil
72+ else {
73+ let trimPrices = take(currentPrices, (size(currentPrices) - 1))
74+ let newArray = split(trimPrices, ",")
75+ newArray
76+ }
77+ }
78+
79+
80+func generateNewListOfPrices (token,val) = if (isDefined(val))
81+ then {
82+ let indexOfComma = indexOf(token, ",")
83+ let tokenAlreadyExist = indexOf(token, val)
84+ if (if (!(isDefined(indexOfComma)))
85+ then !(isDefined(tokenAlreadyExist))
86+ else false)
87+ then ((token + val) + ",")
88+ else if (if (!(isDefined(indexOfComma)))
89+ then isDefined(tokenAlreadyExist)
90+ else false)
91+ then (val + ",")
92+ else if (if (isDefined(tokenAlreadyExist))
93+ then isDefined(indexOfComma)
94+ else false)
95+ then token
96+ else if (if (isDefined(indexOfComma))
97+ then !(isDefined(tokenAlreadyExist))
98+ else false)
99+ then ((token + val) + ",")
100+ else ""
101+ }
102+ else token
103+
104+
105+func procedLottery (win,token) = if (if (isDefined(token))
106+ then true
107+ else (token != ""))
108+ then {
109+ let tokenProbability = getIntegerValue(this, (token + lotteryprobability))
110+ let tokenProbabilityDecimal = getIntegerValue(this, (token + lotteryprobabilitydecimal))
111+ let sizeOfWin = size(win)
112+ if ((sizeOfWin == 1))
113+ then {
114+ let randomNumber = win[0]
115+ let convertedRandomNumber = fromBase64String(randomNumber)
116+ let convertedDecimalNumber = (tokenProbabilityDecimal * 1000)
117+ let comparisonNumber = (toInt(convertedRandomNumber) % convertedDecimalNumber)
118+ if ((tokenProbability > comparisonNumber))
119+ then token :: win
120+ else win
121+ }
122+ else win
123+ }
124+ else win
125+
126+
127+@Callable(i)
128+func updateprobability (probability,amount,poolprice,probDecimal,assetId) = {
129+ let token = toBase64String(generatorRandomHash(i))
130+ let paymentIsDefined = if (!(isDefined(i.payment)))
131+ then false
132+ else true
133+ let lotteryAssetTN = if ((assetId == ""))
134+ then true
135+ else false
136+ let totalRequiredAmount = (amount * poolprice)
137+ let currentTotalAmount = match getInteger(this, totalPricesInPool) {
138+ case t: Int =>
139+ t
140+ case _: Unit =>
141+ 0
142+ case _ =>
143+ throw("Match error")
144+ }
145+ let updatedTotalAmountPrices = (currentTotalAmount + totalRequiredAmount)
146+ if ((paymentIsDefined == true))
147+ then {
148+ let payment = extract(i.payment)
149+ let paymentAssetId = match payment.assetId {
150+ case a: ByteVector =>
151+ toBase58String(a)
152+ case _: Unit =>
153+ ""
154+ case _ =>
155+ throw("Match error")
156+ }
157+ let paymentAmount = payment.amount
158+ if ((paymentAssetId != assetId))
159+ then throw("Asset Id not matching with Payment Asset Id")
160+ else if ((totalRequiredAmount > paymentAmount))
161+ then throw("Not enough Asset Amount")
162+ else {
163+ let tempValue = match getString(this, lotteryPrices) {
164+ case a: String =>
165+ a
166+ case _: Unit =>
167+ ""
168+ case _ =>
169+ throw("Match error")
170+ }
171+ let containKey = indexOf(tempValue, token)
172+ let storedTokensValues = match containKey {
173+ case _: Unit =>
174+ ((tempValue + token) + ",")
175+ case x: Int =>
176+ throw("Token is duplicated")
177+ case _ =>
178+ throw("Match error")
179+ }
180+ let countTokens = match getInteger(this, countOfPrices) {
181+ case a: Int =>
182+ a
183+ case _: Unit =>
184+ 0
185+ case _ =>
186+ throw("Match error")
187+ }
188+ if ((allowSizeLottery > countTokens))
189+ then {
190+ let updateLotteryPool = WriteSet([DataEntry((token + lotteryamount), amount), DataEntry((token + lotteryprobability), probability), DataEntry((token + lotteryPrice), poolprice), DataEntry(lotteryPrices, storedTokensValues), DataEntry(countOfPrices, (countTokens + 1)), DataEntry((token + lotteryprobabilitydecimal), probDecimal), DataEntry((token + lotteryAssetId), assetId), DataEntry(lastTokenRandomHash, token), DataEntry(totalPricesInPool, updatedTotalAmountPrices)])
191+ ScriptResult(updateLotteryPool, TransferSet(nil))
192+ }
193+ else throw(("Lottery prices has reached maximum " + toString(allowSizeLottery)))
194+ }
195+ }
196+ else {
197+ let tnBalance = if (lotteryAssetTN)
198+ then wavesBalance(this)
199+ else assetBalance(this, fromBase64String(assetId))
200+ if ((totalRequiredAmount > tnBalance))
201+ then throw("Not enough Asset Amount")
202+ else {
203+ let tempValue = match getString(this, lotteryPrices) {
204+ case a: String =>
205+ a
206+ case _: Unit =>
207+ ""
208+ case _ =>
209+ throw("Match error")
210+ }
211+ let containKey = indexOf(tempValue, token)
212+ let storedTokensValues = match containKey {
213+ case _: Unit =>
214+ ((tempValue + token) + ",")
215+ case x: Int =>
216+ throw("Token is duplicated")
217+ case _ =>
218+ throw("Match error")
219+ }
220+ let countTokens = match getInteger(this, countOfPrices) {
221+ case a: Int =>
222+ a
223+ case _: Unit =>
224+ 0
225+ case _ =>
226+ throw("Match error")
227+ }
228+ if ((allowSizeLottery > countTokens))
229+ then {
230+ let updateLotteryPool = WriteSet([DataEntry((token + lotteryamount), amount), DataEntry((token + lotteryprobability), probability), DataEntry((token + lotteryPrice), poolprice), DataEntry(lotteryPrices, storedTokensValues), DataEntry(countOfPrices, (countTokens + 1)), DataEntry((token + lotteryprobabilitydecimal), probDecimal), DataEntry((token + lotteryAssetId), assetId), DataEntry(lastTokenRandomHash, token), DataEntry(totalPricesInPool, updatedTotalAmountPrices)])
231+ ScriptResult(updateLotteryPool, TransferSet(nil))
232+ }
233+ else throw(("Lottery prices has reached maximum " + toString(allowSizeLottery)))
234+ }
235+ }
236+ }
237+
238+
239+
240+@Callable(i)
241+func testVal () = {
242+ let tokenAmount = 45667788
243+ let tokenAmountString = toString(tokenAmount)
244+ let decimalVal = 8
245+ let tokenAmountSize = size(toString(tokenAmount))
246+ if ((tokenAmountSize > decimalVal))
247+ then {
248+ let writeSets = WriteSet([DataEntry("message", "<h1>Better luck next time!</h1><br><p>Invite more friends to keep playing.<p>")])
249+ ScriptResult(writeSets, TransferSet(nil))
250+ }
251+ else if ((tokenAmountSize == decimalVal))
252+ then {
253+ let valTemp = (decimalVal - tokenAmountSize)
254+ let firstNumber = take(tokenAmountString, 1)
255+ let lastNumbers = takeRight(toString(tokenAmount), (decimalVal - 1))
256+ let finalNumber = ((firstNumber + ".") + lastNumbers)
257+ let writeSets = WriteSet([DataEntry("message", ("<h1>Better luck next time!</h1><br><p>.<p>" + finalNumber))])
258+ ScriptResult(writeSets, TransferSet(nil))
259+ }
260+ else {
261+ let valTemp = (decimalVal - tokenAmountSize)
262+ let writeSets = WriteSet([DataEntry("message", "<h1>Better luck next time!</h1><br><p>Invite more friends to keep playing.<p>")])
263+ ScriptResult(writeSets, TransferSet(nil))
264+ }
265+ }
266+
267+
268+
269+@Callable(i)
270+func startlotto () = {
271+ let paymentIsDefined = if (!(isDefined(i.payment)))
272+ then false
273+ else true
274+ if ((paymentIsDefined == true))
275+ then {
276+ let pmt = extract(i.payment)
277+ if (if ((pmt.assetId != ticketAsset))
278+ then true
279+ else (pmt.amount != tokensPerPlay))
280+ then throw("Incorrect asset passed or incorrect quantity passed")
281+ else {
282+ let currentKey = toBase58String(i.caller.bytes)
283+ let randhash = randomizer(i)
284+ let countTokens = match getInteger(this, countOfPrices) {
285+ case a: Int =>
286+ a
287+ case _: Unit =>
288+ 0
289+ case _ =>
290+ throw("Match error")
291+ }
292+ let priceList = getPriceArray()
293+ let randNumber = toBase64String(randhash)
294+ let updNumber = fromBase64String(randNumber)
295+ let listWinningPrices = [randNumber]
296+ let winningToken = {
297+ let $list1078210834 = priceList
298+ let $size1078210834 = size($list1078210834)
299+ let $acc01078210834 = listWinningPrices
300+ if (($size1078210834 == 0))
301+ then $acc01078210834
302+ else {
303+ let $acc11078210834 = procedLottery($acc01078210834, $list1078210834[0])
304+ if (($size1078210834 == 1))
305+ then $acc11078210834
306+ else {
307+ let $acc21078210834 = procedLottery($acc11078210834, $list1078210834[1])
308+ if (($size1078210834 == 2))
309+ then $acc21078210834
310+ else {
311+ let $acc31078210834 = procedLottery($acc21078210834, $list1078210834[2])
312+ if (($size1078210834 == 3))
313+ then $acc31078210834
314+ else {
315+ let $acc41078210834 = procedLottery($acc31078210834, $list1078210834[3])
316+ if (($size1078210834 == 4))
317+ then $acc41078210834
318+ else {
319+ let $acc51078210834 = procedLottery($acc41078210834, $list1078210834[4])
320+ throw("List size exceed 4")
321+ }
322+ }
323+ }
324+ }
325+ }
326+ }
327+ let sizeOfWinPrices = size(winningToken)
328+ if ((sizeOfWinPrices == 1))
329+ then {
330+ let writeSets = WriteSet([DataEntry("message", "<h1>Better luck next time!</h1><br><p>Invite more friends to keep playing.<p>"), DataEntry(lastHashRandomNumber, randNumber)])
331+ ScriptResult(writeSets, TransferSet(nil))
332+ }
333+ else {
334+ let token = winningToken[0]
335+ let currentAmount = getIntegerValue(this, (token + lotteryamount))
336+ if ((currentAmount == 0))
337+ then throw("Amount exceeded")
338+ else {
339+ let actualAmount = (currentAmount - 1)
340+ let tokenWonAmount = getIntegerValue(this, (token + lotteryPrice))
341+ let tokenAssetId = getStringValue(this, (token + lotteryAssetId))
342+ let currentTotalAmount = match getInteger(this, totalPricesInPool) {
343+ case t: Int =>
344+ t
345+ case _: Unit =>
346+ 0
347+ case _ =>
348+ throw("Match error")
349+ }
350+ let updatedAmount = (currentTotalAmount - tokenWonAmount)
351+ if ((actualAmount == 0))
352+ then {
353+ let storedTokensValues = {
354+ let $list1247512525 = priceList
355+ let $size1247512525 = size($list1247512525)
356+ let $acc01247512525 = token
357+ if (($size1247512525 == 0))
358+ then $acc01247512525
359+ else {
360+ let $acc11247512525 = generateNewListOfPrices($acc01247512525, $list1247512525[0])
361+ if (($size1247512525 == 1))
362+ then $acc11247512525
363+ else {
364+ let $acc21247512525 = generateNewListOfPrices($acc11247512525, $list1247512525[1])
365+ if (($size1247512525 == 2))
366+ then $acc21247512525
367+ else {
368+ let $acc31247512525 = generateNewListOfPrices($acc21247512525, $list1247512525[2])
369+ if (($size1247512525 == 3))
370+ then $acc31247512525
371+ else {
372+ let $acc41247512525 = generateNewListOfPrices($acc31247512525, $list1247512525[3])
373+ if (($size1247512525 == 4))
374+ then $acc41247512525
375+ else {
376+ let $acc51247512525 = generateNewListOfPrices($acc41247512525, $list1247512525[4])
377+ throw("List size exceed 4")
378+ }
379+ }
380+ }
381+ }
382+ }
383+ }
384+ let tokenSize = ((size(storedTokensValues) - size(token)) - 1)
385+ let updatedPrices = takeRight(storedTokensValues, tokenSize)
386+ let writeSets = WriteSet([DataEntry(countOfPrices, (countTokens - 1)), DataEntry(lotteryPrices, updatedPrices), DataEntry(lastHashRandomNumber, randNumber), DataEntry(totalPricesInPool, updatedAmount), DataEntry("message", (((("<h1>Congratulations you won!</h1><br><p>You have won " + toString(tokenWonAmount)) + " ") + tokenAssetId) + ".<p>"))])
387+ if ((tokenAssetId == ""))
388+ then {
389+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, unit)])
390+ ScriptResult(writeSets, winTransfer)
391+ }
392+ else {
393+ let actualAssetId = fromBase58String(tokenAssetId)
394+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, actualAssetId)])
395+ ScriptResult(writeSets, winTransfer)
396+ }
397+ }
398+ else {
399+ let storedTokensValues = {
400+ let $list1408414134 = priceList
401+ let $size1408414134 = size($list1408414134)
402+ let $acc01408414134 = token
403+ if (($size1408414134 == 0))
404+ then $acc01408414134
405+ else {
406+ let $acc11408414134 = generateNewListOfPrices($acc01408414134, $list1408414134[0])
407+ if (($size1408414134 == 1))
408+ then $acc11408414134
409+ else {
410+ let $acc21408414134 = generateNewListOfPrices($acc11408414134, $list1408414134[1])
411+ if (($size1408414134 == 2))
412+ then $acc21408414134
413+ else {
414+ let $acc31408414134 = generateNewListOfPrices($acc21408414134, $list1408414134[2])
415+ if (($size1408414134 == 3))
416+ then $acc31408414134
417+ else {
418+ let $acc41408414134 = generateNewListOfPrices($acc31408414134, $list1408414134[3])
419+ if (($size1408414134 == 4))
420+ then $acc41408414134
421+ else {
422+ let $acc51408414134 = generateNewListOfPrices($acc41408414134, $list1408414134[4])
423+ throw("List size exceed 4")
424+ }
425+ }
426+ }
427+ }
428+ }
429+ }
430+ let tokenSize = ((size(storedTokensValues) - size(token)) - 1)
431+ let updatedPrices = takeRight(storedTokensValues, tokenSize)
432+ let writeSets = WriteSet([DataEntry((token + lotteryamount), actualAmount), DataEntry(lastHashRandomNumber, randNumber), DataEntry(totalPricesInPool, updatedAmount), DataEntry("message", (((("<h1>Congratulations you won!</h1><br><p>You have won " + toString(tokenWonAmount)) + " ") + tokenAssetId) + ".<p>"))])
433+ if ((tokenAssetId == ""))
434+ then {
435+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, unit)])
436+ ScriptResult(writeSets, winTransfer)
437+ }
438+ else {
439+ let actualAssetId = fromBase58String(tokenAssetId)
440+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, actualAssetId)])
441+ ScriptResult(writeSets, winTransfer)
442+ }
443+ }
444+ }
445+ }
446+ }
447+ }
448+ else throw((("You need " + toBase58String(ticketAsset)) + " to play this game."))
449+ }
450+
451+
452+@Verifier(tx)
453+func verify () = match tx {
454+ case _ =>
455+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
456+}
457+

github/deemru/w8io/169f3d6 
42.17 ms