tx · 6Deb8KFBbzLsdtxsxPZg79pS565YL323QVjJPhmn5V1W

3MvTtCYbWDMVJJc6e1rTYPRzh6JBnYkiBZ8:  -0.05000000 Waves

2019.09.06 13:56 [664098] smart account 3MvTtCYbWDMVJJc6e1rTYPRzh6JBnYkiBZ8 > SELF 0.00000000 Waves

{ "type": 13, "id": "6Deb8KFBbzLsdtxsxPZg79pS565YL323QVjJPhmn5V1W", "fee": 5000000, "feeAssetId": null, "timestamp": 1567767410325, "version": 1, "sender": "3MvTtCYbWDMVJJc6e1rTYPRzh6JBnYkiBZ8", "senderPublicKey": "Dm9NvzmfYXhfemNB9kmWcSzVk5Ni7puk7qLGm2FZryDS", "proofs": [ "2NMAigZebyhUX2eWvWbgKzwQFaTDWLi7iDAjMkqFyiLHYT9LSFYzeoTk44JzSFUhrc7XV5JfE6cnd7crsFimeefP" ], "script": "base64:AAIDAAAAAAAAAAAAAAAYAAAAAAN3dnMAAAAAAAX14QAAAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3ICAAAAVyJ7Im5hbWUiOiAibm90U3VwcG9ydGVkQ3VycmVuY3kiLCAibWVzc2FnZSI6ICJUaGUgc2VydmljZSBjYW4gb25seSBiZSBwYWlkIGluIHdhdmVzLiJ9IgAAAAAXaXNzdWVyQWNjZXNzUmlnaHRzRXJyb3ICAAAAXCJ7Im5hbWUiOiAiaXNzdWVyQWNjZXNzUmlnaHRzIiwgIm1lc3NhZ2UiOiAiT25seSBhc3NldCBpc3N1ZXIgY2FuIGFkZC91cGRhdGUgaW5mb3JtYXRpb24uIn0iAQAAABVub3RFbm91Z2hQYXltZW50RXJyb3IAAAACAAAABm9wdGlvbgAAAA9yZXF1aXJlZFBheW1lbnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABJInsibmFtZSI6ICJpc3N1ZXJBY2Nlc3NSaWdodHMiLCAibWVzc2FnZSI6ICJOb3QgZW5vdWdoIHBheW1lbnQgZm9yIEFzc2V0IAUAAAAGb3B0aW9uAgAAACB0aWNrZXIgdXBkYXRlIHNlcnZpY2UuIFJlcXVpcmVkIAkAAaQAAAABBQAAAA9yZXF1aXJlZFBheW1lbnQCAAAACiB3YXZlcy4ifSIAAAAAFmRlc2NyaXB0aW9uVXBkYXRlUHJpY2UJAABoAAAAAgAAAAAAAAAAAQUAAAADd3ZzAAAAAA9saW5rVXBkYXRlUHJpY2UJAABoAAAAAgAAAAAAAAAAAQUAAAADd3ZzAAAAABF0aWNrZXJVcGRhdGVQcmljZQkAAGgAAAACAAAAAAAAAAACBQAAAAN3dnMAAAAAD3RpY2tlck1pbkxlbmd0aAAAAAAAAAAAAQAAAAAPdGlja2VyTWF4TGVuZ3RoAAAAAAAAAAAGAAAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwIAAAAaQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoAAAAAHHRpY2tlckNhdGFsb2d1ZU9yYWNsZUFkZHJlc3MJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQIAAAAjM014SHhXNVZXcTRLcldjYmhGZnhLcmFmWG00bUw2clpIZmoAAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABAgAAACMzTkFEcUhvTE1iTVRmWGRQMlRlQkJTeDVtUVhlUFZqM0tabQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgAAAA5hY2NvdW50QWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAOYWNjb3VudEFkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAAAAAAAAAAAAAQAAAA1pc1N1YnN0ckV4aXN0AAAAAgAAAANzdHIAAAAGc3Vic3RyBAAAAAckbWF0Y2gwCQAEswAAAAIFAAAAA3N0cgUAAAAGc3Vic3RyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABWluZGV4BQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFaW5kZXgFAAAAByRtYXRjaDAHCQEAAAAFdGhyb3cAAAAAAQAAAA1pc1ZhbGlkVGlja2VyAAAAAQAAAAZ0aWNrZXIEAAAADXRpY2tlckxldHRlcnMJAAS1AAAAAgUAAAAGdGlja2VyAgAAAAAEAAAADHRpY2tlckxlbmd0aAkAAZAAAAABBQAAAA10aWNrZXJMZXR0ZXJzBAAAAA5pc0xldHRlcjFWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAABAAAAA5pc0xldHRlcjJWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAABBAAAAA5pc0xldHRlcjNWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAACBAAAAA5pc0xldHRlcjRWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAADBAAAAA5pc0xldHRlcjVWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAEBAAAAA5pc0xldHRlcjZWYWxpZAkBAAAADWlzU3Vic3RyRXhpc3QAAAACBQAAABR0aWNrZXJBbGxvd2VkTGV0dGVycwkAAZEAAAACBQAAAA10aWNrZXJMZXR0ZXJzAAAAAAAAAAAFAwkBAAAAAiE9AAAAAgUAAAAGdGlja2VyAgAAAAADAwkAAGcAAAACBQAAAAx0aWNrZXJMZW5ndGgFAAAAD3RpY2tlck1pbkxlbmd0aAkAAGcAAAACBQAAAA90aWNrZXJNYXhMZW5ndGgFAAAADHRpY2tlckxlbmd0aAcDCQAAAAAAAAIAAAAAAAAAAAEFAAAADHRpY2tlckxlbmd0aAUAAAAOaXNMZXR0ZXIxVmFsaWQDCQAAAAAAAAIAAAAAAAAAAAIFAAAADHRpY2tlckxlbmd0aAMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAMFAAAADHRpY2tlckxlbmd0aAMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAQFAAAADHRpY2tlckxlbmd0aAMDAwUAAAAOaXNMZXR0ZXIxVmFsaWQFAAAADmlzTGV0dGVyMlZhbGlkBwUAAAAOaXNMZXR0ZXIzVmFsaWQHBQAAAA5pc0xldHRlcjRWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAUFAAAADHRpY2tlckxlbmd0aAMDAwMFAAAADmlzTGV0dGVyMVZhbGlkBQAAAA5pc0xldHRlcjJWYWxpZAcFAAAADmlzTGV0dGVyM1ZhbGlkBwUAAAAOaXNMZXR0ZXI0VmFsaWQHBQAAAA5pc0xldHRlcjVWYWxpZAcDCQAAAAAAAAIAAAAAAAAAAAYFAAAADHRpY2tlckxlbmd0aAMDAwMDBQAAAA5pc0xldHRlcjFWYWxpZAUAAAAOaXNMZXR0ZXIyVmFsaWQHBQAAAA5pc0xldHRlcjNWYWxpZAcFAAAADmlzTGV0dGVyNFZhbGlkBwUAAAAOaXNMZXR0ZXI1VmFsaWQHBQAAAA5pc0xldHRlcjZWYWxpZAcHBwcBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABAAAAB2Fzc2V0SWQEAAAADmFzc2V0UmF0aW5nS2V5CQABLAAAAAIJAAEsAAAAAgIAAAAMYXNzZXRSYXRpbmdfBQAAAAdhc3NldElkAgAAAAJfMQQAAAAQYXNzZXRSYXRpbmdWYWx1ZQkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwUAAAAOYXNzZXRSYXRpbmdLZXkEAAAAE2Fzc2V0UmF0aW5nVHJlc2hvbGQJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MCAAAADnRpY2tlclJhdGluZ18xCQAAZwAAAAIFAAAAEGFzc2V0UmF0aW5nVmFsdWUFAAAAE2Fzc2V0UmF0aW5nVHJlc2hvbGQBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlXZWlnaHQAAAABAAAAB2Fzc2V0SWQEAAAADmFzc2V0V2VpZ2h0S2V5AgAAAAthc3NldFdlaWdodAQAAAAQYXNzZXRXZWlnaHRWYWx1ZQkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwUAAAAOYXNzZXRXZWlnaHRLZXkEAAAAE2Fzc2V0V2VpZ2h0VHJlc2hvbGQJAQAAABVnZXRJbnRlZ2VyRnJvbUFjY291bnQAAAACBQAAABh0b2tlblJhdGluZ09yYWNsZUFkZHJlc3MCAAAADHRpY2tlcldlaWdodAkAAGcAAAACBQAAABBhc3NldFdlaWdodFZhbHVlBQAAABNhc3NldFdlaWdodFRyZXNob2xkAQAAABtpc0Fzc2V0VXBkYXRlQWxsb3dlZEJ5Vm90ZXMAAAABAAAAB2Fzc2V0SWQEAAAADWFzc2V0Vm90ZXNLZXkCAAAACmFzc2V0Vm90ZXMEAAAAD2Fzc2V0Vm90ZXNWYWx1ZQkBAAAAFWdldEludGVnZXJGcm9tQWNjb3VudAAAAAIFAAAAGHRva2VuUmF0aW5nT3JhY2xlQWRkcmVzcwUAAAANYXNzZXRWb3Rlc0tleQQAAAASYXNzZXRWb3Rlc1RyZXNob2xkCQEAAAAVZ2V0SW50ZWdlckZyb21BY2NvdW50AAAAAgUAAAAYdG9rZW5SYXRpbmdPcmFjbGVBZGRyZXNzAgAAAAt0aWNrZXJWb3RlcwkAAGcAAAACBQAAAA9hc3NldFZvdGVzVmFsdWUFAAAAEmFzc2V0Vm90ZXNUcmVzaG9sZAEAAAAXaXNVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABAAAAB2Fzc2V0SWQDAwkBAAAAHGlzQXNzZXRVcGRhdGVBbGxvd2VkQnlSYXRpbmcAAAABBQAAAAdhc3NldElkCQEAAAAcaXNBc3NldFVwZGF0ZUFsbG93ZWRCeVdlaWdodAAAAAEFAAAAB2Fzc2V0SWQHCQEAAAAbaXNBc3NldFVwZGF0ZUFsbG93ZWRCeVZvdGVzAAAAAQUAAAAHYXNzZXRJZAcBAAAAIGdldEFzc2V0SXNzdWVyQWRkcmVzc0Zyb21Bc3NldElkAAAAAQAAAAdhc3NldElkCQAEJQAAAAEICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAAdhc3NldElkAgAAACdlcnJvciM2LiB0aGVyZSBpcyBubyBhc3NldCB3aXRoIHN1Y2ggaWQAAAAGaXNzdWVyAQAAAApnZXRQYXltZW50AAAAAQAAAAFpCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIIBQAAAAFpAAAAB3BheW1lbnQCAAAAKmVycm9yIzguIHRoZXJlIGlzIG5vIHBheW1lbnQgaW4gaW52b2NhdGlvbgEAAAAQaXNQYXltZW50SW5XYXZlcwAAAAEAAAABaQQAAAAHcGF5bWVudAkBAAAACmdldFBheW1lbnQAAAABBQAAAAFpAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAYHAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACAAAAAWkAAAAPcmVxdWlyZWRQYXltZW50BAAAAAdwYXltZW50CQEAAAAKZ2V0UGF5bWVudAAAAAEFAAAAAWkDCQAAZwAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAPcmVxdWlyZWRQYXltZW50BgcBAAAAE2lzQ2FsbGVyQXNzZXRJc3N1ZXIAAAACAAAAAWkAAAAHYXNzZXRJZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAABFhc3NldElzc3VlckFkcmVzcwkBAAAAIGdldEFzc2V0SXNzdWVyQWRkcmVzc0Zyb21Bc3NldElkAAAAAQUAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAARYXNzZXRJc3N1ZXJBZHJlc3MGBwAAAAMAAAABaQEAAAAMdXBkYXRlVGlja2VyAAAAAgAAAAdhc3NldElkAAAABnRpY2tlcgQAAAAPaXNzdWVyVGlja2VyS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1pc3N1ZXJUaWNrZXJfAgAAAAE8BQAAAAdhc3NldElkAgAAAAE+BAAAAAxpc1RpY2tlckZyZWUEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAcdGlja2VyQ2F0YWxvZ3VlT3JhY2xlQWRkcmVzcwUAAAAGdGlja2VyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXQFAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAF0BQAAAAckbWF0Y2gwBgkBAAAABXRocm93AAAAAAMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAABF0aWNrZXJVcGRhdGVQcmljZQMJAQAAABNpc0NhbGxlckFzc2V0SXNzdWVyAAAAAgUAAAABaQUAAAAHYXNzZXRJZAMJAQAAABdpc1VwZGF0ZUFsbG93ZWRCeVJhdGluZwAAAAEFAAAAB2Fzc2V0SWQDBQAAAAxpc1RpY2tlckZyZWUDCQEAAAANaXNWYWxpZFRpY2tlcgAAAAEFAAAABnRpY2tlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPaXNzdWVyVGlja2VyS2V5BQAAAAZ0aWNrZXIFAAAAA25pbAkAAAIAAAABAgAAAD9lcnJvciM1LiBUaWNrZXIgc2hvdWxkIGNvbnNpc3Qgb2YgMS02IGNhcGl0YWwgTGF0aW4gY2hhcmFjdGVycy4JAAACAAAAAQIAAAAwZXJyb3IjNC4gQXNzZXQgd2l0aCBzdWNoIHRpY2tlciBpcyBhbHJlYWR5IGV4aXN0CQAAAgAAAAECAAAAGmVycm9yIzMuIFRvbyBsaXR0bGUgcmF0aW5nCQAAAgAAAAECAAAAMmVycm9yIzIuIE9ubHkgYXNzZXQgaXNzdWVyIGNhbiB1cGRhdGUgYXNzZXQgdGlja2VyCQAAAgAAAAECAAAAPmVycm9yIzIuIEluc3VmZmljaWVudCBwYXltZW50IGZvciBhc3NldCB0aWNrZXIgdXBkYXRlIHNlcnZpY2UuCQAAAgAAAAEFAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3IAAAABaQEAAAARdXBkYXRlRGVzY3JpcHRpb24AAAACAAAAB2Fzc2V0SWQAAAALZGVzY3JpcHRpb24EAAAAFGlzc3VlckRlc2NyaXB0aW9uS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABJpc3N1ZXJEZXNjcmlwdGlvbl8CAAAAATwFAAAAB2Fzc2V0SWQCAAAAAT4DCQEAAAAQaXNQYXltZW50SW5XYXZlcwAAAAEFAAAAAWkDCQEAAAAPaXNFbm91Z2hQYXltZW50AAAAAgUAAAABaQUAAAAWZGVzY3JpcHRpb25VcGRhdGVQcmljZQMJAQAAABNpc0NhbGxlckFzc2V0SXNzdWVyAAAAAgUAAAABaQUAAAAHYXNzZXRJZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAUaXNzdWVyRGVzY3JpcHRpb25LZXkFAAAAC2Rlc2NyaXB0aW9uBQAAAANuaWwJAAACAAAAAQIAAAA3ZXJyb3IjNi4gT25seSBhc3NldCBpc3N1ZXIgY2FuIHVwZGF0ZSBhc3NldCBkZXNjcmlwdGlvbgkAAAIAAAABAgAAAENlcnJvciM3LiBJbnN1ZmZpY2llbnQgcGF5bWVudCBmb3IgYXNzZXQgZGVzY3JpcHRpb24gdXBkYXRlIHNlcnZpY2UuCQAAAgAAAAEFAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3IAAAABaQEAAAAKdXBkYXRlTGluawAAAAIAAAAHYXNzZXRJZAAAAARsaW5rBAAAAA1pc3N1ZXJMaW5rS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtpc3N1ZXJMaW5rXwIAAAABPAUAAAAHYXNzZXRJZAIAAAABPgMJAQAAABBpc1BheW1lbnRJbldhdmVzAAAAAQUAAAABaQMJAQAAAA9pc0Vub3VnaFBheW1lbnQAAAACBQAAAAFpBQAAAA9saW5rVXBkYXRlUHJpY2UDCQEAAAATaXNDYWxsZXJBc3NldElzc3VlcgAAAAIFAAAAAWkFAAAAB2Fzc2V0SWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADWlzc3VlckxpbmtLZXkFAAAABGxpbmsFAAAAA25pbAkAAAIAAAABAgAAADBlcnJvciM2LiBPbmx5IGFzc2V0IGlzc3VlciBjYW4gdXBkYXRlIGFzc2V0IGxpbmsJAAACAAAAAQIAAAA8ZXJyb3IjNy4gSW5zdWZmaWNpZW50IHBheW1lbnQgZm9yIGFzc2V0IGxpbmsgdXBkYXRlIHNlcnZpY2UuCQAAAgAAAAEFAAAAGW5vdFN1cHBvcnRlZEN1cnJlbmN5RXJyb3IAAAAAMUn1YQ==", "chainId": 84, "height": 664098, "spentComplexity": 0 } View: original | compacted Prev: 75vfSfD3irh7nZD27qgT1U21DDQFw9EguZerkS2cRh9M Next: 9vjriXR9ya3CRb2n7crUV7iyyACiQKuxeaGYjeh3qWyZ Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let wvs = 100000000
55
6-let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
6+let notSupportedCurrencyError = "\"{\"name\": \"notSupportedCurrency\", \"message\": \"The service can only be paid in waves.\"}\""
77
8-let tickerExample = "BTC"
8+let issuerAccessRightsError = "\"{\"name\": \"issuerAccessRights\", \"message\": \"Only asset issuer can add/update information.\"}\""
99
10-let tickerMinLength = 1
10+func notEnoughPaymentError (option,requiredPayment) = (((("\"{\"name\": \"issuerAccessRights\", \"message\": \"Not enough payment for Asset " + option) + "ticker update service. Required ") + toString(requiredPayment)) + " waves.\"}\"")
1111
12-let tickerMaxLength = 6
1312
1413 let descriptionUpdatePrice = (1 * wvs)
1514
1615 let linkUpdatePrice = (1 * wvs)
1716
1817 let tickerUpdatePrice = (2 * wvs)
18+
19+let tickerMinLength = 1
20+
21+let tickerMaxLength = 6
22+
23+let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1924
2025 let tickerCatalogueOracleAddress = addressFromStringValue("3MxHxW5VWq4KrWcbhFfxKrafXm4mL6rZHfj")
2126
3742 case _ =>
3843 throw()
3944 }
40-
41-
42-func assetIdFromString (assetId) = if (if ((assetId == "WAVES"))
43- then true
44- else (assetId == ""))
45- then unit
46- else fromBase58String(assetId)
4745
4846
4947 func isValidTicker (ticker) = {
138136 else false
139137
140138
141-func getAssetIssuerFromAssetId (assetId) = match assetInfo(fromBase58String(assetId)) {
142- case a: Asset =>
143- a
144- case _ =>
145- unit
146-}
139+func getAssetIssuerAddressFromAssetId (assetId) = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
140+
141+
142+func getPayment (i) = valueOrErrorMessage(i.payment, "error#8. there is no payment in invocation")
143+
144+
145+func isPaymentInWaves (i) = {
146+ let payment = getPayment(i)
147+ if (!(isDefined(payment.assetId)))
148+ then true
149+ else false
150+ }
151+
152+
153+func isEnoughPayment (i,requiredPayment) = {
154+ let payment = getPayment(i)
155+ if ((payment.amount >= requiredPayment))
156+ then true
157+ else false
158+ }
159+
160+
161+func isCallerAssetIssuer (i,assetId) = {
162+ let callerAddress = toBase58String(i.caller.bytes)
163+ let assetIssuerAdress = getAssetIssuerAddressFromAssetId(assetId)
164+ if ((callerAddress == assetIssuerAdress))
165+ then true
166+ else false
167+ }
147168
148169
149170 @Callable(i)
150171 func updateTicker (assetId,ticker) = {
151- let payment = extract(i.payment)
152- let callerAddress = toBase58String(i.caller.bytes)
153172 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
154- let tickerFromOracle = getString(tickerCatalogueOracleAddress, ticker)
155- let assetIssuerAdress = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
156- if (!(isDefined(payment.assetId)))
157- then if ((payment.amount >= tickerUpdatePrice))
158- then if ((callerAddress == assetIssuerAdress))
173+ let isTickerFree = match getString(tickerCatalogueOracleAddress, ticker) {
174+ case t: String =>
175+ false
176+ case t: Unit =>
177+ true
178+ case _ =>
179+ throw()
180+ }
181+ if (isPaymentInWaves(i))
182+ then if (isEnoughPayment(i, tickerUpdatePrice))
183+ then if (isCallerAssetIssuer(i, assetId))
159184 then if (isUpdateAllowedByRating(assetId))
160- then if ((tickerFromOracle == unit))
185+ then if (isTickerFree)
161186 then if (isValidTicker(ticker))
162187 then WriteSet([DataEntry(issuerTickerKey, ticker)])
163188 else throw("error#5. Ticker should consist of 1-6 capital Latin characters.")
165190 else throw("error#3. Too little rating")
166191 else throw("error#2. Only asset issuer can update asset ticker")
167192 else throw("error#2. Insufficient payment for asset ticker update service.")
168- else throw("error#1. The service can only be paid in waves")
193+ else throw(notSupportedCurrencyError)
169194 }
170195
171196
172197
173198 @Callable(i)
174199 func updateDescription (assetId,description) = {
175- let payment = extract(i.payment)
176- let callerAddress = toBase58String(i.caller.bytes)
177200 let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
178- let assetIssuerAdress = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
179- if (!(isDefined(payment.assetId)))
180- then if ((payment.amount >= descriptionUpdatePrice))
181- then if ((callerAddress == assetIssuerAdress))
201+ if (isPaymentInWaves(i))
202+ then if (isEnoughPayment(i, descriptionUpdatePrice))
203+ then if (isCallerAssetIssuer(i, assetId))
182204 then WriteSet([DataEntry(issuerDescriptionKey, description)])
183205 else throw("error#6. Only asset issuer can update asset description")
184206 else throw("error#7. Insufficient payment for asset description update service.")
185- else throw("error#1. The service can only be paid in waves")
207+ else throw(notSupportedCurrencyError)
186208 }
187209
188210
189211
190212 @Callable(i)
191213 func updateLink (assetId,link) = {
192- let payment = extract(i.payment)
193- let callerAddress = toBase58String(i.caller.bytes)
194214 let issuerLinkKey = ((("issuerLink_" + "<") + assetId) + ">")
195- let assetIssuerAdress = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
196- if (!(isDefined(payment.assetId)))
197- then if ((payment.amount >= linkUpdatePrice))
198- then if ((callerAddress == assetIssuerAdress))
215+ if (isPaymentInWaves(i))
216+ then if (isEnoughPayment(i, linkUpdatePrice))
217+ then if (isCallerAssetIssuer(i, assetId))
199218 then WriteSet([DataEntry(issuerLinkKey, link)])
200219 else throw("error#6. Only asset issuer can update asset link")
201220 else throw("error#7. Insufficient payment for asset link update service.")
202- else throw("error#1. The service can only be paid in waves")
221+ else throw(notSupportedCurrencyError)
203222 }
204223
205224
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wvs = 100000000
55
6-let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
6+let notSupportedCurrencyError = "\"{\"name\": \"notSupportedCurrency\", \"message\": \"The service can only be paid in waves.\"}\""
77
8-let tickerExample = "BTC"
8+let issuerAccessRightsError = "\"{\"name\": \"issuerAccessRights\", \"message\": \"Only asset issuer can add/update information.\"}\""
99
10-let tickerMinLength = 1
10+func notEnoughPaymentError (option,requiredPayment) = (((("\"{\"name\": \"issuerAccessRights\", \"message\": \"Not enough payment for Asset " + option) + "ticker update service. Required ") + toString(requiredPayment)) + " waves.\"}\"")
1111
12-let tickerMaxLength = 6
1312
1413 let descriptionUpdatePrice = (1 * wvs)
1514
1615 let linkUpdatePrice = (1 * wvs)
1716
1817 let tickerUpdatePrice = (2 * wvs)
18+
19+let tickerMinLength = 1
20+
21+let tickerMaxLength = 6
22+
23+let tickerAllowedLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1924
2025 let tickerCatalogueOracleAddress = addressFromStringValue("3MxHxW5VWq4KrWcbhFfxKrafXm4mL6rZHfj")
2126
2227 let tokenRatingOracleAddress = addressFromStringValue("3NADqHoLMbMTfXdP2TeBBSx5mQXePVj3KZm")
2328
2429 func getIntegerFromAccount (accountAddress,key) = match getInteger(accountAddress, key) {
2530 case i: Int =>
2631 i
2732 case _ =>
2833 0
2934 }
3035
3136
3237 func isSubstrExist (str,substr) = match indexOf(str, substr) {
3338 case index: Int =>
3439 true
3540 case index: Unit =>
3641 false
3742 case _ =>
3843 throw()
3944 }
40-
41-
42-func assetIdFromString (assetId) = if (if ((assetId == "WAVES"))
43- then true
44- else (assetId == ""))
45- then unit
46- else fromBase58String(assetId)
4745
4846
4947 func isValidTicker (ticker) = {
5048 let tickerLetters = split(ticker, "")
5149 let tickerLength = size(tickerLetters)
5250 let isLetter1Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[0])
5351 let isLetter2Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[1])
5452 let isLetter3Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[2])
5553 let isLetter4Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[3])
5654 let isLetter5Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[4])
5755 let isLetter6Valid = isSubstrExist(tickerAllowedLetters, tickerLetters[5])
5856 if ((ticker != ""))
5957 then if (if ((tickerLength >= tickerMinLength))
6058 then (tickerMaxLength >= tickerLength)
6159 else false)
6260 then if ((1 == tickerLength))
6361 then isLetter1Valid
6462 else if ((2 == tickerLength))
6563 then if (isLetter1Valid)
6664 then isLetter2Valid
6765 else false
6866 else if ((3 == tickerLength))
6967 then if (if (isLetter1Valid)
7068 then isLetter2Valid
7169 else false)
7270 then isLetter3Valid
7371 else false
7472 else if ((4 == tickerLength))
7573 then if (if (if (isLetter1Valid)
7674 then isLetter2Valid
7775 else false)
7876 then isLetter3Valid
7977 else false)
8078 then isLetter4Valid
8179 else false
8280 else if ((5 == tickerLength))
8381 then if (if (if (if (isLetter1Valid)
8482 then isLetter2Valid
8583 else false)
8684 then isLetter3Valid
8785 else false)
8886 then isLetter4Valid
8987 else false)
9088 then isLetter5Valid
9189 else false
9290 else if ((6 == tickerLength))
9391 then if (if (if (if (if (isLetter1Valid)
9492 then isLetter2Valid
9593 else false)
9694 then isLetter3Valid
9795 else false)
9896 then isLetter4Valid
9997 else false)
10098 then isLetter5Valid
10199 else false)
102100 then isLetter6Valid
103101 else false
104102 else false
105103 else false
106104 else false
107105 }
108106
109107
110108 func isAssetUpdateAllowedByRating (assetId) = {
111109 let assetRatingKey = (("assetRating_" + assetId) + "_1")
112110 let assetRatingValue = getIntegerFromAccount(tokenRatingOracleAddress, assetRatingKey)
113111 let assetRatingTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerRating_1")
114112 (assetRatingValue >= assetRatingTreshold)
115113 }
116114
117115
118116 func isAssetUpdateAllowedByWeight (assetId) = {
119117 let assetWeightKey = "assetWeight"
120118 let assetWeightValue = getIntegerFromAccount(tokenRatingOracleAddress, assetWeightKey)
121119 let assetWeightTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerWeight")
122120 (assetWeightValue >= assetWeightTreshold)
123121 }
124122
125123
126124 func isAssetUpdateAllowedByVotes (assetId) = {
127125 let assetVotesKey = "assetVotes"
128126 let assetVotesValue = getIntegerFromAccount(tokenRatingOracleAddress, assetVotesKey)
129127 let assetVotesTreshold = getIntegerFromAccount(tokenRatingOracleAddress, "tickerVotes")
130128 (assetVotesValue >= assetVotesTreshold)
131129 }
132130
133131
134132 func isUpdateAllowedByRating (assetId) = if (if (isAssetUpdateAllowedByRating(assetId))
135133 then isAssetUpdateAllowedByWeight(assetId)
136134 else false)
137135 then isAssetUpdateAllowedByVotes(assetId)
138136 else false
139137
140138
141-func getAssetIssuerFromAssetId (assetId) = match assetInfo(fromBase58String(assetId)) {
142- case a: Asset =>
143- a
144- case _ =>
145- unit
146-}
139+func getAssetIssuerAddressFromAssetId (assetId) = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
140+
141+
142+func getPayment (i) = valueOrErrorMessage(i.payment, "error#8. there is no payment in invocation")
143+
144+
145+func isPaymentInWaves (i) = {
146+ let payment = getPayment(i)
147+ if (!(isDefined(payment.assetId)))
148+ then true
149+ else false
150+ }
151+
152+
153+func isEnoughPayment (i,requiredPayment) = {
154+ let payment = getPayment(i)
155+ if ((payment.amount >= requiredPayment))
156+ then true
157+ else false
158+ }
159+
160+
161+func isCallerAssetIssuer (i,assetId) = {
162+ let callerAddress = toBase58String(i.caller.bytes)
163+ let assetIssuerAdress = getAssetIssuerAddressFromAssetId(assetId)
164+ if ((callerAddress == assetIssuerAdress))
165+ then true
166+ else false
167+ }
147168
148169
149170 @Callable(i)
150171 func updateTicker (assetId,ticker) = {
151- let payment = extract(i.payment)
152- let callerAddress = toBase58String(i.caller.bytes)
153172 let issuerTickerKey = ((("issuerTicker_" + "<") + assetId) + ">")
154- let tickerFromOracle = getString(tickerCatalogueOracleAddress, ticker)
155- let assetIssuerAdress = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
156- if (!(isDefined(payment.assetId)))
157- then if ((payment.amount >= tickerUpdatePrice))
158- then if ((callerAddress == assetIssuerAdress))
173+ let isTickerFree = match getString(tickerCatalogueOracleAddress, ticker) {
174+ case t: String =>
175+ false
176+ case t: Unit =>
177+ true
178+ case _ =>
179+ throw()
180+ }
181+ if (isPaymentInWaves(i))
182+ then if (isEnoughPayment(i, tickerUpdatePrice))
183+ then if (isCallerAssetIssuer(i, assetId))
159184 then if (isUpdateAllowedByRating(assetId))
160- then if ((tickerFromOracle == unit))
185+ then if (isTickerFree)
161186 then if (isValidTicker(ticker))
162187 then WriteSet([DataEntry(issuerTickerKey, ticker)])
163188 else throw("error#5. Ticker should consist of 1-6 capital Latin characters.")
164189 else throw("error#4. Asset with such ticker is already exist")
165190 else throw("error#3. Too little rating")
166191 else throw("error#2. Only asset issuer can update asset ticker")
167192 else throw("error#2. Insufficient payment for asset ticker update service.")
168- else throw("error#1. The service can only be paid in waves")
193+ else throw(notSupportedCurrencyError)
169194 }
170195
171196
172197
173198 @Callable(i)
174199 func updateDescription (assetId,description) = {
175- let payment = extract(i.payment)
176- let callerAddress = toBase58String(i.caller.bytes)
177200 let issuerDescriptionKey = ((("issuerDescription_" + "<") + assetId) + ">")
178- let assetIssuerAdress = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
179- if (!(isDefined(payment.assetId)))
180- then if ((payment.amount >= descriptionUpdatePrice))
181- then if ((callerAddress == assetIssuerAdress))
201+ if (isPaymentInWaves(i))
202+ then if (isEnoughPayment(i, descriptionUpdatePrice))
203+ then if (isCallerAssetIssuer(i, assetId))
182204 then WriteSet([DataEntry(issuerDescriptionKey, description)])
183205 else throw("error#6. Only asset issuer can update asset description")
184206 else throw("error#7. Insufficient payment for asset description update service.")
185- else throw("error#1. The service can only be paid in waves")
207+ else throw(notSupportedCurrencyError)
186208 }
187209
188210
189211
190212 @Callable(i)
191213 func updateLink (assetId,link) = {
192- let payment = extract(i.payment)
193- let callerAddress = toBase58String(i.caller.bytes)
194214 let issuerLinkKey = ((("issuerLink_" + "<") + assetId) + ">")
195- let assetIssuerAdress = toString(valueOrErrorMessage(assetInfo(fromBase58String(assetId)), "error#6. there is no asset with such id").issuer)
196- if (!(isDefined(payment.assetId)))
197- then if ((payment.amount >= linkUpdatePrice))
198- then if ((callerAddress == assetIssuerAdress))
215+ if (isPaymentInWaves(i))
216+ then if (isEnoughPayment(i, linkUpdatePrice))
217+ then if (isCallerAssetIssuer(i, assetId))
199218 then WriteSet([DataEntry(issuerLinkKey, link)])
200219 else throw("error#6. Only asset issuer can update asset link")
201220 else throw("error#7. Insufficient payment for asset link update service.")
202- else throw("error#1. The service can only be paid in waves")
221+ else throw(notSupportedCurrencyError)
203222 }
204223
205224

github/deemru/w8io/3ef1775 
59.05 ms