tx · 2koXZsZwgaLZKCRg5C8YtW4WAxjPzzDtN8JmthvwWAy8

3PHx1EdmRszj2Sww4qFj5UBLNKaTKnR4Aha:  -0.01000000 Waves

2022.10.26 05:53 [3354205] smart account 3PHx1EdmRszj2Sww4qFj5UBLNKaTKnR4Aha > SELF 0.00000000 Waves

{ "type": 13, "id": "2koXZsZwgaLZKCRg5C8YtW4WAxjPzzDtN8JmthvwWAy8", "fee": 1000000, "feeAssetId": null, "timestamp": 1666752754345, "version": 2, "chainId": 87, "sender": "3PHx1EdmRszj2Sww4qFj5UBLNKaTKnR4Aha", "senderPublicKey": "DqahoYcnMaQXcFp9srSTmNLMtNh9GCj4cDmetHPPPtUA", "proofs": [ "2YvqkiPuKprHSniA8vob5T3HWvyRdRmYuoZXDaqFJYZonTSRMT8CFavGJt5qF7DbkVq9rG89FfXVbH6FuxYaybL6" ], "script": "base64:BgIOCAISBAoCARgSBAoCCAETARBnZXRCaW5hcnlEZWZhdWx0Aw5hZGRyZXNzT3JBbGlhcwNrZXkDdmFsCQELdmFsdWVPckVsc2UCCQCcCAIFDmFkZHJlc3NPckFsaWFzBQNrZXkFA3ZhbAEUZ2V0QmluYXJ5U2VsZkRlZmF1bHQCA2tleQN2YWwJAQt2YWx1ZU9yRWxzZQIJAKEIAQUDa2V5BQN2YWwBEWdldEJvb2xlYW5EZWZhdWx0Aw5hZGRyZXNzT3JBbGlhcwNrZXkDdmFsCQELdmFsdWVPckVsc2UCCQCbCAIFDmFkZHJlc3NPckFsaWFzBQNrZXkFA3ZhbAEVZ2V0Qm9vbGVhblNlbGZEZWZhdWx0AgNrZXkDdmFsCQELdmFsdWVPckVsc2UCCQCgCAEFA2tleQUDdmFsARFnZXRJbnRlZ2VyRGVmYXVsdAMOYWRkcmVzc09yQWxpYXMDa2V5A3ZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hZGRyZXNzT3JBbGlhcwUDa2V5BQN2YWwBFWdldEludGVnZXJTZWxmRGVmYXVsdAIDa2V5A3ZhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQNrZXkFA3ZhbAEQZ2V0U3RyaW5nRGVmYXVsdAMOYWRkcmVzc09yQWxpYXMDa2V5A3ZhbAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5hZGRyZXNzT3JBbGlhcwUDa2V5BQN2YWwBFGdldFN0cmluZ1NlbGZEZWZhdWx0AgNrZXkDdmFsCQELdmFsdWVPckVsc2UCCQCiCAEFA2tleQUDdmFsAQ9hc3NldEZyb21TdHJpbmcBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEPc3RyaW5nRnJvbUFzc2V0AQVhc3NldAQHJG1hdGNoMAUFYXNzZXQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBdAUHJG1hdGNoMAkA2AQBBQF0AgVXQVZFUwEOY3VycmVudEJhbGFuY2UBB2Fzc2V0SWQEBWFzc2V0CQEPYXNzZXRGcm9tU3RyaW5nAQUHYXNzZXRJZAQHJG1hdGNoMAUFYXNzZXQDCQABAgUHJG1hdGNoMAIEVW5pdAQBdwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkBBXZhbHVlAQUFYXNzZXQBEmNhbGN1bGF0ZUZlZUFtb3VudAEGYW1vdW50BANmZWUEByRtYXRjaDAJAJ8IAQIDZmVlAwkAAQIFByRtYXRjaDACBFVuaXQAAAQBZgUHJG1hdGNoMAUBZgkAawMFBmFtb3VudAUDZmVlAJBOAQtwYXJzZVBhcmFtcwEGcGFyYW1zCQC1CQIFBnBhcmFtcwIBJgEIbWFrZUNhbGwCCGluQW1vdW50BnBhcmFtcwQFcGFydHMJALUJAgUGcGFyYW1zAgE6BAdpbkFzc2V0CQCRAwIFBXBhcnRzAAAECG91dEFzc2V0CQCRAwIFBXBhcnRzAAEECmRhcHBDb25maWcJALUJAgkAkQMCBQVwYXJ0cwACAgE9BAhzd2FwVHlwZQkAkQMCBQpkYXBwQ29uZmlnAAAEC2RhcHBBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCmRhcHBDb25maWcAAQQHcGF5bWVudAkBD0F0dGFjaGVkUGF5bWVudAIJAQ9hc3NldEZyb21TdHJpbmcBBQdpbkFzc2V0BQhpbkFtb3VudAMJAAACBQhzd2FwVHlwZQIGcHV6emxlCQD8BwQFC2RhcHBBZGRyZXNzAgRzd2FwCQDMCAIFCG91dEFzc2V0CQDMCAIAAQUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAMJAAACBQhzd2FwVHlwZQIEc3dvcAMJAAACCQCQAwEFCmRhcHBDb25maWcAAwQLZXh0cmFQYXJhbXMJAQtwYXJzZVBhcmFtcwEJAJEDAgUKZGFwcENvbmZpZwACCQD8BwQFC2RhcHBBZGRyZXNzAghleGNoYW5nZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULZXh0cmFQYXJhbXMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULZXh0cmFQYXJhbXMAAQUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAkA/AcEBQtkYXBwQWRkcmVzcwIIZXhjaGFuZ2UJAMwIAgABBQNuaWwJAMwIAgUHcGF5bWVudAUDbmlsAwkAAAIFCHN3YXBUeXBlAgJjZgkA/AcEBQtkYXBwQWRkcmVzcwIQcHJvdmlkZUxpcXVpZGl0eQUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAMJAAACBQhzd2FwVHlwZQIMaGVyYWNsaXR1c3d4AwkAAAIJAJADAQUKZGFwcENvbmZpZwADBAtleHRyYVBhcmFtcwkBC3BhcnNlUGFyYW1zAQkAkQMCBQpkYXBwQ29uZmlnAAIJAPwHBAULZGFwcEFkZHJlc3MJAJEDAgULZXh0cmFQYXJhbXMAAAUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAkAAgECJmhlcmFjbGl0dXMgd3ggc3dhcHMgcmVxdWlyZSBwYXJhbWV0ZXJzAwkAAAIFCHN3YXBUeXBlAg1oZXJhY2xpdHVzdGNpAwkAAAIJAJADAQUKZGFwcENvbmZpZwADBAtleHRyYVBhcmFtcwkBC3BhcnNlUGFyYW1zAQkAkQMCBQpkYXBwQ29uZmlnAAIJAPwHBAULZGFwcEFkZHJlc3MJAJEDAgULZXh0cmFQYXJhbXMAAAUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAkAAgECJ2hlcmFjbGl0dXMgdGNpIHN3YXBzIHJlcXVpcmUgcGFyYW1ldGVycwMJAAACBQhzd2FwVHlwZQINbmV1dHJpbm9yZWNhcAMJAAACCQCQAwEFCmRhcHBDb25maWcAAwQLZXh0cmFQYXJhbXMJAQtwYXJzZVBhcmFtcwEJAJEDAgUKZGFwcENvbmZpZwACBAhkYXBwRnVuYwkAkQMCBQtleHRyYVBhcmFtcwAAAwkAAAIFCGRhcHBGdW5jAgdidXlOc2J0CQD8BwQFC2RhcHBBZGRyZXNzBQhkYXBwRnVuYwUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAMJAAACBQhkYXBwRnVuYwIHYnV5U3VyZgkA/AcEBQtkYXBwQWRkcmVzcwUIZGFwcEZ1bmMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2V4dHJhUGFyYW1zAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2V4dHJhUGFyYW1zAAIJAMwIAgcFA25pbAkAzAgCBQdwYXltZW50BQNuaWwJAAIBAhpJbnZhbGlkIGZ1bmN0aW9uIHBhcmFtZXRlcgkAAgECJ25ldXRyaW5vIHJlY2FwIHN3YXBzIHJlcXVpcmUgcGFyYW1ldGVycwMJAAACBQhzd2FwVHlwZQIId3hzdGFibGUDCQAAAgkAkAMBBQpkYXBwQ29uZmlnAAMEC2V4dHJhUGFyYW1zCQELcGFyc2VQYXJhbXMBCQCRAwIFCmRhcHBDb25maWcAAgQKd3hTd2FwVHlwZQkAkQMCBQtleHRyYVBhcmFtcwAAAwkAAAIFCnd4U3dhcFR5cGUCBHN3YXAJAPwHBAUEdGhpcwIRd3hTdGFibGVTd2FwUHJveHkJAMwIAgULZGFwcEFkZHJlc3MJAMwIAgABBQNuaWwJAMwIAgUHcGF5bWVudAUDbmlsAwkAAAIFCnd4U3dhcFR5cGUCBHRvTFAJAPwHBAULZGFwcEFkZHJlc3MCC3B1dE9uZVRrblYyCQDMCAIAAQkAzAgCBwUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAMJAAACBQp3eFN3YXBUeXBlAgZmcm9tTFAJAPwHBAULZGFwcEFkZHJlc3MCC2dldE9uZVRrblYyCQDMCAIFCG91dEFzc2V0CQDMCAIAAQUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAkAAgECFGludmFsaWQgd3ggc3dhcCB0eXBlCQACAQIid3ggc3RhYmxlIHN3YXBzIHJlcXVpcmUgcGFyYW1ldGVycwkAAgECEUludmFsaWQgc3dhcCB0eXBlAQ5nZXRSb3V0ZVJlc3VsdAINY3VycmVudFJlc3VsdAluZXh0Um91dGUECG91dEFzc2V0CQCRAwIJALUJAgUJbmV4dFJvdXRlAgE6AAEDCQAAAgUIb3V0QXNzZXQFCG91dEFzc2V0BA1iYWxhbmNlQmVmb3JlCQEOY3VycmVudEJhbGFuY2UBBQhvdXRBc3NldAMJAAACBQ1iYWxhbmNlQmVmb3JlBQ1iYWxhbmNlQmVmb3JlBAZyZXN1bHQJAQhtYWtlQ2FsbAIIBQ1jdXJyZW50UmVzdWx0Al8xBQluZXh0Um91dGUDCQAAAgUGcmVzdWx0BQZyZXN1bHQEDGJhbGFuY2VBZnRlcgkBDmN1cnJlbnRCYWxhbmNlAQUIb3V0QXNzZXQDCQAAAgUMYmFsYW5jZUFmdGVyBQxiYWxhbmNlQWZ0ZXIJAJQKAgkAZQIFDGJhbGFuY2VBZnRlcgUNYmFsYW5jZUJlZm9yZQUIb3V0QXNzZXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDGV4ZWN1dGVSb3V0ZQEFcm91dGUEBXBhcnRzCQC1CQIFBXJvdXRlAgF8BAhpbkFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEDXNjcmlwdENvbmZpZ3MJALUJAgkAkQMCBQVwYXJ0cwABAgEsCgACJGwFDXNjcmlwdENvbmZpZ3MKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFCGluQW1vdW50AgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDmdldFJvdXRlUmVzdWx0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAQ5jb21iaW5lUmVzdWx0cwIQY3VycmVudEFzc2V0RGF0YQ9uZXh0Um91dGVSZXN1bHQEDWN1cnJlbnRBbW91bnQIBRBjdXJyZW50QXNzZXREYXRhAl8xBA5jdXJyZW50QXNzZXRJZAgFEGN1cnJlbnRBc3NldERhdGECXzIEEGFkZGl0aW9uYWxBbW91bnQIBQ9uZXh0Um91dGVSZXN1bHQCXzEEB2Fzc2V0SWQIBQ9uZXh0Um91dGVSZXN1bHQCXzIDCQAAAgUOY3VycmVudEFzc2V0SWQCAAkAlAoCCQBkAgUNY3VycmVudEFtb3VudAUQYWRkaXRpb25hbEFtb3VudAUHYXNzZXRJZAMJAAACBQ5jdXJyZW50QXNzZXRJZAUHYXNzZXRJZAkAlAoCCQBkAgUNY3VycmVudEFtb3VudAUQYWRkaXRpb25hbEFtb3VudAUHYXNzZXRJZAkAAgECIVJlc3VsdGluZyBhc3NldHMgYXJlIG5vdCB0aGUgc2FtZQEQZXhlY3V0ZUFsbFJvdXRlcwIHcmVzdWx0cwluZXh0Um91dGUEC3JvdXRlUmVzdWx0CQEMZXhlY3V0ZVJvdXRlAQUJbmV4dFJvdXRlCQDNCAIFB3Jlc3VsdHMFC3JvdXRlUmVzdWx0ARJjYWxjdWxhdGVkQW1vdW50SW4CBXRvdGFsBXJvdXRlCQBkAgUFdG90YWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIFBXJvdXRlAgF8AAACAWkBBHN3YXACDG1pblRvUmVjZWl2ZQZyb3V0ZXMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQHcGF5bWVudAkAkQMCCAUBaQhwYXltZW50cwAABBFwYXltZW50RnJvbVJvdXRlcwoAAiRsBQZyb3V0ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEmNhbGN1bGF0ZWRBbW91bnRJbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAwkAAAIIBQdwYXltZW50BmFtb3VudAURcGF5bWVudEZyb21Sb3V0ZXMEDHJvdXRlUmVzdWx0cwoAAiRsBQZyb3V0ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGV4ZWN1dGVBbGxSb3V0ZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDQJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAQHb3V0RGF0YQoAAiRsBQxyb3V0ZVJlc3VsdHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAIACgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ5jb21iaW5lUmVzdWx0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEBA5vdXRBc3NldEFtb3VudAgFB291dERhdGECXzEECm91dEFzc2V0SWQIBQdvdXREYXRhAl8yBAlmZWVBbW91bnQJARJjYWxjdWxhdGVGZWVBbW91bnQBBQ5vdXRBc3NldEFtb3VudAQPYW1vdW50VG9SZWNlaXZlCQBlAgUOb3V0QXNzZXRBbW91bnQFCWZlZUFtb3VudAMJAGYCBQxtaW5Ub1JlY2VpdmUFD2Ftb3VudFRvUmVjZWl2ZQkAAgECLUV4cGVjdGVkIGFtb3VudCByZWNlaXZlZCBpcyBsZXNzIHRoYW4gbWluaW11bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFD2Ftb3VudFRvUmVjZWl2ZQkBD2Fzc2V0RnJvbVN0cmluZwEFCm91dEFzc2V0SWQFA25pbAkAAgECQVBheW1lbnQgYW1vdW50IGlzIG5vdCBlcXVhbCB0byB0b3RhbCBwYXltZW50IGRlc2lnbmF0ZWQgaW4gcm91dGVzAWkBEXd4U3RhYmxlU3dhcFByb3h5Aghjb250cmFjdAxtaW5Ub1JlY2VpdmUDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhRPbmUgcGF5bWVudCBleHBlY3RlZAQHcGF5bWVudAkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldEluCQEPc3RyaW5nRnJvbUFzc2V0AQgFB3BheW1lbnQHYXNzZXRJZAQLZGFwcEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCGNvbnRyYWN0BAthbW91bnRBc3NldAkBEUBleHRyTmF0aXZlKDEwNTMpAgULZGFwcEFkZHJlc3MCDyVzX19hbW91bnRBc3NldAQKcHJpY2VBc3NldAkBEUBleHRyTmF0aXZlKDEwNTMpAgULZGFwcEFkZHJlc3MCDiVzX19wcmljZUFzc2V0BAhhc3NldE91dAMJAAACBQdhc3NldEluBQthbW91bnRBc3NldAUKcHJpY2VBc3NldAULYW1vdW50QXNzZXQED2ZhY3RvcnlDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQITJXNfX2ZhY3RvcnlDb250cmFjdAQHbHBBc3NldAkBEUBleHRyTmF0aXZlKDEwNTMpAgUPZmFjdG9yeUNvbnRyYWN0CQCsAgIJAKwCAgIIJXMlcyVzX18FCGNvbnRyYWN0AiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAQPbHBCYWxhbmNlQmVmb3JlCQEOY3VycmVudEJhbGFuY2UBBQdscEFzc2V0AwkAAAIFD2xwQmFsYW5jZUJlZm9yZQUPbHBCYWxhbmNlQmVmb3JlBAR0b0xQCQD8BwQFC2RhcHBBZGRyZXNzAgtwdXRPbmVUa25WMgkAzAgCAICU69wDCQDMCAIHBQNuaWwJAMwIAgUHcGF5bWVudAUDbmlsAwkAAAIFBHRvTFAFBHRvTFAEDmxwQmFsYW5jZUFmdGVyCQEOY3VycmVudEJhbGFuY2UBBQdscEFzc2V0AwkAAAIFDmxwQmFsYW5jZUFmdGVyBQ5scEJhbGFuY2VBZnRlcgQVYXNzZXRPdXRCYWxhbmNlQmVmb3JlCQEOY3VycmVudEJhbGFuY2UBBQhhc3NldE91dAMJAAACBRVhc3NldE91dEJhbGFuY2VCZWZvcmUFFWFzc2V0T3V0QmFsYW5jZUJlZm9yZQQGZnJvbUxQCQD8BwQFC2RhcHBBZGRyZXNzAgtnZXRPbmVUa25WMgkAzAgCBQhhc3NldE91dAkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBD2Fzc2V0RnJvbVN0cmluZwEFCGFzc2V0T3V0CQBlAgUObHBCYWxhbmNlQWZ0ZXIFD2xwQmFsYW5jZUJlZm9yZQUDbmlsAwkAAAIFBmZyb21MUAUGZnJvbUxQBBRhc3NldE91dEJhbGFuY2VBZnRlcgkBDmN1cnJlbnRCYWxhbmNlAQUIYXNzZXRPdXQDCQAAAgUUYXNzZXRPdXRCYWxhbmNlQWZ0ZXIFFGFzc2V0T3V0QmFsYW5jZUFmdGVyBA9hbW91bnRUb1JlY2VpdmUJAGUCBRRhc3NldE91dEJhbGFuY2VBZnRlcgUVYXNzZXRPdXRCYWxhbmNlQmVmb3JlAwkAZgIFDG1pblRvUmVjZWl2ZQUPYW1vdW50VG9SZWNlaXZlCQACAQItRXhwZWN0ZWQgYW1vdW50IHJlY2VpdmVkIGlzIGxlc3MgdGhhbiBtaW5pbXVtCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUPYW1vdW50VG9SZWNlaXZlCQEPYXNzZXRGcm9tU3RyaW5nAQUIYXNzZXRPdXQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgCkkKQF", "height": 3354205, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CJHmg2S9waJ5Pj4jnmsLgSD9v7Q9aUx1wVzrbQrPN6j7 Next: 2Jz1fSwBYhj6pqadMZSVHaz3EhBBbFjEDk4P1P2e86m9 Diff:
OldNewDifferences
108108 else throw("Invalid function parameter")
109109 }
110110 else throw("neutrino recap swaps require parameters")
111- else throw("Invalid swap type")
111+ else if ((swapType == "wxstable"))
112+ then if ((size(dappConfig) == 3))
113+ then {
114+ let extraParams = parseParams(dappConfig[2])
115+ let wxSwapType = extraParams[0]
116+ if ((wxSwapType == "swap"))
117+ then invoke(this, "wxStableSwapProxy", [dappAddress, 1], [payment])
118+ else if ((wxSwapType == "toLP"))
119+ then invoke(dappAddress, "putOneTknV2", [1, false], [payment])
120+ else if ((wxSwapType == "fromLP"))
121+ then invoke(dappAddress, "getOneTknV2", [outAsset, 1], [payment])
122+ else throw("invalid wx swap type")
123+ }
124+ else throw("wx stable swaps require parameters")
125+ else throw("Invalid swap type")
112126 }
113127
114128
177191
178192
179193 @Callable(i)
180-func swap (minToReceive,routes) = {
181- let payment = i.payments[0]
182- let paymentFromRoutes = {
183- let $l = routes
184- let $s = size($l)
185- let $acc0 = 0
186- func $f0_1 ($a,$i) = if (($i >= $s))
187- then $a
188- else calculatedAmountIn($a, $l[$i])
194+func swap (minToReceive,routes) = if ((size(i.payments) != 1))
195+ then throw("One payment expected")
196+ else {
197+ let payment = i.payments[0]
198+ let paymentFromRoutes = {
199+ let $l = routes
200+ let $s = size($l)
201+ let $acc0 = 0
202+ func $f0_1 ($a,$i) = if (($i >= $s))
203+ then $a
204+ else calculatedAmountIn($a, $l[$i])
189205
190- func $f0_2 ($a,$i) = if (($i >= $s))
191- then $a
192- else throw("List size exceeds 4")
206+ func $f0_2 ($a,$i) = if (($i >= $s))
207+ then $a
208+ else throw("List size exceeds 4")
193209
194- $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
210+ $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
211+ }
212+ if ((payment.amount == paymentFromRoutes))
213+ then {
214+ let routeResults = {
215+ let $l = routes
216+ let $s = size($l)
217+ let $acc0 = nil
218+ func $f1_1 ($a,$i) = if (($i >= $s))
219+ then $a
220+ else executeAllRoutes($a, $l[$i])
221+
222+ func $f1_2 ($a,$i) = if (($i >= $s))
223+ then $a
224+ else throw("List size exceeds 4")
225+
226+ $f1_2($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4)
227+ }
228+ let outData = {
229+ let $l = routeResults
230+ let $s = size($l)
231+ let $acc0 = $Tuple2(0, "")
232+ func $f2_1 ($a,$i) = if (($i >= $s))
233+ then $a
234+ else combineResults($a, $l[$i])
235+
236+ func $f2_2 ($a,$i) = if (($i >= $s))
237+ then $a
238+ else throw("List size exceeds 4")
239+
240+ $f2_2($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4)
241+ }
242+ let outAssetAmount = outData._1
243+ let outAssetId = outData._2
244+ let feeAmount = calculateFeeAmount(outAssetAmount)
245+ let amountToReceive = (outAssetAmount - feeAmount)
246+ if ((minToReceive > amountToReceive))
247+ then throw("Expected amount received is less than minimum")
248+ else [ScriptTransfer(i.caller, amountToReceive, assetFromString(outAssetId))]
249+ }
250+ else throw("Payment amount is not equal to total payment designated in routes")
195251 }
196- if ((payment.amount == paymentFromRoutes))
197- then {
198- let routeResults = {
199- let $l = routes
200- let $s = size($l)
201- let $acc0 = nil
202- func $f1_1 ($a,$i) = if (($i >= $s))
203- then $a
204- else executeAllRoutes($a, $l[$i])
205252
206- func $f1_2 ($a,$i) = if (($i >= $s))
207- then $a
208- else throw("List size exceeds 4")
209253
210- $f1_2($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4)
254+
255+@Callable(i)
256+func wxStableSwapProxy (contract,minToReceive) = if ((size(i.payments) != 1))
257+ then throw("One payment expected")
258+ else {
259+ let payment = i.payments[0]
260+ let assetIn = stringFromAsset(payment.assetId)
261+ let dappAddress = addressFromStringValue(contract)
262+ let amountAsset = getStringValue(dappAddress, "%s__amountAsset")
263+ let priceAsset = getStringValue(dappAddress, "%s__priceAsset")
264+ let assetOut = if ((assetIn == amountAsset))
265+ then priceAsset
266+ else amountAsset
267+ let factoryContract = addressFromStringValue(getStringValue("%s__factoryContract"))
268+ let lpAsset = getStringValue(factoryContract, (("%s%s%s__" + contract) + "__mappings__poolContract2LpAsset"))
269+ let lpBalanceBefore = currentBalance(lpAsset)
270+ if ((lpBalanceBefore == lpBalanceBefore))
271+ then {
272+ let toLP = invoke(dappAddress, "putOneTknV2", [1000000000, false], [payment])
273+ if ((toLP == toLP))
274+ then {
275+ let lpBalanceAfter = currentBalance(lpAsset)
276+ if ((lpBalanceAfter == lpBalanceAfter))
277+ then {
278+ let assetOutBalanceBefore = currentBalance(assetOut)
279+ if ((assetOutBalanceBefore == assetOutBalanceBefore))
280+ then {
281+ let fromLP = invoke(dappAddress, "getOneTknV2", [assetOut, 1], [AttachedPayment(assetFromString(assetOut), (lpBalanceAfter - lpBalanceBefore))])
282+ if ((fromLP == fromLP))
283+ then {
284+ let assetOutBalanceAfter = currentBalance(assetOut)
285+ if ((assetOutBalanceAfter == assetOutBalanceAfter))
286+ then {
287+ let amountToReceive = (assetOutBalanceAfter - assetOutBalanceBefore)
288+ if ((minToReceive > amountToReceive))
289+ then throw("Expected amount received is less than minimum")
290+ else [ScriptTransfer(i.caller, amountToReceive, assetFromString(assetOut))]
291+ }
292+ else throw("Strict value is not equal to itself.")
293+ }
294+ else throw("Strict value is not equal to itself.")
295+ }
296+ else throw("Strict value is not equal to itself.")
297+ }
298+ else throw("Strict value is not equal to itself.")
299+ }
300+ else throw("Strict value is not equal to itself.")
211301 }
212- let outData = {
213- let $l = routeResults
214- let $s = size($l)
215- let $acc0 = $Tuple2(0, "")
216- func $f2_1 ($a,$i) = if (($i >= $s))
217- then $a
218- else combineResults($a, $l[$i])
219-
220- func $f2_2 ($a,$i) = if (($i >= $s))
221- then $a
222- else throw("List size exceeds 4")
223-
224- $f2_2($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4)
225- }
226- let outAssetAmount = outData._1
227- let outAssetId = outData._2
228- let feeAmount = calculateFeeAmount(outAssetAmount)
229- let amountToReceive = (outAssetAmount - feeAmount)
230- if ((minToReceive > amountToReceive))
231- then throw("Expected amount received is less than minimum")
232- else [ScriptTransfer(i.caller, amountToReceive, assetFromString(outAssetId))]
233- }
234- else throw("Payment amount is not equal to total payment designated in routes")
235- }
302+ else throw("Strict value is not equal to itself.")
303+ }
236304
237305
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getBinaryDefault (addressOrAlias,key,val) = valueOrElse(getBinary(addressOrAlias, key), val)
55
66
77 func getBinarySelfDefault (key,val) = valueOrElse(getBinary(key), val)
88
99
1010 func getBooleanDefault (addressOrAlias,key,val) = valueOrElse(getBoolean(addressOrAlias, key), val)
1111
1212
1313 func getBooleanSelfDefault (key,val) = valueOrElse(getBoolean(key), val)
1414
1515
1616 func getIntegerDefault (addressOrAlias,key,val) = valueOrElse(getInteger(addressOrAlias, key), val)
1717
1818
1919 func getIntegerSelfDefault (key,val) = valueOrElse(getInteger(key), val)
2020
2121
2222 func getStringDefault (addressOrAlias,key,val) = valueOrElse(getString(addressOrAlias, key), val)
2323
2424
2525 func getStringSelfDefault (key,val) = valueOrElse(getString(key), val)
2626
2727
2828 func assetFromString (assetId) = if ((assetId == "WAVES"))
2929 then unit
3030 else fromBase58String(assetId)
3131
3232
3333 func stringFromAsset (asset) = match asset {
3434 case t: ByteVector =>
3535 toBase58String(t)
3636 case _ =>
3737 "WAVES"
3838 }
3939
4040
4141 func currentBalance (assetId) = {
4242 let asset = assetFromString(assetId)
4343 match asset {
4444 case w: Unit =>
4545 wavesBalance(this).available
4646 case _ =>
4747 assetBalance(this, value(asset))
4848 }
4949 }
5050
5151
5252 func calculateFeeAmount (amount) = {
5353 let fee = match getInteger("fee") {
5454 case _: Unit =>
5555 0
5656 case f =>
5757 f
5858 }
5959 fraction(amount, fee, 10000)
6060 }
6161
6262
6363 func parseParams (params) = split(params, "&")
6464
6565
6666 func makeCall (inAmount,params) = {
6767 let parts = split(params, ":")
6868 let inAsset = parts[0]
6969 let outAsset = parts[1]
7070 let dappConfig = split(parts[2], "=")
7171 let swapType = dappConfig[0]
7272 let dappAddress = addressFromStringValue(dappConfig[1])
7373 let payment = AttachedPayment(assetFromString(inAsset), inAmount)
7474 if ((swapType == "puzzle"))
7575 then invoke(dappAddress, "swap", [outAsset, 1], [payment])
7676 else if ((swapType == "swop"))
7777 then if ((size(dappConfig) == 3))
7878 then {
7979 let extraParams = parseParams(dappConfig[2])
8080 invoke(dappAddress, "exchange", [parseIntValue(extraParams[0]), parseIntValue(extraParams[1])], [payment])
8181 }
8282 else invoke(dappAddress, "exchange", [1], [payment])
8383 else if ((swapType == "cf"))
8484 then invoke(dappAddress, "provideLiquidity", nil, [payment])
8585 else if ((swapType == "heraclituswx"))
8686 then if ((size(dappConfig) == 3))
8787 then {
8888 let extraParams = parseParams(dappConfig[2])
8989 invoke(dappAddress, extraParams[0], nil, [payment])
9090 }
9191 else throw("heraclitus wx swaps require parameters")
9292 else if ((swapType == "heraclitustci"))
9393 then if ((size(dappConfig) == 3))
9494 then {
9595 let extraParams = parseParams(dappConfig[2])
9696 invoke(dappAddress, extraParams[0], nil, [payment])
9797 }
9898 else throw("heraclitus tci swaps require parameters")
9999 else if ((swapType == "neutrinorecap"))
100100 then if ((size(dappConfig) == 3))
101101 then {
102102 let extraParams = parseParams(dappConfig[2])
103103 let dappFunc = extraParams[0]
104104 if ((dappFunc == "buyNsbt"))
105105 then invoke(dappAddress, dappFunc, nil, [payment])
106106 else if ((dappFunc == "buySurf"))
107107 then invoke(dappAddress, dappFunc, [parseIntValue(extraParams[1]), parseIntValue(extraParams[2]), false], [payment])
108108 else throw("Invalid function parameter")
109109 }
110110 else throw("neutrino recap swaps require parameters")
111- else throw("Invalid swap type")
111+ else if ((swapType == "wxstable"))
112+ then if ((size(dappConfig) == 3))
113+ then {
114+ let extraParams = parseParams(dappConfig[2])
115+ let wxSwapType = extraParams[0]
116+ if ((wxSwapType == "swap"))
117+ then invoke(this, "wxStableSwapProxy", [dappAddress, 1], [payment])
118+ else if ((wxSwapType == "toLP"))
119+ then invoke(dappAddress, "putOneTknV2", [1, false], [payment])
120+ else if ((wxSwapType == "fromLP"))
121+ then invoke(dappAddress, "getOneTknV2", [outAsset, 1], [payment])
122+ else throw("invalid wx swap type")
123+ }
124+ else throw("wx stable swaps require parameters")
125+ else throw("Invalid swap type")
112126 }
113127
114128
115129 func getRouteResult (currentResult,nextRoute) = {
116130 let outAsset = split(nextRoute, ":")[1]
117131 if ((outAsset == outAsset))
118132 then {
119133 let balanceBefore = currentBalance(outAsset)
120134 if ((balanceBefore == balanceBefore))
121135 then {
122136 let result = makeCall(currentResult._1, nextRoute)
123137 if ((result == result))
124138 then {
125139 let balanceAfter = currentBalance(outAsset)
126140 if ((balanceAfter == balanceAfter))
127141 then $Tuple2((balanceAfter - balanceBefore), outAsset)
128142 else throw("Strict value is not equal to itself.")
129143 }
130144 else throw("Strict value is not equal to itself.")
131145 }
132146 else throw("Strict value is not equal to itself.")
133147 }
134148 else throw("Strict value is not equal to itself.")
135149 }
136150
137151
138152 func executeRoute (route) = {
139153 let parts = split(route, "|")
140154 let inAmount = parseIntValue(parts[0])
141155 let scriptConfigs = split(parts[1], ",")
142156 let $l = scriptConfigs
143157 let $s = size($l)
144158 let $acc0 = $Tuple2(inAmount, "")
145159 func $f0_1 ($a,$i) = if (($i >= $s))
146160 then $a
147161 else getRouteResult($a, $l[$i])
148162
149163 func $f0_2 ($a,$i) = if (($i >= $s))
150164 then $a
151165 else throw("List size exceeds 3")
152166
153167 $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3)
154168 }
155169
156170
157171 func combineResults (currentAssetData,nextRouteResult) = {
158172 let currentAmount = currentAssetData._1
159173 let currentAssetId = currentAssetData._2
160174 let additionalAmount = nextRouteResult._1
161175 let assetId = nextRouteResult._2
162176 if ((currentAssetId == ""))
163177 then $Tuple2((currentAmount + additionalAmount), assetId)
164178 else if ((currentAssetId == assetId))
165179 then $Tuple2((currentAmount + additionalAmount), assetId)
166180 else throw("Resulting assets are not the same")
167181 }
168182
169183
170184 func executeAllRoutes (results,nextRoute) = {
171185 let routeResult = executeRoute(nextRoute)
172186 (results :+ routeResult)
173187 }
174188
175189
176190 func calculatedAmountIn (total,route) = (total + parseIntValue(split(route, "|")[0]))
177191
178192
179193 @Callable(i)
180-func swap (minToReceive,routes) = {
181- let payment = i.payments[0]
182- let paymentFromRoutes = {
183- let $l = routes
184- let $s = size($l)
185- let $acc0 = 0
186- func $f0_1 ($a,$i) = if (($i >= $s))
187- then $a
188- else calculatedAmountIn($a, $l[$i])
194+func swap (minToReceive,routes) = if ((size(i.payments) != 1))
195+ then throw("One payment expected")
196+ else {
197+ let payment = i.payments[0]
198+ let paymentFromRoutes = {
199+ let $l = routes
200+ let $s = size($l)
201+ let $acc0 = 0
202+ func $f0_1 ($a,$i) = if (($i >= $s))
203+ then $a
204+ else calculatedAmountIn($a, $l[$i])
189205
190- func $f0_2 ($a,$i) = if (($i >= $s))
191- then $a
192- else throw("List size exceeds 4")
206+ func $f0_2 ($a,$i) = if (($i >= $s))
207+ then $a
208+ else throw("List size exceeds 4")
193209
194- $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
210+ $f0_2($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4)
211+ }
212+ if ((payment.amount == paymentFromRoutes))
213+ then {
214+ let routeResults = {
215+ let $l = routes
216+ let $s = size($l)
217+ let $acc0 = nil
218+ func $f1_1 ($a,$i) = if (($i >= $s))
219+ then $a
220+ else executeAllRoutes($a, $l[$i])
221+
222+ func $f1_2 ($a,$i) = if (($i >= $s))
223+ then $a
224+ else throw("List size exceeds 4")
225+
226+ $f1_2($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4)
227+ }
228+ let outData = {
229+ let $l = routeResults
230+ let $s = size($l)
231+ let $acc0 = $Tuple2(0, "")
232+ func $f2_1 ($a,$i) = if (($i >= $s))
233+ then $a
234+ else combineResults($a, $l[$i])
235+
236+ func $f2_2 ($a,$i) = if (($i >= $s))
237+ then $a
238+ else throw("List size exceeds 4")
239+
240+ $f2_2($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4)
241+ }
242+ let outAssetAmount = outData._1
243+ let outAssetId = outData._2
244+ let feeAmount = calculateFeeAmount(outAssetAmount)
245+ let amountToReceive = (outAssetAmount - feeAmount)
246+ if ((minToReceive > amountToReceive))
247+ then throw("Expected amount received is less than minimum")
248+ else [ScriptTransfer(i.caller, amountToReceive, assetFromString(outAssetId))]
249+ }
250+ else throw("Payment amount is not equal to total payment designated in routes")
195251 }
196- if ((payment.amount == paymentFromRoutes))
197- then {
198- let routeResults = {
199- let $l = routes
200- let $s = size($l)
201- let $acc0 = nil
202- func $f1_1 ($a,$i) = if (($i >= $s))
203- then $a
204- else executeAllRoutes($a, $l[$i])
205252
206- func $f1_2 ($a,$i) = if (($i >= $s))
207- then $a
208- else throw("List size exceeds 4")
209253
210- $f1_2($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4)
254+
255+@Callable(i)
256+func wxStableSwapProxy (contract,minToReceive) = if ((size(i.payments) != 1))
257+ then throw("One payment expected")
258+ else {
259+ let payment = i.payments[0]
260+ let assetIn = stringFromAsset(payment.assetId)
261+ let dappAddress = addressFromStringValue(contract)
262+ let amountAsset = getStringValue(dappAddress, "%s__amountAsset")
263+ let priceAsset = getStringValue(dappAddress, "%s__priceAsset")
264+ let assetOut = if ((assetIn == amountAsset))
265+ then priceAsset
266+ else amountAsset
267+ let factoryContract = addressFromStringValue(getStringValue("%s__factoryContract"))
268+ let lpAsset = getStringValue(factoryContract, (("%s%s%s__" + contract) + "__mappings__poolContract2LpAsset"))
269+ let lpBalanceBefore = currentBalance(lpAsset)
270+ if ((lpBalanceBefore == lpBalanceBefore))
271+ then {
272+ let toLP = invoke(dappAddress, "putOneTknV2", [1000000000, false], [payment])
273+ if ((toLP == toLP))
274+ then {
275+ let lpBalanceAfter = currentBalance(lpAsset)
276+ if ((lpBalanceAfter == lpBalanceAfter))
277+ then {
278+ let assetOutBalanceBefore = currentBalance(assetOut)
279+ if ((assetOutBalanceBefore == assetOutBalanceBefore))
280+ then {
281+ let fromLP = invoke(dappAddress, "getOneTknV2", [assetOut, 1], [AttachedPayment(assetFromString(assetOut), (lpBalanceAfter - lpBalanceBefore))])
282+ if ((fromLP == fromLP))
283+ then {
284+ let assetOutBalanceAfter = currentBalance(assetOut)
285+ if ((assetOutBalanceAfter == assetOutBalanceAfter))
286+ then {
287+ let amountToReceive = (assetOutBalanceAfter - assetOutBalanceBefore)
288+ if ((minToReceive > amountToReceive))
289+ then throw("Expected amount received is less than minimum")
290+ else [ScriptTransfer(i.caller, amountToReceive, assetFromString(assetOut))]
291+ }
292+ else throw("Strict value is not equal to itself.")
293+ }
294+ else throw("Strict value is not equal to itself.")
295+ }
296+ else throw("Strict value is not equal to itself.")
297+ }
298+ else throw("Strict value is not equal to itself.")
299+ }
300+ else throw("Strict value is not equal to itself.")
211301 }
212- let outData = {
213- let $l = routeResults
214- let $s = size($l)
215- let $acc0 = $Tuple2(0, "")
216- func $f2_1 ($a,$i) = if (($i >= $s))
217- then $a
218- else combineResults($a, $l[$i])
219-
220- func $f2_2 ($a,$i) = if (($i >= $s))
221- then $a
222- else throw("List size exceeds 4")
223-
224- $f2_2($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4)
225- }
226- let outAssetAmount = outData._1
227- let outAssetId = outData._2
228- let feeAmount = calculateFeeAmount(outAssetAmount)
229- let amountToReceive = (outAssetAmount - feeAmount)
230- if ((minToReceive > amountToReceive))
231- then throw("Expected amount received is less than minimum")
232- else [ScriptTransfer(i.caller, amountToReceive, assetFromString(outAssetId))]
233- }
234- else throw("Payment amount is not equal to total payment designated in routes")
235- }
302+ else throw("Strict value is not equal to itself.")
303+ }
236304
237305

github/deemru/w8io/3ef1775 
35.83 ms