tx · Gty6JSF3qs6n8wdrPuswVzrxQRd68T2vPqLcYNpGZdeT

3N2ei3UswgQGq9NmwifLkuqeMQcZkAPHUmF:  -0.01000000 Waves

2022.03.02 19:25 [1946593] smart account 3N2ei3UswgQGq9NmwifLkuqeMQcZkAPHUmF > SELF 0.00000000 Waves

{ "type": 13, "id": "Gty6JSF3qs6n8wdrPuswVzrxQRd68T2vPqLcYNpGZdeT", "fee": 1000000, "feeAssetId": null, "timestamp": 1646238353627, "version": 2, "chainId": 84, "sender": "3N2ei3UswgQGq9NmwifLkuqeMQcZkAPHUmF", "senderPublicKey": "CngCekZZBWdthtZPbqb1yY74HjwwCc7f28hsR9vGGSZr", "proofs": [ "5WSnLcUC9qPVEGqmi5P1uqmGXmcQasYFaenhT7PDAbzaRxRvhTFJnirW4DXQZQnay7f2ZzT6umuLiDru7WREDpTJ" ], "script": "base64:AAIFAAAAAAAAABwIAhIMCgoICAEBAQEYCAgIEgMKAQgSBQoDCAgIAAAAGQAAAAASc3lzdGVtQXNzZXRJZEJ5dGVzAQAAACBl2/7IbWHpVuwmUYs5w8vx8CJaoK7/XpSEcwFpn5187QAAAAAbZmFjdG9yeUNvbnRyYWN0QWRkcmVzc0J5dGVzAQAAABoBVKSIz4/LrUrKgYcmdcl3OfutIPleSLVTRQAAAAAiY3JlYXRlRXZlbnRNaW5pbWFsU2VydmljZUZlZUFtb3VudAAAAAAAAAAACgAAAAAgZWRpdEV2ZW50TWluaW1hbFNlcnZpY2VGZWVBbW91bnQAAAAAAAAAABQAAAAAEGtleURhdGFTZXBhcmF0b3ICAAAAAToAAAAAEnZhbHVlRGF0YVNlcGFyYXRvcgIAAAACX18BAAAAEnVuc2FmZUdldEFzc2V0QnlJZAAAAAEAAAAHYXNzZXRJZAQAAAAHJG1hdGNoMAkAA+wAAAABBQAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVBc3NldAQAAAAFYXNzZXQFAAAAByRtYXRjaDAFAAAABWFzc2V0CQAAAgAAAAECAAAAHlNwZWNpZmllZCBhc3NldCBkb2VzIG5vdCBleGlzdAEAAAAPdmFsaWRhdGVBc3NldElkAAAAAgAAABNzb3VyY2VBc3NldElkT3JVbml0AAAAD3JlcXVpcmVkQXNzZXRJZAQAAAANc291cmNlQXNzZXRJZAMJAQAAAAlpc0RlZmluZWQAAAABBQAAABNzb3VyY2VBc3NldElkT3JVbml0CQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAE3NvdXJjZUFzc2V0SWRPclVuaXQCAAAABVdBVkVTAwkBAAAAAiE9AAAAAgUAAAANc291cmNlQXNzZXRJZAUAAAAPcmVxdWlyZWRBc3NldElkBwYBAAAAFmNoZWNrU2VydmljZUZlZVBheW1lbnQAAAADAAAADG9wZXJhdGlvblRhZwAAABFzZXJ2aWNlRmVlUGF5bWVudAAAABhyZXF1aXJlZFNlcnZpY2VGZWVBbW91bnQEAAAADXN5c3RlbUFzc2V0SWQJAAJYAAAAAQUAAAASc3lzdGVtQXNzZXRJZEJ5dGVzAwkBAAAAASEAAAABCQEAAAAPdmFsaWRhdGVBc3NldElkAAAAAggFAAAAEXNlcnZpY2VGZWVQYXltZW50AAAAB2Fzc2V0SWQFAAAADXN5c3RlbUFzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIFAAAADG9wZXJhdGlvblRhZwIAAAAyIHJlcXVpcmVzIHNlcnZpY2UgZmVlIHBheW1lbnQgaW4gdGhlIHN5c3RlbSBhc3NldCAFAAAADXN5c3RlbUFzc2V0SWQDAwkAAGYAAAACBQAAABhyZXF1aXJlZFNlcnZpY2VGZWVBbW91bnQIBQAAABFzZXJ2aWNlRmVlUGF5bWVudAAAAAZhbW91bnQGCQAAZgAAAAIIBQAAABFzZXJ2aWNlRmVlUGF5bWVudAAAAAZhbW91bnQFAAAAGHJlcXVpcmVkU2VydmljZUZlZUFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAABKQXR0YWNoZWQgc2VydmljZSBmZWUgcGF5bWVudCBhbW91bnQgaXMgbm90IGVxdWFsIHRvIHJlcXVpcmVkIHNlcnZpY2UgZmVlICgJAAGkAAAAAQUAAAAYcmVxdWlyZWRTZXJ2aWNlRmVlQW1vdW50AgAAAAEpBQAAAAR1bml0AQAAAA9sYXN0RXZlbnRJZHhLZXkAAAABAAAABGFkZHIJAAS5AAAAAgkABEwAAAACCQAEJQAAAAEFAAAABGFkZHIJAARMAAAAAgIAAAAObGFzdF9ldmVudF9pZHgFAAAAA25pbAUAAAAQa2V5RGF0YVNlcGFyYXRvcgEAAAATbGFzdEV2ZW50UmVxdWVzdElkeAAAAAEAAAAEYWRkcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQEAAAAPbGFzdEV2ZW50SWR4S2V5AAAAAQUAAAAEYWRkcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFpBQAAAAckbWF0Y2gwBQAAAAFpAAAAAAAAAAABAQAAABNnZW5lcmF0ZU5ld0V2ZW50SWR4AAAAAQAAAARhZGRyCQAAZAAAAAIJAQAAABNsYXN0RXZlbnRSZXF1ZXN0SWR4AAAAAQUAAAAEYWRkcgAAAAAAAAAAAQEAAAAPZ2VuZXJhdGVFdmVudElkAAAAAgAAAARhZGRyAAAAA2lkeAkABLkAAAACCQAE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AAAAEWJpdG9ncmFwaElkT3JVbml0BAAAAAckbWF0Y2gwCQABkQAAAAIFAAAACnRpY2tldERhdGEAAAAAAAAAAAMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzBQAAAAR1bml0CQAFFgAAAAQFAAAAB2J1eVR4SWQFAAAACGJ1eVByaWNlBQAAAA9pc3N1ZVR4SWRPclVuaXQFAAAAEWJpdG9ncmFwaElkT3JVbml0AQAAABN1bnNhZmVHZXRUaWNrZXREYXRhAAAAAQAAAA10aWNrZXREYXRhS2V5BAAAAAp0aWNrZXREYXRhBAAAAAckbWF0Y2gwCQAEIgAAAAEFAAAADXRpY2tldERhdGFLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwkAAAIAAAABAgAAABpTcGVjaWZpZWQgdGlja2V0IG5vdCBmb3VuZAkBAAAAFWRlc2VyaWFsaXplVGlja2V0RGF0YQAAAAEFAAAACnRpY2tldERhdGEBAAAAGHVuc2FmZUV4dHJhY3RUaWNrZXRPd25lcgAAAAEAAAAIdGlja2V0SWQEAAAAB2tleURhdGEJAAS1AAAAAgUAAAAIdGlja2V0SWQFAAAAEGtleURhdGFTZXBhcmF0b3IJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAHa2V5RGF0YQAAAAAAAAAAAwEAAAAFaXNORlQAAAABAAAABWFzc2V0AwMJAAAAAAAAAggFAAAABWFzc2V0AAAACGRlY2ltYWxzAAAAAAAAAAAABgkAAAAAAAACCAUAAAAFYXNzZXQAAAAIcXVhbnRpdHkAAAAAAAAAAAEGCQEAAAABIQAAAAEIBQAAAAVhc3NldAAAAApyZWlzc3VhYmxlAAAAAwAAAAFpAQAAAAtjcmVhdGVFdmVudAAAAAoAAAAFdGl0bGUAAAALZGVzY3JpcHRpb24AAAALc3RhcnRIZWlnaHQAAAAOZHVyYXRpb25JblNlY3MAAAALdGlja2V0UHJpY2UAAAALdGlja2V0Q291bnQAAAAEdGFncwAAAAdwaWN0dXJlAAAABGxpbmsAAAAIbG9jYXRpb24EAAAAC3N5c3RlbUFzc2V0CQEAAAASdW5zYWZlR2V0QXNzZXRCeUlkAAAAAQUAAAASc3lzdGVtQXNzZXRJZEJ5dGVzAwkAAGYAAAACAAAAAAAAAAABCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzCQAAAgAAAAECAAAAJ1lvdSBoYXZlIHRvIHNlbmQgc2VydmljZSBmZWUgYXMgcGF5bWVudAQAAAARc2VydmljZUZlZVBheW1lbnQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAAJaXNEZWZpbmVkAAAAAQkBAAAAFmNoZWNrU2VydmljZUZlZVBheW1lbnQAAAADAgAAAAxDcmVhdGUgZXZlbnQFAAAAEXNlcnZpY2VGZWVQYXltZW50BQAAACJjcmVhdGVFdmVudE1pbmltYWxTZXJ2aWNlRmVlQW1vdW50CQAAAgAAAAECAAAAGVJlYWNoZWQgdW5yZWFjaGFibGUgc3RhdGUEAAAAC25ld0V2ZW50SWR4CQEAAAATZ2VuZXJhdGVOZXdFdmVudElkeAAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAKbmV3RXZlbnRJZAkBAAAAD2dlbmVyYXRlRXZlbnRJZAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAALbmV3RXZlbnRJZHgDCQAAZgAAAAIFAAAABmhlaWdodAUAAAALc3RhcnRIZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACxFdmVudCBzdGFydCBoZWlnaHQgaGFzIHRvIGJlIGluIHRoZSBmdXR1cmUgKAkAAaQAAAABBQAAAAZoZWlnaHQCAAAAAyA+IAkAAaQAAAABBQAAAAtzdGFydEhlaWdodAIAAAABKQMJAABmAAAAAgAAAAAAAAAAAQUAAAAOZHVyYXRpb25JblNlY3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAKkV2ZW50IGR1cmF0aW9uIGhhcyB0byBiZSBwb3NpdGl2ZSBudW1iZXIgKAkAAaQAAAABBQAAAA5kdXJhdGlvbkluU2VjcwIAAAABKQMJAABmAAAAAgAAAAAAAAAAAAUAAAALdGlja2V0UHJpY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAMFRpY2tldCBwcmljZSBoYXMgdG8gYmUgemVybyBvciBwb3NpdGl2ZSBudW1iZXIgKAkAAaQAAAABBQAAAAt0aWNrZXRQcmljZQIAAAABKQMJAABmAAAAAgAAAAAAAAAAAQUAAAALdGlja2V0Q291bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAKFRpY2tldCBjb3VudCBoYXMgdG8gYmUgcG9zaXRpdmUgbnVtYmVyICgJAAGkAAAAAQUAAAALdGlja2V0Q291bnQCAAAAASkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9sYXN0RXZlbnRJZHhLZXkAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAC25ld0V2ZW50SWR4CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABRnZW5lcmF0ZUV2ZW50RGF0YUtleQAAAAEFAAAACm5ld0V2ZW50SWQJAQAAABJzZXJpYWxpemVFdmVudERhdGEAAAALCAUAAAABaQAAAAZjYWxsZXIFAAAABXRpdGxlBQAAAAtkZXNjcmlwdGlvbgUAAAALc3RhcnRIZWlnaHQFAAAADmR1cmF0aW9uSW5TZWNzBQAAAAt0aWNrZXRQcmljZQUAAAALdGlja2V0Q291bnQFAAAABHRhZ3MFAAAAB3BpY3R1cmUFAAAABGxpbmsFAAAACGxvY2F0aW9uBQAAAANuaWwAAAABaQEAAAAJYnV5VGlja2V0AAAAAQAAAAdldmVudElkBAAAAAtzeXN0ZW1Bc3NldAkBAAAAEnVuc2FmZUdldEFzc2V0QnlJZAAAAAEFAAAAEnN5c3RlbUFzc2V0SWRCeXRlcwMJAABmAAAAAgAAAAAAAAAAAQkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwkAAAIAAAABAgAAACVZb3UgaGF2ZSB0byBhdHRhY2ggdGhlIHRpY2tldCBwYXltZW50BAAAAA10aWNrZXRQYXltZW50CQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA1zeXN0ZW1Bc3NldElkCQACWAAAAAEIBQAAAAtzeXN0ZW1Bc3NldAAAAAJpZAMJAQAAAAEhAAAAAQkBAAAAD3ZhbGlkYXRlQXNzZXRJZAAAAAIIBQAAAA10aWNrZXRQYXltZW50AAAAB2Fzc2V0SWQFAAAADXN5c3RlbUFzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAAClUaWNrZXQgcGF5bWVudCBoYXMgdG8gYmUgaW4gc3lzdGVtIGFzc2V0IAUAAAANc3lzdGVtQXNzZXRJZAQAAAAJZXZlbnREYXRhCQEAAAASdW5zYWZlR2V0RXZlbnREYXRhAAAAAQUAAAAHZXZlbnRJZAQAAAAUYm91Z2h0VGlja2V0Q291bnRLZXkJAQAAABxnZW5lcmF0ZUJvdWdodFRpY2tldENvdW50S2V5AAAAAQUAAAAHZXZlbnRJZAQAAAARYm91Z2h0VGlja2V0Q291bnQEAAAAByRtYXRjaDAJAAQfAAAAAQUAAAAUYm91Z2h0VGlja2V0Q291bnRLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAFY291bnQFAAAAByRtYXRjaDAFAAAABWNvdW50AAAAAAAAAAAABAAAABB0b3RhbFRpY2tldENvdW50CAUAAAAJZXZlbnREYXRhAAAAAl83AwkAAGcAAAACBQAAABFib3VnaHRUaWNrZXRDb3VudAUAAAAQdG90YWxUaWNrZXRDb3VudAkAAAIAAAABAgAAABxBbGwgdGhlIHRpY2tldHMgYXJlIHNvbGQgb3V0BAAAAAh0aWNrZXRJZAkBAAAAEGdlbmVyYXRlVGlja2V0SWQAAAACBQAAAAdldmVudElkCAUAAAABaQAAAAZjYWxsZXIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABBQAAAAh0aWNrZXRJZAkAAAIAAAABAgAAABlZb3UgYWxyZWFkeSBoYXZlIGEgdGlja2V0BAAAABBldmVudFRpY2tldFByaWNlCAUAAAAJZXZlbnREYXRhAAAAAl82AwkAAGYAAAACBQAAABBldmVudFRpY2tldFByaWNlCAUAAAANdGlja2V0UGF5bWVudAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAAD9BdHRhY2hlZCB0aWNrZXQgcGF5bWVudCBhbW91bnQgaXMgbGVzcyB0aGVuIGV2ZW50IHRpY2tldCBwcmljZSAJAAGkAAAAAQUAAAAQZXZlbnRUaWNrZXRQcmljZQQAAAANdGlja2V0RGF0YUtleQkBAAAAFWdlbmVyYXRlVGlja2V0RGF0YUtleQAAAAEFAAAACHRpY2tldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABRib3VnaHRUaWNrZXRDb3VudEtleQkAAGQAAAACBQAAABFib3VnaHRUaWNrZXRDb3VudAAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA10aWNrZXREYXRhS2V5CQEAAAATc2VyaWFsaXplVGlja2V0RGF0YQAAAAQIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQIBQAAAA10aWNrZXRQYXltZW50AAAABmFtb3VudAUAAAAEdW5pdAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAAF2lzc3VlQml0b2dyYXBoRm9yVGlja2V0AAAAAwAAAAh0aWNrZXRJZAAAAA1iaXRvZ3JhcGhOYW1lAAAAEWJpdG9ncmFwaE1ldGFkYXRhAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABBQAAAAh0aWNrZXRJZAkAAAIAAAABAgAAABVUaWNrZXQgZG9lcyBub3QgZXhpc3QEAAAADXRpY2tldERhdGFLZXkJAQAAABVnZW5lcmF0ZVRpY2tldERhdGFLZXkAAAABBQAAAAh0aWNrZXRJZAQAAAAKdGlja2V0RGF0YQkBAAAAE3Vuc2FmZUdldFRpY2tldERhdGEAAAABBQAAAA10aWNrZXREYXRhS2V5BAAAABFiaXRvZ3JhcGhJZE9yVW5pdAgFAAAACnRpY2tldERhdGEAAAACXzQDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAARYml0b2dyYXBoSWRPclVuaXQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAE1RoZXJlIGlzIGJpdG9ncmFwaCAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAARYml0b2dyYXBoSWRPclVuaXQCAAAAKyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gZm9yIHRoZSB0aWNrZXQEAAAAC3RpY2tldE93bmVyCQEAAAAYdW5zYWZlRXh0cmFjdFRpY2tldE93bmVyAAAAAQUAAAAIdGlja2V0SWQEAAAAFWNyZWF0ZUJpdG9ncmFwaFJlc3VsdAkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAG2ZhY3RvcnlDb250cmFjdEFkZHJlc3NCeXRlcwIAAAAPY3JlYXRlQml0b2dyYXBoCQAETAAAAAIFAAAADWJpdG9ncmFwaE5hbWUJAARMAAAAAgUAAAARYml0b2dyYXBoTWV0YWRhdGEFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABVjcmVhdGVCaXRvZ3JhcGhSZXN1bHQFAAAAFWNyZWF0ZUJpdG9ncmFwaFJlc3VsdAQAAAAQYml0b2dyYXBoQXNzZXRJZAQAAAAHJG1hdGNoMAUAAAAVY3JlYXRlQml0b2dyYXBoUmVzdWx0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAFyBQAAAAckbWF0Y2gwBQAAAAFyCQAAAgAAAAECAAAAKUVycm9yIG9jY3VycmVkIHdoaWxlIGNyZWF0aW5nIGEgYml0b2dyYXBoCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3RpY2tldE93bmVyAAAAAAAAAAABBQAAABBiaXRvZ3JhcGhBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADXRpY2tldERhdGFLZXkJAQAAABNzZXJpYWxpemVUaWNrZXREYXRhAAAABAgFAAAACnRpY2tldERhdGEAAAACXzEIBQAAAAp0aWNrZXREYXRhAAAAAl8yCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAABBiaXRvZ3JhcGhBc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkbtSky", "height": 1946593, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none 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,duration,ticketPrice,ticketCount,tags,pictureOrUnit,linkOrUnit,locationOrUnit) = {
67+ let picture = match pictureOrUnit {
68+ case picture: String =>
69+ picture
70+ case _ =>
71+ ""
72+ }
73+ let link = match linkOrUnit {
74+ case link: String =>
75+ link
76+ case _ =>
77+ ""
78+ }
79+ let location = match locationOrUnit {
80+ case location: String =>
81+ location
82+ case _ =>
83+ ""
84+ }
85+ makeString([toString(creatorAddress), toBase64String(toBytes(title)), toBase64String(toBytes(description)), toString(startHeight), toString(duration), toString(ticketPrice), toString(ticketCount), toBase64String(toBytes(makeString(tags, ","))), toBase64String(toBytes(picture)), toBase64String(toBytes(link)), toBase64String(toBytes(location))], valueDataSeparator)
86+ }
87+
88+
89+func deserializeEventData (value) = {
90+ let eventData = split(value, valueDataSeparator)
91+ let creatorAddress = addressFromString(eventData[0])
92+ let title = eventData[1]
93+ let description = eventData[2]
94+ let startHeight = parseIntValue(eventData[3])
95+ let duration = parseInt(eventData[4])
96+ let ticketPrice = parseIntValue(eventData[5])
97+ let ticketCount = parseIntValue(eventData[6])
98+ let tags = split(eventData[7], ",")
99+ let pictureOrUnit = if ((eventData[8] == ""))
100+ then unit
101+ else eventData[8]
102+ let linkOrUnit = if ((eventData[9] == ""))
103+ then unit
104+ else eventData[9]
105+ let locationOrUnit = if ((eventData[10] == ""))
106+ then unit
107+ else eventData[10]
108+ $Tuple11(creatorAddress, title, description, startHeight, duration, ticketPrice, ticketCount, tags, pictureOrUnit, linkOrUnit, locationOrUnit)
109+ }
110+
111+
112+func unsafeGetEventData (eventId) = {
113+ let eventDataKey = generateEventDataKey(eventId)
114+ let eventData = match getString(eventDataKey) {
115+ case s: String =>
116+ s
117+ case _ =>
118+ throw("Specified event not found")
119+ }
120+ deserializeEventData(eventData)
121+ }
122+
123+
124+func generateBoughtTicketCountKey (eventId) = makeString(["event", eventId, "ticket_count"], keyDataSeparator)
125+
126+
127+func generateTicketId (eventId,userAddress) = makeString([eventId, toString(userAddress)], keyDataSeparator)
128+
129+
130+func generateTicketDataKey (ticketId) = makeString(["ticket", ticketId, "data"], keyDataSeparator)
131+
132+
133+func serializeTicketData (buyTxId,buyPrice,issueTxId,bitographId) = makeString([toBase58String(buyTxId), toString(buyPrice), if (isDefined(issueTxId))
134+ then toBase58String(value(issueTxId))
135+ else "", if (isDefined(bitographId))
136+ then toBase58String(value(bitographId))
137+ else ""], valueDataSeparator)
138+
139+
140+func deserializeTicketData (value) = {
141+ let ticketData = split(value, valueDataSeparator)
142+ let buyTxId = fromBase58String(ticketData[0])
143+ let buyPrice = parseIntValue(ticketData[1])
144+ let issueTxIdOrUnit = match ticketData[2] {
145+ case s: String =>
146+ fromBase58String(s)
147+ case _ =>
148+ unit
149+ }
150+ let bitographIdOrUnit = match ticketData[3] {
151+ case s: String =>
152+ fromBase58String(s)
153+ case _ =>
154+ unit
155+ }
156+ $Tuple4(buyTxId, buyPrice, issueTxIdOrUnit, bitographIdOrUnit)
157+ }
158+
159+
160+func unsafeGetTicketData (ticketDataKey) = {
161+ let ticketData = match getString(ticketDataKey) {
162+ case s: String =>
163+ s
164+ case _ =>
165+ throw("Specified ticket not found")
166+ }
167+ deserializeTicketData(ticketData)
168+ }
169+
170+
171+func unsafeExtractTicketOwner (ticketId) = {
172+ let keyData = split(ticketId, keyDataSeparator)
173+ addressFromStringValue(keyData[3])
174+ }
175+
176+
177+func isNFT (asset) = if (if ((asset.decimals == 0))
178+ then true
179+ else (asset.quantity == 1))
180+ then true
181+ else !(asset.reissuable)
182+
183+
184+@Callable(i)
185+func createEvent (title,description,startHeight,durationInSecs,ticketPrice,ticketCount,tags,picture,link,location) = {
186+ let systemAsset = unsafeGetAssetById(systemAssetIdBytes)
187+ if ((1 > size(i.payments)))
188+ then throw("You have to send service fee as payment")
189+ else {
190+ let serviceFeePayment = i.payments[0]
191+ if (isDefined(checkServiceFeePayment("Create event", serviceFeePayment, createEventMinimalServiceFeeAmount)))
192+ then throw("Reached unreachable state")
193+ else {
194+ let newEventIdx = generateNewEventIdx(i.caller)
195+ let newEventId = generateEventId(i.caller, newEventIdx)
196+ if ((height > startHeight))
197+ then throw((((("Event start height has to be in the future (" + toString(height)) + " > ") + toString(startHeight)) + ")"))
198+ else if ((1 > durationInSecs))
199+ then throw((("Event duration has to be positive number (" + toString(durationInSecs)) + ")"))
200+ else if ((0 > ticketPrice))
201+ then throw((("Ticket price has to be zero or positive number (" + toString(ticketPrice)) + ")"))
202+ else if ((1 > ticketCount))
203+ then throw((("Ticket count has to be positive number (" + toString(ticketCount)) + ")"))
204+ else [IntegerEntry(lastEventIdxKey(i.caller), newEventIdx), StringEntry(generateEventDataKey(newEventId), serializeEventData(i.caller, title, description, startHeight, durationInSecs, ticketPrice, ticketCount, tags, picture, link, location))]
205+ }
206+ }
207+ }
208+
209+
210+
211+@Callable(i)
212+func buyTicket (eventId) = {
213+ let systemAsset = unsafeGetAssetById(systemAssetIdBytes)
214+ if ((1 > size(i.payments)))
215+ then throw("You have to attach the ticket payment")
216+ else {
217+ let ticketPayment = i.payments[0]
218+ let systemAssetId = toBase58String(systemAsset.id)
219+ if (!(validateAssetId(ticketPayment.assetId, systemAssetId)))
220+ then throw(("Ticket payment has to be in system asset " + systemAssetId))
221+ else {
222+ let eventData = unsafeGetEventData(eventId)
223+ let boughtTicketCountKey = generateBoughtTicketCountKey(eventId)
224+ let boughtTicketCount = match getInteger(boughtTicketCountKey) {
225+ case count: Int =>
226+ count
227+ case _ =>
228+ 0
229+ }
230+ let totalTicketCount = eventData._7
231+ if ((boughtTicketCount >= totalTicketCount))
232+ then throw("All the tickets are sold out")
233+ else {
234+ let ticketId = generateTicketId(eventId, i.caller)
235+ if (isDefined(getString(ticketId)))
236+ then throw("You already have a ticket")
237+ else {
238+ let eventTicketPrice = eventData._6
239+ if ((eventTicketPrice > ticketPayment.amount))
240+ then throw(("Attached ticket payment amount is less then event ticket price " + toString(eventTicketPrice)))
241+ else {
242+ let ticketDataKey = generateTicketDataKey(ticketId)
243+[IntegerEntry(boughtTicketCountKey, (boughtTicketCount + 1)), StringEntry(ticketDataKey, serializeTicketData(i.transactionId, ticketPayment.amount, unit, unit))]
244+ }
245+ }
246+ }
247+ }
248+ }
249+ }
250+
251+
252+
253+@Callable(i)
254+func issueBitographForTicket (ticketId,bitographName,bitographMetadata) = if (!(isDefined(getString(ticketId))))
255+ then throw("Ticket does not exist")
256+ else {
257+ let ticketDataKey = generateTicketDataKey(ticketId)
258+ let ticketData = unsafeGetTicketData(ticketDataKey)
259+ let bitographIdOrUnit = ticketData._4
260+ if (isDefined(bitographIdOrUnit))
261+ then throw((("There is bitograph " + toBase58String(value(bitographIdOrUnit))) + " that has already been given for the ticket"))
262+ else {
263+ let ticketOwner = unsafeExtractTicketOwner(ticketId)
264+ let createBitographResult = invoke(Address(factoryContractAddressBytes), "createBitograph", [bitographName, bitographMetadata], nil)
265+ if ((createBitographResult == createBitographResult))
266+ then {
267+ let bitographAssetId = match createBitographResult {
268+ case r: ByteVector =>
269+ r
270+ case _ =>
271+ throw("Error occurred while creating a bitograph")
272+ }
273+[ScriptTransfer(ticketOwner, 1, bitographAssetId), StringEntry(ticketDataKey, serializeTicketData(ticketData._1, ticketData._2, i.transactionId, bitographAssetId))]
274+ }
275+ else throw("Strict value is not equal to itself.")
276+ }
277+ }
278+
279+
280+@Verifier(tx)
281+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
282+

github/deemru/w8io/169f3d6 
22.81 ms