Yes. Something like this is relatively trivial for a Plutus script (Essentially, locking funds and some data at an address is the only thing scripts do).
Here is one approach you could take. There are many other ways you could do this, but this is fairly reusable construction:
Your datum type could have the fields:
- Target Amount
- Deadline
- Recipient "Arbitrary" Address (if you want it to go to a specific party)
The script will ensure that the Datum UTxO can only be redeemed if:
- The OUTPUT of the spending Tx includes a UTxO paid to the Recipient of value >= Target Amount && the Tx was executed before the Deadline, OR
- The Datum is replaced with a new identical Datum and a UTxO of >= the value on the previous Datum.
You can see an example of scripts requiring the datum is replaced with a new one in the
PPP Oracle example or the Uniswap example, with their
corresponding off-chain code here and here.
The case where the deadline is passed and the ADA is burned is implicit in a Datum that can no longer be redeemed--if no-one can reach the funds, they are as good as burned (there is no actual way to burn ADA anyway).
To initialize the script, you will create the Datum with an attached 25 ADA. There would be nothing ensuring that the initial value is 25 ADA, but that doesn't seem like an issue. A script that makes that requirement would need to be more complex.