tx · 682BY9XahuoqUCbYtWY8CR4LahuGXA3q6P7pdLQEjN6N 3N49shcErzZepEy7HDR1fjAce8humpL7QiH: -0.01500000 Waves 2023.02.22 14:08 [2460774] smart account 3N49shcErzZepEy7HDR1fjAce8humpL7QiH > SELF 0.00000000 Waves
{ "type": 13, "id": "682BY9XahuoqUCbYtWY8CR4LahuGXA3q6P7pdLQEjN6N", "fee": 1500000, "feeAssetId": null, "timestamp": 1677064035945, "version": 2, "chainId": 84, "sender": "3N49shcErzZepEy7HDR1fjAce8humpL7QiH", "senderPublicKey": "9frGdXQHcSntKXRWwZ4YJZWnnKREWwYH4cEzMVQwcwYj", "proofs": [ "4D9NbWPs62zSyb4xjC4sxK6MdBEpYWV11gfEbSGbALVohpVkypiVPT1rkLqP2E8g6X6UUgsc6F4wRy3KsueXw7FG" ], "script": "base64:BgItCAISBAoCCAgSABIECgIICBIAEgASBAoCCAgSBQoDCAgBEgMKAQgSAwoBCBIAKwEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQ13cml0ZUNvbnN0SW50AgNrZXkFdmFsdWUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMFA2tleQkBDEludGVnZXJFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhjaGFuZ2VCeQIDa2V5BXZhbHVlCQEId3JpdGVJbnQCBQNrZXkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAABQV2YWx1ZQALY29uZmlnU3RvcmUCBmNvbmZpZwANY29uZmlnQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwULY29uZmlnU3RvcmUAFHZlc3RpbmdDb25maWdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzAg12ZXN0aW5nQ29uZmlnABJtYXliZU9yYWNsZUFkZHJlc3MEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIOb3JhY2xlX2FkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMFBHVuaXQABkhFSUdIVAUGaGVpZ2h0AQlvcEFsbG93ZWQBAm9wBAckbWF0Y2gwCQD8BwQFDWNvbmZpZ0FkZHJlc3MCCW9wQWxsb3dlZAkAzAgCAgR1c2RuCQDMCAIFAm9wBQNuaWwFA25pbAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwAwUBYgYJAAIBAgtub3QgYWxsb3dlZAkAAgECIW9wQWxsb3dlZDogdW5leHBlY3RlZCByZXN1bHQgdHlwZQEIbWFpbk9ubHkBAWkDCQEIY29udGFpbnMCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1jb25maWdBZGRyZXNzAgRtYWluCQClCAEIBQFpBmNhbGxlcgYJAAIBAhBvbmx5IG1haW4gY2FuIGRvAQd0aHJvd0lmAgljb25kaXRpb24FZXJyb3IDBQljb25kaXRpb24JAAIBBQVlcnJvcgYABHVzZG4JARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMCBHVzZG4BF2FkZHJlc3NUb3RhbFN0b3JlTGVnYWN5AQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCBV91c2RuARFhZGRyZXNzVG90YWxTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAgVfVVNETgETdmVzdGluZ0NsYWltZWRTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAghfY2xhaW1lZAESY29udmVydGVkVG9McFN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEF9jb252ZXJ0ZWRfdG9fbHABEXZlc3RpbmdTdGFydFN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCDl92ZXN0aW5nX3N0YXJ0ARd2ZXN0aW5nTGFzdENsYWltZWRTdG9yZQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhVfdmVzdGluZ19sYXN0X2NsYWltZWQBFnZlc3RpbmdEYWlseVNwZWVkU3RvcmUBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIUX3Zlc3RpbmdfZGFpbHlfc3BlZWQBDGFzSW50M1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACFyhJbnQsIEludCwgSW50LCBTdHJpbmcpBAdpbnQzc3RyBQckbWF0Y2gwBQdpbnQzc3RyCQACAQItd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IChJbnQsIEludCwgSW50LCBTdHJpbmcpAA50b3RhbFVTRE5TdG9yZQIKdG90YWxfdXNkbgALdG90YWxWZXN0ZWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOdG90YWxVU0ROU3RvcmUAAAAVc3BlZWRDb2VmZmljaWVudFN0b3JlAhl2ZXN0aW5nX3NwZWVkX2NvZWZmaWNpZW50ABBzcGVlZENvZWZmaWNpZW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCGXZlc3Rpbmdfc3BlZWRfY29lZmZpY2llbnQAZAARdG90YWxTdGFraW5nU3RvcmUCEnRvdGFsX3N0YWtpbmdfdXNkbgEXdXNlckNsYWltZWRSZXdhcmRzU3RvcmUBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIVX2NsYWltZWRfc3Rha2luZ191c2RuARN1c2VyU3Rha2luZ0FkalN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCBF9hZGoAI0xJTkVBUl9WRVNUSU5HX0RFRkFVTFRfU1RBUlRfSEVJR0hUAOGQ1wEAF0xJTkVBUl9WRVNUSU5HX01BWF9EQVlTCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCF2xpbmVhcl92ZXN0aW5nX21heF9kYXlzAPQDARJ1c2VyVmVzdGluZ0JhbGFuY2UBB2FkZHJlc3MEF2xlZ2FjeVRvdGFsVmVzdGluZ1ZhbHVlCQELdmFsdWVPckVsc2UCCQCfCAEJARdhZGRyZXNzVG90YWxTdG9yZUxlZ2FjeQEFB2FkZHJlc3MAAAQMdG90YWxWZXN0aW5nCQBlAgkAZQIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEWFkZHJlc3NUb3RhbFN0b3JlAQUHYWRkcmVzcwUXbGVnYWN5VG90YWxWZXN0aW5nVmFsdWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE3Zlc3RpbmdDbGFpbWVkU3RvcmUBBQdhZGRyZXNzAAAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmNvbnZlcnRlZFRvTHBTdG9yZQEFB2FkZHJlc3MAAAQHJG1hdGNoMAkAmggCBQR0aGlzCQEXdmVzdGluZ0xhc3RDbGFpbWVkU3RvcmUBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACA0ludAQRbGFzdENsYWltZWRIZWlnaHQFByRtYXRjaDAEEnVzZXJTcGVlZFBlckRheVJhdwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARZ2ZXN0aW5nRGFpbHlTcGVlZFN0b3JlAQUHYWRkcmVzcwkArAICAg1ubyBzcGVlZCBmb3IgBQdhZGRyZXNzBAZwZXJEYXkJAGsDBRJ1c2VyU3BlZWRQZXJEYXlSYXcFEHNwZWVkQ29lZmZpY2llbnQAZAQIdW5sb2NrZWQJAGsDBQZwZXJEYXkJAGUCBQZIRUlHSFQFEWxhc3RDbGFpbWVkSGVpZ2h0AKALCQCVCgMFDHRvdGFsVmVzdGluZwkAlwMBCQDMCAIFCHVubG9ja2VkCQDMCAIFDHRvdGFsVmVzdGluZwUDbmlsBQZwZXJEYXkEByRtYXRjaDEJAJ8IAQkBEXZlc3RpbmdTdGFydFN0b3JlAQUHYWRkcmVzcwMJAAECBQckbWF0Y2gxAgNJbnQEDnZlc3RpbmdSZXN0YXJ0BSNMSU5FQVJfVkVTVElOR19ERUZBVUxUX1NUQVJUX0hFSUdIVAQGcGVyRGF5CQBrAwkAaQIFC3RvdGFsVmVzdGVkBRdMSU5FQVJfVkVTVElOR19NQVhfREFZUwUQc3BlZWRDb2VmZmljaWVudABkBAh1bmxvY2tlZAkAawMFBnBlckRheQkAZQIFBkhFSUdIVAUOdmVzdGluZ1Jlc3RhcnQAoAsJAJUKAwUMdG90YWxWZXN0aW5nCQCXAwEJAMwIAgUIdW5sb2NrZWQJAMwIAgUMdG90YWxWZXN0aW5nBQNuaWwFBnBlckRheQkAlQoDAAAAAAAAAQp1c2VyVmVzdGVkAQdhZGRyZXNzBAskdDA0NTE2NDU4NgkBEnVzZXJWZXN0aW5nQmFsYW5jZQEFB2FkZHJlc3MEDHRvdGFsVmVzdGluZwgFCyR0MDQ1MTY0NTg2Al8xBAxhdmFpbGFibGVOb3cIBQskdDA0NTE2NDU4NgJfMgQGcGVyRGF5CAULJHQwNDUxNjQ1ODYCXzMFDHRvdGFsVmVzdGluZwEQdXNlclRvdGFsUmV3YXJkcwEHYWRkcmVzcwQMdG90YWxSZXdhcmRzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEXRvdGFsU3Rha2luZ1N0b3JlAAAEDnVzZXJTdGFraW5nQWRqCQELdmFsdWVPckVsc2UCCQCfCAEJARN1c2VyU3Rha2luZ0FkalN0b3JlAQUHYWRkcmVzcwAAAwkAAAIFC3RvdGFsVmVzdGVkAAAFDnVzZXJTdGFraW5nQWRqCQBkAgkAawMFDHRvdGFsUmV3YXJkcwkBCnVzZXJWZXN0ZWQBBQdhZGRyZXNzBQt0b3RhbFZlc3RlZAUOdXNlclN0YWtpbmdBZGoBG3VzZXJTdGFraW5nUmV3YXJkc0F2YWlsYWJsZQEHYWRkcmVzcwQSdXNlckNsYWltZWRSZXdhcmRzCQELdmFsdWVPckVsc2UCCQCfCAEJARd1c2VyQ2xhaW1lZFJld2FyZHNTdG9yZQEFB2FkZHJlc3MAAAQUdXNlckF2YWlsYWJsZVJld2FyZHMJAGUCCQEQdXNlclRvdGFsUmV3YXJkcwEFB2FkZHJlc3MFEnVzZXJDbGFpbWVkUmV3YXJkcwMJAGYCAAAFFHVzZXJBdmFpbGFibGVSZXdhcmRzAAAFFHVzZXJBdmFpbGFibGVSZXdhcmRzARB1cGRhdGVSZXdhcmREYXRhAgdhZGRyZXNzCnVzZXJDaGFuZ2UECXByZXZUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ50b3RhbFVTRE5TdG9yZQAABBBwcmV2U3Rha2luZ1RvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEXRvdGFsU3Rha2luZ1N0b3JlAAAEEnByZXZVc2VyU3Rha2luZ0FkagkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQETdXNlclN0YWtpbmdBZGpTdG9yZQEFB2FkZHJlc3MAAAQIbmV3VG90YWwJAGQCBQlwcmV2VG90YWwFCnVzZXJDaGFuZ2UEFW5ld1N0YWtpbmdSZXdhcmRUb3RhbAMJAAACBQlwcmV2VG90YWwAAAUQcHJldlN0YWtpbmdUb3RhbAkAawMFEHByZXZTdGFraW5nVG90YWwFCG5ld1RvdGFsBQlwcmV2VG90YWwEEG5ld1VzZXJSZXdhcmRBZGoDCQAAAgUIbmV3VG90YWwAAAkAZAIFEnByZXZVc2VyU3Rha2luZ0FkagUQcHJldlN0YWtpbmdUb3RhbAkAZQIFEnByZXZVc2VyU3Rha2luZ0FkagkAawMFFW5ld1N0YWtpbmdSZXdhcmRUb3RhbAUKdXNlckNoYW5nZQUIbmV3VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIFEXRvdGFsU3Rha2luZ1N0b3JlBRVuZXdTdGFraW5nUmV3YXJkVG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIJARN1c2VyU3Rha2luZ0FkalN0b3JlAQUHYWRkcmVzcwUQbmV3VXNlclJld2FyZEFkagUDbmlsAA5zdGFraW5nQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzCQCsAgICD3N0YWtpbmdfY29uZmlnXwkApQgBBQR0aGlzCQCsAgICF25vIHN0YWtpbmcgYWRkcmVzcyBmb3IgCQClCAEFBHRoaXMJAKwCAgIYYmFkIHN0YWtpbmcgYWRkcmVzcyBmb3IgCQClCAEFBHRoaXMADnN0YWtpbmdFbmFibGVkCQELdmFsdWVPckVsc2UCCQCbCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgIQc3Rha2luZ19lbmFibGVkXwkApQgBBQR0aGlzBwELc3luY1N0YWtpbmcBDWtlZXBBdEJhbGFuY2UEDWFjdHVhbEJhbGFuY2UJAPAHAgUEdGhpcwkA2QQBBQR1c2RuBA1zdGFraW5nQWN0aW9uAwkAAAIFDWFjdHVhbEJhbGFuY2UFDWtlZXBBdEJhbGFuY2UFA25pbAMJAQEhAQUOc3Rha2luZ0VuYWJsZWQFA25pbAMJAGYCBQ1hY3R1YWxCYWxhbmNlBQ1rZWVwQXRCYWxhbmNlCQD8BwQFDnN0YWtpbmdBZGRyZXNzAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQR1c2RuCQBlAgUNYWN0dWFsQmFsYW5jZQUNa2VlcEF0QmFsYW5jZQUDbmlsCQD8BwQFDnN0YWtpbmdBZGRyZXNzAgNnZXQJAMwIAgkAZQIFDWtlZXBBdEJhbGFuY2UFDWFjdHVhbEJhbGFuY2UFA25pbAUDbmlsAwkAAAIFDXN0YWtpbmdBY3Rpb24FDXN0YWtpbmdBY3Rpb24FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEKYWR2aXNlVXNlcgEHYWRkcmVzcwQLJHQwNzA3OTcxNDkJARJ1c2VyVmVzdGluZ0JhbGFuY2UBBQdhZGRyZXNzBAx0b3RhbFZlc3RpbmcIBQskdDA3MDc5NzE0OQJfMQQMYXZhaWxhYmxlTm93CAULJHQwNzA3OTcxNDkCXzIEBnBlckRheQgFCyR0MDcwNzk3MTQ5Al8zCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIRbWFya2V0c19hZGRyZXNzOiAFB2FkZHJlc3MCGCwgbWFya2V0c190b3RhbFZlc3Rpbmc6IAkApAMBBQx0b3RhbFZlc3RpbmcCFiwgbWFya2V0c19hdmFpbGFibGVOb3cJAKQDAQUMYXZhaWxhYmxlTm93AhAsIG1hcmtldHNfcGVyRGF5CQCkAwEFBnBlckRheQIXLCBtYXJrZXRzX3N0YXJ0SGVpZ2h0OiACATACFiwgbWFya2V0c19kYWlseUxpbWl0OiACATACGCwgbWFya2V0c19jbGFpbWVkVG9kYXk6IAIBMAIaLCBtYXJrZXRzX2F2YWlsYWJsZVRvZGF5OiACATACIiwgbWFya2V0c19nbG9iYWxseUF2YWlsYWJsZVRvZGF5OiACATACGiwgbWFya2V0c19tYXhUb3RhbFBlckRheTogAgEwAhQsIG1hcmtldHNfc2xvdEJ1c3k6IAIBMAIhLCBtYXJrZXRzX3N0YWtpbmdfcmV3YXJkc190b3RhbDogCQCkAwEJARB1c2VyVG90YWxSZXdhcmRzAQUHYWRkcmVzcwIjLCBtYXJrZXRzX3N0YWtpbmdfcmV3YXJkc19jbGFpbWVkOiAJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEXdXNlckNsYWltZWRSZXdhcmRzU3RvcmUBBQdhZGRyZXNzAAACGSwgbWFya2V0c19jb252ZXJ0ZWRUb0xQOiACATACFiwgbWFya2V0c192ZXN0blN0YXRlOiACBmxpbmVhcgEWd2l0aGRyYXdWZXN0ZWRJbnRlcm5hbAIHYWRkcmVzcwJ0bwQGY2hlY2tzCQEJb3BBbGxvd2VkAQIbbGlxdWlkYW9fYWxsX3dpdGhkcmF3VmVzdGVkAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAskdDA4MTM5ODIwOQkBEnVzZXJWZXN0aW5nQmFsYW5jZQEFB2FkZHJlc3MEDHRvdGFsVmVzdGluZwgFCyR0MDgxMzk4MjA5Al8xBAxhdmFpbGFibGVOb3cIBQskdDA4MTM5ODIwOQJfMgQGcGVyRGF5CAULJHQwODEzOTgyMDkCXzMDCQBnAgAABQxhdmFpbGFibGVOb3cJAAIBAhFub3RoaW5nIGF2YWlsYWJsZQkAlAoCCQDOCAIJAM4IAgkBC3N5bmNTdGFraW5nAQUMYXZhaWxhYmxlTm93CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAnRvBQxhdmFpbGFibGVOb3cJANkEAQUEdXNkbgkAzAgCCQEId3JpdGVJbnQCCQERYWRkcmVzc1RvdGFsU3RvcmUBBQdhZGRyZXNzCQBlAgUMdG90YWxWZXN0aW5nBQxhdmFpbGFibGVOb3cJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBE3Zlc3RpbmdDbGFpbWVkU3RvcmUBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARJjb252ZXJ0ZWRUb0xwU3RvcmUBBQdhZGRyZXNzCQDMCAIJAQhjaGFuZ2VCeQIFDnRvdGFsVVNETlN0b3JlCQEBLQEFDGF2YWlsYWJsZU5vdwUDbmlsAwkBCWlzRGVmaW5lZAEJARZ2ZXN0aW5nRGFpbHlTcGVlZFN0b3JlAQUHYWRkcmVzcwkAzAgCCQEId3JpdGVJbnQCCQEXdmVzdGluZ0xhc3RDbGFpbWVkU3RvcmUBBQdhZGRyZXNzBQZIRUlHSFQFA25pbAkAzggCCQDMCAIJAQh3cml0ZUludAIJARd2ZXN0aW5nTGFzdENsYWltZWRTdG9yZQEFB2FkZHJlc3MFBkhFSUdIVAkAzAgCCQEId3JpdGVJbnQCCQEWdmVzdGluZ0RhaWx5U3BlZWRTdG9yZQEFB2FkZHJlc3MJAGkCBQx0b3RhbFZlc3RpbmcFF0xJTkVBUl9WRVNUSU5HX01BWF9EQVlTBQNuaWwJARB1cGRhdGVSZXdhcmREYXRhAgUHYWRkcmVzcwkBAS0BBQxhdmFpbGFibGVOb3cFDGF2YWlsYWJsZU5vdwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEdcGFydGlhbFdpdGhkcmF3VmVzdGVkSW50ZXJuYWwDB2FkZHJlc3MCdG8DYW10BAZjaGVja3MJAQlvcEFsbG93ZWQBAh9saXF1aWRhb19hbGxfd2l0aGRyYXdWZXN0ZWRBc0xQAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAskdDA5Mjc2OTM0NgkBEnVzZXJWZXN0aW5nQmFsYW5jZQEFB2FkZHJlc3MEDHRvdGFsVmVzdGluZwgFCyR0MDkyNzY5MzQ2Al8xBAxhdmFpbGFibGVOb3cIBQskdDA5Mjc2OTM0NgJfMgQGcGVyRGF5CAULJHQwOTI3NjkzNDYCXzMDCQBmAgUDYW10BQx0b3RhbFZlc3RpbmcJAAIBAhJ0b28gbXVjaCByZXF1ZXN0ZWQJAJQKAgkAzggCCQDOCAIJAQtzeW5jU3Rha2luZwEFA2FtdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJ0bwUDYW10CQDZBAEFBHVzZG4JAMwIAgkBCHdyaXRlSW50AgkBEWFkZHJlc3NUb3RhbFN0b3JlAQUHYWRkcmVzcwkAZQIFDHRvdGFsVmVzdGluZwUDYW10CQDMCAIJAQtEZWxldGVFbnRyeQEJARN2ZXN0aW5nQ2xhaW1lZFN0b3JlAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQESY29udmVydGVkVG9McFN0b3JlAQUHYWRkcmVzcwkAzAgCCQEId3JpdGVJbnQCCQEXdmVzdGluZ0xhc3RDbGFpbWVkU3RvcmUBBQdhZGRyZXNzBQZIRUlHSFQJAMwIAgkBCHdyaXRlSW50AgkBFnZlc3RpbmdEYWlseVNwZWVkU3RvcmUBBQdhZGRyZXNzCQBpAgkAZQIFDHRvdGFsVmVzdGluZwUDYW10BRdMSU5FQVJfVkVTVElOR19NQVhfREFZUwkAzAgCCQEIY2hhbmdlQnkCBQ50b3RhbFVTRE5TdG9yZQkBAS0BBQNhbXQFA25pbAkBEHVwZGF0ZVJld2FyZERhdGECBQdhZGRyZXNzCQEBLQEFA2FtdAUDYW10CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuABFzdGFraW5nU3RhcnRTdG9yZQINc3Rha2luZ0hlaWdodAEMZW5zdXJlU3Rha2VkAAkAZgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRFzdGFraW5nU3RhcnRTdG9yZQIlbmVlZCB0byBzdGFrZSBhbGwgZXhpc3RpbmcgdXNkbiBmaXJzdAAACgFpAQRpbml0AgRjb25mA25JZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEm9ubHkgc2VsZiBjYW4gaW5pdAkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIFC2NvbmZpZ1N0b3JlBQRjb25mCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgIEdXNkbgUDbklkBQNuaWwBaQEOd2l0aGRyYXdWZXN0ZWQABAFjCQEMZW5zdXJlU3Rha2VkAAMJAAACBQFjBQFjBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBFndpdGhkcmF3VmVzdGVkSW50ZXJuYWwCBQdhZGRyZXNzBQdhZGRyZXNzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE3dpdGhkcmF3VmVzdGVkRm9yVG8CA2FjYwJ0bwQGY2hlY2tzAwkBCG1haW5Pbmx5AQUBaQkBDGVuc3VyZVN0YWtlZAAHAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQEWd2l0aGRyYXdWZXN0ZWRJbnRlcm5hbAIFA2FjYwUCdG8JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMY2xhaW1SZXdhcmRzAAQBYwMJAQxlbnN1cmVTdGFrZWQACQEJb3BBbGxvd2VkAQIZbGlxdWlkYW9fYWxsX2NsYWltUmV3YXJkcwcDCQAAAgUBYwUBYwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEB3Jld2FyZHMJARt1c2VyU3Rha2luZ1Jld2FyZHNBdmFpbGFibGUBBQdhZGRyZXNzAwkAZwIAAAUHcmV3YXJkcwkAAgECEG5vdGhpbmcgdG8gY2xhaW0JAM4IAgkBC3N5bmNTdGFraW5nAQUHcmV3YXJkcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQdyZXdhcmRzCQDZBAEFBHVzZG4JAMwIAgkBCGNoYW5nZUJ5AgkBF3VzZXJDbGFpbWVkUmV3YXJkc1N0b3JlAQUHYWRkcmVzcwUHcmV3YXJkcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmFkZFJld2FyZHMABAFjCQEMZW5zdXJlU3Rha2VkAAMJAAACBQFjBQFjAwkBAiE9AgkA2AQBCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVzZG4JAAIBAglVU0ROIG9ubHkJAM4IAgkBC3N5bmNTdGFraW5nAQAACQDMCAIJAQhjaGFuZ2VCeQIFEXRvdGFsU3Rha2luZ1N0b3JlCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFndpdGhkcmF3QWxsVmVzdGVkRm9yVG8CB2FkZHJlc3MCdG8EBmNoZWNrcwMDCQEIbWFpbk9ubHkBBQFpCQEJb3BBbGxvd2VkAQIhbGlxdWlkYW9fYWxsX3dpdGhkcmF3VmVzdGVkQXNTdXJmBwkBDGVuc3VyZVN0YWtlZAAHAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxMTYxMDExNjgwCQESdXNlclZlc3RpbmdCYWxhbmNlAQUHYWRkcmVzcwQMdG90YWxWZXN0aW5nCAUNJHQwMTE2MTAxMTY4MAJfMQQMYXZhaWxhYmxlTm93CAUNJHQwMTE2MTAxMTY4MAJfMgQGcGVyRGF5CAUNJHQwMTE2MTAxMTY4MAJfMwMJAGcCAAAFDGF2YWlsYWJsZU5vdwkAAgECEm5vIHZlc3RpbmcgZW5hYmxlZAkAlAoCCQDOCAIJAM4IAgkBC3N5bmNTdGFraW5nAQUMYXZhaWxhYmxlTm93CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAnRvBQx0b3RhbFZlc3RpbmcJANkEAQUEdXNkbgkAzAgCCQELRGVsZXRlRW50cnkBCQERYWRkcmVzc1RvdGFsU3RvcmUBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARdhZGRyZXNzVG90YWxTdG9yZUxlZ2FjeQEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEXZlc3RpbmdTdGFydFN0b3JlAQUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQETdmVzdGluZ0NsYWltZWRTdG9yZQEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmNvbnZlcnRlZFRvTHBTdG9yZQEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFnZlc3RpbmdEYWlseVNwZWVkU3RvcmUBBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARd2ZXN0aW5nTGFzdENsYWltZWRTdG9yZQEFB2FkZHJlc3MJAMwIAgkBCGNoYW5nZUJ5AgUOdG90YWxVU0ROU3RvcmUJAQEtAQUMdG90YWxWZXN0aW5nBQNuaWwJARB1cGRhdGVSZXdhcmREYXRhAgUHYWRkcmVzcwkBAS0BBQx0b3RhbFZlc3RpbmcFDHRvdGFsVmVzdGluZwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARpwYXJ0aWFsV2l0aGRyYXdWZXN0ZWRGb3JUbwMDYWNjAnRvA2FtdAQHY2hlY2tzMAkBCG1haW5Pbmx5AQUBaQMJAAACBQdjaGVja3MwBQdjaGVja3MwCQEdcGFydGlhbFdpdGhkcmF3VmVzdGVkSW50ZXJuYWwDBQNhY2MFAnRvBQNhbXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKYWNjb3VudEZvcgEHYWRkcmVzcwQIYXR0YWNoZWQJAJEDAggFAWkIcGF5bWVudHMAAAQGY2hlY2tzAwMDCQEIbWFpbk9ubHkBBQFpCQEJb3BBbGxvd2VkAQIRbGlxdWlkYW9fYWxsX21vdmUHCQEMZW5zdXJlU3Rha2VkAAcJAQd0aHJvd0lmAgkBAiE9AgkA2AQBCQEFdmFsdWUBCAUIYXR0YWNoZWQHYXNzZXRJZAUEdXNkbgIVdXNkbiBtdXN0IGJlIGF0dGFjaGVkBwMJAAACBQZjaGVja3MFBmNoZWNrcwQNJHQwMTI4MDYxMjg3NgkBEnVzZXJWZXN0aW5nQmFsYW5jZQEFB2FkZHJlc3MEDHRvdGFsVmVzdGluZwgFDSR0MDEyODA2MTI4NzYCXzEEDGF2YWlsYWJsZU5vdwgFDSR0MDEyODA2MTI4NzYCXzIEBnBlckRheQgFDSR0MDEyODA2MTI4NzYCXzMJAM4IAgkAzggCCQELc3luY1N0YWtpbmcBAAAJAMwIAgkBCHdyaXRlSW50AgkBEWFkZHJlc3NUb3RhbFN0b3JlAQUHYWRkcmVzcwkAZAIFDHRvdGFsVmVzdGluZwgFCGF0dGFjaGVkBmFtb3VudAkAzAgCCQELRGVsZXRlRW50cnkBCQETdmVzdGluZ0NsYWltZWRTdG9yZQEFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmNvbnZlcnRlZFRvTHBTdG9yZQEFB2FkZHJlc3MJAMwIAgkBCHdyaXRlSW50AgkBF3Zlc3RpbmdMYXN0Q2xhaW1lZFN0b3JlAQUHYWRkcmVzcwUGSEVJR0hUCQDMCAIJAQh3cml0ZUludAIJARZ2ZXN0aW5nRGFpbHlTcGVlZFN0b3JlAQUHYWRkcmVzcwkAaQIJAGQCBQx0b3RhbFZlc3RpbmcIBQhhdHRhY2hlZAZhbW91bnQFF0xJTkVBUl9WRVNUSU5HX01BWF9EQVlTCQDMCAIJAQhjaGFuZ2VCeQIFDnRvdGFsVVNETlN0b3JlCAUIYXR0YWNoZWQGYW1vdW50BQNuaWwJARB1cGRhdGVSZXdhcmREYXRhAgUHYWRkcmVzcwgFCGF0dGFjaGVkBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdhZHZpc2VVAQNhY2MJAJQKAgUDbmlsCQEKYWR2aXNlVXNlcgEFA2FjYwFpAQVzdGFrZQAKAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAgR2YToxBA1hY3R1YWxCYWxhbmNlCQDwBwIFBHRoaXMJANkEAQUEdXNkbgMJAQEhAQUOc3Rha2luZ0VuYWJsZWQJAAIBAhNzdGFraW5nIG5vdCBlbmFibGVkAwkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwURc3Rha2luZ1N0YXJ0U3RvcmUJAAIBAg5hbHJlYWR5IHN0YWtlZAQDaW52CQD8BwQFDnN0YWtpbmdBZGRyZXNzAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQR1c2RuBQ1hY3R1YWxCYWxhbmNlBQNuaWwDCQAAAgUDaW52BQNpbnYEBnN0YWtlZAkBBWFzSW50AQkA/AcEBQ5zdGFraW5nQWRkcmVzcwIEaW5mbwUDbmlsBQNuaWwDCQAAAgUGc3Rha2VkBQZzdGFrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDnRvdGFsVVNETlN0b3JlBQZzdGFrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEXN0YWtpbmdTdGFydFN0b3JlBQZIRUlHSFQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAEBEJBU0UA6AcEC3F1b3J1bVJhdGlvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwIVcHJvcG9zYWxfcXVvcnVtX3JhdGlvAiJwcm9wb3NhbFF1b3J1bVJhdGlvIGlzIG5vdCBkZWZpbmVkBAtwYXNzZWRSYXRpbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MCFXByb3Bvc2FsX3Bhc3NlZF9yYXRpbwIlcHJvcG9zYWxUaHJlc2hvbGRSYXRpbyBpcyBub3QgZGVmaW5lZAQOZ1ZpcmVzQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwISZGl2aWRlbmRzX2NvbnRyYWN0AhVubyBkaXZpZGVuZHNfY29udHJhY3QCGmludmFsaWQgZGl2aWRlbmRzX2NvbnRyYWN0BA52b3RpbmdDb250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAg92b3RpbmdfY29udHJhY3QCEm5vIHZvdGluZ19jb250cmFjdAIXaW52YWxpZCB2b3RpbmdfY29udHJhY3QEAmlkCQDYBAEIBQJ0eAJpZAQIdm90ZXNZZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOdm90aW5nQ29udHJhY3QJAKwCAgINcHJvcG9zYWxfeWVzXwUCaWQAAAQHdm90ZXNObwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ52b3RpbmdDb250cmFjdAkArAICAgxwcm9wb3NhbF9ub18FAmlkAAAEDnByb3Bvc2FsSGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUOdm90aW5nQ29udHJhY3QJAKwCAgIQcHJvcG9zYWxfaGVpZ2h0XwUCaWQCF3Byb3Bvc2FsIG5vdCByZWdpc3RlcmVkBAphcHBseVN0YXJ0CQELdmFsdWVPckVsc2UCCQCaCAIFDnZvdGluZ0NvbnRyYWN0CQCsAgICFHByb3Bvc2FsX2FwcGx5c3RhcnRfBQJpZAAABAhhcHBseUVuZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ52b3RpbmdDb250cmFjdAkArAICAhJwcm9wb3NhbF9hcHBseWVuZF8FAmlkAAAEC3RvdGFsR1ZpcmVzCQELdmFsdWVPckVsc2UCCQCaCAIFDnZvdGluZ0NvbnRyYWN0CQCsAgICEHByb3Bvc2FsX2d2aXJlc18FAmlkAAAEB2VuYWJsZWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUNY29uZmlnQWRkcmVzcwIdb3BfZ292ZXJuYW5jZV9hcHBseV90eF9wYXVzZWQHBAd2b3RlWWVzBQh2b3Rlc1llcwQGdm90ZU5vBQd2b3Rlc05vBAp0b3RhbFZvdGVzCQBkAgUHdm90ZVllcwUGdm90ZU5vBAloYXNRdW9ydW0JAGcCCQBpAgkAaAIFCnRvdGFsVm90ZXMFBEJBU0UFC3RvdGFsR1ZpcmVzBQtxdW9ydW1SYXRpbwQJaGFzUGFzc2VkCQBnAgkAaQIJAGgCBQd2b3RlWWVzBQRCQVNFBQp0b3RhbFZvdGVzBQtwYXNzZWRSYXRpbwQIdG9vRWFybHkJAGcCBQphcHBseVN0YXJ0BQZIRUlHSFQEB3Rvb0xhdGUJAGcCBQZIRUlHSFQFCGFwcGx5RW5kBAl0aW1lRGVidWcJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIRcHJvcG9zYWxIZWlnaHQgPSAJAKQDAQUOcHJvcG9zYWxIZWlnaHQCDywgYXBwbHlTdGFydCA9IAkApAMBBQphcHBseVN0YXJ0Ag0sIGFwcGx5RW5kID0gCQCkAwEFCGFwcGx5RW5kAgssIEhFSUdIVCA9IAkApAMBBQZIRUlHSFQECGJ5Vm90aW5nAwkBASEBBQdlbmFibGVkCQACAQIrdHggYXBwbGljYXRpb24gdGhyb3cgZ292ZXJuYW5jZSBub3QgZW5hYmxlZAMFCHRvb0Vhcmx5CQACAQkArAICAi5wcm9wb3NhbCBjYW4ndCBiZSBleGVjdXRlZCBhcyBpdCdzIHRvbyBlYXJseTogBQl0aW1lRGVidWcDBQd0b29MYXRlCQACAQkArAICAixwcm9wb3NhbCBjYW4ndCBiZSBleGVjdXRlZCBhcyBpdCdzIHRvbyBsYXRlOgUJdGltZURlYnVnAwkBASEBBQloYXNRdW9ydW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgtubyBxdW9ydW06IAIMdG90YWxWb3RlczogCQCkAwEFCnRvdGFsVm90ZXMCDywgdG90YWxHVmlyZXM6IAkApAMBBQt0b3RhbEdWaXJlcwIPLCBxdW9ydW1SYXRpbzogCQCkAwEFC3F1b3J1bVJhdGlvAwkBASEBBQloYXNQYXNzZWQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhdubyB0aHJlc2hvbGQgYWNoaWV2ZWQ6IAIJdm90ZVllczogCQCkAwEFB3ZvdGVZZXMCCiwgdm90ZU5vOiAJAKQDAQUGdm90ZU5vAg8sIHBhc3NlZFJhdGlvOiAJAKQDAQULcGFzc2VkUmF0aW8GAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQYFCGJ5Vm90aW5n3P+TjA==", "height": 2460774, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3QWXjmidDNhAh46ZsgFJja4WrNgqGGi1B1p5ABmVCTqG Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | func a (b) = if (( | |
5 | - | then (b | |
6 | - | else | |
4 | + | func a (b,c) = if (!(isDefined(getString(this, b)))) | |
5 | + | then StringEntry(b, c) | |
6 | + | else throw(("already initialized: " + b)) | |
7 | 7 | ||
8 | 8 | ||
9 | - | @Callable(c) | |
10 | - | func call () = [IntegerEntry("int", 10)] | |
9 | + | func d (b,c) = if (!(isDefined(getInteger(this, b)))) | |
10 | + | then IntegerEntry(b, c) | |
11 | + | else throw(("already initialized: " + b)) | |
11 | 12 | ||
12 | 13 | ||
13 | - | @Verifier(d) | |
14 | - | func e () = { | |
15 | - | let f = d | |
16 | - | if ($isInstanceOf(f, "InvokeScriptTransaction")) | |
14 | + | func e (b,c) = if ((0 > c)) | |
15 | + | then throw(((("writing negative value " + toString(c)) + " for key ") + b)) | |
16 | + | else IntegerEntry(b, c) | |
17 | + | ||
18 | + | ||
19 | + | func f (b,c) = e(b, (valueOrElse(getInteger(this, b), 0) + c)) | |
20 | + | ||
21 | + | ||
22 | + | let g = "config" | |
23 | + | ||
24 | + | let h = addressFromStringValue(getStringValue(this, g)) | |
25 | + | ||
26 | + | let i = addressFromStringValue(getStringValue(this, "vestingConfig")) | |
27 | + | ||
28 | + | let j = { | |
29 | + | let k = getString(h, "oracle_address") | |
30 | + | if ($isInstanceOf(k, "String")) | |
17 | 31 | then { | |
18 | - | let b = f | |
19 | - | if (if ((addressFromRecipient(b.dApp) == this)) | |
20 | - | then a(b) | |
21 | - | else false) | |
32 | + | let l = k | |
33 | + | addressFromString(l) | |
34 | + | } | |
35 | + | else unit | |
36 | + | } | |
37 | + | ||
38 | + | let m = height | |
39 | + | ||
40 | + | func n (o) = { | |
41 | + | let k = invoke(h, "opAllowed", ["usdn", o], nil) | |
42 | + | if ($isInstanceOf(k, "Boolean")) | |
43 | + | then { | |
44 | + | let p = k | |
45 | + | if (p) | |
22 | 46 | then true | |
23 | - | else | |
47 | + | else throw("not allowed") | |
24 | 48 | } | |
25 | - | else sigVerify(d.bodyBytes, d.proofs[0], d.senderPublicKey) | |
49 | + | else throw("opAllowed: unexpected result type") | |
50 | + | } | |
51 | + | ||
52 | + | ||
53 | + | func q (r) = if (contains(getStringValue(h, "main"), toString(r.caller))) | |
54 | + | then true | |
55 | + | else throw("only main can do") | |
56 | + | ||
57 | + | ||
58 | + | func s (t,u) = if (t) | |
59 | + | then throw(u) | |
60 | + | else true | |
61 | + | ||
62 | + | ||
63 | + | let v = getStringValue(this, "usdn") | |
64 | + | ||
65 | + | func w (x) = (x + "_usdn") | |
66 | + | ||
67 | + | ||
68 | + | func y (x) = (x + "_USDN") | |
69 | + | ||
70 | + | ||
71 | + | func z (x) = (x + "_claimed") | |
72 | + | ||
73 | + | ||
74 | + | func A (x) = (x + "_converted_to_lp") | |
75 | + | ||
76 | + | ||
77 | + | func B (x) = (x + "_vesting_start") | |
78 | + | ||
79 | + | ||
80 | + | func C (x) = (x + "_vesting_last_claimed") | |
81 | + | ||
82 | + | ||
83 | + | func D (x) = (x + "_vesting_daily_speed") | |
84 | + | ||
85 | + | ||
86 | + | func E (c) = { | |
87 | + | let k = c | |
88 | + | if ($isInstanceOf(k, "(Int, Int, Int, String)")) | |
89 | + | then { | |
90 | + | let F = k | |
91 | + | F | |
92 | + | } | |
93 | + | else throw("wrong type, expected: (Int, Int, Int, String)") | |
94 | + | } | |
95 | + | ||
96 | + | ||
97 | + | let G = "total_usdn" | |
98 | + | ||
99 | + | let H = valueOrElse(getInteger(this, G), 0) | |
100 | + | ||
101 | + | let I = "vesting_speed_coefficient" | |
102 | + | ||
103 | + | let J = valueOrElse(getInteger(this, "vesting_speed_coefficient"), 100) | |
104 | + | ||
105 | + | let K = "total_staking_usdn" | |
106 | + | ||
107 | + | func L (x) = (x + "_claimed_staking_usdn") | |
108 | + | ||
109 | + | ||
110 | + | func M (x) = (x + "_adj") | |
111 | + | ||
112 | + | ||
113 | + | let N = 3524705 | |
114 | + | ||
115 | + | let O = valueOrElse(getInteger(this, "linear_vesting_max_days"), 500) | |
116 | + | ||
117 | + | func P (x) = { | |
118 | + | let Q = valueOrElse(getInteger(w(x)), 0) | |
119 | + | let R = ((valueOrElse(getInteger(y(x)), Q) - valueOrElse(getInteger(z(x)), 0)) - valueOrElse(getInteger(A(x)), 0)) | |
120 | + | let k = getInteger(this, C(x)) | |
121 | + | if ($isInstanceOf(k, "Int")) | |
122 | + | then { | |
123 | + | let S = k | |
124 | + | let T = valueOrErrorMessage(getInteger(D(x)), ("no speed for " + x)) | |
125 | + | let U = fraction(T, J, 100) | |
126 | + | let V = fraction(U, (m - S), 1440) | |
127 | + | $Tuple3(R, min([V, R]), U) | |
128 | + | } | |
129 | + | else { | |
130 | + | let W = getInteger(B(x)) | |
131 | + | if ($isInstanceOf(W, "Int")) | |
132 | + | then { | |
133 | + | let X = N | |
134 | + | let U = fraction((H / O), J, 100) | |
135 | + | let V = fraction(U, (m - X), 1440) | |
136 | + | $Tuple3(R, min([V, R]), U) | |
137 | + | } | |
138 | + | else $Tuple3(0, 0, 0) | |
139 | + | } | |
140 | + | } | |
141 | + | ||
142 | + | ||
143 | + | func Y (x) = { | |
144 | + | let Z = P(x) | |
145 | + | let R = Z._1 | |
146 | + | let aa = Z._2 | |
147 | + | let U = Z._3 | |
148 | + | R | |
149 | + | } | |
150 | + | ||
151 | + | ||
152 | + | func ab (x) = { | |
153 | + | let ac = valueOrElse(getInteger(this, K), 0) | |
154 | + | let ad = valueOrElse(getInteger(M(x)), 0) | |
155 | + | if ((H == 0)) | |
156 | + | then ad | |
157 | + | else (fraction(ac, Y(x), H) + ad) | |
158 | + | } | |
159 | + | ||
160 | + | ||
161 | + | func ae (x) = { | |
162 | + | let af = valueOrElse(getInteger(L(x)), 0) | |
163 | + | let ag = (ab(x) - af) | |
164 | + | if ((0 > ag)) | |
165 | + | then 0 | |
166 | + | else ag | |
167 | + | } | |
168 | + | ||
169 | + | ||
170 | + | func ah (x,ai) = { | |
171 | + | let aj = valueOrElse(getInteger(this, G), 0) | |
172 | + | let ak = valueOrElse(getInteger(this, K), 0) | |
173 | + | let al = valueOrElse(getInteger(this, M(x)), 0) | |
174 | + | let am = (aj + ai) | |
175 | + | let an = if ((aj == 0)) | |
176 | + | then ak | |
177 | + | else fraction(ak, am, aj) | |
178 | + | let ao = if ((am == 0)) | |
179 | + | then (al + ak) | |
180 | + | else (al - fraction(an, ai, am)) | |
181 | + | [IntegerEntry(K, an), IntegerEntry(M(x), ao)] | |
182 | + | } | |
183 | + | ||
184 | + | ||
185 | + | let ap = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(h, ("staking_config_" + toString(this))), ("no staking address for " + toString(this)))), ("bad staking address for " + toString(this))) | |
186 | + | ||
187 | + | let aq = valueOrElse(getBoolean(h, ("staking_enabled_" + toString(this))), false) | |
188 | + | ||
189 | + | func ar (as) = { | |
190 | + | let at = assetBalance(this, fromBase58String(v)) | |
191 | + | let au = if ((at == as)) | |
192 | + | then nil | |
193 | + | else if (!(aq)) | |
194 | + | then nil | |
195 | + | else if ((at > as)) | |
196 | + | then invoke(ap, "put", nil, [AttachedPayment(fromBase58String(v), (at - as))]) | |
197 | + | else invoke(ap, "get", [(as - at)], nil) | |
198 | + | if ((au == au)) | |
199 | + | then nil | |
200 | + | else throw("Strict value is not equal to itself.") | |
201 | + | } | |
202 | + | ||
203 | + | ||
204 | + | func av (x) = { | |
205 | + | let aw = P(x) | |
206 | + | let R = aw._1 | |
207 | + | let aa = aw._2 | |
208 | + | let U = aw._3 | |
209 | + | ((((((((((((((((((((((((((((("markets_address: " + x) + ", markets_totalVesting: ") + toString(R)) + ", markets_availableNow") + toString(aa)) + ", markets_perDay") + toString(U)) + ", markets_startHeight: ") + "0") + ", markets_dailyLimit: ") + "0") + ", markets_claimedToday: ") + "0") + ", markets_availableToday: ") + "0") + ", markets_globallyAvailableToday: ") + "0") + ", markets_maxTotalPerDay: ") + "0") + ", markets_slotBusy: ") + "0") + ", markets_staking_rewards_total: ") + toString(ab(x))) + ", markets_staking_rewards_claimed: ") + toString(valueOrElse(getInteger(L(x)), 0))) + ", markets_convertedToLP: ") + "0") + ", markets_vestnState: ") + "linear") | |
210 | + | } | |
211 | + | ||
212 | + | ||
213 | + | func ax (x,ay) = { | |
214 | + | let az = n("liquidao_all_withdrawVested") | |
215 | + | if ((az == az)) | |
216 | + | then { | |
217 | + | let aA = P(x) | |
218 | + | let R = aA._1 | |
219 | + | let aa = aA._2 | |
220 | + | let U = aA._3 | |
221 | + | if ((0 >= aa)) | |
222 | + | then throw("nothing available") | |
223 | + | else $Tuple2(((ar(aa) ++ [ScriptTransfer(addressFromStringValue(ay), aa, fromBase58String(v)), e(y(x), (R - aa)), DeleteEntry(z(x)), DeleteEntry(A(x)), f(G, -(aa))]) ++ (if (isDefined(D(x))) | |
224 | + | then [e(C(x), m)] | |
225 | + | else ([e(C(x), m), e(D(x), (R / O))] ++ ah(x, -(aa))))), aa) | |
226 | + | } | |
227 | + | else throw("Strict value is not equal to itself.") | |
228 | + | } | |
229 | + | ||
230 | + | ||
231 | + | func aB (x,ay,aC) = { | |
232 | + | let az = n("liquidao_all_withdrawVestedAsLP") | |
233 | + | if ((az == az)) | |
234 | + | then { | |
235 | + | let aD = P(x) | |
236 | + | let R = aD._1 | |
237 | + | let aa = aD._2 | |
238 | + | let U = aD._3 | |
239 | + | if ((aC > R)) | |
240 | + | then throw("too much requested") | |
241 | + | else $Tuple2(((ar(aC) ++ [ScriptTransfer(addressFromStringValue(ay), aC, fromBase58String(v)), e(y(x), (R - aC)), DeleteEntry(z(x)), DeleteEntry(A(x)), e(C(x), m), e(D(x), ((R - aC) / O)), f(G, -(aC))]) ++ ah(x, -(aC))), aC) | |
242 | + | } | |
243 | + | else throw("Strict value is not equal to itself.") | |
244 | + | } | |
245 | + | ||
246 | + | ||
247 | + | let aE = "stakingHeight" | |
248 | + | ||
249 | + | func aF () = (valueOrErrorMessage(getInteger(this, aE), "need to stake all existing usdn first") > 0) | |
250 | + | ||
251 | + | ||
252 | + | @Callable(r) | |
253 | + | func init (aG,aH) = if ((r.caller != this)) | |
254 | + | then throw("only self can init") | |
255 | + | else [a(g, aG), a("usdn", aH)] | |
256 | + | ||
257 | + | ||
258 | + | ||
259 | + | @Callable(r) | |
260 | + | func withdrawVested () = { | |
261 | + | let aI = aF() | |
262 | + | if ((aI == aI)) | |
263 | + | then { | |
264 | + | let x = toString(r.caller) | |
265 | + | ax(x, x) | |
266 | + | } | |
267 | + | else throw("Strict value is not equal to itself.") | |
268 | + | } | |
269 | + | ||
270 | + | ||
271 | + | ||
272 | + | @Callable(r) | |
273 | + | func withdrawVestedForTo (aJ,ay) = { | |
274 | + | let az = if (q(r)) | |
275 | + | then aF() | |
276 | + | else false | |
277 | + | if ((az == az)) | |
278 | + | then ax(aJ, ay) | |
279 | + | else throw("Strict value is not equal to itself.") | |
280 | + | } | |
281 | + | ||
282 | + | ||
283 | + | ||
284 | + | @Callable(r) | |
285 | + | func claimRewards () = { | |
286 | + | let aI = if (aF()) | |
287 | + | then n("liquidao_all_claimRewards") | |
288 | + | else false | |
289 | + | if ((aI == aI)) | |
290 | + | then { | |
291 | + | let x = toString(r.caller) | |
292 | + | let aK = ae(x) | |
293 | + | if ((0 >= aK)) | |
294 | + | then throw("nothing to claim") | |
295 | + | else (ar(aK) ++ [ScriptTransfer(addressFromStringValue(x), aK, fromBase58String(v)), f(L(x), aK)]) | |
296 | + | } | |
297 | + | else throw("Strict value is not equal to itself.") | |
298 | + | } | |
299 | + | ||
300 | + | ||
301 | + | ||
302 | + | @Callable(r) | |
303 | + | func addRewards () = { | |
304 | + | let aI = aF() | |
305 | + | if ((aI == aI)) | |
306 | + | then if ((toBase58String(value(r.payments[0].assetId)) != v)) | |
307 | + | then throw("USDN only") | |
308 | + | else (ar(0) ++ [f(K, r.payments[0].amount)]) | |
309 | + | else throw("Strict value is not equal to itself.") | |
310 | + | } | |
311 | + | ||
312 | + | ||
313 | + | ||
314 | + | @Callable(r) | |
315 | + | func withdrawAllVestedForTo (x,ay) = { | |
316 | + | let az = if (if (q(r)) | |
317 | + | then n("liquidao_all_withdrawVestedAsSurf") | |
318 | + | else false) | |
319 | + | then aF() | |
320 | + | else false | |
321 | + | if ((az == az)) | |
322 | + | then { | |
323 | + | let aL = P(x) | |
324 | + | let R = aL._1 | |
325 | + | let aa = aL._2 | |
326 | + | let U = aL._3 | |
327 | + | if ((0 >= aa)) | |
328 | + | then throw("no vesting enabled") | |
329 | + | else $Tuple2(((ar(aa) ++ [ScriptTransfer(addressFromStringValue(ay), R, fromBase58String(v)), DeleteEntry(y(x)), DeleteEntry(w(x)), DeleteEntry(B(x)), DeleteEntry(z(x)), DeleteEntry(A(x)), DeleteEntry(D(x)), DeleteEntry(C(x)), f(G, -(R))]) ++ ah(x, -(R))), R) | |
330 | + | } | |
331 | + | else throw("Strict value is not equal to itself.") | |
332 | + | } | |
333 | + | ||
334 | + | ||
335 | + | ||
336 | + | @Callable(r) | |
337 | + | func partialWithdrawVestedForTo (aJ,ay,aC) = { | |
338 | + | let aM = q(r) | |
339 | + | if ((aM == aM)) | |
340 | + | then aB(aJ, ay, aC) | |
341 | + | else throw("Strict value is not equal to itself.") | |
342 | + | } | |
343 | + | ||
344 | + | ||
345 | + | ||
346 | + | @Callable(r) | |
347 | + | func accountFor (x) = { | |
348 | + | let aN = r.payments[0] | |
349 | + | let az = if (if (if (q(r)) | |
350 | + | then n("liquidao_all_move") | |
351 | + | else false) | |
352 | + | then aF() | |
353 | + | else false) | |
354 | + | then s((toBase58String(value(aN.assetId)) != v), "usdn must be attached") | |
355 | + | else false | |
356 | + | if ((az == az)) | |
357 | + | then { | |
358 | + | let aO = P(x) | |
359 | + | let R = aO._1 | |
360 | + | let aa = aO._2 | |
361 | + | let U = aO._3 | |
362 | + | ((ar(0) ++ [e(y(x), (R + aN.amount)), DeleteEntry(z(x)), DeleteEntry(A(x)), e(C(x), m), e(D(x), ((R + aN.amount) / O)), f(G, aN.amount)]) ++ ah(x, aN.amount)) | |
363 | + | } | |
364 | + | else throw("Strict value is not equal to itself.") | |
365 | + | } | |
366 | + | ||
367 | + | ||
368 | + | ||
369 | + | @Callable(r) | |
370 | + | func adviseU (aJ) = $Tuple2(nil, av(aJ)) | |
371 | + | ||
372 | + | ||
373 | + | ||
374 | + | @Callable(r) | |
375 | + | func stake () = { | |
376 | + | func aP (c) = { | |
377 | + | let k = c | |
378 | + | if ($isInstanceOf(k, "Int")) | |
379 | + | then { | |
380 | + | let aQ = k | |
381 | + | aQ | |
382 | + | } | |
383 | + | else throw("va:1") | |
384 | + | } | |
385 | + | ||
386 | + | let at = assetBalance(this, fromBase58String(v)) | |
387 | + | if (!(aq)) | |
388 | + | then throw("staking not enabled") | |
389 | + | else if (isDefined(getInteger(this, aE))) | |
390 | + | then throw("already staked") | |
391 | + | else { | |
392 | + | let aR = invoke(ap, "put", nil, [AttachedPayment(fromBase58String(v), at)]) | |
393 | + | if ((aR == aR)) | |
394 | + | then { | |
395 | + | let aS = aP(invoke(ap, "info", nil, nil)) | |
396 | + | if ((aS == aS)) | |
397 | + | then [IntegerEntry(G, aS), IntegerEntry(aE, m)] | |
398 | + | else throw("Strict value is not equal to itself.") | |
399 | + | } | |
400 | + | else throw("Strict value is not equal to itself.") | |
401 | + | } | |
402 | + | } | |
403 | + | ||
404 | + | ||
405 | + | @Verifier(aT) | |
406 | + | func aU () = { | |
407 | + | let aV = 1000 | |
408 | + | let aW = valueOrErrorMessage(getInteger(h, "proposal_quorum_ratio"), "proposalQuorumRatio is not defined") | |
409 | + | let aX = valueOrErrorMessage(getInteger(h, "proposal_passed_ratio"), "proposalThresholdRatio is not defined") | |
410 | + | let aY = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(h, "dividends_contract"), "no dividends_contract")), "invalid dividends_contract") | |
411 | + | let aZ = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(h, "voting_contract"), "no voting_contract")), "invalid voting_contract") | |
412 | + | let ba = toBase58String(aT.id) | |
413 | + | let bb = valueOrElse(getInteger(aZ, ("proposal_yes_" + ba)), 0) | |
414 | + | let bc = valueOrElse(getInteger(aZ, ("proposal_no_" + ba)), 0) | |
415 | + | let bd = valueOrErrorMessage(getInteger(aZ, ("proposal_height_" + ba)), "proposal not registered") | |
416 | + | let be = valueOrElse(getInteger(aZ, ("proposal_applystart_" + ba)), 0) | |
417 | + | let bf = valueOrElse(getInteger(aZ, ("proposal_applyend_" + ba)), 0) | |
418 | + | let bg = valueOrElse(getInteger(aZ, ("proposal_gvires_" + ba)), 0) | |
419 | + | let bh = valueOrElse(getBoolean(h, "op_governance_apply_tx_paused"), false) | |
420 | + | let bi = bb | |
421 | + | let bj = bc | |
422 | + | let bk = (bi + bj) | |
423 | + | let bl = (((bk * aV) / bg) >= aW) | |
424 | + | let bm = (((bi * aV) / bk) >= aX) | |
425 | + | let bn = (be >= m) | |
426 | + | let bo = (m >= bf) | |
427 | + | let bp = ((((((("proposalHeight = " + toString(bd)) + ", applyStart = ") + toString(be)) + ", applyEnd = ") + toString(bf)) + ", HEIGHT = ") + toString(m)) | |
428 | + | let bq = if (!(bh)) | |
429 | + | then throw("tx application throw governance not enabled") | |
430 | + | else if (bn) | |
431 | + | then throw(("proposal can't be executed as it's too early: " + bp)) | |
432 | + | else if (bo) | |
433 | + | then throw(("proposal can't be executed as it's too late:" + bp)) | |
434 | + | else if (!(bl)) | |
435 | + | then throw((((((("no quorum: " + "totalVotes: ") + toString(bk)) + ", totalGVires: ") + toString(bg)) + ", quorumRatio: ") + toString(aW))) | |
436 | + | else if (!(bm)) | |
437 | + | then throw((((((("no threshold achieved: " + "voteYes: ") + toString(bi)) + ", voteNo: ") + toString(bj)) + ", passedRatio: ") + toString(aX))) | |
438 | + | else true | |
439 | + | if (sigVerify(aT.bodyBytes, aT.proofs[0], aT.senderPublicKey)) | |
440 | + | then true | |
441 | + | else bq | |
26 | 442 | } | |
27 | 443 |
github/deemru/w8io/169f3d6 45.70 ms ◑