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:
OldNewDifferences
103103 @Callable(k)
104104 func vote (v,x) = {
105105 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")
113121 let p = valueOrErrorMessage(getInteger((("address_" + l) + "_power")), "The address has no voting power")
114- let F = valueOrElse(getInteger(E), 0)
115- let G = valueOrElse(getInteger(A), 0)
116- let H = valueOrElse(getInteger(B), 0)
117- let I = if ((x == "up"))
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"))
118126 then {
119- let J = valueOrElse(getInteger(C), 0)
120-[IntegerEntry(C, (J + p))]
127+ let L = valueOrElse(getInteger(E), 0)
128+[IntegerEntry(E, (L + p))]
121129 }
122130 else if ((x == "down"))
123131 then {
124- let K = valueOrElse(getInteger(D), 0)
125-[IntegerEntry(D, (K + p))]
132+ let M = valueOrElse(getInteger(F), 0)
133+[IntegerEntry(F, (M + p))]
126134 }
127135 else throw("Invalid type")
128- let L = valueOrElse(getBoolean(z), false)
129- if (L)
136+ let N = valueOrElse(getBoolean(B), false)
137+ if (N)
130138 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)
132142 }
133143
134144
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)
137179
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = Address(base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By')
55
66 let b = "total_staked"
77
88 let c = "total_power"
99
1010 func d (e) = if (if (if (if ((getStringValue(a, (("nft_" + toBase58String(e.id)) + "_issuer")) == toString(this)))
1111 then (e.issuer == a)
1212 else false)
1313 then (e.decimals == 0)
1414 else false)
1515 then (e.reissuable == false)
1616 else false)
1717 then (e.quantity == 1)
1818 else false
1919
2020
2121 func f (e) = {
2222 let g = getStringValue(a, (("nft_" + toBase58String(e.id)) + "_params"))
2323 if ((g == "gold"))
2424 then 50
2525 else 10
2626 }
2727
2828
2929 func h (i) = {
3030 let j = valueOrElse(getString(a, (("collection_" + i) + "_assetId")), "")
3131 valueOrElse(getString(a, (("nft_" + j) + "_issuer")), "")
3232 }
3333
3434
3535 @Callable(k)
3636 func stake () = {
3737 let l = toString(k.caller)
3838 let m = valueOrErrorMessage(k.payments[0], "No payments")
3939 let e = valueOrErrorMessage(assetInfo(valueOrErrorMessage(m.assetId, "Invalid payment")), "Invalid asset Id")
4040 if (if ((m.amount > 0))
4141 then d(e)
4242 else false)
4343 then {
4444 let n = valueOrElse(getInteger(b), 0)
4545 let o = valueOrElse(getInteger(c), 0)
4646 let p = valueOrElse(getInteger((("address_" + l) + "_power")), 0)
4747 let q = f(e)
4848 let r = toBase58String(e.id)
4949 [IntegerEntry(b, (n + 1)), IntegerEntry(c, (o + q)), StringEntry((("nft_" + r) + "_owner"), l), IntegerEntry((("nft_" + r) + "_power"), q), IntegerEntry((("address_" + l) + "_power"), (p + q))]
5050 }
5151 else throw("No payments")
5252 }
5353
5454
5555
5656 @Callable(k)
5757 func unstake (r) = {
5858 let l = toString(k.caller)
5959 let e = valueOrErrorMessage(assetInfo(fromBase58String(r)), "Invalid nft Id")
6060 let s = valueOrErrorMessage(getString((("nft_" + r) + "_owner")), "Owner data invalid")
6161 if ((s != l))
6262 then throw("You are not the owner")
6363 else if (d(e))
6464 then {
6565 let n = valueOrElse(getInteger(b), 0)
6666 let o = valueOrElse(getInteger(c), 0)
6767 let p = valueOrElse(getInteger((("address_" + l) + "_power")), 0)
6868 let t = toBase58String(e.id)
6969 let q = getIntegerValue((("nft_" + t) + "_power"))
7070 [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))]
7171 }
7272 else throw("Invalid nft Id")
7373 }
7474
7575
7676
7777 @Callable(k)
7878 func sendToVote (i) = {
7979 let u = h(i)
8080 if ((size(u) == 0))
8181 then throw("Collection issuer not found")
8282 else if ((u != toString(k.caller)))
8383 then throw("Only the issuer can submit to the vote")
8484 else {
8585 let v = toBase58String(k.transactionId)
8686 [StringEntry((("collection_" + i) + "_voteId"), v), StringEntry((("vote_" + v) + "_collectionId"), i), StringEntry((("vote_" + v) + "_owner"), toString(k.caller)), IntegerEntry((("vote_" + v) + "_createdAt"), height)]
8787 }
8888 }
8989
9090
9191
9292 @Callable(k)
9393 func removeFromVote (v) = {
9494 let i = valueOrErrorMessage(getString((("vote_" + v) + "_collectionId")), "Collection Id not found")
9595 let w = valueOrErrorMessage(getString((("vote_" + v) + "_owner")), "Owner not found")
9696 if ((w != toString(k.caller)))
9797 then throw("You are not the owner")
9898 else [DeleteEntry((("collection_" + i) + "_voteId")), DeleteEntry((("vote_" + v) + "_collectionId")), DeleteEntry((("vote_" + v) + "_owner")), DeleteEntry((("vote_" + v) + "_createdAt"))]
9999 }
100100
101101
102102
103103 @Callable(k)
104104 func vote (v,x) = {
105105 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")
113121 let p = valueOrErrorMessage(getInteger((("address_" + l) + "_power")), "The address has no voting power")
114- let F = valueOrElse(getInteger(E), 0)
115- let G = valueOrElse(getInteger(A), 0)
116- let H = valueOrElse(getInteger(B), 0)
117- let I = if ((x == "up"))
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"))
118126 then {
119- let J = valueOrElse(getInteger(C), 0)
120-[IntegerEntry(C, (J + p))]
127+ let L = valueOrElse(getInteger(E), 0)
128+[IntegerEntry(E, (L + p))]
121129 }
122130 else if ((x == "down"))
123131 then {
124- let K = valueOrElse(getInteger(D), 0)
125-[IntegerEntry(D, (K + p))]
132+ let M = valueOrElse(getInteger(F), 0)
133+[IntegerEntry(F, (M + p))]
126134 }
127135 else throw("Invalid type")
128- let L = valueOrElse(getBoolean(z), false)
129- if (L)
136+ let N = valueOrElse(getBoolean(B), false)
137+ if (N)
130138 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)
132142 }
133143
134144
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)
137179

github/deemru/w8io/3ef1775 
47.62 ms