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