tx · G6yB3NHhQwkyce6J9m8MdErLKHVmZB9WLBSBWMkTG2GM 3MJ7c9oThApNhRftgvXgUEKWnuQUnAQ25ic: -0.03000000 Waves 2025.12.03 08:31 [783983] smart account 3MJ7c9oThApNhRftgvXgUEKWnuQUnAQ25ic > SELF 0.00000000 Waves
{ "type": 13, "id": "G6yB3NHhQwkyce6J9m8MdErLKHVmZB9WLBSBWMkTG2GM", "fee": 3000000, "feeAssetId": null, "timestamp": 1764739871357, "version": 2, "chainId": 82, "sender": "3MJ7c9oThApNhRftgvXgUEKWnuQUnAQ25ic", "senderPublicKey": "54A1hFcjQxQoWxNFeNPVNT9HzmGz8JXQPRYQRNX6r53Q", "proofs": [ "4hUYHdp1TnB7sr2QvSZ3N4bFfiDkf9gi9Jv2ghiVCVGV7Na5T28GCvovHMhozdpkbm3LnQ9EQeGh16UShfUXPH89" ], "script": "base64:BgINCAISABIDCgEIEgASAAwACWNvbmZpZ1N0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAg1jb25maWdBZGRyZXNzAiMzUE1vRWliZExlV3FjVVJRODM1MVhoYVd3eWFjRGM3RzRlNQAOQ09ORklHX0FERFJFU1MDCQAAAgUJY29uZmlnU3RyAgAFBHRoaXMJAQdBZGRyZXNzAQkA2QQBBQljb25maWdTdHIACXVzZG5JZFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIOdXNkbkFzc2V0SWRTdHICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAtwdXp6bGVJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIQcHV6emxlQXNzZXRJZFN0cgIsSEVCOFFhdzl4cldwV3M4dEhzaUFUWUdCV0RCdFAyUzdrY1BBTHJNdTQzQVMABnVzZG5JZAkA2QQBBQl1c2RuSWRTdHIACHB1enpsZUlkCQDZBAEFC3B1enpsZUlkU3RyAAVTY2FsZQCAoJSljR0BDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAEQY2xhaW1BbGlhc1Jlc3VsdAIHYWRkcmVzcwphc3NldElkU3RyBAphZGRyZXNzU3RyCQClCAEFB2FkZHJlc3MED2N1cnJlbnRJbnRlcmVzdAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAQRbGFzdENoZWNrSW50ZXJlc3QJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgUKYWRkcmVzc1N0cgILX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAQMc3Rha2VkQW1vdW50AwkAAAIFCmFzc2V0SWRTdHIFCXVzZG5JZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFkZHJlc3NTdHICB19zdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIJAKwCAgUKYWRkcmVzc1N0cgIBXwUKYXNzZXRJZFN0cgIHX3N0YWtlZAQGcmV3YXJkAwkAZgIFEWxhc3RDaGVja0ludGVyZXN0AAAJAGsDCQBlAgUPY3VycmVudEludGVyZXN0BRFsYXN0Q2hlY2tJbnRlcmVzdAUMc3Rha2VkQW1vdW50BQVTY2FsZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQphZGRyZXNzU3RyAgtfbGFzdENoZWNrXwUKYXNzZXRJZFN0cgIJX2ludGVyZXN0BQ9jdXJyZW50SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICAV8FCmFzc2V0SWRTdHICCF9jbGFpbWVkCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgkArAICBQphZGRyZXNzU3RyAgFfBQphc3NldElkU3RyAghfY2xhaW1lZAUGcmV3YXJkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFB2FkZHJlc3MFBnJld2FyZAUGdXNkbklkBQNuaWwBC2NsYWltUmVzdWx0AQdhZGRyZXNzCQEQY2xhaW1BbGlhc1Jlc3VsdAIFB2FkZHJlc3MFCXVzZG5JZFN0cgEQY2hlY2tORlRWYWxpZGl0eQEHYXNzZXRJZAAABAFpAQVzdGFrZQAECmFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyBAVuZnRJZAMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAABCQEFdmFsdWUBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAAIBAhFwbGVhc2UgYXR0YWNoIE5GVAQKYXNzZXRJZFN0cgkA2AQBBQZ1c2RuSWQED2N1cnJlbnRJbnRlcmVzdAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAQRdG90YWxTdGFrZWRBbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQINZ2xvYmFsX3N0YWtlZAQKYXNzZXRQb3dlcgkAawMAkE4JARBjaGVja05GVFZhbGlkaXR5AQUFbmZ0SWQABQQHTkZUTmFtZQMJAAACBQphc3NldFBvd2VyAJBOAglFYWdsZSBORlQCCEFuaWEgTkZUAwkAAAIFCmFzc2V0UG93ZXIAAAkAAgECFm5vdCB2YWxpZCBORlQgYXR0YWNoZWQJAM4IAgkBC2NsYWltUmVzdWx0AQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1nbG9iYWxfc3Rha2VkCQBkAgURdG90YWxTdGFrZWRBbW91bnQFCmFzc2V0UG93ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYWRkcmVzc1N0cgIHX3N0YWtlZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphZGRyZXNzU3RyAgdfc3Rha2VkBQphc3NldFBvd2VyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkA2AQBBQVuZnRJZAIGX293bmVyBQphZGRyZXNzU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBCAUBaQZjYWxsZXICBV9uZnRfCQDYBAEFBW5mdElkCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJANgEAQUFbmZ0SWQCBV9uYW1lBQdORlROYW1lBQNuaWwBaQEHdW5TdGFrZQEIbmZ0SWRTdHIECmFzc2V0UG93ZXIJAGsDAJBOCQEQY2hlY2tORlRWYWxpZGl0eQEJANkEAQUIbmZ0SWRTdHIABQQKYWRkcmVzc1N0cgkApQgBCAUBaQZjYWxsZXIEDHN0YWtlZEFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFkZHJlc3NTdHICB19zdGFrZWQECG5mdE93bmVyCQEMdHJ5R2V0U3RyaW5nAQkArAICBQhuZnRJZFN0cgIGX293bmVyAwkBAiE9AgUKYWRkcmVzc1N0cgUIbmZ0T3duZXIJAAIBAhx5b3UgZG9uJ3QgaGF2ZSBORlQgYXZhaWxhYmxlCQDOCAIJAQtjbGFpbVJlc3VsdAEIBQFpBmNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphZGRyZXNzU3RyAgdfc3Rha2VkCQBlAgUMc3Rha2VkQW1vdW50BQphc3NldFBvd2VyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1nbG9iYWxfc3Rha2VkCQBlAgkBDXRyeUdldEludGVnZXIBAg1nbG9iYWxfc3Rha2VkBQphc3NldFBvd2VyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFCG5mdElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUIbmZ0SWRTdHICBl9vd25lcgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICAghhZGRyZXNzXwkApQgBCAUBaQZjYWxsZXICBV9uZnRfBQhuZnRJZFN0cgUDbmlsAWkBC2NsYWltUmV3YXJkAAkBC2NsYWltUmVzdWx0AQgFAWkGY2FsbGVyAWkBC3RvcFVwUmV3YXJkAAQGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQKYXNzZXRJZFN0cgUJdXNkbklkU3RyBA9jdXJyZW50SW50ZXJlc3QJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICEWdsb2JhbF9sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfaW50ZXJlc3QEEXRvdGFsU3Rha2VkQW1vdW50CQENdHJ5R2V0SW50ZWdlcgECDWdsb2JhbF9zdGFrZWQEDWludGVyZXN0RGVsdGEDCQBmAgURdG90YWxTdGFrZWRBbW91bnQAAAkAawMFBmFtb3VudAUFU2NhbGUFEXRvdGFsU3Rha2VkQW1vdW50AAAEFGN1cnJlbnRVbHRyYUludGVyZXN0CQENdHJ5R2V0SW50ZWdlcgECH2dsb2JhbF9sYXN0Q2hlY2tfdWx0cmFfaW50ZXJlc3QEFnRvdGFsVWx0cmFTdGFrZWRBbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQITZ2xvYmFsX3VsdHJhX3N0YWtlZAQSdWx0cmFJbnRlcmVzdERlbHRhAwkAZgIFEXRvdGFsU3Rha2VkQW1vdW50AAAJAGsDBQZhbW91bnQFBVNjYWxlBRF0b3RhbFN0YWtlZEFtb3VudAAAAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQZ1c2RuSWQJAAIBAhR3cm9uZyBhc3NldCBhdHRhY2hlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICB2dsb2JhbF8FCmFzc2V0SWRTdHICCV9lYXJuaW5ncwkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB2dsb2JhbF8FCmFzc2V0SWRTdHICCV9lYXJuaW5ncwUGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAkAZAIFD2N1cnJlbnRJbnRlcmVzdAUNaW50ZXJlc3REZWx0YQUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleYsHdmU=", "height": 783983, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
| Old | New | Differences | |
|---|---|---|---|
| 1 | - | # no script | |
| 1 | + | {-# STDLIB_VERSION 6 #-} | |
| 2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
| 3 | + | {-# CONTENT_TYPE DAPP #-} | |
| 4 | + | let configStr = valueOrElse(getString(this, "configAddress"), "3PMoEibdLeWqcURQ8351XhaWwyacDc7G4e5") | |
| 5 | + | ||
| 6 | + | let CONFIG_ADDRESS = if ((configStr == "")) | |
| 7 | + | then this | |
| 8 | + | else Address(fromBase58String(configStr)) | |
| 9 | + | ||
| 10 | + | let usdnIdStr = valueOrElse(getString(CONFIG_ADDRESS, "usdnAssetIdStr"), "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p") | |
| 11 | + | ||
| 12 | + | let puzzleIdStr = valueOrElse(getString(CONFIG_ADDRESS, "puzzleAssetIdStr"), "HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS") | |
| 13 | + | ||
| 14 | + | let usdnId = fromBase58String(usdnIdStr) | |
| 15 | + | ||
| 16 | + | let puzzleId = fromBase58String(puzzleIdStr) | |
| 17 | + | ||
| 18 | + | let Scale = 1000000000000 | |
| 19 | + | ||
| 20 | + | func tryGetInteger (key) = match getInteger(this, key) { | |
| 21 | + | case b: Int => | |
| 22 | + | b | |
| 23 | + | case _ => | |
| 24 | + | 0 | |
| 25 | + | } | |
| 26 | + | ||
| 27 | + | ||
| 28 | + | func tryGetString (key) = match getString(this, key) { | |
| 29 | + | case a: String => | |
| 30 | + | a | |
| 31 | + | case _ => | |
| 32 | + | "" | |
| 33 | + | } | |
| 34 | + | ||
| 35 | + | ||
| 36 | + | func claimAliasResult (address,assetIdStr) = { | |
| 37 | + | let addressStr = toString(address) | |
| 38 | + | let currentInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest")) | |
| 39 | + | let lastCheckInterest = tryGetInteger((((addressStr + "_lastCheck_") + assetIdStr) + "_interest")) | |
| 40 | + | let stakedAmount = if ((assetIdStr == usdnIdStr)) | |
| 41 | + | then tryGetInteger((addressStr + "_staked")) | |
| 42 | + | else tryGetInteger((((addressStr + "_") + assetIdStr) + "_staked")) | |
| 43 | + | let reward = if ((lastCheckInterest > 0)) | |
| 44 | + | then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale) | |
| 45 | + | else 0 | |
| 46 | + | [IntegerEntry((((addressStr + "_lastCheck_") + assetIdStr) + "_interest"), currentInterest), IntegerEntry((((addressStr + "_") + assetIdStr) + "_claimed"), (tryGetInteger((((addressStr + "_") + assetIdStr) + "_claimed")) + reward)), ScriptTransfer(address, reward, usdnId)] | |
| 47 | + | } | |
| 48 | + | ||
| 49 | + | ||
| 50 | + | func claimResult (address) = claimAliasResult(address, usdnIdStr) | |
| 51 | + | ||
| 52 | + | ||
| 53 | + | func checkNFTValidity (assetId) = 0 | |
| 54 | + | ||
| 55 | + | ||
| 56 | + | @Callable(i) | |
| 57 | + | func stake () = { | |
| 58 | + | let addressStr = toString(i.caller) | |
| 59 | + | let nftId = if ((i.payments[0].amount == 1)) | |
| 60 | + | then value(i.payments[0].assetId) | |
| 61 | + | else throw("please attach NFT") | |
| 62 | + | let assetIdStr = toBase58String(usdnId) | |
| 63 | + | let currentInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest")) | |
| 64 | + | let totalStakedAmount = tryGetInteger("global_staked") | |
| 65 | + | let assetPower = fraction(10000, checkNFTValidity(nftId), 5) | |
| 66 | + | let NFTName = if ((assetPower == 10000)) | |
| 67 | + | then "Eagle NFT" | |
| 68 | + | else "Ania NFT" | |
| 69 | + | if ((assetPower == 0)) | |
| 70 | + | then throw("not valid NFT attached") | |
| 71 | + | else (claimResult(i.caller) ++ [IntegerEntry("global_staked", (totalStakedAmount + assetPower)), IntegerEntry((addressStr + "_staked"), (tryGetInteger((addressStr + "_staked")) + assetPower)), StringEntry((toBase58String(nftId) + "_owner"), addressStr), IntegerEntry(((("address_" + toString(i.caller)) + "_nft_") + toBase58String(nftId)), lastBlock.timestamp), StringEntry((toBase58String(nftId) + "_name"), NFTName)]) | |
| 72 | + | } | |
| 73 | + | ||
| 74 | + | ||
| 75 | + | ||
| 76 | + | @Callable(i) | |
| 77 | + | func unStake (nftIdStr) = { | |
| 78 | + | let assetPower = fraction(10000, checkNFTValidity(fromBase58String(nftIdStr)), 5) | |
| 79 | + | let addressStr = toString(i.caller) | |
| 80 | + | let stakedAmount = tryGetInteger((addressStr + "_staked")) | |
| 81 | + | let nftOwner = tryGetString((nftIdStr + "_owner")) | |
| 82 | + | if ((addressStr != nftOwner)) | |
| 83 | + | then throw("you don't have NFT available") | |
| 84 | + | else (claimResult(i.caller) ++ [IntegerEntry((addressStr + "_staked"), (stakedAmount - assetPower)), IntegerEntry("global_staked", (tryGetInteger("global_staked") - assetPower)), ScriptTransfer(i.caller, 1, fromBase58String(nftIdStr)), DeleteEntry((nftIdStr + "_owner")), DeleteEntry(((("address_" + toString(i.caller)) + "_nft_") + nftIdStr))]) | |
| 85 | + | } | |
| 86 | + | ||
| 87 | + | ||
| 88 | + | ||
| 89 | + | @Callable(i) | |
| 90 | + | func claimReward () = claimResult(i.caller) | |
| 91 | + | ||
| 92 | + | ||
| 93 | + | ||
| 94 | + | @Callable(i) | |
| 95 | + | func topUpReward () = { | |
| 96 | + | let amount = i.payments[0].amount | |
| 97 | + | let assetIdStr = usdnIdStr | |
| 98 | + | let currentInterest = tryGetInteger((("global_lastCheck_" + assetIdStr) + "_interest")) | |
| 99 | + | let totalStakedAmount = tryGetInteger("global_staked") | |
| 100 | + | let interestDelta = if ((totalStakedAmount > 0)) | |
| 101 | + | then fraction(amount, Scale, totalStakedAmount) | |
| 102 | + | else 0 | |
| 103 | + | let currentUltraInterest = tryGetInteger("global_lastCheck_ultra_interest") | |
| 104 | + | let totalUltraStakedAmount = tryGetInteger("global_ultra_staked") | |
| 105 | + | let ultraInterestDelta = if ((totalStakedAmount > 0)) | |
| 106 | + | then fraction(amount, Scale, totalStakedAmount) | |
| 107 | + | else 0 | |
| 108 | + | if ((i.payments[0].assetId != usdnId)) | |
| 109 | + | then throw("wrong asset attached") | |
| 110 | + | else [IntegerEntry((("global_" + assetIdStr) + "_earnings"), (tryGetInteger((("global_" + assetIdStr) + "_earnings")) + amount)), IntegerEntry((("global_lastCheck_" + assetIdStr) + "_interest"), (currentInterest + interestDelta))] | |
| 111 | + | } | |
| 112 | + | ||
| 113 | + | ||
| 114 | + | @Verifier(tx) | |
| 115 | + | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
| 116 | + |
github/deemru/w8io 13.36 ms ◑