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:AAIFAAAAAAAAAB4IAhIECgIICBIAEgMKAQgSAwoBCBIDCgEIEgMKAQgAAAAQAQAAAAhrZXlPd25lcgAAAAEAAAALZHVja0hvdXNlSWQJAAEsAAAAAgUAAAALZHVja0hvdXNlSWQCAAAABl9vd25lcgEAAAAMa2V5RHVja093bmVyAAAAAQAAAAZkdWNrSWQJAAEsAAAAAgUAAAAGZHVja0lkAgAAAAtfZHVja19vd25lcgEAAAAMa2V5RHVja0hvdXNlAAAAAQAAAAZkdWNrSWQJAAEsAAAAAgUAAAAGZHVja0lkAgAAAAtfZHVja19ob3VzZQEAAAAXb2NjdXBpZWRTcG90c0R1Y2tzSG91c2UAAAABAAAAC2R1Y2tIb3VzZUlkCQABLAAAAAIFAAAAC2R1Y2tIb3VzZUlkAgAAAA1fZmlsbGVkX3Nwb3RzAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAhhc1N0cmluZwAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAUAAAAGc3RyaW5nCQAAAgAAAAECAAAAHHdyb25nIHR5cGUsIGV4cGVjdGVkOiBTdHJpbmcBAAAABWFzSW50AAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADaW50BQAAAAckbWF0Y2gwBQAAAANpbnQJAAACAAAAAQIAAAAZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAVc3RhdGljX2Zhcm1pbmdBZGRyZXNzAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAARc3RhdGljX2VnZ0Fzc2V0SWQBAAAACG1heER1Y2tzAAAAAAkBAAAADXRyeUdldEludGVnZXIAAAABAgAAAA9zdGF0aWNfbWF4RHVja3MBAAAACXN0YWtlQ2FsbAAAAAAJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABBzdGF0aWNfc3Rha2VDYWxsAQAAAAR0eXBlAAAAAAkBAAAADHRyeUdldFN0cmluZwAAAAECAAAAC3N0YXRpY190eXBlAAAABgAAAAFpAQAAAA9jb25maWd1cmVPcmFjbGUAAAACAAAABm9yYWNsZQAAAAR0eXBlAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAACmFkbWluIG9ubHkEAAAABXNldHVwAwkAAAAAAAACBQAAAAR0eXBlAgAAAAxBUlQtQklHSE9VU0UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD3N0YXRpY19tYXhEdWNrcwAAAAAAAAAACgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAABBzdGF0aWNfc3Rha2VDYWxsAgAAABRzdGFrZU5GVFdpdGhvdXRQZXJjaAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAtzdGF0aWNfdHlwZQIAAAAMQVJULUJJR0hPVVNFBQAAAANuaWwDCQAAAAAAAAIFAAAABHR5cGUCAAAACUFSVC1IT1VTRQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAPc3RhdGljX21heER1Y2tzAAAAAAAAAAAECQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAEHN0YXRpY19zdGFrZUNhbGwCAAAACHN0YWtlTkZUCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAC3N0YXRpY190eXBlAgAAAAlBUlQtSE9VU0UFAAAAA25pbAkAAAIAAAABAgAAAA1Vbmtub3duIHR5cGUhCQAETgAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAUc3RhdGljX29yYWNsZUFkZHJlc3MFAAAABm9yYWNsZQUAAAADbmlsBQAAAAVzZXR1cAAAAAFpAQAAAA5zdGFrZUR1Y2tIb3VzZQAAAAAEAAAABW93bmVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPYXJ0ZWZhY3RQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA9hcnRlZmFjdEFzc2V0SWQJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAD2FydGVmYWN0UGF5bWVudAAAAAdhc3NldElkAwkBAAAAAiE9AAAAAggFAAAAD2FydGVmYWN0UGF5bWVudAAAAAZhbW91bnQAAAAAAAAAAAEJAAACAAAAAQIAAAATTkZUIGlzIG5vdCBhdHRhY2hlZAQAAAAMYXJ0ZWZhY3ROYW1lCQEAAAAIYXNTdHJpbmcAAAABCQAD/AAAAAQJAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAAAgAAABRjaGVja0FydGVmYWN0RGV0YWlscwkABEwAAAACBQAAAA9hcnRlZmFjdEFzc2V0SWQFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAxhcnRlZmFjdE5hbWUFAAAADGFydGVmYWN0TmFtZQMJAQAAAAIhPQAAAAIFAAAADGFydGVmYWN0TmFtZQkBAAAABHR5cGUAAAAACQAAAgAAAAECAAAADldyb25nIGFydGVmYWN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAhrZXlPd25lcgAAAAEFAAAAD2FydGVmYWN0QXNzZXRJZAUAAAAFb3duZXIFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAQdW5zdGFrZUR1Y2tIb3VzZQAAAAEAAAALZHVja0hvdXNlSWQEAAAABmNhbGxlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADmR1Y2tIb3VzZU93bmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAACGtleU93bmVyAAAAAQUAAAALZHVja0hvdXNlSWQDCQAAAAAAAAIFAAAADmR1Y2tIb3VzZU93bmVyAgAAAAAJAAACAAAAAQIAAAAdVGhpcyBkdWNraG91c2UgaXMgbm90IHN0YWtlZCEDCQEAAAACIT0AAAACBQAAAA5kdWNrSG91c2VPd25lcgUAAAAGY2FsbGVyCQAAAgAAAAECAAAAHFRoaXMgZHVja2hvdXNlIGlzIG5vdCB5b3VycyEDCQEAAAACIT0AAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAQAAABdvY2N1cGllZFNwb3RzRHVja3NIb3VzZQAAAAEFAAAAC2R1Y2tIb3VzZUlkAAAAAAAAAAAACQAAAgAAAAECAAAAMVBsZWFzZSBmaXJzdCByZW1vdmUgeW91ciBkdWNrcyBmcm9tIHRoZSBkdWNraG91c2UJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABCQACWQAAAAEFAAAAC2R1Y2tIb3VzZUlkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAhrZXlPd25lcgAAAAEFAAAAC2R1Y2tIb3VzZUlkBQAAAANuaWwAAAABaQEAAAAJc3Rha2VEdWNrAAAAAQAAAAtkdWNrSG91c2VJZAQAAAAHYXNzZXRJZAkBAAAABXZhbHVlAAAAAQgJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAHYWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADmR1Y2tIb3VzZU93bmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAACGtleU93bmVyAAAAAQUAAAALZHVja0hvdXNlSWQDCQAAAAAAAAIFAAAADmR1Y2tIb3VzZU93bmVyAgAAAAAJAAACAAAAAQIAAAAdVGhpcyBkdWNraG91c2UgaXMgbm90IHN0YWtlZCEDCQEAAAACIT0AAAACBQAAAA5kdWNrSG91c2VPd25lcgUAAAAHYWRkcmVzcwkAAAIAAAABAgAAABxUaGlzIGR1Y2tob3VzZSBpcyBub3QgeW91cnMhBAAAAAtmaWxsZWRTcG90cwkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAXb2NjdXBpZWRTcG90c0R1Y2tzSG91c2UAAAABBQAAAAtkdWNrSG91c2VJZAMJAABmAAAAAgkBAAAACG1heER1Y2tzAAAAAAUAAAALZmlsbGVkU3BvdHMJAAACAAAAAQIAAAAcTm8gc3BhY2UgaW4gZHVjayBob3VzZSBsZWZ0IQQAAAAJYm9vc3REdWNrCQAD/AAAAAQJAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAAAgAAAA9tYW5pcHVsYXRlQm9vc3QJAARMAAAAAgAAAAAAAAAADwkABEwAAAACCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAgFAAAAAWkAAAAIcGF5bWVudHMDCQAAAAAAAAIFAAAACWJvb3N0RHVjawUAAAAJYm9vc3REdWNrBAAAAAlzdGFrZUR1Y2sJAAP8AAAABAkBAAAAEWdldEZhcm1pbmdBZGRyZXNzAAAAAAkBAAAACXN0YWtlQ2FsbAAAAAAFAAAAA25pbAgFAAAAAWkAAAAIcGF5bWVudHMDCQAAAAAAAAIFAAAACXN0YWtlRHVjawUAAAAJc3Rha2VEdWNrCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlEdWNrT3duZXIAAAABCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAAB2FkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABdvY2N1cGllZFNwb3RzRHVja3NIb3VzZQAAAAEFAAAAC2R1Y2tIb3VzZUlkCQAAZAAAAAIFAAAAC2ZpbGxlZFNwb3RzAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlEdWNrSG91c2UAAAABCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAAC2R1Y2tIb3VzZUlkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAt1bnN0YWtlRHVjawAAAAEAAAAFYXNzZXQEAAAABW93bmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAADGtleUR1Y2tPd25lcgAAAAEFAAAABWFzc2V0BAAAAAdhZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAABW93bmVyBQAAAAdhZGRyZXNzCQAAAgAAAAECAAAAIERvbid0IHRyeSB0byBzdGVhbCBzb21lb25lIGR1Y2shBAAAABF1bnN0YWtlRHVja1Jld2FyZAkBAAAABWFzSW50AAAAAQkAA/wAAAAECQEAAAARZ2V0RmFybWluZ0FkZHJlc3MAAAAAAgAAAAp1bnN0YWtlTkZUCQAETAAAAAIFAAAABWFzc2V0BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAARdW5zdGFrZUR1Y2tSZXdhcmQFAAAAEXVuc3Rha2VEdWNrUmV3YXJkBAAAAAtkdWNrSG91c2VJZAkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAAAxrZXlEdWNrSG91c2UAAAABBQAAAAVhc3NldAQAAAALZmlsbGVkU3BvdHMJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAF29jY3VwaWVkU3BvdHNEdWNrc0hvdXNlAAAAAQUAAAALZHVja0hvdXNlSWQDCQAAAAAAAAIFAAAAC2ZpbGxlZFNwb3RzAAAAAAAAAAAACQAAAgAAAAECAAAAHVlvdSBhcmVuJ3Qgc3Rha2luZyBhbnkgZHVja3MhBAAAAAt1bmJvb3N0RHVjawkAA/wAAAAECQEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAIAAAAPbWFuaXB1bGF0ZUJvb3N0CQAETAAAAAIA//////////EJAARMAAAAAgUAAAAFYXNzZXQFAAAAA25pbAgFAAAAAWkAAAAIcGF5bWVudHMDCQAAAAAAAAIFAAAAC3VuYm9vc3REdWNrBQAAAAt1bmJvb3N0RHVjawkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEXVuc3Rha2VEdWNrUmV3YXJkCQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAABCQACWQAAAAEFAAAABWFzc2V0CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAxrZXlEdWNrT3duZXIAAAABBQAAAAVhc3NldAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAF29jY3VwaWVkU3BvdHNEdWNrc0hvdXNlAAAAAQUAAAALZHVja0hvdXNlSWQJAABlAAAAAgUAAAALZmlsbGVkU3BvdHMAAAAAAAAAAAEFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEGNsYWltRHVja1Jld2FyZHMAAAABAAAABWFzc2V0BAAAAAVvd25lcgkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAAAxrZXlEdWNrT3duZXIAAAABBQAAAAVhc3NldAQAAAAHYWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAAAVvd25lcgUAAAAHYWRkcmVzcwkAAAIAAAABAgAAACBEb24ndCB0cnkgdG8gc3RlYWwgc29tZW9uZSBlZ2dzIQQAAAAMY2xhaW1SZXdhcmRzCQEAAAAFYXNJbnQAAAABCQAD/AAAAAQJAQAAABFnZXRGYXJtaW5nQWRkcmVzcwAAAAACAAAAC2NsYWltUmV3YXJkCQAETAAAAAIFAAAABWFzc2V0BQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAMY2xhaW1SZXdhcmRzBQAAAAxjbGFpbVJld2FyZHMJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAB2FkZHJlc3MFAAAADGNsYWltUmV3YXJkcwkBAAAADWdldEVnZ0Fzc2V0SWQAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAADKu6pU=", "height": 3073623, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6waSY7N61mZEgs2KXFZXoh546tArhujnYimEoCfmJi1d Next: BreKPLcrgNzb1G71hn6DnawLNJpUTVT3zRCDyu8jzFst Diff:
OldNewDifferences
77 func keyDuckOwner (duckId) = (duckId + "_duck_owner")
88
99
10-func keyDuckHouse (owner) = (owner + "_duck_house_id")
10+func keyDuckHouse (duckId) = (duckId + "_duck_house")
1111
1212
1313 func occupiedSpotsDucksHouse (duckHouseId) = (duckHouseId + "_filled_spots")
6060 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
6161
6262
63+func maxDucks () = tryGetInteger("static_maxDucks")
64+
65+
66+func stakeCall () = tryGetString("static_stakeCall")
67+
68+
69+func type () = tryGetString("static_type")
70+
71+
6372 @Callable(i)
64-func configureOracle (oracle) = if ((i.caller != this))
73+func configureOracle (oracle,type) = if ((i.caller != this))
6574 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+ }
6783
6884
6985
7793 else {
7894 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [artefactAssetId], nil))
7995 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)]
8599 else throw("Strict value is not equal to itself.")
86100 }
87101 }
89103
90104
91105 @Callable(i)
92-func unstakeDuckHouse () = {
106+func unstakeDuckHouse (duckHouseId) = {
93107 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))]
100116 }
101117
102118
103119
104120 @Callable(i)
105-func stakeDuck () = {
121+func stakeDuck (duckHouseId) = {
106122 let assetId = value(value(i.payments[0]).assetId)
107123 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+ }
127145 }
128146
129147
138156 let unstakeDuckReward = asInt(invoke(getFarmingAddress(), "unstakeNFT", [asset], nil))
139157 if ((unstakeDuckReward == unstakeDuckReward))
140158 then {
141- let duckHouseId = tryGetString(keyDuckHouse(address))
159+ let duckHouseId = tryGetString(keyDuckHouse(asset))
142160 let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId))
143161 if ((filledSpots == 0))
144162 then throw("You aren't staking any ducks!")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func keyOwner (duckHouseId) = (duckHouseId + "_owner")
55
66
77 func keyDuckOwner (duckId) = (duckId + "_duck_owner")
88
99
10-func keyDuckHouse (owner) = (owner + "_duck_house_id")
10+func keyDuckHouse (duckId) = (duckId + "_duck_house")
1111
1212
1313 func occupiedSpotsDucksHouse (duckHouseId) = (duckHouseId + "_filled_spots")
1414
1515
1616 func tryGetStringExternal (address,key) = match getString(address, key) {
1717 case a: String =>
1818 a
1919 case _ =>
2020 ""
2121 }
2222
2323
2424 func tryGetString (key) = tryGetStringExternal(this, key)
2525
2626
2727 func tryGetInteger (key) = match getInteger(this, key) {
2828 case b: Int =>
2929 b
3030 case _ =>
3131 0
3232 }
3333
3434
3535 func asString (value) = match value {
3636 case string: String =>
3737 string
3838 case _ =>
3939 throw("wrong type, expected: String")
4040 }
4141
4242
4343 func asInt (value) = match value {
4444 case int: Int =>
4545 int
4646 case _ =>
4747 throw("wrong type, expected: Int")
4848 }
4949
5050
5151 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
5252
5353
5454 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
5555
5656
5757 func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress")))
5858
5959
6060 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
6161
6262
63+func maxDucks () = tryGetInteger("static_maxDucks")
64+
65+
66+func stakeCall () = tryGetString("static_stakeCall")
67+
68+
69+func type () = tryGetString("static_type")
70+
71+
6372 @Callable(i)
64-func configureOracle (oracle) = if ((i.caller != this))
73+func configureOracle (oracle,type) = if ((i.caller != this))
6574 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+ }
6783
6884
6985
7086 @Callable(i)
7187 func stakeDuckHouse () = {
7288 let owner = toString(i.caller)
7389 let artefactPayment = value(i.payments[0])
7490 let artefactAssetId = toBase58String(value(artefactPayment.assetId))
7591 if ((artefactPayment.amount != 1))
7692 then throw("NFT is not attached")
7793 else {
7894 let artefactName = asString(invoke(getItemsAddress(), "checkArtefactDetails", [artefactAssetId], nil))
7995 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)]
8599 else throw("Strict value is not equal to itself.")
86100 }
87101 }
88102
89103
90104
91105 @Callable(i)
92-func unstakeDuckHouse () = {
106+func unstakeDuckHouse (duckHouseId) = {
93107 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))]
100116 }
101117
102118
103119
104120 @Callable(i)
105-func stakeDuck () = {
121+func stakeDuck (duckHouseId) = {
106122 let assetId = value(value(i.payments[0]).assetId)
107123 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+ }
127145 }
128146
129147
130148
131149 @Callable(i)
132150 func unstakeDuck (asset) = {
133151 let owner = tryGetString(keyDuckOwner(asset))
134152 let address = toString(i.caller)
135153 if ((owner != address))
136154 then throw("Don't try to steal someone duck!")
137155 else {
138156 let unstakeDuckReward = asInt(invoke(getFarmingAddress(), "unstakeNFT", [asset], nil))
139157 if ((unstakeDuckReward == unstakeDuckReward))
140158 then {
141- let duckHouseId = tryGetString(keyDuckHouse(address))
159+ let duckHouseId = tryGetString(keyDuckHouse(asset))
142160 let filledSpots = tryGetInteger(occupiedSpotsDucksHouse(duckHouseId))
143161 if ((filledSpots == 0))
144162 then throw("You aren't staking any ducks!")
145163 else {
146164 let unboostDuck = invoke(getItemsAddress(), "manipulateBoost", [-15, asset], i.payments)
147165 if ((unboostDuck == unboostDuck))
148166 then [ScriptTransfer(i.caller, unstakeDuckReward, getEggAssetId()), ScriptTransfer(i.caller, 1, fromBase58String(asset)), DeleteEntry(keyDuckOwner(asset)), IntegerEntry(occupiedSpotsDucksHouse(duckHouseId), (filledSpots - 1))]
149167 else throw("Strict value is not equal to itself.")
150168 }
151169 }
152170 else throw("Strict value is not equal to itself.")
153171 }
154172 }
155173
156174
157175
158176 @Callable(i)
159177 func claimDuckRewards (asset) = {
160178 let owner = tryGetString(keyDuckOwner(asset))
161179 let address = toString(i.caller)
162180 if ((owner != address))
163181 then throw("Don't try to steal someone eggs!")
164182 else {
165183 let claimRewards = asInt(invoke(getFarmingAddress(), "claimReward", [asset], nil))
166184 if ((claimRewards == claimRewards))
167185 then [ScriptTransfer(Address(fromBase58String(address)), claimRewards, getEggAssetId())]
168186 else throw("Strict value is not equal to itself.")
169187 }
170188 }
171189
172190

github/deemru/w8io/3ef1775 
46.27 ms