tx · 3KVvXp3A53uLJAVVbCqTt9RiuY6aPc5nXEA1WQQreo4X 3PKX8mjwxxJGmC6uUV7opAwMmFUN61JnmG9: -0.01400000 Waves 2022.04.14 16:47 [3073623] smart account 3PKX8mjwxxJGmC6uUV7opAwMmFUN61JnmG9 > SELF 0.00000000 Waves
{ "type": 13, "id": "3KVvXp3A53uLJAVVbCqTt9RiuY6aPc5nXEA1WQQreo4X", "fee": 1400000, "feeAssetId": null, "timestamp": 1649944099570, "version": 2, "chainId": 87, "sender": "3PKX8mjwxxJGmC6uUV7opAwMmFUN61JnmG9", "senderPublicKey": "XmAFwGAEKdN5NoXVdfV95VeJ85namtKXxkhyGGYYVUw", "proofs": [ "R25UvDxSbnpKMNVzyjJ54Xe2MJCuoAgKWBQBvuS6iJVvLmb3zpNQcVaUrfqxU7Dor9iyBu93Ao4DzRuY4rZziEJ" ], "script": "base64:AAIFAAAAAAAAAB4IAhIECgIICBIAEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAAQAQAAAAhrZXlPd25lcgAAAAEAAAALZHVja0hvdXNlSWQJAAEsAAAAAgUAAAALZHVja0hvdXNlSWQCAAAABl9vd25lcgEAAAAMa2V5RHVja093bmVyAAAAAQAAAAZkdWNrSWQJAAEsAAAAAgUAAAAGZHVja0lkAgAAAAtfZHVja19vd25lcgEAAAAMa2V5RHVja0hvdXNlAAAAAQAAAAZkdWNrSWQJAAEsAAAAAgUAAAAGZHVja0lkAgAAAAtfZHVja19ob3VzZQEAAAAXb2NjdXBpZWRTcG90c0R1Y2tzSG91c2UAAAABAAAAC2R1Y2tIb3VzZUlkCQABLAAAAAIFAAAAC2R1Y2tIb3VzZUlkAgAAAA1fZmlsbGVkX3Nwb3RzAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAhhc1N0cmluZwAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAUAAAAGc3RyaW5nCQAAAgAAAAECAAAAHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX2Zhcm1pbmdBZGRyZXNzAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAARc3RhdGljX2VnZ0Fzc2V0SWQBAAAACG1heER1Y2tzAAAAAAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAA9zdGF0aWNfbWF4RHVja3MBAAAACXN0YWtlQ2FsbAAAAAAJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABBzdGF0aWNfc3Rha2VDYWxsAQAAAAR0eXBlAAAAAAkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAC3N0YXRpY190eXBlAAAABgAAAAFpAQAAAA9jb25maWd1cmVPcmFjbGUAAAACAAAABm9yYWNsZQAAAAR0eXBlAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAACmFkbWluIG9ubHkEAAAABXNldHVwAwkAAAAAAAACBQAAAAR0eXBlAgAAAAxBUlQtQklHSE9VU0UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD3N0YXRpY19tYXhEdWNrcwAA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", "height": 3073623, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6waSY7N61mZEgs2KXFZXoh546tArhujnYimEoCfmJi1d Next: BreKPLcrgNzb1G71hn6DnawLNJpUTVT3zRCDyu8jzFst Diff:
Old | New | Differences | |
---|---|---|---|
7 | 7 | func keyDuckOwner (duckId) = (duckId + "_duck_owner") | |
8 | 8 | ||
9 | 9 | ||
10 | - | func keyDuckHouse ( | |
10 | + | func keyDuckHouse (duckId) = (duckId + "_duck_house") | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func occupiedSpotsDucksHouse (duckHouseId) = (duckHouseId + "_filled_spots") | |
60 | 60 | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId")) | |
61 | 61 | ||
62 | 62 | ||
63 | + | func maxDucks () = tryGetInteger("static_maxDucks") | |
64 | + | ||
65 | + | ||
66 | + | func stakeCall () = tryGetString("static_stakeCall") | |
67 | + | ||
68 | + | ||
69 | + | func type () = tryGetString("static_type") | |
70 | + | ||
71 | + | ||
63 | 72 | @Callable(i) | |
64 | - | func configureOracle (oracle) = if ((i.caller != this)) | |
73 | + | func configureOracle (oracle,type) = if ((i.caller != this)) | |
65 | 74 | then throw("admin only") | |
66 | - | else [StringEntry("static_oracleAddress", oracle)] | |
75 | + | else { | |
76 | + | let setup = if ((type == "ART-BIGHOUSE")) | |
77 | + | then [IntegerEntry("static_maxDucks", 10), StringEntry("static_stakeCall", "stakeNFTWithoutPerch"), StringEntry("static_type", "ART-BIGHOUSE")] | |
78 | + | else if ((type == "ART-HOUSE")) | |
79 | + | then [IntegerEntry("static_maxDucks", 4), StringEntry("static_stakeCall", "stakeNFT"), StringEntry("static_type", "ART-HOUSE")] | |
80 | + | else throw("Unknown type!") | |
81 | + | ([StringEntry("static_oracleAddress", oracle)] ++ setup) | |
82 | + | } | |
67 | 83 | ||
68 | 84 | ||
69 | 85 | ||
77 | 93 | else { | |
78 | 94 | let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [artefactAssetId], nil)) | |
79 | 95 | if ((artefactName == artefactName)) | |
80 | - | then if ((tryGetString(keyDuckHouse(owner)) != "")) | |
81 | - | then throw("You are already staking a duck house") | |
82 | - | else if ((artefactName != "ART-BIGHOUSE")) | |
83 | - | then throw("Wrong artefact") | |
84 | - | else [StringEntry(keyOwner(artefactAssetId), owner), StringEntry(keyDuckHouse(owner), artefactAssetId)] | |
96 | + | then if ((artefactName != type())) | |
97 | + | then throw("Wrong artefact") | |
98 | + | else [StringEntry(keyOwner(artefactAssetId), owner)] | |
85 | 99 | else throw("Strict value is not equal to itself.") | |
86 | 100 | } | |
87 | 101 | } | |
89 | 103 | ||
90 | 104 | ||
91 | 105 | @Callable(i) | |
92 | - | func unstakeDuckHouse () = { | |
106 | + | func unstakeDuckHouse (duckHouseId) = { | |
93 | 107 | let caller = toString(i.caller) | |
94 | - | let duckHouseId = tryGetString(keyDuckHouse(caller)) | |
95 | - | if ((duckHouseId == "")) | |
96 | - | then throw("You are not staking a duck house") | |
97 | - | else if ((tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) != 0)) | |
98 | - | then throw("Please first remove your ducks from the duckhouse") | |
99 | - | else [ScriptTransfer(i.caller, 1, fromBase58String(duckHouseId)), DeleteEntry(keyDuckHouse(caller)), DeleteEntry(keyOwner(duckHouseId))] | |
108 | + | let duckHouseOwner = tryGetString(keyOwner(duckHouseId)) | |
109 | + | if ((duckHouseOwner == "")) | |
110 | + | then throw("This duckhouse is not staked!") | |
111 | + | else if ((duckHouseOwner != caller)) | |
112 | + | then throw("This duckhouse is not yours!") | |
113 | + | else if ((tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) != 0)) | |
114 | + | then throw("Please first remove your ducks from the duckhouse") | |
115 | + | else [ScriptTransfer(i.caller, 1, fromBase58String(duckHouseId)), DeleteEntry(keyOwner(duckHouseId))] | |
100 | 116 | } | |
101 | 117 | ||
102 | 118 | ||
103 | 119 | ||
104 | 120 | @Callable(i) | |
105 | - | func stakeDuck () = { | |
121 | + | func stakeDuck (duckHouseId) = { | |
106 | 122 | let assetId = value(value(i.payments[0]).assetId) | |
107 | 123 | let address = toString(i.caller) | |
108 | - | let duckHouseId = tryGetString(keyDuckHouse(address)) | |
109 | - | if ((duckHouseId == "")) | |
110 | - | then throw("You are not staking a duck house") | |
111 | - | else { | |
112 | - | let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) | |
113 | - | if ((10 > filledSpots)) | |
114 | - | then throw("No space in duck house left!") | |
115 | - | else { | |
116 | - | let boostDuck = invoke(getItemsAddress(), "manipulateBoost", [15, toBase58String(assetId)], i.payments) | |
117 | - | if ((boostDuck == boostDuck)) | |
118 | - | then { | |
119 | - | let stakeDuck = invoke(getFarmingAddress(), "stakeNFTWithoutPerch", nil, i.payments) | |
120 | - | if ((stakeDuck == stakeDuck)) | |
121 | - | then [StringEntry(keyDuckOwner(toBase58String(assetId)), address), IntegerEntry(occupiedSpotsDucksHouse(duckHouseId), (filledSpots + 1))] | |
122 | - | else throw("Strict value is not equal to itself.") | |
123 | - | } | |
124 | - | else throw("Strict value is not equal to itself.") | |
125 | - | } | |
126 | - | } | |
124 | + | let duckHouseOwner = tryGetString(keyOwner(duckHouseId)) | |
125 | + | if ((duckHouseOwner == "")) | |
126 | + | then throw("This duckhouse is not staked!") | |
127 | + | else if ((duckHouseOwner != address)) | |
128 | + | then throw("This duckhouse is not yours!") | |
129 | + | else { | |
130 | + | let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) | |
131 | + | if ((maxDucks() > filledSpots)) | |
132 | + | then throw("No space in duck house left!") | |
133 | + | else { | |
134 | + | let boostDuck = invoke(getItemsAddress(), "manipulateBoost", [15, toBase58String(assetId)], i.payments) | |
135 | + | if ((boostDuck == boostDuck)) | |
136 | + | then { | |
137 | + | let stakeDuck = invoke(getFarmingAddress(), stakeCall(), nil, i.payments) | |
138 | + | if ((stakeDuck == stakeDuck)) | |
139 | + | then [StringEntry(keyDuckOwner(toBase58String(assetId)), address), IntegerEntry(occupiedSpotsDucksHouse(duckHouseId), (filledSpots + 1)), StringEntry(keyDuckHouse(toBase58String(assetId)), duckHouseId)] | |
140 | + | else throw("Strict value is not equal to itself.") | |
141 | + | } | |
142 | + | else throw("Strict value is not equal to itself.") | |
143 | + | } | |
144 | + | } | |
127 | 145 | } | |
128 | 146 | ||
129 | 147 | ||
138 | 156 | let unstakeDuckReward = asInt(invoke(getFarmingAddress(), "unstakeNFT", [asset], nil)) | |
139 | 157 | if ((unstakeDuckReward == unstakeDuckReward)) | |
140 | 158 | then { | |
141 | - | let duckHouseId = tryGetString(keyDuckHouse( | |
159 | + | let duckHouseId = tryGetString(keyDuckHouse(asset)) | |
142 | 160 | let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) | |
143 | 161 | if ((filledSpots == 0)) | |
144 | 162 | then throw("You aren't staking any ducks!") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func keyOwner (duckHouseId) = (duckHouseId + "_owner") | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | func keyDuckOwner (duckId) = (duckId + "_duck_owner") | |
8 | 8 | ||
9 | 9 | ||
10 | - | func keyDuckHouse ( | |
10 | + | func keyDuckHouse (duckId) = (duckId + "_duck_house") | |
11 | 11 | ||
12 | 12 | ||
13 | 13 | func occupiedSpotsDucksHouse (duckHouseId) = (duckHouseId + "_filled_spots") | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | func tryGetStringExternal (address,key) = match getString(address, key) { | |
17 | 17 | case a: String => | |
18 | 18 | a | |
19 | 19 | case _ => | |
20 | 20 | "" | |
21 | 21 | } | |
22 | 22 | ||
23 | 23 | ||
24 | 24 | func tryGetString (key) = tryGetStringExternal(this, key) | |
25 | 25 | ||
26 | 26 | ||
27 | 27 | func tryGetInteger (key) = match getInteger(this, key) { | |
28 | 28 | case b: Int => | |
29 | 29 | b | |
30 | 30 | case _ => | |
31 | 31 | 0 | |
32 | 32 | } | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func asString (value) = match value { | |
36 | 36 | case string: String => | |
37 | 37 | string | |
38 | 38 | case _ => | |
39 | 39 | throw("wrong type, expected: String") | |
40 | 40 | } | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func asInt (value) = match value { | |
44 | 44 | case int: Int => | |
45 | 45 | int | |
46 | 46 | case _ => | |
47 | 47 | throw("wrong type, expected: Int") | |
48 | 48 | } | |
49 | 49 | ||
50 | 50 | ||
51 | 51 | func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress"))) | |
52 | 52 | ||
53 | 53 | ||
54 | 54 | func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress"))) | |
55 | 55 | ||
56 | 56 | ||
57 | 57 | func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress"))) | |
58 | 58 | ||
59 | 59 | ||
60 | 60 | func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId")) | |
61 | 61 | ||
62 | 62 | ||
63 | + | func maxDucks () = tryGetInteger("static_maxDucks") | |
64 | + | ||
65 | + | ||
66 | + | func stakeCall () = tryGetString("static_stakeCall") | |
67 | + | ||
68 | + | ||
69 | + | func type () = tryGetString("static_type") | |
70 | + | ||
71 | + | ||
63 | 72 | @Callable(i) | |
64 | - | func configureOracle (oracle) = if ((i.caller != this)) | |
73 | + | func configureOracle (oracle,type) = if ((i.caller != this)) | |
65 | 74 | then throw("admin only") | |
66 | - | else [StringEntry("static_oracleAddress", oracle)] | |
75 | + | else { | |
76 | + | let setup = if ((type == "ART-BIGHOUSE")) | |
77 | + | then [IntegerEntry("static_maxDucks", 10), StringEntry("static_stakeCall", "stakeNFTWithoutPerch"), StringEntry("static_type", "ART-BIGHOUSE")] | |
78 | + | else if ((type == "ART-HOUSE")) | |
79 | + | then [IntegerEntry("static_maxDucks", 4), StringEntry("static_stakeCall", "stakeNFT"), StringEntry("static_type", "ART-HOUSE")] | |
80 | + | else throw("Unknown type!") | |
81 | + | ([StringEntry("static_oracleAddress", oracle)] ++ setup) | |
82 | + | } | |
67 | 83 | ||
68 | 84 | ||
69 | 85 | ||
70 | 86 | @Callable(i) | |
71 | 87 | func stakeDuckHouse () = { | |
72 | 88 | let owner = toString(i.caller) | |
73 | 89 | let artefactPayment = value(i.payments[0]) | |
74 | 90 | let artefactAssetId = toBase58String(value(artefactPayment.assetId)) | |
75 | 91 | if ((artefactPayment.amount != 1)) | |
76 | 92 | then throw("NFT is not attached") | |
77 | 93 | else { | |
78 | 94 | let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [artefactAssetId], nil)) | |
79 | 95 | if ((artefactName == artefactName)) | |
80 | - | then if ((tryGetString(keyDuckHouse(owner)) != "")) | |
81 | - | then throw("You are already staking a duck house") | |
82 | - | else if ((artefactName != "ART-BIGHOUSE")) | |
83 | - | then throw("Wrong artefact") | |
84 | - | else [StringEntry(keyOwner(artefactAssetId), owner), StringEntry(keyDuckHouse(owner), artefactAssetId)] | |
96 | + | then if ((artefactName != type())) | |
97 | + | then throw("Wrong artefact") | |
98 | + | else [StringEntry(keyOwner(artefactAssetId), owner)] | |
85 | 99 | else throw("Strict value is not equal to itself.") | |
86 | 100 | } | |
87 | 101 | } | |
88 | 102 | ||
89 | 103 | ||
90 | 104 | ||
91 | 105 | @Callable(i) | |
92 | - | func unstakeDuckHouse () = { | |
106 | + | func unstakeDuckHouse (duckHouseId) = { | |
93 | 107 | let caller = toString(i.caller) | |
94 | - | let duckHouseId = tryGetString(keyDuckHouse(caller)) | |
95 | - | if ((duckHouseId == "")) | |
96 | - | then throw("You are not staking a duck house") | |
97 | - | else if ((tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) != 0)) | |
98 | - | then throw("Please first remove your ducks from the duckhouse") | |
99 | - | else [ScriptTransfer(i.caller, 1, fromBase58String(duckHouseId)), DeleteEntry(keyDuckHouse(caller)), DeleteEntry(keyOwner(duckHouseId))] | |
108 | + | let duckHouseOwner = tryGetString(keyOwner(duckHouseId)) | |
109 | + | if ((duckHouseOwner == "")) | |
110 | + | then throw("This duckhouse is not staked!") | |
111 | + | else if ((duckHouseOwner != caller)) | |
112 | + | then throw("This duckhouse is not yours!") | |
113 | + | else if ((tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) != 0)) | |
114 | + | then throw("Please first remove your ducks from the duckhouse") | |
115 | + | else [ScriptTransfer(i.caller, 1, fromBase58String(duckHouseId)), DeleteEntry(keyOwner(duckHouseId))] | |
100 | 116 | } | |
101 | 117 | ||
102 | 118 | ||
103 | 119 | ||
104 | 120 | @Callable(i) | |
105 | - | func stakeDuck () = { | |
121 | + | func stakeDuck (duckHouseId) = { | |
106 | 122 | let assetId = value(value(i.payments[0]).assetId) | |
107 | 123 | let address = toString(i.caller) | |
108 | - | let duckHouseId = tryGetString(keyDuckHouse(address)) | |
109 | - | if ((duckHouseId == "")) | |
110 | - | then throw("You are not staking a duck house") | |
111 | - | else { | |
112 | - | let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) | |
113 | - | if ((10 > filledSpots)) | |
114 | - | then throw("No space in duck house left!") | |
115 | - | else { | |
116 | - | let boostDuck = invoke(getItemsAddress(), "manipulateBoost", [15, toBase58String(assetId)], i.payments) | |
117 | - | if ((boostDuck == boostDuck)) | |
118 | - | then { | |
119 | - | let stakeDuck = invoke(getFarmingAddress(), "stakeNFTWithoutPerch", nil, i.payments) | |
120 | - | if ((stakeDuck == stakeDuck)) | |
121 | - | then [StringEntry(keyDuckOwner(toBase58String(assetId)), address), IntegerEntry(occupiedSpotsDucksHouse(duckHouseId), (filledSpots + 1))] | |
122 | - | else throw("Strict value is not equal to itself.") | |
123 | - | } | |
124 | - | else throw("Strict value is not equal to itself.") | |
125 | - | } | |
126 | - | } | |
124 | + | let duckHouseOwner = tryGetString(keyOwner(duckHouseId)) | |
125 | + | if ((duckHouseOwner == "")) | |
126 | + | then throw("This duckhouse is not staked!") | |
127 | + | else if ((duckHouseOwner != address)) | |
128 | + | then throw("This duckhouse is not yours!") | |
129 | + | else { | |
130 | + | let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) | |
131 | + | if ((maxDucks() > filledSpots)) | |
132 | + | then throw("No space in duck house left!") | |
133 | + | else { | |
134 | + | let boostDuck = invoke(getItemsAddress(), "manipulateBoost", [15, toBase58String(assetId)], i.payments) | |
135 | + | if ((boostDuck == boostDuck)) | |
136 | + | then { | |
137 | + | let stakeDuck = invoke(getFarmingAddress(), stakeCall(), nil, i.payments) | |
138 | + | if ((stakeDuck == stakeDuck)) | |
139 | + | then [StringEntry(keyDuckOwner(toBase58String(assetId)), address), IntegerEntry(occupiedSpotsDucksHouse(duckHouseId), (filledSpots + 1)), StringEntry(keyDuckHouse(toBase58String(assetId)), duckHouseId)] | |
140 | + | else throw("Strict value is not equal to itself.") | |
141 | + | } | |
142 | + | else throw("Strict value is not equal to itself.") | |
143 | + | } | |
144 | + | } | |
127 | 145 | } | |
128 | 146 | ||
129 | 147 | ||
130 | 148 | ||
131 | 149 | @Callable(i) | |
132 | 150 | func unstakeDuck (asset) = { | |
133 | 151 | let owner = tryGetString(keyDuckOwner(asset)) | |
134 | 152 | let address = toString(i.caller) | |
135 | 153 | if ((owner != address)) | |
136 | 154 | then throw("Don't try to steal someone duck!") | |
137 | 155 | else { | |
138 | 156 | let unstakeDuckReward = asInt(invoke(getFarmingAddress(), "unstakeNFT", [asset], nil)) | |
139 | 157 | if ((unstakeDuckReward == unstakeDuckReward)) | |
140 | 158 | then { | |
141 | - | let duckHouseId = tryGetString(keyDuckHouse( | |
159 | + | let duckHouseId = tryGetString(keyDuckHouse(asset)) | |
142 | 160 | let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId)) | |
143 | 161 | if ((filledSpots == 0)) | |
144 | 162 | then throw("You aren't staking any ducks!") | |
145 | 163 | else { | |
146 | 164 | let unboostDuck = invoke(getItemsAddress(), "manipulateBoost", [-15, asset], i.payments) | |
147 | 165 | if ((unboostDuck == unboostDuck)) | |
148 | 166 | then [ScriptTransfer(i.caller, unstakeDuckReward, getEggAssetId()), ScriptTransfer(i.caller, 1, fromBase58String(asset)), DeleteEntry(keyDuckOwner(asset)), IntegerEntry(occupiedSpotsDucksHouse(duckHouseId), (filledSpots - 1))] | |
149 | 167 | else throw("Strict value is not equal to itself.") | |
150 | 168 | } | |
151 | 169 | } | |
152 | 170 | else throw("Strict value is not equal to itself.") | |
153 | 171 | } | |
154 | 172 | } | |
155 | 173 | ||
156 | 174 | ||
157 | 175 | ||
158 | 176 | @Callable(i) | |
159 | 177 | func claimDuckRewards (asset) = { | |
160 | 178 | let owner = tryGetString(keyDuckOwner(asset)) | |
161 | 179 | let address = toString(i.caller) | |
162 | 180 | if ((owner != address)) | |
163 | 181 | then throw("Don't try to steal someone eggs!") | |
164 | 182 | else { | |
165 | 183 | let claimRewards = asInt(invoke(getFarmingAddress(), "claimReward", [asset], nil)) | |
166 | 184 | if ((claimRewards == claimRewards)) | |
167 | 185 | then [ScriptTransfer(Address(fromBase58String(address)), claimRewards, getEggAssetId())] | |
168 | 186 | else throw("Strict value is not equal to itself.") | |
169 | 187 | } | |
170 | 188 | } | |
171 | 189 | ||
172 | 190 |
github/deemru/w8io/3ef1775 46.27 ms ◑