If the stakepool is willing to provide a fixed rate for the reward (instead of the variable rate that results from the unpredictability in blocks being assigned to the stakepool each epoch), a simple Marlowe contract or Allegra script would suffice.
For example, the “investor” would contribute 1000 ADA to the contract script and the stakepool would contribue 10 ADA to the script at the start of the contract period. Those 1010 ADA would be locked into the script for 10 epochs and payable only to the investor at the end of the 10 epochs. The stakepool would hold the staking keys for the script and all of the staking rewards of the 1010 ADA in the script would acrue to the stakepool operator (not to the investor, who will receive the extra 10 ADA in lieu of the actual rewards amount). The stakepool operator would benefit by having certainty that the ADA would stay staked for the 10 epochs, while the investor wouldn’t experience the variability of epoch-to-epoch rewards or be exposed to the risk of the stakepool being retired. (Such a contract might alleviate investors’ concern and confusion about the high variability of epoch-to-epoch rewards from very small pools.)
The current mainnet supports a clunky version of this contract right now. One would have to create the initial transaction with 1000 ADA from the investor and 10 ADA from the stakepool operator, and then each party would have to sign the transaction before it was submitted to a simple Allegra script that time-locks the ADA and only lets the investor redeem it. The output address for this transaction would combine the payment verification key for the script with the stake verification key into a script address: since
cardano-cli does not yet support constructing script addresses that stake, one would have to write a short program to compute the stakeable script address. At the end of the 10 epochs, the investor could submit the transaction that removes the UTxO from the script. The clunkiness comes from the investor needing to use
cardano-cli to sign the initial and final transactions.
Variable-rate and multi-period staking contracts like this would be possible with Marlowe or Plutus if one is willing to involve an oracle that monitors staking rewards. One could also construct contracts that didn’t require the stakepool operator to add the reward to the initial contract.