tx · 9vVcraNaAcbrA8GaUbMps37NyWrXPZUgjBiRDx7N37Vf

3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy:  -0.01200000 Waves

2023.07.05 22:47 [2653052] smart account 3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy > SELF 0.00000000 Waves

{ "type": 13, "id": "9vVcraNaAcbrA8GaUbMps37NyWrXPZUgjBiRDx7N37Vf", "fee": 1200000, "feeAssetId": null, "timestamp": 1688586453344, "version": 2, "chainId": 84, "sender": "3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy", "senderPublicKey": "FsR18761ZAsUqsTd7TK3XmR6bhihs1UXVmpHYxz5JzQ1", "proofs": [ "3XmsH3mQFTkKhecFyB4zATweY1jqptS9dbwGxeNtZRVuGsFqM8o3ms2rh7br92Ku8NS4sYbTsCRe2o2j5scGuu6c" ], "script": "base64:BgIgCAISBgoECAgICBIDCgEBEgMKAQESABIDCgEIEgMKAQhHAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAALSWR4RWZmVG90YWwAAAAKSWR4RWZmVXNlcgABAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAMDPJAMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAOTUlOU0hPUFBBWU1FTlQAoI0GAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdQdXp6bGVQb29sRGFwcAAFAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwABJwdXp6bGVQb29sQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdQdXp6bGVQb29sRGFwcAALcmVjTGFuZFNpemUAAQERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIAEndsZ0lzc3VlZEFtb3VudEtleQIQd2xnX2lzc3VlZEFtb3VudAANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQITTm90IGluaXRpYWxpemVkIHlldAAMaWR4V2xnQW1vdW50AAAAC2lkeFdsZ1ByaWNlAAEAC2lkeFdsZ0Z1bmRzAAIBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQEOZ2V0Vm90aW5nUG93ZXIBEnVzZXJBZGRyU3RyT3JFbXB0eQQFcHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCgEFYWRkZXICA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0ECnRvdGFsUG93ZXIKAAIkbAUFcHJvcHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp1c2Vyc1Bvd2VyAwkAAAIFEnVzZXJBZGRyU3RyT3JFbXB0eQIAAAAECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkB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b250cmFjdAULdXNkdEFzc2V0SWQECXB1enpsZVVzZAkA8AcCBRJwdXp6bGVQb29sQ29udHJhY3QFC3VzZHRBc3NldElkBA10b3RhbEZ1bmRzVXNkCQBkAgkAZAIFCmVjb25vbXlVc2QFB3Jlc3RVc2QFBndsZ1VzZAkAzAgCBQxpc3N1ZWRBbW91bnQJAMwIAgkAawMFDXRvdGFsRnVuZHNVc2QFBU1VTFQ4BQxpc3N1ZWRBbW91bnQJAMwIAgUNdG90YWxGdW5kc1VzZAkAzAgCBQplY29ub215VXNkCQDMCAIFB3Jlc3RVc2QJAMwIAgUGd2xnVXNkCQDMCAIFCXB1enpsZVVzZAUDbmlsAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04JAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cACE1JTExJT042AICA6YOx3hYADk1BUktFVElOR1NIQVJFAKCNBgAJVEVBTVNIQVJFAMCaDAANQUNUSVZJVFlTSEFSRQCgjQYAC1BMQVlFUlNIQVJFAIC1GAAKWUVBUk1JTExJUwCAhuvHdQAKV0VFS01JTExJUwCAiLKgAgAJTUFYUEVSSU9EAJwBAAJBNgCAwtcvAAJCOACA4esXAA93bGdJc3N1ZVRpbWVLZXkCDXdsZ19pc3N1ZVRpbWUAEG1hcmtldGluZ0FkZHJLZXkCDW1hcmtldGluZ0FkZHIAC3RlYW1BZGRyS2V5Agh0ZWFtQWRkcgANcHJvZml0QWRkcktleQIKcHJvZml0QWRkcgAUbGFzdE1hcmtldGluZ1RpbWVLZXkCGWxhc3RDbGFpbWVkVGltZV9tYXJrZXRpbmcAFm1hcmtldGluZ0Ftb3VudExlZnRLZXkCE21hcmtldGluZ0Ftb3VudExlZnQAD2xhc3RUZWFtVGltZUtleQIUbGFzdENsYWltZWRUaW1lX3RlYW0AFWxhc3RBY3Rpdml0aWVzVGltZUtleQIabGFzdENsYWltZWRUaW1lX2FjdGl2aXRpZXMBGGtleUxhc3RDbGFpbWVkVGltZUJ5VXNlcgEEYWRkcgkArAICAhRsYXN0Q2xhaW1lZFRpbWVVc2VyXwUEYWRkcgEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAUc3Rha2Vyc0Ftb3VudExlZnRLZXkCEXN0YWtlcnNBbW91bnRMZWZ0ABlzdGFrZXJzQW1vdW50UGFpZFRvdGFsS2V5AhZzdGFrZXJzQW1vdW50UGFpZFRvdGFsARhrZXlTdGFrZXJzQW1vdW50UGFpZFVzZXIBBGFkZHIJAKwCAgIWc3Rha2Vyc0Ftb3VudFBhaWRVc2VyXwUEYWRkcgEGcHJvbG9nAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQxnZXRTd2FwTGltaXQBBGFkZHIECGxhc3RUaW1lCQELdmFsdWVPckVsc2UCCQCfCAEJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAGYCBQ5hcmJpdHJhZ2VEZWxheQkAZQIFA25vdwUIbGFzdFRpbWUJAAIBCQCsAgIJAKwCAgIfQXJiaXRyYWdlcyBhcmUgcG9zc2libGUgb25jZSBhIAkApAMBCQBpAgUOYXJiaXRyYWdlRGVsYXkA4NQDAgNtaW4EBnBpZWNlcwkAkQMCCQEOZ2V0Vm90aW5nUG93ZXIBBQRhZGRyBQpJZHhFZmZVc2VyBARwb3c4CQBsBgUGcGllY2VzAAAFAkI4AAgACAUHQ0VJTElORwkAawMFAkE2BQRwb3c4BQVNVUxUOAENY2xhaW1JbnRlcm5hbAEEYWRkcgQGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlpc3N1ZVRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQ93bGdJc3N1ZVRpbWVLZXkCD05vdCBpbml0aWFsaXplZAQObWFya2V0aW5nVG90YWwJAGsDBQhNSUxMSU9ONgUOTUFSS0VUSU5HU0hBUkUFBU1VTFQ2BBNtYXJrZXRpbmdBbW91bnRMZWZ0CQELdmFsdWVPckVsc2UCCQCfCAEFFm1hcmtldGluZ0Ftb3VudExlZnRLZXkFDm1hcmtldGluZ1RvdGFsBBFsYXN0TWFya2V0aW5nVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRsYXN0TWFya2V0aW5nVGltZUtleQUJaXNzdWVUaW1lBA1tYXJrZXRpbmdBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEFEG1hcmtldGluZ0FkZHJLZXkED21hcmtldGluZ0Ftb3VudAkAlwMBCQDMCAIJAGsDBQ5tYXJrZXRpbmdUb3RhbAkAZQIFA25vdwURbGFzdE1hcmtldGluZ1RpbWUFCllFQVJNSUxMSVMJAMwIAgUTbWFya2V0aW5nQW1vdW50TGVmdAUDbmlsBAxsYXN0VGVhbVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPbGFzdFRlYW1UaW1lS2V5BQlpc3N1ZVRpbWUECHRlYW1BZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEFC3RlYW1BZGRyS2V5BAp0ZWFtQW1vdW50CQBrAwkAawMFCE1JTExJT042BQlURUFNU0hBUkUFBU1VTFQ2CQBlAgUDbm93BQxsYXN0VGVhbVRpbWUJAGgCAAMFCllFQVJNSUxMSVMEEmxhc3RBY3Rpdml0aWVzVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVsYXN0QWN0aXZpdGllc1RpbWVLZXkFCWlzc3VlVGltZQQJYWN0QW1vdW50CQBrAwkAawMFCE1JTExJT042BQ1BQ1RJVklUWVNIQVJFBQVNVUxUNgkAZQIFA25vdwUSbGFzdEFjdGl2aXRpZXNUaW1lCQBoAgADBQpZRUFSTUlMTElTBAljdXJQZXJpb2QJAGkCCQBlAgUDbm93BQlpc3N1ZVRpbWUFCldFRUtNSUxMSVMDCQBmAgUJY3VyUGVyaW9kCQBpAgUJTUFYUEVSSU9EAAIJAAIBAj1QbGVhc2UgbW9kaWZ5IGNvbnRyYWN0IGZvciBuZXh0IDEuNSB5ZWFycywgYWNjb3JkaW5nIHRvIHN0YXRzBANlZmYJAQ5nZXRWb3RpbmdQb3dlcgEFBGFkZHIEC3RvdGFsUGllY2VzCQCRAwIFA2VmZgULSWR4RWZmVG90YWwED2Ftb3VudExlZnRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRRzdGFrZXJzQW1vdW50TGVmdEtleQAABBVjdXJQZXJpb2REaXN0cmlidXRpb24JAGsDBQ9hbW91bnRMZWZ0VG90YWwJAGgCAAIFC3RvdGFsUGllY2VzCQBkAgULdG90YWxQaWVjZXMJAGgCCQCWAwEJAMwIAgCgjQYJAMwIAgULdG90YWxQaWVjZXMFA25pbAkAZQIFCU1BWFBFUklPRAUJY3VyUGVyaW9kBAt1c2VyVGltZUtleQkBGGtleUxhc3RDbGFpbWVkVGltZUJ5VXNlcgEFBGFkZHIEDGxhc3RVc2VyVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQt1c2VyVGltZUtleQUJaXNzdWVUaW1lBAp1c2VyQW1vdW50CQBrAwkAawMFFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkAkQMCBQNlZmYFCklkeEVmZlVzZXIFC3RvdGFsUGllY2VzCQBlAgUDbm93BQxsYXN0VXNlclRpbWUJAGgCAAMFCllFQVJNSUxMSVMEB3VzZXJLZXkJARhrZXlTdGFrZXJzQW1vdW50UGFpZFVzZXIBBQRhZGRyCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUNbWFya2V0aW5nQWRkcgUPbWFya2V0aW5nQW1vdW50BQp3bGdBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHRlYW1BZGRyBQp0ZWFtQW1vdW50BQp3bGdBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUJYWN0QW1vdW50BQp3bGdBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUKdXNlckFtb3VudAUKd2xnQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdXNlcktleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdXNlcktleQAABQp1c2VyQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlzdGFrZXJzQW1vdW50UGFpZFRvdGFsS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRlzdGFrZXJzQW1vdW50UGFpZFRvdGFsS2V5AAAFCnVzZXJBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlcnNBbW91bnRMZWZ0S2V5CQBlAgUPYW1vdW50TGVmdFRvdGFsBQp1c2VyQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZtYXJrZXRpbmdBbW91bnRMZWZ0S2V5CQBlAgUTbWFya2V0aW5nQW1vdW50TGVmdAUPbWFya2V0aW5nQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRsYXN0TWFya2V0aW5nVGltZUtleQUDbm93CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9sYXN0VGVhbVRpbWVLZXkFA25vdwkAzAgCCQEMSW50ZWdlckVudHJ5AgUVbGFzdEFjdGl2aXRpZXNUaW1lS2V5BQNub3cJAMwIAgkBDEludGVnZXJFbnRyeQIFC3VzZXJUaW1lS2V5BQNub3cFA25pbAUKdXNlckFtb3VudAYBaQENY29uc3RydWN0b3JWMQQIcmVzdEFkZHINbWFya2V0aW5nQWRkcgh0ZWFtQWRkcgpwcm9maXRBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQDCQEJaXNEZWZpbmVkAQkAoQgBBQ13bGdBc3NldElkS2V5CQACAQITQWxyZWFkeSBpbml0aWFsaXplZAQMaXNzdWVkQW1vdW50BQhNSUxMSU9ONgQFaXNzdWUJAMMIBwIGV0xHT0xEAiBXYXZlc0xhbmRzIEdvbGQgaW52ZXN0bWVudCB0b2tlbgUMaXNzdWVkQW1vdW50AAgGBQR1bml0AAAEB2Fzc2V0SWQJALgIAQUFaXNzdWUJAMwIAgUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFD3dsZ0lzc3VlVGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIFEndsZ0lzc3VlZEFtb3VudEtleQUMaXNzdWVkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlzdGFrZXJzQW1vdW50UGFpZFRvdGFsS2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFFHN0YWtlcnNBbW91bnRMZWZ0S2V5CQBrAwUITUlMTElPTjYFC1BMQVlFUlNIQVJFBQVNVUxUNgkAzAgCCQELQmluYXJ5RW50cnkCBQ13bGdBc3NldElkS2V5BQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFEG1hcmtldGluZ0FkZHJLZXkFDW1hcmtldGluZ0FkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgULdGVhbUFkZHJLZXkFCHRlYW1BZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDXByb2ZpdEFkZHJLZXkFCnByb2ZpdEFkZHIFA25pbAFpAQZidXlXbGcBCW1pbkFtb3VudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAd1c2R0QW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQGY2FsbGVyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUGY2FsbGVyBAdtYXhVc2R0CQEMZ2V0U3dhcExpbWl0AQUEYWRkcgMJAGYCBQd1c2R0QW10BQdtYXhVc2R0CQACAQkArAICCQCsAgICEllvdSBjYW4gc3BlbmQgbWF4IAkBCmZpeGVkUG9pbnQCBQdtYXhVc2R0AAYCBSBVU0RUAwkAZgIFDk1JTlNIT1BQQVlNRU5UBQd1c2R0QW10CQACAQkArAICCQCsAgICEllvdSBjYW4gdHJhZGUgbWluIAkBCmZpeGVkUG9pbnQCBQ5NSU5TSE9QUEFZTUVOVAAGAgUgVVNEVAQIY3VyU3RhdHMJAQtnZXRXbGdTdGF0cwAEDGN1cldsZ0Ftb3VudAkAkQMCBQhjdXJTdGF0cwUMaWR4V2xnQW1vdW50BAtvbGRGdW5kc1VzZAkAZQIJAJEDAgUIY3VyU3RhdHMFC2lkeFdsZ0Z1bmRzBQd1c2R0QW10BAh3bGdQcmljZQkAawMFC29sZEZ1bmRzVXNkBQVNVUxUOAUMY3VyV2xnQW1vdW50BAhidXlQcmljZQkAawMFCHdsZ1ByaWNlAAYABQQJd2xnQW1vdW50CQBrAwUHdXNkdEFtdAUFTVVMVDgFCGJ1eVByaWNlAwkAZgIFCW1pbkFtb3VudAUJd2xnQW1vdW50CQACAQIwUHJpY2UgY2hhbmdlZCBkdXJpbmcgb3BlcmF0aW9uLCBwbGVhc2UgdHJ5IGFnYWluBAxwcm9maXRBbW91bnQJAGkCBQd1c2R0QW10AAYECmRlbHRhRnVuZHMJAGUCBQd1c2R0QW10BQxwcm9maXRBbW91bnQECHJlaXNzdWVkCQBrAwUMY3VyV2xnQW1vdW50BQpkZWx0YUZ1bmRzBQtvbGRGdW5kc1VzZAkAlAoCCQDMCAIJAQdSZWlzc3VlAwUKd2xnQXNzZXRJZAUIcmVpc3N1ZWQGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ3bGdJc3N1ZWRBbW91bnRLZXkJAGQCBQxjdXJXbGdBbW91bnQFCHJlaXNzdWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEFDXByb2ZpdEFkZHJLZXkFDHByb2ZpdEFtb3VudAULdXNkdEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQl3bGdBbW91bnQFCndsZ0Fzc2V0SWQFA25pbAUMcHJvbG9nUmVzdWx0AWkBB3NlbGxXbGcBCW1pbkFtb3VudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAUKd2xnQXNzZXRJZAkAAgECFVdMR09MRCBwYXltZW50cyBvbmx5IQQGY2FsbGVyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUGY2FsbGVyBAdtYXhVc2R0CQEMZ2V0U3dhcExpbWl0AQUEYWRkcgQIY3VyU3RhdHMJAQtnZXRXbGdTdGF0cwAEDGN1cldsZ0Ftb3VudAkAkQMCBQhjdXJTdGF0cwUMaWR4V2xnQW1vdW50BAlzZWxsUHJpY2UJAGsDCQCRAwIFCGN1clN0YXRzBQtpZHhXbGdQcmljZQAEAAUEB3VzZHRBbXQJAGsDBQZ3bGdBbXQFCXNlbGxQcmljZQUFTVVMVDgDCQBmAgUHdXNkdEFtdAUHbWF4VXNkdAkAAgEJAKwCAgkArAICAhBZb3UgY2FuIGdldCBtYXggCQEKZml4ZWRQb2ludAIFB21heFVzZHQABgIFIFVTRFQDCQBmAgUOTUlOU0hPUFBBWU1FTlQFB3VzZHRBbXQJAAIBCQCsAgIJAKwCAgISWW91IGNhbiB0cmFkZSBtaW4gCQEKZml4ZWRQb2ludAIFDk1JTlNIT1BQQVlNRU5UAAYCBSBVU0RUAwkAZgIFCW1pbkFtb3VudAUHdXNkdEFtdAkAAgECMFByaWNlIGNoYW5nZWQgZHVyaW5nIG9wZXJhdGlvbiwgcGxlYXNlIHRyeSBhZ2FpbgQMcHJvZml0QW1vdW50CQBpAgUHdXNkdEFtdAAEBAZidXJuZWQJAGsDCQBkAgUHdXNkdEFtdAUMcHJvZml0QW1vdW50BQxjdXJXbGdBbW91bnQJAJEDAgUIY3VyU3RhdHMFC2lkeFdsZ0Z1bmRzCQCUCgIJAMwIAgkBBEJ1cm4CBQp3bGdBc3NldElkBQZidXJuZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEndsZ0lzc3VlZEFtb3VudEtleQkAZQIFDGN1cldsZ0Ftb3VudAUGYnVybmVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEFDXByb2ZpdEFkZHJLZXkFDHByb2ZpdEFtb3VudAULdXNkdEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQd1c2R0QW10BQt1c2R0QXNzZXRJZAUDbmlsBQxwcm9sb2dSZXN1bHQBaQEFY2xhaW0ABAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAdhY3Rpb25zCAkBDWNsYWltSW50ZXJuYWwBCQClCAEIBQFpBmNhbGxlcgJfMQkAlAoCBQdhY3Rpb25zBQxwcm9sb2dSZXN1bHQBaQELb25TdGFrZUxhbmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQENY2xhaW1JbnRlcm5hbAEFBGFkZHIBaQENb25VbnN0YWtlTGFuZAEEYWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAQ1jbGFpbUludGVybmFsAQUEYWRkcgD7C26A", "height": 2653052, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6csyRHykhTHwkEVvRH573VLHdhuuuFSQkC8wsP9bxiUv Next: 8FmLnyMLph6quQh1kge8Q6TKbb9G4Ra7NkPyjnk3dpy Diff:
OldNewDifferences
270270 let caller = addressFromStringValue(addr)
271271 let now = lastBlock.timestamp
272272 let issueTime = valueOrErrorMessage(getInteger(wlgIssueTimeKey), "Not initialized")
273- let marketingAmountLeft = valueOrElse(getInteger(marketingAmountLeftKey), 0)
273+ let marketingTotal = fraction(MILLION6, MARKETINGSHARE, MULT6)
274+ let marketingAmountLeft = valueOrElse(getInteger(marketingAmountLeftKey), marketingTotal)
274275 let lastMarketingTime = valueOrElse(getInteger(lastMarketingTimeKey), issueTime)
275276 let marketingAddr = addressFromStringValue(value(getString(marketingAddrKey)))
276- let marketingAmount = min([fraction(fraction(MILLION6, MARKETINGSHARE, MULT6), (now - lastMarketingTime), YEARMILLIS), marketingAmountLeft])
277+ let marketingAmount = min([fraction(marketingTotal, (now - lastMarketingTime), YEARMILLIS), marketingAmountLeft])
277278 let lastTeamTime = valueOrElse(getInteger(lastTeamTimeKey), issueTime)
278279 let teamAddr = addressFromStringValue(value(getString(teamAddrKey)))
279280 let teamAmount = fraction(fraction(MILLION6, TEAMSHARE, MULT6), (now - lastTeamTime), (3 * YEARMILLIS))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyBlocked () = "contractsBlocked"
55
66
77 let IdxEffTotal = 0
88
99 let IdxEffUser = 1
1010
1111 let chain = take(drop(this.bytes, 1), 1)
1212
1313 let usdtAssetId = match chain {
1414 case _ =>
1515 if ((base58'2W' == $match0))
1616 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1717 else if ((base58'2T' == $match0))
1818 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1919 else throw("Unknown chain")
2020 }
2121
2222 let defaultRestAddressStr = match chain {
2323 case _ =>
2424 if ((base58'2W' == $match0))
2525 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2626 else if ((base58'2T' == $match0))
2727 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2828 else throw("Unknown chain")
2929 }
3030
3131 let arbitrageDelay = match chain {
3232 case _ =>
3333 if ((base58'2W' == $match0))
3434 then 600000
3535 else if ((base58'2T' == $match0))
3636 then 60000
3737 else throw("Unknown chain")
3838 }
3939
4040 let SEP = "__"
4141
4242 let MULT6 = 1000000
4343
4444 let MULT8 = 100000000
4545
4646 let SSIZE = 25
4747
4848 let MSIZE = 100
4949
5050 let LSIZE = 225
5151
5252 let XLSIZE = 400
5353
5454 let XXLSIZE = 625
5555
5656 let MINSHOPPAYMENT = 100000
5757
5858 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
5959
6060
6161 let IdxCfgStakingDapp = 1
6262
6363 let IdxCfgEconomyDapp = 2
6464
6565 let IdxCfgWlgDapp = 4
6666
6767 let IdxCfgPuzzlePoolDapp = 5
6868
6969 func keyRestCfg () = "%s__restConfig"
7070
7171
7272 func keyRestAddress () = "%s__restAddr"
7373
7474
7575 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
7676
7777
7878 func getContractAddressOrFail (restCfg,idx) = valueOrErrorMessage(addressFromString(restCfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
7979
8080
8181 let restContract = addressFromStringValue(valueOrElse(getString(this, keyRestAddress()), defaultRestAddressStr))
8282
8383 let restCfg = readRestCfgOrFail(restContract)
8484
8585 let stakingContract = getContractAddressOrFail(restCfg, IdxCfgStakingDapp)
8686
8787 let economyContract = getContractAddressOrFail(restCfg, IdxCfgEconomyDapp)
8888
8989 let wlgContract = getContractAddressOrFail(restCfg, IdxCfgWlgDapp)
9090
9191 let puzzlePoolContract = getContractAddressOrFail(restCfg, IdxCfgPuzzlePoolDapp)
9292
9393 let recLandSize = 1
9494
9595 func keyResProportions () = "resTypesProportions"
9696
9797
9898 func keyStakedLandsByOwner (ownerAddr) = ("stakedLandsByOwner_" + ownerAddr)
9999
100100
101101 let wlgIssuedAmountKey = "wlg_issuedAmount"
102102
103103 let wlgAssetIdKey = "wlg_assetId"
104104
105105 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "Not initialized yet")
106106
107107 let idxWlgAmount = 0
108108
109109 let idxWlgPrice = 1
110110
111111 let idxWlgFunds = 2
112112
113113 func asInt (v) = match v {
114114 case n: Int =>
115115 n
116116 case _ =>
117117 throw("fail to cast into Int")
118118 }
119119
120120
121121 func numPiecesBySize (landSize) = match landSize {
122122 case _ =>
123123 if (("S" == $match0))
124124 then SSIZE
125125 else if (("M" == $match0))
126126 then MSIZE
127127 else if (("L" == $match0))
128128 then LSIZE
129129 else if (("XL" == $match0))
130130 then XLSIZE
131131 else if (("XXL" == $match0))
132132 then XXLSIZE
133133 else throw("Unknown land size")
134134 }
135135
136136
137137 func getVotingPower (userAddrStrOrEmpty) = {
138138 let props = split(valueOrElse(getString(stakingContract, keyResProportions()), "0_0_0_0_0_0"), "_")
139139 func adder (acc,item) = (acc + parseIntValue(item))
140140
141141 let totalPower = {
142142 let $l = props
143143 let $s = size($l)
144144 let $acc0 = 0
145145 func $f0_1 ($a,$i) = if (($i >= $s))
146146 then $a
147147 else adder($a, $l[$i])
148148
149149 func $f0_2 ($a,$i) = if (($i >= $s))
150150 then $a
151151 else throw("List size exceeds 6")
152152
153153 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6)
154154 }
155155 let usersPower = if ((userAddrStrOrEmpty == ""))
156156 then 0
157157 else {
158158 let landsStr = getString(stakingContract, keyStakedLandsByOwner(userAddrStrOrEmpty))
159159 let lands = if (isDefined(landsStr))
160160 then split_51C(value(landsStr), "_")
161161 else nil
162162 func oneLand (acc,landAssetId) = {
163163 let asset = value(assetInfo(fromBase58String(landAssetId)))
164164 let landSize = split(asset.description, "_")[recLandSize]
165165 (acc + numPiecesBySize(landSize))
166166 }
167167
168168 let $l = lands
169169 let $s = size($l)
170170 let $acc0 = 0
171171 func $f1_1 ($a,$i) = if (($i >= $s))
172172 then $a
173173 else oneLand($a, $l[$i])
174174
175175 func $f1_2 ($a,$i) = if (($i >= $s))
176176 then $a
177177 else throw("List size exceeds 100")
178178
179179 $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)
180180 }
181181 [totalPower, usersPower]
182182 }
183183
184184
185185 func getWlgStats () = {
186186 let issuedAmount = valueOrErrorMessage(getInteger(wlgContract, wlgIssuedAmountKey), "WLGOLD is not issued yet")
187187 let economyUsd = assetBalance(economyContract, usdtAssetId)
188188 let restUsd = assetBalance(restContract, usdtAssetId)
189189 let wlgUsd = assetBalance(wlgContract, usdtAssetId)
190190 let puzzleUsd = assetBalance(puzzlePoolContract, usdtAssetId)
191191 let totalFundsUsd = ((economyUsd + restUsd) + wlgUsd)
192192 [issuedAmount, fraction(totalFundsUsd, MULT8, issuedAmount), totalFundsUsd, economyUsd, restUsd, wlgUsd, puzzleUsd]
193193 }
194194
195195
196196 func fixedPoint (val,decimals) = {
197197 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
198198 ((toString((val / tenPow)) + ".") + toString((val % tenPow)))
199199 }
200200
201201
202202 let MILLION6 = 100000000000000
203203
204204 let MARKETINGSHARE = 100000
205205
206206 let TEAMSHARE = 200000
207207
208208 let ACTIVITYSHARE = 100000
209209
210210 let PLAYERSHARE = 400000
211211
212212 let YEARMILLIS = 31557600000
213213
214214 let WEEKMILLIS = 604800000
215215
216216 let MAXPERIOD = 156
217217
218218 let A6 = 100000000
219219
220220 let B8 = 50000000
221221
222222 let wlgIssueTimeKey = "wlg_issueTime"
223223
224224 let marketingAddrKey = "marketingAddr"
225225
226226 let teamAddrKey = "teamAddr"
227227
228228 let profitAddrKey = "profitAddr"
229229
230230 let lastMarketingTimeKey = "lastClaimedTime_marketing"
231231
232232 let marketingAmountLeftKey = "marketingAmountLeft"
233233
234234 let lastTeamTimeKey = "lastClaimedTime_team"
235235
236236 let lastActivitiesTimeKey = "lastClaimedTime_activities"
237237
238238 func keyLastClaimedTimeByUser (addr) = ("lastClaimedTimeUser_" + addr)
239239
240240
241241 func keyLastArbTimeByUser (addr) = ("lastArbTimeUser_" + addr)
242242
243243
244244 let stakersAmountLeftKey = "stakersAmountLeft"
245245
246246 let stakersAmountPaidTotalKey = "stakersAmountPaidTotal"
247247
248248 func keyStakersAmountPaidUser (addr) = ("stakersAmountPaidUser_" + addr)
249249
250250
251251 func prolog () = if (valueOrElse(getBoolean(stakingContract, keyBlocked()), false))
252252 then throw("Contracts are under maintenance")
253253 else asInt(invoke(stakingContract, "saveLastTx", nil, nil))
254254
255255
256256 func getSwapLimit (addr) = {
257257 let lastTime = valueOrElse(getInteger(keyLastArbTimeByUser(addr)), 0)
258258 let now = lastBlock.timestamp
259259 if ((arbitrageDelay > (now - lastTime)))
260260 then throw((("Arbitrages are possible once a " + toString((arbitrageDelay / 60000))) + "min"))
261261 else {
262262 let pieces = getVotingPower(addr)[IdxEffUser]
263263 let pow8 = pow(pieces, 0, B8, 8, 8, CEILING)
264264 fraction(A6, pow8, MULT8)
265265 }
266266 }
267267
268268
269269 func claimInternal (addr) = {
270270 let caller = addressFromStringValue(addr)
271271 let now = lastBlock.timestamp
272272 let issueTime = valueOrErrorMessage(getInteger(wlgIssueTimeKey), "Not initialized")
273- let marketingAmountLeft = valueOrElse(getInteger(marketingAmountLeftKey), 0)
273+ let marketingTotal = fraction(MILLION6, MARKETINGSHARE, MULT6)
274+ let marketingAmountLeft = valueOrElse(getInteger(marketingAmountLeftKey), marketingTotal)
274275 let lastMarketingTime = valueOrElse(getInteger(lastMarketingTimeKey), issueTime)
275276 let marketingAddr = addressFromStringValue(value(getString(marketingAddrKey)))
276- let marketingAmount = min([fraction(fraction(MILLION6, MARKETINGSHARE, MULT6), (now - lastMarketingTime), YEARMILLIS), marketingAmountLeft])
277+ let marketingAmount = min([fraction(marketingTotal, (now - lastMarketingTime), YEARMILLIS), marketingAmountLeft])
277278 let lastTeamTime = valueOrElse(getInteger(lastTeamTimeKey), issueTime)
278279 let teamAddr = addressFromStringValue(value(getString(teamAddrKey)))
279280 let teamAmount = fraction(fraction(MILLION6, TEAMSHARE, MULT6), (now - lastTeamTime), (3 * YEARMILLIS))
280281 let lastActivitiesTime = valueOrElse(getInteger(lastActivitiesTimeKey), issueTime)
281282 let actAmount = fraction(fraction(MILLION6, ACTIVITYSHARE, MULT6), (now - lastActivitiesTime), (3 * YEARMILLIS))
282283 let curPeriod = ((now - issueTime) / WEEKMILLIS)
283284 if ((curPeriod > (MAXPERIOD / 2)))
284285 then throw("Please modify contract for next 1.5 years, according to stats")
285286 else {
286287 let eff = getVotingPower(addr)
287288 let totalPieces = eff[IdxEffTotal]
288289 let amountLeftTotal = valueOrElse(getInteger(stakersAmountLeftKey), 0)
289290 let curPeriodDistribution = fraction(amountLeftTotal, (2 * totalPieces), (totalPieces + (max([100000, totalPieces]) * (MAXPERIOD - curPeriod))))
290291 let userTimeKey = keyLastClaimedTimeByUser(addr)
291292 let lastUserTime = valueOrElse(getInteger(userTimeKey), issueTime)
292293 let userAmount = fraction(fraction(curPeriodDistribution, eff[IdxEffUser], totalPieces), (now - lastUserTime), (3 * YEARMILLIS))
293294 let userKey = keyStakersAmountPaidUser(addr)
294295 $Tuple2([ScriptTransfer(marketingAddr, marketingAmount, wlgAssetId), ScriptTransfer(teamAddr, teamAmount, wlgAssetId), ScriptTransfer(restContract, actAmount, wlgAssetId), ScriptTransfer(caller, userAmount, wlgAssetId), IntegerEntry(userKey, (valueOrElse(getInteger(userKey), 0) + userAmount)), IntegerEntry(stakersAmountPaidTotalKey, (valueOrElse(getInteger(stakersAmountPaidTotalKey), 0) + userAmount)), IntegerEntry(stakersAmountLeftKey, (amountLeftTotal - userAmount)), IntegerEntry(marketingAmountLeftKey, (marketingAmountLeft - marketingAmount)), IntegerEntry(lastMarketingTimeKey, now), IntegerEntry(lastTeamTimeKey, now), IntegerEntry(lastActivitiesTimeKey, now), IntegerEntry(userTimeKey, now)], userAmount)
295296 }
296297 }
297298
298299
299300 @Callable(i)
300301 func constructorV1 (restAddr,marketingAddr,teamAddr,profitAddr) = if ((i.caller != this))
301302 then throw("Permission denied")
302303 else if (isDefined(getBinary(wlgAssetIdKey)))
303304 then throw("Already initialized")
304305 else {
305306 let issuedAmount = MILLION6
306307 let issue = Issue("WLGOLD", "WavesLands Gold investment token", issuedAmount, 8, true, unit, 0)
307308 let assetId = calculateAssetId(issue)
308309 [issue, IntegerEntry(wlgIssueTimeKey, lastBlock.timestamp), IntegerEntry(wlgIssuedAmountKey, issuedAmount), IntegerEntry(stakersAmountPaidTotalKey, 0), IntegerEntry(stakersAmountLeftKey, fraction(MILLION6, PLAYERSHARE, MULT6)), BinaryEntry(wlgAssetIdKey, assetId), StringEntry(keyRestAddress(), restAddr), StringEntry(marketingAddrKey, marketingAddr), StringEntry(teamAddrKey, teamAddr), StringEntry(profitAddrKey, profitAddr)]
309310 }
310311
311312
312313
313314 @Callable(i)
314315 func buyWlg (minAmount) = {
315316 let prologResult = prolog()
316317 if ((size(i.payments) != 1))
317318 then throw("exactly 1 payment must be attached")
318319 else {
319320 let pmt = i.payments[0]
320321 let usdtAmt = pmt.amount
321322 let pmtAssetId = valueOrErrorMessage(pmt.assetId, "WAVES can't be used as payment")
322323 if ((pmtAssetId != usdtAssetId))
323324 then throw("USDT payments only!")
324325 else {
325326 let caller = i.caller
326327 let addr = toString(caller)
327328 let maxUsdt = getSwapLimit(addr)
328329 if ((usdtAmt > maxUsdt))
329330 then throw((("You can spend max " + fixedPoint(maxUsdt, 6)) + " USDT"))
330331 else if ((MINSHOPPAYMENT > usdtAmt))
331332 then throw((("You can trade min " + fixedPoint(MINSHOPPAYMENT, 6)) + " USDT"))
332333 else {
333334 let curStats = getWlgStats()
334335 let curWlgAmount = curStats[idxWlgAmount]
335336 let oldFundsUsd = (curStats[idxWlgFunds] - usdtAmt)
336337 let wlgPrice = fraction(oldFundsUsd, MULT8, curWlgAmount)
337338 let buyPrice = fraction(wlgPrice, 6, 5)
338339 let wlgAmount = fraction(usdtAmt, MULT8, buyPrice)
339340 if ((minAmount > wlgAmount))
340341 then throw("Price changed during operation, please try again")
341342 else {
342343 let profitAmount = (usdtAmt / 6)
343344 let deltaFunds = (usdtAmt - profitAmount)
344345 let reissued = fraction(curWlgAmount, deltaFunds, oldFundsUsd)
345346 $Tuple2([Reissue(wlgAssetId, reissued, true), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount + reissued)), IntegerEntry(keyLastArbTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, wlgAmount, wlgAssetId)], prologResult)
346347 }
347348 }
348349 }
349350 }
350351 }
351352
352353
353354
354355 @Callable(i)
355356 func sellWlg (minAmount) = {
356357 let prologResult = prolog()
357358 if ((size(i.payments) != 1))
358359 then throw("exactly 1 payment must be attached")
359360 else {
360361 let pmt = i.payments[0]
361362 let wlgAmt = pmt.amount
362363 let pmtAssetId = valueOrErrorMessage(pmt.assetId, "WAVES can't be used as payment")
363364 if ((pmtAssetId != wlgAssetId))
364365 then throw("WLGOLD payments only!")
365366 else {
366367 let caller = i.caller
367368 let addr = toString(caller)
368369 let maxUsdt = getSwapLimit(addr)
369370 let curStats = getWlgStats()
370371 let curWlgAmount = curStats[idxWlgAmount]
371372 let sellPrice = fraction(curStats[idxWlgPrice], 4, 5)
372373 let usdtAmt = fraction(wlgAmt, sellPrice, MULT8)
373374 if ((usdtAmt > maxUsdt))
374375 then throw((("You can get max " + fixedPoint(maxUsdt, 6)) + " USDT"))
375376 else if ((MINSHOPPAYMENT > usdtAmt))
376377 then throw((("You can trade min " + fixedPoint(MINSHOPPAYMENT, 6)) + " USDT"))
377378 else if ((minAmount > usdtAmt))
378379 then throw("Price changed during operation, please try again")
379380 else {
380381 let profitAmount = (usdtAmt / 4)
381382 let burned = fraction((usdtAmt + profitAmount), curWlgAmount, curStats[idxWlgFunds])
382383 $Tuple2([Burn(wlgAssetId, burned), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount - burned)), IntegerEntry(keyLastArbTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, usdtAmt, usdtAssetId)], prologResult)
383384 }
384385 }
385386 }
386387 }
387388
388389
389390
390391 @Callable(i)
391392 func claim () = {
392393 let prologResult = prolog()
393394 let actions = claimInternal(toString(i.caller))._1
394395 $Tuple2(actions, prologResult)
395396 }
396397
397398
398399
399400 @Callable(i)
400401 func onStakeLand (addr) = if ((i.caller != stakingContract))
401402 then throw("Permission denied")
402403 else claimInternal(addr)
403404
404405
405406
406407 @Callable(i)
407408 func onUnstakeLand (addr) = if ((i.caller != stakingContract))
408409 then throw("Permission denied")
409410 else claimInternal(addr)
410411
411412

github/deemru/w8io/169f3d6 
79.68 ms