tx · HewXGitJ5cEVswicbNLHoFWDSu7nKJuMUNwQ9YMPk6iC

3NAg879tKUJh949h21umkwiaRQhwZftz1BE:  -0.05000000 Waves

2019.09.08 16:23 [667152] smart account 3NAg879tKUJh949h21umkwiaRQhwZftz1BE > SELF 0.00000000 Waves

{ "type": 13, "id": "HewXGitJ5cEVswicbNLHoFWDSu7nKJuMUNwQ9YMPk6iC", "fee": 5000000, "feeAssetId": null, "timestamp": 1567949001137, "version": 1, "sender": "3NAg879tKUJh949h21umkwiaRQhwZftz1BE", "senderPublicKey": "BqY2jhkQCcbidtQdQZu6f9RV3AkFAS8VPToHxwYu1KdJ", "proofs": [ "5qPdhEkESTC3SmyiyUpg8BkK2bu5xsxjyDWmtBnN2g5TUKXfuEobWCPSoQb9f2wDGG2AN5Xe4mMvZBKh3CFo2qMz" ], "script": "base64:AAIDAAAAAAAAAAAAAAAdAAAAAAN3dnMAAAAAAAX14QAAAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3ICAAAAGzxub3RTdXBwb3J0ZWRDdXJyZW5jeUVycm9yPgAAAAAXaXNzdWVyQWNjZXNzRGVuaWVkRXJyb3ICAAAAGTxpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcj4AAAAAFW5vdEVub3VnaFBheW1lbnRFcnJvcgIAAAAXPG5vdEVub3VnaFBheW1lbnRFcnJvcj4AAAAAJHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcgIAAAAmPHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcj4AAAAAInRpY2tlclZhbGlkYXRpb25UaWNrZXJJc0V4aXN0RXJyb3ICAAAAJDx0aWNrZXJWYWxpZGF0aW9uVGlja2VySXNFeGlzdEVycm9yPgAAAAAgdGlja2VyVmFsaWRhdGlvbldyb25nRm9ybWF0RXJyb3ICAAAAIjx0aWNrZXJWYWxpZGF0aW9uV3JvbmdGb3JtYXRFcnJvcj4AAAAAFW5vbkV4aXN0ZW50QXNzZXRFcnJvcgIAAAAXPG5vbkV4aXN0ZW50QXNzZXRFcnJvcj4AAAAADm5vUGF5bWVudEVycm9yAgAAABA8bm9QYXltZW50RXJyb3I+AAAAABZkZXNjcmlwdGlvblVwZGF0ZVByaWNlCQAAaAAAAAIAAAAAAAAAAAEFAAAAA3d2cwAAAAAPbGlua1VwZGF0ZVByaWNlCQAAaAAAAAIAAAAAAAAAAAEFAAAAA3d2cwAAAAARdGlja2VyVXBkYXRlUHJpY2UJAABoAAAAAgAAAAAAAAAAAgUAAAADd3ZzAAAAAA90aWNrZXJNaW5MZW5ndGgAAAAAAAAAAAEAAAAAD3RpY2tlck1heExlbmd0aAAAAAAAAAAABgAAAAAUdGlja2VyQWxsb3dlZExldHRlcnMCAAAAGkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaAAAAABx0aWNrZXJDYXRhbG9ndWVPcmFjbGVBZGRyZXNzCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNNeEh4VzVWV3E0S3JXY2JoRmZ4S3JhZlhtNG1MNnJaSGZqAAAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM05BRHFIb0xNYk1UZlhkUDJUZUJCU3g1bVFYZVBWajNLWm0BAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIAAAAOYWNjb3VudEFkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAADmFjY291bnRBZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQAAAAAAAAAAAAEAAAANaXNTdWJzdHJFeGlzdAAAAAIAAAADc3RyAAAABnN1YnN0cgQAAAAHJG1hdGNoMAkABLMAAAACBQAAAANzdHIFAAAABnN1YnN0cgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVpbmRleAUAAAAHJG1hdGNoMAYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABWluZGV4BQAAAAckbWF0Y2gwBwkBAAAABXRocm93AAAAAAEAAAANaXNWYWxpZFRpY2tlcgAAAAEAAAAGdGlja2VyBAAAAA10aWNrZXJMZXR0ZXJzCQAEtQAAAAIFAAAABnRpY2tlcgIAAAAABAAAAAx0aWNrZXJMZW5ndGgJAAGQAAAAAQUAAAANdGlja2VyTGV0dGVycwQAAAAOaXNMZXR0ZXIxVmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAAQAAAAOaXNMZXR0ZXIyVmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAQQAAAAOaXNMZXR0ZXIzVmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAgQAAAAOaXNMZXR0ZXI0VmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAAAwQAAAAOaXNMZXR0ZXI1VmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAABAQAAAAOaXNMZXR0ZXI2VmFsaWQJAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgUAAAAUdGlja2VyQWxsb3dlZExldHRlcnMJAAGRAAAAAgUAAAANdGlja2VyTGV0dGVycwAAAAAAAAAABQMJAQAAAAIhPQAAAAIFAAAABnRpY2tlcgIAAAAAAwMJAABnAAAAAgUAAAAMdGlja2VyTGVuZ3RoBQAAAA90aWNrZXJNaW5MZW5ndGgJAABnAAAAAgUAAAAPdGlja2VyTWF4TGVuZ3RoBQAAAAx0aWNrZXJMZW5ndGgHAwkAAAAAAAACAAAAAAAAAAABBQAAAAx0aWNrZXJMZW5ndGgFAAAADmlzTGV0dGVyMVZhbGlkAwkAAAAAAAACAAAAAAAAAAACBQAAAAx0aWNrZXJMZW5ndGgDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHAwkAAAAAAAACAAAAAAAAAAADBQAAAAx0aWNrZXJMZW5ndGgDAwUAAAAOaXNMZXR0ZXIxVmFsaWQFAAAADmlzTGV0dGVyMlZhbGlkBwUAAAAOaXNMZXR0ZXIzVmFsaWQHAwkAAAAAAAACAAAAAAAAAAAEBQAAAAx0aWNrZXJMZW5ndGgDAwMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcFAAAADmlzTGV0dGVyM1ZhbGlkBwUAAAAOaXNMZXR0ZXI0VmFsaWQHAwkAAAAAAAACAAAAAAAAAAAFBQAAAAx0aWNrZXJMZW5ndGgDAwMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcFAAAADmlzTGV0dGVyNFZhbGlkBwUAAAAOaXNMZXR0ZXI1VmFsaWQHAwkAAAAAAAACAAAAAAAAAAAGBQAAAAx0aWNrZXJMZW5ndGgDAwMDAwUAAAAOaXNMZXR0ZXIxVmFsaWQFAAAADmlzTGV0dGVyMlZhbGlkBwUAAAAOaXNMZXR0ZXIzVmFsaWQHBQAAAA5pc0xldHRlcjRWYWxpZAcFAAAADmlzTGV0dGVyNVZhbGlkBwUAAAAOaXNMZXR0ZXI2VmFsaWQHBwcHAQAAABxpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5UmF0aW5nAAAAAQAAAAdhc3NldElkBAAAAA5hc3NldFJhdGluZ0tleQkAASwAAAACCQABLAAAAAICAAAADGFzc2V0UmF0aW5nXwUAAAAHYXNzZXRJZAIAAAACXzEEAAAAEGFzc2V0UmF0aW5nVmFsdWUJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MFAAAADmFzc2V0UmF0aW5nS2V5BAAAABNhc3NldFJhdGluZ1RyZXNob2xkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzAgAAAA50aWNrZXJSYXRpbmdfMQkAAGcAAAACBQAAABBhc3NldFJhdGluZ1ZhbHVlBQAAABNhc3NldFJhdGluZ1RyZXNob2xkAQAAABxpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5V2VpZ2h0AAAAAQAAAAdhc3NldElkBAAAAA5hc3NldFdlaWdodEtleQIAAAALYXNzZXRXZWlnaHQEAAAAEGFzc2V0V2VpZ2h0VmFsdWUJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MFAAAADmFzc2V0V2VpZ2h0S2V5BAAAABNhc3NldFdlaWdodFRyZXNob2xkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzAgAAAAx0aWNrZXJXZWlnaHQJAABnAAAAAgUAAAAQYXNzZXRXZWlnaHRWYWx1ZQUAAAATYXNzZXRXZWlnaHRUcmVzaG9sZAEAAAAbaXNBc3NldFVwZGF0ZUFsbG93ZWRCeVZvdGVzAAAAAQAAAAdhc3NldElkBAAAAA1hc3NldFZvdGVzS2V5AgAAAAphc3NldFZvdGVzBAAAAA9hc3NldFZvdGVzVmFsdWUJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MFAAAADWFzc2V0Vm90ZXNLZXkEAAAAEmFzc2V0Vm90ZXNUcmVzaG9sZAkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwIAAAALdGlja2VyVm90ZXMJAABnAAAAAgUAAAAPYXNzZXRWb3Rlc1ZhbHVlBQAAABJhc3NldFZvdGVzVHJlc2hvbGQBAAAAF2lzVXBkYXRlQWxsb3dlZEJ5UmF0aW5nAAAAAQAAAAdhc3NldElkAwMJAQAAABxpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5UmF0aW5nAAAAAQUAAAAHYXNzZXRJZAkBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlXZWlnaHQAAAABBQAAAAdhc3NldElkBwkBAAAAG2lzQXNzZXRVcGRhdGVBbGxvd2VkQnlWb3RlcwAAAAEFAAAAB2Fzc2V0SWQHAQAAACBnZXRBc3NldElzc3VlckFkZHJlc3NGcm9tQXNzZXRJZAAAAAEAAAAHYXNzZXRJZAkABCUAAAABCAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEJAAJZAAAAAQUAAAAHYXNzZXRJZAUAAAAVbm9uRXhpc3RlbnRBc3NldEVycm9yAAAABmlzc3VlcgEAAAAKZ2V0UGF5bWVudAAAAAEAAAABaQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCAUAAAABaQAAAAdwYXltZW50BQAAAA5ub1BheW1lbnRFcnJvcgEAAAAQaXNQYXltZW50SW5XYXZlcwAAAAEAAAABaQQAAAAHcGF5bWVudAkBAAAACmdldFBheW1lbnQAAAABBQAAAAFpAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAYHAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACAAAAAWkAAAAPcmVxdWlyZWRQYXltZW50BAAAAAdwYXltZW50CQEAAAAKZ2V0UGF5bWVudAAAAAEFAAAAAWkDCQAAZwAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAPcmVxdWlyZWRQYXltZW50BgcBAAAAE2lzQ2FsbGVyQXNzZXRJc3N1ZXIAAAACAAAAAWkAAAAHYXNzZXRJZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABFhc3NldElzc3VlckFkcmVzcwkBAAAAIGdldEFzc2V0SXNzdWVyQWRkcmVzc0Zyb21Bc3NldElkAAAAAQUAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAARYXNzZXRJc3N1ZXJBZHJlc3MGBwAAAAMAAAABaQEAAAAMdXBkYXRlVGlja2VyAAAAAgAAAAdhc3NldElkAAAABnRpY2tlcgQAAAAPaXNzdWVyVGlja2VyS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1pc3N1ZXJUaWNrZXJfAgAAAAE8BQAAAAdhc3NldElkAgAAAAE+BAAAAAxpc1RpY2tlckZyZWUEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAcdGlja2VyQ2F0YWxvZ3VlT3JhY2xlQWRkcmVzcwUAAAAGdGlja2VyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXQFAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAF0BQAAAAckbWF0Y2gwBgkBAAAABXRocm93AAAAAAMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAABF0aWNrZXJVcGRhdGVQcmljZQMJAQAAABNpc0NhbGxlckFzc2V0SXNzdWVyAAAAAgUAAAABaQUAAAAHYXNzZXRJZAMJAQAAABdpc1VwZGF0ZUFsbG93ZWRCeVJhdGluZwAAAAEFAAAAB2Fzc2V0SWQDBQAAAAxpc1RpY2tlckZyZWUDCQEAAAANaXNWYWxpZFRpY2tlcgAAAAEFAAAABnRpY2tlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPaXNzdWVyVGlja2VyS2V5BQAAAAZ0aWNrZXIFAAAAA25pbAkAAAIAAAABBQAAACB0aWNrZXJWYWxpZGF0aW9uV3JvbmdGb3JtYXRFcnJvcgkAAAIAAAABBQAAACJ0aWNrZXJWYWxpZGF0aW9uVGlja2VySXNFeGlzdEVycm9yCQAAAgAAAAEFAAAAJHRpY2tlclZhbGlkYXRpb25Ob3RFbm91Z2hSYXRpbmdFcnJvcgkAAAIAAAABBQAAABdpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcgkAAAIAAAABBQAAABVub3RFbm91Z2hQYXltZW50RXJyb3IJAAACAAAAAQUAAAAZbm90U3VwcG9ydGVkQ3VycmVuY3lFcnJvcgAAAAFpAQAAABF1cGRhdGVEZXNjcmlwdGlvbgAAAAIAAAAHYXNzZXRJZAAAAAtkZXNjcmlwdGlvbgQAAAAUaXNzdWVyRGVzY3JpcHRpb25LZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEmlzc3VlckRlc2NyaXB0aW9uXwIAAAABPAUAAAAHYXNzZXRJZAIAAAABPgMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAABZkZXNjcmlwdGlvblVwZGF0ZVByaWNlAwkBAAAAE2lzQ2FsbGVyQXNzZXRJc3N1ZXIAAAACBQAAAAFpBQAAAAdhc3NldElkCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABRpc3N1ZXJEZXNjcmlwdGlvbktleQUAAAALZGVzY3JpcHRpb24FAAAAA25pbAkAAAIAAAABBQAAABdpc3N1ZXJBY2Nlc3NEZW5pZWRFcnJvcgkAAAIAAAABBQAAABVub3RFbm91Z2hQYXltZW50RXJyb3IJAAACAAAAAQUAAAAZbm90U3VwcG9ydGVkQ3VycmVuY3lFcnJvcgAAAAFpAQAAAAp1cGRhdGVMaW5rAAAAAgAAAAdhc3NldElkAAAABGxpbmsEAAAADWlzc3VlckxpbmtLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC2lzc3VlckxpbmtfAgAAAAE8BQAAAAdhc3NldElkAgAAAAE+AwkBAAAAEGlzUGF5bWVudEluV2F2ZXMAAAABBQAAAAFpAwkBAAAAD2lzRW5vdWdoUGF5bWVudAAAAAIFAAAAAWkFAAAAD2xpbmtVcGRhdGVQcmljZQMJAQAAABNpc0NhbGxlckFzc2V0SXNzdWVyAAAAAgUAAAABaQUAAAAHYXNzZXRJZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAANaXNzdWVyTGlua0tleQUAAAAEbGluawUAAAADbmlsCQAAAgAAAAEFAAAAF2lzc3VlckFjY2Vzc0RlbmllZEVycm9yCQAAAgAAAAEFAAAAFW5vdEVub3VnaFBheW1lbnRFcnJvcgkAAAIAAAABBQAAABlub3RTdXBwb3J0ZWRDdXJyZW5jeUVycm9yAAAAALjUxA0=", "chainId": 84, "height": 667152, "spentComplexity": 0 } View: original | compacted Prev: 72S48YsSEKC7urFci1L8py3koXBs3DudgdUdt49PVyx6 Next: 88XNecS8Q7qnDkoPt9EdUPgPJ4HhMAGqYP9TD8zBm5QM Diff:
OldNewDifferences
176176 }
177177
178178
179-func debug (i,assetId) = {
180- let callerAddress = toBase58String(i.caller.bytes)
181- let assetIssuerAdress = getAssetIssuerAddressFromAssetId(assetId)
182- let result = ((callerAddress + " ") + assetIssuerAdress)
183- throw(result)
184- }
185-
186-
187179 @Callable(i)
188180 func updateTicker (assetId,ticker) = {
189181 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
190- debug(i, assetId)
182+ let isTickerFree = match getString(tickerCatalogueOracleAddress, ticker) {
183+ case t: String =>
184+ false
185+ case t: Unit =>
186+ true
187+ case _ =>
188+ throw()
189+ }
190+ if (isPaymentInWaves(i))
191+ then if (isEnoughPayment(i, tickerUpdatePrice))
192+ then if (isCallerAssetIssuer(i, assetId))
193+ then if (isUpdateAllowedByRating(assetId))
194+ then if (isTickerFree)
195+ then if (isValidTicker(ticker))
196+ then WriteSet([DataEntry(issuerTickerKey, ticker)])
197+ else throw(tickerValidationWrongFormatError)
198+ else throw(tickerValidationTickerIsExistError)
199+ else throw(tickerValidationNotEnoughRatingError)
200+ else throw(issuerAccessDeniedError)
201+ else throw(notEnoughPaymentError)
202+ else throw(notSupportedCurrencyError)
191203 }
192204
193205
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wvs = 100000000
55
66 let notSupportedCurrencyError = "<notSupportedCurrencyError>"
77
88 let issuerAccessDeniedError = "<issuerAccessDeniedError>"
99
1010 let notEnoughPaymentError = "<notEnoughPaymentError>"
1111
1212 let tickerValidationNotEnoughRatingError = "<tickerValidationNotEnoughRatingError>"
1313
1414 let tickerValidationTickerIsExistError = "<tickerValidationTickerIsExistError>"
1515
1616 let tickerValidationWrongFormatError = "<tickerValidationWrongFormatError>"
1717
1818 let nonExistentAssetError = "<nonExistentAssetError>"
1919
2020 let noPaymentError = "<noPaymentError>"
2121
2222 let descriptionUpdatePrice = (1 * wvs)
2323
2424 let linkUpdatePrice = (1 * wvs)
2525
2626 let tickerUpdatePrice = (2 * wvs)
2727
2828 let tickerMinLength = 1
2929
3030 let tickerMaxLength = 6
3131
3232 let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
3333
3434 let tickerCatalogueOracleAddress = addressFromStringValue("3MxHxW5VWq4KrWcbhFfxKrafXm4mL6rZHfj")
3535
3636 let tokenRatingOracleAddress = addressFromStringValue("3NADqHoLMbMTfXdP2TeBBSx5mQXePVj3KZm")
3737
3838 func getIntegerFromAccount (accountAddress,key) = match getInteger(accountAddress, key) {
3939 case i: Int =>
4040 i
4141 case _ =>
4242 0
4343 }
4444
4545
4646 func isSubstrExist (str,substr) = match indexOf(str, substr) {
4747 case index: Int =>
4848 true
4949 case index: Unit =>
5050 false
5151 case _ =>
5252 throw()
5353 }
5454
5555
5656 func isValidTicker (ticker) = {
5757 let tickerLetters = split(ticker, "")
5858 let tickerLength = size(tickerLetters)
5959 let isLetter1Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[0])
6060 let isLetter2Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[1])
6161 let isLetter3Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[2])
6262 let isLetter4Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[3])
6363 let isLetter5Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[4])
6464 let isLetter6Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[5])
6565 if ((ticker != ""))
6666 then if (if ((tickerLength >= tickerMinLength))
6767 then (tickerMaxLength >= tickerLength)
6868 else false)
6969 then if ((1 == tickerLength))
7070 then isLetter1Valid
7171 else if ((2 == tickerLength))
7272 then if (isLetter1Valid)
7373 then isLetter2Valid
7474 else false
7575 else if ((3 == tickerLength))
7676 then if (if (isLetter1Valid)
7777 then isLetter2Valid
7878 else false)
7979 then isLetter3Valid
8080 else false
8181 else if ((4 == tickerLength))
8282 then if (if (if (isLetter1Valid)
8383 then isLetter2Valid
8484 else false)
8585 then isLetter3Valid
8686 else false)
8787 then isLetter4Valid
8888 else false
8989 else if ((5 == tickerLength))
9090 then if (if (if (if (isLetter1Valid)
9191 then isLetter2Valid
9292 else false)
9393 then isLetter3Valid
9494 else false)
9595 then isLetter4Valid
9696 else false)
9797 then isLetter5Valid
9898 else false
9999 else if ((6 == tickerLength))
100100 then if (if (if (if (if (isLetter1Valid)
101101 then isLetter2Valid
102102 else false)
103103 then isLetter3Valid
104104 else false)
105105 then isLetter4Valid
106106 else false)
107107 then isLetter5Valid
108108 else false)
109109 then isLetter6Valid
110110 else false
111111 else false
112112 else false
113113 else false
114114 }
115115
116116
117117 func isAssetUpdateAllowedByRating (assetId) = {
118118 let assetRatingKey = (("assetRating_" + assetId) + "_1")
119119 let assetRatingValue = getIntegerFromAccount(tokenRatingOracleAddress, assetRatingKey)
120120 let assetRatingTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerRating_1")
121121 (assetRatingValue >= assetRatingTreshold)
122122 }
123123
124124
125125 func isAssetUpdateAllowedByWeight (assetId) = {
126126 let assetWeightKey = "assetWeight"
127127 let assetWeightValue = getIntegerFromAccount(tokenRatingOracleAddress, assetWeightKey)
128128 let assetWeightTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerWeight")
129129 (assetWeightValue >= assetWeightTreshold)
130130 }
131131
132132
133133 func isAssetUpdateAllowedByVotes (assetId) = {
134134 let assetVotesKey = "assetVotes"
135135 let assetVotesValue = getIntegerFromAccount(tokenRatingOracleAddress, assetVotesKey)
136136 let assetVotesTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerVotes")
137137 (assetVotesValue >= assetVotesTreshold)
138138 }
139139
140140
141141 func isUpdateAllowedByRating (assetId) = if (if (isAssetUpdateAllowedByRating(assetId))
142142 then isAssetUpdateAllowedByWeight(assetId)
143143 else false)
144144 then isAssetUpdateAllowedByVotes(assetId)
145145 else false
146146
147147
148148 func getAssetIssuerAddressFromAssetId (assetId) = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), nonExistentAssetError).issuer)
149149
150150
151151 func getPayment (i) = valueOrErrorMessage(i.payment, noPaymentError)
152152
153153
154154 func isPaymentInWaves (i) = {
155155 let payment = getPayment(i)
156156 if (!(isDefined(payment.assetId)))
157157 then true
158158 else false
159159 }
160160
161161
162162 func isEnoughPayment (i,requiredPayment) = {
163163 let payment = getPayment(i)
164164 if ((payment.amount >= requiredPayment))
165165 then true
166166 else false
167167 }
168168
169169
170170 func isCallerAssetIssuer (i,assetId) = {
171171 let callerAddress = toBase58String(i.caller.bytes)
172172 let assetIssuerAdress = getAssetIssuerAddressFromAssetId(assetId)
173173 if ((callerAddress == assetIssuerAdress))
174174 then true
175175 else false
176176 }
177177
178178
179-func debug (i,assetId) = {
180- let callerAddress = toBase58String(i.caller.bytes)
181- let assetIssuerAdress = getAssetIssuerAddressFromAssetId(assetId)
182- let result = ((callerAddress + " ") + assetIssuerAdress)
183- throw(result)
184- }
185-
186-
187179 @Callable(i)
188180 func updateTicker (assetId,ticker) = {
189181 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
190- debug(i, assetId)
182+ let isTickerFree = match getString(tickerCatalogueOracleAddress, ticker) {
183+ case t: String =>
184+ false
185+ case t: Unit =>
186+ true
187+ case _ =>
188+ throw()
189+ }
190+ if (isPaymentInWaves(i))
191+ then if (isEnoughPayment(i, tickerUpdatePrice))
192+ then if (isCallerAssetIssuer(i, assetId))
193+ then if (isUpdateAllowedByRating(assetId))
194+ then if (isTickerFree)
195+ then if (isValidTicker(ticker))
196+ then WriteSet([DataEntry(issuerTickerKey, ticker)])
197+ else throw(tickerValidationWrongFormatError)
198+ else throw(tickerValidationTickerIsExistError)
199+ else throw(tickerValidationNotEnoughRatingError)
200+ else throw(issuerAccessDeniedError)
201+ else throw(notEnoughPaymentError)
202+ else throw(notSupportedCurrencyError)
191203 }
192204
193205
194206
195207 @Callable(i)
196208 func updateDescription (assetId,description) = {
197209 let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
198210 if (isPaymentInWaves(i))
199211 then if (isEnoughPayment(i, descriptionUpdatePrice))
200212 then if (isCallerAssetIssuer(i, assetId))
201213 then WriteSet([DataEntry(issuerDescriptionKey, description)])
202214 else throw(issuerAccessDeniedError)
203215 else throw(notEnoughPaymentError)
204216 else throw(notSupportedCurrencyError)
205217 }
206218
207219
208220
209221 @Callable(i)
210222 func updateLink (assetId,link) = {
211223 let issuerLinkKey = ((("issuerLink_" + "<") + assetId) + ">")
212224 if (isPaymentInWaves(i))
213225 then if (isEnoughPayment(i, linkUpdatePrice))
214226 then if (isCallerAssetIssuer(i, assetId))
215227 then WriteSet([DataEntry(issuerLinkKey, link)])
216228 else throw(issuerAccessDeniedError)
217229 else throw(notEnoughPaymentError)
218230 else throw(notSupportedCurrencyError)
219231 }
220232
221233

github/deemru/w8io/873ac7e 
49.78 ms