tx · 37Q5ohmsCNj5zC74uLjtP2xJMoKVkrazLY8zBidUcmoz

3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb:  -0.01000000 Waves

2022.05.13 19:25 [2050158] smart account 3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb > SELF 0.00000000 Waves

{ "type": 13, "id": "37Q5ohmsCNj5zC74uLjtP2xJMoKVkrazLY8zBidUcmoz", "fee": 1000000, "feeAssetId": null, "timestamp": 1652459117309, "version": 2, "chainId": 84, "sender": "3N8WDKbqGox5Eky326PHHT7rUyrby5MXdmb", "senderPublicKey": "FWSsBbeCwLVkekWhvNKtX6JkrZiruRybKKVuiS3F4bqN", "proofs": [ "39Df4bmd56VTWUKBPgv4VPLPkY3FFYHCNhc9RKBUCK3ngKUFnqLhT55dHGPn7n12vkwn64oHfrbdCTLEp8g2snn8" ], "script": "base64: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YXNzZXRPd25lcgUAAAAGY2FsbGVyAQAAABVpc05hdGlvblJlc2VydmVkQXNzZXQAAAABAAAADHN0ckFzc2V0VHlwZQMJAAAAAAAAAgUAAAAMc3RyQXNzZXRUeXBlAgAAAAdTZXR0bGVyBgkAAAAAAAACBQAAAAxzdHJBc3NldFR5cGUCAAAACEV4cGxvcmVyAQAAABlpbnRlcm5hbFRyYXNuZmVyT3duZXJzaGlwAAAAAgAAAAdhc3NldElkAAAACG5ld093bmVyBAAAAAxzdHJBc3NldFR5cGUJAAGRAAAAAgkABLUAAAACBQAAAAdhc3NldElkAgAAAAFfAAAAAAAAAAAABAAAAAhvbGRPd25lcgkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAABZnZXRBc3NldE93bmVyS2V5U3RyaW5nAAAAAQUAAAAHYXNzZXRJZAQAAAAKYXNzZXRQb3dlcgkAAZEAAAACBQAAAAthc3NldHNQb3dlcgkBAAAABXZhbHVlAAAAAQkABE8AAAACBQAAAAZBc3NldHMFAAAADHN0ckFzc2V0VHlwZQMJAABmAAAAAgUAAAAKYXNzZXRQb3dlcgAAAAAAAAAAAAQAAAAMY3VycmVudFBvd2VyCQEAAAAUbmF0aW9uc1RyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACG9sZE93bmVyAgAAAAZfUG93ZXIEAAAAAnB3CQAD/AAAAAQJAQAAAAdBZGRyZXNzAAAAAQUAAAAObmF0aW9uc0FkZHJlc3MCAAAADHNldFVzZXJQb3dlcgkABEwAAAACBQAAAAhvbGRPd25lcgkABEwAAAACCQAAZQAAAAIFAAAADGN1cnJlbnRQb3dlcgUAAAAKYXNzZXRQb3dlcgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAAnB3BQAAAAJwdwMJAQAAAAIhPQAAAAIFAAAAAnB3CQAAZQAAAAIFAAAADGN1cnJlbnRQb3dlcgUAAAAKYXNzZXRQb3dlcgkAAAIAAAABAgAAABdJbmNvcnJlY3QgaW52b2tlIHJlc3VsdAQAAAAPbmV3Y3VycmVudFBvd2VyCQEAAAAUbmF0aW9uc1RyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACG5ld093bmVyAgAAAAZfUG93ZXIEAAAAA3B3MgkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAADm5hdGlvbnNBZGRyZXNzAgAAAAxzZXRVc2VyUG93ZXIJAARMAAAAAgUAAAAIbmV3T3duZXIJAARMAAAAAgkAAGQAAAACBQAAAA9uZXdjdXJyZW50UG93ZXIFAAAACmFzc2V0UG93ZXIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAANwdzIFAAAAA3B3MgQAAAAHJG1hdGNoMAUAAAADcHcyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAXIFAAAAByRtYXRjaDAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFmdldEFzc2V0T3duZXJLZXlTdHJpbmcAAAABBQAAAAdhc3NldElkBQAAAAhuZXdPd25lcgUAAAADbmlsCQAAAgAAAAECAAAAF0luY29ycmVjdCBpbnZva2UgcmVzdWx0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFmdldEFzc2V0T3duZXJLZXlTdHJpbmcAAAABBQAAAAdhc3NldElkBQAAAAhuZXdPd25lcgUAAAADbmlsAAAACQAAAAFpAQAAAApTdGFydEJ1aWxkAAAAAwAAAAxzdHJBc3NldFR5cGUAAAAJTmF0aW9uS2V5AAAAClNldHRsZXJLZXkDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAZBc3NldHMFAAAADHN0ckFzc2V0VHlwZQkAAAIAAAABAgAAACdUaGlzIGFzc2V0IGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0EAAAAA2luZAkBAAAABXZhbHVlAAAAAQkABE8AAAACBQAAAAZBc3NldHMFAAAADHN0ckFzc2V0VHlwZQQAAAAQZGVsYXlGb3JCdWlsZGluZwkAAZEAAAACBQAAAAthc3NldHNEZWxheQUAAAADaW5kBAAAAA5hc3NldEJ1aWxkQ29zdAkAAZEAAAACBQAAAAphc3NldHNDb3N0BQAAAANpbmQEAAAADVRvQWRtaW5XYWxsZXQJAABpAAAAAgkAAGgAAAACBQAAAA5hc3NldEJ1aWxkQ29zdAAAAAAAAAAABQAAAAAAAAAAZAQAAAATVG9HYW1lUmV3YXJkc1dhbGxldAkAAGkAAAACCQAAaAAAAAIFAAAADmFzc2V0QnVpbGRDb3N0AAAAAAAAAAAKAAAAAAAAAABkBAAAABZUb1N0YWtpbmdSZXdhcmRzV2FsbGV0CQAAaQAAAAIJAABoAAAAAgUAAAAOYXNzZXRCdWlsZENvc3QAAAAAAAAAAEEAAAAAAAAAAGQEAAAADVVuaXRTdGFrZVNoZWcJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAA1Ub0FkbWluV2FsbGV0BQAAABNUb0dhbWVSZXdhcmRzV2FsbGV0BQAAABZUb1N0YWtpbmdSZXdhcmRzV2FsbGV0AwkBAAAAFWlzTmF0aW9uUmVzZXJ2ZWRBc3NldAAAAAEFAAAADHN0ckFzc2V0VHlwZQMDCQEAAAABIQAAAAEJAQAAAA9jaGVja0Fzc2V0T3duZXIAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAJTmF0aW9uS2V5CQEAAAABIQAAAAEJAQAAAApjaGVja0FkbWluAAAAAQgFAAAAAWkAAAAGY2FsbGVyBwkAAAIAAAABAgAAADBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24EAAAACm5hdGlvbnNoZWcJAQAAABV0cmVhc3VyeVRyeUdldEludGVnZXIAAAABCQEAAAAOZ2V0VHJlYXN1cnlLZXkAAAABBQAAAAlOYXRpb25LZXkDCQAAZgAAAAIFAAAADmFzc2V0QnVpbGRDb3N0BQAAAApuYXRpb25zaGVnCQAAAgAAAAECAAAAHlRoZSBuYXRpb24gaGFzbid0IGVub3VnaCBmdW5kcwQAAAABZAkAA/wAAAAECQEAAAAHQWRkcmVzcwAAAAEFAAAAD3RyZWFzdXJ5QWRkcmVzcwIAAAAUZGVjcmVhc2VOYXRpb25XYWxsZXQJAARMAAAAAgUAAAAJTmF0aW9uS2V5CQAETAAAAAIFAAAADmFzc2V0QnVp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aGVkUGF5bWVudAAAAAIFAAAACnNoaW55d2dnaWQFAAAADVVuaXRTdGFrZVNoZWcFAAAAA25pbAQAAAAHJG1hdGNoMAUAAAACcHcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABcgUAAAAHJG1hdGNoMAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAUZ2V0QnVpbGRpbmdTdGF0dXNLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAMc3RyQXNzZXRUeXBlBQAAAAxCdWlsZFN0YXJ0ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGdldEFzc2V0T3duZXJLZXkAAAACCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBQAAAAxzdHJBc3NldFR5cGUJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAaZ2V0QnVpbGRpbmdGaW5pc2hIZWlnaHRLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAAMc3RyQXNzZXRUeXBlCQAAZAAAAAIFAAAABmhlaWdodAUAAAAQZGVsYXlGb3JCdWlsZGluZwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAthZG1pbldhbGxldAUAAAANVG9BZG1pbldhbGxldAUAAAAKc2hpbnl3Z2dpZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABZkYWlseUdhbWVSZXdhcmRzV2FsbGV0BQAAABNUb0dhbWVSZXdhcmRzV2FsbGV0BQAAAApzaGlueXdnZ2lkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAGWRhaWx5U3Rha2luZ1Jld2FyZHNXYWxsZXQFAAAAFlRvU3Rha2luZ1Jld2FyZHNXYWxsZXQFAAAACnNoaW55d2dnaWQFAAAAA25pbAkAAAIAAAABAgAAABdJbmNvcnJlY3QgaW52b2tlIHJlc3VsdAAAAAFpAQAAAAtGaW5pc2hCdWlsZAAAAAMAAAAHdHhJZFN0cgAAAAhhc3NldFN0cgAAAAlOYXRpb25LZXkEAAAABHR4SWQJAAJZAAAAAQUAAAAHdHhJZFN0cgQAAAARQnVpbGRpbmdTdGF0dXNLZXkJAQAAABRnZXRCdWlsZGluZ1N0YXR1c0tleQAAAAMJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAR0eElkBQAAAAhhc3NldFN0cgQAAAAPZmluaXNoSGVpZ2h0S2V5CQEAAAAaZ2V0QnVpbGRpbmdGaW5pc2hIZWlnaHRLZXkAAAADCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAEdHhJZAUAAAAIYXNzZXRTdHIEAAAACGFzc2V0S2V5CQEAAAANZ2V0QXNzZXRJZEtleQAAAAIFAAAABHR4SWQFAAAACGFzc2V0U3RyBAAAAAphc3NldE93bmVyCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAEGdldEFzc2V0T3duZXJLZXkAAAACBQAAAAR0eElkBQAAAAhhc3NldFN0cgMJAQAAABVpc05hdGlvblJlc2VydmVkQXNzZXQAAAABBQAAAAhhc3NldFN0cgMDCQEAAAABIQAAAAEJAQAAAA9jaGVja0Fzc2V0T3duZXIAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAJTmF0aW9uS2V5CQEAAAABIQAAAAEJAQAAAApjaGVja0FkbWluAAAAAQgFAAAAAWkAAAAGY2FsbGVyBwkAAAIAAAABAgAAADBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24JAQAAABNpbnRlcm5hbEZpbmlzaEJ1aWxkAAAABQUAAAAJTmF0aW9uS2V5BQAAAAhhc3NldFN0cgUAAAAIYXNzZXRLZXkFAAAAEUJ1aWxkaW5nU3RhdHVzS2V5BQAAAA9maW5pc2hIZWlnaHRLZXkDCQEAAAACIT0AAAACBQAAAAphc3NldE93bmVyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABCQABLAAAAAICAAAAIVlvdSBjYW5ub3QgY2xhaW0gb3RoZXIncyBwbGF5ZXJzIAUAAAAIYXNzZXRTdHIEAAAAEGJ1aWxkaW5nVHhTdGF0dXMJAQAAAAx0cnlHZXRTdHJpbmcAAAABBQAAABFCdWlsZGluZ1N0YXR1c0tleQMJAAAAAAAAAgUAAAAQYnVpbGRpbmdUeFN0YXR1cwIAAAAACQAAAgAAAAECAAAAJE5vIHBlbmRpbmcgb3BlcmF0aW9ucyBmb3IgdGhpcyBhc3NldAkBAAAAE2ludGVybmFsRmluaXNoQnVpbGQAAAAFCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAIYXNzZXRTdHIFAAAACGFzc2V0S2V5BQAAABFCdWlsZGluZ1N0YXR1c0tleQUAAAAPZmluaXNoSGVpZ2h0S2V5AAAAAWkBAAAAEXRyYW5zZmVyT3duZXJzaGlwAAAAAgAAAAdhc3NldElkAAAACG5ld093bmVyBAAAAAxzdHJBc3NldFR5cGUJAAGRAAAAAgkABLUAAAACBQAAAAdhc3NldElkAgAAAAFfAAAAAAAAAAAAAwkBAAAAASEAAAABCQEAAAAKY2hlY2tBZG1pbgAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAAClPbmx5IHRoZSBhZG1pbiBjYW4gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbgkABRQAAAACCQEAAAAZaW50ZXJuYWxUcmFzbmZlck93bmVyc2hpcAAAAAIFAAAAB2Fzc2V0SWQFAAAACG5ld093bmVyBQAAAAhuZXdPd25lcgAAAAFpAQAAABdkZXN0cm95QXNzZXRBbmRUcmFuc2ZlcgAAAAIAAAAHYXNzZXRJZAAAAAl0b0FkZHJlc3MEAAAADHN0ckFzc2V0VHlwZQkAAZEAAAACCQAEtQAAAAIFAAAAB2Fzc2V0SWQCAAAAAV8AAAAAAAAAAAADCQEAAAABIQAAAAEJAQAAAApjaGVja0FkbWluAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQAAAgAAAAECAAAAKU9ubHkgdGhlIGFkbWluIGNhbiBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uBAAAAAhvbGRPd25lcgkBAAAADHRyeUdldFN0cmluZwAAAAEJAQAAABZnZXRBc3NldE93bmVyS2V5U3RyaW5nAAAAAQUAAAAHYXNzZXRJZAQAAAAKYXNzZXRDb2lucwkBAAAADXRyeUdldElu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", "height": 2050158, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FFfGvxM1taiRhZrVSyuWPdVmP3nuuBRmvBXsmBg6VZk2 Next: QAUsTuUi5YBhUwcK7NZCjVGxvaVBAy16uFne2hzxA5P Diff:
OldNewDifferences
99
1010 let marketplaceAddress = base58'3Mra7mjPipcQd5sJaRmXK8xgS4scb8gPF4A'
1111
12-let adminAddress = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9")
12+let adminWallet = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9")
13+
14+let dailyGameRewardsWallet = addressFromStringValue("3MuSrXTTiwo9bdoD6FeaBpMUYMiU5saDv2U")
15+
16+let dailyStakingRewardsWallet = addressFromStringValue("3Mv3mr3uNXdpgkVPApbGEJjMQXqau37DY5i")
1317
1418 let BuildStarted = "BUILD_STARTED"
1519
1721
1822 let Assets = ["Nation", "City", "Barrack", "Barn", "Warrior", "Settler", "Explorer"]
1923
20-let assetsCost = [0, 1000000000, 5000000000, 5000000000, 500000000, 10000000000, 100000000]
24+let assetsCost = [0, 0, 5000000000, 5000000000, 500000000, 10000000000, 100000000]
2125
2226 let assetsSellPrice = [0, 0, 0, 0, 0, 10000000000, 100000000]
2327
2428 let assetsDelay = [0, 4, 4, 4, 2, 2, 2]
2529
26-let assetsPower = [0, 1000, 500, 500, 0, 0, 0]
30+let assetsPower = [0, 1000, 50, 50, 1, 1, 1]
2731
2832 func treasuryTryGetInteger (key) = match getInteger(Address(treasuryAddress), key) {
2933 case b: Int =>
7579 func getTreasuryKey (nationid) = (nationid + "_Treasury")
7680
7781
78-func checkAdmin (caller) = if (if (if (if ((caller == adminAddress))
82+func checkAdmin (caller) = if (if (if (if ((caller == adminWallet))
7983 then true
8084 else (caller == this))
8185 then true
9397 else {
9498 let idx = value(indexOf(Assets, assetStr))
9599 let assetPower = assetsPower[idx]
96- let assetCoins = assetsCost[idx]
100+ let assetCoins = ((assetsCost[idx] * 20) / 100)
97101 let refCall = invoke(Address(treasuryAddress), "Pay", [caller, assetCoins], nil)
98102 if ((refCall == refCall))
99103 then if ((assetPower > 0))
151155
152156
153157 @Callable(i)
154-func StartBuild (strAssetType,NationKey) = if (!(containsElement(Assets, strAssetType)))
155- then throw("This asset is not amanged by the system")
158+func StartBuild (strAssetType,NationKey,SettlerKey) = if (!(containsElement(Assets, strAssetType)))
159+ then throw("This asset is not managed by the system")
156160 else {
157161 let ind = value(indexOf(Assets, strAssetType))
158162 let delayForBuilding = assetsDelay[ind]
159163 let assetBuildCost = assetsCost[ind]
164+ let ToAdminWallet = ((assetBuildCost * 5) / 100)
165+ let ToGameRewardsWallet = ((assetBuildCost * 10) / 100)
166+ let ToStakingRewardsWallet = ((assetBuildCost * 65) / 100)
167+ let UnitStakeSheg = (((assetBuildCost - ToAdminWallet) - ToGameRewardsWallet) - ToStakingRewardsWallet)
160168 if (isNationReservedAsset(strAssetType))
161169 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
162170 then !(checkAdmin(i.caller))
170178 let d = invoke(Address(treasuryAddress), "decreaseNationWallet", [NationKey, assetBuildCost], nil)
171179 match d {
172180 case r: Int =>
173- let pw = invoke(Address(treasuryAddress), "arbitraryAddCoins", [NationKey, assetBuildCost], nil)
181+ let pw = invoke(Address(treasuryAddress), "arbitraryAddCoins", [NationKey, UnitStakeSheg], nil)
174182 match pw {
175183 case b: Int =>
184+ let transfer = invoke(Address(treasuryAddress), "distributeNationPayRewards", [assetBuildCost], nil)
185+ match transfer {
186+ case t: Int =>
176187 [StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), NationKey), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding))]
188+ case _ =>
189+ throw("Error Distributing asset rewards")
190+ }
177191 case _ =>
178192 throw("Error Depositing nation funds")
179193 }
182196 }
183197 }
184198 }
185- else {
186- let amountIn = value(i.payments[0].amount)
187- if ((assetBuildCost > amountIn))
188- then throw(("You provided less $heg than the needed cost for building this " + strAssetType))
189- else if ((i.payments[0].assetId != shinywggid))
190- then throw("Only $HEG payments allowed")
191- else {
192- let pw = invoke(Address(treasuryAddress), "Deposit", nil, i.payments)
193- match pw {
194- case r: Int =>
195-[StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), toString(i.originCaller)), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding))]
196- case _ =>
197- throw("Incorrect invoke result")
198- }
199- }
200- }
199+ else if ((strAssetType == "City"))
200+ then if (!(checkAssetOwner(toString(i.caller), SettlerKey)))
201+ then throw("You don't own the settler or has been destroyed")
202+ else {
203+ let settlerSheg = tryGetInteger(SettlerKey)
204+ let pw = invoke(Address(treasuryAddress), "NoPaymentDeposit", [toString(i.caller), UnitStakeSheg], nil)
205+ match pw {
206+ case r: Int =>
207+ let transfer = invoke(Address(treasuryAddress), "distributeNationPayRewards", [assetBuildCost], nil)
208+ match transfer {
209+ case t: Int =>
210+[DeleteEntry(SettlerKey), StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), NationKey), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding))]
211+ case _ =>
212+ throw("Error Distributing asset rewards")
213+ }
214+ case _ =>
215+ throw("Error adding deposit")
216+ }
217+ }
218+ else {
219+ let amountIn = value(i.payments[0].amount)
220+ if ((assetBuildCost > amountIn))
221+ then throw(("You provided less $heg than the needed cost for building this " + strAssetType))
222+ else if ((i.payments[0].assetId != shinywggid))
223+ then throw("Only $HEG payments allowed")
224+ else {
225+ let pw = invoke(Address(treasuryAddress), "Deposit", nil, [AttachedPayment(shinywggid, UnitStakeSheg)])
226+ match pw {
227+ case r: Int =>
228+[StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), toString(i.originCaller)), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding)), ScriptTransfer(adminWallet, ToAdminWallet, shinywggid), ScriptTransfer(dailyGameRewardsWallet, ToGameRewardsWallet, shinywggid), ScriptTransfer(dailyStakingRewardsWallet, ToStakingRewardsWallet, shinywggid)]
229+ case _ =>
230+ throw("Incorrect invoke result")
231+ }
232+ }
233+ }
201234 }
202235
203236
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let shinywggid = base58'AFQS5E4ELtxex3iANtWtUU2V2oWJZSo8VVnK8z3VFmqf'
55
66 let treasuryAddress = base58'3MyDGEoKp1gF4LSRknk9vSuDEyrwuYXcQEQ'
77
88 let nationsAddress = base58'3MvyzDtzWWV5MZ1GP8JfQhhQqiGU4Nbifdy'
99
1010 let marketplaceAddress = base58'3Mra7mjPipcQd5sJaRmXK8xgS4scb8gPF4A'
1111
12-let adminAddress = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9")
12+let adminWallet = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9")
13+
14+let dailyGameRewardsWallet = addressFromStringValue("3MuSrXTTiwo9bdoD6FeaBpMUYMiU5saDv2U")
15+
16+let dailyStakingRewardsWallet = addressFromStringValue("3Mv3mr3uNXdpgkVPApbGEJjMQXqau37DY5i")
1317
1418 let BuildStarted = "BUILD_STARTED"
1519
1620 let BuildFinished = "BUILD_FINISHED"
1721
1822 let Assets = ["Nation", "City", "Barrack", "Barn", "Warrior", "Settler", "Explorer"]
1923
20-let assetsCost = [0, 1000000000, 5000000000, 5000000000, 500000000, 10000000000, 100000000]
24+let assetsCost = [0, 0, 5000000000, 5000000000, 500000000, 10000000000, 100000000]
2125
2226 let assetsSellPrice = [0, 0, 0, 0, 0, 10000000000, 100000000]
2327
2428 let assetsDelay = [0, 4, 4, 4, 2, 2, 2]
2529
26-let assetsPower = [0, 1000, 500, 500, 0, 0, 0]
30+let assetsPower = [0, 1000, 50, 50, 1, 1, 1]
2731
2832 func treasuryTryGetInteger (key) = match getInteger(Address(treasuryAddress), key) {
2933 case b: Int =>
3034 b
3135 case _ =>
3236 0
3337 }
3438
3539
3640 func nationsTryGetInteger (key) = match getInteger(Address(nationsAddress), key) {
3741 case b: Int =>
3842 b
3943 case _ =>
4044 0
4145 }
4246
4347
4448 func tryGetString (key) = match getString(this, key) {
4549 case b: String =>
4650 b
4751 case _ =>
4852 ""
4953 }
5054
5155
5256 func tryGetInteger (key) = match getInteger(this, key) {
5357 case b: Int =>
5458 b
5559 case _ =>
5660 0
5761 }
5862
5963
6064 func getAssetIdKey (txId,assetType) = ((assetType + "_") + toBase58String(txId))
6165
6266
6367 func getAssetOwnerKey (txId,assetType) = (getAssetIdKey(txId, assetType) + "_Owner")
6468
6569
6670 func getAssetOwnerKeyString (assetId) = (assetId + "_Owner")
6771
6872
6973 func getBuildingFinishHeightKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_fh")
7074
7175
7276 func getBuildingStatusKey (address,txId,assetType) = (((address + "_") + getAssetIdKey(txId, assetType)) + "_status")
7377
7478
7579 func getTreasuryKey (nationid) = (nationid + "_Treasury")
7680
7781
78-func checkAdmin (caller) = if (if (if (if ((caller == adminAddress))
82+func checkAdmin (caller) = if (if (if (if ((caller == adminWallet))
7983 then true
8084 else (caller == this))
8185 then true
8286 else (caller.bytes == nationsAddress))
8387 then true
8488 else (caller.bytes == treasuryAddress))
8589 then true
8690 else (caller.bytes == marketplaceAddress)
8791
8892
8993 func internalFinishBuild (caller,assetStr,assetKey,BuildingStatusKey,finishHeightKey) = {
9094 let buildingFinishHeight = getIntegerValue(this, finishHeightKey)
9195 if ((buildingFinishHeight > height))
9296 then throw((((("Building is not finished yet " + toString((buildingFinishHeight - height))) + " blocks remaining, it will take around ") + toString((buildingFinishHeight - height))) + " minutes"))
9397 else {
9498 let idx = value(indexOf(Assets, assetStr))
9599 let assetPower = assetsPower[idx]
96- let assetCoins = assetsCost[idx]
100+ let assetCoins = ((assetsCost[idx] * 20) / 100)
97101 let refCall = invoke(Address(treasuryAddress), "Pay", [caller, assetCoins], nil)
98102 if ((refCall == refCall))
99103 then if ((assetPower > 0))
100104 then {
101105 let currentPower = nationsTryGetInteger((caller + "_Power"))
102106 let pw = invoke(Address(nationsAddress), "setUserPower", [caller, (currentPower + assetPower)], nil)
103107 if ((pw == pw))
104108 then [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
105109 else throw("Strict value is not equal to itself.")
106110 }
107111 else [IntegerEntry(assetKey, assetCoins), DeleteEntry(BuildingStatusKey), DeleteEntry(finishHeightKey)]
108112 else throw("Strict value is not equal to itself.")
109113 }
110114 }
111115
112116
113117 func checkAssetOwner (caller,assetKey) = {
114118 let assetOwner = tryGetString((assetKey + "_Owner"))
115119 (assetOwner == caller)
116120 }
117121
118122
119123 func isNationReservedAsset (strAssetType) = if ((strAssetType == "Settler"))
120124 then true
121125 else (strAssetType == "Explorer")
122126
123127
124128 func internalTrasnferOwnership (assetId,newOwner) = {
125129 let strAssetType = split(assetId, "_")[0]
126130 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
127131 let assetPower = assetsPower[value(indexOf(Assets, strAssetType))]
128132 if ((assetPower > 0))
129133 then {
130134 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
131135 let pw = invoke(Address(nationsAddress), "setUserPower", [oldOwner, (currentPower - assetPower)], nil)
132136 if ((pw == pw))
133137 then if ((pw != (currentPower - assetPower)))
134138 then throw("Incorrect invoke result")
135139 else {
136140 let newcurrentPower = nationsTryGetInteger((newOwner + "_Power"))
137141 let pw2 = invoke(Address(nationsAddress), "setUserPower", [newOwner, (newcurrentPower + assetPower)], nil)
138142 if ((pw2 == pw2))
139143 then match pw2 {
140144 case r: Int =>
141145 [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
142146 case _ =>
143147 throw("Incorrect invoke result")
144148 }
145149 else throw("Strict value is not equal to itself.")
146150 }
147151 else throw("Strict value is not equal to itself.")
148152 }
149153 else [StringEntry(getAssetOwnerKeyString(assetId), newOwner)]
150154 }
151155
152156
153157 @Callable(i)
154-func StartBuild (strAssetType,NationKey) = if (!(containsElement(Assets, strAssetType)))
155- then throw("This asset is not amanged by the system")
158+func StartBuild (strAssetType,NationKey,SettlerKey) = if (!(containsElement(Assets, strAssetType)))
159+ then throw("This asset is not managed by the system")
156160 else {
157161 let ind = value(indexOf(Assets, strAssetType))
158162 let delayForBuilding = assetsDelay[ind]
159163 let assetBuildCost = assetsCost[ind]
164+ let ToAdminWallet = ((assetBuildCost * 5) / 100)
165+ let ToGameRewardsWallet = ((assetBuildCost * 10) / 100)
166+ let ToStakingRewardsWallet = ((assetBuildCost * 65) / 100)
167+ let UnitStakeSheg = (((assetBuildCost - ToAdminWallet) - ToGameRewardsWallet) - ToStakingRewardsWallet)
160168 if (isNationReservedAsset(strAssetType))
161169 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
162170 then !(checkAdmin(i.caller))
163171 else false)
164172 then throw("You are not authorized to perform this operation")
165173 else {
166174 let nationsheg = treasuryTryGetInteger(getTreasuryKey(NationKey))
167175 if ((assetBuildCost > nationsheg))
168176 then throw("The nation hasn't enough funds")
169177 else {
170178 let d = invoke(Address(treasuryAddress), "decreaseNationWallet", [NationKey, assetBuildCost], nil)
171179 match d {
172180 case r: Int =>
173- let pw = invoke(Address(treasuryAddress), "arbitraryAddCoins", [NationKey, assetBuildCost], nil)
181+ let pw = invoke(Address(treasuryAddress), "arbitraryAddCoins", [NationKey, UnitStakeSheg], nil)
174182 match pw {
175183 case b: Int =>
184+ let transfer = invoke(Address(treasuryAddress), "distributeNationPayRewards", [assetBuildCost], nil)
185+ match transfer {
186+ case t: Int =>
176187 [StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), NationKey), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding))]
188+ case _ =>
189+ throw("Error Distributing asset rewards")
190+ }
177191 case _ =>
178192 throw("Error Depositing nation funds")
179193 }
180194 case _ =>
181195 throw("Error Depositing nation funds")
182196 }
183197 }
184198 }
185- else {
186- let amountIn = value(i.payments[0].amount)
187- if ((assetBuildCost > amountIn))
188- then throw(("You provided less $heg than the needed cost for building this " + strAssetType))
189- else if ((i.payments[0].assetId != shinywggid))
190- then throw("Only $HEG payments allowed")
191- else {
192- let pw = invoke(Address(treasuryAddress), "Deposit", nil, i.payments)
193- match pw {
194- case r: Int =>
195-[StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), toString(i.originCaller)), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding))]
196- case _ =>
197- throw("Incorrect invoke result")
198- }
199- }
200- }
199+ else if ((strAssetType == "City"))
200+ then if (!(checkAssetOwner(toString(i.caller), SettlerKey)))
201+ then throw("You don't own the settler or has been destroyed")
202+ else {
203+ let settlerSheg = tryGetInteger(SettlerKey)
204+ let pw = invoke(Address(treasuryAddress), "NoPaymentDeposit", [toString(i.caller), UnitStakeSheg], nil)
205+ match pw {
206+ case r: Int =>
207+ let transfer = invoke(Address(treasuryAddress), "distributeNationPayRewards", [assetBuildCost], nil)
208+ match transfer {
209+ case t: Int =>
210+[DeleteEntry(SettlerKey), StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), NationKey), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding))]
211+ case _ =>
212+ throw("Error Distributing asset rewards")
213+ }
214+ case _ =>
215+ throw("Error adding deposit")
216+ }
217+ }
218+ else {
219+ let amountIn = value(i.payments[0].amount)
220+ if ((assetBuildCost > amountIn))
221+ then throw(("You provided less $heg than the needed cost for building this " + strAssetType))
222+ else if ((i.payments[0].assetId != shinywggid))
223+ then throw("Only $HEG payments allowed")
224+ else {
225+ let pw = invoke(Address(treasuryAddress), "Deposit", nil, [AttachedPayment(shinywggid, UnitStakeSheg)])
226+ match pw {
227+ case r: Int =>
228+[StringEntry(getBuildingStatusKey(toString(i.originCaller), i.transactionId, strAssetType), BuildStarted), StringEntry(getAssetOwnerKey(i.transactionId, strAssetType), toString(i.originCaller)), IntegerEntry(getBuildingFinishHeightKey(toString(i.originCaller), i.transactionId, strAssetType), (height + delayForBuilding)), ScriptTransfer(adminWallet, ToAdminWallet, shinywggid), ScriptTransfer(dailyGameRewardsWallet, ToGameRewardsWallet, shinywggid), ScriptTransfer(dailyStakingRewardsWallet, ToStakingRewardsWallet, shinywggid)]
229+ case _ =>
230+ throw("Incorrect invoke result")
231+ }
232+ }
233+ }
201234 }
202235
203236
204237
205238 @Callable(i)
206239 func FinishBuild (txIdStr,assetStr,NationKey) = {
207240 let txId = fromBase58String(txIdStr)
208241 let BuildingStatusKey = getBuildingStatusKey(toString(i.caller), txId, assetStr)
209242 let finishHeightKey = getBuildingFinishHeightKey(toString(i.caller), txId, assetStr)
210243 let assetKey = getAssetIdKey(txId, assetStr)
211244 let assetOwner = tryGetString(getAssetOwnerKey(txId, assetStr))
212245 if (isNationReservedAsset(assetStr))
213246 then if (if (!(checkAssetOwner(toString(i.caller), NationKey)))
214247 then !(checkAdmin(i.caller))
215248 else false)
216249 then throw("You are not authorized to perform this operation")
217250 else internalFinishBuild(NationKey, assetStr, assetKey, BuildingStatusKey, finishHeightKey)
218251 else if ((assetOwner != toString(i.caller)))
219252 then throw(("You cannot claim other's players " + assetStr))
220253 else {
221254 let buildingTxStatus = tryGetString(BuildingStatusKey)
222255 if ((buildingTxStatus == ""))
223256 then throw("No pending operations for this asset")
224257 else internalFinishBuild(toString(i.caller), assetStr, assetKey, BuildingStatusKey, finishHeightKey)
225258 }
226259 }
227260
228261
229262
230263 @Callable(i)
231264 func transferOwnership (assetId,newOwner) = {
232265 let strAssetType = split(assetId, "_")[0]
233266 if (!(checkAdmin(i.caller)))
234267 then throw("Only the admin can perform this operation")
235268 else $Tuple2(internalTrasnferOwnership(assetId, newOwner), newOwner)
236269 }
237270
238271
239272
240273 @Callable(i)
241274 func destroyAssetAndTransfer (assetId,toAddress) = {
242275 let strAssetType = split(assetId, "_")[0]
243276 if (!(checkAdmin(i.caller)))
244277 then throw("Only the admin can perform this operation")
245278 else {
246279 let oldOwner = tryGetString(getAssetOwnerKeyString(assetId))
247280 let assetCoins = tryGetInteger(assetId)
248281 let refCall = invoke(Address(treasuryAddress), "arbitraryAddCoins", [toAddress, assetCoins], nil)
249282 if ((refCall == refCall))
250283 then {
251284 let currentPower = nationsTryGetInteger((oldOwner + "_Power"))
252285 let assetPower = assetsPower[value(indexOf(Assets, strAssetType))]
253286 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - assetPower)], nil)
254287 if ((pw == pw))
255288 then match pw {
256289 case r: Int =>
257290 [DeleteEntry(assetId)]
258291 case _ =>
259292 throw("Incorrect invoke result")
260293 }
261294 else throw("Strict value is not equal to itself.")
262295 }
263296 else throw("Strict value is not equal to itself.")
264297 }
265298 }
266299
267300
268301
269302 @Callable(i)
270303 func destroyAssetFromUser (assetId) = {
271304 let strAssetType = split(assetId, "_")[0]
272305 if (!(checkAssetOwner(toString(i.caller), assetId)))
273306 then throw("You don't own this asset")
274307 else {
275308 let assetCoins = tryGetInteger(assetId)
276309 let currentPower = nationsTryGetInteger((toString(i.caller) + "_Power"))
277310 let assetPower = assetsPower[value(indexOf(Assets, strAssetType))]
278311 let pw = invoke(Address(nationsAddress), "setUserPower", [toString(i.caller), (currentPower - assetPower)], nil)
279312 if ((pw == pw))
280313 then match pw {
281314 case r: Int =>
282315 [DeleteEntry(assetId), ScriptTransfer(i.caller, assetCoins, shinywggid)]
283316 case _ =>
284317 throw("Incorrect invoke result")
285318 }
286319 else throw("Strict value is not equal to itself.")
287320 }
288321 }
289322
290323
291324
292325 @Callable(i)
293326 func setNationOwner (nationKey,newOwner) = if (checkAdmin(i.caller))
294327 then $Tuple2([StringEntry((nationKey + "_Owner"), newOwner)], true)
295328 else {
296329 let currentOwner = tryGetString((nationKey + "_Owner"))
297330 if ((currentOwner != toString(i.caller)))
298331 then throw("You are not the nation owner")
299332 else [StringEntry((nationKey + "_Owner"), newOwner)]
300333 }
301334
302335
303336
304337 @Callable(i)
305338 func buyNationItem (assetId,NationKey) = {
306339 let strAssetType = split(assetId, "_")[0]
307340 let n = nationsTryGetInteger(toString(i.caller))
308341 let nid = nationsTryGetInteger(NationKey)
309342 if ((n != nid))
310343 then throw("you can buy assets only from your nation")
311344 else if (!(checkAssetOwner(NationKey, assetId)))
312345 then throw("The asset does not belong to the nation")
313346 else if (!(isNationReservedAsset(strAssetType)))
314347 then throw("this asset cannot be sold by the nation")
315348 else {
316349 let ind = value(indexOf(Assets, strAssetType))
317350 let assetPrice = assetsSellPrice[ind]
318351 let amountIn = value(i.payments[0].amount)
319352 if ((assetPrice > amountIn))
320353 then throw(("You provided less $heg than the needed cost for buying this " + strAssetType))
321354 else if ((i.payments[0].assetId != shinywggid))
322355 then throw("Only $HEG payments allowed")
323356 else {
324357 let a = invoke(Address(treasuryAddress), "increaseNationWallet", [NationKey, amountIn], nil)
325358 match a {
326359 case b: Int =>
327360 (internalTrasnferOwnership(assetId, toString(i.caller)) :+ ScriptTransfer(Address(treasuryAddress), amountIn, shinywggid))
328361 case _ =>
329362 throw("Error transferring SHEG to nations wallet")
330363 }
331364 }
332365 }
333366 }
334367
335368
336369
337370 @Callable(i)
338371 func AddAssetFromMarkeplace (assetId,oldOwner,assetSheg) = if (!(checkAdmin(i.caller)))
339372 then throw("You are not allowed to perform this operation")
340373 else $Tuple2([StringEntry(getAssetOwnerKeyString(assetId), oldOwner), IntegerEntry(assetId, assetSheg)], oldOwner)
341374
342375
343376
344377 @Callable(i)
345378 func TransferAssetToMarketplace (assetId,sellprice) = if (!(checkAssetOwner(toString(i.caller), assetId)))
346379 then throw("You are not the owner of this asset")
347380 else {
348381 let assetSheg = tryGetInteger(assetId)
349382 let tr = invoke(Address(marketplaceAddress), "putOnSale", [assetId, assetSheg, sellprice], nil)
350383 match tr {
351384 case t: Int =>
352385 [DeleteEntry(getAssetOwnerKeyString(assetId)), DeleteEntry(assetId)]
353386 case _ =>
354387 throw("Error putting the item on the marketplace")
355388 }
356389 }
357390
358391

github/deemru/w8io/169f3d6 
50.76 ms