2023.01.07 23:25 [3460515] smart account 3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh > SELF 0.00000000 Waves

{ "type": 13, "id": "9sRbdjPYJ2rjmqpuKVy7VNgu6MGNziULLmsHe6X8eCqu", "fee": 1000000, "feeAssetId": null, "timestamp": 1673123189057, "version": 2, "chainId": 87, "sender": "3P975LUuqc7uBPiSxp3nemf2FZh62zfirSh", "senderPublicKey": "6Dx2LuCqezyDYjt3zMEL6WRrs5oaor6aK3L6QouPMP1b", "proofs": [ "53nErzRsey4nGjQKUdFJDBDgAvN4zvByzy9M6pagsF7HDVGLxDd2uB5gL5Xopo8EmjTuDGXjRkTwhHgwFGRt5ZJU" ], "script": "base64:BgIeCAISABIDCgEIEgMKAQgSAwoBCBIECgIICBIDCgEIBgAPY3JlYXRpb25BZGRyZXNzCQEHQWRkcmVzcwEBGgFXk93E0hfnIAr99yESTvDwdmcmgwN41FxMAA50b3RhbFN0YWtlZEtleQIMdG90YWxfc3Rha2VkAA10b3RhbFBvd2VyS2V5Agt0b3RhbF9wb3dlcgEIY2hlY2tORlQBBWFzc2V0AwMDAwkAAAIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFD2NyZWF0aW9uQWRkcmVzcwkArAICCQCsAgICBG5mdF8JANgEAQgFBWFzc2V0AmlkAgdfaXNzdWVyCQClCAEFBHRoaXMJAAACCAUFYXNzZXQGaXNzdWVyBQ9jcmVhdGlvbkFkZHJlc3MHCQAAAggFBWFzc2V0CGRlY2ltYWxzAAAHCQAAAggFBWFzc2V0CnJlaXNzdWFibGUHBwkAAAIIBQVhc3NldAhxdWFudGl0eQABBwELZ2V0UG93ZXJORlQBBWFzc2V0BAZwYXJhbXMJARFAZXh0ck5hdGl2ZSgxMDUzKQIFD2NyZWF0aW9uQWRkcmVzcwkArAICCQCsAgICBG5mdF8JANgEAQgFBWFzc2V0AmlkAgdfcGFyYW1zAwkAAAIFBnBhcmFtcwIEZ29sZAAyAAoBE2dldENvbGxlY3Rpb25Jc3N1ZXIBDGNvbGxlY3Rpb25JZAQHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9jcmVhdGlvbkFkZHJlc3MJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUMY29sbGVjdGlvbklkAghfYXNzZXRJZAIACQELdmFsdWVPckVsc2UCCQCdCAIFD2NyZWF0aW9uQWRkcmVzcwkArAICCQCsAgICBG5mdF8FB2Fzc2V0SWQCB19pc3N1ZXICAAYBaQEFc3Rha2UABAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQBcAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCRAwIIBQFpCHBheW1lbnRzAAACC05vIHBheW1lbnRzBAVhc3NldAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFAXAHYXNzZXRJZAIPSW52YWxpZCBwYXltZW50AhBJbnZhbGlkIGFzc2V0IElkAwMJAGYCCAUBcAZhbW91bnQAAAkBCGNoZWNrTkZUAQUFYXNzZXQHBAt0b3RhbFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ50b3RhbFN0YWtlZEtleQAABAp0b3RhbFBvd2VyCQELdmFsdWVPckVsc2UCCQCfCAEFDXRvdGFsUG93ZXJLZXkAAAQMYWRkcmVzc1Bvd2VyCQELdmFsdWVPckVsc2UCCQCfCAEJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIGX3Bvd2VyAAAECG5mdFBvd2VyCQELZ2V0UG93ZXJORlQBBQVhc3NldAQIbmZ0SWRTdHIJANgEAQgFBWFzc2V0AmlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ50b3RhbFN0YWtlZEtleQkAZAIFC3RvdGFsU3Rha2VkAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFDXRvdGFsUG93ZXJLZXkJAGQCBQp0b3RhbFBvd2VyBQhuZnRQb3dlcgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIEbmZ0XwUIbmZ0SWRTdHICBl9vd25lcgUKYWRkcmVzc1N0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBG5mdF8FCG5mdElkU3RyAgZfcG93ZXIFCG5mdFBvd2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIIYWRkcmVzc18FCmFkZHJlc3NTdHICBl9wb3dlcgkAZAIFDGFkZHJlc3NQb3dlcgUIbmZ0UG93ZXIFA25pbAkAAgECC05vIHBheW1lbnRzAWkBB3Vuc3Rha2UBCG5mdElkU3RyBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFCG5mdElkU3RyAg5JbnZhbGlkIG5mdCBJZAQMb3duZXJBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkArAICCQCsAgICBG5mdF8FCG5mdElkU3RyAgZfb3duZXICEk93bmVyIGRhdGEgaW52YWxpZAMJAQIhPQIFDG93bmVyQWRkcmVzcwUKYWRkcmVzc1N0cgkAAgECFVlvdSBhcmUgbm90IHRoZSBvd25lcgMJAQhjaGVja05GVAEFBWFzc2V0BAt0b3RhbFN0YWtlZAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ50b3RhbFN0YWtlZEtleQAABAp0b3RhbFBvd2VyCQELdmFsdWVPckVsc2UCCQCfCAEFDXRvdGFsUG93ZXJLZXkAAAQMYWRkcmVzc1Bvd2VyCQELdmFsdWVPckVsc2UCCQCfCAEJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIGX3Bvd2VyAAAEDW5mdEFzc2V0SWRTdHIJANgEAQgFBWFzc2V0AmlkBAhuZnRQb3dlcgkBEUBleHRyTmF0aXZlKDEwNTUpAQkArAICCQCsAgICBG5mdF8FDW5mdEFzc2V0SWRTdHICBl9wb3dlcgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQgFBWFzc2V0AmlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ50b3RhbFN0YWtlZEtleQkAZQIFC3RvdGFsU3Rha2VkAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFDXRvdGFsUG93ZXJLZXkJAGUCBQp0b3RhbFBvd2VyBQhuZnRQb3dlcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIEbmZ0XwUNbmZ0QXNzZXRJZFN0cgIGX293bmVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICAgRuZnRfBQ1uZnRBc3NldElkU3RyAgZfcG93ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAghhZGRyZXNzXwUKYWRkcmVzc1N0cgIGX3Bvd2VyCQBlAgUMYWRkcmVzc1Bvd2VyBQhuZnRQb3dlcgUDbmlsCQACAQIOSW52YWxpZCBuZnQgSWQBaQEKc2VuZFRvVm90ZQEMY29sbGVjdGlvbklkBAZpc3N1ZXIJARNnZXRDb2xsZWN0aW9uSXNzdWVyAQUMY29sbGVjdGlvbklkAwkAAAIJALECAQUGaXNzdWVyAAAJAAIBAhtDb2xsZWN0aW9uIGlzc3VlciBub3QgZm91bmQDCQECIT0CBQZpc3N1ZXIJAKUIAQgFAWkGY2FsbGVyCQACAQImT25seSB0aGUgaXNzdWVyIGNhbiBzdWJtaXQgdG8gdGhlIHZvdGUEBnZvdGVJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgtjb2xsZWN0aW9uXwUMY29sbGVjdGlvbklkAgdfdm90ZUlkBQZ2b3RlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCDV9jb2xsZWN0aW9uSWQFDGNvbGxlY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIGX293bmVyCQClCAEIBQFpBmNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCCl9jcmVhdGVkQXQFBmhlaWdodAUDbmlsAWkBDnJlbW92ZUZyb21Wb3RlAQZ2b3RlSWQEDGNvbGxlY3Rpb25JZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAg1fY29sbGVjdGlvbklkAhdDb2xsZWN0aW9uIElkIG5vdCBmb3VuZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIGX293bmVyAg9Pd25lciBub3QgZm91bmQDCQECIT0CBQVvd25lcgkApQgBCAUBaQZjYWxsZXIJAAIBAhVZb3UgYXJlIG5vdCB0aGUgb3duZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICC2NvbGxlY3Rpb25fBQxjb2xsZWN0aW9uSWQCB192b3RlSWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCDV9jb2xsZWN0aW9uSWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCBl9vd25lcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIKX2NyZWF0ZWRBdAUDbmlsAWkBBHZvdGUCBnZvdGVJZAR0eXBlBAphZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQFZXhpc3QEByRtYXRjaDAJAKIIAQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCDV9jb2xsZWN0aW9uSWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF0BQckbWF0Y2gwBgcEDHZvdGVyVm90ZUtleQkArAICCQCsAgIJAKwCAgkArAICAgZ2b3Rlcl8FCmFkZHJlc3NTdHICBl92b3RlXwUGdm90ZUlkAghfaXNWb3RlZAQQdm90ZXJWb3RlVHlwZUtleQkArAICCQCsAgIJAKwCAgkArAICAgZ2b3Rlcl8FCmFkZHJlc3NTdHICBl92b3RlXwUGdm90ZUlkAgVfdHlwZQQRdm90ZXJWb3RlUG93ZXJLZXkJAKwCAgkArAICCQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgZfdm90ZV8FBnZvdGVJZAIGX3Bvd2VyBBJ2b3RlclZvdGVzQ291bnRLZXkJAKwCAgkArAICAgZ2b3Rlcl8FCmFkZHJlc3NTdHICC192b3Rlc0NvdW50BBJ2b3RlclNwZW50UG93ZXJLZXkJAKwCAgkArAICAgZ2b3Rlcl8FCmFkZHJlc3NTdHICC19zcGVudFBvd2VyBA52b3RlVXBDb3VudEtleQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCCF91cENvdW50BBB2b3RlRG93bkNvdW50S2V5CQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAIKX2Rvd25Db3VudAQRdm90ZVRvdGFsQ291bnRLZXkJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAgtfdG90YWxDb3VudAQMYWRkcmVzc1Bvd2VyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkArAICCQCsAgICCGFkZHJlc3NfBQphZGRyZXNzU3RyAgZfcG93ZXICH1RoZSBhZGRyZXNzIGhhcyBubyB2b3RpbmcgcG93ZXIECnRvdGFsQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQURdm90ZVRvdGFsQ291bnRLZXkAAAQPdm90ZXJWb3Rlc0NvdW50CQELdmFsdWVPckVsc2UCCQCfCAEFEnZvdGVyVm90ZXNDb3VudEtleQAABA92b3RlclNwZW50UG93ZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUSdm90ZXJTcGVudFBvd2VyS2V5AAAEEHZvdGVDaGFuZ2VTdGF0ZXMDCQAAAgUEdHlwZQICdXAEB3VwQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOdm90ZVVwQ291bnRLZXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUOdm90ZVVwQ291bnRLZXkJAGQCBQd1cENvdW50BQxhZGRyZXNzUG93ZXIFA25pbAMJAAACBQR0eXBlAgRkb3duBAlkb3duQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUQdm90ZURvd25Db3VudEtleQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRB2b3RlRG93bkNvdW50S2V5CQBkAgUJZG93bkNvdW50BQxhZGRyZXNzUG93ZXIFA25pbAkAAgECDEludmFsaWQgdHlwZQQNaXNDYWxsZXJWb3RlZAkBC3ZhbHVlT3JFbHNlAgkAoAgBBQx2b3RlclZvdGVLZXkHAwUNaXNDYWxsZXJWb3RlZAkAAgECFllvdSBoYXZlIGFscmVhZHkgdm90ZWQDCQEBIQEFBWV4aXN0CQACAQIUQ29sbGVjdGlvbiBub3QgZm91bmQJAM4IAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUMdm90ZXJWb3RlS2V5BgkAzAgCCQELU3RyaW5nRW50cnkCBRB2b3RlclZvdGVUeXBlS2V5BQR0eXBlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRF2b3RlclZvdGVQb3dlcktleQUMYWRkcmVzc1Bvd2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ2b3RlclZvdGVzQ291bnRLZXkJAGQCBQ92b3RlclZvdGVzQ291bnQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSdm90ZXJTcGVudFBvd2VyS2V5CQBkAgUPdm90ZXJTcGVudFBvd2VyBQxhZGRyZXNzUG93ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFEXZvdGVUb3RhbENvdW50S2V5CQBkAgUKdG90YWxDb3VudAUMYWRkcmVzc1Bvd2VyBQNuaWwFEHZvdGVDaGFuZ2VTdGF0ZXMBaQEGdW52b3RlAQZ2b3RlSWQECmFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAx2b3RlclZvdGVLZXkJAKwCAgkArAICCQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgZfdm90ZV8FBnZvdGVJZAIIX2lzVm90ZWQEEHZvdGVyVm90ZVR5cGVLZXkJAKwCAgkArAICCQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgZfdm90ZV8FBnZvdGVJZAIFX3R5cGUEEXZvdGVyVm90ZVBvd2VyS2V5CQCsAgIJAKwCAgkArAICCQCsAgICBnZvdGVyXwUKYWRkcmVzc1N0cgIGX3ZvdGVfBQZ2b3RlSWQCBl9wb3dlcgQSdm90ZXJWb3Rlc0NvdW50S2V5CQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgtfdm90ZXNDb3VudAQSdm90ZXJTcGVudFBvd2VyS2V5CQCsAgIJAKwCAgIGdm90ZXJfBQphZGRyZXNzU3RyAgtfc3BlbnRQb3dlcgQOdm90ZVVwQ291bnRLZXkJAKwCAgkArAICAgV2b3RlXwUGdm90ZUlkAghfdXBDb3VudAQQdm90ZURvd25Db3VudEtleQkArAICCQCsAgICBXZvdGVfBQZ2b3RlSWQCCl9kb3duQ291bnQEEXZvdGVUb3RhbENvdW50S2V5CQCsAgIJAKwCAgIFdm90ZV8FBnZvdGVJZAILX3RvdGFsQ291bnQECnZvdGVJZFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBBRB2b3RlclZvdGVUeXBlS2V5AhhWb3RlIElkIHR5cGUgbm90IGZvdW5kZWQEC3ZvdGVJZFBvd2VyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQURdm90ZXJWb3RlUG93ZXJLZXkCGVZvdGUgSWQgcG93ZXIgbm90IGZvdW5kZWQECnRvdGFsQ291bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBRF2b3RlVG90YWxDb3VudEtleQIfVm90ZSBJZCB0b3RhbCBjb3VudCBub3QgZm91bmRlZAQPdm90ZXJWb3Rlc0NvdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUSdm90ZXJWb3Rlc0NvdW50S2V5AiNWb3RlciB2b3RlcyBjb3VudCB2YWx1ZSBub3QgZm91bmRlZAQPdm90ZXJTcGVudFBvd2VyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUSdm90ZXJTcGVudFBvd2VyS2V5AiNWb3RlciBzcGVudCBwb3dlciB2YWx1ZSBub3QgZm91bmRlZAQQdm90ZUNoYW5nZVN0YXRlcwMJAAACBQp2b3RlSWRUeXBlAgJ1cAQHdXBDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ52b3RlVXBDb3VudEtleQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ52b3RlVXBDb3VudEtleQkAZQIFB3VwQ291bnQFC3ZvdGVJZFBvd2VyBQNuaWwDCQAAAgUKdm90ZUlkVHlwZQIEZG93bgQJZG93bkNvdW50CQELdmFsdWVPckVsc2UCCQCfCAEFEHZvdGVEb3duQ291bnRLZXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQdm90ZURvd25Db3VudEtleQkAZQIFCWRvd25Db3VudAULdm90ZUlkUG93ZXIFA25pbAkAAgECDEludmFsaWQgdHlwZQQNaXNDYWxsZXJWb3RlZAkBC3ZhbHVlT3JFbHNlAgkAoAgBBQx2b3RlclZvdGVLZXkHAwkBASEBBQ1pc0NhbGxlclZvdGVkCQACAQIVWW91IGhhdmVuJ3Qgdm90ZWQgeWV0CQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUMdm90ZXJWb3RlS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ2b3RlclZvdGVzQ291bnRLZXkJAGUCBQ92b3RlclZvdGVzQ291bnQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSdm90ZXJTcGVudFBvd2VyS2V5CQBlAgUPdm90ZXJTcGVudFBvd2VyBQt2b3RlSWRQb3dlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgURdm90ZVRvdGFsQ291bnRLZXkJAGUCBQp0b3RhbENvdW50BQt2b3RlSWRQb3dlcgUDbmlsBRB2b3RlQ2hhbmdlU3RhdGVzAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleXo3jts=", "height": 3460515, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6kjK3EFnJKs6Xrzej4Wr49Mdqj1rbU154jgXoNPgtiY5 Next: H2bLPbiP4bVh3wqDqxwNnggsYEBoi2XXmtbJZxa7FbNJ Diff:
OldNewDifferences
109109 case _ =>
110110 false
111111 }
112- let voterVoteKey = ((("voter_" + addressStr) + "_vote_") + voteId)
112+ let voterVoteKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_isVoted")
113+ let voterVoteTypeKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_type")
114+ let voterVotePowerKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_power")
113115 let voterVotesCountKey = (("voter_" + addressStr) + "_votesCount")
114116 let voterSpentPowerKey = (("voter_" + addressStr) + "_spentPower")
115117 let voteUpCountKey = (("vote_" + voteId) + "_upCount")
135137 then throw("You have already voted")
136138 else if (!(exist))
137139 then throw("Collection not found")
138- else ([BooleanEntry(voterVoteKey, true), IntegerEntry(voterVotesCountKey, (voterVotesCount + 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower + addressPower)), IntegerEntry(voteTotalCountKey, (totalCount + addressPower))] ++ voteChangeStates)
140+ else ([BooleanEntry(voterVoteKey, true), StringEntry(voterVoteTypeKey, type), IntegerEntry(voterVotePowerKey, addressPower), IntegerEntry(voterVotesCountKey, (voterVotesCount + 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower + addressPower)), IntegerEntry(voteTotalCountKey, (totalCount + addressPower))] ++ voteChangeStates)
139141 }
140142
141143
142144
143145 @Callable(i)
144-func unvote (voteId,type) = {
146+func unvote (voteId) = {
145147 let addressStr = toString(i.caller)
146- let voterVoteKey = ((("voter_" + addressStr) + "_vote_") + voteId)
148+ let voterVoteKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_isVoted")
149+ let voterVoteTypeKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_type")
150+ let voterVotePowerKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_power")
147151 let voterVotesCountKey = (("voter_" + addressStr) + "_votesCount")
148152 let voterSpentPowerKey = (("voter_" + addressStr) + "_spentPower")
149153 let voteUpCountKey = (("vote_" + voteId) + "_upCount")
150154 let voteDownCountKey = (("vote_" + voteId) + "_downCount")
151155 let voteTotalCountKey = (("vote_" + voteId) + "_totalCount")
152- let addressPower = valueOrErrorMessage(getInteger((("address_" + addressStr) + "_power")), "The address has no voting power")
153- let totalCount = valueOrElse(getInteger(voteTotalCountKey), 0)
154- let voterVotesCount = valueOrElse(getInteger(voterVotesCountKey), 0)
155- let voterSpentPower = valueOrElse(getInteger(voterSpentPowerKey), 0)
156- let voteChangeStates = if ((type == "up"))
156+ let voteIdType = valueOrErrorMessage(getString(voterVoteTypeKey), "Vote Id type not founded")
157+ let voteIdPower = valueOrErrorMessage(getInteger(voterVotePowerKey), "Vote Id power not founded")
158+ let totalCount = valueOrErrorMessage(getInteger(voteTotalCountKey), "Vote Id total count not founded")
159+ let voterVotesCount = valueOrErrorMessage(getInteger(voterVotesCountKey), "Voter votes count value not founded")
160+ let voterSpentPower = valueOrErrorMessage(getInteger(voterSpentPowerKey), "Voter spent power value not founded")
161+ let voteChangeStates = if ((voteIdType == "up"))
157162 then {
158163 let upCount = valueOrElse(getInteger(voteUpCountKey), 0)
159-[IntegerEntry(voteUpCountKey, (upCount - addressPower))]
164+[IntegerEntry(voteUpCountKey, (upCount - voteIdPower))]
160165 }
161- else if ((type == "down"))
166+ else if ((voteIdType == "down"))
162167 then {
163168 let downCount = valueOrElse(getInteger(voteDownCountKey), 0)
164-[IntegerEntry(voteDownCountKey, (downCount - addressPower))]
169+[IntegerEntry(voteDownCountKey, (downCount - voteIdPower))]
165170 }
166171 else throw("Invalid type")
167172 let isCallerVoted = valueOrElse(getBoolean(voterVoteKey), false)
168173 if (!(isCallerVoted))
169174 then throw("You haven't voted yet")
170- else ([DeleteEntry(voterVoteKey), IntegerEntry(voterVotesCountKey, (voterVotesCount - 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower - addressPower)), IntegerEntry(voteTotalCountKey, (totalCount - addressPower))] ++ voteChangeStates)
175+ else ([DeleteEntry(voterVoteKey), IntegerEntry(voterVotesCountKey, (voterVotesCount - 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower - voteIdPower)), IntegerEntry(voteTotalCountKey, (totalCount - voteIdPower))] ++ voteChangeStates)
171176 }
172177
173178
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let creationAddress = Address(base58'3PFQjjDMiZKQZdu5JqTHD7HwgSXyp9Rw9By')
55
66 let totalStakedKey = "total_staked"
77
88 let totalPowerKey = "total_power"
99
1010 func checkNFT (asset) = if (if (if (if ((getStringValue(creationAddress, (("nft_" + toBase58String(asset.id)) + "_issuer")) == toString(this)))
1111 then (asset.issuer == creationAddress)
1212 else false)
1313 then (asset.decimals == 0)
1414 else false)
1515 then (asset.reissuable == false)
1616 else false)
1717 then (asset.quantity == 1)
1818 else false
1919
2020
2121 func getPowerNFT (asset) = {
2222 let params = getStringValue(creationAddress, (("nft_" + toBase58String(asset.id)) + "_params"))
2323 if ((params == "gold"))
2424 then 50
2525 else 10
2626 }
2727
2828
2929 func getCollectionIssuer (collectionId) = {
3030 let assetId = valueOrElse(getString(creationAddress, (("collection_" + collectionId) + "_assetId")), "")
3131 valueOrElse(getString(creationAddress, (("nft_" + assetId) + "_issuer")), "")
3232 }
3333
3434
3535 @Callable(i)
3636 func stake () = {
3737 let addressStr = toString(i.caller)
3838 let p = valueOrErrorMessage(i.payments[0], "No payments")
3939 let asset = valueOrErrorMessage(assetInfo(valueOrErrorMessage(p.assetId, "Invalid payment")), "Invalid asset Id")
4040 if (if ((p.amount > 0))
4141 then checkNFT(asset)
4242 else false)
4343 then {
4444 let totalStaked = valueOrElse(getInteger(totalStakedKey), 0)
4545 let totalPower = valueOrElse(getInteger(totalPowerKey), 0)
4646 let addressPower = valueOrElse(getInteger((("address_" + addressStr) + "_power")), 0)
4747 let nftPower = getPowerNFT(asset)
4848 let nftIdStr = toBase58String(asset.id)
4949 [IntegerEntry(totalStakedKey, (totalStaked + 1)), IntegerEntry(totalPowerKey, (totalPower + nftPower)), StringEntry((("nft_" + nftIdStr) + "_owner"), addressStr), IntegerEntry((("nft_" + nftIdStr) + "_power"), nftPower), IntegerEntry((("address_" + addressStr) + "_power"), (addressPower + nftPower))]
5050 }
5151 else throw("No payments")
5252 }
5353
5454
5555
5656 @Callable(i)
5757 func unstake (nftIdStr) = {
5858 let addressStr = toString(i.caller)
5959 let asset = valueOrErrorMessage(assetInfo(fromBase58String(nftIdStr)), "Invalid nft Id")
6060 let ownerAddress = valueOrErrorMessage(getString((("nft_" + nftIdStr) + "_owner")), "Owner data invalid")
6161 if ((ownerAddress != addressStr))
6262 then throw("You are not the owner")
6363 else if (checkNFT(asset))
6464 then {
6565 let totalStaked = valueOrElse(getInteger(totalStakedKey), 0)
6666 let totalPower = valueOrElse(getInteger(totalPowerKey), 0)
6767 let addressPower = valueOrElse(getInteger((("address_" + addressStr) + "_power")), 0)
6868 let nftAssetIdStr = toBase58String(asset.id)
6969 let nftPower = getIntegerValue((("nft_" + nftAssetIdStr) + "_power"))
7070 [ScriptTransfer(i.caller, 1, asset.id), IntegerEntry(totalStakedKey, (totalStaked - 1)), IntegerEntry(totalPowerKey, (totalPower - nftPower)), DeleteEntry((("nft_" + nftAssetIdStr) + "_owner")), DeleteEntry((("nft_" + nftAssetIdStr) + "_power")), IntegerEntry((("address_" + addressStr) + "_power"), (addressPower - nftPower))]
7171 }
7272 else throw("Invalid nft Id")
7373 }
7474
7575
7676
7777 @Callable(i)
7878 func sendToVote (collectionId) = {
7979 let issuer = getCollectionIssuer(collectionId)
8080 if ((size(issuer) == 0))
8181 then throw("Collection issuer not found")
8282 else if ((issuer != toString(i.caller)))
8383 then throw("Only the issuer can submit to the vote")
8484 else {
8585 let voteId = toBase58String(i.transactionId)
8686 [StringEntry((("collection_" + collectionId) + "_voteId"), voteId), StringEntry((("vote_" + voteId) + "_collectionId"), collectionId), StringEntry((("vote_" + voteId) + "_owner"), toString(i.caller)), IntegerEntry((("vote_" + voteId) + "_createdAt"), height)]
8787 }
8888 }
8989
9090
9191
9292 @Callable(i)
9393 func removeFromVote (voteId) = {
9494 let collectionId = valueOrErrorMessage(getString((("vote_" + voteId) + "_collectionId")), "Collection Id not found")
9595 let owner = valueOrErrorMessage(getString((("vote_" + voteId) + "_owner")), "Owner not found")
9696 if ((owner != toString(i.caller)))
9797 then throw("You are not the owner")
9898 else [DeleteEntry((("collection_" + collectionId) + "_voteId")), DeleteEntry((("vote_" + voteId) + "_collectionId")), DeleteEntry((("vote_" + voteId) + "_owner")), DeleteEntry((("vote_" + voteId) + "_createdAt"))]
9999 }
100100
101101
102102
103103 @Callable(i)
104104 func vote (voteId,type) = {
105105 let addressStr = toString(i.caller)
106106 let exist = match getString((("vote_" + voteId) + "_collectionId")) {
107107 case t: String =>
108108 true
109109 case _ =>
110110 false
111111 }
112- let voterVoteKey = ((("voter_" + addressStr) + "_vote_") + voteId)
112+ let voterVoteKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_isVoted")
113+ let voterVoteTypeKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_type")
114+ let voterVotePowerKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_power")
113115 let voterVotesCountKey = (("voter_" + addressStr) + "_votesCount")
114116 let voterSpentPowerKey = (("voter_" + addressStr) + "_spentPower")
115117 let voteUpCountKey = (("vote_" + voteId) + "_upCount")
116118 let voteDownCountKey = (("vote_" + voteId) + "_downCount")
117119 let voteTotalCountKey = (("vote_" + voteId) + "_totalCount")
118120 let addressPower = valueOrErrorMessage(getInteger((("address_" + addressStr) + "_power")), "The address has no voting power")
119121 let totalCount = valueOrElse(getInteger(voteTotalCountKey), 0)
120122 let voterVotesCount = valueOrElse(getInteger(voterVotesCountKey), 0)
121123 let voterSpentPower = valueOrElse(getInteger(voterSpentPowerKey), 0)
122124 let voteChangeStates = if ((type == "up"))
123125 then {
124126 let upCount = valueOrElse(getInteger(voteUpCountKey), 0)
125127 [IntegerEntry(voteUpCountKey, (upCount + addressPower))]
126128 }
127129 else if ((type == "down"))
128130 then {
129131 let downCount = valueOrElse(getInteger(voteDownCountKey), 0)
130132 [IntegerEntry(voteDownCountKey, (downCount + addressPower))]
131133 }
132134 else throw("Invalid type")
133135 let isCallerVoted = valueOrElse(getBoolean(voterVoteKey), false)
134136 if (isCallerVoted)
135137 then throw("You have already voted")
136138 else if (!(exist))
137139 then throw("Collection not found")
138- else ([BooleanEntry(voterVoteKey, true), IntegerEntry(voterVotesCountKey, (voterVotesCount + 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower + addressPower)), IntegerEntry(voteTotalCountKey, (totalCount + addressPower))] ++ voteChangeStates)
140+ else ([BooleanEntry(voterVoteKey, true), StringEntry(voterVoteTypeKey, type), IntegerEntry(voterVotePowerKey, addressPower), IntegerEntry(voterVotesCountKey, (voterVotesCount + 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower + addressPower)), IntegerEntry(voteTotalCountKey, (totalCount + addressPower))] ++ voteChangeStates)
139141 }
140142
141143
142144
143145 @Callable(i)
144-func unvote (voteId,type) = {
146+func unvote (voteId) = {
145147 let addressStr = toString(i.caller)
146- let voterVoteKey = ((("voter_" + addressStr) + "_vote_") + voteId)
148+ let voterVoteKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_isVoted")
149+ let voterVoteTypeKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_type")
150+ let voterVotePowerKey = (((("voter_" + addressStr) + "_vote_") + voteId) + "_power")
147151 let voterVotesCountKey = (("voter_" + addressStr) + "_votesCount")
148152 let voterSpentPowerKey = (("voter_" + addressStr) + "_spentPower")
149153 let voteUpCountKey = (("vote_" + voteId) + "_upCount")
150154 let voteDownCountKey = (("vote_" + voteId) + "_downCount")
151155 let voteTotalCountKey = (("vote_" + voteId) + "_totalCount")
152- let addressPower = valueOrErrorMessage(getInteger((("address_" + addressStr) + "_power")), "The address has no voting power")
153- let totalCount = valueOrElse(getInteger(voteTotalCountKey), 0)
154- let voterVotesCount = valueOrElse(getInteger(voterVotesCountKey), 0)
155- let voterSpentPower = valueOrElse(getInteger(voterSpentPowerKey), 0)
156- let voteChangeStates = if ((type == "up"))
156+ let voteIdType = valueOrErrorMessage(getString(voterVoteTypeKey), "Vote Id type not founded")
157+ let voteIdPower = valueOrErrorMessage(getInteger(voterVotePowerKey), "Vote Id power not founded")
158+ let totalCount = valueOrErrorMessage(getInteger(voteTotalCountKey), "Vote Id total count not founded")
159+ let voterVotesCount = valueOrErrorMessage(getInteger(voterVotesCountKey), "Voter votes count value not founded")
160+ let voterSpentPower = valueOrErrorMessage(getInteger(voterSpentPowerKey), "Voter spent power value not founded")
161+ let voteChangeStates = if ((voteIdType == "up"))
157162 then {
158163 let upCount = valueOrElse(getInteger(voteUpCountKey), 0)
159-[IntegerEntry(voteUpCountKey, (upCount - addressPower))]
164+[IntegerEntry(voteUpCountKey, (upCount - voteIdPower))]
160165 }
161- else if ((type == "down"))
166+ else if ((voteIdType == "down"))
162167 then {
163168 let downCount = valueOrElse(getInteger(voteDownCountKey), 0)
164-[IntegerEntry(voteDownCountKey, (downCount - addressPower))]
169+[IntegerEntry(voteDownCountKey, (downCount - voteIdPower))]
165170 }
166171 else throw("Invalid type")
167172 let isCallerVoted = valueOrElse(getBoolean(voterVoteKey), false)
168173 if (!(isCallerVoted))
169174 then throw("You haven't voted yet")
170- else ([DeleteEntry(voterVoteKey), IntegerEntry(voterVotesCountKey, (voterVotesCount - 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower - addressPower)), IntegerEntry(voteTotalCountKey, (totalCount - addressPower))] ++ voteChangeStates)
175+ else ([DeleteEntry(voterVoteKey), IntegerEntry(voterVotesCountKey, (voterVotesCount - 1)), IntegerEntry(voterSpentPowerKey, (voterSpentPower - voteIdPower)), IntegerEntry(voteTotalCountKey, (totalCount - voteIdPower))] ++ voteChangeStates)
171176 }
172177
173178
174179 @Verifier(tx)
175180 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
176181

github/deemru/w8io/786bc32 
49.11 ms