tx · By9SnEdHFPKFkQN1onahqQYa23A21TEqihqTptSPft9p

3MxgXJQzgYvVTKWuwpSamDCEmbvwu8Bub4n:  -0.01500000 Waves

2021.04.22 17:12 [1493752] smart account 3MxgXJQzgYvVTKWuwpSamDCEmbvwu8Bub4n > SELF 0.00000000 Waves

{ "type": 13, "id": "By9SnEdHFPKFkQN1onahqQYa23A21TEqihqTptSPft9p", "fee": 1500000, "feeAssetId": null, "timestamp": 1619100876275, "version": 2, "chainId": 84, "sender": "3MxgXJQzgYvVTKWuwpSamDCEmbvwu8Bub4n", "senderPublicKey": "BYYEiCUhkG9TfZv868ZRGyBBw5rFSnXUQhptK3ZMkosv", "proofs": [ "5b7tLrKKqk8tgLqBqokWKVACwx7JteMo9W1nRPuXUvCRbQHsfCgRp6HAK8pniouDPjWKQMAJwXvbNobkZRwvWmSH" ], "script": "base64:AAIDAAAAAAAAAA8IARIAEgcKBQEBAQEIEgAAAAAVAAAAAApkQXBwQWRkcmVzAgAAACtGOURDR2lZZ1Q4eXZCcTFBUUZjU3BHRzRwOHNkek56OW1aY3pEdko0NUxMAAAAAAt0aWNrZXRBc3NldAEAAAAgRhz1lSBi1eJGtOgMmCIyAWadBG7dHU2jIBGpv2KvKCwAAAAADXRva2Vuc1BlclBsYXkAAAAAAAX14QAAAAAADWxvdHRlcnlhbW91bnQCAAAAB19hbW91bnQAAAAAEmxvdHRlcnlwcm9iYWJpbGl0eQIAAAAMX3Byb2JhYmlsaXR5AAAAABlsb3R0ZXJ5cHJvYmFiaWxpdHlkZWNpbWFsAgAAABRfcHJvYmFiaWxpdHlfZGVjaW1hbAAAAAAMbG90dGVyeVByaWNlAgAAAAZfcHJpY2UAAAAADWxvdHRlcnlQcmljZXMCAAAAD19sb3R0ZXJ5X3ByaWNlcwAAAAAObG90dGVyeUFzc2V0SWQCAAAAEV9sb3R0ZXJ5X2Fzc2V0X2lkAAAAAA1jb3VudE9mUHJpY2VzAgAAAA1fY291bnRfcHJpY2VzAAAAABRsYXN0SGFzaFJhbmRvbU51bWJlcgIAAAAVbGFzdF9zcGluX3JhbmRvbV9oYXNoAAAAABNsYXN0VG9rZW5SYW5kb21IYXNoAgAAABZsYXN0X3Rva2VuX3JhbmRvbV9oYXNoAAAAABBhbGxvd1NpemVMb3R0ZXJ5AAAAAAAAAAAEAAAAABF0b3RhbFByaWNlc0luUG9vbAIAAAARdG90YWxfcHJpemVzX3Bvb2wBAAAACnJhbmRvbWl6ZXIAAAABAAAAA2ludgQAAAAIbGFzdFBsYXkEAAAAByRtYXRjaDAJAAQcAAAAAgUAAAAEdGhpcwUAAAAUbGFzdEhhc2hSYW5kb21OdW1iZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQBAAAADFdhdmVzTG90dG9WMgkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgQAAAAEcmFuZAkAAMsAAAACCQAAywAAAAIJAADLAAAAAgkAAMsAAAACCQAAywAAAAIFAAAACGxhc3RQbGF5CAUAAAADaW52AAAADXRyYW5zYWN0aW9uSWQIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5CAUAAAAJbGFzdEJsb2NrAAAAE2dlbmVyYXRpb25TaWduYXR1cmUJAAGaAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAAGaAAAAAQgFAAAACWxhc3RCbG9jawAAAAZoZWlnaHQJAAH3AAAAAQUAAAAEcmFuZAEAAAAQZ2V0TnVtYmVyRGVjaW1hbAAAAAEAAAAGbnVtYmVyAwkAAAAAAAACBQAAAAZudW1iZXIAAAAAAAAAAAECAAAAAzAuMAMJAAAAAAAAAgUAAAAGbnVtYmVyAAAAAAAAAAACAgAAAAQwLjAwAwkAAAAAAAACBQAAAAZudW1iZXIAAAAAAAAAAAMCAAAABTAuMDAwAwkAAAAAAAACBQAAAAZudW1iZXIAAAAAAAAAAAQCAAAABjAuMDAwMAMJAAAAAAAAAgUAAAAGbnVtYmVyAAAAAAAAAAAFAgAAAAcwLjAwMDAwAwkAAAAAAAACBQAAAAZudW1iZXIAAAAAAAAAAAYCAAAACDAuMDAwMDAwAwkAAAAAAAACBQAAAAZudW1iZXIAAAAAAAAAAAcCAAAACTAuMDAwMDAwMAkAAAIAAAABAgAAAA1leGNlZWQgbnVtYmVyAQAAABxjb252ZXJ0QW1vdW50VG9EZWNpbWFsU3RyaW5nAAAAAgAAAAt0b2tlbkFtb3VudAAAAApkZWNpbWFsVmFsBAAAAA90b2tlbkFtb3VudFNpemUJAAExAAAAAQkAAaQAAAABBQAAAAt0b2tlbkFtb3VudAMJAABmAAAAAgUAAAAPdG9rZW5BbW91bnRTaXplBQAAAApkZWNpbWFsVmFsBAAAAAtzdWZpeEFtb3VudAkBAAAACXRha2VSaWdodAAAAAIJAAGkAAAAAQUAAAALdG9rZW5BbW91bnQFAAAACmRlY2ltYWxWYWwEAAAADHByZWZpeE51bWJlcgkAAS8AAAACCQABpAAAAAEFAAAAC3Rva2VuQW1vdW50CQAAZQAAAAIJAAExAAAAAQkAAaQAAAABBQAAAAt0b2tlbkFtb3VudAUAAAAKZGVjaW1hbFZhbAQAAAAKZmluYVJlc3VsdAkAASwAAAACCQABLAAAAAIFAAAADHByZWZpeE51bWJlcgIAAAABLgUAAAALc3VmaXhBbW91bnQFAAAACmZpbmFSZXN1bHQDCQAAAAAAAAIFAAAAD3Rva2VuQW1vdW50U2l6ZQUAAAAKZGVjaW1hbFZhbAQAAAAHdmFsVGVtcAkAAGUAAAACBQAAAApkZWNpbWFsVmFsBQAAAA90b2tlbkFtb3VudFNpemUEAAAAC2ZpbmFsUmVzdWx0CQABLAAAAAICAAAAAjAuCQABpAAAAAEFAAAAC3Rva2VuQW1vdW50BQAAAAtmaW5hbFJlc3VsdAQAAAATZGlmZlByaWNlQW5kRGVjaW1hbAkAAGUAAAACBQAAAApkZWNpbWFsVmFsBQAAAA90b2tlbkFtb3VudFNpemUEAAAADHByZWZpeEFtb3VudAkBAAAAEGdldE51bWJlckRlY2ltYWwAAAABBQAAABNkaWZmUHJpY2VBbmREZWNpbWFsBAAAAAtmaW5hbFJlc3VsdAkAASwAAAACBQAAAAxwcmVmaXhBbW91bnQJAAGkAAAAAQUAAAALdG9rZW5BbW91bnQFAAAAC2ZpbmFsUmVzdWx0AQAAABNnZW5lcmF0b3JSYW5kb21IYXNoAAAAAQAAAANpbnYEAAAAEGxhc3RIYXNoRm9yVG9rZW4EAAAAByRtYXRjaDAJAAQcAAAAAgUAAAAEdGhpcwUAAAATbGFzdFRva2VuUmFuZG9tSGFzaAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAEAAAASV2F2ZXNMb345TGHY76R0b1YyCQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAAARyYW5kCQAAywAAAAIJAADLAAAAAgkAAMsAAAACCQAAywAAAAIJAADLAAAAAgUAAAAQbGFzdEhhc2hGb3JUb2tlbggFAAAAA2ludgAAAA10cmFuc2FjdGlvbklkCAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQgFAAAACWxhc3RCbG9jawAAABNnZW5lcmF0aW9uU2lnbmF0dXJlCQABmgAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQABmgAAAAEIBQAAAAlsYXN0QmxvY2sAAAAGaGVpZ2h0CQAB9wAAAAEFAAAABHJhbmQBAAAADWdldFByaWNlQXJyYXkAAAAABAAAAA1jdXJyZW50UHJpY2VzBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAADWxvdHRlcnlQcmljZXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAIAAAAACQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAAApzaXplUHJpY2VzCQABMQAAAAEFAAAADWN1cnJlbnRQcmljZXMDCQAAAAAAAAIFAAAACnNpemVQcmljZXMAAAAAAAAAAAAFAAAAA25pbAQAAAAKdHJpbVByaWNlcwkAAS8AAAACBQAAAA1jdXJyZW50UHJpY2VzCQAAZQAAAAIJAAExAAAAAQUAAAANY3VycmVudFByaWNlcwAAAAAAAAAAAQQAAAAIbmV3QXJyYXkJAAS1AAAAAgUAAAAKdHJpbVByaWNlcwIAAAABLAUAAAAIbmV3QXJyYXkBAAAAF2dlbmVyYXRlTmV3TGlzdE9mUHJpY2VzAAAAAgAAAAV0b2tlbgAAAAN2YWwDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAADdmFsBAAAAAxpbmRleE9mQ29tbWEJAASzAAAAAgUAAAAFdG9rZW4CAAAAASwEAAAAEXRva2VuQWxyZWFkeUV4aXN0CQAEswAAAAIFAAAABXRva2VuBQAAAAN2YWwDAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAMaW5kZXhPZkNvbW1hCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAABF0b2tlbkFscmVhZHlFeGlzdAcJAAEsAAAAAgkAASwAAAACBQAAAAV0b2tlbgUAAAADdmFsAgAAAAEsAwMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEFAAAADGluZGV4T2ZDb21tYQkBAAAACWlzRGVmaW5lZAAAAAEFAAAAEXRva2VuQWxyZWFkeUV4aXN0BwkAASwAAAACBQAAAAN2YWwCAAAAASwDAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAEXRva2VuQWxyZWFkeUV4aXN0CQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAMaW5kZXhPZkNvbW1hBwUAAAAFdG9rZW4DAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADGluZGV4T2ZDb21tYQkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAARdG9rZW5BbHJlYWR5RXhpc3QHCQABLAAAAAIJAAEsAAAAAgUAAAAFdG9rZW4FAAAAA3ZhbAIAAAABLAIAAAAABQAAAAV0b2tlbgEAAAANcHJvY2VkTG90dGVyeQAAAAIAAAADd2luAAAABXRva2VuAwMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAV0b2tlbgYJAQAAAAIhPQAAAAIFAAAABXRva2VuAgAAAAAEAAAAEHRva2VuUHJvYmFiaWxpdHkJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAFdG9rZW4FAAAAEmxvdHRlcnlwcm9iYWJpbGl0eQQAAAAXdG9rZW5Qcm9iYWJpbGl0eURlY2ltYWwJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAFdG9rZW4FAAAAGWxvdHRlcnlwcm9iYWJpbGl0eWRlY2ltYWwEAAAACXNpemVPZldpbgkAAZAAAAABBQAAAAN3aW4DCQAAAAAAAAIFAAAACXNpemVPZldpbgAAAAAAAAAAAQQAAAAMcmFuZG9tTnVtYmVyCQABkQAAAAIFAAAAA3dpbgAAAAAAAAAAAAQAAAAVY29udmVydGVkUmFuZG9tTnVtYmVyCQACWwAAAAEFAAAADHJhbmRvbU51bWJlcgQAAAAWY29udmVydGVkRGVjaW1hbE51bWJlcgkAAGgAAAACBQAAABd0b2tlblByb2JhYmlsaXR5RGVjaW1hbAAAAAAAAAAD6AQAAAAQY29tcGFyaXNvbk51bWJlcgkAAGoAAAACCQAEsQAAAAEFAAAAFWNvbnZlcnRlZFJhbmRvbU51bWJlcgUAAAAWY29udmVydGVkRGVjaW1hbE51bWJlcgMJAABmAAAAAgUAAAAQdG9rZW5Qcm9iYWJpbGl0eQUAAAAQY29tcGFyaXNvbk51bWJlcgkABEwAAAACBQAAAAV0b2tlbgUA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cgQAAAARbGlzdFdpbm5pbmdQcmljZXMJAARMAAAAAgUAAAAKcmFuZE51bWJlcgUAAAADbmlsBAAAAAx3aW5uaW5nVG9rZW4EAAAADyRsaXN0MTE1NzMxMTYyNQUAAAAJcHJpY2VMaXN0BAAAAA8kc2l6ZTExNTczMTE2MjUJAAGQAAAAAQUAAAAPJGxpc3QxMTU3MzExNjI1BAAAAA8kYWNjMDExNTczMTE2MjUFAAAAEWxpc3RXaW5uaW5nUHJpY2VzAwkAAAAAAAACBQAAAA8kc2l6ZTExNTczMTE2MjUAAAAAAAAAAAAFAAAADyRhY2MwMTE1NzMxMTYyNQQAAAAPJGFjYzExMTU3MzExNjI1CQEAAAANcHJvY2VkTG90dGVyeQAAAAIFAAAADyRhY2MwMTE1NzMxMTYyNQkAAZEAAAACBQAAAA8kbGlzdDExNTczMTE2MjUAAAAAAAAAAAADCQAAAAAAAAIFAAAADyRzaXplMTE1NzMxMTYyNQAAAAAAAAAAAQUAAAAPJGFjYzExMTU3MzExNjI1BAAAAA8kYWNjMjExNTczMTE2MjUJAQAAAA1wcm9jZWRMb3R0ZXJ5AAAAAgUAAAAPJGFjYzExMTU3MzExNjI1CQABkQAAAAIFAAAADyRsaXN0MTE1NzMxMTYyNQAAAAAAAAAAAQMJAAAAAAAAAgUAAAAPJHNpemUxMTU3MzExNjI1AAAAAAAAAAACBQAAAA8kYWNjMjExNTczMTE2MjUEAAAADyRhY2MzMTE1NzMxMTYyNQkBAAAADXByb2NlZExvdHRlcnkAAAACBQAAAA8kYWNjMjExNTczMTE2MjUJAAGRAAAAAgUAAAAPJGxpc3QxMTU3MzExNjI1AAAAAAAAAAACAwkAAAAAAAACBQAAAA8kc2l6ZTExNTczMTE2MjUAAAAAAAAAAAMFAAAADyRhY2MzMTE1NzMxMTYyNQQAAAAPJGFjYzQxMTU3MzExNjI1CQEAAAANcHJvY2VkTG90dGVyeQAAAAIFAAAADyRhY2MzMTE1NzMxMTYyNQkAAZEAAAACBQAAAA8kbGlzdDExNTczMTE2MjUAAAAAAAAAAAMDCQAAAAAAAAIFAAAADyRzaXplMTE1NzMxMTYyNQAAAAAAAAAABAUAAAAPJGFjYzQxMTU3MzExNjI1BAAAAA8kYWNjNTExNTczMTE2MjUJAQAAAA1wcm9jZWRMb3R0ZXJ5AAAAAgUAAAAPJGFjYzQxMTU3MzExNjI1CQABkQAAAAIFAAAADyRsaXN0MTE1NzMxMTYyNQAAAAAAAAAABAkAAAIAAAABAgAAABJMaXN0IHNpemUgZXhjZWVkIDQEAAAAD3NpemVPZldpblByaWNlcwkAAZAAAAABBQAAAAx3aW5uaW5nVG9rZW4DCQAAAAAAAAIFAAAAD3NpemVPZldpblByaWNlcwAAAAAAAAAAAQQAAAAJd3JpdGVTZXRzCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAdtZXNzYWdlAgAAAE08aDE+QmV0dGVyIGx1Y2sgbmV4dCB0aW1lITwvaDE+PGJyPjxwPkludml0ZSBtb3JlIGZyaWVuZHMgdG8ga2VlcCBwbGF5aW5nLjxwPgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAUbGFzdEhhc2hSYW5kb21OdW1iZXIFAAAACnJhbmROdW1iZXIFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIFAAAACXdyaXRlU2V0cwkBAAAAC1RyYW5zZmVyU2V0AAAAAQUAAAADbmlsBAAAAAV0b2tlbgkAAZEAAAACBQAAAAx3aW5uaW5nVG9rZW4AAAAAAAAAAAAEAAAADWN1cnJlbnRBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAFdG9rZW4FAAAADWxvdHRlcnlhbW91bnQDCQAAAAAAAAIFAAAADWN1cnJlbnRBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAPQW1vdW50IGV4Y2VlZGVkBAAAAAxhY3R1YWxBbW91bnQJAABlAAAAAgUAAAANY3VycmVudEFtb3VudAAAAAAAAAAAAQQAAAAOdG9rZW5Xb25BbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAFdG9rZW4FAAAADGxvdHRlcnlQcmljZQQAAAAMdG9rZW5Bc3NldElkCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABXRva2VuBQAAAA5sb3R0ZXJ5QXNzZXRJZAQAAAAMdG9rZW5EZWNpbWFsBAAAAAckbWF0Y2gwCQAD7AAAAAEJAAJZAAAAAQUAAAAMdG9rZW5Bc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAAFYXNzZXQFAAAAByRtYXRjaDAIBQAAAAVhc3NldAAAAAhkZWNpbWFscwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAkAAAIAAAABAgAAABBDYW4ndCBmaW5kIGFzc2V0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAAA5jb252ZXJ0ZWRQcmljZQkBAAAAHGNvbnZlcnRBbW91bnRUb0RlY2ltYWxTdHJpbmcAAAACBQAAAA50b2tlbldvbkFtb3VudAUAAAAMdG9rZW5EZWNpbWFsBAAAABJjdXJyZW50VG90YWxBbW91bnQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAARdG90YWxQcmljZXNJblBvb2wDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABdAUAAAAHJG1hdGNoMAUAAAABdAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAAAAAAAAAAAAAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgQAAAANdXBkYXRlZEFtb3VudAkAAGUAAAACBQAAABJjdXJyZW50VG90YWxBbW91bnQFAAAADnRva2VuV29uQW1vdW50AwkAAAAAAAACBQAAAAxhY3R1YWxBbW91bnQAAAAAAAAAAAAEAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwQAAAAPJGxpc3QxMzYyNTEzNjc1BQAAAAlwcmljZUxpc3QEAAAADyRzaXplMTM2MjUxMzY3NQkAAZAAAAABBQAAAA8kbGlzdDEzNjI1MTM2NzUEAAAADyRhY2MwMTM2MjUxMzY3NQUAAAAFdG9rZW4DCQAAAAAAAAIFAAAADyRzaXplMTM2MjUxMzY3NQAAAAAAAAAAAAUAAAAPJGFjYzAxMzYyNTEzNjc1BAAAAA8kYWNjMTEzNjI1MTM2NzUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MwMTM2MjUxMzY3NQkAAZEAAAACBQAAAA8kbGlzdDEzNjI1MTM2NzUAAAAAAAAAAAADCQAAAAAAAAIFAAAADyRzaXplMTM2MjUxMzY3NQAAAAAAAAAAAQUAAAAPJGFjYzExMzYyNTEzNjc1BAAAAA8kYWNjMjEzNjI1MTM2NzUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MxMTM2MjUxMzY3NQkAAZEAAAACBQAAAA8kbGlzdDEzNjI1MTM2NzUAAAAAAAAAAAEDCQAAAAAAAAIFAAAADyRzaXplMTM2MjUxMzY3NQAAAAAAAAAAAgUAAAAPJGFjYzIxMzYyNTEzNjc1BAAAAA8kYWNjMzEzNjI1MTM2NzUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MyMTM2MjUxMzY3NQkAAZEAAAACBQAAAA8kbGlzdDEzNjI1MTM2NzUAAAAAAAAAAAIDCQAAAAAAAAIFAAAADyRzaXplMTM2MjUxMzY3NQAAAAAAAAAAAwUAAAAPJGFjYzMxMzYyNTEzNjc1BAAAAA8kYWNjNDEzNjI1MTM2NzUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MzMTM2MjUxMzY3NQkAAZEAAAACBQAAAA8kbGlzdDEzNjI1MTM2NzUAAAAAAAAAAAMDCQAAAAAAAAIFAAAADyRzaXplMTM2MjUxMzY3NQAAAAAAAAAABAUAAAAPJGFjYzQxMzYyNTEzNjc1BAAAAA8kYWNjNTEzNjI1MTM2NzUJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2M0MTM2MjUxMzY3NQkAAZEAAAACBQAAAA8kbGlzdDEzNjI1MTM2NzUAAAAAAAAAAAQJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA0BAAAAAl0b2tlblNpemUJAABlAAAAAgkAAGUAAAACCQABMQAAAAEFAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwkAATEAAAABBQAAAAV0b2tlbgAAAAAAAAAAAQQAAAANdXBkYXRlZFByaWNlcwkBAAAACXRha2VSaWdodAAAAAIFAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwUAAAAJdG9rZW5TaXplBAAAAAl3cml0ZVNldHMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWNvdW50T2ZQcmljZXMJAABlAAAAAgUAAAALY291bnRUb2tlbnMAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWxvdHRlcnlQcmljZXMFAAAADXVwZGF0ZWRQcmljZXMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAFGxhc3RIYXNoUmFuZG9tTnVtYmVyBQAAAApyYW5kTnVtYmVyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABF0b3RhbFByaWNlc0luUG9vbAUAAAANdXBkYXRlZEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAHbWVzc2FnZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADU8aDE+Q29uZ3JhdHVsYXRpb25zIHlvdSB3b24hPC9oMT48YnI+PHA+WW91IGhhdmUgd29uIAUAAAAOY29udmVydGVkUHJpY2UCAAAAASAFAAAADHRva2VuQXNzZXRJZAIAAAAELjxwPgUAAAADbmlsAwkAAAAAAAACBQAAAAx0b2tlbkFzc2V0SWQCAAAAAAQAAAALd2luVHJhbnNmZXIJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA50b2tlbldvbkFtb3VudAUAAAAEdW5pdAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgUAAAAJd3JpdGVTZXRzBQAAAAt3aW5UcmFuc2ZlcgQAAAANYWN0dWFsQXNzZXRJZAkAAlkAAAABBQAAAAx0b2tlbkFzc2V0SWQEAAAAC3dpblRyYW5zZmVyCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAOdG9rZW5Xb25BbW91bnQFAAAADWFjdHVhbEFzc2V0SWQFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIFAAAACXdyaXRlU2V0cwUAAAALd2luVHJhbnNmZXIEAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwQAAAAPJGxpc3QxNTI0MTE1MjkxBQAAAAlwcmljZUxpc3QEAAAADyRzaXplMTUyNDExNTI5MQkAAZAAAAABBQAAAA8kbGlzdDE1MjQxMTUyOTEEAAAADyRhY2MwMTUyNDExNTI5MQUAAAAFdG9rZW4DCQAAAAAAAAIFAAAADyRzaXplMTUyNDExNTI5MQAAAAAAAAAAAAUAAAAPJGFjYzAxNTI0MTE1MjkxBAAAAA8kYWNjMTE1MjQxMTUyOTEJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MwMTUyNDExNTI5MQkAAZEAAAACBQAAAA8kbGlzdDE1MjQxMTUyOTEAAAAAAAAAAAADCQAAAAAAAAIFAAAADyRzaXplMTUyNDExNTI5MQAAAAAAAAAAAQUAAAAPJGFjYzExNTI0MTE1MjkxBAAAAA8kYWNjMjE1MjQxMTUyOTEJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MxMTUyNDExNTI5MQkAAZEAAAACBQAAAA8kbGlzdDE1MjQxMTUyOTEAAAAAAAAAAAEDCQAAAAAAAAIFAAAADyRzaXplMTUyNDExNTI5MQAAAAAAAAAAAgUAAAAPJGFjYzIxNTI0MTE1MjkxBAAAAA8kYWNjMzE1MjQxMTUyOTEJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MyMTUyNDExNTI5MQkAAZEAAAACBQAAAA8kbGlzdDE1MjQxMTUyOTEAAAAAAAAAAAIDCQAAAAAAAAIFAAAADyRzaXplMTUyNDExNTI5MQAAAAAAAAAAAwUAAAAPJGFjYzMxNTI0MTE1MjkxBAAAAA8kYWNjNDE1MjQxMTUyOTEJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2MzMTUyNDExNTI5MQkAAZEAAAACBQAAAA8kbGlzdDE1MjQxMTUyOTEAAAAAAAAAAAMDCQAAAAAAAAIFAAAADyRzaXplMTUyNDExNTI5MQAAAAAAAAAABAUAAAAPJGFjYzQxNTI0MTE1MjkxBAAAAA8kYWNjNTE1MjQxMTUyOTEJAQAAABdnZW5lcmF0ZU5ld0xpc3RPZlByaWNlcwAAAAIFAAAADyRhY2M0MTUyNDExNTI5MQkAAZEAAAACBQAAAA8kbGlzdDE1MjQxMTUyOTEAAAAAAAAAAAQJAAACAAAAAQIAAAASTGlzdCBzaXplIGV4Y2VlZCA0BAAAAAl0b2tlblNpemUJAABlAAAAAgkAAGUAAAACCQABMQAAAAEFAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwkAATEAAAABBQAAAAV0b2tlbgAAAAAAAAAAAQQAAAANdXBkYXRlZFByaWNlcwkBAAAACXRha2VSaWdodAAAAAIFAAAAEnN0b3JlZFRva2Vuc1ZhbHVlcwUAAAAJdG9rZW5TaXplBAAAAAl3cml0ZVNldHMJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAFdG9rZW4FAAAADWxvdHRlcnlhbW91bnQFAAAADGFjdHVhbEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAUbGFzdEhhc2hSYW5kb21OdW1iZXIFAAAACnJhbmROdW1iZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAEXRvdGFsUHJpY2VzSW5Qb29sBQAAAA11cGRhdGVkQW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAdtZXNzYWdlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAANTxoMT5Db25ncmF0dWxhdGlvbnMgeW91IHdvbiE8L2gxPjxicj48cD5Zb3UgaGF2ZSB3b24gBQAAAA5jb252ZXJ0ZWRQcmljZQIAAAABIAUAAAAMdG9rZW5Bc3NldElkAgAAAAQuPHA+BQAAAANuaWwDCQAAAAAAAAIFAAAADHRva2VuQXNzZXRJZAIAAAAABAAAAAt3aW5UcmFuc2ZlcgkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADnRva2VuV29uQW1vdW50BQAAAAR1bml0BQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACBQAAAAl3cml0ZVNldHMFAAAAC3dpblRyYW5zZmVyBAAAAA1hY3R1YWxBc3NldElkCQACWQAAAAEFAAAADHRva2VuQXNzZXRJZAQAAAALd2luVHJhbnNmZXIJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA50b2tlbldvbkFtb3VudAUAAAANYWN0dWFsQXNzZXRJZAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgUAAAAJd3JpdGVTZXRzBQAAAAt3aW5UcmFuc2ZlcgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4CQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleaS4O40=", "height": 1493752, "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 getNumberDecimal (number) = if ((number == 1))
47+ then "0.0"
48+ else if ((number == 2))
49+ then "0.00"
50+ else if ((number == 3))
51+ then "0.000"
52+ else if ((number == 4))
53+ then "0.0000"
54+ else if ((number == 5))
55+ then "0.00000"
56+ else if ((number == 6))
57+ then "0.000000"
58+ else if ((number == 7))
59+ then "0.0000000"
60+ else throw("exceed number")
61+
62+
63+func convertAmountToDecimalString (tokenAmount,decimalVal) = {
64+ let tokenAmountSize = size(toString(tokenAmount))
65+ if ((tokenAmountSize > decimalVal))
66+ then {
67+ let sufixAmount = takeRight(toString(tokenAmount), decimalVal)
68+ let prefixNumber = take(toString(tokenAmount), (size(toString(tokenAmount)) - decimalVal))
69+ let finaResult = ((prefixNumber + ".") + sufixAmount)
70+ finaResult
71+ }
72+ else if ((tokenAmountSize == decimalVal))
73+ then {
74+ let valTemp = (decimalVal - tokenAmountSize)
75+ let finalResult = ("0." + toString(tokenAmount))
76+ finalResult
77+ }
78+ else {
79+ let diffPriceAndDecimal = (decimalVal - tokenAmountSize)
80+ let prefixAmount = getNumberDecimal(diffPriceAndDecimal)
81+ let finalResult = (prefixAmount + toString(tokenAmount))
82+ finalResult
83+ }
84+ }
85+
86+
87+func generatorRandomHash (inv) = {
88+ let lastHashForToken = match getBinary(this, lastTokenRandomHash) {
89+ case s: ByteVector =>
90+ s
91+ case _: Unit =>
92+ base58'4dD7osCQzvuXJdTiGfKvTwnKT'
93+ case _ =>
94+ throw("Match error")
95+ }
96+ let rand = (((((lastHashForToken + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
97+ sha256(rand)
98+ }
99+
100+
101+func getPriceArray () = {
102+ let currentPrices = match getString(this, lotteryPrices) {
103+ case a: String =>
104+ a
105+ case _: Unit =>
106+ ""
107+ case _ =>
108+ throw("Match error")
109+ }
110+ let sizePrices = size(currentPrices)
111+ if ((sizePrices == 0))
112+ then nil
113+ else {
114+ let trimPrices = take(currentPrices, (size(currentPrices) - 1))
115+ let newArray = split(trimPrices, ",")
116+ newArray
117+ }
118+ }
119+
120+
121+func generateNewListOfPrices (token,val) = if (isDefined(val))
122+ then {
123+ let indexOfComma = indexOf(token, ",")
124+ let tokenAlreadyExist = indexOf(token, val)
125+ if (if (!(isDefined(indexOfComma)))
126+ then !(isDefined(tokenAlreadyExist))
127+ else false)
128+ then ((token + val) + ",")
129+ else if (if (!(isDefined(indexOfComma)))
130+ then isDefined(tokenAlreadyExist)
131+ else false)
132+ then (val + ",")
133+ else if (if (isDefined(tokenAlreadyExist))
134+ then isDefined(indexOfComma)
135+ else false)
136+ then token
137+ else if (if (isDefined(indexOfComma))
138+ then !(isDefined(tokenAlreadyExist))
139+ else false)
140+ then ((token + val) + ",")
141+ else ""
142+ }
143+ else token
144+
145+
146+func procedLottery (win,token) = if (if (isDefined(token))
147+ then true
148+ else (token != ""))
149+ then {
150+ let tokenProbability = getIntegerValue(this, (token + lotteryprobability))
151+ let tokenProbabilityDecimal = getIntegerValue(this, (token + lotteryprobabilitydecimal))
152+ let sizeOfWin = size(win)
153+ if ((sizeOfWin == 1))
154+ then {
155+ let randomNumber = win[0]
156+ let convertedRandomNumber = fromBase64String(randomNumber)
157+ let convertedDecimalNumber = (tokenProbabilityDecimal * 1000)
158+ let comparisonNumber = (toInt(convertedRandomNumber) % convertedDecimalNumber)
159+ if ((tokenProbability > comparisonNumber))
160+ then token :: win
161+ else win
162+ }
163+ else if ((sizeOfWin == 2))
164+ then {
165+ let randomNumber = win[0]
166+ let convertedRandomNumber = fromBase64String(randomNumber)
167+ let convertedDecimalNumber = (tokenProbabilityDecimal * 1000)
168+ let comparisonNumber = (toInt(convertedRandomNumber) % convertedDecimalNumber)
169+ if ((tokenProbability > comparisonNumber))
170+ then [token, randomNumber]
171+ else win
172+ }
173+ else win
174+ }
175+ else win
176+
177+
178+@Callable(i)
179+func cleanLotteryPrices () = ScriptResult(WriteSet([DataEntry(lotteryPrices, "")]), TransferSet(nil))
180+
181+
182+
183+@Callable(i)
184+func updateprobability (probability,amount,poolprice,probDecimal,assetId) = {
185+ let token = toBase64String(generatorRandomHash(i))
186+ let paymentIsDefined = if (!(isDefined(i.payment)))
187+ then false
188+ else true
189+ let lotteryAssetTN = if ((assetId == ""))
190+ then true
191+ else false
192+ let totalRequiredAmount = (amount * poolprice)
193+ let currentTotalAmount = match getInteger(this, totalPricesInPool) {
194+ case t: Int =>
195+ t
196+ case _: Unit =>
197+ 0
198+ case _ =>
199+ throw("Match error")
200+ }
201+ let updatedTotalAmountPrices = (currentTotalAmount + totalRequiredAmount)
202+ if ((paymentIsDefined == true))
203+ then {
204+ let payment = extract(i.payment)
205+ let paymentAssetId = match payment.assetId {
206+ case a: ByteVector =>
207+ toBase58String(a)
208+ case _: Unit =>
209+ ""
210+ case _ =>
211+ throw("Match error")
212+ }
213+ let paymentAmount = payment.amount
214+ if ((paymentAssetId != assetId))
215+ then throw("Asset Id not matching with Payment Asset Id")
216+ else if ((totalRequiredAmount > paymentAmount))
217+ then throw("Not enough Asset Amount")
218+ else {
219+ let tempValue = match getString(this, lotteryPrices) {
220+ case a: String =>
221+ a
222+ case _: Unit =>
223+ ""
224+ case _ =>
225+ throw("Match error")
226+ }
227+ let containKey = indexOf(tempValue, token)
228+ let storedTokensValues = match containKey {
229+ case _: Unit =>
230+ ((tempValue + token) + ",")
231+ case x: Int =>
232+ throw("Token is duplicated")
233+ case _ =>
234+ throw("Match error")
235+ }
236+ let countTokens = match getInteger(this, countOfPrices) {
237+ case a: Int =>
238+ a
239+ case _: Unit =>
240+ 0
241+ case _ =>
242+ throw("Match error")
243+ }
244+ if ((allowSizeLottery > countTokens))
245+ then {
246+ 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)])
247+ ScriptResult(updateLotteryPool, TransferSet(nil))
248+ }
249+ else throw(("Lottery prices has reached maximum " + toString(allowSizeLottery)))
250+ }
251+ }
252+ else {
253+ let tnBalance = if (lotteryAssetTN)
254+ then wavesBalance(this)
255+ else assetBalance(this, fromBase64String(assetId))
256+ if ((totalRequiredAmount > tnBalance))
257+ then throw("Not enough Asset Amount")
258+ else {
259+ let tempValue = match getString(this, lotteryPrices) {
260+ case a: String =>
261+ a
262+ case _: Unit =>
263+ ""
264+ case _ =>
265+ throw("Match error")
266+ }
267+ let containKey = indexOf(tempValue, token)
268+ let storedTokensValues = match containKey {
269+ case _: Unit =>
270+ ((tempValue + token) + ",")
271+ case x: Int =>
272+ throw("Token is duplicated")
273+ case _ =>
274+ throw("Match error")
275+ }
276+ let countTokens = match getInteger(this, countOfPrices) {
277+ case a: Int =>
278+ a
279+ case _: Unit =>
280+ 0
281+ case _ =>
282+ throw("Match error")
283+ }
284+ if ((allowSizeLottery > countTokens))
285+ then {
286+ 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)])
287+ ScriptResult(updateLotteryPool, TransferSet(nil))
288+ }
289+ else throw(("Lottery prices has reached maximum " + toString(allowSizeLottery)))
290+ }
291+ }
292+ }
293+
294+
295+
296+@Callable(i)
297+func startlotto () = {
298+ let currentKey = toBase58String(i.caller.bytes)
299+ let randhash = randomizer(i)
300+ let countTokens = match getInteger(this, countOfPrices) {
301+ case a: Int =>
302+ a
303+ case _: Unit =>
304+ 0
305+ case _ =>
306+ throw("Match error")
307+ }
308+ let priceList = getPriceArray()
309+ let randNumber = toBase64String(randhash)
310+ let updNumber = fromBase64String(randNumber)
311+ let listWinningPrices = [randNumber]
312+ let winningToken = {
313+ let $list1157311625 = priceList
314+ let $size1157311625 = size($list1157311625)
315+ let $acc01157311625 = listWinningPrices
316+ if (($size1157311625 == 0))
317+ then $acc01157311625
318+ else {
319+ let $acc11157311625 = procedLottery($acc01157311625, $list1157311625[0])
320+ if (($size1157311625 == 1))
321+ then $acc11157311625
322+ else {
323+ let $acc21157311625 = procedLottery($acc11157311625, $list1157311625[1])
324+ if (($size1157311625 == 2))
325+ then $acc21157311625
326+ else {
327+ let $acc31157311625 = procedLottery($acc21157311625, $list1157311625[2])
328+ if (($size1157311625 == 3))
329+ then $acc31157311625
330+ else {
331+ let $acc41157311625 = procedLottery($acc31157311625, $list1157311625[3])
332+ if (($size1157311625 == 4))
333+ then $acc41157311625
334+ else {
335+ let $acc51157311625 = procedLottery($acc41157311625, $list1157311625[4])
336+ throw("List size exceed 4")
337+ }
338+ }
339+ }
340+ }
341+ }
342+ }
343+ let sizeOfWinPrices = size(winningToken)
344+ if ((sizeOfWinPrices == 1))
345+ then {
346+ let writeSets = WriteSet([DataEntry("message", "<h1>Better luck next time!</h1><br><p>Invite more friends to keep playing.<p>"), DataEntry(lastHashRandomNumber, randNumber)])
347+ ScriptResult(writeSets, TransferSet(nil))
348+ }
349+ else {
350+ let token = winningToken[0]
351+ let currentAmount = getIntegerValue(this, (token + lotteryamount))
352+ if ((currentAmount == 0))
353+ then throw("Amount exceeded")
354+ else {
355+ let actualAmount = (currentAmount - 1)
356+ let tokenWonAmount = getIntegerValue(this, (token + lotteryPrice))
357+ let tokenAssetId = getStringValue(this, (token + lotteryAssetId))
358+ let tokenDecimal = match assetInfo(fromBase58String(tokenAssetId)) {
359+ case asset: Asset =>
360+ asset.decimals
361+ case _: Unit =>
362+ throw("Can't find asset")
363+ case _ =>
364+ throw("Match error")
365+ }
366+ let convertedPrice = convertAmountToDecimalString(tokenWonAmount, tokenDecimal)
367+ let currentTotalAmount = match getInteger(this, totalPricesInPool) {
368+ case t: Int =>
369+ t
370+ case _: Unit =>
371+ 0
372+ case _ =>
373+ throw("Match error")
374+ }
375+ let updatedAmount = (currentTotalAmount - tokenWonAmount)
376+ if ((actualAmount == 0))
377+ then {
378+ let storedTokensValues = {
379+ let $list1362513675 = priceList
380+ let $size1362513675 = size($list1362513675)
381+ let $acc01362513675 = token
382+ if (($size1362513675 == 0))
383+ then $acc01362513675
384+ else {
385+ let $acc11362513675 = generateNewListOfPrices($acc01362513675, $list1362513675[0])
386+ if (($size1362513675 == 1))
387+ then $acc11362513675
388+ else {
389+ let $acc21362513675 = generateNewListOfPrices($acc11362513675, $list1362513675[1])
390+ if (($size1362513675 == 2))
391+ then $acc21362513675
392+ else {
393+ let $acc31362513675 = generateNewListOfPrices($acc21362513675, $list1362513675[2])
394+ if (($size1362513675 == 3))
395+ then $acc31362513675
396+ else {
397+ let $acc41362513675 = generateNewListOfPrices($acc31362513675, $list1362513675[3])
398+ if (($size1362513675 == 4))
399+ then $acc41362513675
400+ else {
401+ let $acc51362513675 = generateNewListOfPrices($acc41362513675, $list1362513675[4])
402+ throw("List size exceed 4")
403+ }
404+ }
405+ }
406+ }
407+ }
408+ }
409+ let tokenSize = ((size(storedTokensValues) - size(token)) - 1)
410+ let updatedPrices = takeRight(storedTokensValues, tokenSize)
411+ 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 " + convertedPrice) + " ") + tokenAssetId) + ".<p>"))])
412+ if ((tokenAssetId == ""))
413+ then {
414+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, unit)])
415+ ScriptResult(writeSets, winTransfer)
416+ }
417+ else {
418+ let actualAssetId = fromBase58String(tokenAssetId)
419+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, actualAssetId)])
420+ ScriptResult(writeSets, winTransfer)
421+ }
422+ }
423+ else {
424+ let storedTokensValues = {
425+ let $list1524115291 = priceList
426+ let $size1524115291 = size($list1524115291)
427+ let $acc01524115291 = token
428+ if (($size1524115291 == 0))
429+ then $acc01524115291
430+ else {
431+ let $acc11524115291 = generateNewListOfPrices($acc01524115291, $list1524115291[0])
432+ if (($size1524115291 == 1))
433+ then $acc11524115291
434+ else {
435+ let $acc21524115291 = generateNewListOfPrices($acc11524115291, $list1524115291[1])
436+ if (($size1524115291 == 2))
437+ then $acc21524115291
438+ else {
439+ let $acc31524115291 = generateNewListOfPrices($acc21524115291, $list1524115291[2])
440+ if (($size1524115291 == 3))
441+ then $acc31524115291
442+ else {
443+ let $acc41524115291 = generateNewListOfPrices($acc31524115291, $list1524115291[3])
444+ if (($size1524115291 == 4))
445+ then $acc41524115291
446+ else {
447+ let $acc51524115291 = generateNewListOfPrices($acc41524115291, $list1524115291[4])
448+ throw("List size exceed 4")
449+ }
450+ }
451+ }
452+ }
453+ }
454+ }
455+ let tokenSize = ((size(storedTokensValues) - size(token)) - 1)
456+ let updatedPrices = takeRight(storedTokensValues, tokenSize)
457+ 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 " + convertedPrice) + " ") + tokenAssetId) + ".<p>"))])
458+ if ((tokenAssetId == ""))
459+ then {
460+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, unit)])
461+ ScriptResult(writeSets, winTransfer)
462+ }
463+ else {
464+ let actualAssetId = fromBase58String(tokenAssetId)
465+ let winTransfer = TransferSet([ScriptTransfer(i.caller, tokenWonAmount, actualAssetId)])
466+ ScriptResult(writeSets, winTransfer)
467+ }
468+ }
469+ }
470+ }
471+ }
472+
473+
474+@Verifier(tx)
475+func verify () = match tx {
476+ case _ =>
477+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
478+}
479+

github/deemru/w8io/026f985 
34.85 ms