tx · 3WPaa5MMuvdphvLmonoBBv4ykNhojDYpNkk7pFzp5fCF

3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy:  -0.02200000 Waves

2023.06.28 20:30 [2642805] smart account 3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy > SELF 0.00000000 Waves

{ "type": 13, "id": "3WPaa5MMuvdphvLmonoBBv4ykNhojDYpNkk7pFzp5fCF", "fee": 2200000, "feeAssetId": null, "timestamp": 1687973470784, "version": 2, "chainId": 84, "sender": "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy", "senderPublicKey": "C3PaRKeL8AUKbwUqdniMQtThgcTh5DYHV1777Hkxy7rp", "proofs": [ "YZ9Wez2sMKjhoGA2rhgm3LHNBV9fVFZAUgQoPeFR7V8MHf2VWrkeTXYHm6NEiWRpavPeEaQUSF94je6xWZD228d" ], "script": "base64:BgJHCAISAwoBGBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgSAwoBGBIDCgEIEgMKARgSAwoBGBIDCgEYEgMKARgSAwoBCBIAEgBWAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAPREFJTFlSRVNCWVBJRUNFAID40gEACURBWU1JTExJUwCAuJkpAAxXSE1VTFRJUExJRVIAgMivoCUAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAMACUVTQlVZQ09FRgAEAApFU1NFTExDT0VGAAoAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgISMV8xXzFfMl8yXzVfMV8xMF8wCQDMCAICEzJfMl8yXzRfNF8xMF8xXzEwXzAJAMwIAgITM18zXzNfNl82XzE1XzFfMTBfMAkAzAgCAhMyXzVfNV8yXzdfNV8yXzEwMF8xCQDMCAICFzRfMTBfMTBfNF8xNF8xMF8yXzEwMF8xCQDMCAICFzZfMTVfMTVfNl8yMV8xNV8yXzEwMF8xCQDMCAICEjFfMV8xXzFfMV84XzFfMTBfMgkAzAgCAhMyXzJfMl8yXzJfMTZfMV8xMF8yCQDMCAICEzNfM18zXzNfM18yNF8xXzEwXzIJAMwIAgITOV85XzFfNV81XzFfNV8xMDBfMwkAzAgCAhcxOF8xOF8yXzEwXzEwXzJfNV8xMDBfMwkAzAgCAhcyN18yN18zXzE1XzE1XzNfNV8xMDBfMwkAzAgCAhIyXzJfMV8yXzJfMl8xXzEwXzQJAMwIAgISNF80XzJfNF80XzRfMV8xMF80CQDMCAICEjZfNl8zXzZfNl82XzFfMTBfNAUDbmlsABFyZWNpcGVJZHhQYWNrc2l6ZQAHARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgluZnRPd25lcl8FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGxhbmRDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtpbmZyYUxldmVsXwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICDWxhbmRBcnRTdGF0dXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCgEGYWRkTWF0AgJhYwFqCQBkAgUCYWMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFAWoKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZhZGRNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdQdXp6bGVQb29sRGFwcAAFAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwABJwdXp6bGVQb29sQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdQdXp6bGVQb29sRGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyABJ3bGdJc3N1ZWRBbW91bnRLZXkCEHdsZ19pc3N1ZWRBbW91bnQADGlkeFdsZ0Ftb3VudAAAAAtpZHhXbGdQcmljZQABAAtpZHhXbGdGdW5kcwACAA1pZHhXbGdFY29ub215AAMADmlkeFdsZ0FjdGl2aXR5AAQAD2lkeFdsZ0FyYml0cmFnZQAFAAppZHhXbGdQb29sAAYBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBC2dldFdsZ1N0YXRzAAQMaXNzdWVkQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgULd2xnQ29udHJhY3QFEndsZ0lzc3VlZEFtb3VudEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0BAplY29ub215VXNkCQDwBwIFD2Vjb25vbXlDb250cmFjdAULdXNkdEFzc2V0SWQEB3Jlc3RVc2QJAPAHAgUMcmVzdENvbnRyYWN0BQt1c2R0QXNzZXRJZAQGd2xnVXNkCQDwBwIFC3dsZ0NvbnRyYWN0BQt1c2R0QXNzZXRJZAQJcHV6emxlVXNkCQDwBwIFEnB1enpsZVBvb2xDb250cmFjdAULdXNkdEFzc2V0SWQECHRvdGFsVXNkCQBkAgkAZAIJAGQCBQplY29ub215VXNkBQdyZXN0VXNkBQZ3bGdVc2QFCXB1enpsZVVzZAkAzAgCBQxpc3N1ZWRBbW91bnQJAMwIAgkAawMFCHRvdGFsVXNkBQVNVUxUOAUMaXNzdWVkQW1vdW50CQDMCAIFCHRvdGFsVXNkCQDMCAIFCmVjb25vbXlVc2QJAMwIAgUHcmVzdFVzZAkAzAgCBQZ3bGdVc2QJAMwIAgUJcHV6emxlVXNkBQNuaWwADVVTRFRQUklaRVBBUlQAoMIeARJhc0xpc3RJbnRDb21wYWN0ZWQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQKdmFsQW55TGlzdAUHJG1hdGNoMAMJAQIhPQIJAJADAQUKdmFsQW55TGlzdAUGTlVNUkVTCQACAQkArAICAg5BcnJheSBzaXplIGlzIAkApAMBCQCQAwEFCnZhbEFueUxpc3QKAQRjb252AgNhY2MEaXRlbQQHJG1hdGNoMQUEaXRlbQMJAAECBQckbWF0Y2gxAgNJbnQEAml0BQckbWF0Y2gxCQDNCAIFA2FjYwkApAMBBQJpdAkAAgECFExpc3QgdHlwZSBpcyBub3QgSW50BAFyCgACJGwFCnZhbEFueUxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGNvbnYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwkAAgECFmZhaWwgdG8gY2FzdCBpbnRvIExpc3QBDWFzU3BsaXRSZXN1bHQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACFihMaXN0W0FueV0sIExpc3RbQW55XSkEAnQyBQckbWF0Y2gwCQCUCgIJARJhc0xpc3RJbnRDb21wYWN0ZWQBCAUCdDICXzEJARJhc0xpc3RJbnRDb21wYWN0ZWQBCAUCdDICXzIJAAIBAh5mYWlsIHRvIGNhc3QgaW50byAoTGlzdCwgTGlzdCkBDndhbGxldEludGVybmFsAQ51c2VyQWRkcmVzc09wdAQEYWRkcgkApggBBQ51c2VyQWRkcmVzc09wdAQHYmFsYW5jZQMJAQlpc0RlZmluZWQBBQRhZGRyCQDvBwEJAQV2YWx1ZQEFBGFkZHIJAQ5CYWxhbmNlRGV0YWlscwQAAAAAAAAAAAQLdXNkdEJhbGFuY2UDCQEJaXNEZWZpbmVkAQUEYWRkcgkA8AcCCQEFdmFsdWUBBQRhZGRyBQt1c2R0QXNzZXRJZAAABApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQ51c2VyQWRkcmVzc09wdAUOdXNlckFkZHJlc3NPcHQEBXJlZkJ5CQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUFkZHJlc3NSZWZCeQEFDnVzZXJBZGRyZXNzT3B0AgAEBHJlZnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQETa2V5QWRkcmVzc1JlZmVycmFscwEFDnVzZXJBZGRyZXNzT3B0AgAECGxhc3RUeElkCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBEWtleUxhc3RUeElkQnlVc2VyAQUOdXNlckFkZHJlc3NPcHQCAAkAzAgCCQCsAgICEiVzJXNfX2N1c3RvbU5hbWVfXwUKY3VzdG9tTmFtZQkAzAgCCQCsAgICEiVzJXNfX3JlZmVycmVkQnlfXwUFcmVmQnkJAMwIAgkArAICAhElcyVzX19yZWZlcnJhbHNfXwUEcmVmcwkAzAgCCQCsAgICECVzJXNfX2xhc3RUeElkX18FCGxhc3RUeElkCQDMCAIJAKwCAgIWJXMlcyVkX193YXZlc0JhbGFuY2VfXwkApAMBCAUHYmFsYW5jZQlhdmFpbGFibGUJAMwIAgkArAICAhUlcyVzJWRfX3VzZHRCYWxhbmNlX18JAKQDAQULdXNkdEJhbGFuY2UFA25pbAEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAJUKAwUKaW5mcmFMZXZlbAUJYXJ0UGllY2VzCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJdm9sUHJlZml4BAVwYXJ0cwkAtQkCBQl2b2xQcmVmaXgCAV8JAGgCCQBoAgUMV0hNVUxUSVBMSUVSCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAABDGdldFdhcmVob3VzZQMFd2hLZXkJbGFuZEluZGV4CmluZnJhTGV2ZWwECXZvbFByZWZpeAkArAICCQCsAgIJAKQDAQUJbGFuZEluZGV4AgFfCQCkAwEFCmluZnJhTGV2ZWwEBHRvdFMJAKQDAQkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFBXdoS2V5CQCsAgIJAKwCAgkArAICCQCsAgIFCXZvbFByZWZpeAIeOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOjowXzBfBQR0b3RTAgFfBQR0b3RTCQC1CQIFBXdoU3RyAgE6AQ1kdWNrSW5mb1R1cGxlAQtkdWNrQXNzZXRJZAkAlwoFCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtkdWNrQXNzZXRJZAD///////////8BCAkBBXZhbHVlAQkA7AcBCQDZBAEFC2R1Y2tBc3NldElkBG5hbWUJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQCAAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQA////////////AQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCE2dldEJhY2twYWNrUkVBRE9OTFkJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAQ1kdWNrSW5mb0FycmF5AwtkdWNrQXNzZXRJZAVvd25lcgdkdWNrSW5mBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQULZHVja0Fzc2V0SWQIBQdkdWNrSW5mAl8yCQDMCAIJAKwCAgIPJXMlc19fYXNzZXRJZF9fBQtkdWNrQXNzZXRJZAkAzAgCCQCsAgICDSVzJXNfX293bmVyX18FBW93bmVyCQDMCAIJAKwCAgISJXMlc19fY3VzdG9tTmFtZV9fBQpjdXN0b21OYW1lCQDMCAIJAKwCAgISJXMlZF9fc3Rha2VkVGltZV9fCQCkAwEIBQdkdWNrSW5mAl8xCQDMCAIJAKwCAgIMJXMlc19fbmFtZV9fCAUHZHVja0luZgJfMgkAzAgCCQCsAgICECVzJXNfX2xvY2F0aW9uX18IBQdkdWNrSW5mAl8zCQDMCAIJAKwCAgIOJXMlZF9faGVhbHRoX18JAKQDAQgFB2R1Y2tJbmYCXzQJAMwIAgkArAICAhAlcyVzX19iYWNrUGFja19fCAUHZHVja0luZgJfNQUDbmlsAQ1sYW5kSW5mb0FycmF5AwtsYW5kQXNzZXRJZAVvd25lcgpzdGFrZWRUaW1lAwkAAAIFC2xhbmRBc3NldElkAgAJAAIBAhdsYW5kQXNzZXRJZCBpcyByZXF1aXJlZAQBYQkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAFkCQC1CQIIBQFhC2Rlc2NyaXB0aW9uAgFfBAdsYW5kTnVtAwkAZgIIBQFhCHF1YW50aXR5AAAJAJEDAgUBZAUKcmVjTGFuZE51bQkArAICAgEtCQCRAwIFAWQFCnJlY0xhbmROdW0EBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUEDHByb2R1Y3Rpdml0eQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQpzdGFrZWRUaW1lBAhhdmFpbFJlcwMJAGYCBQpzdGFrZWRUaW1lAAAJAGsDBQlkZWx0YVRpbWUJAGgCCAUMcHJvZHVjdGl2aXR5Al8zBQZwaWVjZXMFCURBWU1JTExJUwAABAduZWVkTWF0CQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMJAGQCCAUMcHJvZHVjdGl2aXR5Al8xAAEFBVNTSVpFBA5nbG9iYWxBbmRMb2NhbAMJAGYCBQpzdGFrZWRUaW1lAAAJAQ1hc1NwbGl0UmVzdWx0AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQkAzAgCBQduZWVkTWF0CQDMCAIFCGF2YWlsUmVzCQDMCAIJAJEDAgUBZAULcmVjVGVycmFpbnMFA25pbAUDbmlsCQCUCgIJARJhc0xpc3RJbnRDb21wYWN0ZWQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIcc3BsaXRCeUdsb2JhbFdlaWdodHNSRUFET05MWQkAzAgCBQduZWVkTWF0BQNuaWwFA25pbAIABApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQULbGFuZEFzc2V0SWQJAKwCAgkArAICCQCRAwIFAWQFDHJlY0NvbnRpbmVudAIBLQkAkQMCBQFkBQpyZWNMYW5kTnVtCQDMCAIJAKwCAgIPJXMlc19fYXNzZXRJZF9fBQtsYW5kQXNzZXRJZAkAzAgCCQCsAgICDSVzJXNfX293bmVyX18FBW93bmVyCQDMCAIJAKwCAgISJXMlc19fY3VzdG9tTmFtZV9fBQpjdXN0b21OYW1lCQDMCAIJAKwCAgISJXMlZF9fc3Rha2VkVGltZV9fCQCkAwEFCnN0YWtlZFRpbWUJAMwIAgkArAICAhMlcyVzX19kZXNjcmlwdGlvbl9fCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCCQCRAwIFAWQFC3JlY0xhbmRTaXplCQDMCAIJAJEDAgUBZAULcmVjVGVycmFpbnMJAMwIAgkAkQMCBQFkBQxyZWNDb250aW5lbnQFA25pbAIBXwkAzAgCCQCsAgICEiVzJWRfX2luZnJhTGV2ZWxfXwkApAMBCAUMcHJvZHVjdGl2aXR5Al8xCQDMCAIJAKwCAgIWJXMlc19fYXZhaWxSZXNCeVR5cGVfXwgFDmdsb2JhbEFuZExvY2FsAl8yCQDMCAIJAKwCAgIVJXMlZF9fYXZhaWxSZXNUb3RhbF9fCQCkAwEFCGF2YWlsUmVzCQDMCAIJAKwCAgIUJXMlc19fbmVlZE1hdGVyaWFsX18IBQ5nbG9iYWxBbmRMb2NhbAJfMQkAzAgCCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg1sYW5kQXJ0ZWZhY3RzCQDMCAIJAKwCAgIIUFJFU0FMRToJAKQDAQgFDHByb2R1Y3Rpdml0eQJfMgUDbmlsBQNTRVAJAMwIAgkArAICAhElcyVzX193YXJlaG91c2VfXwkAuQkCCQEMZ2V0V2FyZWhvdXNlAwkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQBpAgUGcGllY2VzBQVTU0laRQgFDHByb2R1Y3Rpdml0eQJfMQIBOgkAzAgCCQCsAgICESVzJXNfX2xhbmRPcmRlcl9fCQELdmFsdWVPckVsc2UCCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQCMDBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOjBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOgUDbmlsARJsYW5kT3JkZXJJbmZvQXJyYXkCC2xhbmRBc3NldElkBW93bmVyAwkAAAIFC2xhbmRBc3NldElkAgAJAAIBAhdsYW5kQXNzZXRJZCBpcyByZXF1aXJlZAQBYQkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAFkCQC1CQIIBQFhC2Rlc2NyaXB0aW9uAgFfBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAxwcm9kdWN0aXZpdHkJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzCQDMCAIJAKwCAgIPJXMlc19fYXNzZXRJZF9fBQtsYW5kQXNzZXRJZAkAzAgCCQCsAgICDSVzJXNfX293bmVyX18FBW93bmVyCQDMCAIJAKwCAgIRJXMlc19fd2FyZWhvdXNlX18JALkJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAkAaQIFBnBpZWNlcwUFU1NJWkUIBQxwcm9kdWN0aXZpdHkCXzECAToJAMwIAgkArAICAhElcyVzX19sYW5kT3JkZXJfXwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkAjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoFA25pbA8BaQENY29uc3RydWN0b3JWMQEJY29udHJhY3RzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCgEKZGVzY3JpcHRvcgIDYWNjC2lnbm9yZWRJdGVtCQCsAgIFA2FjYwICJXMEBWRlc2NyCgACJGwFCWNvbnRyYWN0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZGVzY3JpcHRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5UmVzdENmZwAJALkJAgkAzAgCBQVkZXNjcgUJY29udHJhY3RzBQNTRVAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAkApQgBBQR0aGlzBQNuaWwBaQESd2FsbGV0SW5mb1JFQURPTkxZAQ51c2VyQWRkcmVzc09wdAkAlAoCBQNuaWwJAQ53YWxsZXRJbnRlcm5hbAEFDnVzZXJBZGRyZXNzT3B0AWkBF2R1Y2tCeU93bmVySW5mb1JFQURPTkxZAQt1c2VyQWRkcmVzcwQKc3Rha2VkRHVjawkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFC3VzZXJBZGRyZXNzCQCUCgIFA25pbAMDCQEJaXNEZWZpbmVkAQkApggBBQt1c2VyQWRkcmVzcwkBCWlzRGVmaW5lZAEFCnN0YWtlZER1Y2sHBAtkdWNrQXNzZXRJZAkBBXZhbHVlAQUKc3Rha2VkRHVjawkBDWR1Y2tJbmZvQXJyYXkDBQtkdWNrQXNzZXRJZAULdXNlckFkZHJlc3MJAQ1kdWNrSW5mb1R1cGxlAQULZHVja0Fzc2V0SWQJAQ1kdWNrSW5mb0FycmF5AwIABQt1c2VyQWRkcmVzcwkAlwoFAP///////////wECAAIAAP///////////wECAAFpARlkdWNrQnlBc3NldElkSW5mb1JFQURPTkxZAQtkdWNrQXNzZXRJZAQFb3duZXIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkBAdkdWNrSW5mCQENZHVja0luZm9UdXBsZQEFC2R1Y2tBc3NldElkCQCUCgIFA25pbAkBDWR1Y2tJbmZvQXJyYXkDBQtkdWNrQXNzZXRJZAMJAQlpc0RlZmluZWQBBQVvd25lcgkBBXZhbHVlAQUFb3duZXICAAkBDWR1Y2tJbmZvVHVwbGUBBQtkdWNrQXNzZXRJZAFpARlsYW5kQnlBc3NldElkSW5mb1JFQURPTkxZAQtsYW5kQXNzZXRJZAMJAAACBQtsYW5kQXNzZXRJZAIACQACAQIXbGFuZEFzc2V0SWQgaXMgcmVxdWlyZWQECnN0YWtlZFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAP///////////wEEBW93bmVyAwkAZgIFCnN0YWtlZFRpbWUAAAkBBXZhbHVlAQkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAIACQCUCgIFA25pbAkBDWxhbmRJbmZvQXJyYXkDBQtsYW5kQXNzZXRJZAUFb3duZXIFCnN0YWtlZFRpbWUBaQEec3Rha2VkTGFuZHNCeU93bmVySW5mb1JFQURPTkxZARBsYW5kT3duZXJBZGRyZXNzAwkAAAIFEGxhbmRPd25lckFkZHJlc3MCAAkAAgECHGxhbmRPd25lckFkZHJlc3MgaXMgcmVxdWlyZWQECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFEGxhbmRPd25lckFkZHJlc3MEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwKAQdvbmVMYW5kAgNhY2MLbGFuZEFzc2V0SWQDCQAAAgULbGFuZEFzc2V0SWQCAAkAAgECF2xhbmRBc3NldElkIGlzIHJlcXVpcmVkBApzdGFrZWRUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtl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", "height": 2642805, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2cZVyvBHKd7w5G2oj2uPqDLvuyUWDjewBryYNKfpGr4j Next: 7nfuHT86xkf1hZygarhhX5hHjTMGnDwrEhNWzjr8miaV Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let ARTPRESALE = "PRESALE"
5+
6+let NUMRES = 6
7+
8+let DAILYRESBYPIECE = 3456000
9+
10+let DAYMILLIS = 86400000
11+
12+let WHMULTIPLIER = 10000000000
13+
14+let RESOURCEPRICEMIN = 39637
15+
16+let ESMAXPACKAGES = 3
17+
18+let ESBUYCOEF = 4
19+
20+let ESSELLCOEF = 10
21+
22+let productionMatrix = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
23+
24+let recipeIdxPacksize = 7
25+
26+func keyLastTxIdByUser (addr) = ("lastTxIdByUser_" + addr)
27+
28+
29+func keyLandAssetIdToOwner (assetId) = ("nftOwner_" + assetId)
30+
31+
32+func keyLandAssetIdToCustomName (assetId) = ("landCustomNameByAssetId_" + assetId)
33+
34+
35+func keyStakedTimeByAssetId (assetId) = ("stakedTime_" + assetId)
36+
37+
38+func keyInfraLevelByAssetId (assetId) = ("infraLevel_" + assetId)
39+
40+
41+func keyLandArtStatusByTypeAndAssetId (type,assetId) = makeString(["landArtStatus", type, assetId], "_")
42+
43+
44+func keyWarehouseByLand (landAssetId) = ("wareHouse_" + landAssetId)
45+
46+
47+func keyDuckAssetIdToCustomName (assetId) = ("duckCustomNameByAssetId_" + assetId)
48+
49+
50+func keyAddressToCustomName (addr) = ("accountCustomNameByAddr_" + addr)
51+
52+
53+func keyAddressRefBy (addr) = ("accRefBy_" + addr)
54+
55+
56+func keyAddressReferrals (addr) = ("accReferrals_" + addr)
57+
58+
59+func keyDuckIdToOwner (assetId) = ("duckOwner_" + assetId)
60+
61+
62+func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
63+
64+
65+func keyDuckLocation (duckAssetId) = ("duckLocation_" + duckAssetId)
66+
67+
68+func keyDuckHealth (duckAssetId) = ("duckHealth_" + duckAssetId)
69+
70+
71+func keyBlocked () = "contractsBlocked"
72+
73+
74+func keyOrderByLand (landAssetId) = ("landOrder_" + landAssetId)
75+
76+
77+func keyEsWarehouse () = "emergencyWarehouseProducts"
78+
79+
80+func getRecipeMaterials (recipe) = {
81+ func addMat (ac,j) = (ac + parseIntValue(recipe[j]))
82+
83+ let $l = [0, 1, 2, 3, 4, 5]
84+ let $s = size($l)
85+ let $acc0 = 0
86+ func $f0_1 ($a,$i) = if (($i >= $s))
87+ then $a
88+ else addMat($a, $l[$i])
89+
90+ func $f0_2 ($a,$i) = if (($i >= $s))
91+ then $a
92+ else throw("List size exceeds 6")
93+
94+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
95+ }
96+
97+
498 let chain = take(drop(this.bytes, 1), 1)
599
6100 let usdtAssetId = match chain {
34128
35129 let MULT6 = 1000000
36130
37-let MULT7 = 10000000
38-
39131 let MULT8 = 100000000
40-
41-let MULT10 = 10000000000
42-
43-let LANDPREFIX = "LAND"
44-
45-let DUCKPREFIX = "DUCK"
46-
47-let ARTPRESALE = "PRESALE"
48-
49-let NUMRES = 6
50132
51133 let SSIZE = 25
52134
58140
59141 let XXLSIZE = 625
60142
61-let DAILYRESBYPIECE = 3456000
62-
63-let DAYMILLIS = 86400000
64-
65-let WHMULTIPLIER = 10000000000
66-
67-let DEFAULTLOCATION = "Africa_F_Africa"
68-
69-let RESOURCEPRICEMIN = 39637
70-
71-let ESMAXPACKAGES = 3
72-
73-let ESBUYCOEF = 4
74-
75-let ESSELLCOEF = 10
76-
77-let MAXHP = 100
78-
79-let resTypes = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
80-
81-let matTypes = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
82-
83-let prodTypes = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"]
84-
85-let continents = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
86-
87-let productionMatrix = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
88-
89-let contIdxAmericas = 0
90-
91-let contIdxEurope = 1
92-
93-let contIdxAsia = 2
94-
95-let contIdxAfrica = 3
96-
97-let contIdxOceania = 4
98-
99-let recipeIdxFuel = 0
100-
101-let recipeIdxMetal = 1
102-
103-let recipeIdxPlank = 2
104-
105-let recipeIdxGlass = 3
106-
107-let recipeIdxPlastic = 4
108-
109-let recipeIdxProtein = 5
110-
111-let recipeIdxWeight = 6
112-
113-let recipeIdxPacksize = 7
114-
115-let recipeIdxContinent = 8
116-
117-let recLandNum = 0
118-
119-let recLandSize = 1
120-
121-let recTerrains = 2
122-
123-let recContinent = 3
124-
125-let whIdxLevels = 0
126-
127-let whIdxRes = 1
128-
129-let whIdxMat = 2
130-
131-let whIdxProd = 3
132-
133-let whIdxLOFT = 4
134-
135-let volLocked = 0
136-
137-let volOccupied = 1
138-
139-let volFree = 2
140-
141-let volTotal = 3
142-
143-let bpIdxLevel = 0
144-
145-let bpIdxRes = 1
146-
147-let bpIdxMat = 2
148-
149-let bpIdxProd = 3
150-
151-func getPkgSize (prodIdx) = parseIntValue(split(productionMatrix[prodIdx], "_")[recipeIdxPacksize])
152-
153-
154143 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
155-
156-
157-func getIntOrElse (key,defaultVal) = valueOrElse(getInteger(this, key), defaultVal)
158144
159145
160146 let IdxCfgStakingDapp = 1
161147
162148 let IdxCfgEconomyDapp = 2
163149
164-let IdxCfgGovernanceDapp = 3
150+let IdxCfgWlgDapp = 4
165151
166-let IdxCfgWlgDapp = 4
152+let IdxCfgPuzzlePoolDapp = 5
167153
168154 func keyRestCfg () = "%s__restConfig"
169155
185171
186172 let economyContract = getContractAddressOrFail(restCfg, IdxCfgEconomyDapp)
187173
188-let govContract = getContractAddressOrFail(restCfg, IdxCfgGovernanceDapp)
189-
190174 let wlgContract = getContractAddressOrFail(restCfg, IdxCfgWlgDapp)
191175
192-func keyLastTxIdByUser (addr) = ("lastTxIdByUser_" + addr)
176+let puzzlePoolContract = getContractAddressOrFail(restCfg, IdxCfgPuzzlePoolDapp)
193177
178+let recLandNum = 0
194179
195-func keyLandAssetIdToOwner (assetId) = ("nftOwner_" + assetId)
180+let recLandSize = 1
196181
182+let recTerrains = 2
197183
198-func keyLandAssetIdToCustomName (assetId) = ("landCustomNameByAssetId_" + assetId)
199-
200-
201-func keyStakedTimeByAssetId (assetId) = ("stakedTime_" + assetId)
202-
203-
204-func keyInfraLevelByAssetId (assetId) = ("infraLevel_" + assetId)
205-
206-
207-func keyLandArtStatusByTypeAndAssetId (type,assetId) = makeString(["landArtStatus", type, assetId], "_")
208-
209-
210-func keyStakedTimeByTypeAssetIdAndOwner (nftType,assetId,ownerAddr) = ((((("stakedTimeByTypeAssetIdAndOwner_" + nftType) + "_") + assetId) + "_") + ownerAddr)
211-
212-
213-func keyWarehouseByLand (landAssetId) = ("wareHouse_" + landAssetId)
214-
184+let recContinent = 3
215185
216186 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
217187
218188
219-func keyStakedPiecesByOwner (ownerAddr) = ("stakedPiecesByOwner_" + ownerAddr)
189+let wlgIssuedAmountKey = "wlg_issuedAmount"
220190
191+let idxWlgAmount = 0
221192
222-func keyDuckAssetIdToCustomName (assetId) = ("duckCustomNameByAssetId_" + assetId)
193+let idxWlgPrice = 1
223194
195+let idxWlgFunds = 2
224196
225-func keyAddressToCustomName (addr) = ("accountCustomNameByAddr_" + addr)
197+let idxWlgEconomy = 3
226198
199+let idxWlgActivity = 4
227200
228-func keyAddressRefBy (addr) = ("accRefBy_" + addr)
201+let idxWlgArbitrage = 5
229202
230-
231-func keyAddressReferrals (addr) = ("accReferrals_" + addr)
232-
233-
234-func keyDuckIdToOwner (assetId) = ("duckOwner_" + assetId)
235-
236-
237-func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
238-
239-
240-func keyBackpackByDuck (duckAssetId) = ("backPack_" + duckAssetId)
241-
242-
243-func keyDuckLocation (duckAssetId) = ("duckLocation_" + duckAssetId)
244-
245-
246-func keyDuckHealth (duckAssetId) = ("duckHealth_" + duckAssetId)
247-
248-
249-func keyResProportions () = "resTypesProportions"
250-
251-
252-func keyBlocked () = "contractsBlocked"
253-
254-
255-func keyUserGwlReleaseTime (userAddr) = ("%s%s__userGwlReleaseTime__" + userAddr)
256-
257-
258-func keyOrderByLand (landAssetId) = ("landOrder_" + landAssetId)
259-
260-
261-func keyEsWarehouse () = "emergencyWarehouseProducts"
262-
263-
264-let locIdxContinent = 0
265-
266-let locIdxType = 1
267-
268-let locIdxId = 2
203+let idxWlgPool = 6
269204
270205 func asString (v) = match v {
271206 case s: String =>
280215 n
281216 case _ =>
282217 throw("fail to cast into Int")
283-}
284-
285-
286-func asAnyList (v) = match v {
287- case l: List[Any] =>
288- l
289- case _ =>
290- throw("fail to cast into List[Any]")
291218 }
292219
293220
315242 }
316243
317244
318-let IdxEffTotal = 0
319-
320-let IdxEffUser = 1
321-
322-func getVotingPower (userAddrStrOrEmpty) = {
323- let props = split(valueOrElse(getString(stakingContract, keyResProportions()), "0_0_0_0_0_0"), "_")
324- func adder (acc,item) = (acc + parseIntValue(item))
325-
326- let totalPower = {
327- let $l = props
328- let $s = size($l)
329- let $acc0 = 0
330- func $f0_1 ($a,$i) = if (($i >= $s))
331- then $a
332- else adder($a, $l[$i])
333-
334- func $f0_2 ($a,$i) = if (($i >= $s))
335- then $a
336- else throw("List size exceeds 6")
337-
338- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
339- }
340- let usersPower = if ((userAddrStrOrEmpty == ""))
341- then 0
342- else {
343- let landsStr = getString(stakingContract, keyStakedLandsByOwner(userAddrStrOrEmpty))
344- let lands = if (isDefined(landsStr))
345- then split_51C(value(landsStr), "_")
346- else nil
347- func oneLand (acc,landAssetId) = {
348- let asset = value(assetInfo(fromBase58String(landAssetId)))
349- let landSize = split(asset.description, "_")[recLandSize]
350- (acc + numPiecesBySize(landSize))
351- }
352-
353- let $l = lands
354- let $s = size($l)
355- let $acc0 = 0
356- func $f1_1 ($a,$i) = if (($i >= $s))
357- then $a
358- else oneLand($a, $l[$i])
359-
360- func $f1_2 ($a,$i) = if (($i >= $s))
361- then $a
362- else throw("List size exceeds 100")
363-
364- $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($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($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($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($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), 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)
365- }
366-[totalPower, usersPower]
367- }
368-
369-
370-func getRecipeMaterials (recipe) = {
371- func addMat (ac,j) = (ac + parseIntValue(recipe[j]))
372-
373- let $l = [0, 1, 2, 3, 4, 5]
374- let $s = size($l)
375- let $acc0 = 0
376- func $f0_1 ($a,$i) = if (($i >= $s))
377- then $a
378- else addMat($a, $l[$i])
379-
380- func $f0_2 ($a,$i) = if (($i >= $s))
381- then $a
382- else throw("List size exceeds 6")
383-
384- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
245+func getWlgStats () = {
246+ let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmountKey), "WLGOLD is not issued yet")
247+ let economyUsd = assetBalance(economyContract, usdtAssetId)
248+ let restUsd = assetBalance(restContract, usdtAssetId)
249+ let wlgUsd = assetBalance(wlgContract, usdtAssetId)
250+ let puzzleUsd = assetBalance(puzzlePoolContract, usdtAssetId)
251+ let totalUsd = (((economyUsd + restUsd) + wlgUsd) + puzzleUsd)
252+[issuedAmount, fraction(totalUsd, MULT8, issuedAmount), totalUsd, economyUsd, restUsd, wlgUsd, puzzleUsd]
385253 }
386254
387255
388256 let USDTPRIZEPART = 500000
389-
390-let wlgIssuedAmountKey = "wlg_issuedAmount"
391-
392-let idxWlgAmount = 0
393-
394-let idxWlgPrice = 1
395-
396-let idxWlgFunds = 2
397257
398258 func asListIntCompacted (val) = match val {
399259 case valAnyList: List[Any] =>
516376 let productivity = applyBonuses(landAssetId, pieces)
517377 [("%s%s__assetId__" + landAssetId), ("%s%s__owner__" + owner), ("%s%s__warehouse__" + makeString(getWarehouse(keyWarehouseByLand(landAssetId), (pieces / SSIZE), productivity._1), ":")), ("%s%s__landOrder__" + valueOrElse(getString(economyContract, keyOrderByLand(landAssetId)), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"))]
518378 }
519-
520-
521-func getWlgStats () = {
522- let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmountKey), "WLGOLD is not issued yet")
523- let funds = ((assetBalance(economyContract, usdtAssetId) + assetBalance(restContract, usdtAssetId)) + assetBalance(wlgContract, usdtAssetId))
524-[issuedAmount, fraction(funds, MULT8, issuedAmount), funds]
525- }
526379
527380
528381 @Callable(i)
854707 @Callable(i)
855708 func wlgStatsREADONLY () = {
856709 let curStats = getWlgStats()
857- $Tuple2(nil, [("%s%s%d__wlgAmount__" + toString(curStats[idxWlgAmount])), ("%s%s%d__wlgPrice__" + toString(curStats[idxWlgPrice])), ("%s%s%d__usdtFunds__" + toString(curStats[idxWlgFunds]))])
710+ $Tuple2(nil, [("%s%s%d__wlgAmount__" + toString(curStats[idxWlgAmount])), ("%s%s%d__wlgPrice__" + toString(curStats[idxWlgPrice])), ("%s%s%d__usdtFunds__" + toString(curStats[idxWlgFunds])), ("%s%s%d__usdtEconomy__" + toString(curStats[idxWlgEconomy])), ("%s%s%d__usdtActivity__" + toString(curStats[idxWlgActivity])), ("%s%s%d__usdtArbitrage__" + toString(curStats[idxWlgArbitrage])), ("%s%s%d__usdtPool__" + toString(curStats[idxWlgPool]))])
858711 }
859712
860713
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let ARTPRESALE = "PRESALE"
5+
6+let NUMRES = 6
7+
8+let DAILYRESBYPIECE = 3456000
9+
10+let DAYMILLIS = 86400000
11+
12+let WHMULTIPLIER = 10000000000
13+
14+let RESOURCEPRICEMIN = 39637
15+
16+let ESMAXPACKAGES = 3
17+
18+let ESBUYCOEF = 4
19+
20+let ESSELLCOEF = 10
21+
22+let productionMatrix = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
23+
24+let recipeIdxPacksize = 7
25+
26+func keyLastTxIdByUser (addr) = ("lastTxIdByUser_" + addr)
27+
28+
29+func keyLandAssetIdToOwner (assetId) = ("nftOwner_" + assetId)
30+
31+
32+func keyLandAssetIdToCustomName (assetId) = ("landCustomNameByAssetId_" + assetId)
33+
34+
35+func keyStakedTimeByAssetId (assetId) = ("stakedTime_" + assetId)
36+
37+
38+func keyInfraLevelByAssetId (assetId) = ("infraLevel_" + assetId)
39+
40+
41+func keyLandArtStatusByTypeAndAssetId (type,assetId) = makeString(["landArtStatus", type, assetId], "_")
42+
43+
44+func keyWarehouseByLand (landAssetId) = ("wareHouse_" + landAssetId)
45+
46+
47+func keyDuckAssetIdToCustomName (assetId) = ("duckCustomNameByAssetId_" + assetId)
48+
49+
50+func keyAddressToCustomName (addr) = ("accountCustomNameByAddr_" + addr)
51+
52+
53+func keyAddressRefBy (addr) = ("accRefBy_" + addr)
54+
55+
56+func keyAddressReferrals (addr) = ("accReferrals_" + addr)
57+
58+
59+func keyDuckIdToOwner (assetId) = ("duckOwner_" + assetId)
60+
61+
62+func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
63+
64+
65+func keyDuckLocation (duckAssetId) = ("duckLocation_" + duckAssetId)
66+
67+
68+func keyDuckHealth (duckAssetId) = ("duckHealth_" + duckAssetId)
69+
70+
71+func keyBlocked () = "contractsBlocked"
72+
73+
74+func keyOrderByLand (landAssetId) = ("landOrder_" + landAssetId)
75+
76+
77+func keyEsWarehouse () = "emergencyWarehouseProducts"
78+
79+
80+func getRecipeMaterials (recipe) = {
81+ func addMat (ac,j) = (ac + parseIntValue(recipe[j]))
82+
83+ let $l = [0, 1, 2, 3, 4, 5]
84+ let $s = size($l)
85+ let $acc0 = 0
86+ func $f0_1 ($a,$i) = if (($i >= $s))
87+ then $a
88+ else addMat($a, $l[$i])
89+
90+ func $f0_2 ($a,$i) = if (($i >= $s))
91+ then $a
92+ else throw("List size exceeds 6")
93+
94+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
95+ }
96+
97+
498 let chain = take(drop(this.bytes, 1), 1)
599
6100 let usdtAssetId = match chain {
7101 case _ =>
8102 if ((base58'2W' == $match0))
9103 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
10104 else if ((base58'2T' == $match0))
11105 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
12106 else throw("Unknown chain")
13107 }
14108
15109 let defaultRestAddressStr = match chain {
16110 case _ =>
17111 if ((base58'2W' == $match0))
18112 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
19113 else if ((base58'2T' == $match0))
20114 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
21115 else throw("Unknown chain")
22116 }
23117
24118 let InfraUpgradeCostS = match chain {
25119 case _ =>
26120 if ((base58'2W' == $match0))
27121 then 10000000000
28122 else if ((base58'2T' == $match0))
29123 then 100000000
30124 else throw("Unknown chain")
31125 }
32126
33127 let SEP = "__"
34128
35129 let MULT6 = 1000000
36130
37-let MULT7 = 10000000
38-
39131 let MULT8 = 100000000
40-
41-let MULT10 = 10000000000
42-
43-let LANDPREFIX = "LAND"
44-
45-let DUCKPREFIX = "DUCK"
46-
47-let ARTPRESALE = "PRESALE"
48-
49-let NUMRES = 6
50132
51133 let SSIZE = 25
52134
53135 let MSIZE = 100
54136
55137 let LSIZE = 225
56138
57139 let XLSIZE = 400
58140
59141 let XXLSIZE = 625
60142
61-let DAILYRESBYPIECE = 3456000
62-
63-let DAYMILLIS = 86400000
64-
65-let WHMULTIPLIER = 10000000000
66-
67-let DEFAULTLOCATION = "Africa_F_Africa"
68-
69-let RESOURCEPRICEMIN = 39637
70-
71-let ESMAXPACKAGES = 3
72-
73-let ESBUYCOEF = 4
74-
75-let ESSELLCOEF = 10
76-
77-let MAXHP = 100
78-
79-let resTypes = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
80-
81-let matTypes = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
82-
83-let prodTypes = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"]
84-
85-let continents = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
86-
87-let productionMatrix = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
88-
89-let contIdxAmericas = 0
90-
91-let contIdxEurope = 1
92-
93-let contIdxAsia = 2
94-
95-let contIdxAfrica = 3
96-
97-let contIdxOceania = 4
98-
99-let recipeIdxFuel = 0
100-
101-let recipeIdxMetal = 1
102-
103-let recipeIdxPlank = 2
104-
105-let recipeIdxGlass = 3
106-
107-let recipeIdxPlastic = 4
108-
109-let recipeIdxProtein = 5
110-
111-let recipeIdxWeight = 6
112-
113-let recipeIdxPacksize = 7
114-
115-let recipeIdxContinent = 8
116-
117-let recLandNum = 0
118-
119-let recLandSize = 1
120-
121-let recTerrains = 2
122-
123-let recContinent = 3
124-
125-let whIdxLevels = 0
126-
127-let whIdxRes = 1
128-
129-let whIdxMat = 2
130-
131-let whIdxProd = 3
132-
133-let whIdxLOFT = 4
134-
135-let volLocked = 0
136-
137-let volOccupied = 1
138-
139-let volFree = 2
140-
141-let volTotal = 3
142-
143-let bpIdxLevel = 0
144-
145-let bpIdxRes = 1
146-
147-let bpIdxMat = 2
148-
149-let bpIdxProd = 3
150-
151-func getPkgSize (prodIdx) = parseIntValue(split(productionMatrix[prodIdx], "_")[recipeIdxPacksize])
152-
153-
154143 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
155-
156-
157-func getIntOrElse (key,defaultVal) = valueOrElse(getInteger(this, key), defaultVal)
158144
159145
160146 let IdxCfgStakingDapp = 1
161147
162148 let IdxCfgEconomyDapp = 2
163149
164-let IdxCfgGovernanceDapp = 3
150+let IdxCfgWlgDapp = 4
165151
166-let IdxCfgWlgDapp = 4
152+let IdxCfgPuzzlePoolDapp = 5
167153
168154 func keyRestCfg () = "%s__restConfig"
169155
170156
171157 func keyRestAddress () = "%s__restAddr"
172158
173159
174160 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
175161
176162
177163 func getContractAddressOrFail (restCfg,idx) = valueOrErrorMessage(addressFromString(restCfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
178164
179165
180166 let restContract = addressFromStringValue(valueOrElse(getString(this, keyRestAddress()), defaultRestAddressStr))
181167
182168 let restCfg = readRestCfgOrFail(restContract)
183169
184170 let stakingContract = getContractAddressOrFail(restCfg, IdxCfgStakingDapp)
185171
186172 let economyContract = getContractAddressOrFail(restCfg, IdxCfgEconomyDapp)
187173
188-let govContract = getContractAddressOrFail(restCfg, IdxCfgGovernanceDapp)
189-
190174 let wlgContract = getContractAddressOrFail(restCfg, IdxCfgWlgDapp)
191175
192-func keyLastTxIdByUser (addr) = ("lastTxIdByUser_" + addr)
176+let puzzlePoolContract = getContractAddressOrFail(restCfg, IdxCfgPuzzlePoolDapp)
193177
178+let recLandNum = 0
194179
195-func keyLandAssetIdToOwner (assetId) = ("nftOwner_" + assetId)
180+let recLandSize = 1
196181
182+let recTerrains = 2
197183
198-func keyLandAssetIdToCustomName (assetId) = ("landCustomNameByAssetId_" + assetId)
199-
200-
201-func keyStakedTimeByAssetId (assetId) = ("stakedTime_" + assetId)
202-
203-
204-func keyInfraLevelByAssetId (assetId) = ("infraLevel_" + assetId)
205-
206-
207-func keyLandArtStatusByTypeAndAssetId (type,assetId) = makeString(["landArtStatus", type, assetId], "_")
208-
209-
210-func keyStakedTimeByTypeAssetIdAndOwner (nftType,assetId,ownerAddr) = ((((("stakedTimeByTypeAssetIdAndOwner_" + nftType) + "_") + assetId) + "_") + ownerAddr)
211-
212-
213-func keyWarehouseByLand (landAssetId) = ("wareHouse_" + landAssetId)
214-
184+let recContinent = 3
215185
216186 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
217187
218188
219-func keyStakedPiecesByOwner (ownerAddr) = ("stakedPiecesByOwner_" + ownerAddr)
189+let wlgIssuedAmountKey = "wlg_issuedAmount"
220190
191+let idxWlgAmount = 0
221192
222-func keyDuckAssetIdToCustomName (assetId) = ("duckCustomNameByAssetId_" + assetId)
193+let idxWlgPrice = 1
223194
195+let idxWlgFunds = 2
224196
225-func keyAddressToCustomName (addr) = ("accountCustomNameByAddr_" + addr)
197+let idxWlgEconomy = 3
226198
199+let idxWlgActivity = 4
227200
228-func keyAddressRefBy (addr) = ("accRefBy_" + addr)
201+let idxWlgArbitrage = 5
229202
230-
231-func keyAddressReferrals (addr) = ("accReferrals_" + addr)
232-
233-
234-func keyDuckIdToOwner (assetId) = ("duckOwner_" + assetId)
235-
236-
237-func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
238-
239-
240-func keyBackpackByDuck (duckAssetId) = ("backPack_" + duckAssetId)
241-
242-
243-func keyDuckLocation (duckAssetId) = ("duckLocation_" + duckAssetId)
244-
245-
246-func keyDuckHealth (duckAssetId) = ("duckHealth_" + duckAssetId)
247-
248-
249-func keyResProportions () = "resTypesProportions"
250-
251-
252-func keyBlocked () = "contractsBlocked"
253-
254-
255-func keyUserGwlReleaseTime (userAddr) = ("%s%s__userGwlReleaseTime__" + userAddr)
256-
257-
258-func keyOrderByLand (landAssetId) = ("landOrder_" + landAssetId)
259-
260-
261-func keyEsWarehouse () = "emergencyWarehouseProducts"
262-
263-
264-let locIdxContinent = 0
265-
266-let locIdxType = 1
267-
268-let locIdxId = 2
203+let idxWlgPool = 6
269204
270205 func asString (v) = match v {
271206 case s: String =>
272207 s
273208 case _ =>
274209 throw("fail to cast into String")
275210 }
276211
277212
278213 func asInt (v) = match v {
279214 case n: Int =>
280215 n
281216 case _ =>
282217 throw("fail to cast into Int")
283-}
284-
285-
286-func asAnyList (v) = match v {
287- case l: List[Any] =>
288- l
289- case _ =>
290- throw("fail to cast into List[Any]")
291218 }
292219
293220
294221 func asBoolean (v) = match v {
295222 case s: Boolean =>
296223 s
297224 case _ =>
298225 throw("fail to cast into Boolean")
299226 }
300227
301228
302229 func numPiecesBySize (landSize) = match landSize {
303230 case _ =>
304231 if (("S" == $match0))
305232 then SSIZE
306233 else if (("M" == $match0))
307234 then MSIZE
308235 else if (("L" == $match0))
309236 then LSIZE
310237 else if (("XL" == $match0))
311238 then XLSIZE
312239 else if (("XXL" == $match0))
313240 then XXLSIZE
314241 else throw("Unknown land size")
315242 }
316243
317244
318-let IdxEffTotal = 0
319-
320-let IdxEffUser = 1
321-
322-func getVotingPower (userAddrStrOrEmpty) = {
323- let props = split(valueOrElse(getString(stakingContract, keyResProportions()), "0_0_0_0_0_0"), "_")
324- func adder (acc,item) = (acc + parseIntValue(item))
325-
326- let totalPower = {
327- let $l = props
328- let $s = size($l)
329- let $acc0 = 0
330- func $f0_1 ($a,$i) = if (($i >= $s))
331- then $a
332- else adder($a, $l[$i])
333-
334- func $f0_2 ($a,$i) = if (($i >= $s))
335- then $a
336- else throw("List size exceeds 6")
337-
338- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
339- }
340- let usersPower = if ((userAddrStrOrEmpty == ""))
341- then 0
342- else {
343- let landsStr = getString(stakingContract, keyStakedLandsByOwner(userAddrStrOrEmpty))
344- let lands = if (isDefined(landsStr))
345- then split_51C(value(landsStr), "_")
346- else nil
347- func oneLand (acc,landAssetId) = {
348- let asset = value(assetInfo(fromBase58String(landAssetId)))
349- let landSize = split(asset.description, "_")[recLandSize]
350- (acc + numPiecesBySize(landSize))
351- }
352-
353- let $l = lands
354- let $s = size($l)
355- let $acc0 = 0
356- func $f1_1 ($a,$i) = if (($i >= $s))
357- then $a
358- else oneLand($a, $l[$i])
359-
360- func $f1_2 ($a,$i) = if (($i >= $s))
361- then $a
362- else throw("List size exceeds 100")
363-
364- $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($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($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($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($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), 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)
365- }
366-[totalPower, usersPower]
367- }
368-
369-
370-func getRecipeMaterials (recipe) = {
371- func addMat (ac,j) = (ac + parseIntValue(recipe[j]))
372-
373- let $l = [0, 1, 2, 3, 4, 5]
374- let $s = size($l)
375- let $acc0 = 0
376- func $f0_1 ($a,$i) = if (($i >= $s))
377- then $a
378- else addMat($a, $l[$i])
379-
380- func $f0_2 ($a,$i) = if (($i >= $s))
381- then $a
382- else throw("List size exceeds 6")
383-
384- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
245+func getWlgStats () = {
246+ let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmountKey), "WLGOLD is not issued yet")
247+ let economyUsd = assetBalance(economyContract, usdtAssetId)
248+ let restUsd = assetBalance(restContract, usdtAssetId)
249+ let wlgUsd = assetBalance(wlgContract, usdtAssetId)
250+ let puzzleUsd = assetBalance(puzzlePoolContract, usdtAssetId)
251+ let totalUsd = (((economyUsd + restUsd) + wlgUsd) + puzzleUsd)
252+[issuedAmount, fraction(totalUsd, MULT8, issuedAmount), totalUsd, economyUsd, restUsd, wlgUsd, puzzleUsd]
385253 }
386254
387255
388256 let USDTPRIZEPART = 500000
389-
390-let wlgIssuedAmountKey = "wlg_issuedAmount"
391-
392-let idxWlgAmount = 0
393-
394-let idxWlgPrice = 1
395-
396-let idxWlgFunds = 2
397257
398258 func asListIntCompacted (val) = match val {
399259 case valAnyList: List[Any] =>
400260 if ((size(valAnyList) != NUMRES))
401261 then throw(("Array size is " + toString(size(valAnyList))))
402262 else {
403263 func conv (acc,item) = match item {
404264 case it: Int =>
405265 (acc :+ toString(it))
406266 case _ =>
407267 throw("List type is not Int")
408268 }
409269
410270 let r = {
411271 let $l = valAnyList
412272 let $s = size($l)
413273 let $acc0 = nil
414274 func $f0_1 ($a,$i) = if (($i >= $s))
415275 then $a
416276 else conv($a, $l[$i])
417277
418278 func $f0_2 ($a,$i) = if (($i >= $s))
419279 then $a
420280 else throw("List size exceeds 6")
421281
422282 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
423283 }
424284 makeString(r, "_")
425285 }
426286 case _ =>
427287 throw("fail to cast into List")
428288 }
429289
430290
431291 func asSplitResult (val) = match val {
432292 case t2: (List[Any], List[Any]) =>
433293 $Tuple2(asListIntCompacted(t2._1), asListIntCompacted(t2._2))
434294 case _ =>
435295 throw("fail to cast into (List, List)")
436296 }
437297
438298
439299 func walletInternal (userAddressOpt) = {
440300 let addr = addressFromString(userAddressOpt)
441301 let balance = if (isDefined(addr))
442302 then wavesBalance(value(addr))
443303 else BalanceDetails(0, 0, 0, 0)
444304 let usdtBalance = if (isDefined(addr))
445305 then assetBalance(value(addr), usdtAssetId)
446306 else 0
447307 let customName = valueOrElse(getString(stakingContract, keyAddressToCustomName(userAddressOpt)), userAddressOpt)
448308 let refBy = valueOrElse(getString(stakingContract, keyAddressRefBy(userAddressOpt)), "")
449309 let refs = valueOrElse(getString(stakingContract, keyAddressReferrals(userAddressOpt)), "")
450310 let lastTxId = valueOrElse(getString(stakingContract, keyLastTxIdByUser(userAddressOpt)), "")
451311 [("%s%s__customName__" + customName), ("%s%s__referredBy__" + refBy), ("%s%s__referrals__" + refs), ("%s%s__lastTxId__" + lastTxId), ("%s%s%d__wavesBalance__" + toString(balance.available)), ("%s%s%d__usdtBalance__" + toString(usdtBalance))]
452312 }
453313
454314
455315 func applyBonuses (landAssetId,pieces) = {
456316 let infraLevel = valueOrElse(getInteger(stakingContract, keyInfraLevelByAssetId(landAssetId)), 0)
457317 let artPieces = valueOrElse(getInteger(stakingContract, keyLandArtStatusByTypeAndAssetId(ARTPRESALE, landAssetId)), 0)
458318 let add6 = (infraLevel / 6)
459319 let add7 = (infraLevel / 7)
460320 $Tuple3(infraLevel, artPieces, ((DAILYRESBYPIECE + fraction(DAILYRESBYPIECE, ((infraLevel + add6) + (2 * add7)), 5)) + fraction(DAILYRESBYPIECE, artPieces, (pieces * 5))))
461321 }
462322
463323
464324 func getWarehouseTotalVolume (volPrefix) = {
465325 let parts = split(volPrefix, "_")
466326 ((WHMULTIPLIER * (parseIntValue(parts[1]) + 1)) * parseIntValue(parts[0]))
467327 }
468328
469329
470330 func getWarehouse (whKey,landIndex,infraLevel) = {
471331 let volPrefix = ((toString(landIndex) + "_") + toString(infraLevel))
472332 let totS = toString(getWarehouseTotalVolume(volPrefix))
473333 let whStr = valueOrElse(getString(stakingContract, whKey), ((((volPrefix + ":0_0_0_0_0_0:0_0_0_0_0_0::0_0_") + totS) + "_") + totS))
474334 split(whStr, ":")
475335 }
476336
477337
478338 func duckInfoTuple (duckAssetId) = $Tuple5(valueOrElse(getInteger(stakingContract, keyStakedTimeByAssetId(duckAssetId)), -1), value(assetInfo(fromBase58String(duckAssetId))).name, valueOrElse(getString(stakingContract, keyDuckLocation(duckAssetId)), ""), valueOrElse(getInteger(stakingContract, keyDuckHealth(duckAssetId)), -1), asString(invoke(stakingContract, "getBackpackREADONLY", [duckAssetId], nil)))
479339
480340
481341 func duckInfoArray (duckAssetId,owner,duckInf) = {
482342 let customName = valueOrElse(getString(stakingContract, keyDuckAssetIdToCustomName(duckAssetId)), duckInf._2)
483343 [("%s%s__assetId__" + duckAssetId), ("%s%s__owner__" + owner), ("%s%s__customName__" + customName), ("%s%d__stakedTime__" + toString(duckInf._1)), ("%s%s__name__" + duckInf._2), ("%s%s__location__" + duckInf._3), ("%s%d__health__" + toString(duckInf._4)), ("%s%s__backPack__" + duckInf._5)]
484344 }
485345
486346
487347 func landInfoArray (landAssetId,owner,stakedTime) = if ((landAssetId == ""))
488348 then throw("landAssetId is required")
489349 else {
490350 let a = value(assetInfo(fromBase58String(landAssetId)))
491351 let d = split(a.description, "_")
492352 let landNum = if ((a.quantity > 0))
493353 then d[recLandNum]
494354 else ("-" + d[recLandNum])
495355 let pieces = numPiecesBySize(d[recLandSize])
496356 let productivity = applyBonuses(landAssetId, pieces)
497357 let deltaTime = (lastBlock.timestamp - stakedTime)
498358 let availRes = if ((stakedTime > 0))
499359 then fraction(deltaTime, (productivity._3 * pieces), DAYMILLIS)
500360 else 0
501361 let needMat = fraction(InfraUpgradeCostS, (pieces * (productivity._1 + 1)), SSIZE)
502362 let globalAndLocal = if ((stakedTime > 0))
503363 then asSplitResult(invoke(stakingContract, "splitByGlobalAndLocalWeightsREADONLY", [needMat, availRes, d[recTerrains]], nil))
504364 else $Tuple2(asListIntCompacted(invoke(stakingContract, "splitByGlobalWeightsREADONLY", [needMat], nil)), "")
505365 let customName = valueOrElse(getString(stakingContract, keyLandAssetIdToCustomName(landAssetId)), ((d[recContinent] + "-") + d[recLandNum]))
506366 [("%s%s__assetId__" + landAssetId), ("%s%s__owner__" + owner), ("%s%s__customName__" + customName), ("%s%d__stakedTime__" + toString(stakedTime)), ("%s%s__description__" + makeString([landNum, d[recLandSize], d[recTerrains], d[recContinent]], "_")), ("%s%d__infraLevel__" + toString(productivity._1)), ("%s%s__availResByType__" + globalAndLocal._2), ("%s%d__availResTotal__" + toString(availRes)), ("%s%s__needMaterial__" + globalAndLocal._1), makeString(["%s%s", "landArtefacts", ("PRESALE:" + toString(productivity._2))], SEP), ("%s%s__warehouse__" + makeString(getWarehouse(keyWarehouseByLand(landAssetId), (pieces / SSIZE), productivity._1), ":")), ("%s%s__landOrder__" + valueOrElse(getString(economyContract, keyOrderByLand(landAssetId)), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"))]
507367 }
508368
509369
510370 func landOrderInfoArray (landAssetId,owner) = if ((landAssetId == ""))
511371 then throw("landAssetId is required")
512372 else {
513373 let a = value(assetInfo(fromBase58String(landAssetId)))
514374 let d = split(a.description, "_")
515375 let pieces = numPiecesBySize(d[recLandSize])
516376 let productivity = applyBonuses(landAssetId, pieces)
517377 [("%s%s__assetId__" + landAssetId), ("%s%s__owner__" + owner), ("%s%s__warehouse__" + makeString(getWarehouse(keyWarehouseByLand(landAssetId), (pieces / SSIZE), productivity._1), ":")), ("%s%s__landOrder__" + valueOrElse(getString(economyContract, keyOrderByLand(landAssetId)), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"))]
518378 }
519-
520-
521-func getWlgStats () = {
522- let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmountKey), "WLGOLD is not issued yet")
523- let funds = ((assetBalance(economyContract, usdtAssetId) + assetBalance(restContract, usdtAssetId)) + assetBalance(wlgContract, usdtAssetId))
524-[issuedAmount, fraction(funds, MULT8, issuedAmount), funds]
525- }
526379
527380
528381 @Callable(i)
529382 func constructorV1 (contracts) = if ((i.caller != this))
530383 then throw("permissions denied")
531384 else {
532385 func descriptor (acc,ignoredItem) = (acc + "%s")
533386
534387 let descr = {
535388 let $l = contracts
536389 let $s = size($l)
537390 let $acc0 = ""
538391 func $f0_1 ($a,$i) = if (($i >= $s))
539392 then $a
540393 else descriptor($a, $l[$i])
541394
542395 func $f0_2 ($a,$i) = if (($i >= $s))
543396 then $a
544397 else throw("List size exceeds 10")
545398
546399 $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)
547400 }
548401 [StringEntry(keyRestCfg(), makeString(descr :: contracts, SEP)), StringEntry(keyRestAddress(), toString(this))]
549402 }
550403
551404
552405
553406 @Callable(i)
554407 func walletInfoREADONLY (userAddressOpt) = $Tuple2(nil, walletInternal(userAddressOpt))
555408
556409
557410
558411 @Callable(i)
559412 func duckByOwnerInfoREADONLY (userAddress) = {
560413 let stakedDuck = getString(stakingContract, keyStakedDuckByOwner(userAddress))
561414 $Tuple2(nil, if (if (isDefined(addressFromString(userAddress)))
562415 then isDefined(stakedDuck)
563416 else false)
564417 then {
565418 let duckAssetId = value(stakedDuck)
566419 duckInfoArray(duckAssetId, userAddress, duckInfoTuple(duckAssetId))
567420 }
568421 else duckInfoArray("", userAddress, $Tuple5(-1, "", "", -1, "")))
569422 }
570423
571424
572425
573426 @Callable(i)
574427 func duckByAssetIdInfoREADONLY (duckAssetId) = {
575428 let owner = getString(stakingContract, keyDuckIdToOwner(duckAssetId))
576429 let duckInf = duckInfoTuple(duckAssetId)
577430 $Tuple2(nil, duckInfoArray(duckAssetId, if (isDefined(owner))
578431 then value(owner)
579432 else "", duckInfoTuple(duckAssetId)))
580433 }
581434
582435
583436
584437 @Callable(i)
585438 func landByAssetIdInfoREADONLY (landAssetId) = if ((landAssetId == ""))
586439 then throw("landAssetId is required")
587440 else {
588441 let stakedTime = valueOrElse(getInteger(stakingContract, keyStakedTimeByAssetId(landAssetId)), -1)
589442 let owner = if ((stakedTime > 0))
590443 then value(getString(stakingContract, keyLandAssetIdToOwner(landAssetId)))
591444 else ""
592445 $Tuple2(nil, landInfoArray(landAssetId, owner, stakedTime))
593446 }
594447
595448
596449
597450 @Callable(i)
598451 func stakedLandsByOwnerInfoREADONLY (landOwnerAddress) = if ((landOwnerAddress == ""))
599452 then throw("landOwnerAddress is required")
600453 else {
601454 let landsStr = getString(stakingContract, keyStakedLandsByOwner(landOwnerAddress))
602455 let lands = if (isDefined(landsStr))
603456 then split_51C(value(landsStr), "_")
604457 else nil
605458 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
606459 then throw("landAssetId is required")
607460 else {
608461 let stakedTime = valueOrElse(getInteger(stakingContract, keyStakedTimeByAssetId(landAssetId)), -1)
609462 (acc :+ landInfoArray(landAssetId, landOwnerAddress, stakedTime))
610463 }
611464
612465 let r = {
613466 let $l = lands
614467 let $s = size($l)
615468 let $acc0 = nil
616469 func $f0_1 ($a,$i) = if (($i >= $s))
617470 then $a
618471 else oneLand($a, $l[$i])
619472
620473 func $f0_2 ($a,$i) = if (($i >= $s))
621474 then $a
622475 else throw("List size exceeds 100")
623476
624477 $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)
625478 }
626479 $Tuple2(nil, r)
627480 }
628481
629482
630483
631484 @Callable(i)
632485 func landsByIdsInfoREADONLY (landAssetIds) = {
633486 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
634487 then throw("landAssetId is required")
635488 else {
636489 let stakedTime = valueOrElse(getInteger(stakingContract, keyStakedTimeByAssetId(landAssetId)), -1)
637490 let owner = if ((stakedTime > 0))
638491 then value(getString(stakingContract, keyLandAssetIdToOwner(landAssetId)))
639492 else ""
640493 (acc :+ landInfoArray(landAssetId, owner, stakedTime))
641494 }
642495
643496 let r = {
644497 let $l = landAssetIds
645498 let $s = size($l)
646499 let $acc0 = nil
647500 func $f0_1 ($a,$i) = if (($i >= $s))
648501 then $a
649502 else oneLand($a, $l[$i])
650503
651504 func $f0_2 ($a,$i) = if (($i >= $s))
652505 then $a
653506 else throw("List size exceeds 100")
654507
655508 $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)
656509 }
657510 $Tuple2(nil, r)
658511 }
659512
660513
661514
662515 @Callable(i)
663516 func warehouseOrderByAssetIdInfoREADONLY (landAssetId) = if ((landAssetId == ""))
664517 then throw("landAssetId is required")
665518 else {
666519 let stakedTime = valueOrElse(getInteger(stakingContract, keyStakedTimeByAssetId(landAssetId)), -1)
667520 let owner = if ((stakedTime > 0))
668521 then value(getString(stakingContract, keyLandAssetIdToOwner(landAssetId)))
669522 else ""
670523 $Tuple2(nil, landOrderInfoArray(landAssetId, owner))
671524 }
672525
673526
674527
675528 @Callable(i)
676529 func ordersByLandIdsInfoREADONLY (landAssetIds) = {
677530 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
678531 then throw("landAssetId is required")
679532 else {
680533 let stakedTime = valueOrElse(getInteger(stakingContract, keyStakedTimeByAssetId(landAssetId)), -1)
681534 let owner = if ((stakedTime > 0))
682535 then value(getString(stakingContract, keyLandAssetIdToOwner(landAssetId)))
683536 else ""
684537 (acc :+ landOrderInfoArray(landAssetId, owner))
685538 }
686539
687540 let r = {
688541 let $l = landAssetIds
689542 let $s = size($l)
690543 let $acc0 = nil
691544 func $f0_1 ($a,$i) = if (($i >= $s))
692545 then $a
693546 else oneLand($a, $l[$i])
694547
695548 func $f0_2 ($a,$i) = if (($i >= $s))
696549 then $a
697550 else throw("List size exceeds 40")
698551
699552 $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($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)
700553 }
701554 $Tuple2(nil, r)
702555 }
703556
704557
705558
706559 @Callable(i)
707560 func cancelWarehouseOrders (landAssetIds) = if ((i.caller != this))
708561 then throw("permission denied")
709562 else {
710563 let blocked = getBoolean(stakingContract, keyBlocked())
711564 if (if (!(isDefined(blocked)))
712565 then true
713566 else (value(blocked) == false))
714567 then throw("Contracts should be blocked before canceling orders")
715568 else {
716569 func oneLand (a,landAssetId) = if ((landAssetId == ""))
717570 then throw("landAssetId is required")
718571 else {
719572 let c = asBoolean(invoke(economyContract, "setWarehouseOrder", ["0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:", landAssetId], nil))
720573 if (if (a)
721574 then true
722575 else c)
723576 then !(if (a)
724577 then c
725578 else false)
726579 else false
727580 }
728581
729582 let r = {
730583 let $l = landAssetIds
731584 let $s = size($l)
732585 let $acc0 = false
733586 func $f0_1 ($a,$i) = if (($i >= $s))
734587 then $a
735588 else oneLand($a, $l[$i])
736589
737590 func $f0_2 ($a,$i) = if (($i >= $s))
738591 then $a
739592 else throw("List size exceeds 30")
740593
741594 $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($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)
742595 }
743596 $Tuple2(nil, r)
744597 }
745598 }
746599
747600
748601
749602 @Callable(i)
750603 func fixWarehouseFormats (landAssetIds) = if ((i.caller != this))
751604 then throw("permission denied")
752605 else {
753606 func oneLand (acc,landAssetId) = if ((landAssetId == ""))
754607 then throw("landAssetId is required")
755608 else (acc + size(asString(invoke(stakingContract, "fixWarehouseFormat", [landAssetId], nil))))
756609
757610 let r = {
758611 let $l = landAssetIds
759612 let $s = size($l)
760613 let $acc0 = 0
761614 func $f0_1 ($a,$i) = if (($i >= $s))
762615 then $a
763616 else oneLand($a, $l[$i])
764617
765618 func $f0_2 ($a,$i) = if (($i >= $s))
766619 then $a
767620 else throw("List size exceeds 25")
768621
769622 $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($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)
770623 }
771624 $Tuple2(nil, r)
772625 }
773626
774627
775628
776629 @Callable(i)
777630 func fixStakedPieces (users) = if ((i.caller != this))
778631 then throw("permission denied")
779632 else {
780633 func oneUser (acc,addr) = if ((addr == ""))
781634 then throw("address is required")
782635 else (acc + asInt(invoke(stakingContract, "fixStakedPieces", [addr], nil)))
783636
784637 let r = {
785638 let $l = users
786639 let $s = size($l)
787640 let $acc0 = 0
788641 func $f0_1 ($a,$i) = if (($i >= $s))
789642 then $a
790643 else oneUser($a, $l[$i])
791644
792645 func $f0_2 ($a,$i) = if (($i >= $s))
793646 then $a
794647 else throw("List size exceeds 16")
795648
796649 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
797650 }
798651 $Tuple2(nil, r)
799652 }
800653
801654
802655
803656 @Callable(i)
804657 func sendUsdtPrize (userAddress) = if ((i.caller != stakingContract))
805658 then throw("permission denied")
806659 else {
807660 let amt = fraction(assetBalance(this, usdtAssetId), USDTPRIZEPART, MULT6)
808661 $Tuple2([ScriptTransfer(addressFromStringValue(userAddress), amt, usdtAssetId)], amt)
809662 }
810663
811664
812665
813666 @Callable(i)
814667 func getEmergencyServiceDataREADONLY () = {
815668 let existStr = getString(economyContract, keyEsWarehouse())
816669 let existAmounts = if (isDefined(existStr))
817670 then split(value(existStr), "_")
818671 else nil
819672 func singleProd (acc,recipeStr) = {
820673 let n = acc._2
821674 let recipe = split(recipeStr, "_")
822675 let packSize = parseIntValue(recipe[recipeIdxPacksize])
823676 let maxAmount = if ((n == 0))
824677 then (ESMAXPACKAGES * packSize)
825678 else 0
826679 let existAmount = if ((size(existAmounts) > n))
827680 then parseIntValue(existAmounts[n])
828681 else 0
829682 let totalMat = getRecipeMaterials(recipe)
830683 let buyPrice = fraction((totalMat * ESBUYCOEF), RESOURCEPRICEMIN, (10 * packSize))
831684 let sellPrice = fraction((totalMat * ESSELLCOEF), RESOURCEPRICEMIN, (10 * packSize))
832685 let y = makeString([toString(maxAmount), toString(existAmount), toString(buyPrice), toString(sellPrice)], "_")
833686 $Tuple2((acc._1 :+ y), (n + 1))
834687 }
835688
836689 let s = makeString_2C(( let $l = productionMatrix
837690 let $s = size($l)
838691 let $acc0 = $Tuple2(nil, 0)
839692 func $f0_1 ($a,$i) = if (($i >= $s))
840693 then $a
841694 else singleProd($a, $l[$i])
842695
843696 func $f0_2 ($a,$i) = if (($i >= $s))
844697 then $a
845698 else throw("List size exceeds 50")
846699
847700 $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($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))._1, ":")
848701 let result = ("%s%s__emergencyServiceData__" + s)
849702 $Tuple2(nil, result)
850703 }
851704
852705
853706
854707 @Callable(i)
855708 func wlgStatsREADONLY () = {
856709 let curStats = getWlgStats()
857- $Tuple2(nil, [("%s%s%d__wlgAmount__" + toString(curStats[idxWlgAmount])), ("%s%s%d__wlgPrice__" + toString(curStats[idxWlgPrice])), ("%s%s%d__usdtFunds__" + toString(curStats[idxWlgFunds]))])
710+ $Tuple2(nil, [("%s%s%d__wlgAmount__" + toString(curStats[idxWlgAmount])), ("%s%s%d__wlgPrice__" + toString(curStats[idxWlgPrice])), ("%s%s%d__usdtFunds__" + toString(curStats[idxWlgFunds])), ("%s%s%d__usdtEconomy__" + toString(curStats[idxWlgEconomy])), ("%s%s%d__usdtActivity__" + toString(curStats[idxWlgActivity])), ("%s%s%d__usdtArbitrage__" + toString(curStats[idxWlgArbitrage])), ("%s%s%d__usdtPool__" + toString(curStats[idxWlgPool]))])
858711 }
859712
860713

github/deemru/w8io/169f3d6 
128.46 ms