tx · HiWbEhNGWCqyK7SVX5cuZmodVFz9D7xJcErmVAVNm9Hh 3N6zsHoJ1d5MGewb6SzocKf9hqY2YRv2X9F: -0.05000000 Waves 2023.10.06 14:50 [2786722] smart account 3N6zsHoJ1d5MGewb6SzocKf9hqY2YRv2X9F > SELF 0.00000000 Waves
{ "type": 13, "id": "HiWbEhNGWCqyK7SVX5cuZmodVFz9D7xJcErmVAVNm9Hh", "fee": 5000000, "feeAssetId": null, "timestamp": 1696593034362, "version": 1, "sender": "3N6zsHoJ1d5MGewb6SzocKf9hqY2YRv2X9F", "senderPublicKey": "4vKLYiETjKhWQjgL2HxhS5cAy69esyZaVbGU5NRbcP2b", "proofs": [ "4vc1EGn6Sa9TRQdokuEbgAxcfiGLMWhiu1WUmQTQEWLt1g2UqY1oNG5xknaQ2saPAvBq3JgPR4jtwwAkYHRjjoyv" ], "script": "base64:AAIFAAAAAAAAACEIAhIECgIICBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAAsAQAAAAd0aHJvd0lmAAAAAgAAAAljb25kaXRpb24AAAAFZXJyb3IDBQAAAAljb25kaXRpb24JAAACAAAAAQUAAAAFZXJyb3IGAQAAAAh3cml0ZUludAAAAAIAAAADa2V5AAAABXZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkAAaQAAAABBQAAAAV2YWx1ZQIAAAAJIGZvciBrZXkgBQAAAANrZXkJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgAAAANrZXkAAAAFdmFsdWUDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAICAAAAFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUAAAADa2V5AQAAAA13cml0ZUNvbnN0SW50AAAAAgAAAANrZXkAAAAFdmFsdWUDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAA2tleQUAAAAFdmFsdWUJAAACAAAAAQkAASwAAAACAgAAABBhbHJlYWR5IGV4aXN0czogBQAAAANrZXkBAAAACGNoYW5nZUJ5AAAAAgAAAANrZXkAAAAFdmFsdWUJAQAAAAh3cml0ZUludAAAAAIFAAAAA2tleQkAAGQAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAUAAAAFdmFsdWUBAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAAAAAASY29uZmlnQWRkcmVzc1N0b3JlAgAAAAZjb25maWcAAAAADWNvbmZpZ0FkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAASY29uZmlnQWRkcmVzc1N0b3JlAgAAABpjaGlsZHJlbi52b3Rpbmc6IG5vIGNvbmZpZwIAAAAWaW52YWxpZCBjb25maWcgYWRkcmVzcwAAAAAGSEVJR0hUBQAAAAZoZWlnaHQBAAAABmFkdmlzZQAAAAAJAAEsAAAAAgIAAAAIaGVpZ2h0OiAJAAGkAAAAAQUAAAAGSEVJR0hUAAAAAARCQVNFAAAAAAAAAAPoAQAAAAlvcEFsbG93ZWQAAAABAAAAAm9wBAAAAAFhCQAD/AAAAAQFAAAADWNvbmZpZ0FkZHJlc3MCAAAACW9wQWxsb3dlZAkABEwAAAACBQAAAAJvcAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAAWEFAAAAAWEGCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAAQY2hpbGRyZW5Db250cmFjdAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA1jb25maWdBZGRyZXNzAgAAABFjb250cmFjdF9jaGlsZHJlbgIAAAAUbm8gY29udHJhY3RfY2hpbGRyZW4CAAAAGWludmFsaWQgY29udHJhY3RfY2hpbGRyZW4AAAAAFHZvdGluZ1Jlc3VsdENvbnRyYWN0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAAFmNvbnRyYWN0X3ZvdGluZ19yZXN1bHQCAAAAGW5vIGNvbnRyYWN0X3ZvdGluZ19y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c2FsX21pbl9wb3dlcl9yZXF1aXJlZAUAAAAFY2hpbGQBAAAAEXZvdGluZ1N0YXJ0T2Zmc2V0AAAAAQAAAAVjaGlsZAkBAAAACHNldHRpbmdzAAAAAgIAAAAbcHJvcG9zYWxfdm90aW5nc3RhcnRfb2Zmc2V0BQAAAAVjaGlsZAEAAAAPdm90aW5nRW5kT2Zmc2V0AAAAAQAAAAVjaGlsZAkBAAAACHNldHRpbmdzAAAAAgIAAAAZcHJvcG9zYWxfdm90aW5nZW5kX29mZnNldAUAAAAFY2hpbGQBAAAACXVzZXJQb3dlcgAAAAIAAAAFY2hpbGQAAAAEdXNlcgkBAAAABWFzSW50AAAAAQkAA/wAAAAEBQAAABBjaGlsZHJlbkNvbnRyYWN0AgAAAAl1c2VyUG93ZXIJAARMAAAAAgUAAAAFY2hpbGQJAARMAAAAAgUAAAAEdXNlcgUAAAADbmlsBQAAAANuaWwBAAAADWlzUGFydGljaXBhbnQAAAABAAAABXBvd2VyAwkAAAAAAAACBQAAAAVwb3dlcgAAAAAAAAAAAAkAAAIAAAABAgAAACV5b3UgYXJlIG5vdCBhIHBhcnRpY2lwYW50IG9mIHRoaXMgZGFvBQAAAANuaWwBAAAADnByb3Bvc2FsRXhpc3RzAAAAAQAAAAR0eElkBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAQAAABNwcm9wb3NhbEhlaWdodFN0b3JlAAAAAQUAAAAEdHhJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVzdGFydAUAAAAHJG1hdGNoMAYHAQAAABBwcm9wb3NhbE9uVm90aW5nAAAAAQAAAAR0eElkBAAAAAtub25FeGlzdEVycgIAAAAWcHJvcG9zYWwgZG9lc24ndCBleGlzdAMJAQAAAAEhAAAAAQkBAAAADnByb3Bvc2FsRXhpc3RzAAAAAQUAAAAEdHhJZAkAAAIAAAABBQAAAAtub25FeGlzdEVycgQAAAALdm90aW5nU3RhcnQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAYcHJvcG9zYWxWb3RpbmdTdGFydFN0b3JlAAAAAQUAAAAEdHhJZAUAAAALbm9uRXhpc3RFcnIEAAAACXZvdGluZ0VuZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZwcm9wb3NhbFZvdGluZ0VuZFN0b3JlAAAAAQUAAAAEdHhJZAUAAAALbm9uRXhpc3RFcnIDCQAAZgAAAAIFAAAAC3ZvdGluZ1N0YXJ0BQAAAAZIRUlHSFQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABOdm90aW5nIG5vdCBzdGFydGVkIHlldCwgZGlzY3Vzc2lvbiBpcyBpbiBwcm9ncmVzcywgdm90aW5nIHdpbGwgc3RhcnQgYXQgYmxvY2sgCQABpAAAAAEFAAAAC3ZvdGluZ1N0YXJ0AgAAAAssIG5vdyBpdCdzIAkAAaQAAAABBQAAAAZIRUlHSFQDCQAAZgAAAAIFAAAABkhFSUdIVAUAAAAJdm90aW5nRW5kCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFnZvdGluZyBlbmRlZCBhdCBibG9jayAJAAGkAAAAAQUAAAAJdm90aW5nRW5kAgAAAAssIG5vdyBpdCdzIAkAAaQAAAABBQAAAAZIRUlHSFQGAQAAABRwcm9wb3NhbEJlZm9yZVZvdGluZwAAAAEAAAAEdHhJZAQAAAALbm9uRXhpc3RFcnICAAAAFnByb3Bvc2FsIGRvZXNuJ3QgZXhpc3QDCQEAAAABIQAAAAEJAQAAAA5wcm9wb3NhbEV4aXN0cwAAAAEFAAAABHR4SWQJAAACAAAAAQUAAAALbm9uRXhpc3RFcnIEAAAAC3ZvdGluZ1N0YXJ0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGHByb3Bvc2FsVm90aW5nU3RhcnRTdG9yZQAAAAEFAAAABHR4SWQFAAAAC25vbkV4aXN0RXJyAwkAAGcAAAACBQAAAAZIRUlHSFQFAAAAC3ZvdGluZ1N0YXJ0CQAAAgAAAAECAAAAIHZvdGluZyBzdGFydCBpcyBhbHJlYWR5IGhhcHBlbmVkBgEAAAAQdG90YWxQb3dlclN0YWtlZAAAAAEAAAAFY2hpbGQJAQAAAAVhc0ludAAAAAEJAAP8AAAABAUAAAAQY2hpbGRyZW5Db250cmFjdAIAAAAKdG90YWxQb3dlcgkABEwAAAACBQAAAAVjaGlsZAUAAAADbmlsBQAAAANuaWwBAAAADGNhbkJyb2FkY2FzdAAAAAQAAAAFY2hpbGQAAAAEdHhJZAAAAAZ5ZXNJbmMAAAAFbm9JbmMEAAAACHZvdGVzWWVzCQAAZAAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAFXByb3Bvc2FsVG90YWxZZXNTdG9yZQAAAAEFAAAABHR4SWQAAAAAAAAAAAAFAAAABnllc0luYwQAAAAHdm90ZXNObwkAAGQAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAABRwcm9wb3NhbFRvdGFsTm9TdG9yZQAAAAEFAAAABHR4SWQAAAAAAAAAAAAFAAAABW5vSW5jBAAAAA5wcm9wb3NhbEhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHwAAAAEJAQAAABNwcm9wb3NhbEhlaWdodFN0b3JlAAAAAQUAAAAEdHhJZAIAAAAXcHJvcG9zYWwgbm90IHJlZ2lzdGVyZWQEAAAACnRvdGFsUG93ZXIJAQAAABB0b3RhbFBvd2VyU3Rha2VkAAAAAQUAAAAFY2hpbGQDCQAAAAAAAAIFAAAACnRvdGFsUG93ZXIFAAAACnRvdGFsUG93ZXIEAAAABnF1b3J1bQkBAAAAC3F1b3J1bVJhdGlvAAAAAQUAAAAFY2hpbGQEAAAABnBhc3NlZAkBAAAAC3Bhc3NlZFJhdGlvAAAAAQUAAAAFY2hpbGQEAAAACnRvdGFsVm90ZXMJAABkAAAAAgUAAAAIdm90ZXNZZXMFAAAAB3ZvdGVzTm8EAAAACWhhc1F1b3J1bQkAAGcAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAKdG90YWxWb3RlcwUAAAAEQkFTRQUAAAAKdG90YWxQb3dlcgUAAAAGcXVvcnVtBAAAAAloYXNQYXNzZWQJAABnAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAACHZvdGVzWWVzBQAAAARCQVNFBQAAAAp0b3RhbFZvdGVzBQAAAAZwYXNzZWQDBQAAAAloYXNRdW9ydW0FAAAACWhhc1Bhc3NlZAcJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQAAAA5hZHZpc2VQcm9wb3NhbAAAAAEAAAAEdHhJZAQAAAAFY2hpbGQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAAScHJvcG9zYWxDaGlsZFN0b3JlAAAAAQUAAAAEdHhJZAIAAAAPY2hpbGQgbm90IGZvdW5kBAAAAA5wcm9wb3NhbEhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABNwcm9wb3NhbEhlaWdodFN0b3JlAAAAAQUAAAAEdHhJZAIAAAALbm8gcHJvcG9zYWwEAAAAC3ZvdGluZ1N0YXJ0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGHByb3Bvc2FsVm90aW5nU3RhcnRTdG9yZQAAAAEFAAAABHR4SWQCAAAAC25vIHByb3Bvc2FsBAAAAAl2b3RpbmdFbmQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWcHJvcG9zYWxWb3RpbmdFbmRTdG9yZQAAAAEFAAAABHR4SWQCAAAAC25vIHByb3Bvc2FsBAAAAAh2b3Rlc1llcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAVcHJvcG9zYWxUb3RhbFllc1N0b3JlAAAAAQUAAAAEdHhJZAAAAAAAAAAAAAQAAAAHdm90ZXNObwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAUcHJvcG9zYWxUb3RhbE5vU3RvcmUAAAABBQAAAAR0eElkAAAAAAAAAAAABAAAAA50b3RhbFBvd2VyU25hcAkBAAAAEHRvdGFsUG93ZXJTdGFrZWQAAAABBQAAAAVjaGlsZAMJAAAAAAAAAgUAAAAOdG90YWxQb3dlclNuYXAFAAAADnRvdGFsUG93ZXJTbmFwBAAAAAp0b3RhbFZvdGVzCQAAZAAAAAIFAAAACHZvdGVzWWVzBQAAAAd2b3Rlc05vBAAAAAloYXNRdW9ydW0DCQAAZgAAAAIFAAAACnRvdGFsVm90ZXMAAAAAAAAAAAAJAABnAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAACnRvdGFsVm90ZXMFAAAABEJBU0UFAAAADnRvdGFsUG93ZXJTbmFwCQEAAAALcXVvcnVtUmF0aW8AAAABBQAAAAVjaGlsZAcEAAAACWhhc1Bhc3NlZAMJAABmAAAAAgUAAAAKdG90YWxWb3RlcwAAAAAAAAAAAAkAAGcAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAIdm90ZXNZZXMFAAAABEJBU0UFAAAACnRvdGFsVm90ZXMJAQAAAAtwYXNzZWRSYXRpbwAAAAEFAAAABWNoaWxkBwQAAAASaW5CbG9ja2NoYWluSGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAD6QAAAAEJAAJZAAAAAQUAAAAEdHhJZAAAAAAAAAAAAAQAAAAGc3RhdHVzAwkAAGYAAAACBQAAAAt2b3RpbmdTdGFydAUAAAAGSEVJR0hUAgAAAApkaXNjdXNzaW9uAwkAAGcAAAACBQAAAAl2b3RpbmdFbmQFAAAABkhFSUdIVAIAAAAGdm90aW5nAwkBAAAAASEAAAABBQAAAAloYXNRdW9ydW0CAAAACG5vUXVvcnVtAwkBAAAAASEAAAABBQAAAAloYXNQYXNzZWQCAAAADHZvdGluZ0ZhaWxlZAMJAABmAAAAAgUAAAASaW5CbG9ja2NoYWluSGVpZ2h0AAAAAAAAAAAAAgAAAAxpbkJsb2NrY2hhaW4CAAAADHdhaXRpbmdGb3JUeAQAAAAPYnJvYWRjYXN0SGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAAFHZvdGluZ1Jlc3VsdENvbnRyYWN0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABlwcm9wb3NhbF9hbGxvd19icm9hZGNhc3RfBQAAAAVjaGlsZAIAAAABXwUAAAAEdHhJZAD//////////wkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1wcm9wb3NhbF9pZDogBQAAAAR0eElkAgAAABMsIHByb3Bvc2FsX3N0YXR1czogBQAAAAZzdGF0dXMCAAAADywgcHJvcG9zYWxfYnk6IAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAAA9wcm9wb3NhbEJ5U3RvcmUAAAABBQAAAAR0eElkAgAAAAtubyBwcm9wb3NhbAIAAAATLCBwcm9wb3NhbF9oZWlnaHQ6IAkAAaQAAAABBQAAAA5wcm9wb3NhbEhlaWdodAIAAAAVLCBwcm9wb3NhbF90eGhlaWdodDogCQABpAAAAAEFAAAAEmluQmxvY2tjaGFpbkhlaWdodAIAAAAYLCBwcm9wb3NhbF92b3RpbmdzdGFydDogCQABpAAAAAEFAAAAC3ZvdGluZ1N0YXJ0AgAAABYsIHByb3Bvc2FsX3ZvdGluZ2VuZDogCQABpAAAAAEFAAAACXZvdGluZ0VuZAIAAAASLCBwcm9wb3NhbF9wb3dlcjogCQABpAAAAAEFAAAADnRvdGFsUG93ZXJTbmFwAgAAAAwsIHZvdGVfeWVzOiAJAAGkAAAAAQUAAAAIdm90ZXNZZXMCAAAACywgdm90ZV9ubzogCQABpAAAAAEFAAAAB3ZvdGVzTm8CAAAAHCwgcHJvcG9zYWxfYWxsb3dfYnJvYWRjYXN0OiAJAAGlAAAAAQMJAQAAAAIhPQAAAAIFAAAAD2Jyb2FkY2FzdEhlaWdodAD//////////wkAAGcAAAACBQAAAAZIRUlHSFQFAAAAD2Jyb2FkY2FzdEhlaWdodAcCAAAAIywgcHJvcG9zYWxfYWxsb3dfYnJvYWRjYXN0X2hlaWdodDogCQABpAAAAAEFAAAAD2Jyb2FkY2FzdEhlaWdodAIAAAAaLCBwcm9wb3NhbF92b3Rpbmdfc3VjY2VlZDoJAAGlAAAAAQkBAAAAAiE9AAAAAgUAAAAPYnJvYWRjYXN0SGVpZ2h0AP//////////CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAAPYnJvYWRjYXN0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", "chainId": 84, "height": 2786722, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func throwIf (condition,error) = if (condition) | |
5 | + | then throw(error) | |
6 | + | else true | |
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 writeConstString (key,value) = if (!(isDefined(getString(this, key)))) | |
15 | + | then StringEntry(key, value) | |
16 | + | else throw(("already initialized: " + key)) | |
17 | + | ||
18 | + | ||
19 | + | func writeConstInt (key,value) = if (!(isDefined(getInteger(this, key)))) | |
20 | + | then IntegerEntry(key, value) | |
21 | + | else throw(("already exists: " + key)) | |
22 | + | ||
23 | + | ||
24 | + | func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value)) | |
25 | + | ||
26 | + | ||
27 | + | func asInt (value) = match value { | |
28 | + | case int: Int => | |
29 | + | int | |
30 | + | case _ => | |
31 | + | throw("wrong type, expected: Int") | |
32 | + | } | |
33 | + | ||
34 | + | ||
35 | + | let configAddressStore = "config" | |
36 | + | ||
37 | + | let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "children.voting: no config")), "invalid config address") | |
38 | + | ||
39 | + | let HEIGHT = height | |
40 | + | ||
41 | + | func advise () = ("height: " + toString(HEIGHT)) | |
42 | + | ||
43 | + | ||
44 | + | let BASE = 1000 | |
45 | + | ||
46 | + | func opAllowed (op) = { | |
47 | + | let a = invoke(configAddress, "opAllowed", [op], nil) | |
48 | + | if ((a == a)) | |
49 | + | then true | |
50 | + | else throw("Strict value is not equal to itself.") | |
51 | + | } | |
52 | + | ||
53 | + | ||
54 | + | let childrenContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_children"), "no contract_children")), "invalid contract_children") | |
55 | + | ||
56 | + | let votingResultContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_voting_result"), "no contract_voting_result")), "invalid contract_voting_result") | |
57 | + | ||
58 | + | func proposalChildStore (id) = ("proposal_child_" + id) | |
59 | + | ||
60 | + | ||
61 | + | func proposalHeightStore (id) = ("proposal_height_" + id) | |
62 | + | ||
63 | + | ||
64 | + | func proposalVotingStartStore (id) = ("proposal_votingstart_" + id) | |
65 | + | ||
66 | + | ||
67 | + | func proposalVotingEndStore (id) = ("proposal_votingend_" + id) | |
68 | + | ||
69 | + | ||
70 | + | func proposalByStore (id) = ("proposal_by_" + id) | |
71 | + | ||
72 | + | ||
73 | + | func proposalTotalYesStore (id) = ("proposal_yes_" + id) | |
74 | + | ||
75 | + | ||
76 | + | func proposalTotalNoStore (id) = ("proposal_no_" + id) | |
77 | + | ||
78 | + | ||
79 | + | func proposalUserYesStore (user,id) = ((("user_proposal_yes_" + user) + "_") + id) | |
80 | + | ||
81 | + | ||
82 | + | func proposalUserNoStore (user,id) = ((("user_proposal_no_" + user) + "_") + id) | |
83 | + | ||
84 | + | ||
85 | + | func userLastProposeHeightStore (user) = ("propose_lastheight_" + user) | |
86 | + | ||
87 | + | ||
88 | + | func userYes (user,id) = valueOrElse(getInteger(this, proposalUserYesStore(user, id)), 0) | |
89 | + | ||
90 | + | ||
91 | + | func userNo (user,id) = valueOrElse(getInteger(this, proposalUserNoStore(user, id)), 0) | |
92 | + | ||
93 | + | ||
94 | + | func userLastProposeHeight (user) = valueOrElse(getInteger(this, userLastProposeHeightStore(user)), -1) | |
95 | + | ||
96 | + | ||
97 | + | let thisAddress = toString(this) | |
98 | + | ||
99 | + | func settings (key,child) = valueOrElse(getInteger(((key + "_") + child)), valueOrErrorMessage(getInteger(configAddress, ((thisAddress + "_") + key)), (key + " is not defined"))) | |
100 | + | ||
101 | + | ||
102 | + | func userProposeDelay (child) = settings("user_propose_delay", child) | |
103 | + | ||
104 | + | ||
105 | + | func quorumRatio (child) = settings("proposal_quorum_ratio", child) | |
106 | + | ||
107 | + | ||
108 | + | func passedRatio (child) = settings("proposal_passed_ratio", child) | |
109 | + | ||
110 | + | ||
111 | + | func proposalMinRequired (child) = settings("proposal_min_power_required", child) | |
112 | + | ||
113 | + | ||
114 | + | func votingStartOffset (child) = settings("proposal_votingstart_offset", child) | |
115 | + | ||
116 | + | ||
117 | + | func votingEndOffset (child) = settings("proposal_votingend_offset", child) | |
118 | + | ||
119 | + | ||
120 | + | func userPower (child,user) = asInt(invoke(childrenContract, "userPower", [child, user], nil)) | |
121 | + | ||
122 | + | ||
123 | + | func isParticipant (power) = if ((power == 0)) | |
124 | + | then throw("you are not a participant of this dao") | |
125 | + | else nil | |
126 | + | ||
127 | + | ||
128 | + | func proposalExists (txId) = match getInteger(this, proposalHeightStore(txId)) { | |
129 | + | case start: Int => | |
130 | + | true | |
131 | + | case _ => | |
132 | + | false | |
133 | + | } | |
134 | + | ||
135 | + | ||
136 | + | func proposalOnVoting (txId) = { | |
137 | + | let nonExistErr = "proposal doesn't exist" | |
138 | + | if (!(proposalExists(txId))) | |
139 | + | then throw(nonExistErr) | |
140 | + | else { | |
141 | + | let votingStart = valueOrErrorMessage(getInteger(this, proposalVotingStartStore(txId)), nonExistErr) | |
142 | + | let votingEnd = valueOrErrorMessage(getInteger(this, proposalVotingEndStore(txId)), nonExistErr) | |
143 | + | if ((votingStart > HEIGHT)) | |
144 | + | then throw(((("voting not started yet, discussion is in progress, voting will start at block " + toString(votingStart)) + ", now it's ") + toString(HEIGHT))) | |
145 | + | else if ((HEIGHT > votingEnd)) | |
146 | + | then throw(((("voting ended at block " + toString(votingEnd)) + ", now it's ") + toString(HEIGHT))) | |
147 | + | else true | |
148 | + | } | |
149 | + | } | |
150 | + | ||
151 | + | ||
152 | + | func proposalBeforeVoting (txId) = { | |
153 | + | let nonExistErr = "proposal doesn't exist" | |
154 | + | if (!(proposalExists(txId))) | |
155 | + | then throw(nonExistErr) | |
156 | + | else { | |
157 | + | let votingStart = valueOrErrorMessage(getInteger(this, proposalVotingStartStore(txId)), nonExistErr) | |
158 | + | if ((HEIGHT >= votingStart)) | |
159 | + | then throw("voting start is already happened") | |
160 | + | else true | |
161 | + | } | |
162 | + | } | |
163 | + | ||
164 | + | ||
165 | + | func totalPowerStaked (child) = asInt(invoke(childrenContract, "totalPower", [child], nil)) | |
166 | + | ||
167 | + | ||
168 | + | func canBroadcast (child,txId,yesInc,noInc) = { | |
169 | + | let votesYes = (valueOrElse(getInteger(proposalTotalYesStore(txId)), 0) + yesInc) | |
170 | + | let votesNo = (valueOrElse(getInteger(proposalTotalNoStore(txId)), 0) + noInc) | |
171 | + | let proposalHeight = valueOrErrorMessage(getInteger(proposalHeightStore(txId)), "proposal not registered") | |
172 | + | let totalPower = totalPowerStaked(child) | |
173 | + | if ((totalPower == totalPower)) | |
174 | + | then { | |
175 | + | let quorum = quorumRatio(child) | |
176 | + | let passed = passedRatio(child) | |
177 | + | let totalVotes = (votesYes + votesNo) | |
178 | + | let hasQuorum = (((totalVotes * BASE) / totalPower) >= quorum) | |
179 | + | let hasPassed = (((votesYes * BASE) / totalVotes) >= passed) | |
180 | + | if (hasQuorum) | |
181 | + | then hasPassed | |
182 | + | else false | |
183 | + | } | |
184 | + | else throw("Strict value is not equal to itself.") | |
185 | + | } | |
186 | + | ||
187 | + | ||
188 | + | func adviseProposal (txId) = { | |
189 | + | let child = valueOrErrorMessage(getString(proposalChildStore(txId)), "child not found") | |
190 | + | let proposalHeight = valueOrErrorMessage(getInteger(this, proposalHeightStore(txId)), "no proposal") | |
191 | + | let votingStart = valueOrErrorMessage(getInteger(this, proposalVotingStartStore(txId)), "no proposal") | |
192 | + | let votingEnd = valueOrErrorMessage(getInteger(this, proposalVotingEndStore(txId)), "no proposal") | |
193 | + | let votesYes = valueOrElse(getInteger(this, proposalTotalYesStore(txId)), 0) | |
194 | + | let votesNo = valueOrElse(getInteger(this, proposalTotalNoStore(txId)), 0) | |
195 | + | let totalPowerSnap = totalPowerStaked(child) | |
196 | + | if ((totalPowerSnap == totalPowerSnap)) | |
197 | + | then { | |
198 | + | let totalVotes = (votesYes + votesNo) | |
199 | + | let hasQuorum = if ((totalVotes > 0)) | |
200 | + | then (((totalVotes * BASE) / totalPowerSnap) >= quorumRatio(child)) | |
201 | + | else false | |
202 | + | let hasPassed = if ((totalVotes > 0)) | |
203 | + | then (((votesYes * BASE) / totalVotes) >= passedRatio(child)) | |
204 | + | else false | |
205 | + | let inBlockchainHeight = valueOrElse(transactionHeightById(fromBase58String(txId)), 0) | |
206 | + | let status = if ((votingStart > HEIGHT)) | |
207 | + | then "discussion" | |
208 | + | else if ((votingEnd >= HEIGHT)) | |
209 | + | then "voting" | |
210 | + | else if (!(hasQuorum)) | |
211 | + | then "noQuorum" | |
212 | + | else if (!(hasPassed)) | |
213 | + | then "votingFailed" | |
214 | + | else if ((inBlockchainHeight > 0)) | |
215 | + | then "inBlockchain" | |
216 | + | else "waitingForTx" | |
217 | + | let broadcastHeight = valueOrElse(getInteger(votingResultContract, ((("proposal_allow_broadcast_" + child) + "_") + txId)), -1) | |
218 | + | ((((((((((((((((((((((((("proposal_id: " + txId) + ", proposal_status: ") + status) + ", proposal_by: ") + valueOrErrorMessage(getString(this, proposalByStore(txId)), "no proposal")) + ", proposal_height: ") + toString(proposalHeight)) + ", proposal_txheight: ") + toString(inBlockchainHeight)) + ", proposal_votingstart: ") + toString(votingStart)) + ", proposal_votingend: ") + toString(votingEnd)) + ", proposal_power: ") + toString(totalPowerSnap)) + ", vote_yes: ") + toString(votesYes)) + ", vote_no: ") + toString(votesNo)) + ", proposal_allow_broadcast: ") + toString(if ((broadcastHeight != -1)) | |
219 | + | then (HEIGHT >= broadcastHeight) | |
220 | + | else false)) + ", proposal_allow_broadcast_height: ") + toString(broadcastHeight)) + ", proposal_voting_succeed:") + toString((broadcastHeight != -1))) | |
221 | + | } | |
222 | + | else throw("Strict value is not equal to itself.") | |
223 | + | } | |
224 | + | ||
225 | + | ||
226 | + | func broadcastHeight (txId) = (getIntegerValue(proposalVotingEndStore(txId)) + 1) | |
227 | + | ||
228 | + | ||
229 | + | @Callable(i) | |
230 | + | func propose (child,txId) = { | |
231 | + | let checks = opAllowed("child_governance_propose_tx") | |
232 | + | if ((checks == checks)) | |
233 | + | then { | |
234 | + | let required = proposalMinRequired(child) | |
235 | + | let user = toString(i.caller) | |
236 | + | let gv = userPower(child, user) | |
237 | + | if ((gv == gv)) | |
238 | + | then if ((required > gv)) | |
239 | + | then throw((((("not enough staked power to make proposal." + " Minimum required = ") + toString(required)) + ", actual: = ") + toString(gv))) | |
240 | + | else { | |
241 | + | let delay = userProposeDelay(child) | |
242 | + | let last = userLastProposeHeight(user) | |
243 | + | if (if ((last > -1)) | |
244 | + | then ((last + delay) > HEIGHT) | |
245 | + | else false) | |
246 | + | then throw(((("can't propose too often, last proroposal height: " + toString(last)) + ", blocks to wait: ") + toString(((last + delay) - HEIGHT)))) | |
247 | + | else [writeConstString(proposalChildStore(txId), child), writeConstInt(proposalHeightStore(txId), HEIGHT), writeConstInt(proposalVotingStartStore(txId), (HEIGHT + votingStartOffset(child))), writeConstInt(proposalVotingEndStore(txId), (HEIGHT + votingEndOffset(child))), writeConstString(proposalByStore(txId), user), writeInt(userLastProposeHeightStore(user), HEIGHT)] | |
248 | + | } | |
249 | + | else throw("Strict value is not equal to itself.") | |
250 | + | } | |
251 | + | else throw("Strict value is not equal to itself.") | |
252 | + | } | |
253 | + | ||
254 | + | ||
255 | + | ||
256 | + | @Callable(i) | |
257 | + | func voteYes (txId) = { | |
258 | + | let checks = if (opAllowed("child_governance_vote_tx")) | |
259 | + | then proposalOnVoting(txId) | |
260 | + | else false | |
261 | + | if ((checks == checks)) | |
262 | + | then { | |
263 | + | let user = toString(i.caller) | |
264 | + | if ((userNo(user, txId) > 0)) | |
265 | + | then throw("already voted against, please retract your vote first") | |
266 | + | else { | |
267 | + | let yes = userYes(user, txId) | |
268 | + | if ((yes > 0)) | |
269 | + | then throw("already voted") | |
270 | + | else { | |
271 | + | let child = valueOrErrorMessage(getString(proposalChildStore(txId)), "child not found") | |
272 | + | let power = userPower(child, user) | |
273 | + | if ((power == power)) | |
274 | + | then { | |
275 | + | let p = isParticipant(power) | |
276 | + | if ((p == p)) | |
277 | + | then { | |
278 | + | let result = canBroadcast(child, txId, power, 0) | |
279 | + | let setResult = invoke(votingResultContract, "setResult", [child, txId, result, broadcastHeight(txId)], nil) | |
280 | + | if ((setResult == setResult)) | |
281 | + | then [changeBy(proposalUserYesStore(user, txId), power), changeBy(proposalTotalYesStore(txId), power)] | |
282 | + | else throw("Strict value is not equal to itself.") | |
283 | + | } | |
284 | + | else throw("Strict value is not equal to itself.") | |
285 | + | } | |
286 | + | else throw("Strict value is not equal to itself.") | |
287 | + | } | |
288 | + | } | |
289 | + | } | |
290 | + | else throw("Strict value is not equal to itself.") | |
291 | + | } | |
292 | + | ||
293 | + | ||
294 | + | ||
295 | + | @Callable(i) | |
296 | + | func voteNo (txId) = { | |
297 | + | let checks = if (opAllowed("child_governance_vote_tx")) | |
298 | + | then proposalOnVoting(txId) | |
299 | + | else false | |
300 | + | if ((checks == checks)) | |
301 | + | then { | |
302 | + | let user = toString(i.caller) | |
303 | + | if ((userYes(user, txId) > 0)) | |
304 | + | then throw("already voted for, please retract your vote first") | |
305 | + | else { | |
306 | + | let no = userNo(user, txId) | |
307 | + | if ((no > 0)) | |
308 | + | then throw("already voted") | |
309 | + | else { | |
310 | + | let child = valueOrErrorMessage(getString(proposalChildStore(txId)), "child not found") | |
311 | + | let power = userPower(child, user) | |
312 | + | if ((power == power)) | |
313 | + | then { | |
314 | + | let p = isParticipant(power) | |
315 | + | if ((p == p)) | |
316 | + | then { | |
317 | + | let result = canBroadcast(child, txId, 0, power) | |
318 | + | let setResult = invoke(votingResultContract, "setResult", [child, txId, result, broadcastHeight(txId)], nil) | |
319 | + | if ((setResult == setResult)) | |
320 | + | then [changeBy(proposalUserNoStore(user, txId), power), changeBy(proposalTotalNoStore(txId), power)] | |
321 | + | else throw("Strict value is not equal to itself.") | |
322 | + | } | |
323 | + | else throw("Strict value is not equal to itself.") | |
324 | + | } | |
325 | + | else throw("Strict value is not equal to itself.") | |
326 | + | } | |
327 | + | } | |
328 | + | } | |
329 | + | else throw("Strict value is not equal to itself.") | |
330 | + | } | |
331 | + | ||
332 | + | ||
333 | + | ||
334 | + | @Callable(i) | |
335 | + | func retract (txId) = { | |
336 | + | let checks = if (opAllowed("child_governance_retract_vote")) | |
337 | + | then proposalOnVoting(txId) | |
338 | + | else false | |
339 | + | if ((checks == checks)) | |
340 | + | then { | |
341 | + | let user = toString(i.caller) | |
342 | + | let child = valueOrErrorMessage(getString(proposalChildStore(txId)), "child not found") | |
343 | + | let yes = -(userYes(user, txId)) | |
344 | + | let no = -(userNo(user, txId)) | |
345 | + | let result = canBroadcast(child, txId, yes, no) | |
346 | + | let setResult = invoke(votingResultContract, "setResult", [child, txId, result, broadcastHeight(txId)], nil) | |
347 | + | if ((setResult == setResult)) | |
348 | + | then [changeBy(proposalTotalYesStore(txId), yes), changeBy(proposalTotalNoStore(txId), no), DeleteEntry(proposalUserYesStore(user, txId)), DeleteEntry(proposalUserNoStore(user, txId))] | |
349 | + | else throw("Strict value is not equal to itself.") | |
350 | + | } | |
351 | + | else throw("Strict value is not equal to itself.") | |
352 | + | } | |
353 | + | ||
354 | + | ||
355 | + | ||
356 | + | @Callable(i) | |
357 | + | func retractProposal (txId) = { | |
358 | + | let checks = if (opAllowed("child_governance_retract_proposal_tx")) | |
359 | + | then proposalBeforeVoting(txId) | |
360 | + | else false | |
361 | + | if ((checks == checks)) | |
362 | + | then { | |
363 | + | let by = valueOrErrorMessage(getString(this, proposalByStore(txId)), "proposal doesn't exist") | |
364 | + | let user = toString(i.caller) | |
365 | + | if ((by != user)) | |
366 | + | then throw("only owner can retract proposal") | |
367 | + | else [DeleteEntry(proposalChildStore(txId)), DeleteEntry(proposalHeightStore(txId)), DeleteEntry(proposalVotingStartStore(txId)), DeleteEntry(proposalVotingEndStore(txId)), DeleteEntry(proposalByStore(txId)), DeleteEntry(proposalTotalYesStore(txId)), DeleteEntry(proposalTotalNoStore(txId)), DeleteEntry(proposalUserYesStore(user, txId)), DeleteEntry(proposalUserNoStore(user, txId)), DeleteEntry(userLastProposeHeightStore(user))] | |
368 | + | } | |
369 | + | else throw("Strict value is not equal to itself.") | |
370 | + | } | |
371 | + | ||
372 | + | ||
373 | + | ||
374 | + | @Callable(i) | |
375 | + | func init (config) = [writeConstString(configAddressStore, config)] | |
376 | + | ||
377 | + |
github/deemru/w8io/026f985 24.52 ms ◑