tx · AQW4awMwXU4cnSBKhk5bxkr77ucERSQZrXfCSZBf8Usb 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep: -0.01000000 Waves 2023.01.17 14:39 [2408881] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves
{ "type": 13, "id": "AQW4awMwXU4cnSBKhk5bxkr77ucERSQZrXfCSZBf8Usb", "fee": 1000000, "feeAssetId": null, "timestamp": 1673955615052, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "3FBckdwe9ohJ3L9xwyQQVVYnoC7r2r9sS6qviR2U7Z4sskMjq4Ks1fo32qbRLaygWzmxNrFiPFGsaRqeBLBc7223" ], "script": "base64:BgIOCAISBAoCERESBAoCEREfAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABk1VTFQxMACAyK+gJQAFY2hhaW4JALAJAQkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkbkFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAICAVcFByRtYXRjaDABILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAwkAAAICAVQFByRtYXRjaDABIPd26vf3g8pl224T7gI7z1gplanB0Y3yS9ps2B1igMjeCQACAQINVW5rbm93biBjaGFpbgAPc3Rha2luZ0NvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBBAckbWF0Y2gwBQVjaGFpbgMJAAACAgFXBQckbWF0Y2gwAiMzUExuY1h0UzFVODNENmNRYkZEM0g4ckJIUExnenhTRktaMQMJAAACAgFUBQckbWF0Y2gwAiMzTkRDeUJHNXE4NUp1YVJpaWdVZUV0YWlueWpDUVQzWHBabQkAAgECDVVua25vd24gY2hhaW4AD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhAAZOVU1SRVMABgATRkFDVE9SWU1BWFdBUkVIT1VTRQCAyK+gJQAQUkVTT1VSQ0VQUklDRU1JTgDV1gkACk1JTlBBWU1FTlQAkE4ADlNFTExNVUxUSVBMSUVSAMgBAA1CVVlNVUxUSVBMSUVSAKwCAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQxzZWxsSW50ZXJuYWwEBWxvY0lkB3Jlc1R5cGUGYW1vdW50CG1pblByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdyZXNUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJyMAMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQAAAwkAZgIJAGQCBQJ3MAUGYW1vdW50BRNGQUNUT1JZTUFYV0FSRUhPVVNFCQBlAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUCdzAFBmFtb3VudAQMdXNkblJlY2VpdmVkCQBkAgkAawMFAnIwCQBlAgkAaAIFDlNFTExNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZAIJAGgCAGQFAncwCQBoAgAyBQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwkAZQIFBmFtb3VudAUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAVtaW45OQkAZQIFCG1pblByaWNlCQBpAgUIbWluUHJpY2UAZAMJAGYCCQBoAgUFbWluOTkFBmFtb3VudAkAaAIFDHVzZG5SZWNlaXZlZAUFTVVMVDgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQx1c2RuUmVjZWl2ZWQCAyAvIAkApAMBBQZhbW91bnQCDiA8IG1pblByaWNlID0gCQCkAwEFCG1pblByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhyZXNUeXBlcwUHcmVzVHlwZQIBKQkAlAoCCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGQCBQJ3MAUGYW1vdW50BQx1c2RuUmVjZWl2ZWQBC2J1eUludGVybmFsBAVsb2NJZAdtYXRUeXBlBmFtb3VudAhtYXhQcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHbWF0VHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCbTEDCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwAAAQCbTAJAJcDAQkAzAgCBQJ3MAkAzAgCCQBlAgUGYW1vdW50BQJtMQUDbmlsBAFtCQBkAgUCbTAFAm0xBAl1c2RuU3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQJ3MAkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2RuU3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkblNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2RuU3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAIBaQENc2VsbFJlc291cmNlcwIHYW1vdW50cwltaW5QcmljZXMEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwoBBWFkZGVyAgNhY2MBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhQsIGJ1dCB0cmllZCB0byBzZWxsIAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgAACQCRAwIFB2Ftb3VudHMFAWoJAAIBCQCsAgIJAKwCAgkArAICAiVZb3UgdHJpZWQgdG8gc2VsbCBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAgI6IAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqAAAEAWIJAQxzZWxsSW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1pblByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQCRAwIFB2Ftb3VudHMFAWoJAGQCCAUDYWNjAl8zCAUBYgJfMgkAlQoDCAUDYWNjAl8xCQDNCAIIBQNhY2MCXzIJAJEDAgUHcmVzTGlzdAUBaggFA2FjYwJfMwQGbWVyZ2VkCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwJAJQKAgkAzQgCCAUGbWVyZ2VkAl8xCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIIBQZtZXJnZWQCXzMFC3VzZG5Bc3NldElkBQZyZXN1bHQBaQEMYnV5TWF0ZXJpYWxzAgdhbW91bnRzCW1heFByaWNlcwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2RuQXNzZXRJZAkAAgECE1VTRE4gcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQhtVXBkYXRlcgIDYWNjAWoDCQBmAgAACQCRAwIFB2Ftb3VudHMFAWoJAAIBCQCsAgIJAKwCAgkArAICAiRZb3UgdHJpZWQgdG8gYnV5IG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIbWF0VHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBC2J1eUludGVybmFsBAUFbG9jSWQFAWoJAJEDAgUHYW1vdW50cwUBagkAkQMCBQltYXhQcmljZXMFAWoJAJUKAwkAzQgCCAUDYWNjAl8xCAUBYgJfMQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHbWF0TGlzdAUBaggFAWICXzMJAGQCCAUDYWNjAl8zCAUBYgJfMgkAlQoDCAUDYWNjAl8xCQDNCAIIBQNhY2MCXzIJAJEDAgUHbWF0TGlzdAUBaggFA2FjYwJfMwQGbWVyZ2VkCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbVVwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYDCQBmAggFBm1lcmdlZAJfMwUDYW10CQACAQkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkApAMBBQNhbXQCCywgcmVxdWlyZWQ9CQCkAwEIBQZtZXJnZWQCXzMEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkbkFzc2V0SWQFA25pbAUDbmlsCQCUCgIJAM4IAggFBm1lcmdlZAJfMQUEcmVzdAUGcmVzdWx0AGf96CY=", "height": 2408881, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9YNBxWmvUGoLXxNutSBPEoXRvBgaxH7mQo4vzjVbZgpA Next: D26GYuHZLea2V5wvzLQHHFACmjgdoBGaT7YhmQkWRR9a Diff:
Old | New | Differences | |
---|---|---|---|
37 | 37 | ||
38 | 38 | let l = 10000 | |
39 | 39 | ||
40 | - | let m = | |
40 | + | let m = 200 | |
41 | 41 | ||
42 | - | let n = | |
42 | + | let n = 300 | |
43 | 43 | ||
44 | - | let o = [" | |
44 | + | let o = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
45 | 45 | ||
46 | - | func p (q,r) = ((("factoryWhByContinentAndRes_" + q) + "_") + toString(r)) | |
46 | + | let p = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
47 | + | ||
48 | + | let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
49 | + | ||
50 | + | func r (s,t) = ((("factoryWhByContinentAndRes_" + s) + "_") + toString(t)) | |
47 | 51 | ||
48 | 52 | ||
49 | - | func | |
53 | + | func u (v) = ("stakedDuckByOwner_" + v) | |
50 | 54 | ||
51 | 55 | ||
52 | - | func | |
56 | + | func w (x) = ("backPack_" + x) | |
53 | 57 | ||
54 | 58 | ||
55 | - | func | |
59 | + | func y (x) = ("duckLocation_" + x) | |
56 | 60 | ||
57 | 61 | ||
58 | - | let | |
62 | + | let z = 0 | |
59 | 63 | ||
60 | - | let | |
64 | + | let A = 1 | |
61 | 65 | ||
62 | - | let | |
66 | + | let B = 2 | |
63 | 67 | ||
64 | - | let | |
68 | + | let C = 0 | |
65 | 69 | ||
66 | - | let | |
70 | + | let D = 1 | |
67 | 71 | ||
68 | - | let | |
72 | + | let E = 2 | |
69 | 73 | ||
70 | - | let | |
74 | + | let F = 3 | |
71 | 75 | ||
72 | - | func | |
73 | - | let f = | |
76 | + | func G (H) = { | |
77 | + | let f = H | |
74 | 78 | if ($isInstanceOf(f, "String")) | |
75 | 79 | then { | |
76 | - | let | |
77 | - | | |
80 | + | let I = f | |
81 | + | I | |
78 | 82 | } | |
79 | 83 | else throw("fail to cast into String") | |
80 | 84 | } | |
81 | 85 | ||
82 | 86 | ||
83 | - | func H (I,r,J) = { | |
84 | - | func K (L,M) = (L :+ (if ((M == r)) | |
85 | - | then toString((parseIntValue(I[M]) - J)) | |
86 | - | else I[M])) | |
87 | - | ||
88 | - | let N = { | |
89 | - | let O = [0, 1, 2, 3, 4, 5] | |
90 | - | let P = size(O) | |
91 | - | let Q = nil | |
92 | - | func R (S,T) = if ((T >= P)) | |
93 | - | then S | |
94 | - | else K(S, O[T]) | |
95 | - | ||
96 | - | func U (S,T) = if ((T >= P)) | |
97 | - | then S | |
98 | - | else throw("List size exceeds 6") | |
99 | - | ||
100 | - | U(R(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5), 6) | |
101 | - | } | |
102 | - | makeString(N, "_") | |
87 | + | func J (K,t,L,M) = { | |
88 | + | let N = r(K, t) | |
89 | + | let O = valueOrElse(getInteger(N), 0) | |
90 | + | let P = if ((O > j)) | |
91 | + | then 0 | |
92 | + | else if (((O + L) > j)) | |
93 | + | then (j - O) | |
94 | + | else L | |
95 | + | let Q = (fraction(P, ((m * k) - fraction(((100 * O) + (50 * P)), k, j)), c) + fraction((L - P), k, b)) | |
96 | + | let R = (M - (M / 100)) | |
97 | + | if (((R * L) > (Q * b))) | |
98 | + | then throw((((((((((("Actual price = " + toString(Q)) + " / ") + toString(L)) + " < minPrice = ") + toString(M)) + ", (") + K) + ", ") + o[t]) + ")")) | |
99 | + | else $Tuple2(IntegerEntry(N, (O + L)), Q) | |
103 | 100 | } | |
104 | 101 | ||
105 | 102 | ||
106 | - | func V (W,X,J) = { | |
107 | - | func Y (L,M) = (L :+ (if ((M == X)) | |
108 | - | then toString((parseIntValue(W[M]) + J)) | |
109 | - | else W[M])) | |
110 | - | ||
111 | - | let Z = { | |
112 | - | let O = [0, 1, 2, 3, 4, 5] | |
113 | - | let P = size(O) | |
114 | - | let Q = nil | |
115 | - | func R (S,T) = if ((T >= P)) | |
116 | - | then S | |
117 | - | else Y(S, O[T]) | |
118 | - | ||
119 | - | func U (S,T) = if ((T >= P)) | |
120 | - | then S | |
121 | - | else throw("List size exceeds 6") | |
122 | - | ||
123 | - | U(R(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5), 6) | |
124 | - | } | |
125 | - | makeString(Z, "_") | |
103 | + | func S (K,T,L,U) = { | |
104 | + | let N = r(K, T) | |
105 | + | let O = valueOrElse(getInteger(N), 0) | |
106 | + | let V = if ((O > j)) | |
107 | + | then min([L, (O - j)]) | |
108 | + | else 0 | |
109 | + | let W = min([O, (L - V)]) | |
110 | + | let X = (W + V) | |
111 | + | let Y = (fraction(W, ((n * k) - fraction(((100 * O) - (50 * W)), k, j)), c) + fraction(V, (2 * k), b)) | |
112 | + | let Z = (U + (U / 100)) | |
113 | + | if (((Y * b) > (Z * X))) | |
114 | + | then throw((((((((((("Actual price = " + toString(Y)) + " / ") + toString(X)) + " > maxPrice = ") + toString(U)) + ", (") + K) + ", ") + p[T]) + ")")) | |
115 | + | else $Tuple3(IntegerEntry(N, (O - X)), Y, X) | |
126 | 116 | } | |
127 | 117 | ||
128 | 118 | ||
129 | - | func aa (ab,r,J,ac) = { | |
130 | - | let ad = p(ab, r) | |
131 | - | let ae = valueOrElse(getInteger(ad), 0) | |
132 | - | let af = if ((ae > j)) | |
133 | - | then 0 | |
134 | - | else if (((ae + J) > j)) | |
135 | - | then (j - ae) | |
136 | - | else J | |
137 | - | let ag = (fraction(af, ((2 * k) - fraction((ae + (af / 2)), k, j)), b) + fraction((J - af), k, b)) | |
138 | - | let ah = (ac - (ac / 100)) | |
139 | - | if (((ah * J) > (ag * b))) | |
140 | - | then throw((((((((((("Actual price = " + toString(ag)) + " / ") + toString(J)) + " < minPrice = ") + toString(ac)) + ", (") + ab) + ", ") + m[r]) + ")")) | |
141 | - | else $Tuple2(IntegerEntry(ad, (ae + J)), ag) | |
119 | + | func aa (ab) = { | |
120 | + | let ac = split(valueOrElse(getString(g, ab), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
121 | + | [toString(valueOrElse(parseInt(ac[C]), 0)), if ((size(split(ac[D], "_")) == i)) | |
122 | + | then ac[D] | |
123 | + | else "0_0_0_0_0_0", if ((size(split(ac[E], "_")) == i)) | |
124 | + | then ac[E] | |
125 | + | else "0_0_0_0_0_0", ac[F]] | |
142 | 126 | } | |
143 | 127 | ||
144 | 128 | ||
145 | - | func ai (ab,X,J,aj) = { | |
146 | - | let ad = p(ab, X) | |
147 | - | let ae = valueOrElse(getInteger(ad), 0) | |
148 | - | let ak = if ((ae > j)) | |
149 | - | then min([J, (ae - j)]) | |
150 | - | else 0 | |
151 | - | let al = min([ae, (J - ak)]) | |
152 | - | let Z = (al + ak) | |
153 | - | let am = (fraction(al, ((300 * k) - fraction(((100 * ae) - (50 * al)), k, j)), c) + fraction(ak, (2 * k), b)) | |
154 | - | let an = (aj + (aj / 100)) | |
155 | - | if (((am * b) > (an * Z))) | |
156 | - | then throw((((((((((("Actual price = " + toString(am)) + " / ") + toString(Z)) + " > maxPrice = ") + toString(aj)) + ", (") + ab) + ", ") + n[X]) + ")")) | |
157 | - | else $Tuple3(IntegerEntry(ad, (ae - Z)), am, Z) | |
158 | - | } | |
159 | - | ||
160 | - | ||
161 | - | func ao (ap) = { | |
162 | - | let aq = split(valueOrElse(getString(g, ap), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
163 | - | [toString(valueOrElse(parseInt(aq[A]), 0)), if ((size(split(aq[B], "_")) == i)) | |
164 | - | then aq[B] | |
165 | - | else "0_0_0_0_0_0", if ((size(split(aq[C], "_")) == i)) | |
166 | - | then aq[C] | |
167 | - | else "0_0_0_0_0_0", aq[D]] | |
168 | - | } | |
169 | - | ||
170 | - | ||
171 | - | @Callable(M) | |
172 | - | func sellResources (ar,as) = { | |
173 | - | let v = valueOrErrorMessage(getString(g, s(toString(M.caller))), "You don't have a duck staked") | |
174 | - | if ((size(M.payments) != 0)) | |
129 | + | @Callable(ad) | |
130 | + | func sellResources (ae,af) = { | |
131 | + | let x = valueOrErrorMessage(getString(g, u(toString(ad.caller))), "You don't have a duck staked") | |
132 | + | if ((size(ad.payments) != 0)) | |
175 | 133 | then throw("sellResources doesn't require any payments") | |
176 | 134 | else { | |
177 | - | let | |
178 | - | if (( | |
179 | - | then throw(("Duck location type should be Factory, but is " + | |
135 | + | let ag = split(valueOrElse(getString(g, y(x)), h), "_") | |
136 | + | if ((ag[A] != "F")) | |
137 | + | then throw(("Duck location type should be Factory, but is " + ag[A])) | |
180 | 138 | else { | |
181 | - | let | |
182 | - | let | |
183 | - | let | |
184 | - | func | |
185 | - | then throw(((((("You have " + | |
186 | - | else if ((0 > | |
187 | - | then throw(((("You tried to sell negative amount of " + | |
188 | - | else if (( | |
139 | + | let K = ag[B] | |
140 | + | let ah = aa(w(x)) | |
141 | + | let ai = split(ah[D], "_") | |
142 | + | func aj (ak,al) = if ((ae[al] > parseIntValue(ai[al]))) | |
143 | + | then throw(((((("You have " + ai[al]) + " of ") + o[al]) + ", but tried to sell ") + toString(ae[al]))) | |
144 | + | else if ((0 > ae[al])) | |
145 | + | then throw(((("You tried to sell negative amount of " + o[al]) + ": ") + toString(ae[al]))) | |
146 | + | else if ((ae[al] > 0)) | |
189 | 147 | then { | |
190 | - | let | |
191 | - | $Tuple3(( | |
148 | + | let am = J(K, al, ae[al], af[al]) | |
149 | + | $Tuple3((ak._1 :+ am._1), (ak._2 :+ toString((parseIntValue(ai[al]) - ae[al]))), (ak._3 + am._2)) | |
192 | 150 | } | |
193 | - | else $Tuple3( | |
151 | + | else $Tuple3(ak._1, (ak._2 :+ ai[al]), ak._3) | |
194 | 152 | ||
195 | - | let | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | func | |
200 | - | then | |
201 | - | else | |
153 | + | let an = { | |
154 | + | let ao = [0, 1, 2, 3, 4, 5] | |
155 | + | let ap = size(ao) | |
156 | + | let aq = $Tuple3(nil, nil, 0) | |
157 | + | func ar (as,at) = if ((at >= ap)) | |
158 | + | then as | |
159 | + | else aj(as, ao[at]) | |
202 | 160 | ||
203 | - | func | |
204 | - | then | |
161 | + | func au (as,at) = if ((at >= ap)) | |
162 | + | then as | |
205 | 163 | else throw("List size exceeds 6") | |
206 | 164 | ||
207 | - | | |
165 | + | au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6) | |
208 | 166 | } | |
209 | - | let | |
210 | - | let | |
211 | - | $Tuple2(( | |
167 | + | let av = makeString([ah[C], makeString(an._2, "_"), ah[E], ah[F]], ":") | |
168 | + | let aw = G(invoke(g, "updateBackpack", [x, av], nil)) | |
169 | + | $Tuple2((an._1 :+ ScriptTransfer(ad.caller, an._3, e)), aw) | |
212 | 170 | } | |
213 | 171 | } | |
214 | 172 | } | |
215 | 173 | ||
216 | 174 | ||
217 | 175 | ||
218 | - | @Callable( | |
219 | - | func buyMaterials ( | |
220 | - | let | |
221 | - | if ((size( | |
176 | + | @Callable(ad) | |
177 | + | func buyMaterials (ae,ax) = { | |
178 | + | let x = valueOrErrorMessage(getString(g, u(toString(ad.caller))), "You don't have a duck staked") | |
179 | + | if ((size(ad.payments) != 1)) | |
222 | 180 | then throw("exactly 1 payment must be attached") | |
223 | 181 | else { | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
227 | - | if (( | |
182 | + | let ay = ad.payments[0] | |
183 | + | let az = ay.amount | |
184 | + | let aA = valueOrErrorMessage(ay.assetId, "WAVES can't be used as payment") | |
185 | + | if ((aA != e)) | |
228 | 186 | then throw("USDN payments only!") | |
229 | 187 | else { | |
230 | - | let | |
231 | - | if (( | |
232 | - | then throw(("Duck location type should be Factory, but is " + | |
188 | + | let ag = split(valueOrElse(getString(g, y(x)), h), "_") | |
189 | + | if ((ag[A] != "F")) | |
190 | + | then throw(("Duck location type should be Factory, but is " + ag[A])) | |
233 | 191 | else { | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | func | |
238 | - | then throw(((("You tried to buy negative amount of " + | |
239 | - | else if (( | |
192 | + | let K = ag[B] | |
193 | + | let ah = aa(w(x)) | |
194 | + | let aB = split(ah[E], "_") | |
195 | + | func aC (ak,al) = if ((0 > ae[al])) | |
196 | + | then throw(((("You tried to buy negative amount of " + p[al]) + ": ") + toString(ae[al]))) | |
197 | + | else if ((ae[al] > 0)) | |
240 | 198 | then { | |
241 | - | let | |
242 | - | $Tuple3(( | |
199 | + | let am = S(K, al, ae[al], ax[al]) | |
200 | + | $Tuple3((ak._1 :+ am._1), (ak._2 :+ toString((parseIntValue(aB[al]) + am._3))), (ak._3 + am._2)) | |
243 | 201 | } | |
244 | - | else $Tuple3( | |
202 | + | else $Tuple3(ak._1, (ak._2 :+ aB[al]), ak._3) | |
245 | 203 | ||
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | let | |
250 | - | func | |
251 | - | then | |
252 | - | else | |
204 | + | let an = { | |
205 | + | let ao = [0, 1, 2, 3, 4, 5] | |
206 | + | let ap = size(ao) | |
207 | + | let aq = $Tuple3(nil, nil, 0) | |
208 | + | func ar (as,at) = if ((at >= ap)) | |
209 | + | then as | |
210 | + | else aC(as, ao[at]) | |
253 | 211 | ||
254 | - | func | |
255 | - | then | |
212 | + | func au (as,at) = if ((at >= ap)) | |
213 | + | then as | |
256 | 214 | else throw("List size exceeds 6") | |
257 | 215 | ||
258 | - | | |
216 | + | au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6) | |
259 | 217 | } | |
260 | - | if (( | |
261 | - | then throw(((("Insufficient payment! Attached=" + toString( | |
218 | + | if ((an._3 > az)) | |
219 | + | then throw(((("Insufficient payment! Attached=" + toString(az)) + ", required=") + toString(an._3))) | |
262 | 220 | else { | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | then [ScriptTransfer( | |
221 | + | let av = makeString([ah[C], ah[D], makeString(an._2, "_"), ah[F]], ":") | |
222 | + | let aw = G(invoke(g, "updateBackpack", [x, av], nil)) | |
223 | + | let aD = if (((az - an._3) > 0)) | |
224 | + | then [ScriptTransfer(ad.caller, (az - an._3), e)] | |
267 | 225 | else nil | |
268 | - | $Tuple2(( | |
226 | + | $Tuple2((an._1 ++ aD), aw) | |
269 | 227 | } | |
270 | 228 | } | |
271 | 229 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 1000000 | |
5 | 5 | ||
6 | 6 | let b = 100000000 | |
7 | 7 | ||
8 | 8 | let c = 10000000000 | |
9 | 9 | ||
10 | 10 | let d = toUtf8String(take(drop(this.bytes, 1), 1)) | |
11 | 11 | ||
12 | 12 | let e = { | |
13 | 13 | let f = d | |
14 | 14 | if (("W" == f)) | |
15 | 15 | then base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' | |
16 | 16 | else if (("T" == f)) | |
17 | 17 | then base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ' | |
18 | 18 | else throw("Unknown chain") | |
19 | 19 | } | |
20 | 20 | ||
21 | 21 | let g = addressFromStringValue({ | |
22 | 22 | let f = d | |
23 | 23 | if (("W" == f)) | |
24 | 24 | then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1" | |
25 | 25 | else if (("T" == f)) | |
26 | 26 | then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm" | |
27 | 27 | else throw("Unknown chain") | |
28 | 28 | }) | |
29 | 29 | ||
30 | 30 | let h = "Africa_F_Africa" | |
31 | 31 | ||
32 | 32 | let i = 6 | |
33 | 33 | ||
34 | 34 | let j = 10000000000 | |
35 | 35 | ||
36 | 36 | let k = 158549 | |
37 | 37 | ||
38 | 38 | let l = 10000 | |
39 | 39 | ||
40 | - | let m = | |
40 | + | let m = 200 | |
41 | 41 | ||
42 | - | let n = | |
42 | + | let n = 300 | |
43 | 43 | ||
44 | - | let o = [" | |
44 | + | let o = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
45 | 45 | ||
46 | - | func p (q,r) = ((("factoryWhByContinentAndRes_" + q) + "_") + toString(r)) | |
46 | + | let p = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
47 | + | ||
48 | + | let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
49 | + | ||
50 | + | func r (s,t) = ((("factoryWhByContinentAndRes_" + s) + "_") + toString(t)) | |
47 | 51 | ||
48 | 52 | ||
49 | - | func | |
53 | + | func u (v) = ("stakedDuckByOwner_" + v) | |
50 | 54 | ||
51 | 55 | ||
52 | - | func | |
56 | + | func w (x) = ("backPack_" + x) | |
53 | 57 | ||
54 | 58 | ||
55 | - | func | |
59 | + | func y (x) = ("duckLocation_" + x) | |
56 | 60 | ||
57 | 61 | ||
58 | - | let | |
62 | + | let z = 0 | |
59 | 63 | ||
60 | - | let | |
64 | + | let A = 1 | |
61 | 65 | ||
62 | - | let | |
66 | + | let B = 2 | |
63 | 67 | ||
64 | - | let | |
68 | + | let C = 0 | |
65 | 69 | ||
66 | - | let | |
70 | + | let D = 1 | |
67 | 71 | ||
68 | - | let | |
72 | + | let E = 2 | |
69 | 73 | ||
70 | - | let | |
74 | + | let F = 3 | |
71 | 75 | ||
72 | - | func | |
73 | - | let f = | |
76 | + | func G (H) = { | |
77 | + | let f = H | |
74 | 78 | if ($isInstanceOf(f, "String")) | |
75 | 79 | then { | |
76 | - | let | |
77 | - | | |
80 | + | let I = f | |
81 | + | I | |
78 | 82 | } | |
79 | 83 | else throw("fail to cast into String") | |
80 | 84 | } | |
81 | 85 | ||
82 | 86 | ||
83 | - | func H (I,r,J) = { | |
84 | - | func K (L,M) = (L :+ (if ((M == r)) | |
85 | - | then toString((parseIntValue(I[M]) - J)) | |
86 | - | else I[M])) | |
87 | - | ||
88 | - | let N = { | |
89 | - | let O = [0, 1, 2, 3, 4, 5] | |
90 | - | let P = size(O) | |
91 | - | let Q = nil | |
92 | - | func R (S,T) = if ((T >= P)) | |
93 | - | then S | |
94 | - | else K(S, O[T]) | |
95 | - | ||
96 | - | func U (S,T) = if ((T >= P)) | |
97 | - | then S | |
98 | - | else throw("List size exceeds 6") | |
99 | - | ||
100 | - | U(R(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5), 6) | |
101 | - | } | |
102 | - | makeString(N, "_") | |
87 | + | func J (K,t,L,M) = { | |
88 | + | let N = r(K, t) | |
89 | + | let O = valueOrElse(getInteger(N), 0) | |
90 | + | let P = if ((O > j)) | |
91 | + | then 0 | |
92 | + | else if (((O + L) > j)) | |
93 | + | then (j - O) | |
94 | + | else L | |
95 | + | let Q = (fraction(P, ((m * k) - fraction(((100 * O) + (50 * P)), k, j)), c) + fraction((L - P), k, b)) | |
96 | + | let R = (M - (M / 100)) | |
97 | + | if (((R * L) > (Q * b))) | |
98 | + | then throw((((((((((("Actual price = " + toString(Q)) + " / ") + toString(L)) + " < minPrice = ") + toString(M)) + ", (") + K) + ", ") + o[t]) + ")")) | |
99 | + | else $Tuple2(IntegerEntry(N, (O + L)), Q) | |
103 | 100 | } | |
104 | 101 | ||
105 | 102 | ||
106 | - | func V (W,X,J) = { | |
107 | - | func Y (L,M) = (L :+ (if ((M == X)) | |
108 | - | then toString((parseIntValue(W[M]) + J)) | |
109 | - | else W[M])) | |
110 | - | ||
111 | - | let Z = { | |
112 | - | let O = [0, 1, 2, 3, 4, 5] | |
113 | - | let P = size(O) | |
114 | - | let Q = nil | |
115 | - | func R (S,T) = if ((T >= P)) | |
116 | - | then S | |
117 | - | else Y(S, O[T]) | |
118 | - | ||
119 | - | func U (S,T) = if ((T >= P)) | |
120 | - | then S | |
121 | - | else throw("List size exceeds 6") | |
122 | - | ||
123 | - | U(R(R(R(R(R(R(Q, 0), 1), 2), 3), 4), 5), 6) | |
124 | - | } | |
125 | - | makeString(Z, "_") | |
103 | + | func S (K,T,L,U) = { | |
104 | + | let N = r(K, T) | |
105 | + | let O = valueOrElse(getInteger(N), 0) | |
106 | + | let V = if ((O > j)) | |
107 | + | then min([L, (O - j)]) | |
108 | + | else 0 | |
109 | + | let W = min([O, (L - V)]) | |
110 | + | let X = (W + V) | |
111 | + | let Y = (fraction(W, ((n * k) - fraction(((100 * O) - (50 * W)), k, j)), c) + fraction(V, (2 * k), b)) | |
112 | + | let Z = (U + (U / 100)) | |
113 | + | if (((Y * b) > (Z * X))) | |
114 | + | then throw((((((((((("Actual price = " + toString(Y)) + " / ") + toString(X)) + " > maxPrice = ") + toString(U)) + ", (") + K) + ", ") + p[T]) + ")")) | |
115 | + | else $Tuple3(IntegerEntry(N, (O - X)), Y, X) | |
126 | 116 | } | |
127 | 117 | ||
128 | 118 | ||
129 | - | func aa (ab,r,J,ac) = { | |
130 | - | let ad = p(ab, r) | |
131 | - | let ae = valueOrElse(getInteger(ad), 0) | |
132 | - | let af = if ((ae > j)) | |
133 | - | then 0 | |
134 | - | else if (((ae + J) > j)) | |
135 | - | then (j - ae) | |
136 | - | else J | |
137 | - | let ag = (fraction(af, ((2 * k) - fraction((ae + (af / 2)), k, j)), b) + fraction((J - af), k, b)) | |
138 | - | let ah = (ac - (ac / 100)) | |
139 | - | if (((ah * J) > (ag * b))) | |
140 | - | then throw((((((((((("Actual price = " + toString(ag)) + " / ") + toString(J)) + " < minPrice = ") + toString(ac)) + ", (") + ab) + ", ") + m[r]) + ")")) | |
141 | - | else $Tuple2(IntegerEntry(ad, (ae + J)), ag) | |
119 | + | func aa (ab) = { | |
120 | + | let ac = split(valueOrElse(getString(g, ab), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
121 | + | [toString(valueOrElse(parseInt(ac[C]), 0)), if ((size(split(ac[D], "_")) == i)) | |
122 | + | then ac[D] | |
123 | + | else "0_0_0_0_0_0", if ((size(split(ac[E], "_")) == i)) | |
124 | + | then ac[E] | |
125 | + | else "0_0_0_0_0_0", ac[F]] | |
142 | 126 | } | |
143 | 127 | ||
144 | 128 | ||
145 | - | func ai (ab,X,J,aj) = { | |
146 | - | let ad = p(ab, X) | |
147 | - | let ae = valueOrElse(getInteger(ad), 0) | |
148 | - | let ak = if ((ae > j)) | |
149 | - | then min([J, (ae - j)]) | |
150 | - | else 0 | |
151 | - | let al = min([ae, (J - ak)]) | |
152 | - | let Z = (al + ak) | |
153 | - | let am = (fraction(al, ((300 * k) - fraction(((100 * ae) - (50 * al)), k, j)), c) + fraction(ak, (2 * k), b)) | |
154 | - | let an = (aj + (aj / 100)) | |
155 | - | if (((am * b) > (an * Z))) | |
156 | - | then throw((((((((((("Actual price = " + toString(am)) + " / ") + toString(Z)) + " > maxPrice = ") + toString(aj)) + ", (") + ab) + ", ") + n[X]) + ")")) | |
157 | - | else $Tuple3(IntegerEntry(ad, (ae - Z)), am, Z) | |
158 | - | } | |
159 | - | ||
160 | - | ||
161 | - | func ao (ap) = { | |
162 | - | let aq = split(valueOrElse(getString(g, ap), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
163 | - | [toString(valueOrElse(parseInt(aq[A]), 0)), if ((size(split(aq[B], "_")) == i)) | |
164 | - | then aq[B] | |
165 | - | else "0_0_0_0_0_0", if ((size(split(aq[C], "_")) == i)) | |
166 | - | then aq[C] | |
167 | - | else "0_0_0_0_0_0", aq[D]] | |
168 | - | } | |
169 | - | ||
170 | - | ||
171 | - | @Callable(M) | |
172 | - | func sellResources (ar,as) = { | |
173 | - | let v = valueOrErrorMessage(getString(g, s(toString(M.caller))), "You don't have a duck staked") | |
174 | - | if ((size(M.payments) != 0)) | |
129 | + | @Callable(ad) | |
130 | + | func sellResources (ae,af) = { | |
131 | + | let x = valueOrErrorMessage(getString(g, u(toString(ad.caller))), "You don't have a duck staked") | |
132 | + | if ((size(ad.payments) != 0)) | |
175 | 133 | then throw("sellResources doesn't require any payments") | |
176 | 134 | else { | |
177 | - | let | |
178 | - | if (( | |
179 | - | then throw(("Duck location type should be Factory, but is " + | |
135 | + | let ag = split(valueOrElse(getString(g, y(x)), h), "_") | |
136 | + | if ((ag[A] != "F")) | |
137 | + | then throw(("Duck location type should be Factory, but is " + ag[A])) | |
180 | 138 | else { | |
181 | - | let | |
182 | - | let | |
183 | - | let | |
184 | - | func | |
185 | - | then throw(((((("You have " + | |
186 | - | else if ((0 > | |
187 | - | then throw(((("You tried to sell negative amount of " + | |
188 | - | else if (( | |
139 | + | let K = ag[B] | |
140 | + | let ah = aa(w(x)) | |
141 | + | let ai = split(ah[D], "_") | |
142 | + | func aj (ak,al) = if ((ae[al] > parseIntValue(ai[al]))) | |
143 | + | then throw(((((("You have " + ai[al]) + " of ") + o[al]) + ", but tried to sell ") + toString(ae[al]))) | |
144 | + | else if ((0 > ae[al])) | |
145 | + | then throw(((("You tried to sell negative amount of " + o[al]) + ": ") + toString(ae[al]))) | |
146 | + | else if ((ae[al] > 0)) | |
189 | 147 | then { | |
190 | - | let | |
191 | - | $Tuple3(( | |
148 | + | let am = J(K, al, ae[al], af[al]) | |
149 | + | $Tuple3((ak._1 :+ am._1), (ak._2 :+ toString((parseIntValue(ai[al]) - ae[al]))), (ak._3 + am._2)) | |
192 | 150 | } | |
193 | - | else $Tuple3( | |
151 | + | else $Tuple3(ak._1, (ak._2 :+ ai[al]), ak._3) | |
194 | 152 | ||
195 | - | let | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | func | |
200 | - | then | |
201 | - | else | |
153 | + | let an = { | |
154 | + | let ao = [0, 1, 2, 3, 4, 5] | |
155 | + | let ap = size(ao) | |
156 | + | let aq = $Tuple3(nil, nil, 0) | |
157 | + | func ar (as,at) = if ((at >= ap)) | |
158 | + | then as | |
159 | + | else aj(as, ao[at]) | |
202 | 160 | ||
203 | - | func | |
204 | - | then | |
161 | + | func au (as,at) = if ((at >= ap)) | |
162 | + | then as | |
205 | 163 | else throw("List size exceeds 6") | |
206 | 164 | ||
207 | - | | |
165 | + | au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6) | |
208 | 166 | } | |
209 | - | let | |
210 | - | let | |
211 | - | $Tuple2(( | |
167 | + | let av = makeString([ah[C], makeString(an._2, "_"), ah[E], ah[F]], ":") | |
168 | + | let aw = G(invoke(g, "updateBackpack", [x, av], nil)) | |
169 | + | $Tuple2((an._1 :+ ScriptTransfer(ad.caller, an._3, e)), aw) | |
212 | 170 | } | |
213 | 171 | } | |
214 | 172 | } | |
215 | 173 | ||
216 | 174 | ||
217 | 175 | ||
218 | - | @Callable( | |
219 | - | func buyMaterials ( | |
220 | - | let | |
221 | - | if ((size( | |
176 | + | @Callable(ad) | |
177 | + | func buyMaterials (ae,ax) = { | |
178 | + | let x = valueOrErrorMessage(getString(g, u(toString(ad.caller))), "You don't have a duck staked") | |
179 | + | if ((size(ad.payments) != 1)) | |
222 | 180 | then throw("exactly 1 payment must be attached") | |
223 | 181 | else { | |
224 | - | let | |
225 | - | let | |
226 | - | let | |
227 | - | if (( | |
182 | + | let ay = ad.payments[0] | |
183 | + | let az = ay.amount | |
184 | + | let aA = valueOrErrorMessage(ay.assetId, "WAVES can't be used as payment") | |
185 | + | if ((aA != e)) | |
228 | 186 | then throw("USDN payments only!") | |
229 | 187 | else { | |
230 | - | let | |
231 | - | if (( | |
232 | - | then throw(("Duck location type should be Factory, but is " + | |
188 | + | let ag = split(valueOrElse(getString(g, y(x)), h), "_") | |
189 | + | if ((ag[A] != "F")) | |
190 | + | then throw(("Duck location type should be Factory, but is " + ag[A])) | |
233 | 191 | else { | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | func | |
238 | - | then throw(((("You tried to buy negative amount of " + | |
239 | - | else if (( | |
192 | + | let K = ag[B] | |
193 | + | let ah = aa(w(x)) | |
194 | + | let aB = split(ah[E], "_") | |
195 | + | func aC (ak,al) = if ((0 > ae[al])) | |
196 | + | then throw(((("You tried to buy negative amount of " + p[al]) + ": ") + toString(ae[al]))) | |
197 | + | else if ((ae[al] > 0)) | |
240 | 198 | then { | |
241 | - | let | |
242 | - | $Tuple3(( | |
199 | + | let am = S(K, al, ae[al], ax[al]) | |
200 | + | $Tuple3((ak._1 :+ am._1), (ak._2 :+ toString((parseIntValue(aB[al]) + am._3))), (ak._3 + am._2)) | |
243 | 201 | } | |
244 | - | else $Tuple3( | |
202 | + | else $Tuple3(ak._1, (ak._2 :+ aB[al]), ak._3) | |
245 | 203 | ||
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | let | |
250 | - | func | |
251 | - | then | |
252 | - | else | |
204 | + | let an = { | |
205 | + | let ao = [0, 1, 2, 3, 4, 5] | |
206 | + | let ap = size(ao) | |
207 | + | let aq = $Tuple3(nil, nil, 0) | |
208 | + | func ar (as,at) = if ((at >= ap)) | |
209 | + | then as | |
210 | + | else aC(as, ao[at]) | |
253 | 211 | ||
254 | - | func | |
255 | - | then | |
212 | + | func au (as,at) = if ((at >= ap)) | |
213 | + | then as | |
256 | 214 | else throw("List size exceeds 6") | |
257 | 215 | ||
258 | - | | |
216 | + | au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6) | |
259 | 217 | } | |
260 | - | if (( | |
261 | - | then throw(((("Insufficient payment! Attached=" + toString( | |
218 | + | if ((an._3 > az)) | |
219 | + | then throw(((("Insufficient payment! Attached=" + toString(az)) + ", required=") + toString(an._3))) | |
262 | 220 | else { | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | then [ScriptTransfer( | |
221 | + | let av = makeString([ah[C], ah[D], makeString(an._2, "_"), ah[F]], ":") | |
222 | + | let aw = G(invoke(g, "updateBackpack", [x, av], nil)) | |
223 | + | let aD = if (((az - an._3) > 0)) | |
224 | + | then [ScriptTransfer(ad.caller, (az - an._3), e)] | |
267 | 225 | else nil | |
268 | - | $Tuple2(( | |
226 | + | $Tuple2((an._1 ++ aD), aw) | |
269 | 227 | } | |
270 | 228 | } | |
271 | 229 | } | |
272 | 230 | } | |
273 | 231 | } | |
274 | 232 | ||
275 | 233 |
github/deemru/w8io/c3f4982 130.63 ms ◑