tx · 3LD11DoMg96dNXDsUWqS3aDi9NHsgsHJcivsFnFYggHE 3P6r1tQ9fZ72nN2c85JQd86HmFXsFoycSSB: -0.01000000 Waves 2022.12.21 20:05 [3435797] smart account 3P6r1tQ9fZ72nN2c85JQd86HmFXsFoycSSB > SELF 0.00000000 Waves
{ "type": 13, "id": "3LD11DoMg96dNXDsUWqS3aDi9NHsgsHJcivsFnFYggHE", "fee": 1000000, "feeAssetId": null, "timestamp": 1671642344965, "version": 2, "chainId": 87, "sender": "3P6r1tQ9fZ72nN2c85JQd86HmFXsFoycSSB", "senderPublicKey": "6vtsN7XVBpkCG3nevPHgREhun9roGTEWjXnimqGZm6sb", "proofs": [ "3ghHz9pmTVhVmMeLWSpYYbrzi26FsdzVdZcQBnWbjdn2bQQD18prpUVhe4rUgf4HT4S3HZZ1fsSAfNpmXxJmDWZy" ], "script": "base64:BgIRCAISAwoBCBIDCgEIEgMKAQgNAQhhc1N0cmluZwEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwBQZzdHJpbmcJAAIBAiFTQVM6IHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBFXRyeUdldEludGVnZXJFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAAARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIHYWRkcmVzcwNrZXkEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAUBYQIAAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAKAIAQUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQx0cnlHZXRTdHJpbmcBA2tleQkBFHRyeUdldFN0cmluZ0V4dGVybmFsAgUEdGhpcwUDa2V5AQ10cnlHZXRJbnRlZ2VyAQNrZXkJARV0cnlHZXRJbnRlZ2VyRXh0ZXJuYWwCBQR0aGlzBQNrZXkBCWdldE9yYWNsZQAJAQdBZGRyZXNzAQkA2QQBCQEMdHJ5R2V0U3RyaW5nAQIUc3RhdGljX29yYWNsZUFkZHJlc3MBEWdldEZhcm1pbmdBZGRyZXNzAAkBB0FkZHJlc3MBCQDZBAEJARR0cnlHZXRTdHJpbmdFeHRlcm5hbAIJAQlnZXRPcmFjbGUAAhVzdGF0aWNfZmFybWluZ0FkZHJlc3MBD2dldEl0ZW1zQWRkcmVzcwAJAQdBZGRyZXNzAQkA2QQBCQEUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwCCQEJZ2V0T3JhY2xlAAITc3RhdGljX2l0ZW1zQWRkcmVzcwETbGFzdENoZWNrSGVpZ2h0RHVjawEGZHVja0lkCQCsAgIFBmR1Y2tJZAINX2NoZWNrX2hlaWdodAEPbGFzdENoZWNrVHhEdWNrAQZkdWNrSWQJAKwCAgUGZHVja0lkAglfY2hlY2tfdHgBCmlzU2lja0R1Y2sBBmR1Y2tJZAkArAICBQZkdWNrSWQCBV9zaWNrAQ9nZXRSYW5kb21OdW1iZXIECHZhcmlhbnRzBHR4SWQQbGFzdENoZWNrRGlzZWFzZQZvZmZzZXQED3JhbmRvbVNlZWRCbG9jawkBBXZhbHVlAQkA7QcBCQBlAgUQbGFzdENoZWNrRGlzZWFzZQABBApyYW5kb21IYXNoCQDUFgEJAMsBAgUEdHhJZAkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYJAGoCCQCyCQIFCnJhbmRvbUhhc2gFBm9mZnNldAUIdmFyaWFudHMDAWkBD2NvbmZpZ3VyZU9yYWNsZQEGb3JhY2xlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIPSUNVOiBhZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQICFHN0YXRpY19vcmFjbGVBZGRyZXNzBQZvcmFjbGUFA25pbAFpARJjaGVja0lmRHVja0dldFNpY2sBBmR1Y2tJZAMJAQIhPQIIBQFpBmNhbGxlcgkBEWdldEZhcm1pbmdBZGRyZXNzAAkAAgECLVNDSUZHUzogT25seSBmYXJtaW5nIGNhbiBtYWtlIHRoZSBkdWNrIHNpY2shIAQJbGFzdENoZWNrCQEMdHJ5R2V0U3RyaW5nAQkBD2xhc3RDaGVja1R4RHVjawEFBmR1Y2tJZAQFYnl0ZXMDCQAAAgUJbGFzdENoZWNrAgAIBQFpDXRyYW5zYWN0aW9uSWQJAJsDAQUJbGFzdENoZWNrBA9sYXN0Q2hlY2tIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkBE2xhc3RDaGVja0hlaWdodER1Y2sBBQZkdWNrSWQEBm51bWJlcgMJAAACBQ9sYXN0Q2hlY2tIZWlnaHQAAAUGaGVpZ2h0BQ9sYXN0Q2hlY2tIZWlnaHQECXJhbmRvbU51bQkBD2dldFJhbmRvbU51bWJlcgQAFAUFYnl0ZXMFBm51bWJlcgACBAtnZW5lcmljRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCCQEPbGFzdENoZWNrVHhEdWNrAQUGZHVja0lkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARNsYXN0Q2hlY2tIZWlnaHREdWNrAQUGZHVja0lkBQZoZWlnaHQFA25pbAMDCQAAAgUJcmFuZG9tTnVtAAEGCQENdHJ5R2V0Qm9vbGVhbgEJAQppc1NpY2tEdWNrAQUGZHVja0lkCQCUCgIJAM4IAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCmlzU2lja0R1Y2sBBQZkdWNrSWQGBQNuaWwFC2dlbmVyaWNEYXRhBgkAlAoCBQtnZW5lcmljRGF0YQcBaQEIaGVhbER1Y2sBBmR1Y2tJZAQHYXNzZXRJZAkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAxhcnRlZmFjdE5hbWUJAQhhc1N0cmluZwEJAPwHBAkBD2dldEl0ZW1zQWRkcmVzcwACFGNoZWNrQXJ0ZWZhY3REZXRhaWxzCQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUMYXJ0ZWZhY3ROYW1lBQxhcnRlZmFjdE5hbWUDCQECIT0CBQxhcnRlZmFjdE5hbWUCD0FSVC1IRUFMX1BPVElPTgkAAgECKFlvdSBjYW4ndCBoZWFsIGEgZHVjayB3aXRoIHRoaXMgYXJ0ZWZhY3QJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCmlzU2lja0R1Y2sBBQZkdWNrSWQHBQNuaWwHCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuALLzxks=", "height": 3435797, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DSWPhB3LSTPWt2GTbWwZMdzkjiXBLPDmP4qWMdVFuvaK Next: BsfiyUjBS14PiLQ7pAss7GyUPAPVPP59Ur56hGQ7shsu Diff:
Old | New | Differences | |
---|---|---|---|
84 | 84 | then height | |
85 | 85 | else lastCheckHeight | |
86 | 86 | let randomNum = getRandomNumber(20, bytes, number, 2) | |
87 | - | let genericData = [StringEntry(lastCheckTxDuck(duckId), | |
87 | + | let genericData = [StringEntry(lastCheckTxDuck(duckId), toBase58String(i.transactionId)), IntegerEntry(lastCheckHeightDuck(duckId), height)] | |
88 | 88 | if (if ((randomNum == 1)) | |
89 | 89 | then true | |
90 | 90 | else tryGetBoolean(isSickDuck(duckId))) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func asString (value) = match value { | |
5 | 5 | case string: String => | |
6 | 6 | string | |
7 | 7 | case _ => | |
8 | 8 | throw("SAS: wrong type, expected: String") | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func tryGetIntegerExternal (address,key) = match getInteger(address, key) { | |
13 | 13 | case a: Int => | |
14 | 14 | a | |
15 | 15 | case _ => | |
16 | 16 | 0 | |
17 | 17 | } | |
18 | 18 | ||
19 | 19 | ||
20 | 20 | func tryGetStringExternal (address,key) = match getString(address, key) { | |
21 | 21 | case a: String => | |
22 | 22 | a | |
23 | 23 | case _ => | |
24 | 24 | "" | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | func tryGetBoolean (key) = match getBoolean(key) { | |
29 | 29 | case b: Boolean => | |
30 | 30 | b | |
31 | 31 | case _ => | |
32 | 32 | false | |
33 | 33 | } | |
34 | 34 | ||
35 | 35 | ||
36 | 36 | func tryGetString (key) = tryGetStringExternal(this, key) | |
37 | 37 | ||
38 | 38 | ||
39 | 39 | func tryGetInteger (key) = tryGetIntegerExternal(this, key) | |
40 | 40 | ||
41 | 41 | ||
42 | 42 | func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress"))) | |
43 | 43 | ||
44 | 44 | ||
45 | 45 | func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress"))) | |
46 | 46 | ||
47 | 47 | ||
48 | 48 | func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress"))) | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func lastCheckHeightDuck (duckId) = (duckId + "_check_height") | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func lastCheckTxDuck (duckId) = (duckId + "_check_tx") | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func isSickDuck (duckId) = (duckId + "_sick") | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func getRandomNumber (variants,txId,lastCheckDisease,offset) = { | |
61 | 61 | let randomSeedBlock = value(blockInfoByHeight((lastCheckDisease - 1))) | |
62 | 62 | let randomHash = sha256_16Kb((txId + value(randomSeedBlock.vrf))) | |
63 | 63 | (toInt(randomHash, offset) % variants) | |
64 | 64 | } | |
65 | 65 | ||
66 | 66 | ||
67 | 67 | @Callable(i) | |
68 | 68 | func configureOracle (oracle) = if ((i.caller != this)) | |
69 | 69 | then throw("ICU: admin only") | |
70 | 70 | else [StringEntry("static_oracleAddress", oracle)] | |
71 | 71 | ||
72 | 72 | ||
73 | 73 | ||
74 | 74 | @Callable(i) | |
75 | 75 | func checkIfDuckGetSick (duckId) = if ((i.caller != getFarmingAddress())) | |
76 | 76 | then throw("SCIFGS: Only farming can make the duck sick! ") | |
77 | 77 | else { | |
78 | 78 | let lastCheck = tryGetString(lastCheckTxDuck(duckId)) | |
79 | 79 | let bytes = if ((lastCheck == "")) | |
80 | 80 | then i.transactionId | |
81 | 81 | else toBytes(lastCheck) | |
82 | 82 | let lastCheckHeight = tryGetInteger(lastCheckHeightDuck(duckId)) | |
83 | 83 | let number = if ((lastCheckHeight == 0)) | |
84 | 84 | then height | |
85 | 85 | else lastCheckHeight | |
86 | 86 | let randomNum = getRandomNumber(20, bytes, number, 2) | |
87 | - | let genericData = [StringEntry(lastCheckTxDuck(duckId), | |
87 | + | let genericData = [StringEntry(lastCheckTxDuck(duckId), toBase58String(i.transactionId)), IntegerEntry(lastCheckHeightDuck(duckId), height)] | |
88 | 88 | if (if ((randomNum == 1)) | |
89 | 89 | then true | |
90 | 90 | else tryGetBoolean(isSickDuck(duckId))) | |
91 | 91 | then $Tuple2(([BooleanEntry(isSickDuck(duckId), true)] ++ genericData), true) | |
92 | 92 | else $Tuple2(genericData, false) | |
93 | 93 | } | |
94 | 94 | ||
95 | 95 | ||
96 | 96 | ||
97 | 97 | @Callable(i) | |
98 | 98 | func healDuck (duckId) = { | |
99 | 99 | let assetId = value(i.payments[0].assetId) | |
100 | 100 | let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [toBase58String(assetId)], nil)) | |
101 | 101 | if ((artefactName == artefactName)) | |
102 | 102 | then if ((artefactName != "ART-HEAL_POTION")) | |
103 | 103 | then throw("You can't heal a duck with this artefact") | |
104 | 104 | else $Tuple2([BooleanEntry(isSickDuck(duckId), false)], false) | |
105 | 105 | else throw("Strict value is not equal to itself.") | |
106 | 106 | } | |
107 | 107 | ||
108 | 108 |
github/deemru/w8io/6500d08 33.75 ms ◑