tx · 6kjK3EFnJKs6Xrzej4Wr49Mdqj1rbU154jgXoNPgtiY5 3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh: -0.01000000 Waves 2023.01.07 23:08 [3460498] smart account 3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh > SELF 0.00000000 Waves
{ "type": 13, "id": "6kjK3EFnJKs6Xrzej4Wr49Mdqj1rbU154jgXoNPgtiY5", "fee": 1000000, "feeAssetId": null, "timestamp": 1673122154933, "version": 2, "chainId": 87, "sender": "3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh", "senderPublicKey": "6Dx2LuCqezyDYjt3zMEL6WRrs5oaor6aK3L6QouPMP1b", "proofs": [ "yQo895ubGGEu7bDvB9PPAjjCvsfu7gmK7Rs1LCN7vpGGqykwcUgta462EwuYqmfV82hYT2NkinXTSdBHSBo6gQr" ], "script": "base64:BgIfCAISABIDCgEIEgMKAQgSAwoBCBIECgIICBIECgIICAYAD2NyZWF0aW9uQWRkcmVzcwkBB0FkZHJlc3MBARoBV5PdxNIX5yAK/fchEk7w8HZnJoMDeNRcTAAOdG90YWxTdGFrZWRLZXkCDHRvdGFsX3N0YWtlZAANdG90YWxQb3dlcktleQILdG90YWxfcG93ZXIBCGNoZWNrTkZUAQVhc3NldAMDAwMJAAACCQERQGV4dHJOYXRpdmUoMTA1MykCBQ9jcmVhdGlvbkFkZHJlc3MJAKwCAgkArAICAgRuZnRfCQDYBAEIBQVhc3NldAJpZAIHX2lzc3VlcgkApQgBBQR0aGlzCQAAAggFBWFzc2V0Bmlzc3VlcgUPY3JlYXRpb25BZGRyZXNzBwkAAAIIBQVhc3NldAhkZWNpbWFscwAABwkAAAIIBQVhc3NldApyZWlzc3VhYmxlBwcJAAACCAUFYXNzZXQIcXVhbnRpdHkAAQcBC2dldFBvd2VyTkZUAQVhc3NldAQGcGFyYW1zCQERQGV4dHJOYXRpdmUoMTA1MykCBQ9jcmVhdGlvbkFkZHJlc3MJAKwCAgkArAICAgRuZnRfCQDYBAEIBQVhc3NldAJpZAIHX3BhcmFtcwMJAAACBQZwYXJhbXMCBGdvbGQAMgAKARNnZXRDb2xsZWN0aW9uSXNzdWVyAQxjb2xsZWN0aW9uSWQEB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPY3JlYXRpb25BZGRyZXNzCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FDGNvbGxlY3Rpb25JZAIIX2Fzc2V0SWQCAAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9jcmVhdGlvbkFkZHJlc3MJAKwCAgkArAICAgRuZnRfBQdhc3NldElkAgdfaXNzdWVyAgAGAWkBBXN0YWtlAAQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEAXAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAkQMCCAUBaQhwYXltZW50cwAAAgtObyBwYXltZW50cwQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQFwB2Fzc2V0SWQCD0ludmFsaWQgcGF5bWVudAIQSW52YWxpZCBhc3NldCBJZAMDCQBmAggFAXAGYW1vdW50AAAJAQhjaGVja05GVAEFBWFzc2V0BwQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOdG90YWxTdGFrZWRLZXkAAAQKdG90YWxQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ10b3RhbFBvd2VyS2V5AAAEDGFkZHJlc3NQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgAABAhuZnRQb3dlcgkBC2dldFBvd2VyTkZUAQUFYXNzZXQECG5mdElkU3RyCQDYBAEIBQVhc3NldAJpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOdG90YWxTdGFrZWRLZXkJAGQCBQt0b3RhbFN0YWtlZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ10b3RhbFBvd2VyS2V5CQBkAgUKdG90YWxQb3dlcgUIbmZ0UG93ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBG5mdF8FCG5mdElkU3RyAgZfb3duZXIFCmFkZHJlc3NTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgRuZnRfBQhuZnRJZFN0cgIGX3Bvd2VyBQhuZnRQb3dlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgZfcG93ZXIJAGQCBQxhZGRyZXNzUG93ZXIFCG5mdFBvd2VyBQNuaWwJAAIBAgtObyBwYXltZW50cwFpAQd1bnN0YWtlAQhuZnRJZFN0cgQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQhuZnRJZFN0cgIOSW52YWxpZCBuZnQgSWQEDG93bmVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgkArAICAgRuZnRfBQhuZnRJZFN0cgIGX293bmVyAhJPd25lciBkYXRhIGludmFsaWQDCQECIT0CBQxvd25lckFkZHJlc3MFCmFkZHJlc3NTdHIJAAIBAhVZb3UgYXJlIG5vdCB0aGUgb3duZXIDCQEIY2hlY2tORlQBBQVhc3NldAQLdG90YWxTdGFrZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOdG90YWxTdGFrZWRLZXkAAAQKdG90YWxQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ10b3RhbFBvd2VyS2V5AAAEDGFkZHJlc3NQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgAABA1uZnRBc3NldElkU3RyCQDYBAEIBQVhc3NldAJpZAQIbmZ0UG93ZXIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAKwCAgkArAICAgRuZnRfBQ1uZnRBc3NldElkU3RyAgZfcG93ZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEIBQVhc3NldAJpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOdG90YWxTdGFrZWRLZXkJAGUCBQt0b3RhbFN0YWtlZAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ10b3RhbFBvd2VyS2V5CQBlAgUKdG90YWxQb3dlcgUIbmZ0UG93ZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBG5mdF8FDW5mdEFzc2V0SWRTdHICBl9vd25lcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUNbmZ0QXNzZXRJZFN0cgIGX3Bvd2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgkAZQIFDGFkZHJlc3NQb3dlcgUIbmZ0UG93ZXIFA25pbAkAAgECDkludmFsaWQgbmZ0IElkAWkBCnNlbmRUb1ZvdGUBDGNvbGxlY3Rpb25JZAQGaXNzdWVyCQETZ2V0Q29sbGVjdGlvbklzc3VlcgEFDGNvbGxlY3Rpb25JZAMJAAACCQCxAgEFBmlzc3VlcgAACQACAQIbQ29sbGVjdGlvbiBpc3N1ZXIgbm90IGZvdW5kAwkBAiE9AgUGaXNzdWVyCQClCAEIBQFpBmNhbGxlcgkAAgECJk9ubHkgdGhlIGlzc3VlciBjYW4gc3VibWl0IHRvIHRoZSB2b3RlBAZ2b3RlSWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgILY29sbGVjdGlvbl8FDGNvbGxlY3Rpb25JZAIHX3ZvdGVJZAUGdm90ZUlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAg1fY29sbGVjdGlvbklkBQxjb2xsZWN0aW9uSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCBl9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAgpfY3JlYXRlZEF0BQZoZWlnaHQFA25pbAFpAQ5yZW1vdmVGcm9tVm90ZQEGdm90ZUlkBAxjb2xsZWN0aW9uSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAINX2NvbGxlY3Rpb25JZAIXQ29sbGVjdGlvbiBJZCBub3QgZm91bmQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCBl9vd25lcgIPT3duZXIgbm90IGZvdW5kAwkBAiE9AgUFb3duZXIJAKUIAQgFAWkGY2FsbGVyCQACAQIVWW91IGFyZSBub3QgdGhlIG93bmVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUMY29sbGVjdGlvbklkAgdfdm90ZUlkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAg1fY29sbGVjdGlvbklkCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAgZfb3duZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCCl9jcmVhdGVkQXQFA25pbAFpAQR2b3RlAgZ2b3RlSWQEdHlwZQQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEBWV4aXN0BAckbWF0Y2gwCQCiCAEJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAg1fY29sbGVjdGlvbklkAwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAYHBAx2b3RlclZvdGVLZXkJAKwCAgkArAICCQCsAgICBnZvdGVyXwUKYWRkcmVzc1N0cgIGX3ZvdGVfBQZ2b3RlSWQEEnZvdGVyVm90ZXNDb3VudEtleQkArAICCQCsAgICBnZvdGVyXwUKYWRkcmVzc1N0cgILX3ZvdGVzQ291bnQEEnZvdGVyU3BlbnRQb3dlcktleQkArAICCQCsAgICBnZvdGVyXwUKYWRkcmVzc1N0cgILX3NwZW50UG93ZXIEDnZvdGVVcENvdW50S2V5CQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIIX3VwQ291bnQEEHZvdGVEb3duQ291bnRLZXkJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAgpfZG93bkNvdW50BBF2b3RlVG90YWxDb3VudEtleQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCC190b3RhbENvdW50BAxhZGRyZXNzUG93ZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgIfVGhlIGFkZHJlc3MgaGFzIG5vIHZvdGluZyBwb3dlcgQKdG90YWxDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRF2b3RlVG90YWxDb3VudEtleQAABA92b3RlclZvdGVzQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSdm90ZXJWb3Rlc0NvdW50S2V5AAAED3ZvdGVyU3BlbnRQb3dlcgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJ2b3RlclNwZW50UG93ZXJLZXkAAAQQdm90ZUNoYW5nZVN0YXRlcwMJAAACBQR0eXBlAgJ1cAQHdXBDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ52b3RlVXBDb3VudEtleQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ52b3RlVXBDb3VudEtleQkAZAIFB3VwQ291bnQFDGFkZHJlc3NQb3dlcgUDbmlsAwkAAAIFBHR5cGUCBGRvd24ECWRvd25Db3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRB2b3RlRG93bkNvdW50S2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEHZvdGVEb3duQ291bnRLZXkJAGQCBQlkb3duQ291bnQFDGFkZHJlc3NQb3dlcgUDbmlsCQACAQIMSW52YWxpZCB0eXBlBA1pc0NhbGxlclZvdGVkCQELdmFsdWVPckVsc2UCCQCgCAEFDHZvdGVyVm90ZUtleQcDBQ1pc0NhbGxlclZvdGVkCQACAQIWWW91IGhhdmUgYWxyZWFkeSB2b3RlZAMJAQEhAQUFZXhpc3QJAAIBAhRDb2xsZWN0aW9uIG5vdCBmb3VuZAkAzggCCQDMCAIJAQxCb29sZWFuRW50cnkCBQx2b3RlclZvdGVLZXkGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ2b3RlclZvdGVzQ291bnRLZXkJAGQCBQ92b3RlclZvdGVzQ291bnQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSdm90ZXJTcGVudFBvd2VyS2V5CQBkAgUPdm90ZXJTcGVudFBvd2VyBQxhZGRyZXNzUG93ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFEXZvdGVUb3RhbENvdW50S2V5CQBkAgUKdG90YWxDb3VudAUMYWRkcmVzc1Bvd2VyBQNuaWwFEHZvdGVDaGFuZ2VTdGF0ZXMBaQEGdW52b3RlAgZ2b3RlSWQEdHlwZQQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEDHZvdGVyVm90ZUtleQkArAICCQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgZfdm90ZV8FBnZvdGVJZAQSdm90ZXJWb3Rlc0NvdW50S2V5CQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgtfdm90ZXNDb3VudAQSdm90ZXJTcGVudFBvd2VyS2V5CQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgtfc3BlbnRQb3dlcgQOdm90ZVVwQ291bnRLZXkJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAghfdXBDb3VudAQQdm90ZURvd25Db3VudEtleQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCCl9kb3duQ291bnQEEXZvdGVUb3RhbENvdW50S2V5CQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAILX3RvdGFsQ291bnQEDGFkZHJlc3NQb3dlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIGX3Bvd2VyAh9UaGUgYWRkcmVzcyBoYXMgbm8gdm90aW5nIHBvd2VyBAp0b3RhbENvdW50CQELdmFsdWVPckVsc2UCCQCfCAEFEXZvdGVUb3RhbENvdW50S2V5AAAED3ZvdGVyVm90ZXNDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJ2b3RlclZvdGVzQ291bnRLZXkAAAQPdm90ZXJTcGVudFBvd2VyCQELdmFsdWVPckVsc2UCCQCfCAEFEnZvdGVyU3BlbnRQb3dlcktleQAABBB2b3RlQ2hhbmdlU3RhdGVzAwkAAAIFBHR5cGUCAnVwBAd1cENvdW50CQELdmFsdWVPckVsc2UCCQCfCAEFDnZvdGVVcENvdW50S2V5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFDnZvdGVVcENvdW50S2V5CQBlAgUHdXBDb3VudAUMYWRkcmVzc1Bvd2VyBQNuaWwDCQAAAgUEdHlwZQIEZG93bgQJZG93bkNvdW50CQELdmFsdWVPckVsc2UCCQCfCAEFEHZvdGVEb3duQ291bnRLZXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQdm90ZURvd25Db3VudEtleQkAZQIFCWRvd25Db3VudAUMYWRkcmVzc1Bvd2VyBQNuaWwJAAIBAgxJbnZhbGlkIHR5cGUEDWlzQ2FsbGVyVm90ZWQJAQt2YWx1ZU9yRWxzZQIJAKAIAQUMdm90ZXJWb3RlS2V5BwMJAQEhAQUNaXNDYWxsZXJWb3RlZAkAAgECFVlvdSBoYXZlbid0IHZvdGVkIHlldAkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEFDHZvdGVyVm90ZUtleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSdm90ZXJWb3Rlc0NvdW50S2V5CQBlAgUPdm90ZXJWb3Rlc0NvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIFEnZvdGVyU3BlbnRQb3dlcktleQkAZQIFD3ZvdGVyU3BlbnRQb3dlcgUMYWRkcmVzc1Bvd2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF2b3RlVG90YWxDb3VudEtleQkAZQIFCnRvdGFsQ291bnQFDGFkZHJlc3NQb3dlcgUDbmlsBRB2b3RlQ2hhbmdlU3RhdGVzAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleXae3yU=", "height": 3460498, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 644C58jxcuQ2YKfejqPHjwzUisxzY4ZkNZkdP6J9Fk6m Next: 9sRbdjPYJ2rjmqpuKVy7VNgu6MGNziULLmsHe6X8eCqu Diff:
Old | New | Differences | |
---|---|---|---|
103 | 103 | @Callable(k) | |
104 | 104 | func vote (v,x) = { | |
105 | 105 | let l = toString(k.caller) | |
106 | - | let y = valueOrErrorMessage(getString((("vote_" + v) + "_collectionId")), "Collection not found") | |
107 | - | let z = ((("voter_" + l) + "_vote_") + v) | |
108 | - | let A = (("voter_" + l) + "_votesCount") | |
109 | - | let B = (("voter_" + l) + "_spentPower") | |
110 | - | let C = (("vote_" + v) + "_upCount") | |
111 | - | let D = (("vote_" + v) + "_downCount") | |
112 | - | let E = (("vote_" + v) + "_totalCount") | |
106 | + | let y = { | |
107 | + | let z = getString((("vote_" + v) + "_collectionId")) | |
108 | + | if ($isInstanceOf(z, "String")) | |
109 | + | then { | |
110 | + | let A = z | |
111 | + | true | |
112 | + | } | |
113 | + | else false | |
114 | + | } | |
115 | + | let B = ((("voter_" + l) + "_vote_") + v) | |
116 | + | let C = (("voter_" + l) + "_votesCount") | |
117 | + | let D = (("voter_" + l) + "_spentPower") | |
118 | + | let E = (("vote_" + v) + "_upCount") | |
119 | + | let F = (("vote_" + v) + "_downCount") | |
120 | + | let G = (("vote_" + v) + "_totalCount") | |
113 | 121 | let p = valueOrErrorMessage(getInteger((("address_" + l) + "_power")), "The address has no voting power") | |
114 | - | let | |
115 | - | let | |
116 | - | let | |
117 | - | let | |
122 | + | let H = valueOrElse(getInteger(G), 0) | |
123 | + | let I = valueOrElse(getInteger(C), 0) | |
124 | + | let J = valueOrElse(getInteger(D), 0) | |
125 | + | let K = if ((x == "up")) | |
118 | 126 | then { | |
119 | - | let | |
120 | - | [IntegerEntry( | |
127 | + | let L = valueOrElse(getInteger(E), 0) | |
128 | + | [IntegerEntry(E, (L + p))] | |
121 | 129 | } | |
122 | 130 | else if ((x == "down")) | |
123 | 131 | then { | |
124 | - | let | |
125 | - | [IntegerEntry( | |
132 | + | let M = valueOrElse(getInteger(F), 0) | |
133 | + | [IntegerEntry(F, (M + p))] | |
126 | 134 | } | |
127 | 135 | else throw("Invalid type") | |
128 | - | let | |
129 | - | if ( | |
136 | + | let N = valueOrElse(getBoolean(B), false) | |
137 | + | if (N) | |
130 | 138 | then throw("You have already voted") | |
131 | - | else ([BooleanEntry(z, true), IntegerEntry(A, (G + 1)), IntegerEntry(B, (H + p)), IntegerEntry(E, (F + p))] ++ I) | |
139 | + | else if (!(y)) | |
140 | + | then throw("Collection not found") | |
141 | + | else ([BooleanEntry(B, true), IntegerEntry(C, (I + 1)), IntegerEntry(D, (J + p)), IntegerEntry(G, (H + p))] ++ K) | |
132 | 142 | } | |
133 | 143 | ||
134 | 144 | ||
135 | - | @Verifier(M) | |
136 | - | func N () = sigVerify(M.bodyBytes, M.proofs[0], M.senderPublicKey) | |
145 | + | ||
146 | + | @Callable(k) | |
147 | + | func unvote (v,x) = { | |
148 | + | let l = toString(k.caller) | |
149 | + | let B = ((("voter_" + l) + "_vote_") + v) | |
150 | + | let C = (("voter_" + l) + "_votesCount") | |
151 | + | let D = (("voter_" + l) + "_spentPower") | |
152 | + | let E = (("vote_" + v) + "_upCount") | |
153 | + | let F = (("vote_" + v) + "_downCount") | |
154 | + | let G = (("vote_" + v) + "_totalCount") | |
155 | + | let p = valueOrErrorMessage(getInteger((("address_" + l) + "_power")), "The address has no voting power") | |
156 | + | let H = valueOrElse(getInteger(G), 0) | |
157 | + | let I = valueOrElse(getInteger(C), 0) | |
158 | + | let J = valueOrElse(getInteger(D), 0) | |
159 | + | let K = if ((x == "up")) | |
160 | + | then { | |
161 | + | let L = valueOrElse(getInteger(E), 0) | |
162 | + | [IntegerEntry(E, (L - p))] | |
163 | + | } | |
164 | + | else if ((x == "down")) | |
165 | + | then { | |
166 | + | let M = valueOrElse(getInteger(F), 0) | |
167 | + | [IntegerEntry(F, (M - p))] | |
168 | + | } | |
169 | + | else throw("Invalid type") | |
170 | + | let N = valueOrElse(getBoolean(B), false) | |
171 | + | if (!(N)) | |
172 | + | then throw("You haven't voted yet") | |
173 | + | else ([DeleteEntry(B), IntegerEntry(C, (I - 1)), IntegerEntry(D, (J - p)), IntegerEntry(G, (H - p))] ++ K) | |
174 | + | } | |
175 | + | ||
176 | + | ||
177 | + | @Verifier(O) | |
178 | + | func P () = sigVerify(O.bodyBytes, O.proofs[0], O.senderPublicKey) | |
137 | 179 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = Address(base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By') | |
5 | 5 | ||
6 | 6 | let b = "total_staked" | |
7 | 7 | ||
8 | 8 | let c = "total_power" | |
9 | 9 | ||
10 | 10 | func d (e) = if (if (if (if ((getStringValue(a, (("nft_" + toBase58String(e.id)) + "_issuer")) == toString(this))) | |
11 | 11 | then (e.issuer == a) | |
12 | 12 | else false) | |
13 | 13 | then (e.decimals == 0) | |
14 | 14 | else false) | |
15 | 15 | then (e.reissuable == false) | |
16 | 16 | else false) | |
17 | 17 | then (e.quantity == 1) | |
18 | 18 | else false | |
19 | 19 | ||
20 | 20 | ||
21 | 21 | func f (e) = { | |
22 | 22 | let g = getStringValue(a, (("nft_" + toBase58String(e.id)) + "_params")) | |
23 | 23 | if ((g == "gold")) | |
24 | 24 | then 50 | |
25 | 25 | else 10 | |
26 | 26 | } | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func h (i) = { | |
30 | 30 | let j = valueOrElse(getString(a, (("collection_" + i) + "_assetId")), "") | |
31 | 31 | valueOrElse(getString(a, (("nft_" + j) + "_issuer")), "") | |
32 | 32 | } | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | @Callable(k) | |
36 | 36 | func stake () = { | |
37 | 37 | let l = toString(k.caller) | |
38 | 38 | let m = valueOrErrorMessage(k.payments[0], "No payments") | |
39 | 39 | let e = valueOrErrorMessage(assetInfo(valueOrErrorMessage(m.assetId, "Invalid payment")), "Invalid asset Id") | |
40 | 40 | if (if ((m.amount > 0)) | |
41 | 41 | then d(e) | |
42 | 42 | else false) | |
43 | 43 | then { | |
44 | 44 | let n = valueOrElse(getInteger(b), 0) | |
45 | 45 | let o = valueOrElse(getInteger(c), 0) | |
46 | 46 | let p = valueOrElse(getInteger((("address_" + l) + "_power")), 0) | |
47 | 47 | let q = f(e) | |
48 | 48 | let r = toBase58String(e.id) | |
49 | 49 | [IntegerEntry(b, (n + 1)), IntegerEntry(c, (o + q)), StringEntry((("nft_" + r) + "_owner"), l), IntegerEntry((("nft_" + r) + "_power"), q), IntegerEntry((("address_" + l) + "_power"), (p + q))] | |
50 | 50 | } | |
51 | 51 | else throw("No payments") | |
52 | 52 | } | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | ||
56 | 56 | @Callable(k) | |
57 | 57 | func unstake (r) = { | |
58 | 58 | let l = toString(k.caller) | |
59 | 59 | let e = valueOrErrorMessage(assetInfo(fromBase58String(r)), "Invalid nft Id") | |
60 | 60 | let s = valueOrErrorMessage(getString((("nft_" + r) + "_owner")), "Owner data invalid") | |
61 | 61 | if ((s != l)) | |
62 | 62 | then throw("You are not the owner") | |
63 | 63 | else if (d(e)) | |
64 | 64 | then { | |
65 | 65 | let n = valueOrElse(getInteger(b), 0) | |
66 | 66 | let o = valueOrElse(getInteger(c), 0) | |
67 | 67 | let p = valueOrElse(getInteger((("address_" + l) + "_power")), 0) | |
68 | 68 | let t = toBase58String(e.id) | |
69 | 69 | let q = getIntegerValue((("nft_" + t) + "_power")) | |
70 | 70 | [ScriptTransfer(k.caller, 1, e.id), IntegerEntry(b, (n - 1)), IntegerEntry(c, (o - q)), DeleteEntry((("nft_" + t) + "_owner")), DeleteEntry((("nft_" + t) + "_power")), IntegerEntry((("address_" + l) + "_power"), (p - q))] | |
71 | 71 | } | |
72 | 72 | else throw("Invalid nft Id") | |
73 | 73 | } | |
74 | 74 | ||
75 | 75 | ||
76 | 76 | ||
77 | 77 | @Callable(k) | |
78 | 78 | func sendToVote (i) = { | |
79 | 79 | let u = h(i) | |
80 | 80 | if ((size(u) == 0)) | |
81 | 81 | then throw("Collection issuer not found") | |
82 | 82 | else if ((u != toString(k.caller))) | |
83 | 83 | then throw("Only the issuer can submit to the vote") | |
84 | 84 | else { | |
85 | 85 | let v = toBase58String(k.transactionId) | |
86 | 86 | [StringEntry((("collection_" + i) + "_voteId"), v), StringEntry((("vote_" + v) + "_collectionId"), i), StringEntry((("vote_" + v) + "_owner"), toString(k.caller)), IntegerEntry((("vote_" + v) + "_createdAt"), height)] | |
87 | 87 | } | |
88 | 88 | } | |
89 | 89 | ||
90 | 90 | ||
91 | 91 | ||
92 | 92 | @Callable(k) | |
93 | 93 | func removeFromVote (v) = { | |
94 | 94 | let i = valueOrErrorMessage(getString((("vote_" + v) + "_collectionId")), "Collection Id not found") | |
95 | 95 | let w = valueOrErrorMessage(getString((("vote_" + v) + "_owner")), "Owner not found") | |
96 | 96 | if ((w != toString(k.caller))) | |
97 | 97 | then throw("You are not the owner") | |
98 | 98 | else [DeleteEntry((("collection_" + i) + "_voteId")), DeleteEntry((("vote_" + v) + "_collectionId")), DeleteEntry((("vote_" + v) + "_owner")), DeleteEntry((("vote_" + v) + "_createdAt"))] | |
99 | 99 | } | |
100 | 100 | ||
101 | 101 | ||
102 | 102 | ||
103 | 103 | @Callable(k) | |
104 | 104 | func vote (v,x) = { | |
105 | 105 | let l = toString(k.caller) | |
106 | - | let y = valueOrErrorMessage(getString((("vote_" + v) + "_collectionId")), "Collection not found") | |
107 | - | let z = ((("voter_" + l) + "_vote_") + v) | |
108 | - | let A = (("voter_" + l) + "_votesCount") | |
109 | - | let B = (("voter_" + l) + "_spentPower") | |
110 | - | let C = (("vote_" + v) + "_upCount") | |
111 | - | let D = (("vote_" + v) + "_downCount") | |
112 | - | let E = (("vote_" + v) + "_totalCount") | |
106 | + | let y = { | |
107 | + | let z = getString((("vote_" + v) + "_collectionId")) | |
108 | + | if ($isInstanceOf(z, "String")) | |
109 | + | then { | |
110 | + | let A = z | |
111 | + | true | |
112 | + | } | |
113 | + | else false | |
114 | + | } | |
115 | + | let B = ((("voter_" + l) + "_vote_") + v) | |
116 | + | let C = (("voter_" + l) + "_votesCount") | |
117 | + | let D = (("voter_" + l) + "_spentPower") | |
118 | + | let E = (("vote_" + v) + "_upCount") | |
119 | + | let F = (("vote_" + v) + "_downCount") | |
120 | + | let G = (("vote_" + v) + "_totalCount") | |
113 | 121 | let p = valueOrErrorMessage(getInteger((("address_" + l) + "_power")), "The address has no voting power") | |
114 | - | let | |
115 | - | let | |
116 | - | let | |
117 | - | let | |
122 | + | let H = valueOrElse(getInteger(G), 0) | |
123 | + | let I = valueOrElse(getInteger(C), 0) | |
124 | + | let J = valueOrElse(getInteger(D), 0) | |
125 | + | let K = if ((x == "up")) | |
118 | 126 | then { | |
119 | - | let | |
120 | - | [IntegerEntry( | |
127 | + | let L = valueOrElse(getInteger(E), 0) | |
128 | + | [IntegerEntry(E, (L + p))] | |
121 | 129 | } | |
122 | 130 | else if ((x == "down")) | |
123 | 131 | then { | |
124 | - | let | |
125 | - | [IntegerEntry( | |
132 | + | let M = valueOrElse(getInteger(F), 0) | |
133 | + | [IntegerEntry(F, (M + p))] | |
126 | 134 | } | |
127 | 135 | else throw("Invalid type") | |
128 | - | let | |
129 | - | if ( | |
136 | + | let N = valueOrElse(getBoolean(B), false) | |
137 | + | if (N) | |
130 | 138 | then throw("You have already voted") | |
131 | - | else ([BooleanEntry(z, true), IntegerEntry(A, (G + 1)), IntegerEntry(B, (H + p)), IntegerEntry(E, (F + p))] ++ I) | |
139 | + | else if (!(y)) | |
140 | + | then throw("Collection not found") | |
141 | + | else ([BooleanEntry(B, true), IntegerEntry(C, (I + 1)), IntegerEntry(D, (J + p)), IntegerEntry(G, (H + p))] ++ K) | |
132 | 142 | } | |
133 | 143 | ||
134 | 144 | ||
135 | - | @Verifier(M) | |
136 | - | func N () = sigVerify(M.bodyBytes, M.proofs[0], M.senderPublicKey) | |
145 | + | ||
146 | + | @Callable(k) | |
147 | + | func unvote (v,x) = { | |
148 | + | let l = toString(k.caller) | |
149 | + | let B = ((("voter_" + l) + "_vote_") + v) | |
150 | + | let C = (("voter_" + l) + "_votesCount") | |
151 | + | let D = (("voter_" + l) + "_spentPower") | |
152 | + | let E = (("vote_" + v) + "_upCount") | |
153 | + | let F = (("vote_" + v) + "_downCount") | |
154 | + | let G = (("vote_" + v) + "_totalCount") | |
155 | + | let p = valueOrErrorMessage(getInteger((("address_" + l) + "_power")), "The address has no voting power") | |
156 | + | let H = valueOrElse(getInteger(G), 0) | |
157 | + | let I = valueOrElse(getInteger(C), 0) | |
158 | + | let J = valueOrElse(getInteger(D), 0) | |
159 | + | let K = if ((x == "up")) | |
160 | + | then { | |
161 | + | let L = valueOrElse(getInteger(E), 0) | |
162 | + | [IntegerEntry(E, (L - p))] | |
163 | + | } | |
164 | + | else if ((x == "down")) | |
165 | + | then { | |
166 | + | let M = valueOrElse(getInteger(F), 0) | |
167 | + | [IntegerEntry(F, (M - p))] | |
168 | + | } | |
169 | + | else throw("Invalid type") | |
170 | + | let N = valueOrElse(getBoolean(B), false) | |
171 | + | if (!(N)) | |
172 | + | then throw("You haven't voted yet") | |
173 | + | else ([DeleteEntry(B), IntegerEntry(C, (I - 1)), IntegerEntry(D, (J - p)), IntegerEntry(G, (H - p))] ++ K) | |
174 | + | } | |
175 | + | ||
176 | + | ||
177 | + | @Verifier(O) | |
178 | + | func P () = sigVerify(O.bodyBytes, O.proofs[0], O.senderPublicKey) | |
137 | 179 |
github/deemru/w8io/3ef1775 47.62 ms ◑