tx · FH57hvH6xve1KaxPUQTCv1aZaGr7NTsrbhyLAYdzG7JL

3P7i87v9nfk6Tft8YumLrJJPLRjRrALk4iL:  -0.02800000 Waves

2024.04.17 21:09 [4133076] smart account 3P7i87v9nfk6Tft8YumLrJJPLRjRrALk4iL > SELF 0.00000000 Waves

{ "type": 13, "id": "FH57hvH6xve1KaxPUQTCv1aZaGr7NTsrbhyLAYdzG7JL", "fee": 2800000, "feeAssetId": null, "timestamp": 1713377418659, "version": 2, "chainId": 87, "sender": "3P7i87v9nfk6Tft8YumLrJJPLRjRrALk4iL", "senderPublicKey": "5Q7KaPEFgx9Ntm4ZtF9zABB52E1mjRVpJmEyWRJmorzf", "proofs": [ "3YTEkzSSHqYB7ZvYQq5TuK5AKePgCfhtScDnUnwy4vaQif7UxwawyEEqYv8koRQf3rKeX4ThiHxAJJB394x5RWFd" ], "script": "base64:AAIFAAAAAAAAADEIAhIDCgEIEgMKAQgSBAoCCAgSBQoDCAgBEgMKAQgSBQoDCAQEEgMKAQgSABIDCgEIAAAANwAAAAAFU2NhbGUAAAAAAAX14QABAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAABxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAAAAAIAAAAZc3RhdGljX3JlZkNvbnRyYWN0QWRkcmVzcwAAAAAVa2V5R2xvYmFsTGFzdEludGVyZXN0AgAAABlnbG9iYWxfbGFzdENoZWNrX2ludGVyZXN0AQAAABdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAAAAACAAAAFHN0YXRpY19vcmFjbGVBZGRyZXNzAQAAABRzdGF0aWNLZXlfZWdnQXNzZXRJZAAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABpzdGF0aWNLZXlfaW5jdWJhdG9yQWRkcmVzcwAAAAACAAAAF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzAQAAABhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAAAAAgAAABVzdGF0aWNfYnJlZWRlckFkZHJlc3MBAAAAG3N0YXRpY0tleV9hY2NCb29zdGVyQWRkcmVzcwAAAAACAAAAGHN0YXRpY19hY2NCb29zdGVyQWRkcmVzcwEAAAAYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAAAAAIAAAAVc3RhdGljX2NvdXBvbnNBZGRyZXNzAQAAABVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAAAAAgAAABJzdGF0aWNfYnVybkFkZHJlc3MBAAAAEnN0YXRpY0tleV9leHRyYUZlZQAAAAACAAAAD3N0YXRpY19leHRyYUZlZQEAAAAXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAAAAAgAAABRzdGF0aWNfZmVlQWdncmVnYXRvcgAAAAAPa2V5R2xvYmFsRWFybmVkAgAAAA9nbG9iYWxfZWFybmluZ3MBAAAAEnN0YXRpY0tleV9wZXJjaEZlZQAAAAACAAAAD3N0YXRpY19wZXJjaEZlZQEAAAAYc3RhdGljS2V5X3JlYmlydGhBZGRyZXNzAAAAAAIAAAAVc3RhdGljX3JlYmlydGhBZGRyZXNzAQAAAB5zdGF0aWNLZXlfdHVydGxlUmViaXJ0aEFkZHJlc3MAAAAAAgAAABtzdGF0aWNfdHVydGxlUmViaXJ0aEFkZHJlc3MBAAAAFnN0YXRpY0tleV9pdGVtc0FkZHJlc3MAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAQAAAA50b3RhbFN0YWtlZEtleQAAAAACAAAADHRvdGFsX3N0YWtlZAEAAAAfc3RhdGljS2V5X3Byb3h5U3Rha2luZ0NvbnRyYWN0cwAAAAACAAAAHHN0YXRpY19wcm94eVN0YWtpbmdDb250cmFjdHMBAAAACWdldE9yYWNsZQAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAMdHJ5R2V0U3RyaW5nAAAAAQkBAAAAF3N0YXRpY0tleV9vcmFjbGVBZGRyZXNzAAAAAAEAAAARZ2V0UmViaXJ0aEFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABhzdGF0aWNLZXlfcmViaXJ0aEFkZHJlc3MAAAAAAQAAAA1nZXRFZ2dBc3NldElkAAAAAAkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAFHN0YXRpY0tleV9lZ2dBc3NldElkAAAAAAEAAAATZ2V0SW5jdWJhdG9yQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAGnN0YXRpY0tleV9pbmN1YmF0b3JBZGRyZXNzAAAAAAEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABhzdGF0aWNLZXlfYnJlZWRlckFkZHJlc3MAAAAAAQAAABRnZXRBY2NCb29zdGVyQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAG3N0YXRpY0tleV9hY2NCb29zdGVyQWRkcmVzcwAAAAABAAAAEWdldENvdXBvbnNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAYc3RhdGljS2V5X2NvdXBvbnNBZGRyZXNzAAAAAAEAAAAOZ2V0QnVybkFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABVzdGF0aWNLZXlfYnVybkFkZHJlc3MAAAAAAQAAABBnZXRGZWVBZ2dyZWdhdG9yAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAACQEAAAAXc3RhdGljS2V5X2ZlZUFnZ3JlZ2F0b3IAAAAAAQAAABVnZXRSZWZDb250cmFjdEFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABxzdGF0aWNLZXlfcmVmQ29udHJhY3RBZGRyZXNzAAAAAAEAAAAXZ2V0VHVydGxlUmViaXJ0aEFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAAB5zdGF0aWNLZXlfdHVydGxlUmViaXJ0aEFkZHJlc3MAAAAAAQAAAA9nZXRJdGVtc0FkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABZzdGF0aWNLZXlfaXRlbXNBZGRyZXNzAAAAAAEAAAAPZ2V0UHJveHlTdGFraW5nAAAAAAkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAAB9zdGF0aWNLZXlfcHJveHlTdGFraW5nQ29udHJhY3RzAAAAAAEAAAAUa2V5TGFzdENoZWNrSW50ZXJlc3QAAAACAAAAB2FkZHJlc3MAAAAFYXNzZXQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAB19hc3NldF8FAAAABWFzc2V0AgAAABJfbGFzdENoZWNrSW50ZXJlc3QBAAAAEWFzc2V0RmFybWluZ1Bvd2VyAAAAAgAAAAdhZGRyZXNzAAAABWFzc2V0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAAAdfYXNzZXRfBQAAAAVhc3NldAIAAAANX2Zhcm1pbmdQb3dlcgEAAAAQcmV3YXJkQ2xhaW1lZEtleQAAAAIAAAAHYWRkcmVzcwAAAAVhc3NldAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAHYWRkcmVzcwIAAAAHX2Fzc2V0XwUAAAAFYXNzZXQCAAAACF9jbGFpbWVkAQAAABJ0b3RhbFN0YWtlZFVzZXJLZXkAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgIAAAANdG90YWxfc3Rha2VkXwUAAAAHYWRkcmVzcwAAAAANUmVmZXJlclJld2FyZAAAAAAAAAAABQEAAAAWY2hlY2tBZGRpdGlvbmFsUGF5bWVudAAAAAEAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAHcGF5bWVudAAAAAdhc3Nl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cml0eQEAAAASdXBkYXRlRmFybWluZ1Bvd2VyAAAAAgAAAAdhZGRyZXNzAAAABWFzc2V0BAAAAAt0b3RhbFN0YWtlZAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAOdG90YWxTdGFrZWRLZXkAAAAABAAAAA90b3RhbFN0YWtlZFVzZXIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAEnRvdGFsU3Rha2VkVXNlcktleQAAAAEFAAAAB2FkZHJlc3MEAAAACWN1cnJlbnRGUAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAQAAAAFbmV3RlAJAQAAAAphc0ludFR1cGxlAAAAAQkAA/wAAAAEBQAAAAR0aGlzAgAAABJjYWxjdWxhdGVGYXJtUG93ZXIJAARMAAAAAgUAAAAFYXNzZXQFAAAAA25pbAUAAAADbmlsAwkBAAAAAiE9AAAAAgUAAAAJY3VycmVudEZQAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG90YWxTdGFrZWRLZXkAAAAACQAAZAAAAAIJAABlAAAAAgUAAAALdG90YWxTdGFrZWQFAAAACWN1cnJlbnRGUAgFAAAABW5ld0ZQAAAAAl8xCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASdG90YWxTdGFrZWRVc2VyS2V5AAAAAQUAAAAHYWRkcmVzcwkAAGQAAAACCQAAZQAAAAIFAAAAD3RvdGFsU3Rha2VkVXNlcgUAAAAJY3VycmVudEZQCAUAAAAFbmV3RlAAAAACXzEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABFhc3NldEZhcm1pbmdQb3dlcgAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0CAUAAAAFbmV3RlAAAAACXzEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAD0RFQlVHX2N1cnJlbnRGUAUAAAAJY3VycmVudEZQCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAtERUJVR19uZXdGUAgFAAAABW5ld0ZQAAAAAl8xBQAAAANuaWwFAAAAA25pbAEAAAASY2xhaW1TdGFraW5nUmVzdWx0AAAAAwAAAAdhZGRyZXNzAAAABWFzc2V0AAAABnJlY2FsYwQAAAAPY3VycmVudEludGVyZXN0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAAFWtleUdsb2JhbExhc3RJbnRlcmVzdAQAAAARbGFzdENoZWNrSW50ZXJlc3QJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkBAAAAFGtleUxhc3RDaGVja0ludGVyZXN0AAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQEAAAADHN0YWtlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAARYXNzZXRGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAQAAAAIZnBVcGRhdGUDBQAAAAZyZWNhbGMJAQAAABJ1cGRhdGVGYXJtaW5nUG93ZXIAAAACBQAAAAdhZGRyZXNzBQAAAAVhc3NldAUAAAADbmlsAwkAAAAAAAACBQAAAAhmcFVwZGF0ZQUAAAAIZnBVcGRhdGUEAAAABnJld2FyZAMJAABmAAAAAgUAAAARbGFzdENoZWNrSW50ZXJlc3QAAAAAAAAAAAAJAABrAAAAAwkAAGUAAAACBQAAAA9jdXJyZW50SW50ZXJlc3QFAAAAEWxhc3RDaGVja0ludGVyZXN0BQAAAAxzdGFrZWRBbW91bnQFAAAABVNjYWxlAAAAAAAAAAAACQAFFAAAAAIJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAHYWRkcmVzcwUAAAAGcmV3YXJkCQEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABRrZXlMYXN0Q2hlY2tJbnRlcmVzdAAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAAA9jdXJyZW50SW50ZXJlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABByZXdhcmRDbGFpbWVkS2V5AAAAAgUAAAAHYWRkcmVzcwUAAAAFYXNzZXQJAABkAAAAAgkBAAAADXRyeUdldEludGVnZXIAAAABCQEAAAAQcmV3YXJkQ2xhaW1lZEtleQAAAAIFAAAAB2FkZHJlc3MFAAAABWFzc2V0BQAAAAZyZXdhcmQFAAAAA25pbAUAAAAIZnBVcGRhdGUFAAAABnJld2FyZAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAACWFzQm9vbGVhbgAAAAEAAAAFdmFsdWUEAAAAByRtYXRjaDAFAAAABXZhbHVlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAdib29sZWFuBQAAAAckbWF0Y2gwBQAAAAdib29sZWFuCQAAAgAAAAECAAAAIkZBQjogd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEJvb2xlYW4BAAAAE2NhbGN1bGF0ZVBlcmNoUHJpY2UAAAABAAAAB2FkZHJlc3MEAAAAEWhhc0FydGVmYWN0U3Rha2VkCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAUZ2V0QWNjQm9vc3RlckFkZHJlc3MAAAAACQABLAAAAAIJAAEsAAAAAgIAAAALQVJULVhNSVNUTF8FAAAAB2FkZHJlc3MCAAAABl9vd25lcgQAAAAKcGVyY2hQcmljZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgkBAAAACWdldE9yYWNsZQAAAAAJAQAAABJzdGF0aWNLZXlfcGVyY2hGZWUAAAAAAwkAAAAAAAACBQAAABFoYXNBcnRlZmFjdFN0YWtlZAIAAAAABQAAAApwZXJjaFByaWNlCQAAaAAAAAIJAABpAAAAAgUAAAAKcGVyY2hQcmljZQAAAAAAAAAACgAAAAAAAAAACQEAAAAQaXNQcm94eVN0YWtpbmdTYwAAAAEAAAAHYWRkcmVzcwQAAAAQYWxsb3dlZENvbnRyYWN0cwkBAAAAD2dldFByb3h5U3Rha2luZwAAAAAEAAAAFGFsbG93ZWRDb250cmFjdHNMaXN0CQAEtQAAAAIFAAAAEGFsbG93ZWRDb250cmFjdHMCAAAAATsJAQAAAAIhPQAAAAIJAARPAAAAAgUAAAAUYWxsb3dlZENvbnRyYWN0c0xpc3QFAAAAB2FkZHJlc3MFAAAABHVuaXQA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cmF0ZVBlcmNoZXMAAAABAAAAB2FkZHJlc3MEAAAACm9sZEZhcm1pbmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABVzdGF0aWNfZmFybWluZ0FkZHJlc3MKAQAAABd0cnlHZXRJbnRlZ2VyT2xkRmFybWluZwAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAACm9sZEZhcm1pbmcFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAABAAAAAxwZXJjaEFtb3VudEIJAQAAABd0cnlHZXRJbnRlZ2VyT2xkRmFybWluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAATX3BlcmNoZXNBdmFpbGFibGVfQgMJAAAAAAAAAgUAAAAMcGVyY2hBbW91bnRCBQAAAAxwZXJjaEFtb3VudEIEAAAADHBlcmNoQW1vdW50UgkBAAAAF3RyeUdldEludGVnZXJPbGRGYXJtaW5nAAAAAQkAASwAAAACCQABLAAAAAICAAAACGFkZHJlc3NfBQAAAAdhZGRyZXNzAgAAABNfcGVyY2hlc0F2YWlsYWJsZV9SAwkAAAAAAAACBQAAAAxwZXJjaEFtb3VudFIFAAAADHBlcmNoQW1vdW50UgQAAAAMcGVyY2hBbW91bnRHCQEAAAAXdHJ5R2V0SW50ZWdlck9sZEZhcm1pbmcAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIYWRkcmVzc18FAAAAB2FkZHJlc3MCAAAAE19wZXJjaGVzQXZhaWxhYmxlX0cDCQAAAAAAAAIFAAAADHBlcmNoQW1vdW50RwUAAAAMcGVyY2hBbW91bnRHBAAAAAxwZXJjaEFtb3VudFkJAQAAABd0cnlHZXRJbnRlZ2VyT2xkRmFybWluZwAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhhZGRyZXNzXwUAAAAHYWRkcmVzcwIAAAATX3BlcmNoZXNBdmFpbGFibGVfWQMJAAAAAAAAAgUAAAAMcGVyY2hBbW91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", "height": 4133076, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B1RPVLA1ZeBFaWa4AFGUggUzybJQhApXFmRTZ71c7aPS Next: EYEuQihysqBL5YbDZonCcb7EqpPyW1QSK8Cd2Fw9EgTM Diff:
OldNewDifferences
396396
397397
398398 @Callable(i)
399-func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (if (stakeWithoutPerch)
400- then !(isProxyStakingSc(toString(i.caller)))
401- else false)
402- then throw("You can't stake without a perch")
403- else {
404- let validPayment = checkAdditionalPayment(i.payments[0])
405- if ((validPayment == validPayment))
406- then {
407- let pmt = value(i.payments[1])
408- let assetId = value(pmt.assetId)
409- let assetName = value(value(assetInfo(assetId)).name)
410- let isJackpot = (takeRight(assetName, 1) == "U")
411- let address = toString(i.caller)
412- let perchAddress = if (usePerchOrigin)
413- then toString(i.originCaller)
414- else address
415- let rarity = getAssetRarityComplete(isJackpot, assetName)
416- let perches = if (stakeWithoutPerch)
417- then nil
418- else {
419- let color = if (isJackpot)
420- then jColor
421- else takeRight(assetName, 1)
422- let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
423- if ((0 >= availablePerches))
424- then throw(("no perches available for the color " + color))
425- else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
426- }
427- if ((perches == perches))
428- then if ((pmt.amount != 1))
429- then throw("NFT is not attached")
430- else {
431- let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId)], nil))
432- if ((farmingPower == farmingPower))
399+func migratePerches (address) = {
400+ let oldFarming = addressFromStringValue(tryGetStringExternal(getOracle(), "static_farmingAddress"))
401+ func tryGetIntegerOldFarming (key) = match getInteger(oldFarming, key) {
402+ case b: Int =>
403+ b
404+ case _ =>
405+ 0
406+ }
407+
408+ let perchAmountB = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_B"))
409+ if ((perchAmountB == perchAmountB))
410+ then {
411+ let perchAmountR = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_R"))
412+ if ((perchAmountR == perchAmountR))
413+ then {
414+ let perchAmountG = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_G"))
415+ if ((perchAmountG == perchAmountG))
416+ then {
417+ let perchAmountY = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_Y"))
418+ if ((perchAmountY == perchAmountY))
433419 then {
434- let result = claimStakingResult(address, toBase58String(assetId), false)
435- if ((result == result))
436- then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
420+ let perchAmountBInvoke = invoke(this, "addFreePerch", [address, "B", perchAmountB], nil)
421+ if ((perchAmountBInvoke == perchAmountBInvoke))
422+ then {
423+ let perchAmountRInvoke = invoke(this, "addFreePerch", [address, "R", perchAmountR], nil)
424+ if ((perchAmountRInvoke == perchAmountRInvoke))
425+ then {
426+ let perchAmountGInvoke = invoke(this, "addFreePerch", [address, "G", perchAmountG], nil)
427+ if ((perchAmountGInvoke == perchAmountGInvoke))
428+ then {
429+ let perchAmountYInvoke = invoke(this, "addFreePerch", [address, "Y", perchAmountY], nil)
430+ if ((perchAmountYInvoke == perchAmountYInvoke))
431+ then if (if (if (if ((perchAmountB == 0))
432+ then (perchAmountR == 0)
433+ else false)
434+ then (perchAmountG == 0)
435+ else false)
436+ then (perchAmountY == 0)
437+ else false)
438+ then throw("Nothing to migrate")
439+ else {
440+ let invokePerchesDelete = invoke(oldFarming, "removePerches", [address], nil)
441+ if ((invokePerchesDelete == invokePerchesDelete))
442+ then nil
443+ else throw("Strict value is not equal to itself.")
444+ }
445+ else throw("Strict value is not equal to itself.")
446+ }
447+ else throw("Strict value is not equal to itself.")
448+ }
449+ else throw("Strict value is not equal to itself.")
450+ }
437451 else throw("Strict value is not equal to itself.")
438452 }
439453 else throw("Strict value is not equal to itself.")
440454 }
441- else throw("Strict value is not equal to itself.")
442- }
443- else throw("Strict value is not equal to itself.")
444- }
455+ else throw("Strict value is not equal to itself.")
456+ }
457+ else throw("Strict value is not equal to itself.")
458+ }
459+ else throw("Strict value is not equal to itself.")
460+ }
461+
462+
463+
464+@Callable(i)
465+func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (true)
466+ then throw("Staking is disabled")
467+ else if (if (stakeWithoutPerch)
468+ then !(isProxyStakingSc(toString(i.caller)))
469+ else false)
470+ then throw("You can't stake without a perch")
471+ else {
472+ let validPayment = checkAdditionalPayment(i.payments[0])
473+ if ((validPayment == validPayment))
474+ then {
475+ let pmt = value(i.payments[1])
476+ let assetId = value(pmt.assetId)
477+ let assetName = value(value(assetInfo(assetId)).name)
478+ let isJackpot = (takeRight(assetName, 1) == "U")
479+ let address = toString(i.caller)
480+ let perchAddress = if (usePerchOrigin)
481+ then toString(i.originCaller)
482+ else address
483+ let rarity = getAssetRarityComplete(isJackpot, assetName)
484+ let perches = if (stakeWithoutPerch)
485+ then nil
486+ else {
487+ let color = if (isJackpot)
488+ then jColor
489+ else takeRight(assetName, 1)
490+ let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
491+ if ((0 >= availablePerches))
492+ then throw(("no perches available for the color " + color))
493+ else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
494+ }
495+ if ((perches == perches))
496+ then if ((pmt.amount != 1))
497+ then throw("NFT is not attached")
498+ else {
499+ let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId)], nil))
500+ if ((farmingPower == farmingPower))
501+ then {
502+ let result = claimStakingResult(address, toBase58String(assetId), false)
503+ if ((result == result))
504+ then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
505+ else throw("Strict value is not equal to itself.")
506+ }
507+ else throw("Strict value is not equal to itself.")
508+ }
509+ else throw("Strict value is not equal to itself.")
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
445513
446514
447515
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Scale = 100000000
55
66 func tryGetStringExternal (address,key) = match getString(address, key) {
77 case a: String =>
88 a
99 case _ =>
1010 ""
1111 }
1212
1313
1414 func tryGetString (key) = tryGetStringExternal(this, key)
1515
1616
1717 func staticKey_refContractAddress () = "static_refContractAddress"
1818
1919
2020 let keyGlobalLastInterest = "global_lastCheck_interest"
2121
2222 func staticKey_oracleAddress () = "static_oracleAddress"
2323
2424
2525 func staticKey_eggAssetId () = "static_eggAssetId"
2626
2727
2828 func staticKey_incubatorAddress () = "static_incubatorAddress"
2929
3030
3131 func staticKey_breederAddress () = "static_breederAddress"
3232
3333
3434 func staticKey_accBoosterAddress () = "static_accBoosterAddress"
3535
3636
3737 func staticKey_couponsAddress () = "static_couponsAddress"
3838
3939
4040 func staticKey_burnAddress () = "static_burnAddress"
4141
4242
4343 func staticKey_extraFee () = "static_extraFee"
4444
4545
4646 func staticKey_feeAggregator () = "static_feeAggregator"
4747
4848
4949 let keyGlobalEarned = "global_earnings"
5050
5151 func staticKey_perchFee () = "static_perchFee"
5252
5353
5454 func staticKey_rebirthAddress () = "static_rebirthAddress"
5555
5656
5757 func staticKey_turtleRebirthAddress () = "static_turtleRebirthAddress"
5858
5959
6060 func staticKey_itemsAddress () = "static_itemsAddress"
6161
6262
6363 func totalStakedKey () = "total_staked"
6464
6565
6666 func staticKey_proxyStakingContracts () = "static_proxyStakingContracts"
6767
6868
6969 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
7070
7171
7272 func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_rebirthAddress())))
7373
7474
7575 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), staticKey_eggAssetId()))
7676
7777
7878 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_incubatorAddress())))
7979
8080
8181 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_breederAddress())))
8282
8383
8484 func getAccBoosterAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_accBoosterAddress())))
8585
8686
8787 func getCouponsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_couponsAddress())))
8888
8989
9090 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_burnAddress())))
9191
9292
9393 func getFeeAggregator () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_feeAggregator())))
9494
9595
9696 func getRefContractAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_refContractAddress())))
9797
9898
9999 func getTurtleRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_turtleRebirthAddress())))
100100
101101
102102 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), staticKey_itemsAddress())))
103103
104104
105105 func getProxyStaking () = tryGetStringExternal(getOracle(), staticKey_proxyStakingContracts())
106106
107107
108108 func keyLastCheckInterest (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_lastCheckInterest")
109109
110110
111111 func assetFarmingPower (address,asset) = (((("address_" + address) + "_asset_") + asset) + "_farmingPower")
112112
113113
114114 func rewardClaimedKey (address,asset) = (((address + "_asset_") + asset) + "_claimed")
115115
116116
117117 func totalStakedUserKey (address) = ("total_staked_" + address)
118118
119119
120120 let RefererReward = 5
121121
122122 func checkAdditionalPayment (payment) = if (isDefined(payment.assetId))
123123 then throw("FCAP: Please attach waves")
124124 else {
125125 let feeAmount = getIntegerValue(getOracle(), staticKey_extraFee())
126126 if ((payment.amount != feeAmount))
127127 then throw((("FCAP: Please attach exactly " + toString(feeAmount)) + " amount of wavelets"))
128128 else [ScriptTransfer(getFeeAggregator(), feeAmount, unit)]
129129 }
130130
131131
132132 func tryGetInteger (key) = match getInteger(this, key) {
133133 case b: Int =>
134134 b
135135 case _ =>
136136 0
137137 }
138138
139139
140140 func asInt (value) = match value {
141141 case int: Int =>
142142 int
143143 case _ =>
144144 throw("FAI: wrong type, expected: Int")
145145 }
146146
147147
148148 func asIntTuple (value) = match value {
149149 case int: (Int, Int) =>
150150 int
151151 case _ =>
152152 throw("FAI: wrong type, expected: (Int,Int)")
153153 }
154154
155155
156156 func handleStakingTopUp (amount) = {
157157 let currentInterest = tryGetInteger(keyGlobalLastInterest)
158158 let totalStakedAmount = tryGetInteger(totalStakedKey())
159159 let interestDelta = if ((totalStakedAmount > 0))
160160 then fraction(amount, Scale, totalStakedAmount)
161161 else 0
162162 [IntegerEntry(keyGlobalEarned, (tryGetInteger(keyGlobalEarned) + amount)), IntegerEntry(keyGlobalLastInterest, (currentInterest + interestDelta))]
163163 }
164164
165165
166166 func asString (value) = match value {
167167 case string: String =>
168168 string
169169 case _ =>
170170 throw("FAS: wrong type, expected: String")
171171 }
172172
173173
174174 func tryGetBoolean (key) = match getBoolean(this, key) {
175175 case b: Boolean =>
176176 b
177177 case _ =>
178178 false
179179 }
180180
181181
182182 func tryGetBooleanExternal (address,key) = match getBoolean(address, key) {
183183 case b: Boolean =>
184184 b
185185 case _ =>
186186 false
187187 }
188188
189189
190190 func getAssetOrigin (generation) = if ((generation == "G"))
191191 then getIncubatorAddress()
192192 else getBreederAddress()
193193
194194
195195 func getAssetRarity (genotype,generation) = {
196196 let quantity = valueOrErrorMessage(getInteger(getAssetOrigin(generation), (("stats_" + genotype) + "_quantity")), (("stats_" + genotype) + "_quantity not found"))
197197 let power = pow((10000 / quantity), 4, 5, 1, 2, FLOOR)
198198 if ((power > 0))
199199 then power
200200 else 2
201201 }
202202
203203
204204 func getAssetRarityComplete (isJackpot,assetName) = {
205205 let rarity = if (isJackpot)
206206 then 100
207207 else {
208208 let generation = take(takeRight(assetName, 2), 1)
209209 let farmGen = asString(invoke(getBreederAddress(), "getGenFromName", [assetName], nil))
210210 if ((farmGen == farmGen))
211211 then getAssetRarity(farmGen, generation)
212212 else throw("Strict value is not equal to itself.")
213213 }
214214 rarity
215215 }
216216
217217
218218 func updateFarmingPower (address,asset) = {
219219 let totalStaked = tryGetInteger(totalStakedKey())
220220 let totalStakedUser = tryGetInteger(totalStakedUserKey(address))
221221 let currentFP = tryGetInteger(assetFarmingPower(address, asset))
222222 let newFP = asIntTuple(invoke(this, "calculateFarmPower", [asset], nil))
223223 if ((currentFP != 0))
224224 then [IntegerEntry(totalStakedKey(), ((totalStaked - currentFP) + newFP._1)), IntegerEntry(totalStakedUserKey(address), ((totalStakedUser - currentFP) + newFP._1)), IntegerEntry(assetFarmingPower(address, asset), newFP._1), IntegerEntry("DEBUG_currentFP", currentFP), IntegerEntry("DEBUG_newFP", newFP._1)]
225225 else nil
226226 }
227227
228228
229229 func claimStakingResult (address,asset,recalc) = {
230230 let currentInterest = tryGetInteger(keyGlobalLastInterest)
231231 let lastCheckInterest = tryGetInteger(keyLastCheckInterest(address, asset))
232232 let stakedAmount = tryGetInteger(assetFarmingPower(address, asset))
233233 let fpUpdate = if (recalc)
234234 then updateFarmingPower(address, asset)
235235 else nil
236236 if ((fpUpdate == fpUpdate))
237237 then {
238238 let reward = if ((lastCheckInterest > 0))
239239 then fraction((currentInterest - lastCheckInterest), stakedAmount, Scale)
240240 else 0
241241 $Tuple2(([ScriptTransfer(Address(fromBase58String(address)), reward, getEggAssetId()), IntegerEntry(keyLastCheckInterest(address, asset), currentInterest), IntegerEntry(rewardClaimedKey(address, asset), (tryGetInteger(rewardClaimedKey(address, asset)) + reward))] ++ fpUpdate), reward)
242242 }
243243 else throw("Strict value is not equal to itself.")
244244 }
245245
246246
247247 func asBoolean (value) = match value {
248248 case boolean: Boolean =>
249249 boolean
250250 case _ =>
251251 throw("FAB: wrong type, expected: Boolean")
252252 }
253253
254254
255255 func calculatePerchPrice (address) = {
256256 let hasArtefactStaked = tryGetStringExternal(getAccBoosterAddress(), (("ART-XMISTL_" + address) + "_owner"))
257257 let perchPrice = getIntegerValue(getOracle(), staticKey_perchFee())
258258 if ((hasArtefactStaked == ""))
259259 then perchPrice
260260 else ((perchPrice / 10) * 9)
261261 }
262262
263263
264264 func isProxyStakingSc (address) = {
265265 let allowedContracts = getProxyStaking()
266266 let allowedContractsList = split(allowedContracts, ";")
267267 (indexOf(allowedContractsList, address) != unit)
268268 }
269269
270270
271271 @Callable(i)
272272 func calculateFarmPower (assetId) = if (!(if ((value(assetInfo(fromBase58String(assetId))).issuer == getBreederAddress()))
273273 then true
274274 else (value(assetInfo(fromBase58String(assetId))).issuer == getIncubatorAddress())))
275275 then throw("This does not seem like a valid Duck!")
276276 else {
277277 let assetName = value(assetInfo(fromBase58String(assetId))).name
278278 let gen = takeRight(assetName, 1)
279279 let isJackpot = (takeRight(assetName, 1) == "U")
280280 let rarity = getAssetRarityComplete(isJackpot, assetName)
281281 let genotype = split(dropRight(drop(assetName, 5), 3), "")
282282 func uniqueArrayFilter (accum,nextGen) = if (!(containsElement(accum, nextGen)))
283283 then (accum :+ nextGen)
284284 else accum
285285
286286 let uniqueList = {
287287 let $l = genotype
288288 let $s = size($l)
289289 let $acc0 = nil
290290 func $f0_1 ($a,$i) = if (($i >= $s))
291291 then $a
292292 else uniqueArrayFilter($a, $l[$i])
293293
294294 func $f0_2 ($a,$i) = if (($i >= $s))
295295 then $a
296296 else throw("List size exceeds 8")
297297
298298 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8)
299299 }
300300 let totalGenes = if ((gen == "U"))
301301 then 8
302302 else size(uniqueList)
303303 let power = pow(15, 1, totalGenes, 0, 2, DOWN)
304304 let multiplier = (((height - 3750000) * 100) / (((60 * 24) * 30) * 3))
305305 let basePower = tryGetInteger((assetId + "_basePower"))
306306 let finalPower = if ((basePower > 0))
307307 then basePower
308308 else ((power * multiplier) / 100)
309309 let finalPowerRarity = ((finalPower * rarity) / 100)
310310 let farmBoost = asInt(invoke(getItemsAddress(), "calculateFarmingPowerBoost", [assetId, toString(i.originCaller)], nil))
311311 if ((farmBoost == farmBoost))
312312 then {
313313 let finalPowerRarityBoost = (finalPowerRarity + ((finalPowerRarity * farmBoost) / 100))
314314 $Tuple2([IntegerEntry(("DEBUG_" + assetName), finalPower), IntegerEntry(("DEBUG_RARITY" + assetName), rarity), IntegerEntry(("DEBUG_FPRARITY_" + assetName), finalPowerRarity), IntegerEntry(("DEBUG_FARMBOOST_" + assetName), farmBoost), IntegerEntry(("DEBUG_FPRARITYBOOST_" + assetName), finalPowerRarityBoost), IntegerEntry(("DEBUG_POWER_" + assetName), power), IntegerEntry(("DEBUG_BASEPOWER_" + assetName), basePower), IntegerEntry(("DEBUG_COEFFICIENT_" + assetName), multiplier), IntegerEntry(("DEBUG_BOOST_" + assetName), farmBoost)], $Tuple2(finalPowerRarityBoost, finalPower))
315315 }
316316 else throw("Strict value is not equal to itself.")
317317 }
318318
319319
320320
321321 @Callable(i)
322322 func configureOracle (oracle) = if ((i.caller != this))
323323 then throw("FCO: admin only")
324324 else [StringEntry(staticKey_oracleAddress(), oracle)]
325325
326326
327327
328328 @Callable(i)
329329 func buyPerch (colorI,refererAddress) = {
330330 let validPayment = checkAdditionalPayment(i.payments[0])
331331 if ((validPayment == validPayment))
332332 then {
333333 let color = if ((colorI == "U"))
334334 then "B"
335335 else colorI
336336 if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
337337 then throw("you need to set color properly")
338338 else {
339339 let exactPrice = calculatePerchPrice(toString(i.caller))
340340 let leftToPay = if ((i.originCaller == i.caller))
341341 then {
342342 let amountPaidByCoupons = asInt(invoke(getCouponsAddress(), "useCoupons", [exactPrice], nil))
343343 if ((amountPaidByCoupons == amountPaidByCoupons))
344344 then (exactPrice - amountPaidByCoupons)
345345 else throw("Strict value is not equal to itself.")
346346 }
347347 else exactPrice
348348 let firstPayment = if ((size(i.payments) == 2))
349349 then value(i.payments[1])
350350 else value(i.payments[0])
351351 if ((firstPayment.assetId != getEggAssetId()))
352352 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
353353 else if ((firstPayment.amount != leftToPay))
354354 then throw(((("FBP: To buy a perch you currently need the following amount of EGGlets: " + toString(leftToPay)) + " ") + toString(i.caller)))
355355 else {
356356 let refererRewardForPerch = fraction(leftToPay, 5, 100)
357357 let refCall = asBoolean(invoke(getRefContractAddress(), "refPayment", [refererAddress], [AttachedPayment(getEggAssetId(), refererRewardForPerch)]))
358358 if ((refCall == refCall))
359359 then {
360360 let toBurn = if (refCall)
361361 then (leftToPay - refererRewardForPerch)
362362 else leftToPay
363363 let burnCall = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), toBurn)])
364364 if ((burnCall == burnCall))
365365 then {
366366 let perchAmountKey = ((("address_" + toString(i.caller)) + "_perchesAvailable_") + color)
367367 let perchAmount = tryGetInteger(perchAmountKey)
368368 ([IntegerEntry(perchAmountKey, (perchAmount + 1))] ++ validPayment)
369369 }
370370 else throw("Strict value is not equal to itself.")
371371 }
372372 else throw("Strict value is not equal to itself.")
373373 }
374374 }
375375 }
376376 else throw("Strict value is not equal to itself.")
377377 }
378378
379379
380380
381381 @Callable(i)
382382 func addFreePerch (address,color,amount) = if ((0 > value(indexOf(["B", "R", "G", "Y"], color))))
383383 then throw("you need to set color properly")
384384 else if (if (if ((i.caller != getRebirthAddress()))
385385 then (i.caller != getTurtleRebirthAddress())
386386 else false)
387387 then (i.caller != this)
388388 else false)
389389 then throw("rebirth and admin only")
390390 else {
391391 let perchAmountKey = ((("address_" + address) + "_perchesAvailable_") + color)
392392 let perchAmount = tryGetInteger(perchAmountKey)
393393 $Tuple2([IntegerEntry(perchAmountKey, (perchAmount + amount))], "")
394394 }
395395
396396
397397
398398 @Callable(i)
399-func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (if (stakeWithoutPerch)
400- then !(isProxyStakingSc(toString(i.caller)))
401- else false)
402- then throw("You can't stake without a perch")
403- else {
404- let validPayment = checkAdditionalPayment(i.payments[0])
405- if ((validPayment == validPayment))
406- then {
407- let pmt = value(i.payments[1])
408- let assetId = value(pmt.assetId)
409- let assetName = value(value(assetInfo(assetId)).name)
410- let isJackpot = (takeRight(assetName, 1) == "U")
411- let address = toString(i.caller)
412- let perchAddress = if (usePerchOrigin)
413- then toString(i.originCaller)
414- else address
415- let rarity = getAssetRarityComplete(isJackpot, assetName)
416- let perches = if (stakeWithoutPerch)
417- then nil
418- else {
419- let color = if (isJackpot)
420- then jColor
421- else takeRight(assetName, 1)
422- let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
423- if ((0 >= availablePerches))
424- then throw(("no perches available for the color " + color))
425- else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
426- }
427- if ((perches == perches))
428- then if ((pmt.amount != 1))
429- then throw("NFT is not attached")
430- else {
431- let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId)], nil))
432- if ((farmingPower == farmingPower))
399+func migratePerches (address) = {
400+ let oldFarming = addressFromStringValue(tryGetStringExternal(getOracle(), "static_farmingAddress"))
401+ func tryGetIntegerOldFarming (key) = match getInteger(oldFarming, key) {
402+ case b: Int =>
403+ b
404+ case _ =>
405+ 0
406+ }
407+
408+ let perchAmountB = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_B"))
409+ if ((perchAmountB == perchAmountB))
410+ then {
411+ let perchAmountR = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_R"))
412+ if ((perchAmountR == perchAmountR))
413+ then {
414+ let perchAmountG = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_G"))
415+ if ((perchAmountG == perchAmountG))
416+ then {
417+ let perchAmountY = tryGetIntegerOldFarming((("address_" + address) + "_perchesAvailable_Y"))
418+ if ((perchAmountY == perchAmountY))
433419 then {
434- let result = claimStakingResult(address, toBase58String(assetId), false)
435- if ((result == result))
436- then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
420+ let perchAmountBInvoke = invoke(this, "addFreePerch", [address, "B", perchAmountB], nil)
421+ if ((perchAmountBInvoke == perchAmountBInvoke))
422+ then {
423+ let perchAmountRInvoke = invoke(this, "addFreePerch", [address, "R", perchAmountR], nil)
424+ if ((perchAmountRInvoke == perchAmountRInvoke))
425+ then {
426+ let perchAmountGInvoke = invoke(this, "addFreePerch", [address, "G", perchAmountG], nil)
427+ if ((perchAmountGInvoke == perchAmountGInvoke))
428+ then {
429+ let perchAmountYInvoke = invoke(this, "addFreePerch", [address, "Y", perchAmountY], nil)
430+ if ((perchAmountYInvoke == perchAmountYInvoke))
431+ then if (if (if (if ((perchAmountB == 0))
432+ then (perchAmountR == 0)
433+ else false)
434+ then (perchAmountG == 0)
435+ else false)
436+ then (perchAmountY == 0)
437+ else false)
438+ then throw("Nothing to migrate")
439+ else {
440+ let invokePerchesDelete = invoke(oldFarming, "removePerches", [address], nil)
441+ if ((invokePerchesDelete == invokePerchesDelete))
442+ then nil
443+ else throw("Strict value is not equal to itself.")
444+ }
445+ else throw("Strict value is not equal to itself.")
446+ }
447+ else throw("Strict value is not equal to itself.")
448+ }
449+ else throw("Strict value is not equal to itself.")
450+ }
437451 else throw("Strict value is not equal to itself.")
438452 }
439453 else throw("Strict value is not equal to itself.")
440454 }
441- else throw("Strict value is not equal to itself.")
442- }
443- else throw("Strict value is not equal to itself.")
444- }
455+ else throw("Strict value is not equal to itself.")
456+ }
457+ else throw("Strict value is not equal to itself.")
458+ }
459+ else throw("Strict value is not equal to itself.")
460+ }
461+
462+
463+
464+@Callable(i)
465+func stakeNFT (jColor,usePerchOrigin,stakeWithoutPerch) = if (true)
466+ then throw("Staking is disabled")
467+ else if (if (stakeWithoutPerch)
468+ then !(isProxyStakingSc(toString(i.caller)))
469+ else false)
470+ then throw("You can't stake without a perch")
471+ else {
472+ let validPayment = checkAdditionalPayment(i.payments[0])
473+ if ((validPayment == validPayment))
474+ then {
475+ let pmt = value(i.payments[1])
476+ let assetId = value(pmt.assetId)
477+ let assetName = value(value(assetInfo(assetId)).name)
478+ let isJackpot = (takeRight(assetName, 1) == "U")
479+ let address = toString(i.caller)
480+ let perchAddress = if (usePerchOrigin)
481+ then toString(i.originCaller)
482+ else address
483+ let rarity = getAssetRarityComplete(isJackpot, assetName)
484+ let perches = if (stakeWithoutPerch)
485+ then nil
486+ else {
487+ let color = if (isJackpot)
488+ then jColor
489+ else takeRight(assetName, 1)
490+ let availablePerches = tryGetInteger(((("address_" + perchAddress) + "_perchesAvailable_") + color))
491+ if ((0 >= availablePerches))
492+ then throw(("no perches available for the color " + color))
493+ else [IntegerEntry(((("address_" + perchAddress) + "_perchesAvailable_") + color), (availablePerches - 1)), StringEntry((((("address_" + address) + "_asset_") + toBase58String(assetId)) + "_perchColor"), color)]
494+ }
495+ if ((perches == perches))
496+ then if ((pmt.amount != 1))
497+ then throw("NFT is not attached")
498+ else {
499+ let farmingPower = asIntTuple(invoke(this, "calculateFarmPower", [toBase58String(assetId)], nil))
500+ if ((farmingPower == farmingPower))
501+ then {
502+ let result = claimStakingResult(address, toBase58String(assetId), false)
503+ if ((result == result))
504+ then ((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) + farmingPower._1)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) + farmingPower._1)), StringEntry((toBase58String(assetId) + "_owner"), address), BooleanEntry((toBase58String(assetId) + "_use_origin"), usePerchOrigin), StringEntry((toBase58String(assetId) + "_original_caller"), toString(i.originCaller)), IntegerEntry(assetFarmingPower(address, toBase58String(assetId)), farmingPower._1), IntegerEntry((toBase58String(assetId) + "_basePower"), farmingPower._2), BooleanEntry((toBase58String(assetId) + "_without_perch"), stakeWithoutPerch)] ++ validPayment) ++ perches) ++ result._1)
505+ else throw("Strict value is not equal to itself.")
506+ }
507+ else throw("Strict value is not equal to itself.")
508+ }
509+ else throw("Strict value is not equal to itself.")
510+ }
511+ else throw("Strict value is not equal to itself.")
512+ }
445513
446514
447515
448516 @Callable(i)
449517 func unstakeNFT (asset) = {
450518 let address = toString(i.caller)
451519 let result = claimStakingResult(address, asset, false)
452520 if ((result == result))
453521 then {
454522 let validPayment = checkAdditionalPayment(i.payments[0])
455523 if ((validPayment == validPayment))
456524 then {
457525 let color = tryGetString((((("address_" + address) + "_asset_") + asset) + "_perchColor"))
458526 let withoutPerch = tryGetBoolean((asset + "_without_perch"))
459527 let perches = if (withoutPerch)
460528 then nil
461529 else {
462530 let usePerchOrigin = tryGetBoolean((asset + "_use_origin"))
463531 let perchOwner = if (usePerchOrigin)
464532 then toString(i.originCaller)
465533 else address
466534 [IntegerEntry(((("address_" + address) + "_perchesAvailable_") + color), (tryGetInteger(((("address_" + address) + "_perchesAvailable_") + color)) + 1))]
467535 }
468536 if ((perches == perches))
469537 then {
470538 let assetFP = tryGetInteger(assetFarmingPower(address, asset))
471539 if ((assetFP == assetFP))
472540 then $Tuple2(((([IntegerEntry(totalStakedKey(), (tryGetInteger(totalStakedKey()) - assetFP)), IntegerEntry(totalStakedUserKey(address), (tryGetInteger(totalStakedUserKey(address)) - assetFP)), DeleteEntry((asset + "_owner")), DeleteEntry(assetFarmingPower(address, asset)), DeleteEntry((((("address_" + address) + "_asset_") + asset) + "_perchColor")), DeleteEntry((asset + "_original_caller")), DeleteEntry((asset + "_use_origin")), DeleteEntry((asset + "_without_perch")), ScriptTransfer(Address(fromBase58String(address)), 1, fromBase58String(asset))] ++ validPayment) ++ perches) ++ result._1), result._2)
473541 else throw("Strict value is not equal to itself.")
474542 }
475543 else throw("Strict value is not equal to itself.")
476544 }
477545 else throw("Strict value is not equal to itself.")
478546 }
479547 else throw("Strict value is not equal to itself.")
480548 }
481549
482550
483551
484552 @Callable(i)
485553 func topUpReward () = {
486554 let firstPayment = value(i.payments[0])
487555 if ((firstPayment.assetId != getEggAssetId()))
488556 then throw(("FBP: You can attach only EGG tokens with the following asset id: " + toBase58String(getEggAssetId())))
489557 else {
490558 let resHandleStaking = handleStakingTopUp(firstPayment.amount)
491559 $Tuple2(resHandleStaking, true)
492560 }
493561 }
494562
495563
496564
497565 @Callable(i)
498566 func claimReward (assetId) = {
499567 let validPayment = checkAdditionalPayment(i.payments[0])
500568 if ((validPayment == validPayment))
501569 then if ((tryGetString((assetId + "_owner")) != toString(i.caller)))
502570 then throw("You don't own this duck!!")
503571 else if ((size(i.payments) > 1))
504572 then throw("Please don't add extra payments")
505573 else {
506574 let result = claimStakingResult(toString(i.caller), assetId, true)
507575 $Tuple2((validPayment ++ result._1), result._2)
508576 }
509577 else throw("Strict value is not equal to itself.")
510578 }
511579
512580

github/deemru/w8io/3ef1775 
54.00 ms