tx · 4HF2nDyqZYczRe3ZpTEYtuyCDqRwBBETScZgheja1Rww

3P7C5CUc6XzpJqmDaeUNZ1by1XSCyA2VKnv:  -0.05000000 Waves

2021.05.10 21:13 [2584585] smart account 3P7C5CUc6XzpJqmDaeUNZ1by1XSCyA2VKnv > SELF 0.00000000 Waves

{ "type": 13, "id": "4HF2nDyqZYczRe3ZpTEYtuyCDqRwBBETScZgheja1Rww", "fee": 5000000, "feeAssetId": null, "timestamp": 1620670442635, "version": 2, "chainId": 87, "sender": "3P7C5CUc6XzpJqmDaeUNZ1by1XSCyA2VKnv", "senderPublicKey": "GbHvAsyeDc5Uth6me7pfBMXnGff8LSoppzXkdjw7etww", "proofs": [ "46hcc2jyN4TbUzY3hmdWdvaMa5PJxLF7ioc3YR1soh9WURaN7G7CCuv6TDV1zkAfXN1KwXYkuP9kjU6s8RFsdfKR" ], "script": "base64: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", "height": 2584585, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3ChHWFwAAspoCehAD9KpSfSMSA46sxBjaRSJiLq6Hizp Next: D9pSfcikpvaiPze4bBXs44v8zn9NZse5HcLDCNdnoHX8 Full:
OldNewDifferences
1-{-# STDLIB_VERSION 3 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let answersCount = 20
4+let delayForHatching = 0
55
6-let answers = ["It is certain.", "It is decidedly so.", "Without a doubt.", "Yes - definitely.", "You may rely on it.", "As I see it, yes.", "Most likely.", "Outlook good.", "Yes.", "Signs point to yes.", "Reply hazy, try again.", "Ask again later.", "Better not tell you now.", "Cannot predict now.", "Concentrate and ask again.", "Don't count on it.", "My reply is no.", "My sources say no.", "Outlook not so good.", "Very doubtful."]
6+let HatchingStarted = "BREEDING_STARTED"
77
8-func getAnswer (question,previousAnswer) = {
9- let hash = sha256(toBytes((question + previousAnswer)))
10- let index = toInt(hash)
11-answers[(index % answersCount)]
8+let HatchingFinished = "BREEDING_FINISHED"
9+
10+let incubatorAddress = base58'3PACKMArmh4BAEawStYmpcU62aiNTBJKvNh'
11+
12+let Generations = ["G", "H", "I", "K", "L"]
13+
14+func getProcessStatusKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_status")
15+
16+
17+func getProcessFinishHeightKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_fh")
18+
19+
20+func getDuckParentKey (txId,parentNum) = ((("inittx_" + toBase58String(txId)) + "_parent") + toString(parentNum))
21+
22+
23+func getDuckIdKey (address,txId) = (((address + "_") + toBase58String(txId)) + "_di")
24+
25+
26+func getDuckStatsKey (genString) = (("stats_" + genString) + "_amount")
27+
28+
29+func tryGetInteger (key) = {
30+ let val = match getInteger(this, key) {
31+ case b: Int =>
32+ b
33+ case _ =>
34+ 0
35+ }
36+ val
1237 }
1338
1439
15-func getPreviousAnswer (address) = match getString(this, (address + "_a")) {
16- case a: String =>
17- a
18- case _ =>
19- address
20-}
40+func tryGetString (key) = {
41+ let val = match getString(this, key) {
42+ case b: String =>
43+ b
44+ case _ =>
45+ ""
46+ }
47+ val
48+ }
49+
50+
51+func determineGeneration (g1,g2) = {
52+ let gIndex = max([value(indexOf(Generations, g1)), value(indexOf(Generations, g2))])
53+Generations[(gIndex + 1)]
54+ }
55+
56+
57+func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
58+ let randomSeedBlock = value(blockInfoByHeight(hatchingFinishHeight))
59+ (toInt((txId + value(randomSeedBlock.vrf)), offset) % variants)
60+ }
61+
62+
63+func getRandomGen (gen1,gen2,step,txId,hatchingFinishHeight) = {
64+ let randomNum = getRandomNumber(2, txId, hatchingFinishHeight, step)
65+ let gen = if ((randomNum == 0))
66+ then gen1
67+ else gen2
68+ gen
69+ }
70+
71+
72+func generateDuck (txId,hatchingFinishHeight) = {
73+ let colorRandom = getRandomNumber(4, txId, hatchingFinishHeight, 30)
74+ let color = if ((colorRandom == 0))
75+ then "Y"
76+ else if ((colorRandom == 1))
77+ then "G"
78+ else if ((colorRandom == 2))
79+ then "B"
80+ else "R"
81+ let parent1Id = fromBase58String(tryGetString(getDuckParentKey(txId, 1)))
82+ let parent2Id = fromBase58String(tryGetString(getDuckParentKey(txId, 2)))
83+ let parent1Gen = split(value(assetInfo(parent1Id)).name, "")
84+ let parent2Gen = split(value(assetInfo(parent2Id)).name, "")
85+ 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)
86+ gen
87+ }
88+
89+
90+func checkAssetInIncubator (assetId) = {
91+ let result = match getString(Address(incubatorAddress), assetId) {
92+ case b: String =>
93+ true
94+ case _ =>
95+ false
96+ }
97+ let result2 = match getString(this, assetId) {
98+ case c: String =>
99+ true
100+ case _ =>
101+ false
102+ }
103+ if (result)
104+ then true
105+ else result2
106+ }
21107
22108
23109 @Callable(i)
24-func tellme (question) = {
25- let callerAddress = toBase58String(i.caller.bytes)
26- let answer = getAnswer(question, getPreviousAnswer(callerAddress))
27- WriteSet([DataEntry((callerAddress + "_q"), question), DataEntry((callerAddress + "_a"), answer)])
110+func startDuckBreeding () = {
111+ let firstAssetId = toBase58String(value(value(i.payments[0]).assetId))
112+ let secondAssetId = toBase58String(value(value(i.payments[1]).assetId))
113+ if (!(if (checkAssetInIncubator(firstAssetId))
114+ then checkAssetInIncubator(secondAssetId)
115+ else false))
116+ then throw("You need to attach 2 NFT-ducks.")
117+ else if (if ((tryGetInteger((("asset_" + firstAssetId) + "_children")) > 0))
118+ then true
119+ else (tryGetInteger((("asset_" + secondAssetId) + "_children")) > 0))
120+ then throw("One duck can be used for breeding only once in its lifetime.")
121+ else [StringEntry(getDuckParentKey(i.transactionId, 1), firstAssetId), StringEntry(((("account_" + toString(i.caller)) + "_tx_") + toBase58String(i.transactionId)), "started"), StringEntry(getDuckParentKey(i.transactionId, 2), secondAssetId), StringEntry(getProcessStatusKey(toString(i.caller), i.transactionId), HatchingStarted), IntegerEntry(getProcessFinishHeightKey(toString(i.caller), i.transactionId), (height + delayForHatching))]
28122 }
29123
124+
125+
126+@Callable(i)
127+func finishDuckHatching (txIdStr) = {
128+ let txId = fromBase58String(txIdStr)
129+ let processStatusKey = getProcessStatusKey(toString(i.caller), txId)
130+ let finishHeightKey = getProcessFinishHeightKey(toString(i.caller), txId)
131+ let duckIdKey = getDuckIdKey(toString(i.caller), txId)
132+ let processTxStatus = getStringValue(this, processStatusKey)
133+ let processFinishHeight = getIntegerValue(this, finishHeightKey)
134+ if ((processTxStatus == HatchingFinished))
135+ then {
136+ let duckId = getStringValue(this, getDuckIdKey(toString(i.caller), txId))
137+ throw(("The duck was breeded and claimed already, here is the folowing: " + duckId))
138+ }
139+ else if ((processFinishHeight > height))
140+ then throw((((("Breeding is not finished yet " + toString((processFinishHeight - height))) + " blocks remaining, it will take around ") + toString((processFinishHeight - height))) + " minutes"))
141+ else {
142+ let duckGen = generateDuck(txId, processFinishHeight)
143+ let description = (("{\"genotype\": \"" + duckGen) + "\", \"crossbreeding\": true}")
144+ let asset = Issue(duckGen, description, 1, 0, false, unit, processFinishHeight)
145+ let assetId = calculateAssetId(asset)
146+ let amount = (tryGetInteger(getDuckStatsKey(duckGen)) + 1)
147+ let parent1Id = tryGetString(getDuckParentKey(txId, 1))
148+ let parent2Id = tryGetString(getDuckParentKey(txId, 2))
149+[StringEntry(processStatusKey, HatchingFinished), StringEntry(duckIdKey, toBase58String(assetId)), StringEntry(((("account_" + toString(i.caller)) + "_tx_") + toBase58String(i.transactionId)), "finished"), 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))]
150+ }
151+ }
152+
153+
154+@Verifier(tx)
155+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
30156

github/deemru/w8io/3ef1775 
40.98 ms