tx · 5er9NMmTEwvzNmd6GZ2v5oY1Yq9oaBkJE8FnCTazCjS3

3MsH95R1SdYUEkUTVjHvR8gLD8rXtgQ21Vj:  -0.01400000 Waves

2021.04.14 15:50 [1482136] smart account 3MsH95R1SdYUEkUTVjHvR8gLD8rXtgQ21Vj > SELF 0.00000000 Waves

{ "type": 13, "id": "5er9NMmTEwvzNmd6GZ2v5oY1Yq9oaBkJE8FnCTazCjS3", "fee": 1400000, "feeAssetId": null, "timestamp": 1618404650270, "version": 2, "chainId": 84, "sender": "3MsH95R1SdYUEkUTVjHvR8gLD8rXtgQ21Vj", "senderPublicKey": "GYeGBXmJUHrtkkJuLVJKCHtaCbkvj9nS4aVLqzdrbpZx", "proofs": [ "5hre7UvKu75F1ZX6AV1SC6FTeZLNUBDjpxCHSkBiQKjVxmmS8MqLtXuDC39nNc8RzDd9U1UvJmqF1veJHc4ehGSQ" ], "script": "base64:AAIEAAAAAAAAABoIAhIECgIIARIDCgEIEgMKAQgSBAoCCAESAAAAABgAAAAAB3ZlcnNpb24AAAAAAAAAAAEAAAAACXNlcGFyYXRvcgIAAAADX19fAAAAAAhkZWNpbWFscwkABEwAAAACAAAAAAAAAAABCQAETAAAAAIAAAAAAAAAAAoJAARMAAAAAgAAAAAAAAAAZAkABEwAAAACAAAAAAAAAAPoCQAETAAAAAIAAAAAAAAAJxAJAARMAAAAAgAAAAAAAAGGoAkABEwAAAACAAAAAAAAD0JACQAETAAAAAIAAAAAAACYloAJAARMAAAAAgAAAAAABfXhAAUAAAADbmlsAAAAAAZtYXhJbnQAf/////////8AAAAADmFkZHJQcml2aWxlZ2VzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABAgAAACMzTXlvamYxajdXMlM1WFNLZW1HYXFFcmNTWWdocUNnUTFncAAAAAAJYWRkclZhdWx0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABAgAAACMzTXV0VFZYaDdaMm05Q2Z6eDk4MkQ0bm03aDlZenIzUmE5YQAAAAAKbmliZWxBc3NldAEAAAAgcP9IF2W6SkWNPCPLY+UFRsgpz5KJ0Z3001ceSPgMnWkAAAAAFG5pYmVsQW1vdW50UGVyQmxvY2tzAAAAAOjUpRAAAAAAABFuaWJlbEdlbmVzaXNCbG9jawAAAAAAAAAAAAAAAAARbmliZWxIYXZsaW5nRGVsYXkAAAAAAAABhqAAAAAAFXNoYXJlZEtleU1haW5PcGVyYXRvcgIAAAANTUFJTl9PUEVSQVRPUgAAAAASc2hhcmVkS2V5UHJpdmlsZWdlAgAAAAlQUklWSUxFR0UAAAAAEHNoYXJlZFJlY2VpcHRUYWcCAAAAAVIAAAAAFGtleUZvcmdlc1RvdGFsV2VpZ2h0AgAAABNGT1JHRVNfVE9UQUxfV0VJR0hUAAAAABdrZXlGb3JnZVNldHRpbmdzRW5hYmxlZAIAAAALRlNfRU5BQkxFRF8AAAAAGGtleUZvcmdlU2V0dGluZ3NTdXBwbGllcwIAAAAMRlNfU1VQUExJRVNfAAAAABZrZXlGb3JnZVNldHRpbmdzV2VpZ2h0AgAAAApGU19XRUlHSFRfAQAAAAxpc1NhZmVTdHJpbmcAAAABAAAADHN0cmluZ1RvVGVzdAMJAAAAAAAAAgkBAAAACGNvbnRhaW5zAAAAAgUAAAAMc3RyaW5nVG9UZXN0BQAAAAlzZXBhcmF0b3IHCQAAAAAAAAIJAQAAAAhjb250YWlucwAAAAIFAAAADHN0cmluZ1RvVGVzdAIAAAABIAcHAQAAAA1pc1NhZmVJbnRlZ2VyAAAAAQAAAA1pbnRlZ2VyVG9UZXN0BAAAAAckbWF0Y2gwBQAAAA1pbnRlZ2VyVG9UZXN0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAACGlzU3RyaW5nBQAAAAckbWF0Y2gwBAAAAAckbWF0Y2gxCQAEtgAAAAEFAAAACGlzU3RyaW5nAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAAANJbnQEAAAACWlzSW50ZWdlcgUAAAAHJG1hdGNoMQMJAABnAAAAAgUAAAAJaXNJbnRlZ2VyAAAAAAAAAAAACQAAZwAAAAIFAAAABm1heEludAUAAAAJaXNJbnRlZ2VyBwcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAJaXNJbnRlZ2VyBQAAAAckbWF0Y2gwAwkAAGcAAAACBQAAAAlpc0ludGVnZXIAAAAAAAAAAAAJAABnAAAAAgUAAAAGbWF4SW50BQAAAAlpc0ludGVnZXIHBwEAAAANdG9TYWZlSW50ZWdlcgAAAAEAAAAPc3RyaW5nVG9Db252ZXJ0BAAAAA1wYXJzZWRJbnRlZ2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAS2AAAAAQUAAAAPc3RyaW5nVG9Db252ZXJ0AgAAABBOb3QgYSBzdHJpbmcgaW50AwkBAAAAAiE9AAAAAgkBAAAADWlzU2FmZUludGVnZXIAAAABBQAAAA1wYXJzZWRJbnRlZ2VyBgkAAAIAAAABAgAAAAhOb3Qgc2FmZQUAAAANcGFyc2VkSW50ZWdlcgEAAAAHaXNBc3NldAAAAAEAAAALYXNzZXRUb1Rlc3QEAAAAByRtYXRjaDAFAAAAC2Fzc2V0VG9UZXN0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAACGlzU3RyaW5nBQAAAAckbWF0Y2gwCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+wAAAABCQACWQAAAAEFAAAACGlzU3RyaW5nAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAxpc0J5dGVWZWN0b3IFAAAAByRtYXRjaDAJAQAAAAlpc0RlZmluZWQAAAABCQAD7AAAAAEFAAAADGlzQnl0ZVZlY3RvcgcBAAAAEmdldEZvcmdlQXNzZXRTdGF0ZQAAAAEAAAAMYXNzZXRUb0NoZWNrBAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAXa2V5Rm9yZ2VTZXR0aW5nc0VuYWJsZWQFAAAADGFzc2V0VG9DaGVjawMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAAJaXNCb29sZWFuBQAAAAckbWF0Y2gwAwkAAAAAAAACBQAAAAlpc0Jvb2xlYW4GAgAAAAdlbmFibGVkAgAAAAhkaXNhYmxlZAIAAAAObm90V2hpdGVsaXN0ZWQBAAAADGhhc1ByaXZpbGVnZQAAAAIAAAANY2FsbGVyQWRkcmVzcwAAAA1wcml2aWxlZ2VOYW1lAwkAAAAAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAA5hZGRyUHJpdmlsZWdlcwUAAAAVc2hhcmVkS2V5TWFpbk9wZXJhdG9yBQAAAA1jYWxsZXJBZGRyZXNzBgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAA5hZGRyUHJpdmlsZWdlcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAEnNoYXJlZEtleVByaXZpbGVnZQUAAAAJc2VwYXJhdG9yCQACWAAAAAEIBQAAAA1jYWxsZXJBZGRyZXNzAAAABWJ5dGVzBQAAAAlzZXBhcmF0b3IJAAJYAAAAAQgFAAAABHRoaXMAAAAFYnl0ZXMFAAAADXByaXZpbGVnZU5hbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAJaXNJbnRlZ2VyBQAAAAckbWF0Y2gwBgcBAAAAD2NhbGNGb3JnZVdlaWdodAAAAAEAAAANZm9yZ2VTdXBwbGllcwkAAGsAAAADAAAAAAAAAAABBQAAAAZtYXhJbnQFAAAADWZvcmdlU3VwcGxpZXMAAAAFAAAAAWkBAAAAE2FkZEFzc2V0VG9XaGl0ZWxpc3QAAAACAAAACmFzc2V0VG9BZGQAAAASYXNzZXRUb3RhbFN1cHBsaWVzAwkBAAAAAiE9AAAAAgkBAAAADGhhc1ByaXZpbGVnZQAAAAIIBQAAAAFpAAAABmNhbGxlcgIAAAATYWRkQXNzZXRUb1doaXRlbGlzdAYJAAACAAAAAQIAAAANQWNjZXNzIGRlbmllZAMDCQEAAAACIT0AAAACCQEAAAAHaXNBc3NldAAAAAEFAAAACmFzc2V0VG9BZGQGBgkBAAAAAiE9AAAAAgkBAAAADWlzU2FmZUludGVnZXIAAAABBQAAABJhc3NldFRvdGFsU3VwcGxpZXMGCQAAAgAAAAECAAAAD0RhdGEgdmFsaWRhdGlvbgMJAQAAAAIhPQAAAAIJAQAAABJnZXRGb3JnZUFzc2V0U3RhdGUAAAABBQAAAAphc3NldFRvQWRkAgAAAA5ub3RXaGl0ZWxpc3RlZAkAAAIAAAABAgAAABlBc3NldCBhbHJlYWR5IHdoaXRlbGlzdGVkBAAAAAtmb3JnZVdlaWdodAkBAAAAD2NhbGNGb3JnZVdlaWdodAAAAAEFAAAAEmFzc2V0VG90YWxTdXBwbGllcwQAAAAUbmV3Rm9yZ2VzVG90YWxXZWlnaHQJAABkAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAUa2V5Rm9yZ2VzVG90YWxXZWlnaHQFAAAAC2ZvcmdlV2VpZ2h0CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIFAAAAF2tleUZvcmdlU2V0dGluZ3NFbmFibGVkBQAAAAphc3NldFRvQWRkBgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABhrZXlGb3JnZVNldHRpbmdzU3VwcGxpZXMFAAAACmFzc2V0VG9BZGQFAAAAEmFzc2V0VG90YWxTdXBwbGllcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAABZrZXlGb3JnZVNldHRpbmdzV2VpZ2h0BQAAAAphc3NldFRvQWRkBQAAAAtmb3JnZVdlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUa2V5Rm9yZ2VzVG90YWxXZWlnaHQFAAAAFG5ld0Zvcmdlc1RvdGFsV2VpZ2h0BQAAAANuaWwAAAABaQEAAAAYcmVtb3ZlQXNzZXRGcm9tV2hpdGVsaXN0AAAAAQAAAA1hc3NldFRvUmVtb3ZlAwkBAAAAAiE9AAAAAgkBAAAADGhhc1ByaXZpbGVnZQAAAAIIBQAAAAFpAAAABmNhbGxlcgIAAAAYcmVtb3ZlQXNzZXRGcm9tV2hpdGVsaXN0BgkAAAIAAAABAgAAAA1BY2Nlc3MgZGVuaWVkAwkBAAAAAiE9AAAAAgkBAAAAB2lzQXNzZXQAAAABBQAAAA1hc3NldFRvUmVtb3ZlBgkAAAIAAAABAgAAAA9EYXRhIHZhbGlkYXRpb24EAAAAD2ZvcmdlQXNzZXRTdGF0ZQkBAAAAEmdldEZvcmdlQXNzZXRTdGF0ZQAAAAEFAAAADWFzc2V0VG9SZW1vdmUDCQAAAAAAAAIFAAAAD2ZvcmdlQXNzZXRTdGF0ZQIAAAAObm90V2hpdGVsaXN0ZWQJAAACAAAAAQIAAAAVQXNzZXQgbm90IHdoaXRlbGlzdGVkBAAAAAdhY3Rpb25zCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgUAAAAXa2V5Rm9yZ2VTZXR0aW5nc0VuYWJsZWQFAAAADWFzc2V0VG9SZW1vdmUJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAABhrZXlGb3JnZVNldHRpbmdzU3VwcGxpZXMFAAAADWFzc2V0VG9SZW1vdmUJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAABZrZXlGb3JnZVNldHRpbmdzV2VpZ2h0BQAAAA1hc3NldFRvUmVtb3ZlBQAAAANuaWwDCQAAAAAAAAIFAAAAD2ZvcmdlQXNzZXRTdGF0ZQIAAAAIZGlzYWJsZWQFAAAAB2FjdGlvbnMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFGtleUZvcmdlc1RvdGFsV2VpZ2h0CQAAZQAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAFGtleUZvcmdlc1RvdGFsV2VpZ2h0CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAAFmtleUZvcmdlU2V0dGluZ3NXZWlnaHQFAAAADWFzc2V0VG9SZW1vdmUFAAAAB2FjdGlvbnMAAAABaQEAAAASZW5hYmxlRGlzYWJsZUZvcmdlAAAAAQAAAA1hc3NldFRvVG9nZ2xlAwkBAAAAAiE9AAAAAgkBAAAADGhhc1ByaXZpbGVnZQAAAAIIBQAAAAFpAAAABmNhbGxlcgIAAAASZW5hYmxlRGlzYWJsZUZvcmdlBgkAAAIAAAABAgAAAA1BY2Nlc3MgZGVuaWVkAwkBAAAAAiE9AAAAAgkBAAAAB2lzQXNzZXQAAAABBQAAAA1hc3NldFRvVG9nZ2xlBgkAAAIAAAABAgAAAA9EYXRhIHZhbGlkYXRpb24EAAAAD2ZvcmdlQXNzZXRTdGF0ZQkBAAAAEmdldEZvcmdlQXNzZXRTdGF0ZQAAAAEFAAAADWFzc2V0VG9Ub2dnbGUDCQAAAAAAAAIFAAAAD2ZvcmdlQXNzZXRTdGF0ZQIAAAAObm90V2hpdGVsaXN0ZWQJAAACAAAAAQIAAAAVQXNzZXQgbm90IHdoaXRlbGlzdGVkBAAAAAtmb3JnZVdlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAWa2V5Rm9yZ2VTZXR0aW5nc1dlaWdodAQAAAARZm9yZ2VzVG90YWxXZWlnaHQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAFGtleUZvcmdlc1RvdGFsV2VpZ2h0AwkAAAAAAAACBQAAAA9mb3JnZUFzc2V0U3RhdGUCAAAACGRpc2FibGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRrZXlGb3JnZXNUb3RhbFdlaWdodAkAAGQAAAACBQAAABFmb3JnZXNUb3RhbFdlaWdodAUAAAALZm9yZ2VXZWlnaHQJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgUAAAAXa2V5Rm9yZ2VTZXR0aW5nc0VuYWJsZWQFAAAADWFzc2V0VG9Ub2dnbGUGBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFGtleUZvcmdlc1RvdGFsV2VpZ2h0CQAAZQAAAAIFAAAAEWZvcmdlc1RvdGFsV2VpZ2h0BQAAAAtmb3JnZVdlaWdodAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACBQAAABdrZXlGb3JnZVNldHRpbmdzRW5hYmxlZAUAAAANYXNzZXRUb1RvZ2dsZQcFAAAAA25pbAAAAAFpAQAAABh1cGRhdGVGb3JnZUFzc2V0U3VwcGxpZXMAAAACAAAADWFzc2V0VG9VcGRhdGUAAAAQbmV3U3VwcGxpZXNWYWx1ZQMJAQAAAAIhPQAAAAIJAQAAAAxoYXNQcml2aWxlZ2UAAAACCAUAAAABaQAAAAZjYWxsZXICAAAAGHVwZGF0ZUZvcmdlQXNzZXRTdXBwbGllcwYJAAACAAAAAQIAAAANQWNjZXNzIGRlbmllZAMDCQEAAAACIT0AAAACCQEAAAAHaXNBc3NldAAAAAEFAAAADWFzc2V0VG9VcGRhdGUGBgkBAAAAAiE9AAAAAgkBAAAADWlzU2FmZUludGVnZXIAAAABBQAAABBuZXdTdXBwbGllc1ZhbHVlBgkAAAIAAAABAgAAAA9EYXRhIHZhbGlkYXRpb24EAAAAD2ZvcmdlQXNzZXRTdGF0ZQkBAAAAEmdldEZvcmdlQXNzZXRTdGF0ZQAAAAEFAAAADWFzc2V0VG9VcGRhdGUDCQAAAAAAAAIFAAAAD2ZvcmdlQXNzZXRTdGF0ZQIAAAAObm90V2hpdGVsaXN0ZWQJAAACAAAAAQIAAAAVQXNzZXQgbm90IHdoaXRlbGlzdGVkBAAAABJjdXJyZW50Rm9yZ2VXZWlnaHQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAWa2V5Rm9yZ2VTZXR0aW5nc1dlaWdodAUAAAANYXNzZXRUb1VwZGF0ZQQAAAAObmV3Rm9yZ2VXZWlnaHQJAQAAAA9jYWxjRm9yZ2VXZWlnaHQAAAABBQAAABBuZXdTdXBwbGllc1ZhbHVlBAAAAAdhY3Rpb25zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAFmtl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BQAAAA1yZWNlaXB0RmllbGRzAAAAAAAAAAADBAAAABFmb3JnZXNUb3RhbFdlaWdodAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAUa2V5Rm9yZ2VzVG90YWxXZWlnaHQEAAAAD2ZvcmdlQmxvY2tWYWx1ZQkAAGsAAAADBQAAABRuaWJlbEFtb3VudFBlckJsb2NrcwUAAAALZm9yZ2VXZWlnaHQFAAAAEWZvcmdlc1RvdGFsV2VpZ2h0BAAAABdhbW91bnRUb0RlbGl2ZXJQZXJCbG9jawkAAGsAAAADBQAAAA9mb3JnZUJsb2NrVmFsdWUFAAAADWFzc2V0UXVhbnRpdHkFAAAADWZvcmdlU3VwcGxpZXMDCQAAZgAAAAIAAAAAAAAAAAEFAAAAF2Ftb3VudFRvRGVsaXZlclBlckJsb2NrCQAAAgAAAAECAAAAHUJlbG93IG1pbmltdW0gcmVxdWlyZWQgYW1vdW50BAAAABRhbW91bnRUb0RlbGl2ZXJUb3RhbAkAAGgAAAACBQAAABdhbW91bnRUb0RlbGl2ZXJQZXJCbG9jawUAAAAOZWxpZ2libGVCbG9ja3MDCQEAAAACIT0AAAACCQEAAAANaXNTYWZlSW50ZWdlcgAAAAEFAAAAFGFtb3VudFRvRGVsaXZlclRvdGFsBgkAAAIAAAABAgAAAAxTeXN0ZW0gZXJyb3IJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADWFzc2V0UXVhbnRpdHkFAAAADWFzc2V0UXVhbnRpdHkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADmVsaWdpYmxlQmxvY2tzBQAAAA5lbGlnaWJsZUJsb2NrcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAALZm9yZ2VXZWlnaHQFAAAAC2ZvcmdlV2VpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA1mb3JnZVN1cHBsaWVzBQAAAA1mb3JnZVN1cHBsaWVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABFmb3JnZXNUb3RhbFdlaWdodAUAAAARZm9yZ2VzVG90YWxXZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD2ZvcmdlQmxvY2tWYWx1ZQUAAAAPZm9yZ2VCbG9ja1ZhbHVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABdhbW91bnRUb0RlbGl2ZXJQZXJCbG9jawUAAAAXYW1vdW50VG9EZWxpdmVyUGVyQmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAFGFtb3VudFRvRGVsaXZlclRvdGFsBQAAABRhbW91bnRUb0RlbGl2ZXJUb3RhbAUAAAADbmlsAAAAAEdWg90=", "height": 1482136, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GisBGcocpuZViLd3jp2bcNaN2pS2rKZMiUNXJavbaAue Next: HsVeavFmxFpycd1hNTWKiDxra4ZcFenEKdtP2EcnwX9w Diff:
OldNewDifferences
7777 }
7878
7979
80-func isWhitelisted (assetToTest) = isDefined(getBoolean(this, (keyForgeSettingsEnabled + assetToTest)))
80+func getForgeAssetState (assetToCheck) = match getBoolean(this, (keyForgeSettingsEnabled + assetToCheck)) {
81+ case isBoolean: Boolean =>
82+ if ((isBoolean == true))
83+ then "enabled"
84+ else "disabled"
85+ case _ =>
86+ "notWhitelisted"
87+}
8188
8289
8390 func hasPrivilege (callerAddress,privilegeName) = if ((addressFromStringValue(getStringValue(addrPrivileges, sharedKeyMainOperator)) == callerAddress))
100107 then true
101108 else (isSafeInteger(assetTotalSupplies) != true))
102109 then throw("Data validation")
103- else if ((isWhitelisted(assetToAdd) != false))
110+ else if ((getForgeAssetState(assetToAdd) != "notWhitelisted"))
104111 then throw("Asset already whitelisted")
105112 else {
106113 let forgeWeight = calcForgeWeight(assetTotalSupplies)
115122 then throw("Access denied")
116123 else if ((isAsset(assetToRemove) != true))
117124 then throw("Data validation")
118- else if ((isWhitelisted(assetToRemove) != true))
119- then throw("Asset not whitelisted")
120- else {
121- let actions = [DeleteEntry((keyForgeSettingsEnabled + assetToRemove)), DeleteEntry((keyForgeSettingsSupplies + assetToRemove)), DeleteEntry((keyForgeSettingsWeight + assetToRemove))]
122- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToRemove)) != true))
123- then actions
124- else IntegerEntry(keyForgesTotalWeight, (getIntegerValue(this, keyForgesTotalWeight) - getIntegerValue(this, (keyForgeSettingsWeight + assetToRemove)))) :: actions
125- }
125+ else {
126+ let forgeAssetState = getForgeAssetState(assetToRemove)
127+ if ((forgeAssetState == "notWhitelisted"))
128+ then throw("Asset not whitelisted")
129+ else {
130+ let actions = [DeleteEntry((keyForgeSettingsEnabled + assetToRemove)), DeleteEntry((keyForgeSettingsSupplies + assetToRemove)), DeleteEntry((keyForgeSettingsWeight + assetToRemove))]
131+ if ((forgeAssetState == "disabled"))
132+ then actions
133+ else IntegerEntry(keyForgesTotalWeight, (getIntegerValue(this, keyForgesTotalWeight) - getIntegerValue(this, (keyForgeSettingsWeight + assetToRemove)))) :: actions
134+ }
135+ }
126136
127137
128138
132142 else if ((isAsset(assetToToggle) != true))
133143 then throw("Data validation")
134144 else {
135- let forgeWeight = getIntegerValue(this, keyForgeSettingsWeight)
136- let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
137- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToToggle)) != true))
138- then [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight + forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), true)]
139- else [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight - forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), false)]
145+ let forgeAssetState = getForgeAssetState(assetToToggle)
146+ if ((forgeAssetState == "notWhitelisted"))
147+ then throw("Asset not whitelisted")
148+ else {
149+ let forgeWeight = getIntegerValue(this, keyForgeSettingsWeight)
150+ let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
151+ if ((forgeAssetState == "disabled"))
152+ then [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight + forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), true)]
153+ else [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight - forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), false)]
154+ }
140155 }
141156
142157
148163 then true
149164 else (isSafeInteger(newSuppliesValue) != true))
150165 then throw("Data validation")
151- else if ((isWhitelisted(assetToUpdate) != true))
152- then throw("Asset not whitelisted")
153- else {
154- let currentForgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + assetToUpdate))
155- let newForgeWeight = calcForgeWeight(newSuppliesValue)
156- let actions = [IntegerEntry((keyForgeSettingsWeight + assetToUpdate), newForgeWeight), IntegerEntry((keyForgeSettingsSupplies + assetToUpdate), newSuppliesValue)]
157- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToUpdate)) != true))
158- then actions
159- else IntegerEntry(keyForgesTotalWeight, ((getIntegerValue(this, keyForgesTotalWeight) + newForgeWeight) - currentForgeWeight)) :: actions
160- }
166+ else {
167+ let forgeAssetState = getForgeAssetState(assetToUpdate)
168+ if ((forgeAssetState == "notWhitelisted"))
169+ then throw("Asset not whitelisted")
170+ else {
171+ let currentForgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + assetToUpdate))
172+ let newForgeWeight = calcForgeWeight(newSuppliesValue)
173+ let actions = [IntegerEntry((keyForgeSettingsWeight + assetToUpdate), newForgeWeight), IntegerEntry((keyForgeSettingsSupplies + assetToUpdate), newSuppliesValue)]
174+ if ((forgeAssetState == "disabled"))
175+ then actions
176+ else IntegerEntry(keyForgesTotalWeight, ((getIntegerValue(this, keyForgesTotalWeight) + newForgeWeight) - currentForgeWeight)) :: actions
177+ }
178+ }
161179
162180
163181
178196 then true
179197 else (receiptFields[0] != sharedReceiptTag))
180198 then throw("Not a receipt")
181- else if ((isWhitelisted(receiptFields[3]) != true))
182- then throw("Not whitelisted")
183- else {
184- let startingBlock = toSafeInteger(receiptFields[1])
185- let endingBlock = toSafeInteger(receiptFields[5])
186- let assetQuantity = toSafeInteger(receiptFields[4])
187- let eligibleBlocks = (endingBlock - startingBlock)
188- if (if ((nibelGenesisBlock > startingBlock))
189- then true
190- else (nibelGenesisBlock > endingBlock))
191- then throw("Not eligible")
192- else if ((isSafeInteger(eligibleBlocks) != true))
199+ else {
200+ let forgeAssetState = getForgeAssetState(receiptFields[3])
201+ if ((forgeAssetState != "enabled"))
202+ then throw("Not whitelisted/enabled")
203+ else {
204+ let assetQuantity = toSafeInteger(receiptFields[4])
205+ let eligibleBlocks = (toSafeInteger(receiptFields[5]) - toSafeInteger(receiptFields[1]))
206+ if ((isSafeInteger(eligibleBlocks) != true))
193207 then throw("Corrupted receipt")
194208 else {
195209 let forgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + receiptFields[3]))
196210 let forgeSupplies = getIntegerValue(this, (keyForgeSettingsSupplies + receiptFields[3]))
197211 let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
198- let forgeShare = fraction(1, forgeWeight, forgesTotalWeight)
199- let forgeBlockValue = fraction(nibelAmountPerBlocks, forgeShare, 1)
200- let callerShare = (fraction(forgeBlockValue, assetQuantity, forgeSupplies) * eligibleBlocks)
201-[IntegerEntry("assetQuantity", assetQuantity), IntegerEntry("eligibleBlocks", eligibleBlocks), IntegerEntry("forgeWeight", forgeWeight), IntegerEntry("forgeSupplies", forgeSupplies), IntegerEntry("forgesTotalWeight", forgesTotalWeight), IntegerEntry("forgeShare", forgeShare), IntegerEntry("forgeBlockValue", forgeBlockValue), IntegerEntry("callerShare", callerShare)]
212+ let forgeBlockValue = fraction(nibelAmountPerBlocks, forgeWeight, forgesTotalWeight)
213+ let amountToDeliverPerBlock = fraction(forgeBlockValue, assetQuantity, forgeSupplies)
214+ if ((1 > amountToDeliverPerBlock))
215+ then throw("Below minimum required amount")
216+ else {
217+ let amountToDeliverTotal = (amountToDeliverPerBlock * eligibleBlocks)
218+ if ((isSafeInteger(amountToDeliverTotal) != true))
219+ then throw("System error")
220+ else [IntegerEntry("assetQuantity", assetQuantity), IntegerEntry("eligibleBlocks", eligibleBlocks), IntegerEntry("forgeWeight", forgeWeight), IntegerEntry("forgeSupplies", forgeSupplies), IntegerEntry("forgesTotalWeight", forgesTotalWeight), IntegerEntry("forgeBlockValue", forgeBlockValue), IntegerEntry("amountToDeliverPerBlock", amountToDeliverPerBlock), IntegerEntry("amountToDeliverTotal", amountToDeliverTotal)]
221+ }
202222 }
203- }
223+ }
224+ }
204225 }
205226 }
206227
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let version = 1
55
66 let separator = "___"
77
88 let decimals = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000]
99
1010 let maxInt = 9223372036854775807
1111
1212 let addrPrivileges = addressFromStringValue("3Myojf1j7W2S5XSKemGaqErcSYghqCgQ1gp")
1313
1414 let addrVault = addressFromStringValue("3MutTVXh7Z2m9Cfzx982D4nm7h9Yzr3Ra9a")
1515
1616 let nibelAsset = base58'8c6SCeWJj6M1VFBaFEg2LWxYS77ZHkmiMeAs6MMSDi1v'
1717
1818 let nibelAmountPerBlocks = 1000000000000
1919
2020 let nibelGenesisBlock = 0
2121
2222 let nibelHavlingDelay = 100000
2323
2424 let sharedKeyMainOperator = "MAIN_OPERATOR"
2525
2626 let sharedKeyPrivilege = "PRIVILEGE"
2727
2828 let sharedReceiptTag = "R"
2929
3030 let keyForgesTotalWeight = "FORGES_TOTAL_WEIGHT"
3131
3232 let keyForgeSettingsEnabled = "FS_ENABLED_"
3333
3434 let keyForgeSettingsSupplies = "FS_SUPPLIES_"
3535
3636 let keyForgeSettingsWeight = "FS_WEIGHT_"
3737
3838 func isSafeString (stringToTest) = if ((contains(stringToTest, separator) == false))
3939 then (contains(stringToTest, " ") == false)
4040 else false
4141
4242
4343 func isSafeInteger (integerToTest) = match integerToTest {
4444 case isString: String =>
4545 match parseInt(isString) {
4646 case isInteger: Int =>
4747 if ((isInteger >= 0))
4848 then (maxInt >= isInteger)
4949 else false
5050 case _ =>
5151 false
5252 }
5353 case isInteger: Int =>
5454 if ((isInteger >= 0))
5555 then (maxInt >= isInteger)
5656 else false
5757 case _ =>
5858 false
5959 }
6060
6161
6262 func toSafeInteger (stringToConvert) = {
6363 let parsedInteger = valueOrErrorMessage(parseInt(stringToConvert), "Not a string int")
6464 if ((isSafeInteger(parsedInteger) != true))
6565 then throw("Not safe")
6666 else parsedInteger
6767 }
6868
6969
7070 func isAsset (assetToTest) = match assetToTest {
7171 case isString: String =>
7272 isDefined(assetInfo(fromBase58String(isString)))
7373 case isByteVector: ByteVector =>
7474 isDefined(assetInfo(isByteVector))
7575 case _ =>
7676 false
7777 }
7878
7979
80-func isWhitelisted (assetToTest) = isDefined(getBoolean(this, (keyForgeSettingsEnabled + assetToTest)))
80+func getForgeAssetState (assetToCheck) = match getBoolean(this, (keyForgeSettingsEnabled + assetToCheck)) {
81+ case isBoolean: Boolean =>
82+ if ((isBoolean == true))
83+ then "enabled"
84+ else "disabled"
85+ case _ =>
86+ "notWhitelisted"
87+}
8188
8289
8390 func hasPrivilege (callerAddress,privilegeName) = if ((addressFromStringValue(getStringValue(addrPrivileges, sharedKeyMainOperator)) == callerAddress))
8491 then true
8592 else match getInteger(addrPrivileges, (((((sharedKeyPrivilege + separator) + toBase58String(callerAddress.bytes)) + separator) + toBase58String(this.bytes)) + privilegeName)) {
8693 case isInteger: Int =>
8794 true
8895 case _ =>
8996 false
9097 }
9198
9299
93100 func calcForgeWeight (forgeSupplies) = fraction(1, maxInt, forgeSupplies)
94101
95102
96103 @Callable(i)
97104 func addAssetToWhitelist (assetToAdd,assetTotalSupplies) = if ((hasPrivilege(i.caller, "addAssetToWhitelist") != true))
98105 then throw("Access denied")
99106 else if (if ((isAsset(assetToAdd) != true))
100107 then true
101108 else (isSafeInteger(assetTotalSupplies) != true))
102109 then throw("Data validation")
103- else if ((isWhitelisted(assetToAdd) != false))
110+ else if ((getForgeAssetState(assetToAdd) != "notWhitelisted"))
104111 then throw("Asset already whitelisted")
105112 else {
106113 let forgeWeight = calcForgeWeight(assetTotalSupplies)
107114 let newForgesTotalWeight = (getIntegerValue(this, keyForgesTotalWeight) + forgeWeight)
108115 [BooleanEntry((keyForgeSettingsEnabled + assetToAdd), true), IntegerEntry((keyForgeSettingsSupplies + assetToAdd), assetTotalSupplies), IntegerEntry((keyForgeSettingsWeight + assetToAdd), forgeWeight), IntegerEntry(keyForgesTotalWeight, newForgesTotalWeight)]
109116 }
110117
111118
112119
113120 @Callable(i)
114121 func removeAssetFromWhitelist (assetToRemove) = if ((hasPrivilege(i.caller, "removeAssetFromWhitelist") != true))
115122 then throw("Access denied")
116123 else if ((isAsset(assetToRemove) != true))
117124 then throw("Data validation")
118- else if ((isWhitelisted(assetToRemove) != true))
119- then throw("Asset not whitelisted")
120- else {
121- let actions = [DeleteEntry((keyForgeSettingsEnabled + assetToRemove)), DeleteEntry((keyForgeSettingsSupplies + assetToRemove)), DeleteEntry((keyForgeSettingsWeight + assetToRemove))]
122- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToRemove)) != true))
123- then actions
124- else IntegerEntry(keyForgesTotalWeight, (getIntegerValue(this, keyForgesTotalWeight) - getIntegerValue(this, (keyForgeSettingsWeight + assetToRemove)))) :: actions
125- }
125+ else {
126+ let forgeAssetState = getForgeAssetState(assetToRemove)
127+ if ((forgeAssetState == "notWhitelisted"))
128+ then throw("Asset not whitelisted")
129+ else {
130+ let actions = [DeleteEntry((keyForgeSettingsEnabled + assetToRemove)), DeleteEntry((keyForgeSettingsSupplies + assetToRemove)), DeleteEntry((keyForgeSettingsWeight + assetToRemove))]
131+ if ((forgeAssetState == "disabled"))
132+ then actions
133+ else IntegerEntry(keyForgesTotalWeight, (getIntegerValue(this, keyForgesTotalWeight) - getIntegerValue(this, (keyForgeSettingsWeight + assetToRemove)))) :: actions
134+ }
135+ }
126136
127137
128138
129139 @Callable(i)
130140 func enableDisableForge (assetToToggle) = if ((hasPrivilege(i.caller, "enableDisableForge") != true))
131141 then throw("Access denied")
132142 else if ((isAsset(assetToToggle) != true))
133143 then throw("Data validation")
134144 else {
135- let forgeWeight = getIntegerValue(this, keyForgeSettingsWeight)
136- let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
137- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToToggle)) != true))
138- then [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight + forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), true)]
139- else [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight - forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), false)]
145+ let forgeAssetState = getForgeAssetState(assetToToggle)
146+ if ((forgeAssetState == "notWhitelisted"))
147+ then throw("Asset not whitelisted")
148+ else {
149+ let forgeWeight = getIntegerValue(this, keyForgeSettingsWeight)
150+ let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
151+ if ((forgeAssetState == "disabled"))
152+ then [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight + forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), true)]
153+ else [IntegerEntry(keyForgesTotalWeight, (forgesTotalWeight - forgeWeight)), BooleanEntry((keyForgeSettingsEnabled + assetToToggle), false)]
154+ }
140155 }
141156
142157
143158
144159 @Callable(i)
145160 func updateForgeAssetSupplies (assetToUpdate,newSuppliesValue) = if ((hasPrivilege(i.caller, "updateForgeAssetSupplies") != true))
146161 then throw("Access denied")
147162 else if (if ((isAsset(assetToUpdate) != true))
148163 then true
149164 else (isSafeInteger(newSuppliesValue) != true))
150165 then throw("Data validation")
151- else if ((isWhitelisted(assetToUpdate) != true))
152- then throw("Asset not whitelisted")
153- else {
154- let currentForgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + assetToUpdate))
155- let newForgeWeight = calcForgeWeight(newSuppliesValue)
156- let actions = [IntegerEntry((keyForgeSettingsWeight + assetToUpdate), newForgeWeight), IntegerEntry((keyForgeSettingsSupplies + assetToUpdate), newSuppliesValue)]
157- if ((getBooleanValue(this, (keyForgeSettingsEnabled + assetToUpdate)) != true))
158- then actions
159- else IntegerEntry(keyForgesTotalWeight, ((getIntegerValue(this, keyForgesTotalWeight) + newForgeWeight) - currentForgeWeight)) :: actions
160- }
166+ else {
167+ let forgeAssetState = getForgeAssetState(assetToUpdate)
168+ if ((forgeAssetState == "notWhitelisted"))
169+ then throw("Asset not whitelisted")
170+ else {
171+ let currentForgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + assetToUpdate))
172+ let newForgeWeight = calcForgeWeight(newSuppliesValue)
173+ let actions = [IntegerEntry((keyForgeSettingsWeight + assetToUpdate), newForgeWeight), IntegerEntry((keyForgeSettingsSupplies + assetToUpdate), newSuppliesValue)]
174+ if ((forgeAssetState == "disabled"))
175+ then actions
176+ else IntegerEntry(keyForgesTotalWeight, ((getIntegerValue(this, keyForgesTotalWeight) + newForgeWeight) - currentForgeWeight)) :: actions
177+ }
178+ }
161179
162180
163181
164182 @Callable(i)
165183 func claim () = if ((this == i.caller))
166184 then throw("Self-invoke forbidden")
167185 else if (if ((size(i.payments) != 1))
168186 then true
169187 else (i.payments[0].amount != 1))
170188 then throw("Payment issue")
171189 else {
172190 let receiptInfo = valueOrErrorMessage(assetInfo(valueOrErrorMessage(i.payments[0].assetId, "Wrong asset type")), "Unknown asset")
173191 if ((receiptInfo.issuer != addrVault))
174192 then throw("Unknown issuer")
175193 else {
176194 let receiptFields = split(receiptInfo.description, separator)
177195 if (if ((size(receiptFields) != 8))
178196 then true
179197 else (receiptFields[0] != sharedReceiptTag))
180198 then throw("Not a receipt")
181- else if ((isWhitelisted(receiptFields[3]) != true))
182- then throw("Not whitelisted")
183- else {
184- let startingBlock = toSafeInteger(receiptFields[1])
185- let endingBlock = toSafeInteger(receiptFields[5])
186- let assetQuantity = toSafeInteger(receiptFields[4])
187- let eligibleBlocks = (endingBlock - startingBlock)
188- if (if ((nibelGenesisBlock > startingBlock))
189- then true
190- else (nibelGenesisBlock > endingBlock))
191- then throw("Not eligible")
192- else if ((isSafeInteger(eligibleBlocks) != true))
199+ else {
200+ let forgeAssetState = getForgeAssetState(receiptFields[3])
201+ if ((forgeAssetState != "enabled"))
202+ then throw("Not whitelisted/enabled")
203+ else {
204+ let assetQuantity = toSafeInteger(receiptFields[4])
205+ let eligibleBlocks = (toSafeInteger(receiptFields[5]) - toSafeInteger(receiptFields[1]))
206+ if ((isSafeInteger(eligibleBlocks) != true))
193207 then throw("Corrupted receipt")
194208 else {
195209 let forgeWeight = getIntegerValue(this, (keyForgeSettingsWeight + receiptFields[3]))
196210 let forgeSupplies = getIntegerValue(this, (keyForgeSettingsSupplies + receiptFields[3]))
197211 let forgesTotalWeight = getIntegerValue(this, keyForgesTotalWeight)
198- let forgeShare = fraction(1, forgeWeight, forgesTotalWeight)
199- let forgeBlockValue = fraction(nibelAmountPerBlocks, forgeShare, 1)
200- let callerShare = (fraction(forgeBlockValue, assetQuantity, forgeSupplies) * eligibleBlocks)
201-[IntegerEntry("assetQuantity", assetQuantity), IntegerEntry("eligibleBlocks", eligibleBlocks), IntegerEntry("forgeWeight", forgeWeight), IntegerEntry("forgeSupplies", forgeSupplies), IntegerEntry("forgesTotalWeight", forgesTotalWeight), IntegerEntry("forgeShare", forgeShare), IntegerEntry("forgeBlockValue", forgeBlockValue), IntegerEntry("callerShare", callerShare)]
212+ let forgeBlockValue = fraction(nibelAmountPerBlocks, forgeWeight, forgesTotalWeight)
213+ let amountToDeliverPerBlock = fraction(forgeBlockValue, assetQuantity, forgeSupplies)
214+ if ((1 > amountToDeliverPerBlock))
215+ then throw("Below minimum required amount")
216+ else {
217+ let amountToDeliverTotal = (amountToDeliverPerBlock * eligibleBlocks)
218+ if ((isSafeInteger(amountToDeliverTotal) != true))
219+ then throw("System error")
220+ else [IntegerEntry("assetQuantity", assetQuantity), IntegerEntry("eligibleBlocks", eligibleBlocks), IntegerEntry("forgeWeight", forgeWeight), IntegerEntry("forgeSupplies", forgeSupplies), IntegerEntry("forgesTotalWeight", forgesTotalWeight), IntegerEntry("forgeBlockValue", forgeBlockValue), IntegerEntry("amountToDeliverPerBlock", amountToDeliverPerBlock), IntegerEntry("amountToDeliverTotal", amountToDeliverTotal)]
221+ }
202222 }
203- }
223+ }
224+ }
204225 }
205226 }
206227
207228

github/deemru/w8io/169f3d6 
50.41 ms