tx · F1mP7Xexou8MDJ4w3ppMWm3em7aXDE346bwd2MJWoke2

3PJDGXqeTDKKT6WCZguWEPULevAdDdddddx:  -0.01000000 Waves

2021.06.28 11:27 [2654733] smart account 3PJDGXqeTDKKT6WCZguWEPULevAdDdddddx > SELF 0.00000000 Waves

{ "type": 13, "id": "F1mP7Xexou8MDJ4w3ppMWm3em7aXDE346bwd2MJWoke2", "fee": 1000000, "feeAssetId": null, "timestamp": 1624868880898, "version": 2, "chainId": 87, "sender": "3PJDGXqeTDKKT6WCZguWEPULevAdDdddddx", "senderPublicKey": "Cy3shWvCvcc3xTUnqSxPHh5GD5KedcPmXt9QcYj5UDRw", "proofs": [ "413vSzyRUNVzynwF8HnRfMWofbGkqvUsgSYJWssSTYU5bPzohuEsyji9RuLkEv6tDsE7AftRGjoTt8qhzSbUHWAz" ], "script": "base64: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", "height": 2654733, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 2Ma4NGHSZWVhzYrFm4bpuUV4GCjARpEcE3zTchowvi9M Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let admin = addressFromPublicKey(base58'5584brtd1tLqMNJdCzvPFUEL1ujYRyi4Sy3zEZ5nTPsJ')
5+
6+let incubatorAddress = Address(base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv')
7+
8+let breederAddress = Address(base58'3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb')
9+
10+let serviceFee = 10000000
11+
12+let genotypeStringSize = 8
13+
14+let colorStringSize = 1
15+
16+let generationStringSize = 1
17+
18+let sterilityStatusNotImportant = 0
19+
20+let sterilityStatusCanBreed = 1
21+
22+let sterilityStatusSterile = 2
23+
24+let sterilityStatuses = (((nil :+ sterilityStatusNotImportant) :+ sterilityStatusCanBreed) :+ sterilityStatusSterile)
25+
26+let delimiter = "_"
27+
28+func checkFee (i) = {
29+ let fee = valueOrErrorMessage(i.payments[1], "Where is fee?")
30+ if (if (!(isDefined(fee.assetId)))
31+ then (fee.amount >= serviceFee)
32+ else false)
33+ then true
34+ else throw("Fee is 0.1 WAVES")
35+ }
36+
37+
38+func checkPayment (i) = match valueOrErrorMessage(i.payments[0], "Where is payment?").assetId {
39+ case _: Unit =>
40+ throw("Only ducks at the moment")
41+ case a: ByteVector =>
42+ if (if ((value(assetInfo(a)).issuer == incubatorAddress))
43+ then true
44+ else (value(assetInfo(a)).issuer == breederAddress))
45+ then true
46+ else throw("This is not a duck!")
47+ case _ =>
48+ throw("Match error")
49+}
50+
51+
52+func checkSterility (assetId,sterility,message) = {
53+ let assetSterility = match getInteger(breederAddress, (("asset_" + assetId) + "_children")) {
54+ case n: Int =>
55+ if ((n > 0))
56+ then sterilityStatusSterile
57+ else sterilityStatusCanBreed
58+ case _: Unit =>
59+ sterilityStatusCanBreed
60+ case _ =>
61+ throw("Match error")
62+ }
63+ if (if ((sterility == sterilityStatusNotImportant))
64+ then true
65+ else (sterility == assetSterility))
66+ then true
67+ else throw(message)
68+ }
69+
70+
71+@Callable(i)
72+func makeOffer (genotype,color,generation,sterility,password) = {
73+ let validations = (((((((nil :+ checkFee(i)) :+ checkPayment(i)) :+ (if (if ((genotype == ""))
74+ then true
75+ else if ((size(genotype) == genotypeStringSize))
76+ then !(contains(genotype, delimiter))
77+ else false)
78+ then true
79+ else throw("Invalid genotype format"))) :+ (if (if ((color == ""))
80+ then true
81+ else if ((size(color) == colorStringSize))
82+ then !(contains(color, delimiter))
83+ else false)
84+ then true
85+ else throw("Invalid color format"))) :+ (if (if ((generation == ""))
86+ then true
87+ else if ((size(generation) == generationStringSize))
88+ then !(contains(generation, delimiter))
89+ else false)
90+ then true
91+ else throw("Invalid generation format"))) :+ (if (containsElement(sterilityStatuses, sterility))
92+ then true
93+ else throw("Invalid sterility format"))) :+ (if (if ((password == ""))
94+ then true
95+ else (size(fromBase58String(password)) > 0))
96+ then true
97+ else throw("Invalid password format")))
98+ if (containsElement(validations, false))
99+ then throw()
100+ else {
101+ let owner = toBase58String(i.caller.bytes)
102+ let offerId = (("offer" + delimiter) + toBase58String(i.transactionId))
103+ let payment = value(i.payments[0])
104+ let offerData = ((((((((((((((owner + delimiter) + toBase58String(value(payment.assetId))) + delimiter) + toString(payment.amount)) + delimiter) + genotype) + delimiter) + color) + delimiter) + generation) + delimiter) + toString(sterility)) + delimiter) + toBase58String(fromBase58String(password)))
105+ let offerDataEntry = StringEntry(offerId, offerData)
106+ let fee = value(i.payments[1])
107+ let toAdmin = ScriptTransfer(admin, fee.amount, fee.assetId)
108+ ((nil :+ offerDataEntry) :+ toAdmin)
109+ }
110+ }
111+
112+
113+
114+@Callable(i)
115+func acceptOffer (offerId,sterility,signature) = {
116+ let offerData = valueOrErrorMessage(getString(this, offerId), "Invalid offer id")
117+ let offerDataParts = split(offerData, delimiter)
118+ let offerOwner = offerDataParts[0]
119+ let offerAssetId = offerDataParts[1]
120+ let offerAssetAmount = parseIntValue(offerDataParts[2])
121+ let offerGenotype = offerDataParts[3]
122+ let offerColor = offerDataParts[4]
123+ let offerGeneration = offerDataParts[5]
124+ let offerSterility = parseIntValue(offerDataParts[6])
125+ let offerPassword = offerDataParts[7]
126+ if (!(checkPayment(i)))
127+ then throw()
128+ else {
129+ let info = value(assetInfo(value(value(i.payments[0]).assetId)))
130+ let name = info.name
131+ let nameParts = split(name, "-")
132+ let genotype = nameParts[1]
133+ let generation = split(nameParts[2], "")[0]
134+ let color = split(nameParts[2], "")[1]
135+ let validations = (((((((nil :+ checkFee(i)) :+ checkSterility(offerAssetId, sterility, "Invalid target duck sterility")) :+ (if (if ((offerGenotype == ""))
136+ then true
137+ else (offerGenotype == genotype))
138+ then true
139+ else throw("Invalid genotype"))) :+ (if (if ((offerColor == ""))
140+ then true
141+ else (offerColor == color))
142+ then true
143+ else throw("Invalid color"))) :+ (if (if ((offerGeneration == ""))
144+ then true
145+ else (offerGeneration == generation))
146+ then true
147+ else throw("Invalid generation"))) :+ checkSterility(toBase58String(info.id), offerSterility, "Invalid sterility")) :+ (if (if ((offerPassword == ""))
148+ then true
149+ else sigVerify(i.callerPublicKey, fromBase58String(signature), fromBase58String(offerPassword)))
150+ then true
151+ else throw("Invalid password")))
152+ if (containsElement(validations, false))
153+ then throw()
154+ else {
155+ let payment = value(i.payments[0])
156+ let toOwner = ScriptTransfer(value(addressFromString(offerOwner)), payment.amount, payment.assetId)
157+ let toCaller = ScriptTransfer(i.caller, offerAssetAmount, fromBase58String(offerAssetId))
158+ let fee = value(i.payments[1])
159+ let toAdmin = ScriptTransfer(admin, fee.amount, fee.assetId)
160+ let offerDeleteEntry = DeleteEntry(offerId)
161+ ((((nil :+ toOwner) :+ toCaller) :+ toAdmin) :+ offerDeleteEntry)
162+ }
163+ }
164+ }
165+
166+
167+
168+@Callable(i)
169+func cancelOffer (offerId) = {
170+ let offerData = valueOrErrorMessage(getString(this, offerId), "Invalid offer id")
171+ let offerDataParts = split(offerData, delimiter)
172+ let offerOwner = value(addressFromString(offerDataParts[0]))
173+ let offerAssetId = fromBase58String(offerDataParts[1])
174+ let offerAssetAmount = parseIntValue(offerDataParts[2])
175+ if ((i.caller != offerOwner))
176+ then throw("Only offer owner can cancel it")
177+ else {
178+ let toOwner = ScriptTransfer(offerOwner, offerAssetAmount, offerAssetId)
179+ let offerDeleteEntry = DeleteEntry(offerId)
180+ ((nil :+ offerDeleteEntry) :+ toOwner)
181+ }
182+ }
183+
184+

github/deemru/w8io/6500d08 
24.23 ms