2021.05.26 17:23 [2607403] smart account 3P8yE1KVorsZvcw4ZoBACupLKHS7NHT8Gh1 > SELF 0.00000000 Waves

{ "type": 13, "id": "GqHwKVHfmbgvUcagrjYkMwodbNpoPpSEsw8KeKtgRa3r", "fee": 1400000, "feeAssetId": null, "timestamp": 1622039025174, "version": 2, "chainId": 87, "sender": "3P8yE1KVorsZvcw4ZoBACupLKHS7NHT8Gh1", "senderPublicKey": "KhhNHwEfzTSs8NZUMVx8dktYYnK1kerDpeWzgxiMyQ5", "proofs": [ "2RJ61DQJns3DJM2kVUy1A9N5DDJSaRrkcq8p9bMHmN91ex9QoqfVWKspwiCwRKRVjs16F36yZsu65GmqckFxRkSX" ], "script": "base64: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dHMgbGlmZXRpbWUuBAAAAA1icmVlZGVkU3RhdHVzCQEAAAAMY2FuQmVCcmVlZGVkAAAAAgkAAlkAAAABBQAAAAxmaXJzdEFzc2V0SWQJAAJZAAAAAQUAAAANc2Vjb25kQXNzZXRJZAMJAQAAAAIhPQAAAAIFAAAADWJyZWVkZWRTdGF0dXMCAAAABHRydWUJAAACAAAAAQkAASwAAAACAgAAAB9UaGVzZSBkdWNrcyBjYW5ub3QgYmUgYnJlZWRlZDogBQAAAA1icmVlZGVkU3RhdHVzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXREdWNrUGFyZW50S2V5AAAAAggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAAAAAAAAAAAAQUAAAAMZmlyc3RBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXREdWNrUGFyZW50S2V5AAAAAggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAAAAAAAAAAAAgUAAAANc2Vjb25kQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATZ2V0UHJvY2Vzc1N0YXR1c0tleQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAA9IYXRjaGluZ1N0YXJ0ZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlnZXRQcm9jZXNzRmluaXNoSGVpZ2h0S2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABBkZWxheUZvckhhdGNoaW5nBQAAAANuaWwAAAABaQEAAAASZmluaXNoRHVja0hhdGNoaW5nAAAAAQAAAAd0eElkU3RyBAAAAAR0eElkCQACWQAAAAEFAAAAB3R4SWRTdHIEAAAAEHByb2Nlc3NTdGF0dXNLZXkJAQAAABNnZXRQcm9jZXNzU3RhdHVzS2V5AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABHR4SWQEAAAAD2ZpbmlzaEhlaWdodEtleQkBAAAAGWdldFBy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", "height": 2607403, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C16UUBTTGYW79iKdJCTmSAeLcMgmVejhCywdhvus7oSb Next: 6Hkvkh3KqTXND8Fq13VSxd1Vtv77DvVqqpEVUd2TJ9xX Diff:
OldNewDifferences
77
88 let HatchingFinished = "BREEDING_FINISHED"
99
10-let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
10+let incubatorAddress = base58'3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh'
1111
1212 let MaxGeneration = 2
1313
112112 func canBeBreeded (asset1Id,asset2Id) = {
113113 let asset1Gen = split(value(assetInfo(asset1Id)).name, "")
114114 let asset2Gen = split(value(assetInfo(asset2Id)).name, "")
115- throw(((((("DEBUG:" + toString(value(indexOf(Generations, asset1Gen[14])))) + ", ") + toString(MaxGeneration)) + ", ") + toString(value(indexOf(Generations, asset2Gen[14])))))
115+ if ((value(indexOf(Generations, asset1Gen[14])) >= MaxGeneration))
116+ then (("you can only breed ducks with generation " + Generations[MaxGeneration]) + " and lower")
117+ else if ((value(indexOf(Generations, asset2Gen[14])) >= MaxGeneration))
118+ then (("you can only breed ducks with generation " + Generations[MaxGeneration]) + " and lower")
119+ else "true"
116120 }
117121
118122
129133 else (tryGetInteger((("asset_" + secondAssetId) + "_children")) > 0))
130134 then throw("One duck can be used for breeding only once in its lifetime.")
131135 else {
132- let breededStatus = canBeBreeded(fromBase58String(firstAssetId), fromBase58String(firstAssetId))
136+ let breededStatus = canBeBreeded(fromBase58String(firstAssetId), fromBase58String(secondAssetId))
133137 if ((breededStatus != "true"))
134138 then throw(("These ducks cannot be breeded: " + breededStatus))
135139 else [StringEntry(getDuckParentKey(i.transactionId, 1), firstAssetId), StringEntry(getDuckParentKey(i.transactionId, 2), secondAssetId), StringEntry(getProcessStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getProcessFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching))]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let delayForHatching = 2
55
66 let HatchingStarted = "BREEDING_STARTED"
77
88 let HatchingFinished = "BREEDING_FINISHED"
99
10-let incubatorAddress = base58'3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv'
10+let incubatorAddress = base58'3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh'
1111
1212 let MaxGeneration = 2
1313
1414 let Generations = ["G", "H", "I", "K", "L", "M"]
1515
1616 func getProcessStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
1717
1818
1919 func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
2020
2121
2222 func getDuckParentKey (txId,parentNum) = ((("inittx_" + toBase58String(txId)) + "_parent") + toString(parentNum))
2323
2424
2525 func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
2626
2727
2828 func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
2929
3030
3131 func tryGetInteger (key) = {
3232 let val = match getInteger(this, key) {
3333 case b: Int =>
3434 b
3535 case _ =>
3636 0
3737 }
3838 val
3939 }
4040
4141
4242 func tryGetString (key) = {
4343 let val = match getString(this, key) {
4444 case b: String =>
4545 b
4646 case _ =>
4747 ""
4848 }
4949 val
5050 }
5151
5252
5353 func determineGeneration (g1,g2) = {
5454 let gIndex = max([value(indexOf(Generations, g1)), value(indexOf(Generations, g2))])
5555 Generations[(gIndex + 1)]
5656 }
5757
5858
5959 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
6060 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
6161 let randomHash = sha256((txId + value(randomSeedBlock.vrf)))
6262 (toInt(randomHash, offset) % variants)
6363 }
6464
6565
6666 func getRandomGen (gen1,gen2,step,txId,hatchingFinishHeight) = {
6767 let randomNum = getRandomNumber(2, txId, hatchingFinishHeight, step)
6868 let gen = if ((randomNum == 0))
6969 then gen1
7070 else gen2
7171 gen
7272 }
7373
7474
7575 func generateDuck (txId,hatchingFinishHeight) = {
7676 let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 11)
7777 let color = if ((colorRandom == 0))
7878 then "Y"
7979 else if ((colorRandom == 1))
8080 then "G"
8181 else if ((colorRandom == 2))
8282 then "B"
8383 else "R"
8484 let parent1Id = fromBase58String(tryGetString(getDuckParentKey(txId, 1)))
8585 let parent2Id = fromBase58String(tryGetString(getDuckParentKey(txId, 2)))
8686 let parent1Gen = split(value(assetInfo(parent1Id)).name, "")
8787 let parent2Gen = split(value(assetInfo(parent2Id)).name, "")
8888 let gen = ((((((((((("DUCK-" + getRandomGen(parent1Gen[5], parent2Gen[5], 0, txId, hatchingFinishHeight)) + getRandomGen(parent1Gen[6], parent2Gen[6], 1, txId, hatchingFinishHeight)) + getRandomGen(parent1Gen[7], parent2Gen[7], 2, txId, hatchingFinishHeight)) + getRandomGen(parent1Gen[8], parent2Gen[8], 3, txId, hatchingFinishHeight)) + getRandomGen(parent1Gen[9], parent2Gen[9], 4, txId, hatchingFinishHeight)) + getRandomGen(parent1Gen[10], parent2Gen[10], 5, txId, hatchingFinishHeight)) + getRandomGen(parent1Gen[11], parent2Gen[12], 6, txId, hatchingFinishHeight)) + getRandomGen(parent1Gen[12], parent2Gen[12], 7, txId, hatchingFinishHeight)) + "-") + determineGeneration(parent1Gen[14], parent2Gen[14])) + color)
8989 gen
9090 }
9191
9292
9393 func checkAssetInIncubator (assetId) = {
9494 let result = match getString(Address(incubatorAddress), assetId) {
9595 case b: String =>
9696 true
9797 case _ =>
9898 false
9999 }
100100 let result2 = match getString(this, assetId) {
101101 case c: String =>
102102 true
103103 case _ =>
104104 false
105105 }
106106 if (result)
107107 then true
108108 else result2
109109 }
110110
111111
112112 func canBeBreeded (asset1Id,asset2Id) = {
113113 let asset1Gen = split(value(assetInfo(asset1Id)).name, "")
114114 let asset2Gen = split(value(assetInfo(asset2Id)).name, "")
115- throw(((((("DEBUG:" + toString(value(indexOf(Generations, asset1Gen[14])))) + ", ") + toString(MaxGeneration)) + ", ") + toString(value(indexOf(Generations, asset2Gen[14])))))
115+ if ((value(indexOf(Generations, asset1Gen[14])) >= MaxGeneration))
116+ then (("you can only breed ducks with generation " + Generations[MaxGeneration]) + " and lower")
117+ else if ((value(indexOf(Generations, asset2Gen[14])) >= MaxGeneration))
118+ then (("you can only breed ducks with generation " + Generations[MaxGeneration]) + " and lower")
119+ else "true"
116120 }
117121
118122
119123 @Callable(i)
120124 func startDuckBreeding () = {
121125 let firstAssetId = toBase58String(value(value(i.payments[0]).assetId))
122126 let secondAssetId = toBase58String(value(value(i.payments[1]).assetId))
123127 if (!(if (checkAssetInIncubator(firstAssetId))
124128 then checkAssetInIncubator(secondAssetId)
125129 else false))
126130 then throw("You need to attach 2 valid NFT-ducks.")
127131 else if (if ((tryGetInteger((("asset_" + firstAssetId) + "_children")) > 0))
128132 then true
129133 else (tryGetInteger((("asset_" + secondAssetId) + "_children")) > 0))
130134 then throw("One duck can be used for breeding only once in its lifetime.")
131135 else {
132- let breededStatus = canBeBreeded(fromBase58String(firstAssetId), fromBase58String(firstAssetId))
136+ let breededStatus = canBeBreeded(fromBase58String(firstAssetId), fromBase58String(secondAssetId))
133137 if ((breededStatus != "true"))
134138 then throw(("These ducks cannot be breeded: " + breededStatus))
135139 else [StringEntry(getDuckParentKey(i.transactionId, 1), firstAssetId), StringEntry(getDuckParentKey(i.transactionId, 2), secondAssetId), StringEntry(getProcessStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getProcessFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching))]
136140 }
137141 }
138142
139143
140144
141145 @Callable(i)
142146 func finishDuckHatching (txIdStr) = {
143147 let txId = fromBase58String(txIdStr)
144148 let processStatusKey = getProcessStatusKey(toString(i.caller), txId)
145149 let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
146150 let duckIdKey = getDuckIdKey(toString(i.caller), txId)
147151 let processTxStatus = getStringValue(this, processStatusKey)
148152 let processFinishHeight = getIntegerValue(this, finishHeightKey)
149153 if ((processTxStatus == HatchingFinished))
150154 then {
151155 let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
152156 throw(("The duck was breeded and claimed already, here is the folowing: " + duckId))
153157 }
154158 else if ((processFinishHeight > height))
155159 then throw((((("Breeding is not finished yet " + toString((processFinishHeight - height))) + " blocks remaining, it will take around ") + toString((processFinishHeight - height))) + " minutes"))
156160 else {
157161 let duckGen = generateDuck(txId, processFinishHeight)
158162 let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
159163 let asset = Issue(duckGen, description, 1, 0, false, unit, processFinishHeight)
160164 let assetId = calculateAssetId(asset)
161165 let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
162166 let parent1Id = tryGetString(getDuckParentKey(txId, 1))
163167 let parent2Id = tryGetString(getDuckParentKey(txId, 2))
164168 [StringEntry(processStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(toBase58String(assetId), duckIdKey), IntegerEntry(getDuckStatsKey(duckGen), amount), IntegerEntry((("asset_" + parent1Id) + "_children"), 1), IntegerEntry((("asset_" + parent2Id) + "_children"), 1), asset, ScriptTransfer(i.caller, 1, assetId), ScriptTransfer(i.caller, 1, fromBase58String(parent1Id)), ScriptTransfer(i.caller, 1, fromBase58String(parent2Id))]
165169 }
166170 }
167171
168172
169173 @Verifier(tx)
170174 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
171175

github/deemru/w8io/786bc32 
48.56 ms