tx · BYeDwbUtqHoSEJiGELua9fcbtxzLq4PHc6rQGsNkjeW8

3MtHYn3dDpoVUf6FNzwXU8k1cqH3KMxgNFP:  -0.01000000 Waves

2021.12.27 04:50 [1852023] smart account 3MtHYn3dDpoVUf6FNzwXU8k1cqH3KMxgNFP > SELF 0.00000000 Waves

{ "type": 13, "id": "BYeDwbUtqHoSEJiGELua9fcbtxzLq4PHc6rQGsNkjeW8", "fee": 1000000, "feeAssetId": null, "timestamp": 1640569856613, "version": 2, "chainId": 84, "sender": "3MtHYn3dDpoVUf6FNzwXU8k1cqH3KMxgNFP", "senderPublicKey": "CERNwqnHFnGf66rmS4s5mpWEPxv5RMqg2rSKPJCCgTbQ", "proofs": [ "5twGWGswBo6bva2UXgbk9pr43QivmdKJkrtm7j4qAMddonxWgGwf4MVVmFx7ptR6RwdKcn9XxL2WfewZ4W9Uuuje" ], "script": "base64:AAIFAAAAAAAAABwIAhIMCgoICAEBGAEICAgBEgMKAQgSBQoDCAgIAAAAGQAAAAASc3lzdGVtQXNzZXRJZEJ5dGVzAQAAACBl2/7IbWHpVuwmUYs5w8vx8CJaoK7/XpSEcwFpn5187QAAAAAbZmFjdG9yeUNvbnRyYWN0QWRkcmVzc0J5dGVzAQAAABoBVKSIz4/LrUrKgYcmdcl3OfutIPleSLVTRQAAAAAiY3JlYXRlRXZlbnRNaW5pbWFsU2VydmljZUZlZUFtb3VudAAAAAAAAAAACgAAAAAgZWRpdEV2ZW50TWluaW1hbFNlcnZpY2VGZWVBbW91bnQAAAAAAAAAABQAAAAAEGtleURhdGFTZXBhcmF0b3ICAAAAAToAAAAAEnZhbHVlRGF0YVNlcGFyYXRvcgIAAAACX18BAAAAEnVuc2FmZUdldEFzc2V0QnlJZAAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAkAA+wAAAABBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAAFYXNzZXQFAAAAByRtYXRjaDAFAAAABWFzc2V0CQAAAgAAAAECAAAAHlNwZWNpZmllZCBhc3NldCBkb2VzIG5vdCBleGlzdAEAAAAPdmFsaWRhdGVBc3NldElkAAAAAgAAABNzb3VyY2VBc3NldElkT3JVbml0AAAAD3JlcXVpcmVkQXNzZXRJZAQAAAANc291cmNlQXNzZXRJZAMJAQAAAAlpc0RlZmluZWQAAAABBQAAABNzb3VyY2VBc3NldElkT3JVbml0CQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAE3NvdXJjZUFzc2V0SWRPclVuaXQCAAAABVdBVkVTAwkBAAAAAiE9AAAAAgUAAAANc291cmNlQXNzZXRJZAUAAAAPcmVxdWlyZWRBc3NldElkBwYBAAAAFmNoZWNrU2VydmljZUZlZVBheW1lbnQAAAADAAAADG9wZXJhdGlvblRhZwAAABFzZXJ2aWNlRmVlUGF5bWVudAAAABhyZXF1aXJlZFNlcnZpY2VGZWVBbW91bnQEAAAADXN5c3RlbUFzc2V0SWQJAAJYAAAAAQUAAAASc3lzdGVtQXNzZXRJZEJ5dGVzAwkBAAAAASEAAAABCQEAAAAPdmFsaWRhdGVBc3NldElkAAAAAggFAAAAEXNlcnZpY2VGZWVQYXltZW50AAAAB2Fzc2V0SWQFAAAADXN5c3RlbUFzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIFAAAADG9wZXJhdGlvblRhZwIAAAAyIHJlcXVpcmVzIHNlcnZpY2UgZmVlIHBheW1lbnQgaW4gdGhlIHN5c3RlbSBhc3NldCAFAAAADXN5c3RlbUFzc2V0SWQDAwkAAGYAAAACBQAAABhyZXF1aXJlZFNlcnZpY2VGZWVBbW91bnQIBQAAABFzZXJ2aWNlRmVlUGF5bWVudAAAAAZhbW91bnQGCQAAZgAAAAIIBQAAABFzZXJ2aWNlRmVlUGF5bWVudAAAAAZhbW91bnQFAAAAGHJlcXVpcmVkU2VydmljZUZlZUFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAABKQXR0YWNoZWQgc2VydmljZSBmZWUgcGF5bWVudCBhbW91bnQgaXMgbm90IGVxdWFsIHRvIHJlcXVpcmVkIHNlcnZpY2UgZmVlICgJAAGkAAAAAQUAAAAYcmVxdWlyZWRTZXJ2aWNlRmVlQW1vdW50AgAAAAEpBQAAAAR1bml0AQAAAA9sYXN0RXZlbnRJZHhLZXkAAAABAAAABGFkZHIJAAS5AAAAAgkABEwAAAACCQAEJQAAAAEFAAAABGFkZHIJAARMAAAAAgIAAAAObGFzdF9ldmVudF9pZHgFAAAAA25pbAUAAAAQa2V5RGF0YVNlcGFyYXRvcgEAAAATbGFzdEV2ZW50UmVxdWVzdElkeAAAAAEAAAAEYWRkcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQEAAAAPbGFzdEV2ZW50SWR4S2V5AAAAAQUAAAAEYWRkcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAAAAAAAAAAABAQAAABNnZW5lcmF0ZU5ld0V2ZW50SWR4AAAAAQAAAARhZGRyCQAAZAAAAAIJAQAAABNsYXN0RXZlbnRSZXF1ZXN0SWR4AAAAAQUAAAAEYWRkcgAAAAAAAAAAAQEAAAAPZ2VuZXJhdGVFdmVudElkAAAAAgAAAARhZGRyAAAAA2lkeAkABLkAAAACCQAETAAAAAIJAAQlAAAAAQUAAAAEYWRkcgkABEwAAAACCQABpAAAAAEFAAAAA2lkeAUAAAADbmlsBQAAABBrZXlEYXRhU2VwYXJhdG9yAQAAABRnZW5lcmF0ZUV2ZW50RGF0YUtleQAAAAEAAAAHZXZlbnRJZAkABLkAAAACCQAETAAAAAICAAAABWV2ZW50CQAETAAAAAIFAAAAB2V2ZW50SWQJAARMAAAAAgIAAAAEZGF0YQUAAAADbmlsBQAAABBrZXlEYXRhU2VwYXJhdG9yAQAAABJzZXJpYWxpemVFdmVudERhdGEAAAALAAAADmNyZWF0b3JBZGRyZXNzAAAABXRpdGxlAAAAC2Rlc2NyaXB0aW9uAAAAC3N0YXJ0SGVpZ2h0AAAAC3RpY2tldFByaWNlAAAABHRhZ3MAAAAOZHVyYXRpb25PclVuaXQAAAANcGljdHVyZU9yVW5pdAAAAApsaW5rT3JVbml0AAAADmxvY2F0aW9uT3JVbml0AAAAEXRpY2tldENvdW50T3JVbml0BAAAAAhkdXJhdGlvbgQAAAAHJG1hdGNoMAUAAAAOZHVyYXRpb25PclVuaXQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAIZHVyYXRpb24FAAAAByRtYXRjaDAJAAGkAAAAAQUAAAAIZHVyYXRpb24CAAAAAAQAAAAHcGljdHVyZQQAAAAHJG1hdGNoMAUAAAANcGljdHVyZU9yVW5pdAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAdwaWN0dXJlBQAAAAckbWF0Y2gwBQAAAAdwaWN0dXJlAgAAAAAEAAAABGxpbmsEAAAAByRtYXRjaDAFAAAACmxpbmtPclVuaXQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAEbGluawUAAAAHJG1hdGNoMAUAAAAEbGluawIAAAAABAAAAAhsb2NhdGlvbgQAAAAHJG1hdGNoMAUAAAAObG9jYXRpb25PclVuaXQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAAIbG9jYXRpb24FAAAAByRtYXRjaDAFAAAACGxvY2F0aW9uAgAAAAAEAAAAC3RpY2tldENvdW50BAAAAAckbWF0Y2gwBQAAABF0aWNr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Y2ltYWxzAAAAAAAAAAAABgkAAAAAAAACCAUAAAAFYXNzZXQAAAAIcXVhbnRpdHkAAAAAAAAAAAEGCQEAAAABIQAAAAEIBQAAAAVhc3NldAAAAApyZWlzc3VhYmxlAAAAAwAAAAFpAQAAAAtjcmVhdGVFdmVudAAAAAoAAAAFdGl0bGUAAAALZGVzY3JpcHRpb24AAAALc3RhcnRIZWlnaHQAAAALdGlja2V0UHJpY2UAAAAEdGFncwAAAA5kdXJhdGlvbkluU2VjcwAAAAdwaWN0dXJlAAAABGxpbmsAAAAIbG9jYXRpb24AAAALdGlja2V0Q291bnQEAAAAC3N5c3RlbUFzc2V0CQEAAAASdW5zYWZlR2V0QXNzZXRCeUlkAAAAAQUAAAASc3lzdGVtQXNzZXRJZEJ5dGVzAwkAAGYAAAACAAAAAAAAAAABCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzCQAAAgAAAAECAAAAJ1lvdSBoYXZlIHRvIHNlbmQgc2VydmljZSBmZWUgYXMgcGF5bWVudAQAAAARc2VydmljZUZlZVBheW1lbnQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEDCQEAAAAJaXNEZWZpbmVkAAAAAQkBAAAAFmNoZWNrU2VydmljZUZlZVBheW1lbnQAAAADAgAAAAxDcmVhdGUgZXZlbnQFAAAAEXNlcnZpY2VGZWVQYXltZW50BQAAACJjcmVhdGVFdmVudE1pbmltYWxTZXJ2aWNlRmVlQW1vdW50CQAAAgAAAAECAAAAGVJlYWNoZWQgdW5yZWFjaGFibGUgc3RhdGUEAAAAC25ld0V2ZW50SWR4CQEAAAATZ2VuZXJhdGVOZXdFdmVudElkeAAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAKbmV3RXZlbnRJZAkBAAAAD2dlbmVyYXRlRXZlbnRJZAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAALbmV3RXZlbnRJZHgDCQAAZgAAAAIFAAAAC3N0YXJ0SGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAsRXZlbnQgc3RhcnQgaGVpZ2h0IGhhcyB0byBiZSBmcm9tIHRoZSBmdXR1cmUDCQAAZgAAAAIAAAAAAAAAAAAFAAAAC3RpY2tldFByaWNlCQAAAgAAAAECAAAALlRpY2tldCBwcmljZSBoYXMgdG8gYmUgemVybyBvciBwb3NpdGl2ZSBudW1iZXIEAAAADWV2ZW50RHVyYXRpb24EAAAAByRtYXRjaDAFAAAADmR1cmF0aW9uSW5TZWNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWQFAAAAByRtYXRjaDADCQAAZgAAAAIAAAAAAAAAAAEFAAAAAWQJAAACAAAAAQIAAAAoRXZlbnQgZHVyYXRpb24gaGFzIHRvIGJlIHBvc2l0aXZlIG51bWJlcgUAAAABZAUAAAAEdW5pdAQAAAAQZXZlbnRUaWNrZXRDb3VudAQAAAAHJG1hdGNoMAUAAAALdGlja2V0Q291bnQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAACdGMFAAAAByRtYXRjaDADCQAAZgAAAAIAAAAAAAAAAAEFAAAAAnRjCQAAAgAAAAECAAAALEV2ZW50IHRpY2tldCBjb3VudCBoYXMgdG8gYmUgcG9zaXRpdmUgbnVtYmVyBQAAAAJ0YwUAAAAEdW5pdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2xhc3RFdmVudElkeEtleQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAALbmV3RXZlbnRJZHgJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGdlbmVyYXRlRXZlbnREYXRhS2V5AAAAAQUAAAAKbmV3RXZlbnRJZAkBAAAAEnNlcmlhbGl6ZUV2ZW50RGF0YQAAAAsIBQAAAAFpAAAABmNhbGxlcgUAAAAFdGl0bGUFAAAAC2Rlc2NyaXB0aW9uBQAAAAtzdGFydEhlaWdodAUAAAALdGlja2V0UHJpY2UFAAAABHRhZ3MFAAAADWV2ZW50RHVyYXRpb24FAAAAB3BpY3R1cmUFAAAABGxpbmsFAAAACGxvY2F0aW9uBQAAABBldmVudFRpY2tldENvdW50BQAAAANuaWwAAAABaQEAAAAJYnV5VGlja2V0AAAAAQAAAAdldmVudElkBAAAAAtzeXN0ZW1Bc3NldAkBAAAAEnVuc2FmZUdldEFzc2V0QnlJZAAAAAEFAAAAEnN5c3RlbUFzc2V0SWRCeXRlcwMJAABmAAAAAgAAAAAAAAAAAQkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwkAAAIAAAABAgAAACVZb3UgaGF2ZSB0byBhdHRhY2ggdGhlIHRpY2tldCBwYXltZW50BAAAAA10aWNrZXRQYXltZW50CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA1zeXN0ZW1Bc3NldElkCQACWAAAAAEIBQAAAAtzeXN0ZW1Bc3NldAAAAAJpZAMJAQAAAAEhAAAAAQkBAAAAD3ZhbGlkYXRlQXNzZXRJZAAAAAIIBQAAAA10aWNrZXRQYXltZW50AAAAB2Fzc2V0SWQFAAAADXN5c3RlbUFzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAAClUaWNrZXQgcGF5bWVudCBoYXMgdG8gYmUgaW4gc3lzdGVtIGFzc2V0IAUAAAANc3lzdGVtQXNzZXRJZAQAAAAJZXZlbnREYXRhCQEAAAASdW5zYWZlR2V0RXZlbnREYXRhAAAAAQUAAAAHZXZlbnRJZAQAAAAUYm91Z2h0VGlja2V0Q291bnRLZXkJAQAAABxnZW5lcmF0ZUJvdWdodFRpY2tldENvdW50S2V5AAAAAQUAAAAHZXZlbnRJZAQAAAARYm91Z2h0VGlja2V0Q291bnQEAAAAByRtYXRjaDAJAAQfAAAAAQUAAAAUYm91Z2h0VGlja2V0Q291bnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAFY291bnQFAAAAByRtYXRjaDAFAAAABWNvdW50AAAAAAAAAAAABAAAABF0aWNrZXRDb3VudE9yVW5pdAgFAAAACWV2ZW50RGF0YQAAAANfMTEDAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAEXRpY2tldENvdW50T3JVbml0CQAAZwAAAAIFAAAAEWJvdWdodFRpY2tldENvdW50CQEAAAAFdmFsdWUAAAABBQAAABF0aWNrZXRDb3VudE9yVW5pdAcJAAACAAAAAQIAAAAcQWxsIHRoZSB0aWNrZXRzIGFyZSBzb2xkIG91dAQAAAANdXNlclRpY2tldEtleQkBAAAAEWdlbmVyYXRlVGlja2V0S2V5AAAAAgUAAAAHZXZlbnRJZAgFAAAAAWkAAAAGY2FsbGVyAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQiAAAAAQUAAAANdXNlclRpY2tldEtleQkAAAIAAAABAgAAABlZb3UgYWxyZWFkeSBoYXZlIGEgdGlja2V0BAAAABBldmVudFRpY2tldFByaWNlCAUAAAAJZXZlbnREYXRhAAAAAl81AwkAAGYAAAACBQAAABBldmVudFRpY2tldFByaWNlCAUAAAANdGlja2V0UGF5bWVudAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAAD9BdHRhY2hlZCB0aWNrZXQgcGF5bWVudCBhbW91bnQgaXMgbGVzcyB0aGVuIGV2ZW50IHRpY2tldCBwcmljZSAJAAGkAAAAAQUAAAAQZXZlbnRUaWNrZXRQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUYm91Z2h0VGlja2V0Q291bnRLZXkJAABkAAAAAgUAAAARYm91Z2h0VGlja2V0Q291bnQAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANdXNlclRpY2tldEtleQkBAAAAE3NlcmlhbGl6ZVRpY2tldERhdGEAAAAECAUAAAABaQAAAA10cmFuc2FjdGlvbklkCAUAAAANdGlja2V0UGF5bWVudAAAAAZhbW91bnQFAAAABHVuaXQFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAABZnaXZlQml0b2dyYXBoRm9yVGlja2V0AAAAAwAAAAh0aWNrZXRJZAAAAA1iaXRvZ3JhcGhOYW1lAAAAEWJpdG9ncmFwaE1ldGFkYXRhAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABBQAAAAh0aWNrZXRJZAkAAAIAAAABAgAAABZUaWNrZXQgZG9lcyBub3QgZXhpc3RzBAAAAAp0aWNrZXREYXRhCQEAAAATdW5zYWZlR2V0VGlja2V0RGF0YQAAAAEFAAAACHRpY2tldElkBAAAABFiaXRvZ3JhcGhJZE9yVW5pdAgFAAAACnRpY2tldERhdGEAAAACXzQDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAARYml0b2dyYXBoSWRPclVuaXQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAE1RoZXJlIGlzIGJpdG9ncmFwaCAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAARYml0b2dyYXBoSWRPclVuaXQCAAAAKyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gZm9yIHRoZSB0aWNrZXQEAAAAC3RpY2tldE93bmVyCQEAAAAYdW5zYWZlRXh0cmFjdFRpY2tldE93bmVyAAAAAQUAAAAIdGlja2V0SWQEAAAAFWNyZWF0ZUJpdG9ncmFwaFJlc3VsdAkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAG2ZhY3RvcnlDb250cmFjdEFkZHJlc3NCeXRlcwIAAAAPY3JlYXRlQml0b2dyYXBoCQAETAAAAAIFAAAADWJpdG9ncmFwaE5hbWUJAARMAAAAAgUAAAARYml0b2dyYXBoTWV0YWRhdGEFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABVjcmVhdGVCaXRvZ3JhcGhSZXN1bHQFAAAAFWNyZWF0ZUJpdG9ncmFwaFJlc3VsdAQAAAAQYml0b2dyYXBoQXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAVY3JlYXRlQml0b2dyYXBoUmVzdWx0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAFyBQAAAAckbWF0Y2gwBQAAAAFyCQAAAgAAAAECAAAAKUVycm9yIG9jY3VycmVkIHdoaWxlIGNyZWF0aW5nIGEgYml0b2dyYXBoCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3RpY2tldE93bmVyAAAAAAAAAAABBQAAABBiaXRvZ3JhcGhBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACHRpY2tldElkCQEAAAATc2VyaWFsaXplVGlja2V0RGF0YQAAAAQIBQAAAAp0aWNrZXREYXRhAAAAAl8xCAUAAAAKdGlja2V0RGF0YQAAAAJfMggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAQYml0b2dyYXBoQXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5X18s8g==", "height": 1852023, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 3t6nwNCUtoKAnLsmFiEFAaR4VXsNf3GbBh75aNBj28i5 Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let systemAssetIdBytes = base58'7rck4P88F6QZEjJdU5uN56xCudCSAPYhoQJ4PJ9Wrnkc'
5+
6+let factoryContractAddressBytes = base58'3N4v4VAHbK5das4wB5QGripYbQFJ3PaB75e'
7+
8+let createEventMinimalServiceFeeAmount = 10
9+
10+let editEventMinimalServiceFeeAmount = 20
11+
12+let keyDataSeparator = ":"
13+
14+let valueDataSeparator = "__"
15+
16+func unsafeGetAssetById (assetId) = match assetInfo(assetId) {
17+ case asset: Asset =>
18+ asset
19+ case _ =>
20+ throw("Specified asset does not exist")
21+}
22+
23+
24+func validateAssetId (sourceAssetIdOrUnit,requiredAssetId) = {
25+ let sourceAssetId = if (isDefined(sourceAssetIdOrUnit))
26+ then toBase58String(value(sourceAssetIdOrUnit))
27+ else "WAVES"
28+ if ((sourceAssetId != requiredAssetId))
29+ then false
30+ else true
31+ }
32+
33+
34+func checkServiceFeePayment (operationTag,serviceFeePayment,requiredServiceFeeAmount) = {
35+ let systemAssetId = toBase58String(systemAssetIdBytes)
36+ if (!(validateAssetId(serviceFeePayment.assetId, systemAssetId)))
37+ then throw(((operationTag + " requires service fee payment in the system asset ") + systemAssetId))
38+ else if (if ((requiredServiceFeeAmount > serviceFeePayment.amount))
39+ then true
40+ else (serviceFeePayment.amount > requiredServiceFeeAmount))
41+ then throw((("Attached service fee payment amount is not equal to required service fee (" + toString(requiredServiceFeeAmount)) + ")"))
42+ else unit
43+ }
44+
45+
46+func lastEventIdxKey (addr) = makeString([toString(addr), "last_event_idx"], keyDataSeparator)
47+
48+
49+func lastEventRequestIdx (addr) = match getInteger(this, lastEventIdxKey(addr)) {
50+ case i: Int =>
51+ i
52+ case _ =>
53+ 1
54+}
55+
56+
57+func generateNewEventIdx (addr) = (lastEventRequestIdx(addr) + 1)
58+
59+
60+func generateEventId (addr,idx) = makeString([toString(addr), toString(idx)], keyDataSeparator)
61+
62+
63+func generateEventDataKey (eventId) = makeString(["event", eventId, "data"], keyDataSeparator)
64+
65+
66+func serializeEventData (creatorAddress,title,description,startHeight,ticketPrice,tags,durationOrUnit,pictureOrUnit,linkOrUnit,locationOrUnit,ticketCountOrUnit) = {
67+ let duration = match durationOrUnit {
68+ case duration: Int =>
69+ toString(duration)
70+ case _ =>
71+ ""
72+ }
73+ let picture = match pictureOrUnit {
74+ case picture: String =>
75+ picture
76+ case _ =>
77+ ""
78+ }
79+ let link = match linkOrUnit {
80+ case link: String =>
81+ link
82+ case _ =>
83+ ""
84+ }
85+ let location = match locationOrUnit {
86+ case location: String =>
87+ location
88+ case _ =>
89+ ""
90+ }
91+ let ticketCount = match ticketCountOrUnit {
92+ case ticketCount: Int =>
93+ toString(ticketCount)
94+ case _ =>
95+ ""
96+ }
97+ makeString([toString(creatorAddress), title, description, toString(startHeight), toString(ticketPrice), makeString(tags, ","), duration, picture, link, location, ticketCount], valueDataSeparator)
98+ }
99+
100+
101+func deserializeEventData (value) = {
102+ let eventData = split(value, valueDataSeparator)
103+ let creatorAddress = addressFromString(eventData[0])
104+ let title = eventData[1]
105+ let description = eventData[2]
106+ let startHeight = parseIntValue(eventData[3])
107+ let ticketPrice = parseIntValue(eventData[4])
108+ let tags = split(eventData[5], ",")
109+ let durationOrUnit = parseInt(eventData[6])
110+ let pictureOrUnit = if ((eventData[7] == ""))
111+ then unit
112+ else eventData[7]
113+ let linkOrUnit = if ((eventData[8] == ""))
114+ then unit
115+ else eventData[8]
116+ let locationOrUnit = if ((eventData[9] == ""))
117+ then unit
118+ else eventData[9]
119+ let ticketCountOrUnit = parseInt(eventData[10])
120+ $Tuple11(creatorAddress, title, description, startHeight, ticketPrice, tags, durationOrUnit, pictureOrUnit, linkOrUnit, locationOrUnit, ticketCountOrUnit)
121+ }
122+
123+
124+func unsafeGetEventData (eventId) = {
125+ let eventDataKey = generateEventDataKey(eventId)
126+ let eventData = match getString(eventDataKey) {
127+ case s: String =>
128+ s
129+ case _ =>
130+ throw("Specified event not found")
131+ }
132+ deserializeEventData(eventData)
133+ }
134+
135+
136+func generateBoughtTicketCountKey (eventId) = makeString(["event", eventId, "ticket_count"], keyDataSeparator)
137+
138+
139+func generateTicketKey (eventId,userAddress) = makeString(["ticket", eventId, toString(userAddress)], keyDataSeparator)
140+
141+
142+func generateTicketDataKey (ticketId) = makeString(["ticket", ticketId, "data"], valueDataSeparator)
143+
144+
145+func serializeTicketData (buyTxId,buyPrice,swapTxId,bitographId) = makeString([toBase58String(buyTxId), toString(buyPrice), if (isDefined(swapTxId))
146+ then toBase58String(value(swapTxId))
147+ else "", if (isDefined(bitographId))
148+ then toBase58String(value(bitographId))
149+ else ""], valueDataSeparator)
150+
151+
152+func deserializeTicketData (value) = {
153+ let ticketData = split(value, valueDataSeparator)
154+ let buyTxId = fromBase58String(ticketData[0])
155+ let buyPrice = parseIntValue(ticketData[1])
156+ let swapTxIdOrUnit = match ticketData[2] {
157+ case s: String =>
158+ fromBase58String(s)
159+ case _ =>
160+ unit
161+ }
162+ let bitographIdOrUnit = match ticketData[3] {
163+ case s: String =>
164+ fromBase58String(s)
165+ case _ =>
166+ unit
167+ }
168+ $Tuple4(buyTxId, buyPrice, swapTxIdOrUnit, bitographIdOrUnit)
169+ }
170+
171+
172+func unsafeGetTicketData (ticketId) = {
173+ let ticketDataKey = generateTicketDataKey(ticketId)
174+ let ticketData = match getString(ticketDataKey) {
175+ case s: String =>
176+ s
177+ case _ =>
178+ throw("Specified ticket not found")
179+ }
180+ deserializeTicketData(ticketData)
181+ }
182+
183+
184+func unsafeExtractTicketOwner (ticketId) = {
185+ let keyData = split(ticketId, keyDataSeparator)
186+ addressFromStringValue(keyData[3])
187+ }
188+
189+
190+func isNFT (asset) = if (if ((asset.decimals == 0))
191+ then true
192+ else (asset.quantity == 1))
193+ then true
194+ else !(asset.reissuable)
195+
196+
197+@Callable(i)
198+func createEvent (title,description,startHeight,ticketPrice,tags,durationInSecs,picture,link,location,ticketCount) = {
199+ let systemAsset = unsafeGetAssetById(systemAssetIdBytes)
200+ if ((1 > size(i.payments)))
201+ then throw("You have to send service fee as payment")
202+ else {
203+ let serviceFeePayment = i.payments[1]
204+ if (isDefined(checkServiceFeePayment("Create event", serviceFeePayment, createEventMinimalServiceFeeAmount)))
205+ then throw("Reached unreachable state")
206+ else {
207+ let newEventIdx = generateNewEventIdx(i.caller)
208+ let newEventId = generateEventId(i.caller, newEventIdx)
209+ if ((startHeight > height))
210+ then throw("Event start height has to be from the future")
211+ else if ((0 > ticketPrice))
212+ then throw("Ticket price has to be zero or positive number")
213+ else {
214+ let eventDuration = match durationInSecs {
215+ case d: Int =>
216+ if ((1 > d))
217+ then throw("Event duration has to be positive number")
218+ else d
219+ case _ =>
220+ unit
221+ }
222+ let eventTicketCount = match ticketCount {
223+ case tc: Int =>
224+ if ((1 > tc))
225+ then throw("Event ticket count has to be positive number")
226+ else tc
227+ case _ =>
228+ unit
229+ }
230+[IntegerEntry(lastEventIdxKey(i.caller), newEventIdx), StringEntry(generateEventDataKey(newEventId), serializeEventData(i.caller, title, description, startHeight, ticketPrice, tags, eventDuration, picture, link, location, eventTicketCount))]
231+ }
232+ }
233+ }
234+ }
235+
236+
237+
238+@Callable(i)
239+func buyTicket (eventId) = {
240+ let systemAsset = unsafeGetAssetById(systemAssetIdBytes)
241+ if ((1 > size(i.payments)))
242+ then throw("You have to attach the ticket payment")
243+ else {
244+ let ticketPayment = i.payments[0]
245+ let systemAssetId = toBase58String(systemAsset.id)
246+ if (!(validateAssetId(ticketPayment.assetId, systemAssetId)))
247+ then throw(("Ticket payment has to be in system asset " + systemAssetId))
248+ else {
249+ let eventData = unsafeGetEventData(eventId)
250+ let boughtTicketCountKey = generateBoughtTicketCountKey(eventId)
251+ let boughtTicketCount = match getInteger(boughtTicketCountKey) {
252+ case count: Int =>
253+ count
254+ case _ =>
255+ 0
256+ }
257+ let ticketCountOrUnit = eventData._11
258+ if (if (isDefined(ticketCountOrUnit))
259+ then (boughtTicketCount >= value(ticketCountOrUnit))
260+ else false)
261+ then throw("All the tickets are sold out")
262+ else {
263+ let userTicketKey = generateTicketKey(eventId, i.caller)
264+ if (isDefined(getString(userTicketKey)))
265+ then throw("You already have a ticket")
266+ else {
267+ let eventTicketPrice = eventData._5
268+ if ((eventTicketPrice > ticketPayment.amount))
269+ then throw(("Attached ticket payment amount is less then event ticket price " + toString(eventTicketPrice)))
270+ else [IntegerEntry(boughtTicketCountKey, (boughtTicketCount + 1)), StringEntry(userTicketKey, serializeTicketData(i.transactionId, ticketPayment.amount, unit, unit))]
271+ }
272+ }
273+ }
274+ }
275+ }
276+
277+
278+
279+@Callable(i)
280+func giveBitographForTicket (ticketId,bitographName,bitographMetadata) = if (!(isDefined(getString(ticketId))))
281+ then throw("Ticket does not exists")
282+ else {
283+ let ticketData = unsafeGetTicketData(ticketId)
284+ let bitographIdOrUnit = ticketData._4
285+ if (isDefined(bitographIdOrUnit))
286+ then throw((("There is bitograph " + toBase58String(value(bitographIdOrUnit))) + " that has already been given for the ticket"))
287+ else {
288+ let ticketOwner = unsafeExtractTicketOwner(ticketId)
289+ let createBitographResult = invoke(Address(factoryContractAddressBytes), "createBitograph", [bitographName, bitographMetadata], nil)
290+ if ((createBitographResult == createBitographResult))
291+ then {
292+ let bitographAssetId = match createBitographResult {
293+ case r: ByteVector =>
294+ r
295+ case _ =>
296+ throw("Error occurred while creating a bitograph")
297+ }
298+[ScriptTransfer(ticketOwner, 1, bitographAssetId), StringEntry(ticketId, serializeTicketData(ticketData._1, ticketData._2, i.transactionId, bitographAssetId))]
299+ }
300+ else throw("Strict value is not equal to itself.")
301+ }
302+ }
303+
304+
305+@Verifier(tx)
306+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
307+

github/deemru/w8io/873ac7e 
32.82 ms