tx · FXb26Pv6teioqW9FFDbAUvLnz3dVykkrUj1zwCuwhn4k

3MuS6qVvhBR6wSynFRdcE3fVqmGBjoc7Hhx:  -0.01600000 Waves

2023.08.18 10:45 [2715759] smart account 3MuS6qVvhBR6wSynFRdcE3fVqmGBjoc7Hhx > SELF 0.00000000 Waves

{ "type": 13, "id": "FXb26Pv6teioqW9FFDbAUvLnz3dVykkrUj1zwCuwhn4k", "fee": 1600000, "feeAssetId": null, "timestamp": 1692344737378, "version": 1, "sender": "3MuS6qVvhBR6wSynFRdcE3fVqmGBjoc7Hhx", "senderPublicKey": "62CHk4MqTdq3LqeUycy7TPnpvwrjgerSa2FqAY2EafXn", "proofs": [ "2pAV6tCTg5o7htZfLh3rFfjJi1BjfyQFCeMbvxrKrn5rSttE3xLT8X5mAuRd2dxBQtGb4iNAZ1CQBipnLdXW42v" ], "script": "base64:BwKJAQgCEgQKAggIEgQKAggBEgQKAggEEgQKAggCEgMKAQgSAwoBARIDCgEBEgUKAwIBAhIFCgMCGBgSBAoCAgESBAoCAgESBgoEAQEBARIGCgQBAQEBEgASAwoBCBIDCgEYEgASABIDCgEIEgASBAoCCAgSBAoCCBgSBQoDCAgBEgUKAwICARIDCgEINwADU0VQAgJfXwAFV0FWRVMCBVdBVkVTABBjb250cmFjdEZpbGVuYW1lAgxmYWN0b3J5LnJpZGUBB3dyYXBFcnIBAXMJAKwCAgkArAICBRBjb250cmFjdEZpbGVuYW1lAgI6IAUBcwEIdGhyb3dFcnIBAXMJAAIBCQEHd3JhcEVycgEFAXMBD3N0cmluZ1RvQXNzZXRJZAEBcwMJAAACBQFzBQVXQVZFUwUEdW5pdAkA2QQBBQFzAA9BRE1JTl9MSVNUX1NJWkUABQAGUVVPUlVNAAMAEVRYSURfQllURVNfTEVOR1RIACABGGtleUFsbG93ZWRUeElkVm90ZVByZWZpeAEEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAglhbGxvd1R4SWQJAMwIAgUEdHhJZAUDbmlsBQNTRVABEGtleUZ1bGxBZG1pblZvdGUCBnByZWZpeAxhZG1pbkFkZHJlc3MJALkJAgkAzAgCBQZwcmVmaXgJAMwIAgUMYWRtaW5BZGRyZXNzBQNuaWwFA1NFUAETa2V5QWRtaW5BZGRyZXNzTGlzdAAJALkJAgkAzAgCAgIlcwkAzAgCAhBhZG1pbkFkZHJlc3NMaXN0BQNuaWwFA1NFUAEOa2V5QWxsb3dlZFR4SWQACQC5CQIJAMwIAgICJXMJAMwIAgIEdHhJZAUDbmlsBQNTRVABDGdldEFkbWluVm90ZQIGcHJlZml4BWFkbWluBAd2b3RlS2V5CQEQa2V5RnVsbEFkbWluVm90ZQIFBnByZWZpeAUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJ8IAQUHdm90ZUtleQAAAQ1nZXRBZG1pbnNMaXN0AAQHJG1hdGNoMAkAnQgCBQR0aGlzCQETa2V5QWRtaW5BZGRyZXNzTGlzdAADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQC1CQIFAXMFA1NFUAUDbmlsAQ1pc0luQWRtaW5MaXN0AQdhZGRyZXNzCQEPY29udGFpbnNFbGVtZW50AgkBDWdldEFkbWluc0xpc3QABQdhZGRyZXNzARJnZW5Wb3Rlc0tleXNIZWxwZXICAWEMYWRtaW5BZGRyZXNzBAskdDAxMzc1MTM5OQUBYQQGcmVzdWx0CAULJHQwMTM3NTEzOTkCXzEEBnByZWZpeAgFCyR0MDEzNzUxMzk5Al8yCQCUCgIJAM0IAgUGcmVzdWx0CQEQa2V5RnVsbEFkbWluVm90ZQIFBnByZWZpeAUMYWRtaW5BZGRyZXNzBQZwcmVmaXgBDGdlblZvdGVzS2V5cwEJa2V5UHJlZml4BAlhZG1pbkxpc3QJARNrZXlBZG1pbkFkZHJlc3NMaXN0AAQLJHQwMTU0NjE2MzAKAAIkbAkBDWdldEFkbWluc0xpc3QACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFCWtleVByZWZpeAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQESZ2VuVm90ZXNLZXlzSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQGcmVzdWx0CAULJHQwMTU0NjE2MzACXzEEBnByZWZpeAgFCyR0MDE1NDYxNjMwAl8yBQZyZXN1bHQBEGNvdW50Vm90ZXNIZWxwZXICBnJlc3VsdAd2b3RlS2V5CQBkAgUGcmVzdWx0CQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAEKY291bnRWb3RlcwEGcHJlZml4BAV2b3RlcwkBDGdlblZvdGVzS2V5cwEFBnByZWZpeAoAAiRsBQV2b3RlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQY291bnRWb3Rlc0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUBEGNsZWFyVm90ZXNIZWxwZXICBnJlc3VsdANrZXkJAM0IAgUGcmVzdWx0CQELRGVsZXRlRW50cnkBBQNrZXkBE2dldENsZWFyVm90ZUVudHJpZXMBBnByZWZpeAQFdm90ZXMJAQxnZW5Wb3Rlc0tleXMBBQZwcmVmaXgKAAIkbAUFdm90ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGNsZWFyVm90ZXNIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAQx2b3RlSU5URVJOQUwEE2NhbGxlckFkZHJlc3NTdHJpbmcJa2V5UHJlZml4CG1pblZvdGVzCnZvdGVSZXN1bHQEB3ZvdGVLZXkJARBrZXlGdWxsQWRtaW5Wb3RlAgUJa2V5UHJlZml4BRNjYWxsZXJBZGRyZXNzU3RyaW5nBBBhZG1pbkN1cnJlbnRWb3RlCQEMZ2V0QWRtaW5Wb3RlAgUJa2V5UHJlZml4BRNjYWxsZXJBZGRyZXNzU3RyaW5nBANlcnIDCQEBIQEJAQ1pc0luQWRtaW5MaXN0AQUTY2FsbGVyQWRkcmVzc1N0cmluZwkBCHRocm93RXJyAQkArAICCQCsAgICCUFkZHJlc3M6IAUTY2FsbGVyQWRkcmVzc1N0cmluZwISIG5vdCBpbiBBZG1pbiBsaXN0AwkAAAIFEGFkbWluQ3VycmVudFZvdGUAAQkBCHRocm93RXJyAQkArAICBQd2b3RlS2V5AhIgeW91IGFscmVhZHkgdm90ZWQFBHVuaXQDCQAAAgUDZXJyBQNlcnIEBXZvdGVzCQEKY291bnRWb3RlcwEFCWtleVByZWZpeAMJAGcCCQBkAgUFdm90ZXMAAQUIbWluVm90ZXMEEGNsZWFyVm90ZUVudHJpZXMJARNnZXRDbGVhclZvdGVFbnRyaWVzAQUJa2V5UHJlZml4CQDOCAIFEGNsZWFyVm90ZUVudHJpZXMFCnZvdGVSZXN1bHQJAMwIAgkBDEludGVnZXJFbnRyeQIFB3ZvdGVLZXkAAQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARRrZXlDYWxjdWxhdG9yQWRkcmVzcwACDiVzX19jYWxjdWxhdG9yARdrZXlQcm94eVRyZWFzdXJ5QWRkcmVzcwACESVzX19wcm94eVRyZWFzdXJ5ARdrZXlQb3dlckNvbnRyYWN0QWRkcmVzcwACESVzX19wb3dlckNvbnRyYWN0ARZrZXlTd2FwQ29udHJhY3RBZGRyZXNzAAIQJXNfX3N3YXBDb250cmFjdAEPa2V5Q2hpbGRBZGRyZXNzAAIJJXNfX2NoaWxkARhrZXlCbG9ja1Byb2Nlc3NpbmdSZXdhcmQAAhklc19fYmxvY2tQcm9jZXNzaW5nUmV3YXJkARVrZXlOZXh0QmxvY2tUb1Byb2Nlc3MAAhYlc19fbmV4dEJsb2NrVG9Qcm9jZXNzAQxrZXlMcEFzc2V0SWQAAg0lc19fbHBBc3NldElkABdjYWxjdWxhdG9yQWRkcmVzc09wdGlvbgQHJG1hdGNoMAkAnQgCBQR0aGlzCQEUa2V5Q2FsY3VsYXRvckFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUXY2FsY3VsYXRvckFkZHJlc3NPcHRpb24JAQd3cmFwRXJyAQIaaW52YWxpZCBjYWxjdWxhdG9yIGFkZHJlc3MAGnByb3h5VHJlYXN1cnlBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMJARdrZXlQcm94eVRyZWFzdXJ5QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABpwcm94eVRyZWFzdXJ5QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRpwcm94eVRyZWFzdXJ5QWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAh5pbnZhbGlkIHByb3h5IHRyZWFzdXJ5IGFkZHJlc3MAGnBvd2VyQ29udHJhY3RBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMJARdrZXlQb3dlckNvbnRyYWN0QWRkcmVzcwADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yABpwb3dlckNvbnRyYWN0QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRpwb3dlckNvbnRyYWN0QWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAh5pbnZhbGlkIHBvd2VyIGNvbnRyYWN0IGFkZHJlc3MAGXN3YXBDb250cmFjdEFkZHJlc3NPcHRpb24EByRtYXRjaDAJAJ0IAgUEdGhpcwkBFmtleVN3YXBDb250cmFjdEFkZHJlc3MAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkApggBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAZc3dhcENvbnRyYWN0QWRkcmVzc09yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRlzd2FwQ29udHJhY3RBZGRyZXNzT3B0aW9uCQEHd3JhcEVycgECHWludmFsaWQgc3dhcCBjb250cmFjdCBhZGRyZXNzARBrZXlDb25maWdBZGRyZXNzAAIKJXNfX2NvbmZpZwESa2V5Q2hpbGRyZW5BZGRyZXNzAAIRY29udHJhY3RfY2hpbGRyZW4BFmtleVZvdGluZ1Jlc3VsdEFkZHJlc3MAAhZjb250cmFjdF92b3RpbmdfcmVzdWx0ARlrZXlQcm9wb3NhbEFsbG93QnJvYWRjYXN0AgdhZGRyZXNzBHR4SWQJAKwCAgkArAICCQCsAgICGXByb3Bvc2FsX2FsbG93X2Jyb2FkY2FzdF8JAKUIAQUHYWRkcmVzcwIBXwkA2AQBBQR0eElkARFrZXlJbnZlc3RlZEJ5VXNlcgIMY2hpbGRBZGRyZXNzC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIaW52ZXN0b3IJAMwIAgkApQgBBQxjaGlsZEFkZHJlc3MJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwUDbmlsAgFfABNjb25maWdBZGRyZXNzT3B0aW9uBAckbWF0Y2gwCQCdCAIFBHRoaXMJARBrZXlDb25maWdBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAKYIAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAE2NvbmZpZ0FkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUTY29uZmlnQWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAhZpbnZhbGlkIGNvbmZpZyBhZGRyZXNzABl2b3RpbmdSZXN1bHRBZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRNjb25maWdBZGRyZXNzT3B0aW9uAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAEByRtYXRjaDEJAJ0IAgUBYQkBFmtleVZvdGluZ1Jlc3VsdEFkZHJlc3MAAwkAAQIFByRtYXRjaDECBlN0cmluZwQBcwUHJG1hdGNoMQkApggBBQFzAwkAAQIFByRtYXRjaDECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAGXZvdGluZ1Jlc3VsdEFkZHJlc3NPckZhaWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUZdm90aW5nUmVzdWx0QWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAh1pbnZhbGlkIHZvdGluZyByZXN1bHQgYWRkcmVzcwAVY2hpbGRyZW5BZGRyZXNzT3B0aW9uBAckbWF0Y2gwBRNjb25maWdBZGRyZXNzT3B0aW9uAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAEByRtYXRjaDEJAJ0IAgUBYQkBEmtleUNoaWxkcmVuQWRkcmVzcwADCQABAgUHJG1hdGNoMQIGU3RyaW5nBAFzBQckbWF0Y2gxCQCmCAEFAXMDCQABAgUHJG1hdGNoMQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgAVY2hpbGRyZW5BZGRyZXNzT3JGYWlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIFFWNoaWxkcmVuQWRkcmVzc09wdGlvbgkBB3dyYXBFcnIBAhhpbnZhbGlkIGNoaWxkcmVuIGFkZHJlc3MAD2xwQXNzZXRJZE9wdGlvbgQHJG1hdGNoMAkAnQgCBQR0aGlzCQEMa2V5THBBc3NldElkAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAD2xwQXNzZXRJZE9yRmFpbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQ9scEFzc2V0SWRPcHRpb24JAQd3cmFwRXJyAQIRaW52YWxpZCBscEFzc2V0SWQBC29ubHlBZGRyZXNzAgFpB2FkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQdhZGRyZXNzBgkBCHRocm93RXJyAQIRcGVybWlzc2lvbiBkZW5pZWQBCG9ubHlUaGlzAQFpCQELb25seUFkZHJlc3MCBQFpBQR0aGlzAQ5vbmx5Q2FsY3VsYXRvcgEBaQkBC29ubHlBZGRyZXNzAgUBaQUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwZAWkBC3N0cmluZ0VudHJ5AgNrZXkDdmFsAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwFA2tleQkAlAoCBQNuaWwFBHVuaXQBaQEMaW50ZWdlckVudHJ5AgNrZXkDdmFsAwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFA3ZhbAUDbmlsBQNrZXkJAJQKAgUDbmlsBQR1bml0AWkBDGJvb2xlYW5FbnRyeQIDa2V5A3ZhbAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUDa2V5BQN2YWwFA25pbAUDa2V5CQCUCgIFA25pbAUEdW5pdAFpAQtiaW5hcnlFbnRyeQIDa2V5A3ZhbAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgkAzAgCCQELQmluYXJ5RW50cnkCBQNrZXkFA3ZhbAUDbmlsBQNrZXkJAJQKAgUDbmlsBQR1bml0AWkBC2RlbGV0ZUVudHJ5AQNrZXkDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUDa2V5BQNuaWwFA2tleQkAlAoCBQNuaWwFBHVuaXQBaQEHcmVpc3N1ZQEGYW1vdW50AwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQdSZWlzc3VlAwUPbHBBc3NldElkT3JGYWlsBQZhbW91bnQGBQNuaWwFBmFtb3VudAkAlAoCBQNuaWwFBHVuaXQBaQEEYnVybgEGYW1vdW50AwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQRCdXJuAgUPbHBBc3NldElkT3JGYWlsBQZhbW91bnQFA25pbAUGYW1vdW50CQCUCgIFA25pbAUEdW5pdAFpAQ10cmFuc2ZlckFzc2V0Aw5yZWNpcGllbnRCeXRlcwZhbW91bnQHYXNzZXRJZAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFDnJlY2lwaWVudEJ5dGVzBQZhbW91bnQFB2Fzc2V0SWQFA25pbAUGYW1vdW50CQCUCgIFA25pbAUEdW5pdAFpAQ50cmFuc2ZlckFzc2V0cwMOcmVjaXBpZW50Qnl0ZXMKYXNzZXRzTGlzdAthbW91bnRzTGlzdAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkKAQ5hZGROZXdUcmFuc2ZlcgIDYWNjC25leHRBc3NldElkBAskdDA4MTE4ODE0MgUDYWNjBAl0cmFuc2ZlcnMIBQskdDA4MTE4ODE0MgJfMQQBaggFCyR0MDgxMTg4MTQyAl8yBAtuZXdUcmFuc2ZlcgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQ5yZWNpcGllbnRCeXRlcwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2Ftb3VudHNMaXN0BQFqCQEPc3RyaW5nVG9Bc3NldElkAQkAkQMCBQphc3NldHNMaXN0BQFqBBB1cGRhdGVkVHJhbnNmZXJzCQDNCAIFCXRyYW5zZmVycwULbmV3VHJhbnNmZXIJAJQKAgUQdXBkYXRlZFRyYW5zZmVycwkAZAIFAWoAAQQLJHQwODQwMjg0ODMKAAIkbAUKYXNzZXRzTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDmFkZE5ld1RyYW5zZmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBA9hc3NldHNUcmFuc2ZlcnMIBQskdDA4NDAyODQ4MwJfMQQKX2xhc3RJbmRleAgFCyR0MDg0MDI4NDgzAl8yCQCUCgIFD2Fzc2V0c1RyYW5zZmVycwUEdW5pdAkAlAoCBQNuaWwFBHVuaXQBaQENdHJhbnNmZXJXYXZlcwIOcmVjaXBpZW50Qnl0ZXMGYW1vdW50AwkBDm9ubHlDYWxjdWxhdG9yAQUBaQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUOcmVjaXBpZW50Qnl0ZXMFBmFtb3VudAUEdW5pdAUDbmlsBQZhbW91bnQJAJQKAgUDbmlsBQR1bml0AWkBGXRyYW5zZmVyRnJvbVByb3h5VHJlYXN1cnkCDnJlY2lwaWVudEJ5dGVzDXJld2FyZHNBbW91bnQDCQEOb25seUNhbGN1bGF0b3IBBQFpCQCUCgIFA25pbAkA/AcEBRpwcm94eVRyZWFzdXJ5QWRkcmVzc09yRmFpbAINdHJhbnNmZXJXYXZlcwkAzAgCBQ5yZWNpcGllbnRCeXRlcwkAzAgCBQ1yZXdhcmRzQW1vdW50BQNuaWwFA25pbAkAlAoCBQNuaWwFBHVuaXQBaQEIZmluYWxpemUEE2RvbmF0aW9uUGFydEluV2F2ZXMNbHBQYXJ0SW5XYXZlcxBjbGFpbVBhcnRJbldhdmVzFXBvd2VyU3Rha2VQYXJ0SW5XYXZlcwkAlAoCBQNuaWwJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwCCGZpbmFsaXplCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgUTZG9uYXRpb25QYXJ0SW5XYXZlcwkAzAgCBQ1scFBhcnRJbldhdmVzCQDMCAIFEGNsYWltUGFydEluV2F2ZXMJAMwIAgUVcG93ZXJTdGFrZVBhcnRJbldhdmVzBQNuaWwIBQFpCHBheW1lbnRzAWkBEGZpbmFsaXplUkVBRE9OTFkEE2RvbmF0aW9uUGFydEluV2F2ZXMNbHBQYXJ0SW5XYXZlcxBjbGFpbVBhcnRJbldhdmVzFXBvd2VyU3Rha2VQYXJ0SW5XYXZlcwkAlAoCBQNuaWwJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwCEGZpbmFsaXplUkVBRE9OTFkJAMwIAgUTZG9uYXRpb25QYXJ0SW5XYXZlcwkAzAgCBQ1scFBhcnRJbldhdmVzCQDMCAIFEGNsYWltUGFydEluV2F2ZXMJAMwIAgUVcG93ZXJTdGFrZVBhcnRJbldhdmVzBQNuaWwFA25pbAFpAQdjbGFpbUxQAAkAlAoCBQNuaWwJAP0HBAUXY2FsY3VsYXRvckFkZHJlc3NPckZhaWwCB2NsYWltTFAJAMwIAggIBQFpBmNhbGxlcgVieXRlcwUDbmlsCAUBaQhwYXltZW50cwFpAQ9jbGFpbUNvbGxhdGVyYWwBB3R4SWRTdHIJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAg9jbGFpbUNvbGxhdGVyYWwJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCBQd0eElkU3RyBQNuaWwIBQFpCHBheW1lbnRzAWkBE2NsYWltQ29sbGF0ZXJhbEJ1bGsBBXR4SWRzCQCUCgIFA25pbAkA/QcEBRdjYWxjdWxhdG9yQWRkcmVzc09yRmFpbAITY2xhaW1Db2xsYXRlcmFsQnVsawkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIFBXR4SWRzBQNuaWwIBQFpCHBheW1lbnRzAWkBBmludmVzdAAJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAgZpbnZlc3QJAMwIAggIBQFpBmNhbGxlcgVieXRlcwUDbmlsCAUBaQhwYXltZW50cwFpAQh3aXRoZHJhdwAJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAgh3aXRoZHJhdwkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwIBQFpCHBheW1lbnRzAWkBDmNhbmNlbFdpdGhkcmF3AQd0eElkU3RyCQCUCgIFA25pbAkA/QcEBRdjYWxjdWxhdG9yQWRkcmVzc09yRmFpbAIOY2FuY2VsV2l0aGRyYXcJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQDZBAEFB3R4SWRTdHIFA25pbAgFAWkIcGF5bWVudHMBaQENcHJvY2Vzc0Jsb2NrcwAJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAg1wcm9jZXNzQmxvY2tzCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAgFAWkIcGF5bWVudHMBaQEXY2xhaW1Db2xsYXRlcmFsUkVBRE9OTFkCC3VzZXJBZGRyZXNzB3R4SWRTdHIJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAhdjbGFpbUNvbGxhdGVyYWxSRUFET05MWQkAzAgCCQDZBAEFC3VzZXJBZGRyZXNzCQDMCAIFB3R4SWRTdHIFA25pbAUDbmlsAWkBG2NsYWltQ29sbGF0ZXJhbEJ1bGtSRUFET05MWQILdXNlckFkZHJlc3MFdHhJZHMJAJQKAgUDbmlsCQD9BwQFF2NhbGN1bGF0b3JBZGRyZXNzT3JGYWlsAhtjbGFpbUNvbGxhdGVyYWxCdWxrUkVBRE9OTFkJAMwIAgkA2QQBBQt1c2VyQWRkcmVzcwkAzAgCBQV0eElkcwUDbmlsBQNuaWwBaQEEc3dhcAMHYXNzZXRJZA5wYXltZW50QXNzZXRJZA1wYXltZW50QW1vdW50BAVjaGVjawkAzAgCCQEOb25seUNhbGN1bGF0b3IBBQFpBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrBAxwYXltZW50QXNzZXQDCQAAAgUOcGF5bWVudEFzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFDnBheW1lbnRBc3NldElkBBBpbml0QXNzZXRCYWxhbmNlAwkAAAIFB2Fzc2V0SWQCBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFB2Fzc2V0SWQDCQAAAgUQaW5pdEFzc2V0QmFsYW5jZQUQaW5pdEFzc2V0QmFsYW5jZQQKc3dhcEludm9rZQkA/AcEBRlzd2FwQ29udHJhY3RBZGRyZXNzT3JGYWlsAgRzd2FwCQDMCAIAAAkAzAgCBQdhc3NldElkCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxwYXltZW50QXNzZXQFDXBheW1lbnRBbW91bnQFA25pbAMJAAACBQpzd2FwSW52b2tlBQpzd2FwSW52b2tlBA9uZXdBc3NldEJhbGFuY2UDCQAAAgUHYXNzZXRJZAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAMJAAACBQ9uZXdBc3NldEJhbGFuY2UFD25ld0Fzc2V0QmFsYW5jZQkAlAoCBQNuaWwJAGUCBQ9uZXdBc3NldEJhbGFuY2UFEGluaXRBc3NldEJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcG93ZXJTdGFrZQMOcmVjaXBpZW50Qnl0ZXMMYXNzZXRJZEJ5dGVzBmFtb3VudAMJAQ5vbmx5Q2FsY3VsYXRvcgEFAWkJAJQKAgUDbmlsCQD8BwQFGnBvd2VyQ29udHJhY3RBZGRyZXNzT3JGYWlsAg5jb21taXRGb3JNaW5lcgkAzAgCCQClCAEJAQdBZGRyZXNzAQUOcmVjaXBpZW50Qnl0ZXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMYXNzZXRJZEJ5dGVzBQZhbW91bnQFA25pbAkAlAoCBQNuaWwFBHVuaXQBaQELdm90ZUZvclR4SWQBBHR4SWQEE2NhbGxlckFkZHJlc3NTdHJpbmcJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQJa2V5UHJlZml4CQEYa2V5QWxsb3dlZFR4SWRWb3RlUHJlZml4AQUEdHhJZAQGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlBbGxvd2VkVHhJZAAFBHR4SWQFA25pbAQRYWxsb3dlZFR4SWRPcHRpb24JAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAQDZXJyCQDMCAIDCQAAAgkAyAEBCQDZBAEFBHR4SWQFEVRYSURfQllURVNfTEVOR1RIBgkBCHRocm93RXJyAQkArAICBQR0eElkAhIgaXMgbm90IHZhbGlkIHR4SWQJAMwIAgMDCQAAAgURYWxsb3dlZFR4SWRPcHRpb24FBHVuaXQGCQECIT0CCQEFdmFsdWUBBRFhbGxvd2VkVHhJZE9wdGlvbgUEdHhJZAYJAQh0aHJvd0VycgEJAKwCAgUEdHhJZAITIGlzIGFscmVhZHkgYWxsb3dlZAUDbmlsAwkAAAIFA2VycgUDZXJyCQEMdm90ZUlOVEVSTkFMBAUTY2FsbGVyQWRkcmVzc1N0cmluZwUJa2V5UHJlZml4BQZRVU9SVU0FBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAECmJ5UHJvcG9zYWwEByRtYXRjaDAFGXZvdGluZ1Jlc3VsdEFkZHJlc3NPcHRpb24DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQPcHJvcG9zYWxBZGRyZXNzBQckbWF0Y2gwCQELdmFsdWVPckVsc2UCCQCbCAIFD3Byb3Bvc2FsQWRkcmVzcwkBGWtleVByb3Bvc2FsQWxsb3dCcm9hZGNhc3QCBQR0aGlzCAUCdHgCaWQHBwQIYnlBZG1pbnMJAAACCAUCdHgCaWQJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5QWxsb3dlZFR4SWQAAgAEB2J5T3duZXIDCQBnAgkAkAMBCQENZ2V0QWRtaW5zTGlzdAAFBlFVT1JVTQcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkDAwUKYnlQcm9wb3NhbAYFCGJ5QWRtaW5zBgUHYnlPd25lcjLuoGo=", "chainId": 84, "height": 2715759, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2qdzZdBTHW56ucvmocdoAWq86Teq67bxek3X69BkFzw2 Next: ysGhs6RRNT7Pviy1geShijGAp1tUAo77ZChyUg33sxx Diff:
OldNewDifferences
457457
458458
459459 @Callable(i)
460-func swap (assetId,paymentAsset,paymentAmount) = {
460+func swap (assetId,paymentAssetId,paymentAmount) = {
461461 let check = [onlyCalculator(i)]
462462 if ((check == check))
463463 then {
464+ let paymentAsset = if ((paymentAssetId == "WAVES"))
465+ then unit
466+ else fromBase58String(paymentAssetId)
464467 let initAssetBalance = if ((assetId == "WAVES"))
465468 then wavesBalance(this).available
466469 else assetBalance(this, fromBase58String(assetId))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let WAVES = "WAVES"
77
88 let contractFilename = "factory.ride"
99
1010 func wrapErr (s) = ((contractFilename + ": ") + s)
1111
1212
1313 func throwErr (s) = throw(wrapErr(s))
1414
1515
1616 func stringToAssetId (s) = if ((s == WAVES))
1717 then unit
1818 else fromBase58String(s)
1919
2020
2121 let ADMIN_LIST_SIZE = 5
2222
2323 let QUORUM = 3
2424
2525 let TXID_BYTES_LENGTH = 32
2626
2727 func keyAllowedTxIdVotePrefix (txId) = makeString(["%s%s%s", "allowTxId", txId], SEP)
2828
2929
3030 func keyFullAdminVote (prefix,adminAddress) = makeString([prefix, adminAddress], SEP)
3131
3232
3333 func keyAdminAddressList () = makeString(["%s", "adminAddressList"], SEP)
3434
3535
3636 func keyAllowedTxId () = makeString(["%s", "txId"], SEP)
3737
3838
3939 func getAdminVote (prefix,admin) = {
4040 let voteKey = keyFullAdminVote(prefix, admin)
4141 valueOrElse(getInteger(voteKey), 0)
4242 }
4343
4444
4545 func getAdminsList () = match getString(this, keyAdminAddressList()) {
4646 case s: String =>
4747 split(s, SEP)
4848 case _ =>
4949 nil
5050 }
5151
5252
5353 func isInAdminList (address) = containsElement(getAdminsList(), address)
5454
5555
5656 func genVotesKeysHelper (a,adminAddress) = {
5757 let $t013751399 = a
5858 let result = $t013751399._1
5959 let prefix = $t013751399._2
6060 $Tuple2((result :+ keyFullAdminVote(prefix, adminAddress)), prefix)
6161 }
6262
6363
6464 func genVotesKeys (keyPrefix) = {
6565 let adminList = keyAdminAddressList()
6666 let $t015461630 = {
6767 let $l = getAdminsList()
6868 let $s = size($l)
6969 let $acc0 = $Tuple2(nil, keyPrefix)
7070 func $f0_1 ($a,$i) = if (($i >= $s))
7171 then $a
7272 else genVotesKeysHelper($a, $l[$i])
7373
7474 func $f0_2 ($a,$i) = if (($i >= $s))
7575 then $a
7676 else throw("List size exceeds 5")
7777
7878 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
7979 }
8080 let result = $t015461630._1
8181 let prefix = $t015461630._2
8282 result
8383 }
8484
8585
8686 func countVotesHelper (result,voteKey) = (result + valueOrElse(getInteger(voteKey), 0))
8787
8888
8989 func countVotes (prefix) = {
9090 let votes = genVotesKeys(prefix)
9191 let $l = votes
9292 let $s = size($l)
9393 let $acc0 = 0
9494 func $f0_1 ($a,$i) = if (($i >= $s))
9595 then $a
9696 else countVotesHelper($a, $l[$i])
9797
9898 func $f0_2 ($a,$i) = if (($i >= $s))
9999 then $a
100100 else throw("List size exceeds 5")
101101
102102 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
103103 }
104104
105105
106106 func clearVotesHelper (result,key) = (result :+ DeleteEntry(key))
107107
108108
109109 func getClearVoteEntries (prefix) = {
110110 let votes = genVotesKeys(prefix)
111111 let $l = votes
112112 let $s = size($l)
113113 let $acc0 = nil
114114 func $f0_1 ($a,$i) = if (($i >= $s))
115115 then $a
116116 else clearVotesHelper($a, $l[$i])
117117
118118 func $f0_2 ($a,$i) = if (($i >= $s))
119119 then $a
120120 else throw("List size exceeds 5")
121121
122122 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5)
123123 }
124124
125125
126126 func voteINTERNAL (callerAddressString,keyPrefix,minVotes,voteResult) = {
127127 let voteKey = keyFullAdminVote(keyPrefix, callerAddressString)
128128 let adminCurrentVote = getAdminVote(keyPrefix, callerAddressString)
129129 let err = if (!(isInAdminList(callerAddressString)))
130130 then throwErr((("Address: " + callerAddressString) + " not in Admin list"))
131131 else if ((adminCurrentVote == 1))
132132 then throwErr((voteKey + " you already voted"))
133133 else unit
134134 if ((err == err))
135135 then {
136136 let votes = countVotes(keyPrefix)
137137 if (((votes + 1) >= minVotes))
138138 then {
139139 let clearVoteEntries = getClearVoteEntries(keyPrefix)
140140 (clearVoteEntries ++ voteResult)
141141 }
142142 else [IntegerEntry(voteKey, 1)]
143143 }
144144 else throw("Strict value is not equal to itself.")
145145 }
146146
147147
148148 func keyCalculatorAddress () = "%s__calculator"
149149
150150
151151 func keyProxyTreasuryAddress () = "%s__proxyTreasury"
152152
153153
154154 func keyPowerContractAddress () = "%s__powerContract"
155155
156156
157157 func keySwapContractAddress () = "%s__swapContract"
158158
159159
160160 func keyChildAddress () = "%s__child"
161161
162162
163163 func keyBlockProcessingReward () = "%s__blockProcessingReward"
164164
165165
166166 func keyNextBlockToProcess () = "%s__nextBlockToProcess"
167167
168168
169169 func keyLpAssetId () = "%s__lpAssetId"
170170
171171
172172 let calculatorAddressOption = match getString(this, keyCalculatorAddress()) {
173173 case s: String =>
174174 addressFromString(s)
175175 case _: Unit =>
176176 unit
177177 case _ =>
178178 throw("Match error")
179179 }
180180
181181 let calculatorAddressOrFail = valueOrErrorMessage(calculatorAddressOption, wrapErr("invalid calculator address"))
182182
183183 let proxyTreasuryAddressOption = match getString(this, keyProxyTreasuryAddress()) {
184184 case s: String =>
185185 addressFromString(s)
186186 case _: Unit =>
187187 unit
188188 case _ =>
189189 throw("Match error")
190190 }
191191
192192 let proxyTreasuryAddressOrFail = valueOrErrorMessage(proxyTreasuryAddressOption, wrapErr("invalid proxy treasury address"))
193193
194194 let powerContractAddressOption = match getString(this, keyPowerContractAddress()) {
195195 case s: String =>
196196 addressFromString(s)
197197 case _: Unit =>
198198 unit
199199 case _ =>
200200 throw("Match error")
201201 }
202202
203203 let powerContractAddressOrFail = valueOrErrorMessage(powerContractAddressOption, wrapErr("invalid power contract address"))
204204
205205 let swapContractAddressOption = match getString(this, keySwapContractAddress()) {
206206 case s: String =>
207207 addressFromString(s)
208208 case _: Unit =>
209209 unit
210210 case _ =>
211211 throw("Match error")
212212 }
213213
214214 let swapContractAddressOrFail = valueOrErrorMessage(swapContractAddressOption, wrapErr("invalid swap contract address"))
215215
216216 func keyConfigAddress () = "%s__config"
217217
218218
219219 func keyChildrenAddress () = "contract_children"
220220
221221
222222 func keyVotingResultAddress () = "contract_voting_result"
223223
224224
225225 func keyProposalAllowBroadcast (address,txId) = ((("proposal_allow_broadcast_" + toString(address)) + "_") + toBase58String(txId))
226226
227227
228228 func keyInvestedByUser (childAddress,userAddress) = makeString(["investor", toString(childAddress), toString(userAddress)], "_")
229229
230230
231231 let configAddressOption = match getString(this, keyConfigAddress()) {
232232 case s: String =>
233233 addressFromString(s)
234234 case _: Unit =>
235235 unit
236236 case _ =>
237237 throw("Match error")
238238 }
239239
240240 let configAddressOrFail = valueOrErrorMessage(configAddressOption, wrapErr("invalid config address"))
241241
242242 let votingResultAddressOption = match configAddressOption {
243243 case a: Address =>
244244 match getString(a, keyVotingResultAddress()) {
245245 case s: String =>
246246 addressFromString(s)
247247 case _: Unit =>
248248 unit
249249 case _ =>
250250 throw("Match error")
251251 }
252252 case _: Unit =>
253253 unit
254254 case _ =>
255255 throw("Match error")
256256 }
257257
258258 let votingResultAddressOrFail = valueOrErrorMessage(votingResultAddressOption, wrapErr("invalid voting result address"))
259259
260260 let childrenAddressOption = match configAddressOption {
261261 case a: Address =>
262262 match getString(a, keyChildrenAddress()) {
263263 case s: String =>
264264 addressFromString(s)
265265 case _: Unit =>
266266 unit
267267 case _ =>
268268 throw("Match error")
269269 }
270270 case _: Unit =>
271271 unit
272272 case _ =>
273273 throw("Match error")
274274 }
275275
276276 let childrenAddressOrFail = valueOrErrorMessage(childrenAddressOption, wrapErr("invalid children address"))
277277
278278 let lpAssetIdOption = match getString(this, keyLpAssetId()) {
279279 case s: String =>
280280 fromBase58String(s)
281281 case _: Unit =>
282282 unit
283283 case _ =>
284284 throw("Match error")
285285 }
286286
287287 let lpAssetIdOrFail = valueOrErrorMessage(lpAssetIdOption, wrapErr("invalid lpAssetId"))
288288
289289 func onlyAddress (i,address) = if ((i.caller == address))
290290 then true
291291 else throwErr("permission denied")
292292
293293
294294 func onlyThis (i) = onlyAddress(i, this)
295295
296296
297297 func onlyCalculator (i) = onlyAddress(i, calculatorAddressOrFail)
298298
299299
300300 @Callable(i)
301301 func stringEntry (key,val) = if (onlyCalculator(i))
302302 then $Tuple2([StringEntry(key, val)], key)
303303 else $Tuple2(nil, unit)
304304
305305
306306
307307 @Callable(i)
308308 func integerEntry (key,val) = if (onlyCalculator(i))
309309 then $Tuple2([IntegerEntry(key, val)], key)
310310 else $Tuple2(nil, unit)
311311
312312
313313
314314 @Callable(i)
315315 func booleanEntry (key,val) = if (onlyCalculator(i))
316316 then $Tuple2([BooleanEntry(key, val)], key)
317317 else $Tuple2(nil, unit)
318318
319319
320320
321321 @Callable(i)
322322 func binaryEntry (key,val) = if (onlyCalculator(i))
323323 then $Tuple2([BinaryEntry(key, val)], key)
324324 else $Tuple2(nil, unit)
325325
326326
327327
328328 @Callable(i)
329329 func deleteEntry (key) = if (onlyCalculator(i))
330330 then $Tuple2([DeleteEntry(key)], key)
331331 else $Tuple2(nil, unit)
332332
333333
334334
335335 @Callable(i)
336336 func reissue (amount) = if (onlyCalculator(i))
337337 then $Tuple2([Reissue(lpAssetIdOrFail, amount, true)], amount)
338338 else $Tuple2(nil, unit)
339339
340340
341341
342342 @Callable(i)
343343 func burn (amount) = if (onlyCalculator(i))
344344 then $Tuple2([Burn(lpAssetIdOrFail, amount)], amount)
345345 else $Tuple2(nil, unit)
346346
347347
348348
349349 @Callable(i)
350350 func transferAsset (recipientBytes,amount,assetId) = if (onlyCalculator(i))
351351 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, assetId)], amount)
352352 else $Tuple2(nil, unit)
353353
354354
355355
356356 @Callable(i)
357357 func transferAssets (recipientBytes,assetsList,amountsList) = if (onlyCalculator(i))
358358 then {
359359 func addNewTransfer (acc,nextAssetId) = {
360360 let $t081188142 = acc
361361 let transfers = $t081188142._1
362362 let j = $t081188142._2
363363 let newTransfer = ScriptTransfer(Address(recipientBytes), parseIntValue(amountsList[j]), stringToAssetId(assetsList[j]))
364364 let updatedTransfers = (transfers :+ newTransfer)
365365 $Tuple2(updatedTransfers, (j + 1))
366366 }
367367
368368 let $t084028483 = {
369369 let $l = assetsList
370370 let $s = size($l)
371371 let $acc0 = $Tuple2(nil, 0)
372372 func $f0_1 ($a,$i) = if (($i >= $s))
373373 then $a
374374 else addNewTransfer($a, $l[$i])
375375
376376 func $f0_2 ($a,$i) = if (($i >= $s))
377377 then $a
378378 else throw("List size exceeds 10")
379379
380380 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
381381 }
382382 let assetsTransfers = $t084028483._1
383383 let _lastIndex = $t084028483._2
384384 $Tuple2(assetsTransfers, unit)
385385 }
386386 else $Tuple2(nil, unit)
387387
388388
389389
390390 @Callable(i)
391391 func transferWaves (recipientBytes,amount) = if (onlyCalculator(i))
392392 then $Tuple2([ScriptTransfer(Address(recipientBytes), amount, unit)], amount)
393393 else $Tuple2(nil, unit)
394394
395395
396396
397397 @Callable(i)
398398 func transferFromProxyTreasury (recipientBytes,rewardsAmount) = if (onlyCalculator(i))
399399 then $Tuple2(nil, invoke(proxyTreasuryAddressOrFail, "transferWaves", [recipientBytes, rewardsAmount], nil))
400400 else $Tuple2(nil, unit)
401401
402402
403403
404404 @Callable(i)
405405 func finalize (donationPartInWaves,lpPartInWaves,claimPartInWaves,powerStakePartInWaves) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "finalize", [i.caller.bytes, donationPartInWaves, lpPartInWaves, claimPartInWaves, powerStakePartInWaves], i.payments))
406406
407407
408408
409409 @Callable(i)
410410 func finalizeREADONLY (donationPartInWaves,lpPartInWaves,claimPartInWaves,powerStakePartInWaves) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "finalizeREADONLY", [donationPartInWaves, lpPartInWaves, claimPartInWaves, powerStakePartInWaves], nil))
411411
412412
413413
414414 @Callable(i)
415415 func claimLP () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimLP", [i.caller.bytes], i.payments))
416416
417417
418418
419419 @Callable(i)
420420 func claimCollateral (txIdStr) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimCollateral", [i.caller.bytes, txIdStr], i.payments))
421421
422422
423423
424424 @Callable(i)
425425 func claimCollateralBulk (txIds) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimCollateralBulk", [i.caller.bytes, txIds], i.payments))
426426
427427
428428
429429 @Callable(i)
430430 func invest () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "invest", [i.caller.bytes], i.payments))
431431
432432
433433
434434 @Callable(i)
435435 func withdraw () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "withdraw", [i.caller.bytes], i.payments))
436436
437437
438438
439439 @Callable(i)
440440 func cancelWithdraw (txIdStr) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "cancelWithdraw", [i.caller.bytes, fromBase58String(txIdStr)], i.payments))
441441
442442
443443
444444 @Callable(i)
445445 func processBlocks () = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "processBlocks", [i.caller.bytes], i.payments))
446446
447447
448448
449449 @Callable(i)
450450 func claimCollateralREADONLY (userAddress,txIdStr) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimCollateralREADONLY", [fromBase58String(userAddress), txIdStr], nil))
451451
452452
453453
454454 @Callable(i)
455455 func claimCollateralBulkREADONLY (userAddress,txIds) = $Tuple2(nil, reentrantInvoke(calculatorAddressOrFail, "claimCollateralBulkREADONLY", [fromBase58String(userAddress), txIds], nil))
456456
457457
458458
459459 @Callable(i)
460-func swap (assetId,paymentAsset,paymentAmount) = {
460+func swap (assetId,paymentAssetId,paymentAmount) = {
461461 let check = [onlyCalculator(i)]
462462 if ((check == check))
463463 then {
464+ let paymentAsset = if ((paymentAssetId == "WAVES"))
465+ then unit
466+ else fromBase58String(paymentAssetId)
464467 let initAssetBalance = if ((assetId == "WAVES"))
465468 then wavesBalance(this).available
466469 else assetBalance(this, fromBase58String(assetId))
467470 if ((initAssetBalance == initAssetBalance))
468471 then {
469472 let swapInvoke = invoke(swapContractAddressOrFail, "swap", [0, assetId, toString(this)], [AttachedPayment(paymentAsset, paymentAmount)])
470473 if ((swapInvoke == swapInvoke))
471474 then {
472475 let newAssetBalance = if ((assetId == "WAVES"))
473476 then wavesBalance(this).available
474477 else assetBalance(this, fromBase58String(assetId))
475478 if ((newAssetBalance == newAssetBalance))
476479 then $Tuple2(nil, (newAssetBalance - initAssetBalance))
477480 else throw("Strict value is not equal to itself.")
478481 }
479482 else throw("Strict value is not equal to itself.")
480483 }
481484 else throw("Strict value is not equal to itself.")
482485 }
483486 else throw("Strict value is not equal to itself.")
484487 }
485488
486489
487490
488491 @Callable(i)
489492 func powerStake (recipientBytes,assetIdBytes,amount) = if (onlyCalculator(i))
490493 then $Tuple2(nil, invoke(powerContractAddressOrFail, "commitForMiner", [toString(Address(recipientBytes))], [AttachedPayment(assetIdBytes, amount)]))
491494 else $Tuple2(nil, unit)
492495
493496
494497
495498 @Callable(i)
496499 func voteForTxId (txId) = {
497500 let callerAddressString = toBase58String(i.caller.bytes)
498501 let keyPrefix = keyAllowedTxIdVotePrefix(txId)
499502 let result = [StringEntry(keyAllowedTxId(), txId)]
500503 let allowedTxIdOption = getString(this, keyAllowedTxId())
501504 let err = [if ((size(fromBase58String(txId)) == TXID_BYTES_LENGTH))
502505 then true
503506 else throwErr((txId + " is not valid txId")), if (if ((allowedTxIdOption == unit))
504507 then true
505508 else (value(allowedTxIdOption) != txId))
506509 then true
507510 else throwErr((txId + " is already allowed"))]
508511 if ((err == err))
509512 then voteINTERNAL(callerAddressString, keyPrefix, QUORUM, result)
510513 else throw("Strict value is not equal to itself.")
511514 }
512515
513516
514517 @Verifier(tx)
515518 func verify () = {
516519 let byProposal = match votingResultAddressOption {
517520 case proposalAddress: Address =>
518521 valueOrElse(getBoolean(proposalAddress, keyProposalAllowBroadcast(this, tx.id)), false)
519522 case _ =>
520523 false
521524 }
522525 let byAdmins = (tx.id == fromBase58String(valueOrElse(getString(this, keyAllowedTxId()), "")))
523526 let byOwner = if ((size(getAdminsList()) >= QUORUM))
524527 then false
525528 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
526529 if (if (byProposal)
527530 then true
528531 else byAdmins)
529532 then true
530533 else byOwner
531534 }
532535

github/deemru/w8io/3ef1775 
358.40 ms