tx · 42DmXwKtw7jDJaxKPyvRhQ77FhKbMSayuCzeLkjiz2uR

3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph:  -0.01400000 Waves

2022.02.09 18:12 [1916260] smart account 3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph > SELF 0.00000000 Waves

{ "type": 13, "id": "42DmXwKtw7jDJaxKPyvRhQ77FhKbMSayuCzeLkjiz2uR", "fee": 1400000, "feeAssetId": null, "timestamp": 1644419554986, "version": 2, "chainId": 84, "sender": "3N61Cvq5XcnPk9rxpy2Rnp3bSr4syNGUJph", "senderPublicKey": "G7cNXePvAHUHmZfXa1eHnvFeH6DuykPC5wm9v9djTKgD", "proofs": [ "3ie478tdnvC1zZdMQGQchnPRt1QQprAEv3uXPSqVE9dRkBScDSmV8Ne1vnzNrN75ZDWFskJnyCV9XmSYXdcejMzA", "3MyE7bVwS2TipvgWccgacoJYWeBcemgC8dPdv2nZyv7HorzN9F7PUhbRFyaMsiauZgyCvqH5nhLot53AVoch9xS3", "3pZfymnZzQu27Tbgsd2CnXZpuzPwtv4VVk1cxZh9T2t14vM7ZPuLX5qS9VEkARTCM2oNN2EtbtWRACZ58MU1yskW" ], "script": "base64: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BmFtb3VudAUAAAAPYXNzZXRJZFF1YW50aXR5BQAAABBkQXBwU3Rha2VkVG9rZW5zBQAAABR0cmFuc2ZlclRvVXNlckFtb3VudAQAAAAUdHJhbnNmZXJUb1VzZXJBbW91bnQJAABrAAAAAwUAAAAGYW1vdW50BQAAABBkQXBwU3Rha2VkVG9rZW5zBQAAAA9hc3NldElkUXVhbnRpdHkFAAAAFHRyYW5zZmVyVG9Vc2VyQW1vdW50AQAAAA91c2VyV2l0aGRyYXdLZXkAAAADAAAABHBvb2wAAAALdXNlckFkZHJlc3MAAAANdHJhbnNhY3Rpb25JZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8FAAAAC3VzZXJBZGRyZXNzAgAAAAFfBQAAAA10cmFuc2FjdGlvbklkAgAAAAlfd2l0aGRyYXcBAAAAGXVzZXJXaXRoZHJhd0J1cm5Ub2tlbnNLZXkAAAADAAAABHBvb2wAAAALdXNlckFkZHJlc3MAAAANdHJhbnNhY3Rpb25JZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8FAAAAC3VzZXJBZGRyZXNzAgAAAAFfBQAAAA10cmFuc2FjdGlvbklkAgAAABRfd2l0aGRyYXdfYnVybl90b2tlbgEAAAAVZ2V0VXNlclRvdGFsTG9ja2VkS2V5AAAAAgAAAARwb29sAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfBQAAAAt1c2VyQWRkcmVzcwIAAAAbX3NlcnZpY2VfdG9rZW5fdG90YWxfbG9ja2VkAQAAABJnZXRVc2VyVG90YWxMb2NrZWQAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB8AAAABBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQEAAAAB25vdGhpbmcFAAAAByRtYXRjaDAAAAAAAAAAAAAAAAAIAAAAAWkBAAAACGFkZFBvb2xzAAAABAAAAAVwb29scwAAAA9saXF1aWRpdHlUb2tlbnMAAAANc2VydmljZVRva2VucwAAABZsaXF1aWRpdHlUb2tlbkRlY2ltYWxzAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CgEAAAAQZ2VuZXJhdGVQb29sS2V5cwAAAAIAAAALYWNjdW11bGF0ZWQAAAAEcG9vbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAARwb29sAgAAAA5fYXNzZXRfYmFsYW5jZQAAAAAAAAAAAAUAAAALYWNjdW11bGF0ZWQKAQAAAB5nZW5lcmF0ZVBvb2xMaXF1aWRpdHlUb2tlbktleXMAAAACAAAAC2FjY3VtdWxhdGVkAAAABHBvb2wEAAAACXBvb2xJbmRleAkBAAAABXZhbHVlAAAAAQkABE8AAAACBQAAAAVwb29scwUAAAAEcG9vbAQAAAAObGlxdWlkaXR5VG9rZW4JAAGRAAAAAgUAAAAPbGlxdWlkaXR5VG9rZW5zBQAAAAlwb29sSW5kZXgJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACBQAAAARwb29sAgAAABBfbGlxdWlkaXR5X3Rva2VuBQAAAA5saXF1aWRpdHlUb2tlbgUAAAALYWNjdW11bGF0ZWQKAQAAABxnZW5lcmF0ZVBvb2xTZXJ2aWNlVG9rZW5LZXlzAAAAAgAAAAthY2N1bXVsYXRlZAAAAARwb29sBAAAAAlwb29sSW5kZXgJAQAAAAV2YWx1ZQAAAAEJAARPAAAAAgUAAAAFcG9vbHMFAAAABHBvb2wEAAAADmxpcXVpZGl0eVRva2VuCQABkQAAAAIFAAAADXNlcnZpY2VUb2tlbnMFAAAACXBvb2xJbmRleAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wCAAAADl9zZXJ2aWNlX3Rva2VuBQAAAA5saXF1aWRpdHlUb2tlbgUAAAALYWNjdW11bGF0ZWQKAQAAACVnZW5lcmF0ZVBvb2xMaXF1aWRpdHlU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AgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgkBAAAABSRmMF8xAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoAAAAAAAAAAAsAAAAAAAAAAAwAAAAAAAAAAA0AAAAAAAAAAA4AAAAAAAAAAA8AAAAAAAAAABAAAAAAAAAAABEAAAAAAAAAABIAAAAAAAAAABMAAAAAAAAAABQAAAAAAAAAABUAAAAAAAAAABYAAAAAAAAAABcAAAAAAAAAABgAAAAAAAAAABkAAAAAAAAAABoAAAAAAAAAABsAAAAAAAAAABwAAAAAAAAAAB0AAAAAAAAAAB4AAAAAAAAAAB8AAAAAAAAAACAAAAAAAAAAACEAAAAAAAAAACIAAAAAAAAAACMAAAAAAAAAACQAAAAAAAAAACUAAAAAAAAAACYAAAAAAAAAACcAAAAAAAAAACgAAAAAAAAAACkAAAAAAAAAACoAAAAAAAAAACsAAAAAAAAAACwAAAAAAAAAAC0AAAAAAAAAAC4AAAAAAAAAAC8AAAAAAAAAADAAAAAAAAAAADEAAAAAAAAAADIAAAAAAAAAADMAAAAAAAAAADQAAAAAAAAAADUAAAAAAAAAADYAAAAAAAAAADcAAAAAAAAAADgAAAAAAAAAADkAAAAAAAAAADoAAAAAAAAAADsAAAAAAAAAADwAAAAAAAAAAD0AAAAAAAAAAD4AAAAAAAAAAD8AAAAAAAAAAEAAAAAAAAAAAEEAAAAAAAAAAEIAAAAAAAAAAEMAAAAAAAAAAEQAAAAAAAAAAEUAAAAAAAAAAEYAAAAAAAAAAEcAAAAAAAAAAEgAAAAAAAAAAEkAAAAAAAAAAEoAAAAAAAAAAEsAAAAAAAAAAEwAAAAAAAAAAE0AAAAAAAAAAE4AAAAAAAAAAE8AAAAAAAAAAFAAAAAAAAAAAFEAAAAAAAAAAFIAAAAAAAAAAFMAAAAAAAAAAFQAAAAAAAAAAFUAAAAAAAAAAFYAAAAAAAAAAFcAAAAAAAAAAFgAAAAAAAAAAFkAAAAAAAAAAFoAAAAAAAAAAFsAAAAAAAAAAFwAAAAAAAAAAF0AAAAAAAAAAF4AAAAAAAAAAF8AAAAAAAAAAGAAAAAAAAAAAGEAAAAAAAAAAGIAAAAAAAAAAGMAAAAAAAAAAGQFAAAACmRlbGV0ZUtleXMJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAAAAAWkBAAAACmlzc3VlVG9rZW4AAAAEAAAABG5hbWUAAAALZGVzY3JpcHRpb24AAAAIcXVhbnRpdHkAAAAIZGVjaW1hbHMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAARMAAAAAgkABEMAAAAHBQAAAARuYW1lBQAAAAtkZXNjcmlwdGlvbgUAAAAIcXVhbnRpdHkFAAAACGRlY2ltYWxzBgUAAAAEdW5pdAAAAAAAAAAAAAUAAAADbmlsCQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgAAAAJhOAEAAAAEY2FsbAAAAAAJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQIAAABWM1BQSDd4N2lxb2JXNXppeWlSQ2ljMTlyUXFLcjZuUFlhSzFfM041dmlZRmhudTFldzRGUlo5bnVqbWU5ZWRyOTE4RmtUMWFfY3VycmVudF9yZXdhcmQFAAAAA25pbAAAAAFpAQAAAAdkZXBvc2l0AAAAAQAAAARwb29sAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAQAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAB2Fzc2V0SWQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAADWFzc2V0SWRTdHJpbmcEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwCQACWAAAAAEFAAAAAmlkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAwkAAGcAAAACAAAAAAAAAAAABQAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAAClEZXBvc2l0IGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAAAZhbW91bnQEAAAADXBvb2xBbW91bnRLZXkJAAEsAAAAAgUAAAAEcG9vbAIAAAAOX2Fzc2V0X2JhbGFuY2UEAAAAC3VzZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAARdXNlclBvb2xBbW91bnRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAAV8FAAAAC3VzZXJBZGRyZXNzAgAAAA5fYXNzZXRfYmFsYW5jZQQAAAAQZEFwcEFzc2V0QWRkcmVzcwkBAAAAE2dldERBcHBBc3NldEFkZHJlc3MAAAABBQAAAARwb29sBAAAABVsaXF1aWR1dHlBc3NldEFkZHJlc3MEAAAAByRtYXRjaDAJAAQiAAAAAQkAASwAAAACBQAAAARwb29sAgAAABBfbGlxdWlkaXR5X3Rva2VuAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAUAAAAGc3RyaW5nBAAAAAdub3RoaW5nBQAAAAckbWF0Y2gwCQAAAgAAAAECAAAAJllvdSB0cnkgdG8gZGVwb3NpdCBvbiB1bnN1cHBvcnRlZCBwb29sAwkBAAAADGlzUG9vbEFjdGl2ZQAAAAEFAAAABHBvb2wEAAAAFWxpcXVpZGl0eVRva2VuRGVjaW1hbAQAAAAHJG1hdGNoMAkAA+wAAAABCQACWQAAAAEFAAAAFWxpcXVpZHV0eUFzc2V0QWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAFQXNzZXQEAAAABWFzc2V0BQAAAAckbWF0Y2gwCAUAAAAFYXNzZXQAAAAIZGVjaW1hbHMJAAACAAAAAQIAAAAQQ2FuJ3QgZmluZCBhc3NldAMJAQAAAAIhPQAAAAIFAAAAFWxpcXVpZHV0eUFzc2V0QWRkcmVzcwUAAAANYXNzZXRJZFN0cmluZwkAAAIAAAABAgAAAC9Zb3UgYXR0YWNoZWQgd3JvbmcgbGlxdWlkaXR5IHRva2VuIGZyb20gU3dvcC5maQQAAAAKcG9vbEFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAANcG9vbEFtb3VudEtleQQAAAAKdXNlckFtb3VudAQAAAAHJG1hdGNoMAkABB8AAAABBQAAABF1c2VyUG9vbEFtb3VudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAANpbnQFAAAAByRtYXRjaDAFAAAAA2ludAQAAAAHbm90aGluZwUAAAAHJG1hdGNoMAAAAAAAAAAAAAQAAAASdXNlclRvdGFsTG9ja2VkS2V5CQEAAAAVZ2V0VXNlclRvdGFsTG9ja2VkS2V5AAAAAgUAAAAEcG9vbAUAAAALdXNlckFkZHJlc3MEAAAAD3VzZXJUb3RhbExvY2tlZAkBAAAAEmdldFVzZXJUb3RhbExvY2tlZAAAAAEFAAAAEnVzZXJUb3RhbExvY2tlZEtleQQAAAAUdXNlckFtb3VudFdpdGhvdXRGZWUJAABlAAAAAgkAAGUAAAACBQAAAAZhbW91bnQJAQAAAAhmcmFjdGlvbgAAAAQFAAAABmFtb3VudAAAAAAAAAAAAQUAAAAKZGVwb3NpdEZlZQUAAAAGSEFMRlVQCQEAAAAIZnJhY3Rpb24AAAAEBQAAAAZhbW91bnQAAAAAAAAAAAEFAAAADWNvbnRyb2xsZXJGZWUFAAAABkhBTEZVUAQAAAAUdHJhbnNmZXJUb1VzZXJBbW91bnQJAQAAAA50cmFuc2ZlclRvVXNlcgAAAAQFAAAAFHVzZXJBbW91bnRXaXRob3V0RmVlCQACWQAAAAEFAAAAEGRBcHBBc3NldEFkZHJlc3MFAAAABHBvb2wFAAAAC2RlcG9zaXRUeXBlBAAAAANmZWUJAABlAAAAAgUAAAAGYW1vdW50BQAAABR1c2VyQW1vdW50V2l0aG91dEZlZQQAAAANbmV3UG9vbEFtb3VudAkAAGUAAAACCQAAZAAAAAIFAAAACnBvb2xBbW91bnQFAAAABmFtb3VudAUAAAADZmVlBAAAABFuZXdVc2VyUG9vbEFtb3VudAkAAGQAAAACBQAAAAp1c2VyQW1vdW50BQAAABR0cmFuc2ZlclRvVXNlckFtb3VudAQAAAASbmV3VXNlclRvdGFsTG9ja2VkCQAAZAAAAAIFAAAAD3VzZXJUb3RhbExvY2tlZAUAAAAUdHJhbnNmZXJUb1VzZXJBbW91bnQEAAAADWxvY2tUb2tlbnNLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARwb29sAgAAAAFfBQAAAAt1c2VyQWRkcmVzcwIAAAABXwkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkAgAAAAdfbG9ja2VkCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwkAAlkAAAABBQAAABBkQXBwQXNzZXRBZGRyZXNzBQAAABR0cmFuc2ZlclRvVXNlckFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABR0cmFuc2ZlclRvVXNlckFtb3VudAkAAlkAAAABBQAAABBkQXBwQXNzZXRBZGRyZXNzCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybWFuY2VBZGRyZXNzBQAAAANmZWUJAAJZAAAAAQUAAAAVbGlxdWlkdXR5QXNzZXRBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1sb2NrVG9rZW5zS2V5BQAAABR1c2VyQW1vdW50V2l0aG91dEZlZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANcG9vbEFtb3VudEtleQUAAAANbmV3UG9vbEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARdXNlclBvb2xBbW91bnRLZXkFAAAAEW5ld1VzZXJQb29sQW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJ1c2VyVG90YWxMb2NrZWRLZXkFAAAAEm5ld1VzZXJUb3RhbExvY2tlZAUAAAADbmlsCQAAAgAAAAECAAAAE1Bvb2wgaXMgbm90IGFjdGl2ZSEAAAABaQEAAAAMaW5pdFdpdGhkcmF3AAAAAQAAAARwb29sAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAQAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAB2Fzc2V0SWQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAADWFzc2V0SWRTdHJpbmcEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwCQACWAAAAAEFAAAAAmlkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yBAAAABFhc3NldElkQnl0ZVZlY3RvcgQAAAAHJG1hdGNoMAUAAAAHYXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAFAAAAAmlkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAwkAAGcAAAACAAAAAAAAAAAABQAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAAClXaXRocmF3IGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAAAZhbW91bnQDCQEAAAAMaXNQb29sQWN0aXZlAAAAAQUAAAAEcG9vbAQAAAALdXNlckFkZHJlc3MJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABJ1c2VyVG90YWxMb2NrZWRLZXkJAQAAABVnZXRVc2VyVG90YWxMb2NrZWRLZXkAAAACBQAAAARwb29sBQAAAAt1c2VyQWRkcmVzcwQAAAAPdXNlclRvdGFsTG9ja2VkCQEAAAASZ2V0VXNlclRvdGFsTG9ja2VkAAAAAQUAAAASdXNlclRvdGFsTG9ja2VkS2V5BAAAABB1c2VyVG90YWxCYWxhbmNlCQAD8AAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAARYXNzZXRJZEJ5dGVWZWN0b3IEAAAAEG5vbkxvY2tlZEJhbGFuY2UJAABlAAAAAgUAAAAQdXNlclRvdGFsQmFsYW5jZQUAAAAPdXNlclRvdGFsTG9ja2VkAwkAAGYAAAACBQAAAAZhbW91bnQFAAAAEG5vbkxvY2tlZEJhbGFuY2UJAAACAAAAAQIAAABJWW91IGhhdmUgYSBsb2NrZWQgdG9rZW5zLiBXYWl0IGEgdGltZSBmb3IgdW5sb2NrIG9yIHRyeSB0byB3aXRoZHJyYXcgbGVzcwQAAAAUdHJhbnNmZXJUb1VzZXJBbW91bnQJAQAAAA50cmFuc2ZlclRvVXNlcgAAAAQFAAAABmFtb3VudAkAAlkAAAABBQAAAA1hc3NldElkU3RyaW5nBQAAAARwb29sBQAAAAx3aXRoZHJhd1R5cGUEAAAADXVzZXJSZWNvcmRLZXkJAQAAAA91c2VyV2l0aGRyYXdLZXkAAAADBQAAAARwb29sBQAAAAt1c2VyQWRkcmVzcwkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAABh1c2VyV2l0aGRyYXdCdXJuVG9rZW5LZXkJAQAAABl1c2VyV2l0aGRyYXdCdXJuVG9rZW5zS2V5AAAAAwUAAAAEcG9vbAUAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANdXNlclJlY29yZEtleQUAAAAUdHJhbnNmZXJUb1VzZXJBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAGHVzZXJXaXRoZHJhd0J1cm5Ub2tlbktleQUAAAAGYW1vdW50BQAAAANuaWwJAAACAAAAAQIAAAATUG9vbCBpcyBub3QgYWN0aXZlIQAAAAFpAQAAAAh3aXRoZHJhdwAAAAMAAAAEcG9vbAAAAAt1c2VyQWRkcmVzcwAAAA10cmFuc2FjdGlvbklkAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAA11c2VyUmVjb3JkS2V5CQEAAAAPdXNlcldpdGhkcmF3S2V5AAAAAwUAAAAEcG9vbAUAAAALdXNlckFkZHJlc3MFAAAADXRyYW5zYWN0aW9uSWQEAAAAGHVzZXJXaXRoZHJhd0J1cm5Ub2tlbktleQkBAAAAGXVzZXJXaXRoZHJhd0J1cm5Ub2tlbnNLZXkAAAADBQAAAARwb29sBQAAAAt1c2VyQWRkcmVzcwUAAAANdHJhbnNhY3Rpb25JZAQAAAAOc2VuZFVzZXJBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAADXVzZXJSZWNvcmRLZXkEAAAAD2J1cm5Ub2tlbkFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAYdXNlcldpdGhkcmF3QnVyblRva2VuS2V5BAAAAA1wb29sQW1vdW50S2V5CQABLAAAAAIFAAAABHBvb2wCAAAADl9hc3NldF9iYWxhbmNlBAAAABF1c2VyUG9vbEFtb3VudEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEcG9vbAIAAAABXwUAAAALdXNlckFkZHJlc3MCAAAADl9hc3NldF9iYWxhbmNlBAAAAAp1c2VyQW1vdW50BAAAAAckbWF0Y2gwCQAEHwAAAAEFAAAAEXVzZXJQb29sQW1vdW50S2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA2ludAUAAAAHJG1hdGNoMAUAAAADaW50BAAAAAdub3RoaW5nBQAAAAckbWF0Y2gwAAAAAAAAAAAABAAAABBkQXBwQXNzZXRBZGRyZXNzCQEAAAATZ2V0REFwcEFzc2V0QWRkcmVzcwAAAAEFAAAABHBvb2wEAAAAFWxpcXVpZHV0eUFzc2V0QWRkcmVzcwkBAAAAGGdldExpcXVpZHV0eUFzc2V0QWRkcmVzcwAAAAEFAAAABHBvb2wEAAAACnBvb2xBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAADXBvb2xBbW91bnRLZXkEAAAADW5ld1Bvb2xBbW91bnQJAABlAAAAAgUAAAAKcG9vbEFtb3VudAUAAAAOc2VuZFVzZXJBbW91bnQEAAAAEW5ld1VzZXJQb29sQW1vdW50CQAAZQAAAAIFAAAACnVzZXJBbW91bnQFAAAADnNlbmRVc2VyQW1vdW50CQAETAAAAAIJAQAAAARCdXJuAAAAAgkAAlkAAAABBQAAABBkQXBwQXNzZXRBZGRyZXNzBQAAAA9idXJuVG9rZW5BbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA5zZW5kVXNlckFtb3VudAkAAlkAAAABBQAAABVsaXF1aWR1dHlBc3NldEFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADXBvb2xBbW91bnRLZXkFAAAADW5ld1Bvb2xBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEXVzZXJQb29sQW1vdW50S2V5BQAAABFuZXdVc2VyUG9vbEFtb3VudAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAA11c2VyUmVjb3JkS2V5CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAGHVzZXJXaXRoZHJhd0J1cm5Ub2tlbktleQUAAAADbmlsCQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgAAAAFpAQAAAA5wb29sQWN0aXZhdGluZwAAAAIAAAAFcG9vbHMAAAAIc3RhdHVzZXMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkKAQAAABZnZW5lcmF0ZVBvb2xBY3RpdmVLZXlzAAAAAgAAAAthY2N1bXVsYXRlZAAAAARwb29sBAAAAAlwb29sSW5kZXgJAQAAAAV2YWx1ZQAAAAEJAARPAAAAAgUAAAAFcG9vbHMFAAAABHBvb2wEAAAABnN0YXR1cwkAAZEAAAACBQAAAAhzdGF0dXNlcwUAAAAJcG9vbEluZGV4CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIFAAAABHBvb2wCAAAAB19hY3RpdmUFAAAABnN0YXR1cwUAAAALYWNjdW11bGF0ZWQEAAAADnBvb2xBY3RpdmVLZXlzCgAAAAACJGwFAAAABXBvb2xzCgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAUAAAADbmlsCgEAAAAFJGYwXzEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAWZ2VuZXJhdGVQb29sQWN0aXZlS2V5cwAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAABSRmMF8yAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBf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", "height": 1916260, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5E7vePqtFBgT3TE3MGPkqUKyDdDpJT6UKxdQf5imCrdq Next: Ggpv3t9Htx8aKByWxe3Uv8TDqbFu75cmmZRTB7bVv88J Diff:
OldNewDifferences
106106
107107
108108 func userWithdrawBurnTokensKey (pool,userAddress,transactionId) = (((((pool + "_") + userAddress) + "_") + transactionId) + "_withdraw_burn_token")
109+
110+
111+func getUserTotalLockedKey (pool,userAddress) = (((pool + "_") + userAddress) + "_service_token_total_locked")
112+
113+
114+func getUserTotalLocked (key) = match getInteger(key) {
115+ case int: Int =>
116+ int
117+ case nothing =>
118+ 0
119+}
109120
110121
111122 @Callable(i)
289300 case nothing =>
290301 0
291302 }
303+ let userTotalLockedKey = getUserTotalLockedKey(pool, userAddress)
304+ let userTotalLocked = getUserTotalLocked(userTotalLockedKey)
292305 let userAmountWithoutFee = ((amount - fraction(amount, 1, depositFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
293306 let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(dAppAssetAddress), pool, depositType)
294307 let fee = (amount - userAmountWithoutFee)
295308 let newPoolAmount = ((poolAmount + amount) - fee)
296309 let newUserPoolAmount = (userAmount + transferToUserAmount)
310+ let newUserTotalLocked = (userTotalLocked + transferToUserAmount)
297311 let lockTokensKey = (((((pool + "_") + userAddress) + "_") + toBase58String(i.transactionId)) + "_locked")
298-[Reissue(fromBase58String(dAppAssetAddress), transferToUserAmount, true), ScriptTransfer(i.caller, transferToUserAmount, fromBase58String(dAppAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(lockTokensKey, userAmountWithoutFee), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount)]
312+[Reissue(fromBase58String(dAppAssetAddress), transferToUserAmount, true), ScriptTransfer(i.caller, transferToUserAmount, fromBase58String(dAppAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(lockTokensKey, userAmountWithoutFee), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount), IntegerEntry(userTotalLockedKey, newUserTotalLocked)]
299313 }
300314 }
301315 else throw("Pool is not active!")
316330 case _ =>
317331 throw("Match error")
318332 }
333+ let assetIdByteVector = match assetId {
334+ case id: ByteVector =>
335+ id
336+ case _ =>
337+ throw("Match error")
338+ }
319339 if ((0 >= amount))
320340 then throw(("Withraw amount must be positive. Actual: " + toString(amount)))
321341 else if (isPoolActive(pool))
322342 then {
323343 let userAddress = toString(i.caller)
324- let transferToUserAmount = transferToUser(amount, fromBase58String(assetIdString), pool, withdrawType)
325- let userRecordKey = userWithdrawKey(pool, userAddress, toBase58String(i.transactionId))
326- let userWithdrawBurnTokenKey = userWithdrawBurnTokensKey(pool, userAddress, toBase58String(i.transactionId))
344+ let userTotalLockedKey = getUserTotalLockedKey(pool, userAddress)
345+ let userTotalLocked = getUserTotalLocked(userTotalLockedKey)
346+ let userTotalBalance = assetBalance(i.caller, assetIdByteVector)
347+ let nonLockedBalance = (userTotalBalance - userTotalLocked)
348+ if ((amount > nonLockedBalance))
349+ then throw("You have a locked tokens. Wait a time for unlock or try to withdrraw less")
350+ else {
351+ let transferToUserAmount = transferToUser(amount, fromBase58String(assetIdString), pool, withdrawType)
352+ let userRecordKey = userWithdrawKey(pool, userAddress, toBase58String(i.transactionId))
353+ let userWithdrawBurnTokenKey = userWithdrawBurnTokensKey(pool, userAddress, toBase58String(i.transactionId))
327354 [IntegerEntry(userRecordKey, transferToUserAmount), IntegerEntry(userWithdrawBurnTokenKey, amount)]
355+ }
328356 }
329357 else throw("Pool is not active!")
330358 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let depositFee = 1000
55
66 let controllerFee = 10000
77
88 let platformFee = 10000
99
1010 let adminPubKey1 = base58'68Po1k24uP6goKr7RDmXPg4QkMiKuyTMEirao14rif8s'
1111
1212 let adminPubKey2 = base58'Bze4aurT9WmLgBT6swA9CajaZFtUwhtwCri6XGAjnAkt'
1313
1414 let adminPubKey3 = base58'ALsqwPqiUP3bVbM7grozc1Y5oHVBAGKqACRJ5J8RXceC'
1515
1616 let adminPubKey4 = base58'ALsqwPqiUP3bVbM7grozc1Y5oHVBAGKqACRJ5J8RXceC'
1717
1818 let govermanceAddress = Address(base58'3N7ExjwfofPYTvNBv2zqtAtLcMxqjTxS7iL')
1919
2020 let swopFiGovermanceAddress = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
2121
2222 let farmingAddress = Address(base58'3NBTuZhn2CwAgWGL99qpGDjZQ4Wtbg56iDL')
2323
2424 let keySWOPid = "SWOP_id"
2525
2626 let SWOP = fromBase58String(getStringValue(farmingAddress, keySWOPid))
2727
2828 let depositType = "deposit"
2929
3030 let withdrawType = "withdraw"
3131
3232 let swopFiPools = ["3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1", "3PKy2mZqnvT2EtpwDim9Mgs6YvCRe4s85nX", "3P27S9V36kw2McjWRZ37AxTx8iwkd7HXw6W"]
3333
3434 let swopFiFunctions = ["replenishWithTwoTokens", "exchange"]
3535
3636 func isPoolActive (pool) = {
3737 let kActive = (pool + "_active")
3838 let isActive = match getBoolean(this, kActive) {
3939 case boolean: Boolean =>
4040 boolean
4141 case _ =>
4242 throw("Pool is not active!")
4343 }
4444 isActive
4545 }
4646
4747
4848 func getDAppAssetAddress (pool) = match getString((pool + "_service_token")) {
4949 case string: String =>
5050 string
5151 case nothing =>
5252 throw("You try to deposit on unsupported pool")
5353 }
5454
5555
5656 func getLiquidutyAssetAddress (pool) = match getString((pool + "_liquidity_token")) {
5757 case string: String =>
5858 string
5959 case nothing =>
6060 throw("You try to withdraw from unsupported pool")
6161 }
6262
6363
6464 func getStakedAmount (poolAddress) = if ((poolAddress == toBase58String(SWOP)))
6565 then match getInteger(swopFiGovermanceAddress, (toString(this) + "_SWOP_amount")) {
6666 case staked: Int =>
6767 staked
6868 case nothing: Unit =>
6969 0
7070 case _ =>
7171 throw("Match error")
7272 }
7373 else match getInteger(farmingAddress, (((poolAddress + "_") + toString(this)) + "_share_tokens_locked")) {
7474 case staked: Int =>
7575 staked
7676 case nothing: Unit =>
7777 0
7878 case _ =>
7979 throw("Match error")
8080 }
8181
8282
8383 func transferToUser (amount,assetId,poolAddress,type) = {
8484 let dAppStakedTokens = getStakedAmount(poolAddress)
8585 let assetIdQuantity = match assetInfo(assetId) {
8686 case asset: Asset =>
8787 asset.quantity
8888 case _ =>
8989 throw("Can't find asset")
9090 }
9191 if ((dAppStakedTokens == 0))
9292 then amount
9393 else if ((type == depositType))
9494 then {
9595 let transferToUserAmount = fraction(amount, assetIdQuantity, dAppStakedTokens)
9696 transferToUserAmount
9797 }
9898 else {
9999 let transferToUserAmount = fraction(amount, dAppStakedTokens, assetIdQuantity)
100100 transferToUserAmount
101101 }
102102 }
103103
104104
105105 func userWithdrawKey (pool,userAddress,transactionId) = (((((pool + "_") + userAddress) + "_") + transactionId) + "_withdraw")
106106
107107
108108 func userWithdrawBurnTokensKey (pool,userAddress,transactionId) = (((((pool + "_") + userAddress) + "_") + transactionId) + "_withdraw_burn_token")
109+
110+
111+func getUserTotalLockedKey (pool,userAddress) = (((pool + "_") + userAddress) + "_service_token_total_locked")
112+
113+
114+func getUserTotalLocked (key) = match getInteger(key) {
115+ case int: Int =>
116+ int
117+ case nothing =>
118+ 0
119+}
109120
110121
111122 @Callable(i)
112123 func addPools (pools,liquidityTokens,serviceTokens,liquidityTokenDecimals) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
113124 then {
114125 func generatePoolKeys (accumulated,pool) = IntegerEntry((pool + "_asset_balance"), 0) :: accumulated
115126
116127 func generatePoolLiquidityTokenKeys (accumulated,pool) = {
117128 let poolIndex = value(indexOf(pools, pool))
118129 let liquidityToken = liquidityTokens[poolIndex]
119130 StringEntry((pool + "_liquidity_token"), liquidityToken) :: accumulated
120131 }
121132
122133 func generatePoolServiceTokenKeys (accumulated,pool) = {
123134 let poolIndex = value(indexOf(pools, pool))
124135 let liquidityToken = serviceTokens[poolIndex]
125136 StringEntry((pool + "_service_token"), liquidityToken) :: accumulated
126137 }
127138
128139 func generatePoolLiquidityTokenDecimalKeys (accumulated,pool) = {
129140 let poolIndex = value(indexOf(pools, pool))
130141 let liquidityToken = liquidityTokenDecimals[poolIndex]
131142 IntegerEntry((pool + "_service_token_decimal"), liquidityToken) :: accumulated
132143 }
133144
134145 func generatePoolActiveKeys (accumulated,pool) = BooleanEntry((pool + "_active"), true) :: accumulated
135146
136147 let poolBalanceKeys = {
137148 let $l = pools
138149 let $s = size($l)
139150 let $acc0 = nil
140151 func $f0_1 ($a,$i) = if (($i >= $s))
141152 then $a
142153 else generatePoolKeys($a, $l[$i])
143154
144155 func $f0_2 ($a,$i) = if (($i >= $s))
145156 then $a
146157 else throw("List size exceeds 20")
147158
148159 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
149160 }
150161 let poolLiquidityTokenKeys = {
151162 let $l = pools
152163 let $s = size($l)
153164 let $acc0 = nil
154165 func $f1_1 ($a,$i) = if (($i >= $s))
155166 then $a
156167 else generatePoolLiquidityTokenKeys($a, $l[$i])
157168
158169 func $f1_2 ($a,$i) = if (($i >= $s))
159170 then $a
160171 else throw("List size exceeds 20")
161172
162173 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
163174 }
164175 let poolServiceTokenKeys = {
165176 let $l = pools
166177 let $s = size($l)
167178 let $acc0 = nil
168179 func $f2_1 ($a,$i) = if (($i >= $s))
169180 then $a
170181 else generatePoolServiceTokenKeys($a, $l[$i])
171182
172183 func $f2_2 ($a,$i) = if (($i >= $s))
173184 then $a
174185 else throw("List size exceeds 20")
175186
176187 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
177188 }
178189 let poolLiquidityTokenDecimalKeys = {
179190 let $l = pools
180191 let $s = size($l)
181192 let $acc0 = nil
182193 func $f3_1 ($a,$i) = if (($i >= $s))
183194 then $a
184195 else generatePoolLiquidityTokenDecimalKeys($a, $l[$i])
185196
186197 func $f3_2 ($a,$i) = if (($i >= $s))
187198 then $a
188199 else throw("List size exceeds 20")
189200
190201 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
191202 }
192203 let poolActiveKeys = {
193204 let $l = pools
194205 let $s = size($l)
195206 let $acc0 = nil
196207 func $f4_1 ($a,$i) = if (($i >= $s))
197208 then $a
198209 else generatePoolActiveKeys($a, $l[$i])
199210
200211 func $f4_2 ($a,$i) = if (($i >= $s))
201212 then $a
202213 else throw("List size exceeds 20")
203214
204215 $f4_2($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($f4_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
205216 }
206217 ((((poolBalanceKeys ++ poolLiquidityTokenKeys) ++ poolServiceTokenKeys) ++ poolLiquidityTokenDecimalKeys) ++ poolActiveKeys)
207218 }
208219 else throw("Only admin can call this function")
209220
210221
211222
212223 @Callable(i)
213224 func deleteDepositLockRecords (records) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
214225 then {
215226 func generateDeletingKeys (accumulated,record) = DeleteEntry((record + "_locked")) :: accumulated
216227
217228 let deleteKeys = {
218229 let $l = records
219230 let $s = size($l)
220231 let $acc0 = nil
221232 func $f0_1 ($a,$i) = if (($i >= $s))
222233 then $a
223234 else generateDeletingKeys($a, $l[$i])
224235
225236 func $f0_2 ($a,$i) = if (($i >= $s))
226237 then $a
227238 else throw("List size exceeds 100")
228239
229240 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
230241 }
231242 deleteKeys
232243 }
233244 else throw("Only admin can call this function")
234245
235246
236247
237248 @Callable(i)
238249 func issueToken (name,description,quantity,decimals) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
239250 then [Issue(name, description, quantity, decimals, true, unit, 0)]
240251 else throw("Only admin can call this function")
241252
242253
243254
244255 @Callable(a8)
245256 func call () = [DeleteEntry("3PPH7x7iqobW5ziyiRCic19rQqKr6nPYaK1_3N5viYFhnu1ew4FRZ9nujme9edr918FkT1a_current_reward")]
246257
247258
248259
249260 @Callable(i)
250261 func deposit (pool) = if ((size(i.payments) != 1))
251262 then throw("One attached payment expected")
252263 else {
253264 let amount = i.payments[0].amount
254265 let assetId = i.payments[0].assetId
255266 let assetIdString = match assetId {
256267 case id: ByteVector =>
257268 toBase58String(id)
258269 case _ =>
259270 throw("Match error")
260271 }
261272 if ((0 >= amount))
262273 then throw(("Deposit amount must be positive. Actual: " + toString(amount)))
263274 else {
264275 let poolAmountKey = (pool + "_asset_balance")
265276 let userAddress = toString(i.caller)
266277 let userPoolAmountKey = (((pool + "_") + userAddress) + "_asset_balance")
267278 let dAppAssetAddress = getDAppAssetAddress(pool)
268279 let liquidutyAssetAddress = match getString((pool + "_liquidity_token")) {
269280 case string: String =>
270281 string
271282 case nothing =>
272283 throw("You try to deposit on unsupported pool")
273284 }
274285 if (isPoolActive(pool))
275286 then {
276287 let liquidityTokenDecimal = match assetInfo(fromBase58String(liquidutyAssetAddress)) {
277288 case asset: Asset =>
278289 asset.decimals
279290 case _ =>
280291 throw("Can't find asset")
281292 }
282293 if ((liquidutyAssetAddress != assetIdString))
283294 then throw("You attached wrong liquidity token from Swop.fi")
284295 else {
285296 let poolAmount = getIntegerValue(this, poolAmountKey)
286297 let userAmount = match getInteger(userPoolAmountKey) {
287298 case int: Int =>
288299 int
289300 case nothing =>
290301 0
291302 }
303+ let userTotalLockedKey = getUserTotalLockedKey(pool, userAddress)
304+ let userTotalLocked = getUserTotalLocked(userTotalLockedKey)
292305 let userAmountWithoutFee = ((amount - fraction(amount, 1, depositFee, HALFUP)) - fraction(amount, 1, controllerFee, HALFUP))
293306 let transferToUserAmount = transferToUser(userAmountWithoutFee, fromBase58String(dAppAssetAddress), pool, depositType)
294307 let fee = (amount - userAmountWithoutFee)
295308 let newPoolAmount = ((poolAmount + amount) - fee)
296309 let newUserPoolAmount = (userAmount + transferToUserAmount)
310+ let newUserTotalLocked = (userTotalLocked + transferToUserAmount)
297311 let lockTokensKey = (((((pool + "_") + userAddress) + "_") + toBase58String(i.transactionId)) + "_locked")
298-[Reissue(fromBase58String(dAppAssetAddress), transferToUserAmount, true), ScriptTransfer(i.caller, transferToUserAmount, fromBase58String(dAppAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(lockTokensKey, userAmountWithoutFee), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount)]
312+[Reissue(fromBase58String(dAppAssetAddress), transferToUserAmount, true), ScriptTransfer(i.caller, transferToUserAmount, fromBase58String(dAppAssetAddress)), ScriptTransfer(govermanceAddress, fee, fromBase58String(liquidutyAssetAddress)), IntegerEntry(lockTokensKey, userAmountWithoutFee), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount), IntegerEntry(userTotalLockedKey, newUserTotalLocked)]
299313 }
300314 }
301315 else throw("Pool is not active!")
302316 }
303317 }
304318
305319
306320
307321 @Callable(i)
308322 func initWithdraw (pool) = if ((size(i.payments) != 1))
309323 then throw("One attached payment expected")
310324 else {
311325 let amount = i.payments[0].amount
312326 let assetId = i.payments[0].assetId
313327 let assetIdString = match assetId {
314328 case id: ByteVector =>
315329 toBase58String(id)
316330 case _ =>
317331 throw("Match error")
318332 }
333+ let assetIdByteVector = match assetId {
334+ case id: ByteVector =>
335+ id
336+ case _ =>
337+ throw("Match error")
338+ }
319339 if ((0 >= amount))
320340 then throw(("Withraw amount must be positive. Actual: " + toString(amount)))
321341 else if (isPoolActive(pool))
322342 then {
323343 let userAddress = toString(i.caller)
324- let transferToUserAmount = transferToUser(amount, fromBase58String(assetIdString), pool, withdrawType)
325- let userRecordKey = userWithdrawKey(pool, userAddress, toBase58String(i.transactionId))
326- let userWithdrawBurnTokenKey = userWithdrawBurnTokensKey(pool, userAddress, toBase58String(i.transactionId))
344+ let userTotalLockedKey = getUserTotalLockedKey(pool, userAddress)
345+ let userTotalLocked = getUserTotalLocked(userTotalLockedKey)
346+ let userTotalBalance = assetBalance(i.caller, assetIdByteVector)
347+ let nonLockedBalance = (userTotalBalance - userTotalLocked)
348+ if ((amount > nonLockedBalance))
349+ then throw("You have a locked tokens. Wait a time for unlock or try to withdrraw less")
350+ else {
351+ let transferToUserAmount = transferToUser(amount, fromBase58String(assetIdString), pool, withdrawType)
352+ let userRecordKey = userWithdrawKey(pool, userAddress, toBase58String(i.transactionId))
353+ let userWithdrawBurnTokenKey = userWithdrawBurnTokensKey(pool, userAddress, toBase58String(i.transactionId))
327354 [IntegerEntry(userRecordKey, transferToUserAmount), IntegerEntry(userWithdrawBurnTokenKey, amount)]
355+ }
328356 }
329357 else throw("Pool is not active!")
330358 }
331359
332360
333361
334362 @Callable(i)
335363 func withdraw (pool,userAddress,transactionId) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
336364 then {
337365 let userRecordKey = userWithdrawKey(pool, userAddress, transactionId)
338366 let userWithdrawBurnTokenKey = userWithdrawBurnTokensKey(pool, userAddress, transactionId)
339367 let sendUserAmount = getIntegerValue(this, userRecordKey)
340368 let burnTokenAmount = getIntegerValue(this, userWithdrawBurnTokenKey)
341369 let poolAmountKey = (pool + "_asset_balance")
342370 let userPoolAmountKey = (((pool + "_") + userAddress) + "_asset_balance")
343371 let userAmount = match getInteger(userPoolAmountKey) {
344372 case int: Int =>
345373 int
346374 case nothing =>
347375 0
348376 }
349377 let dAppAssetAddress = getDAppAssetAddress(pool)
350378 let liquidutyAssetAddress = getLiquidutyAssetAddress(pool)
351379 let poolAmount = getIntegerValue(this, poolAmountKey)
352380 let newPoolAmount = (poolAmount - sendUserAmount)
353381 let newUserPoolAmount = (userAmount - sendUserAmount)
354382 [Burn(fromBase58String(dAppAssetAddress), burnTokenAmount), ScriptTransfer(i.caller, sendUserAmount, fromBase58String(liquidutyAssetAddress)), IntegerEntry(poolAmountKey, newPoolAmount), IntegerEntry(userPoolAmountKey, newUserPoolAmount), DeleteEntry(userRecordKey), DeleteEntry(userWithdrawBurnTokenKey)]
355383 }
356384 else throw("Only admin can call this function")
357385
358386
359387
360388 @Callable(i)
361389 func poolActivating (pools,statuses) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
362390 then {
363391 func generatePoolActiveKeys (accumulated,pool) = {
364392 let poolIndex = value(indexOf(pools, pool))
365393 let status = statuses[poolIndex]
366394 BooleanEntry((pool + "_active"), status) :: accumulated
367395 }
368396
369397 let poolActiveKeys = {
370398 let $l = pools
371399 let $s = size($l)
372400 let $acc0 = nil
373401 func $f0_1 ($a,$i) = if (($i >= $s))
374402 then $a
375403 else generatePoolActiveKeys($a, $l[$i])
376404
377405 func $f0_2 ($a,$i) = if (($i >= $s))
378406 then $a
379407 else throw("List size exceeds 100")
380408
381409 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
382410 }
383411 poolActiveKeys
384412 }
385413 else throw("Only admin can call this function")
386414
387415
388416 @Verifier(tx)
389417 func verify () = match tx {
390418 case inv: InvokeScriptTransaction =>
391419 let lockShareTokens = if ((inv.dApp == farmingAddress))
392420 then if (if ((inv.function == "lockShareTokens"))
393421 then true
394422 else (inv.function == "claim"))
395423 then true
396424 else (inv.function == "withdrawShareTokens")
397425 else false
398426 let lockSwop = if ((inv.dApp == swopFiGovermanceAddress))
399427 then if ((inv.function == "lockSWOP"))
400428 then true
401429 else (inv.function == "withdrawSWOP")
402430 else false
403431 let dAppAddress = match inv.dApp {
404432 case dApp: Address =>
405433 toString(dApp)
406434 case _ =>
407435 throw("Transaction must have only address")
408436 }
409437 let poolFunctions = if (containsElement(swopFiPools, dAppAddress))
410438 then containsElement(swopFiFunctions, inv.function)
411439 else false
412440 let signedByAdmin = if (if (if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
413441 then true
414442 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey2))
415443 then true
416444 else sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey4))
417445 then true
418446 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
419447 if (if (if (lockShareTokens)
420448 then true
421449 else poolFunctions)
422450 then true
423451 else lockSwop)
424452 then signedByAdmin
425453 else false
426454 case _ =>
427455 let adm1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
428456 then 1
429457 else 0
430458 let adm2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
431459 then 1
432460 else 0
433461 let adm3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
434462 then 1
435463 else 0
436464 (((adm1Signed + adm2Signed) + adm3Signed) >= 2)
437465 }
438466

github/deemru/w8io/03bedc9 
88.16 ms