tx · DRBLYCxLW4PHy7YBZhkUcrfmMcjeiCKHwNDpLzKY8fUw

3N4kXZHGke6yRq3Z57q7BTgCrT2SCvQCYER:  -0.01400000 Waves

2022.12.06 12:51 [2348324] smart account 3N4kXZHGke6yRq3Z57q7BTgCrT2SCvQCYER > SELF 0.00000000 Waves

{ "type": 13, "id": "DRBLYCxLW4PHy7YBZhkUcrfmMcjeiCKHwNDpLzKY8fUw", "fee": 1400000, "feeAssetId": null, "timestamp": 1670320194419, "version": 2, "chainId": 84, "sender": "3N4kXZHGke6yRq3Z57q7BTgCrT2SCvQCYER", "senderPublicKey": "6sxdMr2xYPPACEJccwmgS7nWC2ez1c38Y1kDX49ne42b", "proofs": [ "3Mkqh344sxnjPRaRaEHmpgY9EjYdPSRprDfZYAjTS7ZjarQV1LnaDSJsqUR3ZK3CYNErYZpeqyiAhTUQUjUYQ3ne" ], "script": "base64:BgIvCAISBgoECAgICBIAEgASABIECgIBARIAEgMKAQgSAwoBCBIECgIBARIFCgMICAgiAAlTRVBBUkFUT1ICAl9fAAVXQVZFUwIFV0FWRVMADEtFWV9NVUxUSVNJRwIITVVMVElTSUcACktFWV9TVEFUVVMCBlNUQVRVUwAOS0VZX0JBU0VfQVNTRVQCCkJBU0VfQVNTRVQACUtFWV9BU1NFVAIFQVNTRVQAE0tFWV9TVEFLSU5HX0FEQVBURVICD1NUQUtJTkdfQURBUFRFUgASS0VZX1NUQUtJTkdfQU1PVU5UAg5TVEFLSU5HX0FNT1VOVAANS0VZX0xBU1RfUkFURQIJTEFTVF9SQVRFABBLRVlfQ1VSUkVOVF9SQVRFAgxDVVJSRU5UX1JBVEUAD0tFWV9MQVNUX0hFSUdIVAILTEFTVF9IRUlHSFQAEUtFWV9UQVJHRVRfSEVJR0hUAg1UQVJHRVRfSEVJR0hUABdLRVlfU1BPTlNPUlNISVBfTUFOQUdFUgITU1BPTlNPUlNISVBfTUFOQUdFUgAKRlVOQ19TVEFLRQIFc3Rha2UADEZVTkNfVU5TVEFLRQIHdW5zdGFrZQARRlVOQ19DTEFJTV9SRVdBUkQCC2NsYWltUmV3YXJkAA5QRVJDRU5UX0ZBQ1RPUgkAtgIBAICglKWNHQALWkVST19CSUdJTlQJALYCAQAAAApPTkVfQklHSU5UCQC2AgEAAQALSU5JVF9BTU9VTlQAgMLXLwEQX3ZhbGlkYXRlQWRkcmVzcwEIYWRkcmVzc18EByRtYXRjaDAJAKYIAQUIYWRkcmVzc18DCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAYHAQ5fdmFsaWRhdGVBc3NldAEGYXNzZXRfAwkAAAIFBmFzc2V0XwUFV0FWRVMGBAckbWF0Y2gwCQDsBwEJANkEAQUGYXNzZXRfAwkAAQIFByRtYXRjaDACBUFzc2V0BAFhBQckbWF0Y2gwBgcBDl90b0Fzc2V0VmVjdG9yAQZhc3NldF8DCQAAAgUGYXNzZXRfBQVXQVZFUwUEdW5pdAkA2QQBBQZhc3NldF8BEV9nZXRBc3NldERlY2ltYWxzAQZhc3NldF8EByRtYXRjaDAFBmFzc2V0XwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwBAckbWF0Y2gxCQDsBwEFAWEDCQABAgUHJG1hdGNoMQIFQXNzZXQEBWFzc2V0BQckbWF0Y2gxCAUFYXNzZXQIZGVjaW1hbHMJAAIBAiBfZ2V0QXNzZXREZWNpbWFsczogbm8gc3VjaCBhc3NldAAIARFfZ2V0QXNzZXRRdWFudGl0eQEGYXNzZXRfBAckbWF0Y2gwCQDsBwEFBmFzc2V0XwMJAAECBQckbWF0Y2gwAgVBc3NldAQBYQUHJG1hdGNoMAgFAWEIcXVhbnRpdHkJAAIBAiBfZ2V0QXNzZXRRdWFudGl0eTogbm8gc3VjaCBhc3NldAEQX2dldEFzc2V0QmFsYW5jZQIGYXNzZXRfB2FkZHJlc3MEByRtYXRjaDAFBmFzc2V0XwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwCQDwBwIFB2FkZHJlc3MFAWEICQDvBwEFB2FkZHJlc3MHcmVndWxhcgEOX2xvYWRCYXNlQXNzZXQABAckbWF0Y2gwCQCiCAEFDktFWV9CQVNFX0FTU0VUAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAMJAAACBQFhBQVXQVZFUwUEdW5pdAkA2QQBBQFhCQACAQIdX2xvYWRCYXNlQXNzZXQ6IG5vIGJhc2UgYXNzZXQBE19sb2FkU3Rha2luZ0FkYXB0ZXIABAckbWF0Y2gwCQCiCAEFE0tFWV9TVEFLSU5HX0FEQVBURVIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQACAQInX2xvYWRTdGFraW5nQWRhcHRlcjogbm8gc3Rha2luZyBhZGFwdGVyARdfbG9hZFNwb25zb3JzaGlwTWFuYWdlcgAEByRtYXRjaDAJAKIIAQUXS0VZX1NQT05TT1JTSElQX01BTkFHRVIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFhCQACAQIvX2xvYWRTcG9uc29yc2hpcE1hbmFnZXI6IG5vIHNwb25zb3JzaGlwIG1hbmFnZXIBCF9sb2FkSW50AgRrZXlfCGRlZmF1bHRfBAckbWF0Y2gwCQCfCAEFBGtleV8DCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhBQhkZWZhdWx0XwELX2xvYWRCaWdJbnQCBGtleV8IZGVmYXVsdF8EByRtYXRjaDAJAKEIAQUEa2V5XwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwCQCeAwEFAWEFCGRlZmF1bHRfAQpfbG9hZEFzc2V0AAQHJG1hdGNoMAkAoggBBQlLRVlfQVNTRVQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwCQDZBAEFAWEBAAEOX3VwZGF0ZVN0YWtpbmcDBmFzc2V0XwdhbW91bnRfCGFkYXB0ZXJfBA1zdGFraW5nQW1vdW50CQEIX2xvYWRJbnQCBRJLRVlfU1RBS0lOR19BTU9VTlQAAAQQbmV3U3Rha2luZ0Ftb3VudAkAZAIFDXN0YWtpbmdBbW91bnQFB2Ftb3VudF8ECmludm9jYXRpb24DCQBmAgUHYW1vdW50XwAACQD8BwQFCGFkYXB0ZXJfBQpGVU5DX1NUQUtFBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBmFzc2V0XwUHYW1vdW50XwUDbmlsCQD8BwQFCGFkYXB0ZXJfBQxGVU5DX1VOU1RBS0UJAMwIAgkAaAIA////////////AQUHYW1vdW50XwUDbmlsBQNuaWwDCQAAAgUKaW52b2NhdGlvbgUKaW52b2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSS0VZX1NUQUtJTkdfQU1PVU5UBRBuZXdTdGFraW5nQW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC19jaGVja3BvaW50AQxjb21wZW5zYXRpb24ECmludm9jYXRpb24JAPwHBAkBE19sb2FkU3Rha2luZ0FkYXB0ZXIABRFGVU5DX0NMQUlNX1JFV0FSRAUDbmlsBQNuaWwDCQAAAgUKaW52b2NhdGlvbgUKaW52b2NhdGlvbgQHJG1hdGNoMAUKaW52b2NhdGlvbgMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEBnJld2FyZAUHJG1hdGNoMAMFDGNvbXBlbnNhdGlvbgQFc3Rha2UJAPwHBAUEdGhpcwUKRlVOQ19TVEFLRQkAzAgCCAUGcmV3YXJkAl8xCQDMCAIIBQZyZXdhcmQCXzMFA25pbAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQkAlAoCBggFBnJld2FyZAJfMgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQFc3Rha2UJAPwHBAUEdGhpcwUKRlVOQ19TVEFLRQkAzAgCCQBkAggFBnJld2FyZAJfMQgFBnJld2FyZAJfMgkAzAgCCAUGcmV3YXJkAl8zBQNuaWwFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UJAJQKAgYAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBwAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCgFpAQRpbml0BAp0b2tlbk5hbWVfC3Rva2VuRGVzY3JfCmJhc2VBc3NldF8Pc3Rha2luZ0FkYXB0ZXJfBAhtdWx0aXNpZwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEFDEtFWV9NVUxUSVNJRwIVaW5pdDogbm8gbXVsdGlzaWcgc2V0BAVhc3NldAkBCl9sb2FkQXNzZXQABAliYXNlQXNzZXQJAQ5fdG9Bc3NldFZlY3RvcgEFCmJhc2VBc3NldF8EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECF2luaXQ6IHBlcm1pc3Npb24gZGVuaWVkAwkBAiE9AgUFYXNzZXQBAAkAAgECGWluaXQ6IGFscmVhZHkgaW5pdGlhbGl6ZWQDAwkAZgIABAkAsQIBBQp0b2tlbk5hbWVfBgkAZgIJALECAQUKdG9rZW5OYW1lXwAQCQACAQIYaW5pdDogaW52YWxpZCB0b2tlbiBuYW1lAwkAZgIJALECAQULdG9rZW5EZXNjcl8A6AcJAAIBAh9pbml0OiBpbnZhbGlkIHRva2VuIGRlc2NyaXB0aW9uAwkBASEBCQEOX3ZhbGlkYXRlQXNzZXQBBQpiYXNlQXNzZXRfCQACAQIYaW5pdDogaW52YWxpZCBiYXNlIGFzc2V0AwkBASEBCQEQX3ZhbGlkYXRlQWRkcmVzcwEFD3N0YWtpbmdBZGFwdGVyXwkAAgECHWluaXQ6IGludmFsaWQgc3Rha2luZyBhZGFwdGVyBQR1bml0AwkAAAIFA2VycgUDZXJyBA10b2tlbkRlY2ltYWxzCQERX2dldEFzc2V0RGVjaW1hbHMBBQliYXNlQXNzZXQEBWlzc3VlCQDCCAUFCnRva2VuTmFtZV8FC3Rva2VuRGVzY3JfBQtJTklUX0FNT1VOVAUNdG9rZW5EZWNpbWFscwYEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDHN0YWtlQWN0aW9ucwkBDl91cGRhdGVTdGFraW5nAwUJYmFzZUFzc2V0BQtJTklUX0FNT1VOVAkBEUBleHRyTmF0aXZlKDEwNjIpAQUPc3Rha2luZ0FkYXB0ZXJfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQ5LRVlfQkFTRV9BU1NFVAUKYmFzZUFzc2V0XwkAzAgCCQELU3RyaW5nRW50cnkCBRNLRVlfU1RBS0lOR19BREFQVEVSBQ9zdGFraW5nQWRhcHRlcl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUJS0VZX0FTU0VUCQDYBAEFB2Fzc2V0SWQJAMwIAgUFaXNzdWUFA25pbAUMc3Rha2VBY3Rpb25zBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2dldFJhdGUABAhsYXN0UmF0ZQkBC19sb2FkQmlnSW50AgUNS0VZX0xBU1RfUkFURQUOUEVSQ0VOVF9GQUNUT1IEC2N1cnJlbnRSYXRlCQELX2xvYWRCaWdJbnQCBRBLRVlfQ1VSUkVOVF9SQVRFBQtaRVJPX0JJR0lOVAQKbGFzdEhlaWdodAkBCF9sb2FkSW50AgUPS0VZX0xBU1RfSEVJR0hUAAAEDHRhcmdldEhlaWdodAkAlwMBCQDMCAIJAQhfbG9hZEludAIFEUtFWV9UQVJHRVRfSEVJR0hUAAAJAMwIAgUGaGVpZ2h0BQNuaWwEBHJhdGUJALcCAgUIbGFzdFJhdGUJALkCAgULY3VycmVudFJhdGUJALYCAQkAZQIFDHRhcmdldEhlaWdodAUKbGFzdEhlaWdodAkAlAoCBQNuaWwJAKYDAQUEcmF0ZQFpAQpjaGVja3BvaW50AAQKY2hlY2twb2ludAkBC19jaGVja3BvaW50AQYDCQAAAgUKY2hlY2twb2ludAUKY2hlY2twb2ludAMJAQEhAQgFCmNoZWNrcG9pbnQCXzEJAAIBAhVjaGVja3BvaW50OiBubyByZXdhcmQDCQBmAggFCmNoZWNrcG9pbnQCXzIAAAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpDG9yaWdpbkNhbGxlcggFCmNoZWNrcG9pbnQCXzIJAQ5fbG9hZEJhc2VBc3NldAAFA25pbAUEdW5pdAkAlAoCBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHZGVwb3NpdAAEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIECWJhc2VBc3NldAkBDl9sb2FkQmFzZUFzc2V0AAQFYXNzZXQJAQpfbG9hZEFzc2V0AAQNYXNzZXRRdWFudGl0eQkAtgIBCQERX2dldEFzc2V0UXVhbnRpdHkBBQVhc3NldAQDZXJyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIUZGVwb3NpdDogbm8gcGF5bWVudHMDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFCWJhc2VBc3NldAkAAgECJWRlcG9zaXQ6IHBheW1lbnQgaXMgbm90IGluIGJhc2UgYXNzZXQDCQBnAgAACAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECH2RlcG9zaXQ6IGludmFsaWQgcGF5bWVudCBhbW91bnQFBHVuaXQDCQAAAgUDZXJyBQNlcnIECmNoZWNrcG9pbnQJAQtfY2hlY2twb2ludAEHAwkAAAIFCmNoZWNrcG9pbnQFCmNoZWNrcG9pbnQECGxhc3RSYXRlCQELX2xvYWRCaWdJbnQCBQ1LRVlfTEFTVF9SQVRFBQ5QRVJDRU5UX0ZBQ1RPUgQLY3VycmVudFJhdGUJAQtfbG9hZEJpZ0ludAIFEEtFWV9DVVJSRU5UX1JBVEUFC1pFUk9fQklHSU5UBApsYXN0SGVpZ2h0CQEIX2xvYWRJbnQCBQ9LRVlfTEFTVF9IRUlHSFQAAAQMdGFyZ2V0SGVpZ2h0CQCXAwEJAMwIAgkBCF9sb2FkSW50AgURS0VZX1RBUkdFVF9IRUlHSFQAAAkAzAgCBQZoZWlnaHQFA25pbAQPbGFzdFJhdGVVcGRhdGVkCQC3AgIFCGxhc3RSYXRlCQC5AgIFC2N1cnJlbnRSYXRlCQC2AgEJAGUCBQx0YXJnZXRIZWlnaHQFCmxhc3RIZWlnaHQEC2lzc3VlQW1vdW50CQCgAwEJAL0CBAkAtgIBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUOUEVSQ0VOVF9GQUNUT1IFD2xhc3RSYXRlVXBkYXRlZAUFRkxPT1IEEmN1cnJlbnRSYXRlVXBkYXRlZAkAvQIEBQtjdXJyZW50UmF0ZQUNYXNzZXRRdWFudGl0eQkAtwICBQ1hc3NldFF1YW50aXR5CQC2AgEFC2lzc3VlQW1vdW50BQVGTE9PUgQRbGFzdEhlaWdodFVwZGF0ZWQFDHRhcmdldEhlaWdodAQMc3Rha2VBY3Rpb25zCQEOX3VwZGF0ZVN0YWtpbmcDBQliYXNlQXNzZXQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQETX2xvYWRTdGFraW5nQWRhcHRlcgAJAJQKAgkAzggCCQDMCAIJAQdSZWlzc3VlAwUFYXNzZXQFC2lzc3VlQW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2lzc3VlQW1vdW50BQVhc3NldAkAzAgCCQELQmluYXJ5RW50cnkCBQ1LRVlfTEFTVF9SQVRFCQCdAwEFD2xhc3RSYXRlVXBkYXRlZAkAzAgCCQELQmluYXJ5RW50cnkCBRBLRVlfQ1VSUkVOVF9SQVRFCQCdAwEFEmN1cnJlbnRSYXRlVXBkYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPS0VZX0xBU1RfSEVJR0hUBRFsYXN0SGVpZ2h0VXBkYXRlZAUDbmlsBQxzdGFrZUFjdGlvbnMFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFc3Rha2UCB2Ftb3VudF8Nc3ByZWFkQmxvY2tzXwQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgQJYmFzZUFzc2V0CQEOX2xvYWRCYXNlQXNzZXQABAVhc3NldAkBCl9sb2FkQXNzZXQABA1hc3NldFF1YW50aXR5CQC2AgEJARFfZ2V0QXNzZXRRdWFudGl0eQEFBWFzc2V0BANlcnIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhlzdGFrZTogb25seSB0aGlzIGNvbnRyYWN0AwkAZwIAAAUHYW1vdW50XwkAAgECG3N0YWtlOiBpbnZhbGlkIHN0YWtlIGFtb3VudAMJAGYCBQdhbW91bnRfCQEQX2dldEFzc2V0QmFsYW5jZQIFCWJhc2VBc3NldAUEdGhpcwkAAgECIHN0YWtlOiBpbnN1ZmZpY2llbnQgc3Rha2UgYW1vdW50AwkAAAIFDWFzc2V0UXVhbnRpdHkFC1pFUk9fQklHSU5UCQACAQIfc3Rha2U6IG5vIGRlcG9zaXRzIHRvIHN0YWtlIGZvcgUEdW5pdAMJAAACBQNlcnIFA2VycgQIbGFzdFJhdGUJAQtfbG9hZEJpZ0ludAIFDUtFWV9MQVNUX1JBVEUFDlBFUkNFTlRfRkFDVE9SBAtjdXJyZW50UmF0ZQkBC19sb2FkQmlnSW50AgUQS0VZX0NVUlJFTlRfUkFURQULWkVST19CSUdJTlQECmxhc3RIZWlnaHQJAQhfbG9hZEludAIFD0tFWV9MQVNUX0hFSUdIVAAABAx0YXJnZXRIZWlnaHQJAQhfbG9hZEludAIFEUtFWV9UQVJHRVRfSEVJR0hUAAAED21pblRhcmdldEhlaWdodAkAlwMBCQDMCAIFDHRhcmdldEhlaWdodAkAzAgCBQZoZWlnaHQFA25pbAQHYWN0aW9ucwMJAAACBQ9taW5UYXJnZXRIZWlnaHQFBmhlaWdodAQPbGFzdFJhdGVVcGRhdGVkCQC3AgIFCGxhc3RSYXRlCQC5AgIJALYCAQkAZQIFD21pblRhcmdldEhlaWdodAUKbGFzdEhlaWdodAULY3VycmVudFJhdGUED3JlbWFpbmluZ1Jld2FyZAkAuQICBQtjdXJyZW50UmF0ZQkAtgIBCQBlAgUMdGFyZ2V0SGVpZ2h0BQ9taW5UYXJnZXRIZWlnaHQEEmN1cnJlbnRSYXRlVXBkYXRlZAkAvAIDCQC3AgIJALkCAgkAtgIBBQdhbW91bnRfBQ5QRVJDRU5UX0ZBQ1RPUgUPcmVtYWluaW5nUmV3YXJkBQpPTkVfQklHSU5UCQC5AgIFDWFzc2V0UXVhbnRpdHkJALYCAQUNc3ByZWFkQmxvY2tzXwQRbGFzdEhlaWdodFVwZGF0ZWQFBmhlaWdodAQTdGFyZ2V0SGVpZ2h0VXBkYXRlZAkAZAIFEWxhc3RIZWlnaHRVcGRhdGVkBQ1zcHJlYWRCbG9ja3NfCQDMCAIJAQtCaW5hcnlFbnRyeQIFDUtFWV9MQVNUX1JBVEUJAJ0DAQUPbGFzdFJhdGVVcGRhdGVkCQDMCAIJAQtCaW5hcnlFbnRyeQIFEEtFWV9DVVJSRU5UX1JBVEUJAJ0DAQUSY3VycmVudFJhdGVVcGRhdGVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9LRVlfTEFTVF9IRUlHSFQFEWxhc3RIZWlnaHRVcGRhdGVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFLRVlfVEFSR0VUX0hFSUdIVAUTdGFyZ2V0SGVpZ2h0VXBkYXRlZAUDbmlsAwkAZgIFDHRhcmdldEhlaWdodAUKbGFzdEhlaWdodAQPbGFzdFJhdGVVcGRhdGVkCQC3AgIFCGxhc3RSYXRlCQC5AgIJALYCAQkAZQIFDHRhcmdldEhlaWdodAUKbGFzdEhlaWdodAULY3VycmVudFJhdGUEEmN1cnJlbnRSYXRlVXBkYXRlZAkAvAIDCQC2AgEFB2Ftb3VudF8FDlBFUkNFTlRfRkFDVE9SCQC5AgIFDWFzc2V0UXVhbnRpdHkJALYCAQUNc3ByZWFkQmxvY2tzXwQRbGFzdEhlaWdodFVwZGF0ZWQFBmhlaWdodAQTdGFyZ2V0SGVpZ2h0VXBkYXRlZAkAZAIFEWxhc3RIZWlnaHRVcGRhdGVkBQ1zcHJlYWRCbG9ja3NfCQDMCAIJAQtCaW5hcnlFbnRyeQIFDUtFWV9MQVNUX1JBVEUJAJ0DAQUPbGFzdFJhdGVVcGRhdGVkCQDMCAIJAQtCaW5hcnlFbnRyeQIFEEtFWV9DVVJSRU5UX1JBVEUJAJ0DAQUSY3VycmVudFJhdGVVcGRhdGVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9LRVlfTEFTVF9IRUlHSFQFEWxhc3RIZWlnaHRVcGRhdGVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFLRVlfVEFSR0VUX0hFSUdIVAUTdGFyZ2V0SGVpZ2h0VXBkYXRlZAUDbmlsBBJjdXJyZW50UmF0ZVVwZGF0ZWQJALwCAwkAtgIBBQdhbW91bnRfBQ5QRVJDRU5UX0ZBQ1RPUgkAuQICBQ1hc3NldFF1YW50aXR5CQC2AgEFDXNwcmVhZEJsb2Nrc18EEWxhc3RIZWlnaHRVcGRhdGVkBQZoZWlnaHQEE3RhcmdldEhlaWdodFVwZGF0ZWQJAGQCBRFsYXN0SGVpZ2h0VXBkYXRlZAUNc3ByZWFkQmxvY2tzXwkAzAgCCQELQmluYXJ5RW50cnkCBRBLRVlfQ1VSUkVOVF9SQVRFCQCdAwEFEmN1cnJlbnRSYXRlVXBkYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPS0VZX0xBU1RfSEVJR0hUBRFsYXN0SGVpZ2h0VXBkYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURS0VZX1RBUkdFVF9IRUlHSFQFE3RhcmdldEhlaWdodFVwZGF0ZWQFA25pbAQMc3Rha2VBY3Rpb25zCQEOX3VwZGF0ZVN0YWtpbmcDBQliYXNlQXNzZXQFB2Ftb3VudF8JARNfbG9hZFN0YWtpbmdBZGFwdGVyAAkAlAoCCQDOCAIFB2FjdGlvbnMFDHN0YWtlQWN0aW9ucwUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwAEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIECWJhc2VBc3NldAkBDl9sb2FkQmFzZUFzc2V0AAQFYXNzZXQJAQpfbG9hZEFzc2V0AAQNYXNzZXRRdWFudGl0eQkAtgIBCQERX2dldEFzc2V0UXVhbnRpdHkBBQVhc3NldAQDZXJyAwkAZgIAAQkAkAMBCAUBaQhwYXltZW50cwkAAgECFXdpdGhkcmF3OiBubyBwYXltZW50cwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUFYXNzZXQJAAIBAil3aXRoZHJhdzogcGF5bWVudCBpcyBub3QgaW4gY29ycmVjdCBhc3NldAMJAGcCAAAICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQACAQIgd2l0aGRyYXc6IGludmFsaWQgcGF5bWVudCBhbW91bnQFBHVuaXQDCQAAAgUDZXJyBQNlcnIECmNoZWNrcG9pbnQJAQtfY2hlY2twb2ludAEHAwkAAAIFCmNoZWNrcG9pbnQFCmNoZWNrcG9pbnQECGxhc3RSYXRlCQELX2xvYWRCaWdJbnQCBQ1LRVlfTEFTVF9SQVRFBQ5QRVJDRU5UX0ZBQ1RPUgQLY3VycmVudFJhdGUJAQtfbG9hZEJpZ0ludAIFEEtFWV9DVVJSRU5UX1JBVEUFC1pFUk9fQklHSU5UBApsYXN0SGVpZ2h0CQEIX2xvYWRJbnQCBQ9LRVlfTEFTVF9IRUlHSFQAAAQMdGFyZ2V0SGVpZ2h0CQCXAwEJAMwIAgkBCF9sb2FkSW50AgURS0VZX1RBUkdFVF9IRUlHSFQAAAkAzAgCBQZoZWlnaHQFA25pbAQPbGFzdFJhdGVVcGRhdGVkCQC3AgIFCGxhc3RSYXRlCQC5AgIFC2N1cnJlbnRSYXRlCQC2AgEJAGUCBQx0YXJnZXRIZWlnaHQFCmxhc3RIZWlnaHQECmJhc2VBbW91bnQJAKADAQkAvQIECQC2AgEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQ9sYXN0UmF0ZVVwZGF0ZWQFDlBFUkNFTlRfRkFDVE9SBQVGTE9PUgQSY3VycmVudFJhdGVVcGRhdGVkCQC9AgQFC2N1cnJlbnRSYXRlBQ1hc3NldFF1YW50aXR5CQC4AgIFDWFzc2V0UXVhbnRpdHkJALYCAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFBUZMT09SBBFsYXN0SGVpZ2h0VXBkYXRlZAUMdGFyZ2V0SGVpZ2h0BAxzdGFrZUFjdGlvbnMJAQ5fdXBkYXRlU3Rha2luZwMFCWJhc2VBc3NldAkAaAIA////////////AQUKYmFzZUFtb3VudAkBE19sb2FkU3Rha2luZ0FkYXB0ZXIACQCUCgIJAM4IAgUMc3Rha2VBY3Rpb25zCQDMCAIJAQRCdXJuAgUFYXNzZXQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKYmFzZUFtb3VudAUEdW5pdAkAzAgCCQELQmluYXJ5RW50cnkCBQ1LRVlfTEFTVF9SQVRFCQCdAwEFD2xhc3RSYXRlVXBkYXRlZAkAzAgCCQELQmluYXJ5RW50cnkCBRBLRVlfQ1VSUkVOVF9SQVRFCQCdAwEFEmN1cnJlbnRSYXRlVXBkYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPS0VZX0xBU1RfSEVJR0hUBRFsYXN0SGVpZ2h0VXBkYXRlZAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3NldE11bHRpc2lnAQltdWx0aXNpZ18EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHnNldE11bHRpc2lnOiBwZXJtaXNzaW9uIGRlbmllZAMJAQEhAQkBEF92YWxpZGF0ZUFkZHJlc3MBBQltdWx0aXNpZ18JAAIBAiVzZXRNdWx0aXNpZzogaW52YWxpZCBtdWx0aXNpZyBhZGRyZXNzBQR1bml0AwkAAAIFA2VycgUDZXJyCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMS0VZX01VTFRJU0lHBQltdWx0aXNpZ18FA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARVzZXRTcG9uc29yc2hpcE1hbmFnZXIBCG1hbmFnZXJfBANlcnIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAihzZXRTcG9uc29yc2hpcE1hbmFnZXI6IHBlcm1pc3Npb24gZGVuaWVkAwkBASEBCQEQX3ZhbGlkYXRlQWRkcmVzcwEFCG1hbmFnZXJfCQACAQIuc2V0U3BvbnNvcnNoaXBNYW5hZ2VyOiBpbnZhbGlkIG1hbmFnZXIgYWRkcmVzcwUEdW5pdAMJAAACBQNlcnIFA2VycgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFF0tFWV9TUE9OU09SU0hJUF9NQU5BR0VSBQhtYW5hZ2VyXwUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEXVwZGF0ZVNwb25zb3JzaGlwAhVtaW5TcG9uc29yZWRBc3NldEZlZV8Ud2F2ZXNSZXF1aXJlZEFtb3VudF8EA2VycgMJAQIhPQIIBQFpBmNhbGxlcgkBF19sb2FkU3BvbnNvcnNoaXBNYW5hZ2VyAAkAAgECJHVwZGF0ZVNwb25zb3JzaGlwOiBwZXJtaXNzaW9uIGRlbmllZAMJAGYCAAAFFW1pblNwb25zb3JlZEFzc2V0RmVlXwkAAgECKnVwZGF0ZVNwb25zb3JzaGlwOiBpbnZhbGlkIHNwb25zb3JzaGlwIGZlZQMJAGYCAAAFFHdhdmVzUmVxdWlyZWRBbW91bnRfCQACAQIwdXBkYXRlU3BvbnNvcnNoaXA6IGludmFsaWQgd2F2ZXMgcmVxdWlyZWQgYW1vdW50BQR1bml0AwkAAAIFA2VycgUDZXJyBAxzcG9uc29yQXNzZXQJAQpfbG9hZEFzc2V0AAQUbWluU3BvbnNvcmVkQXNzZXRGZWUDCQAAAgUVbWluU3BvbnNvcmVkQXNzZXRGZWVfAAAFBHVuaXQFFW1pblNwb25zb3JlZEFzc2V0RmVlXwQHYWN0aW9ucwMJAGYCCAkA7wcBBQR0aGlzB3JlZ3VsYXIFFHdhdmVzUmVxdWlyZWRBbW91bnRfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIICQDvBwEFBHRoaXMHcmVndWxhcgUUd2F2ZXNSZXF1aXJlZEFtb3VudF8FBHVuaXQFA25pbAUDbmlsCQCUCgIJAM4IAgUHYWN0aW9ucwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAPAHAgUEdGhpcwUMc3BvbnNvckFzc2V0BQxzcG9uc29yQXNzZXQJAMwIAgkBClNwb25zb3JGZWUCBQxzcG9uc29yQXNzZXQFFG1pblNwb25zb3JlZEFzc2V0RmVlBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPd3hWb3RpbmdTdWdnZXN0Aw52b3RpbmdBZGRyZXNzXwh3eEFzc2V0Xwthc3NldEltYWdlXwQNdm90aW5nQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFDnZvdGluZ0FkZHJlc3NfAid3eFZvdGluZ1N1Z2dlc3Q6IGludmFsaWQgdm90aW5nIGFkZHJlc3MEB3d4QXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFCHd4QXNzZXRfAiF3eFZvdGluZ1N1Z2dlc3Q6IGludmFsaWQgd3ggYXNzZXQECmludm9jYXRpb24JAPwHBAUNdm90aW5nQWRkcmVzcwIHc3VnZ2VzdAkAzAgCCQEKX2xvYWRBc3NldAAJAMwIAgULYXNzZXRJbWFnZV8FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQh3eEFzc2V0XwkAaAIAZAgFB3d4QXNzZXQIZGVjaW1hbHMFA25pbAMJAAACBQppbnZvY2F0aW9uBQppbnZvY2F0aW9uCQCUCgIFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEByRtYXRjaDAJAKIIAQUMS0VZX01VTFRJU0lHAwkAAQIFByRtYXRjaDACBlN0cmluZwQIbXVsdGlzaWcFByRtYXRjaDAJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIbXVsdGlzaWcJALkJAgkAzAgCBQpLRVlfU1RBVFVTCQDMCAIJAKUIAQUEdGhpcwkAzAgCCQDYBAEIBQJ0eAJpZAUDbmlsBQlTRVBBUkFUT1IHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5XKvhuA==", "height": 2348324, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EsKWbvZopS9vYW7hTSmuSK5Dm2YD4LEYD7qnrSLWTXW1 Next: 6aPd2miLEVUVkJQjPyGTXHfkgHfeMY1TyXVE4AJUdr8v Diff:
OldNewDifferences
2525
2626 let KEY_TARGET_HEIGHT = "TARGET_HEIGHT"
2727
28+let KEY_SPONSORSHIP_MANAGER = "SPONSORSHIP_MANAGER"
29+
2830 let FUNC_STAKE = "stake"
2931
3032 let FUNC_UNSTAKE = "unstake"
3739
3840 let ONE_BIGINT = toBigInt(1)
3941
40-let ONE_WAVES = 100000000
42+let INIT_AMOUNT = 100000000
4143
4244 func _validateAddress (address_) = match addressFromString(address_) {
4345 case a: Address =>
106108 addressFromStringValue(a)
107109 case _ =>
108110 throw("_loadStakingAdapter: no staking adapter")
111+}
112+
113+
114+func _loadSponsorshipManager () = match getString(KEY_SPONSORSHIP_MANAGER) {
115+ case a: String =>
116+ addressFromStringValue(a)
117+ case _ =>
118+ throw("_loadSponsorshipManager: no sponsorship manager")
109119 }
110120
111121
193203 if ((err == err))
194204 then {
195205 let tokenDecimals = _getAssetDecimals(baseAsset)
196- let issue = Issue(tokenName_, tokenDescr_, ONE_WAVES, tokenDecimals, true)
206+ let issue = Issue(tokenName_, tokenDescr_, INIT_AMOUNT, tokenDecimals, true)
197207 let assetId = calculateAssetId(issue)
198- let stakeActions = _updateStaking(baseAsset, ONE_WAVES, addressFromStringValue(stakingAdapter_))
208+ let stakeActions = _updateStaking(baseAsset, INIT_AMOUNT, addressFromStringValue(stakingAdapter_))
199209 $Tuple2(([StringEntry(KEY_BASE_ASSET, baseAsset_), StringEntry(KEY_STAKING_ADAPTER, stakingAdapter_), StringEntry(KEY_ASSET, toBase58String(assetId)), issue] ++ stakeActions), unit)
200210 }
201211 else throw("Strict value is not equal to itself.")
367377 }
368378
369379
380+
381+@Callable(i)
382+func setSponsorshipManager (manager_) = {
383+ let err = if ((i.caller != this))
384+ then throw("setSponsorshipManager: permission denied")
385+ else if (!(_validateAddress(manager_)))
386+ then throw("setSponsorshipManager: invalid manager address")
387+ else unit
388+ if ((err == err))
389+ then $Tuple2([StringEntry(KEY_SPONSORSHIP_MANAGER, manager_)], unit)
390+ else throw("Strict value is not equal to itself.")
391+ }
392+
393+
394+
395+@Callable(i)
396+func updateSponsorship (minSponsoredAssetFee_,wavesRequiredAmount_) = {
397+ let err = if ((i.caller != _loadSponsorshipManager()))
398+ then throw("updateSponsorship: permission denied")
399+ else if ((0 > minSponsoredAssetFee_))
400+ then throw("updateSponsorship: invalid sponsorship fee")
401+ else if ((0 > wavesRequiredAmount_))
402+ then throw("updateSponsorship: invalid waves required amount")
403+ else unit
404+ if ((err == err))
405+ then {
406+ let sponsorAsset = _loadAsset()
407+ let minSponsoredAssetFee = if ((minSponsoredAssetFee_ == 0))
408+ then unit
409+ else minSponsoredAssetFee_
410+ let actions = if ((wavesBalance(this).regular > wavesRequiredAmount_))
411+ then [ScriptTransfer(i.caller, (wavesBalance(this).regular - wavesRequiredAmount_), unit)]
412+ else nil
413+ $Tuple2((actions ++ [ScriptTransfer(i.caller, assetBalance(this, sponsorAsset), sponsorAsset), SponsorFee(sponsorAsset, minSponsoredAssetFee)]), unit)
414+ }
415+ else throw("Strict value is not equal to itself.")
416+ }
417+
418+
419+
420+@Callable(i)
421+func wxVotingSuggest (votingAddress_,wxAsset_,assetImage_) = {
422+ let votingAddress = valueOrErrorMessage(addressFromString(votingAddress_), "wxVotingSuggest: invalid voting address")
423+ let wxAsset = valueOrErrorMessage(assetInfo(fromBase58String(wxAsset_)), "wxVotingSuggest: invalid wx asset")
424+ let invocation = invoke(votingAddress, "suggest", [_loadAsset(), assetImage_], [AttachedPayment(fromBase58String(wxAsset_), (100 * wxAsset.decimals))])
425+ if ((invocation == invocation))
426+ then $Tuple2(nil, unit)
427+ else throw("Strict value is not equal to itself.")
428+ }
429+
430+
370431 @Verifier(tx)
371432 func verify () = match getString(KEY_MULTISIG) {
372433 case multisig: String =>
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEPARATOR = "__"
55
66 let WAVES = "WAVES"
77
88 let KEY_MULTISIG = "MULTISIG"
99
1010 let KEY_STATUS = "STATUS"
1111
1212 let KEY_BASE_ASSET = "BASE_ASSET"
1313
1414 let KEY_ASSET = "ASSET"
1515
1616 let KEY_STAKING_ADAPTER = "STAKING_ADAPTER"
1717
1818 let KEY_STAKING_AMOUNT = "STAKING_AMOUNT"
1919
2020 let KEY_LAST_RATE = "LAST_RATE"
2121
2222 let KEY_CURRENT_RATE = "CURRENT_RATE"
2323
2424 let KEY_LAST_HEIGHT = "LAST_HEIGHT"
2525
2626 let KEY_TARGET_HEIGHT = "TARGET_HEIGHT"
2727
28+let KEY_SPONSORSHIP_MANAGER = "SPONSORSHIP_MANAGER"
29+
2830 let FUNC_STAKE = "stake"
2931
3032 let FUNC_UNSTAKE = "unstake"
3133
3234 let FUNC_CLAIM_REWARD = "claimReward"
3335
3436 let PERCENT_FACTOR = toBigInt(1000000000000)
3537
3638 let ZERO_BIGINT = toBigInt(0)
3739
3840 let ONE_BIGINT = toBigInt(1)
3941
40-let ONE_WAVES = 100000000
42+let INIT_AMOUNT = 100000000
4143
4244 func _validateAddress (address_) = match addressFromString(address_) {
4345 case a: Address =>
4446 true
4547 case _ =>
4648 false
4749 }
4850
4951
5052 func _validateAsset (asset_) = if ((asset_ == WAVES))
5153 then true
5254 else match assetInfo(fromBase58String(asset_)) {
5355 case a: Asset =>
5456 true
5557 case _ =>
5658 false
5759 }
5860
5961
6062 func _toAssetVector (asset_) = if ((asset_ == WAVES))
6163 then unit
6264 else fromBase58String(asset_)
6365
6466
6567 func _getAssetDecimals (asset_) = match asset_ {
6668 case a: ByteVector =>
6769 match assetInfo(a) {
6870 case asset: Asset =>
6971 asset.decimals
7072 case _ =>
7173 throw("_getAssetDecimals: no such asset")
7274 }
7375 case _ =>
7476 8
7577 }
7678
7779
7880 func _getAssetQuantity (asset_) = match assetInfo(asset_) {
7981 case a: Asset =>
8082 a.quantity
8183 case _ =>
8284 throw("_getAssetQuantity: no such asset")
8385 }
8486
8587
8688 func _getAssetBalance (asset_,address) = match asset_ {
8789 case a: ByteVector =>
8890 assetBalance(address, a)
8991 case _ =>
9092 wavesBalance(address).regular
9193 }
9294
9395
9496 func _loadBaseAsset () = match getString(KEY_BASE_ASSET) {
9597 case a: String =>
9698 if ((a == WAVES))
9799 then unit
98100 else fromBase58String(a)
99101 case _ =>
100102 throw("_loadBaseAsset: no base asset")
101103 }
102104
103105
104106 func _loadStakingAdapter () = match getString(KEY_STAKING_ADAPTER) {
105107 case a: String =>
106108 addressFromStringValue(a)
107109 case _ =>
108110 throw("_loadStakingAdapter: no staking adapter")
111+}
112+
113+
114+func _loadSponsorshipManager () = match getString(KEY_SPONSORSHIP_MANAGER) {
115+ case a: String =>
116+ addressFromStringValue(a)
117+ case _ =>
118+ throw("_loadSponsorshipManager: no sponsorship manager")
109119 }
110120
111121
112122 func _loadInt (key_,default_) = match getInteger(key_) {
113123 case a: Int =>
114124 a
115125 case _ =>
116126 default_
117127 }
118128
119129
120130 func _loadBigInt (key_,default_) = match getBinary(key_) {
121131 case a: ByteVector =>
122132 toBigInt(a)
123133 case _ =>
124134 default_
125135 }
126136
127137
128138 func _loadAsset () = match getString(KEY_ASSET) {
129139 case a: String =>
130140 fromBase58String(a)
131141 case _ =>
132142 base58''
133143 }
134144
135145
136146 func _updateStaking (asset_,amount_,adapter_) = {
137147 let stakingAmount = _loadInt(KEY_STAKING_AMOUNT, 0)
138148 let newStakingAmount = (stakingAmount + amount_)
139149 let invocation = if ((amount_ > 0))
140150 then invoke(adapter_, FUNC_STAKE, nil, [AttachedPayment(asset_, amount_)])
141151 else invoke(adapter_, FUNC_UNSTAKE, [(-1 * amount_)], nil)
142152 if ((invocation == invocation))
143153 then [IntegerEntry(KEY_STAKING_AMOUNT, newStakingAmount)]
144154 else throw("Strict value is not equal to itself.")
145155 }
146156
147157
148158 func _checkpoint (compensation) = {
149159 let invocation = invoke(_loadStakingAdapter(), FUNC_CLAIM_REWARD, nil, nil)
150160 if ((invocation == invocation))
151161 then match invocation {
152162 case reward: (Int, Int, Int) =>
153163 if (compensation)
154164 then {
155165 let stake = invoke(this, FUNC_STAKE, [reward._1, reward._3], nil)
156166 if ((stake == stake))
157167 then $Tuple2(true, reward._2)
158168 else throw("Strict value is not equal to itself.")
159169 }
160170 else {
161171 let stake = invoke(this, FUNC_STAKE, [(reward._1 + reward._2), reward._3], nil)
162172 if ((stake == stake))
163173 then $Tuple2(true, 0)
164174 else throw("Strict value is not equal to itself.")
165175 }
166176 case _ =>
167177 $Tuple2(false, 0)
168178 }
169179 else throw("Strict value is not equal to itself.")
170180 }
171181
172182
173183 @Callable(i)
174184 func init (tokenName_,tokenDescr_,baseAsset_,stakingAdapter_) = {
175185 let multisig = valueOrErrorMessage(getString(KEY_MULTISIG), "init: no multisig set")
176186 let asset = _loadAsset()
177187 let baseAsset = _toAssetVector(baseAsset_)
178188 let err = if ((i.caller != this))
179189 then throw("init: permission denied")
180190 else if ((asset != base58''))
181191 then throw("init: already initialized")
182192 else if (if ((4 > size(tokenName_)))
183193 then true
184194 else (size(tokenName_) > 16))
185195 then throw("init: invalid token name")
186196 else if ((size(tokenDescr_) > 1000))
187197 then throw("init: invalid token description")
188198 else if (!(_validateAsset(baseAsset_)))
189199 then throw("init: invalid base asset")
190200 else if (!(_validateAddress(stakingAdapter_)))
191201 then throw("init: invalid staking adapter")
192202 else unit
193203 if ((err == err))
194204 then {
195205 let tokenDecimals = _getAssetDecimals(baseAsset)
196- let issue = Issue(tokenName_, tokenDescr_, ONE_WAVES, tokenDecimals, true)
206+ let issue = Issue(tokenName_, tokenDescr_, INIT_AMOUNT, tokenDecimals, true)
197207 let assetId = calculateAssetId(issue)
198- let stakeActions = _updateStaking(baseAsset, ONE_WAVES, addressFromStringValue(stakingAdapter_))
208+ let stakeActions = _updateStaking(baseAsset, INIT_AMOUNT, addressFromStringValue(stakingAdapter_))
199209 $Tuple2(([StringEntry(KEY_BASE_ASSET, baseAsset_), StringEntry(KEY_STAKING_ADAPTER, stakingAdapter_), StringEntry(KEY_ASSET, toBase58String(assetId)), issue] ++ stakeActions), unit)
200210 }
201211 else throw("Strict value is not equal to itself.")
202212 }
203213
204214
205215
206216 @Callable(i)
207217 func getRate () = {
208218 let lastRate = _loadBigInt(KEY_LAST_RATE, PERCENT_FACTOR)
209219 let currentRate = _loadBigInt(KEY_CURRENT_RATE, ZERO_BIGINT)
210220 let lastHeight = _loadInt(KEY_LAST_HEIGHT, 0)
211221 let targetHeight = min([_loadInt(KEY_TARGET_HEIGHT, 0), height])
212222 let rate = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight))))
213223 $Tuple2(nil, toString(rate))
214224 }
215225
216226
217227
218228 @Callable(i)
219229 func checkpoint () = {
220230 let checkpoint = _checkpoint(true)
221231 if ((checkpoint == checkpoint))
222232 then if (!(checkpoint._1))
223233 then throw("checkpoint: no reward")
224234 else if ((checkpoint._2 > 0))
225235 then $Tuple2([ScriptTransfer(i.originCaller, checkpoint._2, _loadBaseAsset())], unit)
226236 else $Tuple2(nil, unit)
227237 else throw("Strict value is not equal to itself.")
228238 }
229239
230240
231241
232242 @Callable(i)
233243 func deposit () = {
234244 let caller = toString(i.caller)
235245 let baseAsset = _loadBaseAsset()
236246 let asset = _loadAsset()
237247 let assetQuantity = toBigInt(_getAssetQuantity(asset))
238248 let err = if ((size(i.payments) != 1))
239249 then throw("deposit: no payments")
240250 else if ((i.payments[0].assetId != baseAsset))
241251 then throw("deposit: payment is not in base asset")
242252 else if ((0 >= i.payments[0].amount))
243253 then throw("deposit: invalid payment amount")
244254 else unit
245255 if ((err == err))
246256 then {
247257 let checkpoint = _checkpoint(false)
248258 if ((checkpoint == checkpoint))
249259 then {
250260 let lastRate = _loadBigInt(KEY_LAST_RATE, PERCENT_FACTOR)
251261 let currentRate = _loadBigInt(KEY_CURRENT_RATE, ZERO_BIGINT)
252262 let lastHeight = _loadInt(KEY_LAST_HEIGHT, 0)
253263 let targetHeight = min([_loadInt(KEY_TARGET_HEIGHT, 0), height])
254264 let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight))))
255265 let issueAmount = toInt(fraction(toBigInt(i.payments[0].amount), PERCENT_FACTOR, lastRateUpdated, FLOOR))
256266 let currentRateUpdated = fraction(currentRate, assetQuantity, (assetQuantity + toBigInt(issueAmount)), FLOOR)
257267 let lastHeightUpdated = targetHeight
258268 let stakeActions = _updateStaking(baseAsset, i.payments[0].amount, _loadStakingAdapter())
259269 $Tuple2(([Reissue(asset, issueAmount, true), ScriptTransfer(i.caller, issueAmount, asset), BinaryEntry(KEY_LAST_RATE, toBytes(lastRateUpdated)), BinaryEntry(KEY_CURRENT_RATE, toBytes(currentRateUpdated)), IntegerEntry(KEY_LAST_HEIGHT, lastHeightUpdated)] ++ stakeActions), unit)
260270 }
261271 else throw("Strict value is not equal to itself.")
262272 }
263273 else throw("Strict value is not equal to itself.")
264274 }
265275
266276
267277
268278 @Callable(i)
269279 func stake (amount_,spreadBlocks_) = {
270280 let caller = toString(i.caller)
271281 let baseAsset = _loadBaseAsset()
272282 let asset = _loadAsset()
273283 let assetQuantity = toBigInt(_getAssetQuantity(asset))
274284 let err = if ((i.caller != this))
275285 then throw("stake: only this contract")
276286 else if ((0 >= amount_))
277287 then throw("stake: invalid stake amount")
278288 else if ((amount_ > _getAssetBalance(baseAsset, this)))
279289 then throw("stake: insufficient stake amount")
280290 else if ((assetQuantity == ZERO_BIGINT))
281291 then throw("stake: no deposits to stake for")
282292 else unit
283293 if ((err == err))
284294 then {
285295 let lastRate = _loadBigInt(KEY_LAST_RATE, PERCENT_FACTOR)
286296 let currentRate = _loadBigInt(KEY_CURRENT_RATE, ZERO_BIGINT)
287297 let lastHeight = _loadInt(KEY_LAST_HEIGHT, 0)
288298 let targetHeight = _loadInt(KEY_TARGET_HEIGHT, 0)
289299 let minTargetHeight = min([targetHeight, height])
290300 let actions = if ((minTargetHeight == height))
291301 then {
292302 let lastRateUpdated = (lastRate + (toBigInt((minTargetHeight - lastHeight)) * currentRate))
293303 let remainingReward = (currentRate * toBigInt((targetHeight - minTargetHeight)))
294304 let currentRateUpdated = fraction(((toBigInt(amount_) * PERCENT_FACTOR) + remainingReward), ONE_BIGINT, (assetQuantity * toBigInt(spreadBlocks_)))
295305 let lastHeightUpdated = height
296306 let targetHeightUpdated = (lastHeightUpdated + spreadBlocks_)
297307 [BinaryEntry(KEY_LAST_RATE, toBytes(lastRateUpdated)), BinaryEntry(KEY_CURRENT_RATE, toBytes(currentRateUpdated)), IntegerEntry(KEY_LAST_HEIGHT, lastHeightUpdated), IntegerEntry(KEY_TARGET_HEIGHT, targetHeightUpdated)]
298308 }
299309 else if ((targetHeight > lastHeight))
300310 then {
301311 let lastRateUpdated = (lastRate + (toBigInt((targetHeight - lastHeight)) * currentRate))
302312 let currentRateUpdated = fraction(toBigInt(amount_), PERCENT_FACTOR, (assetQuantity * toBigInt(spreadBlocks_)))
303313 let lastHeightUpdated = height
304314 let targetHeightUpdated = (lastHeightUpdated + spreadBlocks_)
305315 [BinaryEntry(KEY_LAST_RATE, toBytes(lastRateUpdated)), BinaryEntry(KEY_CURRENT_RATE, toBytes(currentRateUpdated)), IntegerEntry(KEY_LAST_HEIGHT, lastHeightUpdated), IntegerEntry(KEY_TARGET_HEIGHT, targetHeightUpdated)]
306316 }
307317 else {
308318 let currentRateUpdated = fraction(toBigInt(amount_), PERCENT_FACTOR, (assetQuantity * toBigInt(spreadBlocks_)))
309319 let lastHeightUpdated = height
310320 let targetHeightUpdated = (lastHeightUpdated + spreadBlocks_)
311321 [BinaryEntry(KEY_CURRENT_RATE, toBytes(currentRateUpdated)), IntegerEntry(KEY_LAST_HEIGHT, lastHeightUpdated), IntegerEntry(KEY_TARGET_HEIGHT, targetHeightUpdated)]
312322 }
313323 let stakeActions = _updateStaking(baseAsset, amount_, _loadStakingAdapter())
314324 $Tuple2((actions ++ stakeActions), unit)
315325 }
316326 else throw("Strict value is not equal to itself.")
317327 }
318328
319329
320330
321331 @Callable(i)
322332 func withdraw () = {
323333 let caller = toString(i.caller)
324334 let baseAsset = _loadBaseAsset()
325335 let asset = _loadAsset()
326336 let assetQuantity = toBigInt(_getAssetQuantity(asset))
327337 let err = if ((1 > size(i.payments)))
328338 then throw("withdraw: no payments")
329339 else if ((i.payments[0].assetId != asset))
330340 then throw("withdraw: payment is not in correct asset")
331341 else if ((0 >= i.payments[0].amount))
332342 then throw("withdraw: invalid payment amount")
333343 else unit
334344 if ((err == err))
335345 then {
336346 let checkpoint = _checkpoint(false)
337347 if ((checkpoint == checkpoint))
338348 then {
339349 let lastRate = _loadBigInt(KEY_LAST_RATE, PERCENT_FACTOR)
340350 let currentRate = _loadBigInt(KEY_CURRENT_RATE, ZERO_BIGINT)
341351 let lastHeight = _loadInt(KEY_LAST_HEIGHT, 0)
342352 let targetHeight = min([_loadInt(KEY_TARGET_HEIGHT, 0), height])
343353 let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight))))
344354 let baseAmount = toInt(fraction(toBigInt(i.payments[0].amount), lastRateUpdated, PERCENT_FACTOR, FLOOR))
345355 let currentRateUpdated = fraction(currentRate, assetQuantity, (assetQuantity - toBigInt(i.payments[0].amount)), FLOOR)
346356 let lastHeightUpdated = targetHeight
347357 let stakeActions = _updateStaking(baseAsset, (-1 * baseAmount), _loadStakingAdapter())
348358 $Tuple2((stakeActions ++ [Burn(asset, i.payments[0].amount), ScriptTransfer(i.caller, baseAmount, unit), BinaryEntry(KEY_LAST_RATE, toBytes(lastRateUpdated)), BinaryEntry(KEY_CURRENT_RATE, toBytes(currentRateUpdated)), IntegerEntry(KEY_LAST_HEIGHT, lastHeightUpdated)]), unit)
349359 }
350360 else throw("Strict value is not equal to itself.")
351361 }
352362 else throw("Strict value is not equal to itself.")
353363 }
354364
355365
356366
357367 @Callable(i)
358368 func setMultisig (multisig_) = {
359369 let err = if ((i.caller != this))
360370 then throw("setMultisig: permission denied")
361371 else if (!(_validateAddress(multisig_)))
362372 then throw("setMultisig: invalid multisig address")
363373 else unit
364374 if ((err == err))
365375 then $Tuple2([StringEntry(KEY_MULTISIG, multisig_)], unit)
366376 else throw("Strict value is not equal to itself.")
367377 }
368378
369379
380+
381+@Callable(i)
382+func setSponsorshipManager (manager_) = {
383+ let err = if ((i.caller != this))
384+ then throw("setSponsorshipManager: permission denied")
385+ else if (!(_validateAddress(manager_)))
386+ then throw("setSponsorshipManager: invalid manager address")
387+ else unit
388+ if ((err == err))
389+ then $Tuple2([StringEntry(KEY_SPONSORSHIP_MANAGER, manager_)], unit)
390+ else throw("Strict value is not equal to itself.")
391+ }
392+
393+
394+
395+@Callable(i)
396+func updateSponsorship (minSponsoredAssetFee_,wavesRequiredAmount_) = {
397+ let err = if ((i.caller != _loadSponsorshipManager()))
398+ then throw("updateSponsorship: permission denied")
399+ else if ((0 > minSponsoredAssetFee_))
400+ then throw("updateSponsorship: invalid sponsorship fee")
401+ else if ((0 > wavesRequiredAmount_))
402+ then throw("updateSponsorship: invalid waves required amount")
403+ else unit
404+ if ((err == err))
405+ then {
406+ let sponsorAsset = _loadAsset()
407+ let minSponsoredAssetFee = if ((minSponsoredAssetFee_ == 0))
408+ then unit
409+ else minSponsoredAssetFee_
410+ let actions = if ((wavesBalance(this).regular > wavesRequiredAmount_))
411+ then [ScriptTransfer(i.caller, (wavesBalance(this).regular - wavesRequiredAmount_), unit)]
412+ else nil
413+ $Tuple2((actions ++ [ScriptTransfer(i.caller, assetBalance(this, sponsorAsset), sponsorAsset), SponsorFee(sponsorAsset, minSponsoredAssetFee)]), unit)
414+ }
415+ else throw("Strict value is not equal to itself.")
416+ }
417+
418+
419+
420+@Callable(i)
421+func wxVotingSuggest (votingAddress_,wxAsset_,assetImage_) = {
422+ let votingAddress = valueOrErrorMessage(addressFromString(votingAddress_), "wxVotingSuggest: invalid voting address")
423+ let wxAsset = valueOrErrorMessage(assetInfo(fromBase58String(wxAsset_)), "wxVotingSuggest: invalid wx asset")
424+ let invocation = invoke(votingAddress, "suggest", [_loadAsset(), assetImage_], [AttachedPayment(fromBase58String(wxAsset_), (100 * wxAsset.decimals))])
425+ if ((invocation == invocation))
426+ then $Tuple2(nil, unit)
427+ else throw("Strict value is not equal to itself.")
428+ }
429+
430+
370431 @Verifier(tx)
371432 func verify () = match getString(KEY_MULTISIG) {
372433 case multisig: String =>
373434 valueOrElse(getBoolean(addressFromStringValue(multisig), makeString([KEY_STATUS, toString(this), toBase58String(tx.id)], SEPARATOR)), false)
374435 case _ =>
375436 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
376437 }
377438

github/deemru/w8io/169f3d6 
83.19 ms