tx · Aoyk4yduRKWz3UzbBdaW2KdCKgVK7vgcvA7pSo5nKN78

3NAg879tKUJh949h21umkwiaRQhwZftz1BE:  -0.04000000 Waves

2019.09.03 14:47 [659767] smart account 3NAg879tKUJh949h21umkwiaRQhwZftz1BE > SELF 0.00000000 Waves

{ "type": 13, "id": "Aoyk4yduRKWz3UzbBdaW2KdCKgVK7vgcvA7pSo5nKN78", "fee": 4000000, "feeAssetId": null, "timestamp": 1567511184026, "version": 1, "sender": "3NAg879tKUJh949h21umkwiaRQhwZftz1BE", "senderPublicKey": "BqY2jhkQCcbidtQdQZu6f9RV3AkFAS8VPToHxwYu1KdJ", "proofs": [ "42baK35TcRBTxV6LqmDd7JKiXJNAHFssp2VvN58X7tsSGCSo2e4B5i9kgd71CPXTHmcYKs38k3X3CnWWSkQjDQfP" ], "script": "base64:AAIDAAAAAAAAAAAAAAAQAAAAAAN3dnMAAAAAAAX14QAAAAAAFHRpY2tlckFsbG93ZWRMZXR0ZXJzAgAAABpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgAAAAANdGlja2VyRXhhbXBsZQIAAAADQlRDAAAAAA90aWNrZXJNaW5MZW5ndGgAAAAAAAAAAAEAAAAAD3RpY2tlck1heExlbmd0aAAAAAAAAAAABgAAAAAWZGVzY3JpcHRpb25VcGRhdGVQcmljZQkAAGgAAAACAAAAAAAAAAABBQAAAAN3dnMAAAAAD2xpbmtVcGRhdGVQcmljZQkAAGgAAAACAAAAAAAAAAABBQAAAAN3dnMAAAAAEXRpY2tlclVwZGF0ZVByaWNlCQAAaAAAAAIAAAAAAAAAAAIFAAAAA3d2cwAAAAAcdGlja2VyQ2F0YWxvZ3VlT3JhY2xlQWRkcmVzcwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABAgAAACMzTXhIeFc1VldxNEtyV2NiaEZmeEtyYWZYbTRtTDZyWkhmagAAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNOQURxSG9MTWJNVGZYZFAyVGVCQlN4NW1RWGVQVmozS1ptAQAAABRnZXRTdHJpbmdGcm9tQWNjb3VudAAAAAIAAAAOYWNjb3VudEFkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAADmFjY291bnRBZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwUAAAAEdW5pdAEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgAAAA5hY2NvdW50QWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAOYWNjb3VudEFkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAAAAAAAAAAAAAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgAAAANzdHIAAAAGc3Vic3RyBAAAAAckbWF0Y2gwCQAEswAAAAIFAAAAA3N0cgUAAAAGc3Vic3RyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABWluZGV4BQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFaW5kZXgFAAAAByRtYXRjaDAHCQEAAAAFdGhyb3cAAAAAAQAAAA1pc1ZhbGlkVGlja2VyAAAAAQAAAAZ0aWNrZXIEAAAADXRpY2tlckxldHRlcnMJAAS1AAAAAgUAAAAGdGlja2VyAgAAAAAEAAAADHRpY2tlckxlbmd0aAkAAZAAAAABBQAAAA10aWNrZXJMZXR0ZXJzBAAAAA5pc0xldHRlcjFWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAABAAAAA5pc0xldHRlcjJWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAABBAAAAA5pc0xldHRlcjNWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAACBAAAAA5pc0xldHRlcjRWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAADBAAAAA5pc0xldHRlcjVWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAEBAAAAA5pc0xldHRlcjZWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAFAwkBAAAAAiE9AAAAAgUAAAAGdGlja2VyAgAAAAADAwkAAGcAAAACBQAAAAx0aWNrZXJMZW5ndGgFAAAAD3RpY2tlck1pbkxlbmd0aAkAAGcAAAACBQAAAA90aWNrZXJNYXhMZW5ndGgFAAAADHRpY2tlckxlbmd0aAcDCQAAAAAAAAIAAAAAAAAAAAEFAAAADHRpY2tlckxlbmd0aAUAAAAOaXNMZXR0ZXIxVmFsaWQDCQAAAAAAAAIAAAAAAAAAAAIFAAAADHRpY2tlckxlbmd0aAMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAMFAAAADHRpY2tlckxlbmd0aAMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAQFAAAADHRpY2tlckxlbmd0aAMDAwUAAAAOaXNMZXR0ZXIxVmFsaWQFAAAADmlzTGV0dGVyMlZhbGlkBwUAAAAOaXNMZXR0ZXIzVmFsaWQHBQAAAA5pc0xldHRlcjRWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAUFAAAADHRpY2tlckxlbmd0aAMDAwMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcFAAAADmlzTGV0dGVyM1ZhbGlkBwUAAAAOaXNMZXR0ZXI0VmFsaWQHBQAAAA5pc0xldHRlcjVWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAYFAAAADHRpY2tlckxlbmd0aAMDAwMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcFAAAADmlzTGV0dGVyNFZhbGlkBwUAAAAOaXNMZXR0ZXI1VmFsaWQHBQAAAA5pc0xldHRlcjZWYWxpZAcHBwcBAAAAH2lzQXNzZXRVcGRhdGVBbGxvd2VkQnlJbmRpY2F0b3IAAAACAAAAB2Fzc2V0SWQAAAAJaW5kaWNhdG9yBAAAAAxpbmRpY2F0b3JLZXkJAAEsAAAAAgkAASwAAAACBQAAAAlpbmRpY2F0b3ICAAAAAV8FAAAAB2Fzc2V0SWQEAAAADmluZGljYXRvclZhbHVlCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzBQAAAAxpbmRpY2F0b3JLZXkEAAAAEWluZGljYXRvclRyZXNob2xkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzBQAAAAlpbmRpY2F0b3IJAABnAAAAAgUAAAAOaW5kaWNhdG9yVmFsdWUFAAAAEWluZGljYXRvclRyZXNob2xkAQAAABdpc1VwZGF0ZUFsbG93ZWRCeVJhdGluZwAAAAEAAAAHYXNzZXRJZAMDCQEAAAAfaXNBc3NldFVwZGF0ZUFsbG93ZWRCeUluZGljYXRvcgAAAAIFAAAAB2Fzc2V0SWQCAAAAC2Fzc2V0UmF0aW5nCQEAAAAfaXNBc3NldFVwZGF0ZUFsbG93ZWRCeUluZGljYXRvcgAAAAIFAAAAB2Fzc2V0SWQCAAAAC2Fzc2V0V2VpZ2h0BwkBAAAAH2lzQXNzZXRVcGRhdGVBbGxvd2VkQnlJbmRpY2F0b3IAAAACBQAAAAdhc3NldElkAgAAAAphc3NldFZvdGVzBwAAAAEAAAABaQEAAAAMdXBkYXRlVGlja2VyAAAAAwAAAAdhc3NldElkAAAADWlzc3VlckFkZHJlc3MAAAAGdGlja2VyBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAPaXNzdWVyVGlja2VyS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1pc3N1ZXJUaWNrZXJfAgAAAAE8BQAAAAdhc3NldElkAgAAAAE+BAAAABB0aWNrZXJGcm9tT3JhY2xlCQEAAAAUZ2V0U3RyaW5nRnJvbUFjY291bnQAAAACBQAAABx0aWNrZXJDYXRhbG9ndWVPcmFjbGVBZGRyZXNzBQAAAAZ0aWNrZXIDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAIAAAABAgAAAC5lcnJvciMxLiBUaGUgc2VydmljZSBjYW4gb25seSBiZSBwYWlkIGluIHdhdmVzAwkAAGcAAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAEXRpY2tlclVwZGF0ZVByaWNlAwkAAAAAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAA1pc3N1ZXJBZGRyZXNzAwkBAAAAF2lzVXBkYXRlQWxsb3dlZEJ5UmF0aW5nAAAAAQUAAAAHYXNzZXRJZAMJAQAAAAIhPQAAAAIFAAAAEHRpY2tlckZyb21PcmFjbGUFAAAABHVuaXQJAAACAAAAAQIAAAAwZXJyb3IjNC4gQXNzZXQgd2l0aCBzdWNoIHRpY2tlciBpcyBhbHJlYWR5IGV4aXN0AwkBAAAADWlzVmFsaWRUaWNrZXIAAAABBQAAAAZ0aWNrZXIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAD2lzc3VlclRpY2tlcktleQUAAAAGdGlja2VyBQAAAANuaWwJAAACAAAAAQIAAAAwZXJyb3IjNS4gQXNzZXQgd2l0aCBzdWNoIHRpY2tlciBpcyBhbHJlYWR5IGV4aXN0CQAAAgAAAAECAAAAGmVycm9yIzMuIFRvbyBsaXR0bGUgcmF0aW5nCQAAAgAAAAECAAAAMmVycm9yIzIuIE9ubHkgYXNzZXQgaXNzdWVyIGNhbiB1cGRhdGUgYXNzZXQgdGlja2VyCQAAAgAAAAECAAAAPmVycm9yIzIuIEluc3VmZmljaWVudCBwYXltZW50IGZvciBhc3NldCB0aWNrZXIgdXBkYXRlIHNlcnZpY2UuAAAAAE0bLGc=", "chainId": 84, "height": 659767, "spentComplexity": 0 } View: original | compacted Prev: 5bgQwdmxfFfFCcYYDU1y5vycz1imviBojKEciesrKr95 Next: HvLtM1kddqFVgSvBYijnatrLZWuZ4f4xLWRnLaqKfdUL Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let descriptionUpdatePrice = 100000000
4+let wvs = 100000000
55
6-let linkUpdatePrice = 100000000
6+let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
77
8-let tickerUpdatePrice = 200000000
8+let tickerExample = "BTC"
9+
10+let tickerMinLength = 1
11+
12+let tickerMaxLength = 6
13+
14+let descriptionUpdatePrice = (1 * wvs)
15+
16+let linkUpdatePrice = (1 * wvs)
17+
18+let tickerUpdatePrice = (2 * wvs)
919
1020 let tickerCatalogueOracleAddress = addressFromStringValue("3MxHxW5VWq4KrWcbhFfxKrafXm4mL6rZHfj")
21+
22+let tokenRatingOracleAddress = addressFromStringValue("3NADqHoLMbMTfXdP2TeBBSx5mQXePVj3KZm")
1123
1224 func getStringFromAccount (accountAddress,key) = match getString(accountAddress, key) {
1325 case s: String =>
1729 }
1830
1931
20-@Callable(i)
21-func updateDescription (assetId,issuerAddress,description) = {
22- let payment = extract(i.payment)
23- let callerAddress = toBase58String(i.caller.bytes)
24- let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
25- if (isDefined(payment.assetId))
26- then throw("error#1. The service can only be paid in waves")
27- else if ((payment.amount >= descriptionUpdatePrice))
28- then if ((callerAddress == issuerAddress))
29- then WriteSet([DataEntry(issuerDescriptionKey, description)])
30- else throw("error#3. Only asset issuer can update asset description")
31- else throw("error#2. Insufficient payment for asset description updaate service.")
32+func getIntegerFromAccount (accountAddress,key) = match getInteger(accountAddress, key) {
33+ case i: Int =>
34+ i
35+ case _ =>
36+ 0
37+}
38+
39+
40+func isSubstrExist (str,substr) = match indexOf(str, substr) {
41+ case index: Int =>
42+ true
43+ case index: Unit =>
44+ false
45+ case _ =>
46+ throw()
47+}
48+
49+
50+func isValidTicker (ticker) = {
51+ let tickerLetters = split(ticker, "")
52+ let tickerLength = size(tickerLetters)
53+ let isLetter1Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[0])
54+ let isLetter2Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[1])
55+ let isLetter3Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[2])
56+ let isLetter4Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[3])
57+ let isLetter5Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[4])
58+ let isLetter6Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[5])
59+ if ((ticker != ""))
60+ then if (if ((tickerLength >= tickerMinLength))
61+ then (tickerMaxLength >= tickerLength)
62+ else false)
63+ then if ((1 == tickerLength))
64+ then isLetter1Valid
65+ else if ((2 == tickerLength))
66+ then if (isLetter1Valid)
67+ then isLetter2Valid
68+ else false
69+ else if ((3 == tickerLength))
70+ then if (if (isLetter1Valid)
71+ then isLetter2Valid
72+ else false)
73+ then isLetter3Valid
74+ else false
75+ else if ((4 == tickerLength))
76+ then if (if (if (isLetter1Valid)
77+ then isLetter2Valid
78+ else false)
79+ then isLetter3Valid
80+ else false)
81+ then isLetter4Valid
82+ else false
83+ else if ((5 == tickerLength))
84+ then if (if (if (if (isLetter1Valid)
85+ then isLetter2Valid
86+ else false)
87+ then isLetter3Valid
88+ else false)
89+ then isLetter4Valid
90+ else false)
91+ then isLetter5Valid
92+ else false
93+ else if ((6 == tickerLength))
94+ then if (if (if (if (if (isLetter1Valid)
95+ then isLetter2Valid
96+ else false)
97+ then isLetter3Valid
98+ else false)
99+ then isLetter4Valid
100+ else false)
101+ then isLetter5Valid
102+ else false)
103+ then isLetter6Valid
104+ else false
105+ else false
106+ else false
107+ else false
32108 }
33109
110+
111+func isAssetUpdateAllowedByIndicator (assetId,indicator) = {
112+ let indicatorKey = ((indicator + "_") + assetId)
113+ let indicatorValue = getIntegerFromAccount(tokenRatingOracleAddress, indicatorKey)
114+ let indicatorTreshold = getIntegerFromAccount(tokenRatingOracleAddress, indicator)
115+ (indicatorValue >= indicatorTreshold)
116+ }
117+
118+
119+func isUpdateAllowedByRating (assetId) = if (if (isAssetUpdateAllowedByIndicator(assetId, "assetRating"))
120+ then isAssetUpdateAllowedByIndicator(assetId, "assetWeight")
121+ else false)
122+ then isAssetUpdateAllowedByIndicator(assetId, "assetVotes")
123+ else false
34124
35125
36126 @Callable(i)
38128 let payment = extract(i.payment)
39129 let callerAddress = toBase58String(i.caller.bytes)
40130 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
131+ let tickerFromOracle = getStringFromAccount(tickerCatalogueOracleAddress, ticker)
41132 if (isDefined(payment.assetId))
42133 then throw("error#1. The service can only be paid in waves")
43134 else if ((payment.amount >= tickerUpdatePrice))
44135 then if ((callerAddress == issuerAddress))
45- then {
46- let tickerFromOracle = getStringFromAccount(tickerCatalogueOracleAddress, ticker)
47- if ((tickerFromOracle != unit))
48- then throw("Asset with such ticker is already exist")
49- else WriteSet([DataEntry(issuerTickerKey, ticker)])
50- }
51- else throw("error#3. Only asset issuer can update asset description")
52- else throw("error#2. Insufficient payment for asset description updaate service.")
136+ then if (isUpdateAllowedByRating(assetId))
137+ then if ((tickerFromOracle != unit))
138+ then throw("error#4. Asset with such ticker is already exist")
139+ else if (isValidTicker(ticker))
140+ then WriteSet([DataEntry(issuerTickerKey, ticker)])
141+ else throw("error#5. Asset with such ticker is already exist")
142+ else throw("error#3. Too little rating")
143+ else throw("error#2. Only asset issuer can update asset ticker")
144+ else throw("error#2. Insufficient payment for asset ticker update service.")
53145 }
54146
55147
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let descriptionUpdatePrice = 100000000
4+let wvs = 100000000
55
6-let linkUpdatePrice = 100000000
6+let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
77
8-let tickerUpdatePrice = 200000000
8+let tickerExample = "BTC"
9+
10+let tickerMinLength = 1
11+
12+let tickerMaxLength = 6
13+
14+let descriptionUpdatePrice = (1 * wvs)
15+
16+let linkUpdatePrice = (1 * wvs)
17+
18+let tickerUpdatePrice = (2 * wvs)
919
1020 let tickerCatalogueOracleAddress = addressFromStringValue("3MxHxW5VWq4KrWcbhFfxKrafXm4mL6rZHfj")
21+
22+let tokenRatingOracleAddress = addressFromStringValue("3NADqHoLMbMTfXdP2TeBBSx5mQXePVj3KZm")
1123
1224 func getStringFromAccount (accountAddress,key) = match getString(accountAddress, key) {
1325 case s: String =>
1426 s
1527 case _ =>
1628 unit
1729 }
1830
1931
20-@Callable(i)
21-func updateDescription (assetId,issuerAddress,description) = {
22- let payment = extract(i.payment)
23- let callerAddress = toBase58String(i.caller.bytes)
24- let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
25- if (isDefined(payment.assetId))
26- then throw("error#1. The service can only be paid in waves")
27- else if ((payment.amount >= descriptionUpdatePrice))
28- then if ((callerAddress == issuerAddress))
29- then WriteSet([DataEntry(issuerDescriptionKey, description)])
30- else throw("error#3. Only asset issuer can update asset description")
31- else throw("error#2. Insufficient payment for asset description updaate service.")
32+func getIntegerFromAccount (accountAddress,key) = match getInteger(accountAddress, key) {
33+ case i: Int =>
34+ i
35+ case _ =>
36+ 0
37+}
38+
39+
40+func isSubstrExist (str,substr) = match indexOf(str, substr) {
41+ case index: Int =>
42+ true
43+ case index: Unit =>
44+ false
45+ case _ =>
46+ throw()
47+}
48+
49+
50+func isValidTicker (ticker) = {
51+ let tickerLetters = split(ticker, "")
52+ let tickerLength = size(tickerLetters)
53+ let isLetter1Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[0])
54+ let isLetter2Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[1])
55+ let isLetter3Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[2])
56+ let isLetter4Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[3])
57+ let isLetter5Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[4])
58+ let isLetter6Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[5])
59+ if ((ticker != ""))
60+ then if (if ((tickerLength >= tickerMinLength))
61+ then (tickerMaxLength >= tickerLength)
62+ else false)
63+ then if ((1 == tickerLength))
64+ then isLetter1Valid
65+ else if ((2 == tickerLength))
66+ then if (isLetter1Valid)
67+ then isLetter2Valid
68+ else false
69+ else if ((3 == tickerLength))
70+ then if (if (isLetter1Valid)
71+ then isLetter2Valid
72+ else false)
73+ then isLetter3Valid
74+ else false
75+ else if ((4 == tickerLength))
76+ then if (if (if (isLetter1Valid)
77+ then isLetter2Valid
78+ else false)
79+ then isLetter3Valid
80+ else false)
81+ then isLetter4Valid
82+ else false
83+ else if ((5 == tickerLength))
84+ then if (if (if (if (isLetter1Valid)
85+ then isLetter2Valid
86+ else false)
87+ then isLetter3Valid
88+ else false)
89+ then isLetter4Valid
90+ else false)
91+ then isLetter5Valid
92+ else false
93+ else if ((6 == tickerLength))
94+ then if (if (if (if (if (isLetter1Valid)
95+ then isLetter2Valid
96+ else false)
97+ then isLetter3Valid
98+ else false)
99+ then isLetter4Valid
100+ else false)
101+ then isLetter5Valid
102+ else false)
103+ then isLetter6Valid
104+ else false
105+ else false
106+ else false
107+ else false
32108 }
33109
110+
111+func isAssetUpdateAllowedByIndicator (assetId,indicator) = {
112+ let indicatorKey = ((indicator + "_") + assetId)
113+ let indicatorValue = getIntegerFromAccount(tokenRatingOracleAddress, indicatorKey)
114+ let indicatorTreshold = getIntegerFromAccount(tokenRatingOracleAddress, indicator)
115+ (indicatorValue >= indicatorTreshold)
116+ }
117+
118+
119+func isUpdateAllowedByRating (assetId) = if (if (isAssetUpdateAllowedByIndicator(assetId, "assetRating"))
120+ then isAssetUpdateAllowedByIndicator(assetId, "assetWeight")
121+ else false)
122+ then isAssetUpdateAllowedByIndicator(assetId, "assetVotes")
123+ else false
34124
35125
36126 @Callable(i)
37127 func updateTicker (assetId,issuerAddress,ticker) = {
38128 let payment = extract(i.payment)
39129 let callerAddress = toBase58String(i.caller.bytes)
40130 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
131+ let tickerFromOracle = getStringFromAccount(tickerCatalogueOracleAddress, ticker)
41132 if (isDefined(payment.assetId))
42133 then throw("error#1. The service can only be paid in waves")
43134 else if ((payment.amount >= tickerUpdatePrice))
44135 then if ((callerAddress == issuerAddress))
45- then {
46- let tickerFromOracle = getStringFromAccount(tickerCatalogueOracleAddress, ticker)
47- if ((tickerFromOracle != unit))
48- then throw("Asset with such ticker is already exist")
49- else WriteSet([DataEntry(issuerTickerKey, ticker)])
50- }
51- else throw("error#3. Only asset issuer can update asset description")
52- else throw("error#2. Insufficient payment for asset description updaate service.")
136+ then if (isUpdateAllowedByRating(assetId))
137+ then if ((tickerFromOracle != unit))
138+ then throw("error#4. Asset with such ticker is already exist")
139+ else if (isValidTicker(ticker))
140+ then WriteSet([DataEntry(issuerTickerKey, ticker)])
141+ else throw("error#5. Asset with such ticker is already exist")
142+ else throw("error#3. Too little rating")
143+ else throw("error#2. Only asset issuer can update asset ticker")
144+ else throw("error#2. Insufficient payment for asset ticker update service.")
53145 }
54146
55147

github/deemru/w8io/873ac7e 
29.81 ms