tx · B9brArfMmMSuGWrrU6Kzmyz4prYhbpG8ScVMUhVUjnwY

3NBqCWj3QHj8ziqSKZrPvM7T9W264VEcEKc:  -0.05000000 Waves

2023.10.06 13:19 [2786632] smart account 3NBqCWj3QHj8ziqSKZrPvM7T9W264VEcEKc > SELF 0.00000000 Waves

{ "type": 13, "id": "B9brArfMmMSuGWrrU6Kzmyz4prYhbpG8ScVMUhVUjnwY", "fee": 5000000, "feeAssetId": null, "timestamp": 1696587667506, "version": 1, "sender": "3NBqCWj3QHj8ziqSKZrPvM7T9W264VEcEKc", "senderPublicKey": "4Hm29w6cNMhSZBRdRNzrmGB8CdYBF8YfNGuDZsBNUMNy", "proofs": [ "3GrR32TwAdTkMH2tTDKxV1PHiGHcmKw7498LYpcf2Nj581JDdBF8JCB7ER7XboiJjiYTpybgjPEbtZooZ8NUJwhh" ], "script": "base64:BgJjCAISDAoKCAEBAQEBAQgICBIECgIIARIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAEBEgMKAQgSBAoCCAESAwoBCBIDCgEIEgMKAQgSBAoCCAgSBAoCCAgSAwoBCBIDCgEIMwEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhjaGFuZ2VCeQIDa2V5BXZhbHVlCQEId3JpdGVJbnQCBQNrZXkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAABQV2YWx1ZQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEHYXNzZXRJZAEDc3RyAwkAAAIFA3N0cgIFV0FWRVMFBHVuaXQJANkEAQUDc3RyABJjb25maWdBZGRyZXNzU3RvcmUCBmNvbmZpZwANY29uZmlnQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRJjb25maWdBZGRyZXNzU3RvcmUCImNoaWxkcmVuOiBjb25maWcgYWRkcmVzcyBub3QgZm91bmQCFmludmFsaWQgY29uZmlnIGFkZHJlc3MBB2FsbG93ZWQBAm9wCQD8BwQFDWNvbmZpZ0FkZHJlc3MCCW9wQWxsb3dlZAkAzAgCBQJvcAUDbmlsBQNuaWwABkhFSUdIVAUGaGVpZ2h0AApwd3JBc3NldElkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAgxwb3dlckFzc2V0SWQCFnB3ciBhc3NldCBpZCBub3QgZm91bmQACHNsYXNoZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgkApQgBBQR0aGlzAglfc2xhc2hlcnMCAAANbWFpbkFkZHJlc3NlcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1jb25maWdBZGRyZXNzAg5tYWluX2FkZHJlc3NlcwIAAQtwZXJpb2RTdG9yZQEFY2hpbGQJAKwCAgIHcGVyaW9kXwUFY2hpbGQBBnBlcmlvZAEFY2hpbGQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBC3BlcmlvZFN0b3JlAQUFY2hpbGQAAAEKb3duZXJTdG9yZQEFY2hpbGQJAKwCAgIGb3duZXJfBQVjaGlsZAENdHJlYXN1cnlTdG9yZQEFY2hpbGQJAKwCAgIJdHJlYXN1cnlfBQVjaGlsZAENbG9ja1RpbWVTdG9yZQEFY2hpbGQJAKwCAgIJbG9ja1RpbWVfBQVjaGlsZAETcGVyaW9kTG9ja1RpbWVTdG9yZQIFY2hpbGQGcGVyaW9kCQCsAgIJAKwCAgkArAICAgdwZXJpb2RfCQCkAwEFBnBlcmlvZAIKX2xvY2tUaW1lXwUFY2hpbGQBEXNraW5SZXF1aXJlZFN0b3JlAQVjaGlsZAkArAICAg5za2luX3JlcXVpcmVkXwUFY2hpbGQBDHNraW5NYXhTdG9yZQEFY2hpbGQJAKwCAgIJc2tpbl9tYXhfBQVjaGlsZAETaW52ZXN0bWVudHNNYXhTdG9yZQEFY2hpbGQJAKwCAgIQaW52ZXN0bWVudHNfbWF4XwUFY2hpbGQBEm1pbkNvbW1pdG1lbnRTdG9yZQEFY2hpbGQJAKwCAgIObWluX2NvbW1pdG1lbnQFBWNoaWxkAQ5za2luVG90YWxTdG9yZQEFY2hpbGQJAKwCAgILc2tpbl90b3RhbF8FBWNoaWxkAA1wd3JUb3RhbFN0b3JlAglwd3JfdG90YWwBGGludmVzdG1lbnRzUmVxdWlyZWRTdG9yZQEFY2hpbGQJAKwCAgIVaW52ZXN0bWVudHNfcmVxdWlyZWRfBQVjaGlsZAEVaW52ZXN0bWVudHNUb3RhbFN0b3JlAQVjaGlsZAkArAICAhJpbnZlc3RtZW50c190b3RhbF8FBWNoaWxkARtpbnZlc3RtZW50c1BlcmlvZFRvdGFsU3RvcmUBBWNoaWxkCQCsAgIJAKwCAgkArAICAgdwZXJpb2RfCQCkAwEJAQZwZXJpb2QBBQVjaGlsZAITX2ludmVzdG1lbnRzX3RvdGFsXwUFY2hpbGQBFWludmVzdG1lbnRzVG9rZW5TdG9yZQEFY2hpbGQJAKwCAgISaW52ZXN0bWVudHNfdG9rZW5fBQVjaGlsZAEQY29tbWl0bWVudHNTdG9yZQEFY2hpbGQJAKwCAgIMY29tbWl0bWVudHNfBQVjaGlsZAERY3JlYXRlSGVpZ2h0U3RvcmUBBWNoaWxkCQCsAgICDmNyZWF0ZV9oZWlnaHRfBQVjaGlsZAEQc3RhcnRIZWlnaHRTdG9yZQEFY2hpbGQJAKwCAgINc3RhcnRfaGVpZ2h0XwUFY2hpbGQBFnN0YXJ0UGVyaW9kSGVpZ2h0U3RvcmUCBWNoaWxkBnBlcmlvZAkArAICCQCsAgIJAKwCAgIHcGVyaW9kXwkApAMBBQZwZXJpb2QCDl9zdGFydF9oZWlnaHRfBQVjaGlsZAEbc3RhcnRQZXJpb2RBZnRlckhlaWdodFN0b3JlAgVjaGlsZAZwZXJpb2QJAKwCAgkArAICCQCsAgICB3BlcmlvZF8JAKQDAQUGcGVyaW9kAhRfc3RhcnRfYWZ0ZXJfaGVpZ2h0XwUFY2hpbGQBHXN0YXJ0Q3VycmVudFBlcmlvZEhlaWdodFN0b3JlAQVjaGlsZAkBFnN0YXJ0UGVyaW9kSGVpZ2h0U3RvcmUCBQVjaGlsZAkBBnBlcmlvZAEFBWNoaWxkARFjYW5jZWxIZWlnaHRTdG9yZQEFY2hpbGQJAKwCAgIOY2FuY2VsX2hlaWdodF8FBWNoaWxkARBpbnZlc3RtZW50c1Rva2VuAQVjaGlsZAkBB2Fzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWludmVzdG1lbnRzVG9rZW5TdG9yZQEFBWNoaWxkAh5pbnZlc3RtZW50cyBhc3NldCBpZCBub3QgZm91bmQBDXVzZXJTa2luU3RvcmUCBWNoaWxkBHVzZXIJAKwCAgkArAICCQCsAgICBXNraW5fBQVjaGlsZAIBXwUEdXNlcgEUdXNlclNraW5IaXN0b3J5U3RvcmUCBWNoaWxkBHVzZXIJAKwCAgkBDXVzZXJTa2luU3RvcmUCBQVjaGlsZAUEdXNlcgIIX2hpc3RvcnkBDWludmVzdG9yU3RvcmUCBWNoaWxkCGludmVzdG9yCQCsAgIJAKwCAgkArAICAglpbnZlc3Rvcl8FBWNoaWxkAgFfBQhpbnZlc3RvcgEQYXNzZXJ0Tm90U3RhcnRlZAEFY2hpbGQDCQEJaXNEZWZpbmVkAQkAnwgBCQEQc3RhcnRIZWlnaHRTdG9yZQEFBWNoaWxkCQACAQIPYWxyZWFkeSBzdGFydGVkBwESYXNzZXJ0Tm90Q2FuY2VsbGVkAQVjaGlsZAMJAQlpc0RlZmluZWQBCQCfCAEJARFjYW5jZWxIZWlnaHRTdG9yZQEFBWNoaWxkCQACAQIQYWxyZWFkeSBjYW5jZWxlZAcBFmFzc2VydE5vdFN0YXJ0ZWRQZXJpb2QBBWNoaWxkAwkAAAIJAQZwZXJpb2QBBQVjaGlsZAAACQEQYXNzZXJ0Tm90U3RhcnRlZAEFBWNoaWxkAwkBCWlzRGVmaW5lZAEJAJ8IAQkBHXN0YXJ0Q3VycmVudFBlcmlvZEhlaWdodFN0b3JlAQUFY2hpbGQJAAIBAhZwZXJpb2QgYWxyZWFkeSBzdGFydGVkBwEOdXNlckNvbW1pdG1lbnQCBWNoaWxkBHVzZXIJAJ8IAQkBDXVzZXJTa2luU3RvcmUCBQVjaGlsZAUEdXNlcgEPY3VycmVudFVzZXJTa2luAgVjaGlsZAR1c2VyCQELdmFsdWVPckVsc2UCCQEOdXNlckNvbW1pdG1lbnQCBQVjaGlsZAUEdXNlcgAAAQhsb2NrVGltZQIFY2hpbGQGcGVyaW9kCQELdmFsdWVPckVsc2UCCQCfCAEJARNwZXJpb2RMb2NrVGltZVN0b3JlAgUFY2hpbGQFBnBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJAQ1sb2NrVGltZVN0b3JlAQUFY2hpbGQCEW5vIGNoaWxkIGxvY2tUaW1lAQx1bmxvY2tIZWlnaHQBBWNoaWxkBAFwCQEGcGVyaW9kAQUFY2hpbGQEC3BlcmlvZFN0YXJ0CQCfCAEJARZzdGFydFBlcmlvZEhlaWdodFN0b3JlAgUFY2hpbGQFAXADCQEJaXNEZWZpbmVkAQULcGVyaW9kU3RhcnQJAGQCCQEFdmFsdWUBBQtwZXJpb2RTdGFydAkBCGxvY2tUaW1lAgUFY2hpbGQFAXAECnByZXZQZXJpb2QJAGUCBQFwAAEECmNoaWxkU3RhcnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEQc3RhcnRIZWlnaHRTdG9yZQEFBWNoaWxkAhVubyBjaGlsZCBzdGFydCBoZWlnaHQJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEJARZzdGFydFBlcmlvZEhlaWdodFN0b3JlAgUFY2hpbGQFCnByZXZQZXJpb2QFCmNoaWxkU3RhcnQJAQhsb2NrVGltZQIFBWNoaWxkBQpwcmV2UGVyaW9kAQh0cmVhc3VyeQEFY2hpbGQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBDXRyZWFzdXJ5U3RvcmUBBQVjaGlsZAUFY2hpbGQBA2ludAEDa2V5CQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUDa2V5AAABA3N0cgEDa2V5CQELdmFsdWVPckVsc2UCCQCiCAEFA2tleQIAAQ1hZHZpc2VQcm9qZWN0AQVjaGlsZAQBcAkBBnBlcmlvZAEFBWNoaWxkBAlwZXJpb2RTdHIJAKQDAQUBcAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIIaGVpZ2h0OiAJAKQDAQUGSEVJR0hUAgssIHByb2plY3Q6IAUFY2hpbGQCCSwgb3duZXI6IAkBA3N0cgEJAQpvd25lclN0b3JlAQUFY2hpbGQCDCwgdHJlYXN1cnk6IAkBCHRyZWFzdXJ5AQUFY2hpbGQCDSwgbG9ja190aW1lOiAJAQNpbnQBCQENbG9ja1RpbWVTdG9yZQEFBWNoaWxkAhEsIHNraW5fcmVxdWlyZWQ6IAkBA2ludAEJARFza2luUmVxdWlyZWRTdG9yZQEFBWNoaWxkAgwsIHNraW5fbWF4OiAJAQNpbnQBCQEMc2tpbk1heFN0b3JlAQUFY2hpbGQCEiwgbWluX2NvbW1pdG1lbnQ6IAkBA2ludAEJARJtaW5Db21taXRtZW50U3RvcmUBBQVjaGlsZAIOLCBza2luX3RvdGFsOiAJAQNpbnQBCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAIYLCBpbnZlc3RtZW50c19yZXF1aXJlZDogCQEDaW50AQkBGGludmVzdG1lbnRzUmVxdWlyZWRTdG9yZQEFBWNoaWxkAhMsIGludmVzdG1lbnRzX21heDogCQEDaW50AQkBE2ludmVzdG1lbnRzTWF4U3RvcmUBBQVjaGlsZAIVLCBpbnZlc3RtZW50c190b3RhbDogCQEDaW50AQkBFWludmVzdG1lbnRzVG90YWxTdG9yZQEFBWNoaWxkAhUsIGludmVzdG1lbnRzX3Rva2VuOiAJAQNzdHIBCQEVaW52ZXN0bWVudHNUb2tlblN0b3JlAQUFY2hpbGQCDywgY29tbWl0bWVudHM6IAkBA3N0cgEJARBjb21taXRtZW50c1N0b3JlAQUFY2hpbGQCESwgY3JlYXRlX2hlaWdodDogCQEDaW50AQkBEWNyZWF0ZUhlaWdodFN0b3JlAQUFY2hpbGQCECwgc3RhcnRfaGVpZ2h0OiAJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEQc3RhcnRIZWlnaHRTdG9yZQEFBWNoaWxkAP///////////wECESwgY2FuY2VsX2hlaWdodDogCQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEWNhbmNlbEhlaWdodFN0b3JlAQUFY2hpbGQA////////////AQIKLCBwZXJpb2Q6IAUJcGVyaW9kU3RyAgksIHBlcmlvZF8FCXBlcmlvZFN0cgIVX3N0YXJ0X2FmdGVyX2hlaWdodDogCQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBG3N0YXJ0UGVyaW9kQWZ0ZXJIZWlnaHRTdG9yZQIFBWNoaWxkBQFwAP///////////wECCSwgcGVyaW9kXwUJcGVyaW9kU3RyAg9fc3RhcnRfaGVpZ2h0OiAJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEdc3RhcnRDdXJyZW50UGVyaW9kSGVpZ2h0U3RvcmUBBQVjaGlsZAD///////////8BAgksIHBlcmlvZF8FCXBlcmlvZFN0cgIMX2xvY2tfdGltZTogCQCkAwEJAQhsb2NrVGltZQIFBWNoaWxkBQFwAhEsIHVubG9ja19oZWlnaHQ6IAkApAMBCQEMdW5sb2NrSGVpZ2h0AQUFY2hpbGQCHCwgcGVyaW9kX2ludmVzdG1lbnRzX3RvdGFsOiAJAQNpbnQBCQEbaW52ZXN0bWVudHNQZXJpb2RUb3RhbFN0b3JlAQUFY2hpbGQBEWFkdmlzZVVzZXJQcm9qZWN0AgVjaGlsZAR1c2VyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAghoZWlnaHQ6IAkApAMBBQZIRUlHSFQCCywgcHJvamVjdDogBQVjaGlsZAIHLCBza2luOgkApAMBCQEPY3VycmVudFVzZXJTa2luAgUFY2hpbGQFBHVzZXICCCwgcG93ZXI6CQCkAwEJAQt2YWx1ZU9yRWxzZQIJAQ51c2VyQ29tbWl0bWVudAIFBWNoaWxkBQR1c2VyAAACDywgaW52ZXN0bWVudHM6IAkBA2ludAEJAQ1pbnZlc3RvclN0b3JlAgUFY2hpbGQFBHVzZXIQAWkBCnByb2plY3RGb3IKBW93bmVyBHNraW4HbWF4U2tpbg1taW5Db21taXRtZW50CGxvY2tUaW1lC2ludmVzdG1lbnRzDm1heEludmVzdG1lbnRzEGludmVzdG1lbnRzVG9rZW4LY29tbWl0bWVudHMFY2hpbGQEAWEJAQdhbGxvd2VkAQIKcHJvamVjdEZvcgMJAAACBQFhBQFhAwkBASEBCQEIY29udGFpbnMCBQ1tYWluQWRkcmVzc2VzCQClCAEIBQFpBmNhbGxlcgkAAgECBmRlbmllZAQBdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFBWNoaWxkAhhpbnZhbGlkIHRyZWFzdXJ5IGFkZHJlc3MDCQAAAgUBdAUBdAQFdG9rZW4JAQdhc3NldElkAQUQaW52ZXN0bWVudHNUb2tlbgMJAAACBQV0b2tlbgUFdG9rZW4DAwkAZgIFB21heFNraW4AAAkAZgIFBHNraW4FB21heFNraW4HCQACAQIPaW52YWxpZCBtYXhTa2luAwMJAGYCBQ5tYXhJbnZlc3RtZW50cwAACQBmAgULaW52ZXN0bWVudHMFDm1heEludmVzdG1lbnRzBwkAAgECFmludmFsaWQgbWF4SW52ZXN0bWVudHMJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCCQEKb3duZXJTdG9yZQEFBWNoaWxkBQVvd25lcgkAzAgCCQEId3JpdGVJbnQCCQERY3JlYXRlSGVpZ2h0U3RvcmUBBQVjaGlsZAUGSEVJR0hUCQDMCAIJAQh3cml0ZUludAIJARFza2luUmVxdWlyZWRTdG9yZQEFBWNoaWxkBQRza2luCQDMCAIJAQh3cml0ZUludAIJAQxza2luTWF4U3RvcmUBBQVjaGlsZAUHbWF4U2tpbgkAzAgCCQEId3JpdGVJbnQCCQESbWluQ29tbWl0bWVudFN0b3JlAQUFY2hpbGQFDW1pbkNvbW1pdG1lbnQJAMwIAgkBCHdyaXRlSW50AgkBDWxvY2tUaW1lU3RvcmUBBQVjaGlsZAUIbG9ja1RpbWUJAMwIAgkBCHdyaXRlSW50AgkBGGludmVzdG1lbnRzUmVxdWlyZWRTdG9yZQEFBWNoaWxkBQtpbnZlc3RtZW50cwkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIJARVpbnZlc3RtZW50c1Rva2VuU3RvcmUBBQVjaGlsZAUQaW52ZXN0bWVudHNUb2tlbgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIJARBjb21taXRtZW50c1N0b3JlAQUFY2hpbGQFC2NvbW1pdG1lbnRzCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgkBDXRyZWFzdXJ5U3RvcmUBBQVjaGlsZAUFY2hpbGQJAMwIAgkBCHdyaXRlSW50AgkBE2ludmVzdG1lbnRzTWF4U3RvcmUBBQVjaGlsZAUObWF4SW52ZXN0bWVudHMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1pbmNyZXJhc2VTa2luAgVjaGlsZA1za2luSW5jcmVtZW50BAFhCQEHYWxsb3dlZAECDWluY3JlcmFzZVNraW4DCQAAAgUBYQUBYQQBcwMJARBhc3NlcnROb3RTdGFydGVkAQUFY2hpbGQJARJhc3NlcnROb3RDYW5jZWxsZWQBBQVjaGlsZAcDCQAAAgUBcwUBcwMJAGcCAAAFDXNraW5JbmNyZW1lbnQJAAIBAjJpbnZhbGlkIGFyZ3VtZW50OiBza2luSW5jcmVtZW50IHNob3VsZCBiZSBwb3NpdGl2ZQQFb3duZXIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQpvd25lclN0b3JlAQUFY2hpbGQDCQECIT0CCQClCAEIBQFpBmNhbGxlcgUFb3duZXIJAAIBAgZkZW5pZWQJAMwIAgkBCGNoYW5nZUJ5AgkBEXNraW5SZXF1aXJlZFN0b3JlAQUFY2hpbGQFDXNraW5JbmNyZW1lbnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQljb21taXRGb3ICBWNoaWxkB2FkZHJlc3MEAWEJAQdhbGxvd2VkAQIJY29tbWl0Rm9yAwkAAAIFAWEFAWEEAXMJARZhc3NlcnROb3RTdGFydGVkUGVyaW9kAQUFY2hpbGQDCQAAAgUBcwUBcwQBcAkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFAXAHYXNzZXRJZAUKcHdyQXNzZXRJZAkAAgECL2ludmFsaWQgYXR0YWNoZWQgcGF5bWVudDogJHBvd2VyIHRva2VuIGV4cGVjdGVkBApjb21taXRtZW50CAUBcAZhbW91bnQEDW1pbkNvbW1pdG1lbnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQESbWluQ29tbWl0bWVudFN0b3JlAQUFY2hpbGQCE0NoaWxkIERBTyBub3QgZm91bmQDCQBmAgUNbWluQ29tbWl0bWVudAUKY29tbWl0bWVudAkAAgEJAKwCAgITTWluLiBjb21taXRtZW50IGlzIAkApAMBBQ1taW5Db21taXRtZW50BA9za2luVG90YWxTdG9yZTEJAQ5za2luVG90YWxTdG9yZQEFBWNoaWxkBAxuZXdTa2luVG90YWwJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD3NraW5Ub3RhbFN0b3JlMQAABQpjb21taXRtZW50BAdza2luTWF4CQELdmFsdWVPckVsc2UCCQCfCAEJAQxza2luTWF4U3RvcmUBBQVjaGlsZAAAAwMJAGYCBQdza2luTWF4AAAJAGYCBQxuZXdTa2luVG90YWwFB3NraW5NYXgHCQACAQkArAICAhxUb3RhbCBtYXguIHNraW4gaXMgcmVhY2hlZDogCQCkAwEFB3NraW5NYXgJAMwIAgkBCGNoYW5nZUJ5AgkBDXVzZXJTa2luU3RvcmUCBQVjaGlsZAUHYWRkcmVzcwUKY29tbWl0bWVudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPc2tpblRvdGFsU3RvcmUxBQxuZXdTa2luVG90YWwJAMwIAgkBCGNoYW5nZUJ5AgUNcHdyVG90YWxTdG9yZQUKY29tbWl0bWVudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNvbW1pdEZvck1pbmVyAgVjaGlsZAdhZGRyZXNzBAFhCQEHYWxsb3dlZAECDmNvbW1pdEZvck1pbmVyAwkAAAIFAWEFAWEDCQEBIQEJAQhjb250YWlucwIFDW1haW5BZGRyZXNzZXMJAKUIAQgFAWkGY2FsbGVyCQACAQIGZGVuaWVkBAFwCQCRAwIIBQFpCHBheW1lbnRzAAADAwkBAiE9AggFAXAHYXNzZXRJZAUKcHdyQXNzZXRJZAYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECLGludmFsaWQgcGF5bWVudHM6IG9ubHkgJHBvd2VyIHRva2VuIGV4cGVjdGVkBApjb21taXRtZW50CAUBcAZhbW91bnQJAMwIAgkBCGNoYW5nZUJ5AgkBDXVzZXJTa2luU3RvcmUCBQVjaGlsZAUHYWRkcmVzcwUKY29tbWl0bWVudAkAzAgCCQEIY2hhbmdlQnkCCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAUKY29tbWl0bWVudAkAzAgCCQEIY2hhbmdlQnkCBQ1wd3JUb3RhbFN0b3JlBQpjb21taXRtZW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGaW52ZXN0AQVjaGlsZAQBYQkBB2FsbG93ZWQBAgZpbnZlc3QDCQAAAgUBYQUBYQQBcwkBFmFzc2VydE5vdFN0YXJ0ZWRQZXJpb2QBBQVjaGlsZAMJAAACBQFzBQFzBAV0b2tlbgkBEGludmVzdG1lbnRzVG9rZW4BBQVjaGlsZAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUFdG9rZW4JAAIBAhxpbnZhbGlkIGludmVzdG1lbnRzIGFzc2V0IGlkBAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdtYXhpbXVtCQELdmFsdWVPckVsc2UCCQCfCAEJARNpbnZlc3RtZW50c01heFN0b3JlAQUFY2hpbGQAAAoBBWRhdGFzAQFhCQDMCAIJAQhjaGFuZ2VCeQIJAQ1pbnZlc3RvclN0b3JlAgUFY2hpbGQJAKUIAQgFAWkGY2FsbGVyBQFhCQDMCAIJAQhjaGFuZ2VCeQIJARVpbnZlc3RtZW50c1RvdGFsU3RvcmUBBQVjaGlsZAUBYQkAzAgCCQEIY2hhbmdlQnkCCQEbaW52ZXN0bWVudHNQZXJpb2RUb3RhbFN0b3JlAQUFY2hpbGQFAWEFA25pbAMJAGYCBQdtYXhpbXVtAAAECnRvdGFsU3RvcmUJARVpbnZlc3RtZW50c1RvdGFsU3RvcmUBBQVjaGlsZAQFdG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUKdG90YWxTdG9yZQAABAppbnZlc3RtZW5zCQCXAwEJAMwIAgUGYW1vdW50CQDMCAIJAGUCBQdtYXhpbXVtBQV0b3RhbAUDbmlsAwkAZwIAAAUKaW52ZXN0bWVucwkAAgEJAKwCAgIjVG90YWwgbWF4LiBpbnZlc3RtZW50cyBpcyByZWFjaGVkOiAJAKQDAQUHbWF4aW11bQQKY2hhcmdlQmFjawkAZQIFBmFtb3VudAUKaW52ZXN0bWVucwMJAGYCBQpjaGFyZ2VCYWNrAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpjaGFyZ2VCYWNrBQV0b2tlbgkBBWRhdGFzAQUKaW52ZXN0bWVucwkBBWRhdGFzAQUKaW52ZXN0bWVucwkBBWRhdGFzAQUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXN0YXJ0AQVjaGlsZAQGcGF1c2VkCQEHYWxsb3dlZAECBXN0YXJ0AwkAAAIFBnBhdXNlZAUGcGF1c2VkBAFzAwkBEGFzc2VydE5vdFN0YXJ0ZWQBBQVjaGlsZAkBEmFzc2VydE5vdENhbmNlbGxlZAEFBWNoaWxkBwMJAAACBQFzBQFzBAl0b3RhbFNraW4JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDnNraW5Ub3RhbFN0b3JlAQUFY2hpbGQAAAQMc2tpblJlcXVpcmVkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBEXNraW5SZXF1aXJlZFN0b3JlAQUFY2hpbGQCFGNoaWxkIG5vdCByZWdpc3RlcmVkAwkAZgIFDHNraW5SZXF1aXJlZAUJdG90YWxTa2luCQACAQIbbm90IGVub3VnaCBza2luIGluIHRoZSBnYW1lBBB0b3RhbEludmVzdG1lbnRzCQELdmFsdWVPckVsc2UCCQCfCAEJARVpbnZlc3RtZW50c1RvdGFsU3RvcmUBBQVjaGlsZAAAAwkAZgIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARhpbnZlc3RtZW50c1JlcXVpcmVkU3RvcmUBBQVjaGlsZAUQdG90YWxJbnZlc3RtZW50cwkAAgECFm5vdCBlbm91Z2ggaW52ZXN0bWVudHMJAMwIAgkBDEludGVnZXJFbnRyeQIJARBzdGFydEhlaWdodFN0b3JlAQUFY2hpbGQFBkhFSUdIVAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEIdHJlYXN1cnkBBQVjaGlsZAUQdG90YWxJbnZlc3RtZW50cwkBEGludmVzdG1lbnRzVG9rZW4BBQVjaGlsZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmluaXROZXh0UGVyaW9kAwVjaGlsZBNibG9ja0JldHdlZW5QZXJpb2RzCGxvY2tUaW1lBAZwYXVzZWQJAQdhbGxvd2VkAQIOaW5pdE5leHRQZXJpb2QDCQAAAgUGcGF1c2VkBQZwYXVzZWQDAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAQpvd25lclN0b3JlAQUFY2hpbGQJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwcJAAIBAgZkZW5pZWQDCQBmAgAABRNibG9ja0JldHdlZW5QZXJpb2RzCQACAQIuYmxvY2tCZXR3ZWVuUGVyaW9kcyBzaG91bGQgYmUgcG9zaXRpdmUgb3IgemVybwMJAGYCAAEFCGxvY2tUaW1lCQACAQIbbG9ja1RpbWUgc2hvdWxkIGJlIHBvc2l0aXZlBA11bmxvY2tIZWlnaHRfCQEMdW5sb2NrSGVpZ2h0AQUFY2hpbGQDCQBmAgUNdW5sb2NrSGVpZ2h0XwUGSEVJR0hUCQACAQIeY3VycmVudCBwZXJpb2QgaXMgc3RpbGwgYWN0aXZlBAFwCQEGcGVyaW9kAQUFY2hpbGQDAwkAZgIFAXAAAAkBASEBCQEJaXNEZWZpbmVkAQkBFnN0YXJ0UGVyaW9kSGVpZ2h0U3RvcmUCBQVjaGlsZAUBcAcJAAIBAh9uZXh0IHBlcmlvZCBhbHJlYWR5IGluaXRpYWxpemVkBAluZXdQZXJpb2QJAGQCBQFwAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQtwZXJpb2RTdG9yZQEFBWNoaWxkBQluZXdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIJARtzdGFydFBlcmlvZEFmdGVySGVpZ2h0U3RvcmUCBQVjaGlsZAUJbmV3UGVyaW9kCQBkAgUNdW5sb2NrSGVpZ2h0XwUTYmxvY2tCZXR3ZWVuUGVyaW9kcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE3BlcmlvZExvY2tUaW1lU3RvcmUCBQVjaGlsZAUJbmV3UGVyaW9kBQhsb2NrVGltZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3N0YXJ0UGVyaW9kAQVjaGlsZAQGcGF1c2VkCQEHYWxsb3dlZAECC3N0YXJ0UGVyaW9kAwkAAAIFBnBhdXNlZAUGcGF1c2VkBAFzCQEWYXNzZXJ0Tm90U3RhcnRlZFBlcmlvZAEFBWNoaWxkAwkAAAIFAXMFAXMEB3BlcmlvZF8JAQZwZXJpb2QBBQVjaGlsZAQPc3RhcnRBZnRlclN0b3JlCQEbc3RhcnRQZXJpb2RBZnRlckhlaWdodFN0b3JlAgUFY2hpbGQFB3BlcmlvZF8ECnN0YXJ0QWZ0ZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQ9zdGFydEFmdGVyU3RvcmUJAKwCAgIPa2V5IG5vdCBmb3VuZDogBQ9zdGFydEFmdGVyU3RvcmUDCQBmAgUKc3RhcnRBZnRlcgUGSEVJR0hUCQACAQIJdG9vIGVhcmx5BAl0b3RhbFNraW4JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDnNraW5Ub3RhbFN0b3JlAQUFY2hpbGQAAAQMc2tpblJlcXVpcmVkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBEXNraW5SZXF1aXJlZFN0b3JlAQUFY2hpbGQCFGNoaWxkIG5vdCByZWdpc3RlcmVkAwkAZgIFDHNraW5SZXF1aXJlZAUJdG90YWxTa2luCQACAQIbbm90IGVub3VnaCBza2luIGluIHRoZSBnYW1lBBFwZXJpb2RJbnZlc3RtZW50cwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEbaW52ZXN0bWVudHNQZXJpb2RUb3RhbFN0b3JlAQUFY2hpbGQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHXN0YXJ0Q3VycmVudFBlcmlvZEhlaWdodFN0b3JlAQUFY2hpbGQFBkhFSUdIVAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQVjaGlsZAURcGVyaW9kSW52ZXN0bWVudHMJARBpbnZlc3RtZW50c1Rva2VuAQUFY2hpbGQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVzbGFzaAIFY2hpbGQGYW1vdW50BAZwYXVzZWQJAQdhbGxvd2VkAQIBLwMJAAACBQZwYXVzZWQFBnBhdXNlZAMJAQEhAQkBCGNvbnRhaW5zAgUIc2xhc2hlcnMJAKUIAQgFAWkGY2FsbGVyCQACAQIGZGVuaWVkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBCQEQc3RhcnRIZWlnaHRTdG9yZQEFBWNoaWxkCQACAQILbm90IHN0YXJ0ZWQJAMwIAgkBCGNoYW5nZUJ5AgkBDnNraW5Ub3RhbFN0b3JlAQUFY2hpbGQJAQEtAQUGYW1vdW50CQDMCAIJAQRCdXJuAgUKcHdyQXNzZXRJZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIY29tcGxldGUBBWNoaWxkBAZwYXVzZWQJAQdhbGxvd2VkAQIIY29tcGxldGUDCQAAAgUGcGF1c2VkBQZwYXVzZWQEDXVubG9ja0hlaWdodF8JAQx1bmxvY2tIZWlnaHQBBQVjaGlsZAMJAGYCBQ11bmxvY2tIZWlnaHRfBQZIRUlHSFQJAAIBAgxzdGlsbCBsb2NrZWQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBARza2luCQEPY3VycmVudFVzZXJTa2luAgUFY2hpbGQFBHVzZXIDCQAAAgUEc2tpbgAACQACAQIbeW91IGhhZCBubyBza2luIGluIHRoZSBnYW1lBAV0b3RhbAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDnNraW5Ub3RhbFN0b3JlAQUFY2hpbGQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQRza2luBQpwd3JBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ11c2VyU2tpblN0b3JlAgUFY2hpbGQFBHVzZXIJAMwIAgkBCGNoYW5nZUJ5AgkBDnNraW5Ub3RhbFN0b3JlAQUFY2hpbGQJAQEtAQUEc2tpbgkAzAgCCQEIY2hhbmdlQnkCBQ1wd3JUb3RhbFN0b3JlCQEBLQEFBHNraW4JAMwIAgkBDEludGVnZXJFbnRyeQIJARR1c2VyU2tpbkhpc3RvcnlTdG9yZQIFBWNoaWxkBQR1c2VyBQRza2luBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEGY2FuY2VsAQVjaGlsZAQGcGF1c2VkCQEHYWxsb3dlZAECBmNhbmNlbAMJAAACBQZwYXVzZWQFBnBhdXNlZAQBcwMJARBhc3NlcnROb3RTdGFydGVkAQUFY2hpbGQGCQESYXNzZXJ0Tm90Q2FuY2VsbGVkAQUFY2hpbGQDCQAAAgUBcwUBcwMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEKb3duZXJTdG9yZQEFBWNoaWxkCQACAQIUZGVuaWVkLiBub3QgYW4gb3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARFjYW5jZWxIZWlnaHRTdG9yZQEFBWNoaWxkBQZIRUlHSFQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQp1bmRvSW52ZXN0AQVjaGlsZAQGcGF1c2VkCQEHYWxsb3dlZAECCnVuZG9JbnZlc3QDCQAAAgUGcGF1c2VkBQZwYXVzZWQEAXMJARBhc3NlcnROb3RTdGFydGVkAQUFY2hpbGQDCQAAAgUBcwUBcwQRaW52ZXN0bWVudHNTdG9yZTEJAQ1pbnZlc3RvclN0b3JlAgUFY2hpbGQJAKUIAQgFAWkGY2FsbGVyBAtpbnZlc3RtZW50cwkBC3ZhbHVlT3JFbHNlAgkAnwgBBRFpbnZlc3RtZW50c1N0b3JlMQAAAwkAAAIFC2ludmVzdG1lbnRzAAAJAAIBAg5ubyBpbnZlc3RtZW50cwkAzAgCCQELRGVsZXRlRW50cnkBBRFpbnZlc3RtZW50c1N0b3JlMQkAzAgCCQEIY2hhbmdlQnkCCQEVaW52ZXN0bWVudHNUb3RhbFN0b3JlAQUFY2hpbGQJAQEtAQULaW52ZXN0bWVudHMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQtpbnZlc3RtZW50cwkBEGludmVzdG1lbnRzVG9rZW4BBQVjaGlsZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXVuZG9Db21taXRGb3ICBWNoaWxkB2FkZHJlc3MEBnBhdXNlZAkBB2FsbG93ZWQBAg11bmRvQ29tbWl0Rm9yAwkAAAIFBnBhdXNlZAUGcGF1c2VkAwkBASEBCQEIY29udGFpbnMCBQ1tYWluQWRkcmVzc2VzCQClCAEIBQFpBmNhbGxlcgkAAgECBmRlbmllZAQBcwkBEGFzc2VydE5vdFN0YXJ0ZWQBBQVjaGlsZAMJAAACBQFzBQFzBA51c2VyU2tpblN0b3JlMQkBDXVzZXJTa2luU3RvcmUCBQVjaGlsZAUHYWRkcmVzcwQEc2tpbgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ51c2VyU2tpblN0b3JlMQAAAwkAAAIFBHNraW4AAAkAAgECB25vIHNraW4JAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBBQ51c2VyU2tpblN0b3JlMQkAzAgCCQEIY2hhbmdlQnkCCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAkBAS0BBQRza2luCQDMCAIJAQhjaGFuZ2VCeQIFDXB3clRvdGFsU3RvcmUJAQEtAQUEc2tpbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBHNraW4FCnB3ckFzc2V0SWQFA25pbAUEc2tpbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQl1c2VyUG93ZXICBWNoaWxkBHVzZXIJAJQKAgUDbmlsCQELdmFsdWVPckVsc2UCCQEOdXNlckNvbW1pdG1lbnQCBQVjaGlsZAUEdXNlcgAAAWkBCnRvdGFsUG93ZXIBBWNoaWxkCQCUCgIFA25pbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJAQ5za2luVG90YWxTdG9yZQEFBWNoaWxkAht0b3RhbFBvd2VyOiBjaGlsZCBub3QgZm91bmQBaQEEaW5pdAEEY29uZgkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIFEmNvbmZpZ0FkZHJlc3NTdG9yZQUEY29uZgUDbmlsAHKlyJo=", "chainId": 84, "height": 2786632, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
5+ then StringEntry(key, value)
6+ else throw(("already initialized: " + key))
7+
8+
9+func writeInt (key,value) = if ((0 > value))
10+ then throw(((("writing negative value " + toString(value)) + " for key ") + key))
11+ else IntegerEntry(key, value)
12+
13+
14+func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
15+
16+
17+func asInt (value) = match value {
18+ case int: Int =>
19+ int
20+ case _ =>
21+ throw("wrong type, expected: Int")
22+}
23+
24+
25+func assetId (str) = if ((str == "WAVES"))
26+ then unit
27+ else fromBase58String(str)
28+
29+
30+let configAddressStore = "config"
31+
32+let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "children: config address not found")), "invalid config address")
33+
34+func allowed (op) = invoke(configAddress, "opAllowed", [op], nil)
35+
36+
37+let HEIGHT = height
38+
39+let pwrAssetId = fromBase58String(valueOrErrorMessage(getString(configAddress, "powerAssetId"), "pwr asset id not found"))
40+
41+let slashers = valueOrElse(getString(configAddress, (toString(this) + "_slashers")), "")
42+
43+let mainAddresses = valueOrElse(getString(configAddress, "main_addresses"), "")
44+
45+func periodStore (child) = ("period_" + child)
46+
47+
48+func period (child) = valueOrElse(getInteger(periodStore(child)), 0)
49+
50+
51+func ownerStore (child) = ("owner_" + child)
52+
53+
54+func treasuryStore (child) = ("treasury_" + child)
55+
56+
57+func lockTimeStore (child) = ("lockTime_" + child)
58+
59+
60+func periodLockTimeStore (child,period) = ((("period_" + toString(period)) + "_lockTime_") + child)
61+
62+
63+func skinRequiredStore (child) = ("skin_required_" + child)
64+
65+
66+func skinMaxStore (child) = ("skin_max_" + child)
67+
68+
69+func investmentsMaxStore (child) = ("investments_max_" + child)
70+
71+
72+func minCommitmentStore (child) = ("min_commitment" + child)
73+
74+
75+func skinTotalStore (child) = ("skin_total_" + child)
76+
77+
78+let pwrTotalStore = "pwr_total"
79+
80+func investmentsRequiredStore (child) = ("investments_required_" + child)
81+
82+
83+func investmentsTotalStore (child) = ("investments_total_" + child)
84+
85+
86+func investmentsPeriodTotalStore (child) = ((("period_" + toString(period(child))) + "_investments_total_") + child)
87+
88+
89+func investmentsTokenStore (child) = ("investments_token_" + child)
90+
91+
92+func commitmentsStore (child) = ("commitments_" + child)
93+
94+
95+func createHeightStore (child) = ("create_height_" + child)
96+
97+
98+func startHeightStore (child) = ("start_height_" + child)
99+
100+
101+func startPeriodHeightStore (child,period) = ((("period_" + toString(period)) + "_start_height_") + child)
102+
103+
104+func startPeriodAfterHeightStore (child,period) = ((("period_" + toString(period)) + "_start_after_height_") + child)
105+
106+
107+func startCurrentPeriodHeightStore (child) = startPeriodHeightStore(child, period(child))
108+
109+
110+func cancelHeightStore (child) = ("cancel_height_" + child)
111+
112+
113+func investmentsToken (child) = assetId(valueOrErrorMessage(getString(investmentsTokenStore(child)), "investments asset id not found"))
114+
115+
116+func userSkinStore (child,user) = ((("skin_" + child) + "_") + user)
117+
118+
119+func userSkinHistoryStore (child,user) = (userSkinStore(child, user) + "_history")
120+
121+
122+func investorStore (child,investor) = ((("investor_" + child) + "_") + investor)
123+
124+
125+func assertNotStarted (child) = if (isDefined(getInteger(startHeightStore(child))))
126+ then throw("already started")
127+ else false
128+
129+
130+func assertNotCancelled (child) = if (isDefined(getInteger(cancelHeightStore(child))))
131+ then throw("already canceled")
132+ else false
133+
134+
135+func assertNotStartedPeriod (child) = if ((period(child) == 0))
136+ then assertNotStarted(child)
137+ else if (isDefined(getInteger(startCurrentPeriodHeightStore(child))))
138+ then throw("period already started")
139+ else false
140+
141+
142+func userCommitment (child,user) = getInteger(userSkinStore(child, user))
143+
144+
145+func currentUserSkin (child,user) = valueOrElse(userCommitment(child, user), 0)
146+
147+
148+func lockTime (child,period) = valueOrElse(getInteger(periodLockTimeStore(child, period)), valueOrErrorMessage(getInteger(lockTimeStore(child)), "no child lockTime"))
149+
150+
151+func unlockHeight (child) = {
152+ let p = period(child)
153+ let periodStart = getInteger(startPeriodHeightStore(child, p))
154+ if (isDefined(periodStart))
155+ then (value(periodStart) + lockTime(child, p))
156+ else {
157+ let prevPeriod = (p - 1)
158+ let childStart = valueOrErrorMessage(getInteger(startHeightStore(child)), "no child start height")
159+ (valueOrElse(getInteger(startPeriodHeightStore(child, prevPeriod)), childStart) + lockTime(child, prevPeriod))
160+ }
161+ }
162+
163+
164+func treasury (child) = valueOrElse(getString(treasuryStore(child)), child)
165+
166+
167+func int (key) = toString(valueOrElse(getInteger(key), 0))
168+
169+
170+func str (key) = valueOrElse(getString(key), "")
171+
172+
173+func adviseProject (child) = {
174+ let p = period(child)
175+ let periodStr = toString(p)
176+ ((((((((((((((((((((((((((((((((((((((((((((((((((("height: " + toString(HEIGHT)) + ", project: ") + child) + ", owner: ") + str(ownerStore(child))) + ", treasury: ") + treasury(child)) + ", lock_time: ") + int(lockTimeStore(child))) + ", skin_required: ") + int(skinRequiredStore(child))) + ", skin_max: ") + int(skinMaxStore(child))) + ", min_commitment: ") + int(minCommitmentStore(child))) + ", skin_total: ") + int(skinTotalStore(child))) + ", investments_required: ") + int(investmentsRequiredStore(child))) + ", investments_max: ") + int(investmentsMaxStore(child))) + ", investments_total: ") + int(investmentsTotalStore(child))) + ", investments_token: ") + str(investmentsTokenStore(child))) + ", commitments: ") + str(commitmentsStore(child))) + ", create_height: ") + int(createHeightStore(child))) + ", start_height: ") + toString(valueOrElse(getInteger(startHeightStore(child)), -1))) + ", cancel_height: ") + toString(valueOrElse(getInteger(cancelHeightStore(child)), -1))) + ", period: ") + periodStr) + ", period_") + periodStr) + "_start_after_height: ") + toString(valueOrElse(getInteger(startPeriodAfterHeightStore(child, p)), -1))) + ", period_") + periodStr) + "_start_height: ") + toString(valueOrElse(getInteger(startCurrentPeriodHeightStore(child)), -1))) + ", period_") + periodStr) + "_lock_time: ") + toString(lockTime(child, p))) + ", unlock_height: ") + toString(unlockHeight(child))) + ", period_investments_total: ") + int(investmentsPeriodTotalStore(child)))
177+ }
178+
179+
180+func adviseUserProject (child,user) = ((((((((("height: " + toString(HEIGHT)) + ", project: ") + child) + ", skin:") + toString(currentUserSkin(child, user))) + ", power:") + toString(valueOrElse(userCommitment(child, user), 0))) + ", investments: ") + int(investorStore(child, user)))
181+
182+
183+@Callable(i)
184+func projectFor (owner,skin,maxSkin,minCommitment,lockTime,investments,maxInvestments,investmentsToken,commitments,child) = {
185+ let a = allowed("projectFor")
186+ if ((a == a))
187+ then if (!(contains(mainAddresses, toString(i.caller))))
188+ then throw("denied")
189+ else {
190+ let t = valueOrErrorMessage(addressFromString(child), "invalid treasury address")
191+ if ((t == t))
192+ then {
193+ let token = assetId(investmentsToken)
194+ if ((token == token))
195+ then if (if ((maxSkin > 0))
196+ then (skin > maxSkin)
197+ else false)
198+ then throw("invalid maxSkin")
199+ else if (if ((maxInvestments > 0))
200+ then (investments > maxInvestments)
201+ else false)
202+ then throw("invalid maxInvestments")
203+ else [writeConstString(ownerStore(child), owner), writeInt(createHeightStore(child), HEIGHT), writeInt(skinRequiredStore(child), skin), writeInt(skinMaxStore(child), maxSkin), writeInt(minCommitmentStore(child), minCommitment), writeInt(lockTimeStore(child), lockTime), writeInt(investmentsRequiredStore(child), investments), writeConstString(investmentsTokenStore(child), investmentsToken), writeConstString(commitmentsStore(child), commitments), writeConstString(treasuryStore(child), child), writeInt(investmentsMaxStore(child), maxInvestments)]
204+ else throw("Strict value is not equal to itself.")
205+ }
206+ else throw("Strict value is not equal to itself.")
207+ }
208+ else throw("Strict value is not equal to itself.")
209+ }
210+
211+
212+
213+@Callable(i)
214+func increraseSkin (child,skinIncrement) = {
215+ let a = allowed("increraseSkin")
216+ if ((a == a))
217+ then {
218+ let s = if (assertNotStarted(child))
219+ then assertNotCancelled(child)
220+ else false
221+ if ((s == s))
222+ then if ((0 >= skinIncrement))
223+ then throw("invalid argument: skinIncrement should be positive")
224+ else {
225+ let owner = getStringValue(ownerStore(child))
226+ if ((toString(i.caller) != owner))
227+ then throw("denied")
228+ else [changeBy(skinRequiredStore(child), skinIncrement)]
229+ }
230+ else throw("Strict value is not equal to itself.")
231+ }
232+ else throw("Strict value is not equal to itself.")
233+ }
234+
235+
236+
237+@Callable(i)
238+func commitFor (child,address) = {
239+ let a = allowed("commitFor")
240+ if ((a == a))
241+ then {
242+ let s = assertNotStartedPeriod(child)
243+ if ((s == s))
244+ then {
245+ let p = i.payments[0]
246+ if ((p.assetId != pwrAssetId))
247+ then throw("invalid attached payment: $power token expected")
248+ else {
249+ let commitment = p.amount
250+ let minCommitment = valueOrErrorMessage(getInteger(minCommitmentStore(child)), "Child DAO not found")
251+ if ((minCommitment > commitment))
252+ then throw(("Min. commitment is " + toString(minCommitment)))
253+ else {
254+ let skinTotalStore1 = skinTotalStore(child)
255+ let newSkinTotal = (valueOrElse(getInteger(skinTotalStore1), 0) + commitment)
256+ let skinMax = valueOrElse(getInteger(skinMaxStore(child)), 0)
257+ if (if ((skinMax > 0))
258+ then (newSkinTotal > skinMax)
259+ else false)
260+ then throw(("Total max. skin is reached: " + toString(skinMax)))
261+ else [changeBy(userSkinStore(child, address), commitment), IntegerEntry(skinTotalStore1, newSkinTotal), changeBy(pwrTotalStore, commitment)]
262+ }
263+ }
264+ }
265+ else throw("Strict value is not equal to itself.")
266+ }
267+ else throw("Strict value is not equal to itself.")
268+ }
269+
270+
271+
272+@Callable(i)
273+func commitForMiner (child,address) = {
274+ let a = allowed("commitForMiner")
275+ if ((a == a))
276+ then if (!(contains(mainAddresses, toString(i.caller))))
277+ then throw("denied")
278+ else {
279+ let p = i.payments[0]
280+ if (if ((p.assetId != pwrAssetId))
281+ then true
282+ else (size(i.payments) != 1))
283+ then throw("invalid payments: only $power token expected")
284+ else {
285+ let commitment = p.amount
286+[changeBy(userSkinStore(child, address), commitment), changeBy(skinTotalStore(child), commitment), changeBy(pwrTotalStore, commitment)]
287+ }
288+ }
289+ else throw("Strict value is not equal to itself.")
290+ }
291+
292+
293+
294+@Callable(i)
295+func invest (child) = {
296+ let a = allowed("invest")
297+ if ((a == a))
298+ then {
299+ let s = assertNotStartedPeriod(child)
300+ if ((s == s))
301+ then {
302+ let token = investmentsToken(child)
303+ if ((i.payments[0].assetId != token))
304+ then throw("invalid investments asset id")
305+ else {
306+ let amount = i.payments[0].amount
307+ let maximum = valueOrElse(getInteger(investmentsMaxStore(child)), 0)
308+ func datas (a) = [changeBy(investorStore(child, toString(i.caller)), a), changeBy(investmentsTotalStore(child), a), changeBy(investmentsPeriodTotalStore(child), a)]
309+
310+ if ((maximum > 0))
311+ then {
312+ let totalStore = investmentsTotalStore(child)
313+ let total = valueOrElse(getInteger(totalStore), 0)
314+ let investmens = min([amount, (maximum - total)])
315+ if ((0 >= investmens))
316+ then throw(("Total max. investments is reached: " + toString(maximum)))
317+ else {
318+ let chargeBack = (amount - investmens)
319+ if ((chargeBack > 0))
320+ then [ScriptTransfer(i.caller, chargeBack, token), datas(investmens)]
321+ else datas(investmens)
322+ }
323+ }
324+ else datas(amount)
325+ }
326+ }
327+ else throw("Strict value is not equal to itself.")
328+ }
329+ else throw("Strict value is not equal to itself.")
330+ }
331+
332+
333+
334+@Callable(i)
335+func start (child) = {
336+ let paused = allowed("start")
337+ if ((paused == paused))
338+ then {
339+ let s = if (assertNotStarted(child))
340+ then assertNotCancelled(child)
341+ else false
342+ if ((s == s))
343+ then {
344+ let totalSkin = valueOrElse(getInteger(skinTotalStore(child)), 0)
345+ let skinRequired = valueOrErrorMessage(getInteger(skinRequiredStore(child)), "child not registered")
346+ if ((skinRequired > totalSkin))
347+ then throw("not enough skin in the game")
348+ else {
349+ let totalInvestments = valueOrElse(getInteger(investmentsTotalStore(child)), 0)
350+ if ((getIntegerValue(investmentsRequiredStore(child)) > totalInvestments))
351+ then throw("not enough investments")
352+ else [IntegerEntry(startHeightStore(child), HEIGHT), ScriptTransfer(addressFromStringValue(treasury(child)), totalInvestments, investmentsToken(child))]
353+ }
354+ }
355+ else throw("Strict value is not equal to itself.")
356+ }
357+ else throw("Strict value is not equal to itself.")
358+ }
359+
360+
361+
362+@Callable(i)
363+func initNextPeriod (child,blockBetweenPeriods,lockTime) = {
364+ let paused = allowed("initNextPeriod")
365+ if ((paused == paused))
366+ then if (if ((toString(i.caller) != getStringValue(ownerStore(child))))
367+ then (i.caller != this)
368+ else false)
369+ then throw("denied")
370+ else if ((0 > blockBetweenPeriods))
371+ then throw("blockBetweenPeriods should be positive or zero")
372+ else if ((1 > lockTime))
373+ then throw("lockTime should be positive")
374+ else {
375+ let unlockHeight_ = unlockHeight(child)
376+ if ((unlockHeight_ > HEIGHT))
377+ then throw("current period is still active")
378+ else {
379+ let p = period(child)
380+ if (if ((p > 0))
381+ then !(isDefined(startPeriodHeightStore(child, p)))
382+ else false)
383+ then throw("next period already initialized")
384+ else {
385+ let newPeriod = (p + 1)
386+[IntegerEntry(periodStore(child), newPeriod), IntegerEntry(startPeriodAfterHeightStore(child, newPeriod), (unlockHeight_ + blockBetweenPeriods)), IntegerEntry(periodLockTimeStore(child, newPeriod), lockTime)]
387+ }
388+ }
389+ }
390+ else throw("Strict value is not equal to itself.")
391+ }
392+
393+
394+
395+@Callable(i)
396+func startPeriod (child) = {
397+ let paused = allowed("startPeriod")
398+ if ((paused == paused))
399+ then {
400+ let s = assertNotStartedPeriod(child)
401+ if ((s == s))
402+ then {
403+ let period_ = period(child)
404+ let startAfterStore = startPeriodAfterHeightStore(child, period_)
405+ let startAfter = valueOrErrorMessage(getInteger(startAfterStore), ("key not found: " + startAfterStore))
406+ if ((startAfter > HEIGHT))
407+ then throw("too early")
408+ else {
409+ let totalSkin = valueOrElse(getInteger(skinTotalStore(child)), 0)
410+ let skinRequired = valueOrErrorMessage(getInteger(skinRequiredStore(child)), "child not registered")
411+ if ((skinRequired > totalSkin))
412+ then throw("not enough skin in the game")
413+ else {
414+ let periodInvestments = valueOrElse(getInteger(investmentsPeriodTotalStore(child)), 0)
415+[IntegerEntry(startCurrentPeriodHeightStore(child), HEIGHT), ScriptTransfer(addressFromStringValue(child), periodInvestments, investmentsToken(child))]
416+ }
417+ }
418+ }
419+ else throw("Strict value is not equal to itself.")
420+ }
421+ else throw("Strict value is not equal to itself.")
422+ }
423+
424+
425+
426+@Callable(i)
427+func slash (child,amount) = {
428+ let paused = allowed("/")
429+ if ((paused == paused))
430+ then if (!(contains(slashers, toString(i.caller))))
431+ then throw("denied")
432+ else if (!(isDefined(getInteger(startHeightStore(child)))))
433+ then throw("not started")
434+ else [changeBy(skinTotalStore(child), -(amount)), Burn(pwrAssetId, amount)]
435+ else throw("Strict value is not equal to itself.")
436+ }
437+
438+
439+
440+@Callable(i)
441+func complete (child) = {
442+ let paused = allowed("complete")
443+ if ((paused == paused))
444+ then {
445+ let unlockHeight_ = unlockHeight(child)
446+ if ((unlockHeight_ > HEIGHT))
447+ then throw("still locked")
448+ else {
449+ let user = toString(i.caller)
450+ let skin = currentUserSkin(child, user)
451+ if ((skin == 0))
452+ then throw("you had no skin in the game")
453+ else {
454+ let total = getIntegerValue(skinTotalStore(child))
455+[ScriptTransfer(i.caller, skin, pwrAssetId), DeleteEntry(userSkinStore(child, user)), changeBy(skinTotalStore(child), -(skin)), changeBy(pwrTotalStore, -(skin)), IntegerEntry(userSkinHistoryStore(child, user), skin)]
456+ }
457+ }
458+ }
459+ else throw("Strict value is not equal to itself.")
460+ }
461+
462+
463+
464+@Callable(i)
465+func cancel (child) = {
466+ let paused = allowed("cancel")
467+ if ((paused == paused))
468+ then {
469+ let s = if (assertNotStarted(child))
470+ then true
471+ else assertNotCancelled(child)
472+ if ((s == s))
473+ then if ((toString(i.caller) != getStringValue(ownerStore(child))))
474+ then throw("denied. not an owner")
475+ else [IntegerEntry(cancelHeightStore(child), HEIGHT)]
476+ else throw("Strict value is not equal to itself.")
477+ }
478+ else throw("Strict value is not equal to itself.")
479+ }
480+
481+
482+
483+@Callable(i)
484+func undoInvest (child) = {
485+ let paused = allowed("undoInvest")
486+ if ((paused == paused))
487+ then {
488+ let s = assertNotStarted(child)
489+ if ((s == s))
490+ then {
491+ let investmentsStore1 = investorStore(child, toString(i.caller))
492+ let investments = valueOrElse(getInteger(investmentsStore1), 0)
493+ if ((investments == 0))
494+ then throw("no investments")
495+ else [DeleteEntry(investmentsStore1), changeBy(investmentsTotalStore(child), -(investments)), ScriptTransfer(i.caller, investments, investmentsToken(child))]
496+ }
497+ else throw("Strict value is not equal to itself.")
498+ }
499+ else throw("Strict value is not equal to itself.")
500+ }
501+
502+
503+
504+@Callable(i)
505+func undoCommitFor (child,address) = {
506+ let paused = allowed("undoCommitFor")
507+ if ((paused == paused))
508+ then if (!(contains(mainAddresses, toString(i.caller))))
509+ then throw("denied")
510+ else {
511+ let s = assertNotStarted(child)
512+ if ((s == s))
513+ then {
514+ let userSkinStore1 = userSkinStore(child, address)
515+ let skin = valueOrElse(getInteger(userSkinStore1), 0)
516+ if ((skin == 0))
517+ then throw("no skin")
518+ else $Tuple2([DeleteEntry(userSkinStore1), changeBy(skinTotalStore(child), -(skin)), changeBy(pwrTotalStore, -(skin)), ScriptTransfer(i.caller, skin, pwrAssetId)], skin)
519+ }
520+ else throw("Strict value is not equal to itself.")
521+ }
522+ else throw("Strict value is not equal to itself.")
523+ }
524+
525+
526+
527+@Callable(i)
528+func userPower (child,user) = $Tuple2(nil, valueOrElse(userCommitment(child, user), 0))
529+
530+
531+
532+@Callable(i)
533+func totalPower (child) = $Tuple2(nil, valueOrErrorMessage(getInteger(skinTotalStore(child)), "totalPower: child not found"))
534+
535+
536+
537+@Callable(i)
538+func init (conf) = [writeConstString(configAddressStore, conf)]
539+
540+

github/deemru/w8io/fabc49c 
31.74 ms