tx · 8xQzJTZudgLJk66B2PShisYssdn8SGgFx2Wg7ZNTkkZu 3N4wBgYtWgJW2LTRef2ekWQTrEXCRfXmGLh: -0.01000000 Waves 2023.10.16 13:15 [2801033] smart account 3N4wBgYtWgJW2LTRef2ekWQTrEXCRfXmGLh > SELF 0.00000000 Waves
{ "type": 13, "id": "8xQzJTZudgLJk66B2PShisYssdn8SGgFx2Wg7ZNTkkZu", "fee": 1000000, "feeAssetId": null, "timestamp": 1697451364386, "version": 2, "chainId": 84, "sender": "3N4wBgYtWgJW2LTRef2ekWQTrEXCRfXmGLh", "senderPublicKey": "7hRYZBcZCcRPgMoWSZsJ7jspEBuJt9Tc58d12xK3DWMp", "proofs": [ "33eR4o6CQUDJPJMbhG6ZsK4V7jERqusnDFWTCzfWLV5z2jxH5Geo8AKwn1FEandLPSy1KNJ6hai7e9dcUBtF3ooQ" ], "script": "base64:BgIWCAISBgoEGBERCBIAEgMKAQESAwoBAQYAEWxwX2FkZHJlc3NfcHVia2V5ASDI7Zjahu5VNVhgxzyW6CpbYvUiMMUf5OyBUQlo584acwAgbWFzc3RyYW5zZmVyX3doaXRlbGlzdGVkX2FkZHJlc3MJAKcIAQURbHBfYWRkcmVzc19wdWJrZXkAFGxwX2RlcG9zaXRvcl9hZGRyZXNzASACswHowiMqNbuuC0Vd0yxVVNtwKBLhy9jYvB2EmzVmeQAUbHBfd2hpdGVsaXN0X2FkZHJlc3MJAKcIAQUUbHBfZGVwb3NpdG9yX2FkZHJlc3MAC25ldHdvcmtfZmVlAKDCHgEddmFsaWRhdGVNYXNzVHJhbnNmZXJBcmd1bWVudHMECnJlY2lwaWVudHMHYW1vdW50cwpwYXltZW50SWR4CHBheW1lbnRzBA5yZWNpcGllbnRzU2l6ZQkAkAMBBQpyZWNpcGllbnRzBAthbW91bnRzU2l6ZQkAkAMBBQdhbW91bnRzBA5wYXltZW50SWR4U2l6ZQkAkAMBBQpwYXltZW50SWR4BAxwYXltZW50c1NpemUJAJADAQUIcGF5bWVudHMECW1pbkFtb3VudAkAlwMBBQdhbW91bnRzBA1taW5QYXltZW50SWR4CQCXAwEFCnBheW1lbnRJZHgEDW1heFBheW1lbnRJZHgJAJYDAQUKcGF5bWVudElkeAoBEXBheW1lbnRzVmFsaWRhdG9yAgxwYXltZW50QWNjdW0LbmV4dFBheW1lbnQECyR0MDEzNTYxMzkzBQxwYXltZW50QWNjdW0EDXZhbGlkUGF5bWVudHMIBQskdDAxMzU2MTM5MwJfMQQBaggFCyR0MDEzNTYxMzkzAl8yAwkAZwIFAWoFDHBheW1lbnRzU2l6ZQkAlAoCBQ12YWxpZFBheW1lbnRzCQBkAgUBagABCgERYW1vdW50c0FnZ3JlZ2F0b3ICC2Ftb3VudEFjY3VtCm5leHRBbW91bnQECyR0MDE1NDgxNTc3BQthbW91bnRBY2N1bQQGYW1vdW50CAULJHQwMTU0ODE1NzcCXzEEAWsIBQskdDAxNTQ4MTU3NwJfMgMDCQBnAgUBawUOcmVjaXBpZW50c1NpemUGCQECIT0CCQCRAwIFCnBheW1lbnRJZHgFAWsFAWoJAJQKAgUGYW1vdW50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AAACBQ5yZWNpcGllbnRzU2l6ZQULYW1vdW50c1NpemUJAAACBQ5yZWNpcGllbnRzU2l6ZQUOcGF5bWVudElkeFNpemUHCQBmAgUOcmVjaXBpZW50c1NpemUAAAcJAGcCAGQFDnJlY2lwaWVudHNTaXplBwkAZgIFDHBheW1lbnRzU2l6ZQAABwkAZgIFCW1pbkFtb3VudAAABwkAAAIFDW1pblBheW1lbnRJZHgAAAcJAAACBQ1tYXhQYXltZW50SWR4CQBlAgUMcGF5bWVudHNTaXplAAEHCQAAAggFEnBheW1lbnRzVmFsaWRhdGlvbgJfMQUMcGF5bWVudHNTaXplBwQBaQEMbWFzc1RyYW5zZmVyBApyZWNpcGllbnRzB2Ftb3VudHMKcGF5bWVudElkeAphdHRhY2htZW50BANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQFpBmNhbGxlcgUgbWFzc3RyYW5zZmVyX3doaXRlbGlzdGVkX2FkZHJlc3MJAAIBCQCsAgIJAKwCAgISTm90IGFuIEFkbWluIG9ubHkgCQClCAEFIG1hc3N0cmFuc2Zlcl93aGl0ZWxpc3RlZF9hZGRyZXNzAg0gY2FuIHNpZ24gaXQuAwkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAkAAgECK09ubHkgV2F2ZXMgaXMgYWxsb3dlZCB0byBBdHRhY2ggYXMgcGF5bWVudC4DCQEBIQEJAR12YWxpZGF0ZU1hc3NUcmFuc2ZlckFyZ3VtZW50cwQFCnJlY2lwaWVudHMFB2Ftb3VudHMFCnBheW1lbnRJZHgIBQFpCHBheW1lbnRzCQACAQIRSW52YWxpZCBhcmd1bWVudHMEDnJlY2lwaWVudHNTaXplCQCQAwEFCnJlY2lwaWVudHMKARhzY3JpcHRUcmFuc2ZlcnNHZW5lcmF0b3ICBWFjY3VtBG5leHQECyR0MDI5NDYyOTc4BQVhY2N1bQQPc2NyaXB0VHJhbnNmZXJzCAULJHQwMjk0NjI5NzgCXzEEAWoIBQskdDAyOTQ2Mjk3OAJfMgMJAGcCBQFqBQ5yZWNpcGllbnRzU2l6ZQkAlAoCBQ9zY3JpcHRUcmFuc2ZlcnMJAGQCBQFqAAEJAJQKAgkAzQgCBQ9zY3JpcHRUcmFu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RnVuZHNBZGRlZFRvUG9vbGJ5Q29tcGFueQgFA3BtdAZhbW91bnQEFVByZXZpb3VzUG9vbExpcXVpZGl0eQQHJG1hdGNoMAkAmggCBQR0aGlzAhRUb3RhbF9Qb29sX0xpcXVpZGl0eQMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQSVG90YWxQb29sTGlxdWlkaXR5CQBkAgUVUHJldmlvdXNQb29sTGlxdWlkaXR5CAUDcG10BmFtb3VudAQYUHJldmlvdXNMUERlcG9zaXRDb3VudGVyBAckbWF0Y2gwCQCaCAIFBHRoaXMCEkxQX0RlcG9zaXRfQ291bnRlcgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVVG90YWxMUERlcG9zaXRDb3VudGVyCQBkAgUYUHJldmlvdXNMUERlcG9zaXRDb3VudGVyAAEDCQECIT0CCAUBaQZjYWxsZXIFFGxwX3doaXRlbGlzdF9hZGRyZXNzCQACAQkArAICCQCsAgICJVRoaXMgQWRkcmVzcyBpcyBub3QgQXV0aG9yaXplZC4gT25seSAJAKUIAQUUbHBfd2hpdGVsaXN0X2FkZHJlc3MCIiBpcyBBdXRob3JpemVkIEFkZHJlc3MgdG8gU2lnbiBpdC4DCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkCQACAQIuT25seSBXQVZFUyBpcyBhbGxvd2VkIHRvIGRlcG9zaXQgYXQgdGhlIG1vbWVudAkAzAgCCQEMSW50ZWdlckVudHJ5AgIUVG90YWxfUG9vbF9MaXF1aWRpdHkFElRvdGFsUG9vbExpcXVpZGl0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgISTFBfRGVwb3NpdF9Db3VudGVyBRVUb3RhbExQRGVwb3NpdENvdW50ZXIJAMwIAgkBDEludGVnZXJFbnRyeQICDlRvdGFsX0xQX0FkZGVkBR5Ub3RhbEZ1bmRzQWRkZWRUb1Bvb2xieUNvbXBhbnkFA25pbAFpAQ9VcGRhdGVMUEJhbGFuY2UBFlBhaWRNYXNzVHJhbnNmZXJBbW91bnQEFHJlYWRfYWNjb3VudF9iYWxhbmNlCAkA7wcBBQR0aGlzB3JlZ3VsYXIEGXJlYWRfdG90YWxfcG9vbF9saXF1aWRpdHkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzAhRUb3RhbF9Qb29sX0xpcXVpZGl0eQIkTm8gSW5pdGlhbCBQb29sIExpcXVpZGl0eSB3YXMgRm91bmQuBBVyZWNlaXZlZF9vcmRlcl9hbW91bnQJAGUCCQBlAgUUcmVhZF9hY2NvdW50X2JhbGFuY2UFGXJlYWRfdG90YWxfcG9vbF9saXF1aWRpdHkFC25ldHdvcmtfZmVlBBR1cGRhdGVkX3Bvb2xfYmFsYW5jZQkAZAIJAGUCBRlyZWFkX3RvdGFsX3Bvb2xfbGlxdWlkaXR5BRZQYWlkTWFzc1RyYW5zZmVyQW1vdW50BRVyZWNlaXZlZF9vcmRlcl9hbW91bnQEG1ByZXZpb3VzTWFzc1RyYW5zZmVyQ291bnRlcgQHJG1hdGNoMAkAmggCBQR0aGlzAhVNYXNzX1RyYW5zZmVyX0NvdW50ZXIDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEGFRvdGFsTWFzc1RyYW5zZmVyQ291bnRlcgkAZAIFG1ByZXZpb3VzTWFzc1RyYW5zZmVyQ291bnRlcgABBBhQcmV2aW91c01hc3NUcmFuc2ZlclNlbmQEByRtYXRjaDAJAJoIAgUEdGhpcwIYVG90YWxfTWFzc19UcmFuc2Zlcl9TZW5kAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVUb3RhbE1hc3NUcmFuc2ZlclNlbmQJAGQCBRhQcmV2aW91c01hc3NUcmFuc2ZlclNlbmQFFlBhaWRNYXNzVHJhbnNmZXJBbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFIG1hc3N0cmFuc2Zlcl93aGl0ZWxpc3RlZF9hZGRyZXNzCQACAQkArAICCQCsAgICJVRoaXMgQWRkcmVzcyBpcyBub3QgQXV0aG9yaXplZC4gT25seSAJAKUIAQUgbWFzc3RyYW5zZmVyX3doaXRlbGlzdGVkX2FkZHJlc3MCIiBpcyBBdXRob3JpemVkIEFkZHJlc3MgdG8gU2lnbiBpdC4DCQBmAgUWUGFpZE1hc3NUcmFuc2ZlckFtb3VudAUZcmVhZF90b3RhbF9wb29sX2xpcXVpZGl0eQkAAgECQ1BsYWNlZCBNYXNzIFRyYW5zZmVyIEFtb3VudCBTaXplIGlzIG1vcmUgdGhhbiBUb3RhbCBQb29sIExpcXVpZGl0eS4JAMwIAgkBDEludGVnZXJFbnRyeQICFFRvdGFsX1Bvb2xfTGlxdWlkaXR5BRR1cGRhdGVkX3Bvb2xfYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIVTWFzc19UcmFuc2Zlcl9Db3VudGVyBRhUb3RhbE1hc3NUcmFuc2ZlckNvdW50ZXIJAMwIAgkBDEludGVnZXJFbnRyeQICGFRvdGFsX01hc3NfVHJhbnNmZXJfU2VuZAUVVG90YWxNYXNzVHJhbnNmZXJTZW5kCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQUYVG90YWxNYXNzVHJhbnNmZXJDb3VudGVyAhNfTWFzc19UcmFuc2Zlcl9TZW5kBRZQYWlkTWFzc1RyYW5zZmVyQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFIG1hc3N0cmFuc2Zlcl93aGl0ZWxpc3RlZF9hZGRyZXNzBRZQYWlkTWFzc1RyYW5zZmVyQW1vdW50BQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFIG1hc3N0cmFuc2Zlcl93aGl0ZWxpc3RlZF9hZGRyZXNzBQtuZXR3b3JrX2ZlZQUEdW5pdAUDbmlsAWkBEVdpdGhkcmF3TFBCYWxhbmNlAQ5XaXRoZHJhd0Ftb3VudAQZcmVhZF90b3RhbF9wb29sX2xpcXVpZGl0eQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMCFFRvdGFsX1Bvb2xfTGlxdWlkaXR5AiRObyBJbml0aWFsIFBvb2wgTGlxdWlkaXR5IHdhcyBGb3VuZC4EFHVwZGF0ZWRfcG9vbF9iYWxhbmNlCQBlAgUZcmVhZF90b3RhbF9wb29sX2xpcXVpZGl0eQUOV2l0aGRyYXdBbW91bnQEGVByZXZpb3VzTFBXaXRoZHJhd0NvdW50ZXIEByRtYXRjaDAJAJoIAgUEdGhpcwITTFBfV2l0aGRyYXdfQ291bnRlcgMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQWVG90YWxMUFdpdGhkcmF3Q291bnRlcgkAZAIFGVByZXZpb3VzTFBXaXRoZHJhd0NvdW50ZXIAAQQSUHJldmlvdXNMUFdpdGhkcmF3BAckbWF0Y2gwCQCaCAIFBHRoaXMCEVRvdGFsX0xQX1dpdGhkcmF3AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABA9Ub3RhbExQV2l0aGRyYXcJAGQCBRJQcmV2aW91c0xQV2l0aGRyYXcFDldpdGhkcmF3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBRRscF93aGl0ZWxpc3RfYWRkcmVzcwkAAgEJAKwCAgkArAICAiVUaGlzIEFkZHJlc3MgaXMgbm90IEF1dGhvcml6ZWQuIE9ubHkgCQClCAEFFGxwX3doaXRlbGlzdF9hZGRyZXNzAiIgaXMgQXV0aG9yaXplZCBBZGRyZXNzIHRvIFNpZ24gaXQuAwkAZgIFDldpdGhkcmF3QW1vdW50BRlyZWFkX3RvdGFsX3Bvb2xfbGlxdWlkaXR5CQACAQI+UGxhY2VkIFdpdGhkcmF3IEFtb3VudCBTaXplIGlzIG1vcmUgdGhhbiBUb3RhbCBQb29sIExpcXVpZGl0eS4JAMwIAgkBDEludGVnZXJFbnRyeQICFFRvdGFsX1Bvb2xfTGlxdWlkaXR5BRR1cGRhdGVkX3Bvb2xfYmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgITTFBfV2l0aGRyYXdfQ291bnRlcgUWVG90YWxMUFdpdGhkcmF3Q291bnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgIRVG90YWxfTFBfV2l0aGRyYXcFD1RvdGFsTFBXaXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCkAwEFFlRvdGFsTFBXaXRoZHJhd0NvdW50ZXICDF9MUF9XaXRoZHJhdwUOV2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUUbHBfd2hpdGVsaXN0X2FkZHJlc3MFDldpdGhkcmF3QW1vdW50BQR1bml0BQNuaWwBAnR4AQZ2ZXJpZnkABAckbWF0Y2gwBQJ0eAMDCQABAgUHJG1hdGNoMAIFT3JkZXIGAwkAAQIFByRtYXRjaDACE0V4Y2hhbmdlVHJhbnNhY3Rpb24GCQABAgUHJG1hdGNoMAITVHJhbnNmZXJUcmFuc2FjdGlvbgQBdAUHJG1hdGNoMAcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXm+S1Ho", "height": 2801033, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 5ifMDAaSpBkaEB5z2xrDyqzA2DZHH8G1Fgk4znhHsoo9 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let lp_address_pubkey = base58'EXLfxKmqhQPiProBaoPatTentUSZX5Dd8A8bYDcmfNwt' | |
5 | + | ||
6 | + | let masstransfer_whitelisted_address = addressFromPublicKey(lp_address_pubkey) | |
7 | + | ||
8 | + | let lp_depositor_address = base58'BY8Zzs9J1T1DuiWMW4QKgbVAC99HYARVSxV4gd8fN7A' | |
9 | + | ||
10 | + | let lp_whitelist_address = addressFromPublicKey(lp_depositor_address) | |
11 | + | ||
12 | + | let network_fee = 500000 | |
13 | + | ||
14 | + | func validateMassTransferArguments (recipients,amounts,paymentIdx,payments) = { | |
15 | + | let recipientsSize = size(recipients) | |
16 | + | let amountsSize = size(amounts) | |
17 | + | let paymentIdxSize = size(paymentIdx) | |
18 | + | let paymentsSize = size(payments) | |
19 | + | let minAmount = min(amounts) | |
20 | + | let minPaymentIdx = min(paymentIdx) | |
21 | + | let maxPaymentIdx = max(paymentIdx) | |
22 | + | func paymentsValidator (paymentAccum,nextPayment) = { | |
23 | + | let $t013561393 = paymentAccum | |
24 | + | let validPayments = $t013561393._1 | |
25 | + | let j = $t013561393._2 | |
26 | + | if ((j >= paymentsSize)) | |
27 | + | then $Tuple2(validPayments, (j + 1)) | |
28 | + | else { | |
29 | + | func amountsAggregator (amountAccum,nextAmount) = { | |
30 | + | let $t015481577 = amountAccum | |
31 | + | let amount = $t015481577._1 | |
32 | + | let k = $t015481577._2 | |
33 | + | if (if ((k >= recipientsSize)) | |
34 | + | then true | |
35 | + | else (paymentIdx[k] != j)) | |
36 | + | then $Tuple2(amount, (k + 1)) | |
37 | + | else $Tuple2((amount + nextAmount), (k + 1)) | |
38 | + | } | |
39 | + | ||
40 | + | let aggregatedAmount = { | |
41 | + | let $l = amounts | |
42 | + | let $s = size($l) | |
43 | + | let $acc0 = $Tuple2(0, 0) | |
44 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
45 | + | then $a | |
46 | + | else amountsAggregator($a, $l[$i]) | |
47 | + | ||
48 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
49 | + | then $a | |
50 | + | else throw("List size exceeds 100") | |
51 | + | ||
52 | + | $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) | |
53 | + | } | |
54 | + | if ((aggregatedAmount._1 == nextPayment.amount)) | |
55 | + | then $Tuple2((validPayments + 1), (j + 1)) | |
56 | + | else $Tuple2(validPayments, (j + 1)) | |
57 | + | } | |
58 | + | } | |
59 | + | ||
60 | + | let paymentsValidation = { | |
61 | + | let $l = payments | |
62 | + | let $s = size($l) | |
63 | + | let $acc0 = $Tuple2(0, 0) | |
64 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
65 | + | then $a | |
66 | + | else paymentsValidator($a, $l[$i]) | |
67 | + | ||
68 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
69 | + | then $a | |
70 | + | else throw("List size exceeds 10") | |
71 | + | ||
72 | + | $f0_2($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) | |
73 | + | } | |
74 | + | if (if (if (if (if (if (if (if ((recipientsSize == amountsSize)) | |
75 | + | then (recipientsSize == paymentIdxSize) | |
76 | + | else false) | |
77 | + | then (recipientsSize > 0) | |
78 | + | else false) | |
79 | + | then (100 >= recipientsSize) | |
80 | + | else false) | |
81 | + | then (paymentsSize > 0) | |
82 | + | else false) | |
83 | + | then (minAmount > 0) | |
84 | + | else false) | |
85 | + | then (minPaymentIdx == 0) | |
86 | + | else false) | |
87 | + | then (maxPaymentIdx == (paymentsSize - 1)) | |
88 | + | else false) | |
89 | + | then (paymentsValidation._1 == paymentsSize) | |
90 | + | else false | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | @Callable(i) | |
95 | + | func massTransfer (recipients,amounts,paymentIdx,attachment) = { | |
96 | + | let pmt = value(i.payments[0]) | |
97 | + | if ((i.caller != masstransfer_whitelisted_address)) | |
98 | + | then throw((("Not an Admin only " + toString(masstransfer_whitelisted_address)) + " can sign it.")) | |
99 | + | else if (isDefined(pmt.assetId)) | |
100 | + | then throw("Only Waves is allowed to Attach as payment.") | |
101 | + | else if (!(validateMassTransferArguments(recipients, amounts, paymentIdx, i.payments))) | |
102 | + | then throw("Invalid arguments") | |
103 | + | else { | |
104 | + | let recipientsSize = size(recipients) | |
105 | + | func scriptTransfersGenerator (accum,next) = { | |
106 | + | let $t029462978 = accum | |
107 | + | let scriptTransfers = $t029462978._1 | |
108 | + | let j = $t029462978._2 | |
109 | + | if ((j >= recipientsSize)) | |
110 | + | then $Tuple2(scriptTransfers, (j + 1)) | |
111 | + | else $Tuple2((scriptTransfers :+ ScriptTransfer(addressFromStringValue(recipients[j]), next, i.payments[paymentIdx[j]].assetId)), (j + 1)) | |
112 | + | } | |
113 | + | ||
114 | + | let result = { | |
115 | + | let $l = amounts | |
116 | + | let $s = size($l) | |
117 | + | let $acc0 = $Tuple2(nil, 0) | |
118 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
119 | + | then $a | |
120 | + | else scriptTransfersGenerator($a, $l[$i]) | |
121 | + | ||
122 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
123 | + | then $a | |
124 | + | else throw("List size exceeds 100") | |
125 | + | ||
126 | + | $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) | |
127 | + | } | |
128 | + | $Tuple2(result._1, unit) | |
129 | + | } | |
130 | + | } | |
131 | + | ||
132 | + | ||
133 | + | ||
134 | + | @Callable(i) | |
135 | + | func AddPoolLiquidity () = { | |
136 | + | let calleraddress = toBase58String(i.caller.bytes) | |
137 | + | let pmt = if ((size(i.payments) == 1)) | |
138 | + | then i.payments[0] | |
139 | + | else throw("No payment attached, Please Attach only Whitelisted Tokens in payment[1].") | |
140 | + | let PreviousFundsAddedToPoolbyCompany = match getInteger(this, "Total_LP_Added") { | |
141 | + | case a: Int => | |
142 | + | a | |
143 | + | case _ => | |
144 | + | 0 | |
145 | + | } | |
146 | + | let TotalFundsAddedToPoolbyCompany = (PreviousFundsAddedToPoolbyCompany + pmt.amount) | |
147 | + | let PreviousPoolLiquidity = match getInteger(this, "Total_Pool_Liquidity") { | |
148 | + | case a: Int => | |
149 | + | a | |
150 | + | case _ => | |
151 | + | 0 | |
152 | + | } | |
153 | + | let TotalPoolLiquidity = (PreviousPoolLiquidity + pmt.amount) | |
154 | + | let PreviousLPDepositCounter = match getInteger(this, "LP_Deposit_Counter") { | |
155 | + | case a: Int => | |
156 | + | a | |
157 | + | case _ => | |
158 | + | 0 | |
159 | + | } | |
160 | + | let TotalLPDepositCounter = (PreviousLPDepositCounter + 1) | |
161 | + | if ((i.caller != lp_whitelist_address)) | |
162 | + | then throw((("This Address is not Authorized. Only " + toString(lp_whitelist_address)) + " is Authorized Address to Sign it.")) | |
163 | + | else if (isDefined(pmt.assetId)) | |
164 | + | then throw("Only WAVES is allowed to deposit at the moment") | |
165 | + | else [IntegerEntry("Total_Pool_Liquidity", TotalPoolLiquidity), IntegerEntry("LP_Deposit_Counter", TotalLPDepositCounter), IntegerEntry("Total_LP_Added", TotalFundsAddedToPoolbyCompany)] | |
166 | + | } | |
167 | + | ||
168 | + | ||
169 | + | ||
170 | + | @Callable(i) | |
171 | + | func UpdateLPBalance (PaidMassTransferAmount) = { | |
172 | + | let read_account_balance = wavesBalance(this).regular | |
173 | + | let read_total_pool_liquidity = valueOrErrorMessage(getInteger(this, "Total_Pool_Liquidity"), "No Initial Pool Liquidity was Found.") | |
174 | + | let received_order_amount = ((read_account_balance - read_total_pool_liquidity) - network_fee) | |
175 | + | let updated_pool_balance = ((read_total_pool_liquidity - PaidMassTransferAmount) + received_order_amount) | |
176 | + | let PreviousMassTransferCounter = match getInteger(this, "Mass_Transfer_Counter") { | |
177 | + | case a: Int => | |
178 | + | a | |
179 | + | case _ => | |
180 | + | 0 | |
181 | + | } | |
182 | + | let TotalMassTransferCounter = (PreviousMassTransferCounter + 1) | |
183 | + | let PreviousMassTransferSend = match getInteger(this, "Total_Mass_Transfer_Send") { | |
184 | + | case a: Int => | |
185 | + | a | |
186 | + | case _ => | |
187 | + | 0 | |
188 | + | } | |
189 | + | let TotalMassTransferSend = (PreviousMassTransferSend + PaidMassTransferAmount) | |
190 | + | if ((i.caller != masstransfer_whitelisted_address)) | |
191 | + | then throw((("This Address is not Authorized. Only " + toString(masstransfer_whitelisted_address)) + " is Authorized Address to Sign it.")) | |
192 | + | else if ((PaidMassTransferAmount > read_total_pool_liquidity)) | |
193 | + | then throw("Placed Mass Transfer Amount Size is more than Total Pool Liquidity.") | |
194 | + | else [IntegerEntry("Total_Pool_Liquidity", updated_pool_balance), IntegerEntry("Mass_Transfer_Counter", TotalMassTransferCounter), IntegerEntry("Total_Mass_Transfer_Send", TotalMassTransferSend), IntegerEntry((toString(TotalMassTransferCounter) + "_Mass_Transfer_Send"), PaidMassTransferAmount), ScriptTransfer(masstransfer_whitelisted_address, PaidMassTransferAmount, unit), ScriptTransfer(masstransfer_whitelisted_address, network_fee, unit)] | |
195 | + | } | |
196 | + | ||
197 | + | ||
198 | + | ||
199 | + | @Callable(i) | |
200 | + | func WithdrawLPBalance (WithdrawAmount) = { | |
201 | + | let read_total_pool_liquidity = valueOrErrorMessage(getInteger(this, "Total_Pool_Liquidity"), "No Initial Pool Liquidity was Found.") | |
202 | + | let updated_pool_balance = (read_total_pool_liquidity - WithdrawAmount) | |
203 | + | let PreviousLPWithdrawCounter = match getInteger(this, "LP_Withdraw_Counter") { | |
204 | + | case a: Int => | |
205 | + | a | |
206 | + | case _ => | |
207 | + | 0 | |
208 | + | } | |
209 | + | let TotalLPWithdrawCounter = (PreviousLPWithdrawCounter + 1) | |
210 | + | let PreviousLPWithdraw = match getInteger(this, "Total_LP_Withdraw") { | |
211 | + | case a: Int => | |
212 | + | a | |
213 | + | case _ => | |
214 | + | 0 | |
215 | + | } | |
216 | + | let TotalLPWithdraw = (PreviousLPWithdraw + WithdrawAmount) | |
217 | + | if ((i.caller != lp_whitelist_address)) | |
218 | + | then throw((("This Address is not Authorized. Only " + toString(lp_whitelist_address)) + " is Authorized Address to Sign it.")) | |
219 | + | else if ((WithdrawAmount > read_total_pool_liquidity)) | |
220 | + | then throw("Placed Withdraw Amount Size is more than Total Pool Liquidity.") | |
221 | + | else [IntegerEntry("Total_Pool_Liquidity", updated_pool_balance), IntegerEntry("LP_Withdraw_Counter", TotalLPWithdrawCounter), IntegerEntry("Total_LP_Withdraw", TotalLPWithdraw), IntegerEntry((toString(TotalLPWithdrawCounter) + "_LP_Withdraw"), WithdrawAmount), ScriptTransfer(lp_whitelist_address, WithdrawAmount, unit)] | |
222 | + | } | |
223 | + | ||
224 | + | ||
225 | + | @Verifier(tx) | |
226 | + | func verify () = match tx { | |
227 | + | case t: Order|ExchangeTransaction|TransferTransaction => | |
228 | + | false | |
229 | + | case _ => | |
230 | + | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
231 | + | } | |
232 | + |
github/deemru/w8io/c3f4982 23.95 ms ◑