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:
OldNewDifferences
3636 let RESOURCEPRICEMIN = 158549
3737
3838 let MINPAYMENT = 10000
39+
40+let SELLMULTIPLIER = 200
41+
42+let BUYMULTIPLIER = 300
3943
4044 let resTypes = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
4145
7781 }
7882
7983
80-func subRes (resList,resType,amount) = {
81- func subber (acc,i) = (acc :+ (if ((i == resType))
82- then toString((parseIntValue(resList[i]) - amount))
83- else resList[i]))
84-
85- let r = {
86- let $l = [0, 1, 2, 3, 4, 5]
87- let $s = size($l)
88- let $acc0 = nil
89- func $f0_1 ($a,$i) = if (($i >= $s))
90- then $a
91- else subber($a, $l[$i])
92-
93- func $f0_2 ($a,$i) = if (($i >= $s))
94- then $a
95- else throw("List size exceeds 6")
96-
97- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
98- }
99- makeString(r, "_")
100- }
101-
102-
103-func addMat (matList,matType,amount) = {
104- func increaser (acc,i) = (acc :+ (if ((i == matType))
105- then toString((parseIntValue(matList[i]) + amount))
106- else matList[i]))
107-
108- let m = {
109- let $l = [0, 1, 2, 3, 4, 5]
110- let $s = size($l)
111- let $acc0 = nil
112- func $f0_1 ($a,$i) = if (($i >= $s))
113- then $a
114- else increaser($a, $l[$i])
115-
116- func $f0_2 ($a,$i) = if (($i >= $s))
117- then $a
118- else throw("List size exceeds 6")
119-
120- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
121- }
122- makeString(m, "_")
123- }
124-
125-
12684 func sellInternal (locId,resType,amount,minPrice) = {
12785 let whKey = keyFactoryWarehouseByIdAndType(locId, resType)
12886 let w0 = valueOrElse(getInteger(whKey), 0)
13189 else if (((w0 + amount) > FACTORYMAXWAREHOUSE))
13290 then (FACTORYMAXWAREHOUSE - w0)
13391 else amount
134- let usdnReceived = (fraction(r0, ((2 * RESOURCEPRICEMIN) - fraction((w0 + (r0 / 2)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT8) + fraction((amount - r0), RESOURCEPRICEMIN, MULT8))
92+ let usdnReceived = (fraction(r0, ((SELLMULTIPLIER * RESOURCEPRICEMIN) - fraction(((100 * w0) + (50 * r0)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT10) + fraction((amount - r0), RESOURCEPRICEMIN, MULT8))
13593 let min99 = (minPrice - (minPrice / 100))
13694 if (((min99 * amount) > (usdnReceived * MULT8)))
13795 then throw((((((((((("Actual price = " + toString(usdnReceived)) + " / ") + toString(amount)) + " < minPrice = ") + toString(minPrice)) + ", (") + locId) + ", ") + resTypes[resType]) + ")"))
147105 else 0
148106 let m0 = min([w0, (amount - m1)])
149107 let m = (m0 + m1)
150- let usdnSpent = (fraction(m0, ((300 * RESOURCEPRICEMIN) - fraction(((100 * w0) - (50 * m0)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT10) + fraction(m1, (2 * RESOURCEPRICEMIN), MULT8))
108+ let usdnSpent = (fraction(m0, ((BUYMULTIPLIER * RESOURCEPRICEMIN) - fraction(((100 * w0) - (50 * m0)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT10) + fraction(m1, (2 * RESOURCEPRICEMIN), MULT8))
151109 let max101 = (maxPrice + (maxPrice / 100))
152110 if (((usdnSpent * MULT8) > (max101 * m)))
153111 then throw((((((((((("Actual price = " + toString(usdnSpent)) + " / ") + toString(m)) + " > maxPrice = ") + toString(maxPrice)) + ", (") + locId) + ", ") + matTypes[matType]) + ")"))
184142 then throw(((("You tried to sell negative amount of " + resTypes[j]) + ": ") + toString(amounts[j])))
185143 else if ((amounts[j] > 0))
186144 then {
187- let b = sellInternal(locId, j, amounts[j], minPrices[value(j)])
145+ let b = sellInternal(locId, j, amounts[j], minPrices[j])
188146 $Tuple3((acc._1 :+ b._1), (acc._2 :+ toString((parseIntValue(resList[j]) - amounts[j]))), (acc._3 + b._2))
189147 }
190148 else $Tuple3(acc._1, (acc._2 :+ resList[j]), acc._3)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let MULT6 = 1000000
55
66 let MULT8 = 100000000
77
88 let MULT10 = 10000000000
99
1010 let chain = toUtf8String(take(drop(this.bytes, 1), 1))
1111
1212 let usdnAssetId = match chain {
1313 case _ =>
1414 if (("W" == $match0))
1515 then base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
1616 else if (("T" == $match0))
1717 then base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
1818 else throw("Unknown chain")
1919 }
2020
2121 let stakingContract = addressFromStringValue(match chain {
2222 case _ =>
2323 if (("W" == $match0))
2424 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
2525 else if (("T" == $match0))
2626 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
2727 else throw("Unknown chain")
2828 })
2929
3030 let DEFAULTLOCATION = "Africa_F_Africa"
3131
3232 let NUMRES = 6
3333
3434 let FACTORYMAXWAREHOUSE = 10000000000
3535
3636 let RESOURCEPRICEMIN = 158549
3737
3838 let MINPAYMENT = 10000
39+
40+let SELLMULTIPLIER = 200
41+
42+let BUYMULTIPLIER = 300
3943
4044 let resTypes = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
4145
4246 let matTypes = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
4347
4448 let continents = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
4549
4650 func keyFactoryWarehouseByIdAndType (factoryId,resType) = ((("factoryWhByContinentAndRes_" + factoryId) + "_") + toString(resType))
4751
4852
4953 func keyStakedDuckByOwner (ownerAddr) = ("stakedDuckByOwner_" + ownerAddr)
5054
5155
5256 func keyBackpackByDuck (duckAssetId) = ("backPack_" + duckAssetId)
5357
5458
5559 func keyDuckLocation (duckAssetId) = ("duckLocation_" + duckAssetId)
5660
5761
5862 let locIdxContinent = 0
5963
6064 let locIdxType = 1
6165
6266 let locIdxId = 2
6367
6468 let bpIdxLevel = 0
6569
6670 let bpIdxRes = 1
6771
6872 let bpIdxMat = 2
6973
7074 let bpIdxProd = 3
7175
7276 func asString (v) = match v {
7377 case s: String =>
7478 s
7579 case _ =>
7680 throw("fail to cast into String")
7781 }
7882
7983
80-func subRes (resList,resType,amount) = {
81- func subber (acc,i) = (acc :+ (if ((i == resType))
82- then toString((parseIntValue(resList[i]) - amount))
83- else resList[i]))
84-
85- let r = {
86- let $l = [0, 1, 2, 3, 4, 5]
87- let $s = size($l)
88- let $acc0 = nil
89- func $f0_1 ($a,$i) = if (($i >= $s))
90- then $a
91- else subber($a, $l[$i])
92-
93- func $f0_2 ($a,$i) = if (($i >= $s))
94- then $a
95- else throw("List size exceeds 6")
96-
97- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
98- }
99- makeString(r, "_")
100- }
101-
102-
103-func addMat (matList,matType,amount) = {
104- func increaser (acc,i) = (acc :+ (if ((i == matType))
105- then toString((parseIntValue(matList[i]) + amount))
106- else matList[i]))
107-
108- let m = {
109- let $l = [0, 1, 2, 3, 4, 5]
110- let $s = size($l)
111- let $acc0 = nil
112- func $f0_1 ($a,$i) = if (($i >= $s))
113- then $a
114- else increaser($a, $l[$i])
115-
116- func $f0_2 ($a,$i) = if (($i >= $s))
117- then $a
118- else throw("List size exceeds 6")
119-
120- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
121- }
122- makeString(m, "_")
123- }
124-
125-
12684 func sellInternal (locId,resType,amount,minPrice) = {
12785 let whKey = keyFactoryWarehouseByIdAndType(locId, resType)
12886 let w0 = valueOrElse(getInteger(whKey), 0)
12987 let r0 = if ((w0 > FACTORYMAXWAREHOUSE))
13088 then 0
13189 else if (((w0 + amount) > FACTORYMAXWAREHOUSE))
13290 then (FACTORYMAXWAREHOUSE - w0)
13391 else amount
134- let usdnReceived = (fraction(r0, ((2 * RESOURCEPRICEMIN) - fraction((w0 + (r0 / 2)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT8) + fraction((amount - r0), RESOURCEPRICEMIN, MULT8))
92+ let usdnReceived = (fraction(r0, ((SELLMULTIPLIER * RESOURCEPRICEMIN) - fraction(((100 * w0) + (50 * r0)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT10) + fraction((amount - r0), RESOURCEPRICEMIN, MULT8))
13593 let min99 = (minPrice - (minPrice / 100))
13694 if (((min99 * amount) > (usdnReceived * MULT8)))
13795 then throw((((((((((("Actual price = " + toString(usdnReceived)) + " / ") + toString(amount)) + " < minPrice = ") + toString(minPrice)) + ", (") + locId) + ", ") + resTypes[resType]) + ")"))
13896 else $Tuple2(IntegerEntry(whKey, (w0 + amount)), usdnReceived)
13997 }
14098
14199
142100 func buyInternal (locId,matType,amount,maxPrice) = {
143101 let whKey = keyFactoryWarehouseByIdAndType(locId, matType)
144102 let w0 = valueOrElse(getInteger(whKey), 0)
145103 let m1 = if ((w0 > FACTORYMAXWAREHOUSE))
146104 then min([amount, (w0 - FACTORYMAXWAREHOUSE)])
147105 else 0
148106 let m0 = min([w0, (amount - m1)])
149107 let m = (m0 + m1)
150- let usdnSpent = (fraction(m0, ((300 * RESOURCEPRICEMIN) - fraction(((100 * w0) - (50 * m0)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT10) + fraction(m1, (2 * RESOURCEPRICEMIN), MULT8))
108+ let usdnSpent = (fraction(m0, ((BUYMULTIPLIER * RESOURCEPRICEMIN) - fraction(((100 * w0) - (50 * m0)), RESOURCEPRICEMIN, FACTORYMAXWAREHOUSE)), MULT10) + fraction(m1, (2 * RESOURCEPRICEMIN), MULT8))
151109 let max101 = (maxPrice + (maxPrice / 100))
152110 if (((usdnSpent * MULT8) > (max101 * m)))
153111 then throw((((((((((("Actual price = " + toString(usdnSpent)) + " / ") + toString(m)) + " > maxPrice = ") + toString(maxPrice)) + ", (") + locId) + ", ") + matTypes[matType]) + ")"))
154112 else $Tuple3(IntegerEntry(whKey, (w0 - m)), usdnSpent, m)
155113 }
156114
157115
158116 func getBackpack (bpKey) = {
159117 let p = split(valueOrElse(getString(stakingContract, bpKey), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
160118 [toString(valueOrElse(parseInt(p[bpIdxLevel]), 0)), if ((size(split(p[bpIdxRes], "_")) == NUMRES))
161119 then p[bpIdxRes]
162120 else "0_0_0_0_0_0", if ((size(split(p[bpIdxMat], "_")) == NUMRES))
163121 then p[bpIdxMat]
164122 else "0_0_0_0_0_0", p[bpIdxProd]]
165123 }
166124
167125
168126 @Callable(i)
169127 func sellResources (amounts,minPrices) = {
170128 let duckAssetId = valueOrErrorMessage(getString(stakingContract, keyStakedDuckByOwner(toString(i.caller))), "You don't have a duck staked")
171129 if ((size(i.payments) != 0))
172130 then throw("sellResources doesn't require any payments")
173131 else {
174132 let curLocation = split(valueOrElse(getString(stakingContract, keyDuckLocation(duckAssetId)), DEFAULTLOCATION), "_")
175133 if ((curLocation[locIdxType] != "F"))
176134 then throw(("Duck location type should be Factory, but is " + curLocation[locIdxType]))
177135 else {
178136 let locId = curLocation[locIdxId]
179137 let currentPack = getBackpack(keyBackpackByDuck(duckAssetId))
180138 let resList = split(currentPack[bpIdxRes], "_")
181139 func adder (acc,j) = if ((amounts[j] > parseIntValue(resList[j])))
182140 then throw(((((("You have " + resList[j]) + " of ") + resTypes[j]) + ", but tried to sell ") + toString(amounts[j])))
183141 else if ((0 > amounts[j]))
184142 then throw(((("You tried to sell negative amount of " + resTypes[j]) + ": ") + toString(amounts[j])))
185143 else if ((amounts[j] > 0))
186144 then {
187- let b = sellInternal(locId, j, amounts[j], minPrices[value(j)])
145+ let b = sellInternal(locId, j, amounts[j], minPrices[j])
188146 $Tuple3((acc._1 :+ b._1), (acc._2 :+ toString((parseIntValue(resList[j]) - amounts[j]))), (acc._3 + b._2))
189147 }
190148 else $Tuple3(acc._1, (acc._2 :+ resList[j]), acc._3)
191149
192150 let merged = {
193151 let $l = [0, 1, 2, 3, 4, 5]
194152 let $s = size($l)
195153 let $acc0 = $Tuple3(nil, nil, 0)
196154 func $f0_1 ($a,$i) = if (($i >= $s))
197155 then $a
198156 else adder($a, $l[$i])
199157
200158 func $f0_2 ($a,$i) = if (($i >= $s))
201159 then $a
202160 else throw("List size exceeds 6")
203161
204162 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
205163 }
206164 let newPack = makeString([currentPack[bpIdxLevel], makeString(merged._2, "_"), currentPack[bpIdxMat], currentPack[bpIdxProd]], ":")
207165 let result = asString(invoke(stakingContract, "updateBackpack", [duckAssetId, newPack], nil))
208166 $Tuple2((merged._1 :+ ScriptTransfer(i.caller, merged._3, usdnAssetId)), result)
209167 }
210168 }
211169 }
212170
213171
214172
215173 @Callable(i)
216174 func buyMaterials (amounts,maxPrices) = {
217175 let duckAssetId = valueOrErrorMessage(getString(stakingContract, keyStakedDuckByOwner(toString(i.caller))), "You don't have a duck staked")
218176 if ((size(i.payments) != 1))
219177 then throw("exactly 1 payment must be attached")
220178 else {
221179 let pmt = i.payments[0]
222180 let amt = pmt.amount
223181 let pmtAssetId = valueOrErrorMessage(pmt.assetId, "WAVES can't be used as payment")
224182 if ((pmtAssetId != usdnAssetId))
225183 then throw("USDN payments only!")
226184 else {
227185 let curLocation = split(valueOrElse(getString(stakingContract, keyDuckLocation(duckAssetId)), DEFAULTLOCATION), "_")
228186 if ((curLocation[locIdxType] != "F"))
229187 then throw(("Duck location type should be Factory, but is " + curLocation[locIdxType]))
230188 else {
231189 let locId = curLocation[locIdxId]
232190 let currentPack = getBackpack(keyBackpackByDuck(duckAssetId))
233191 let matList = split(currentPack[bpIdxMat], "_")
234192 func mUpdater (acc,j) = if ((0 > amounts[j]))
235193 then throw(((("You tried to buy negative amount of " + matTypes[j]) + ": ") + toString(amounts[j])))
236194 else if ((amounts[j] > 0))
237195 then {
238196 let b = buyInternal(locId, j, amounts[j], maxPrices[j])
239197 $Tuple3((acc._1 :+ b._1), (acc._2 :+ toString((parseIntValue(matList[j]) + b._3))), (acc._3 + b._2))
240198 }
241199 else $Tuple3(acc._1, (acc._2 :+ matList[j]), acc._3)
242200
243201 let merged = {
244202 let $l = [0, 1, 2, 3, 4, 5]
245203 let $s = size($l)
246204 let $acc0 = $Tuple3(nil, nil, 0)
247205 func $f0_1 ($a,$i) = if (($i >= $s))
248206 then $a
249207 else mUpdater($a, $l[$i])
250208
251209 func $f0_2 ($a,$i) = if (($i >= $s))
252210 then $a
253211 else throw("List size exceeds 6")
254212
255213 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
256214 }
257215 if ((merged._3 > amt))
258216 then throw(((("Insufficient payment! Attached=" + toString(amt)) + ", required=") + toString(merged._3)))
259217 else {
260218 let newPack = makeString([currentPack[bpIdxLevel], currentPack[bpIdxRes], makeString(merged._2, "_"), currentPack[bpIdxProd]], ":")
261219 let result = asString(invoke(stakingContract, "updateBackpack", [duckAssetId, newPack], nil))
262220 let rest = if (((amt - merged._3) > 0))
263221 then [ScriptTransfer(i.caller, (amt - merged._3), usdnAssetId)]
264222 else nil
265223 $Tuple2((merged._1 ++ rest), result)
266224 }
267225 }
268226 }
269227 }
270228 }
271229
272230

github/deemru/w8io/873ac7e 
45.68 ms