user90366: Context:
There is a bet going on r/bitcoin about the possibility of doing a user activated soft fork for reducing current miner reward to 0.25 BTC.
One of the users says the bet had two points:

the change must be a soft fork (aka it doesn't break consensus)
no miner must be able to claim more than 0.25 btc.

Would it be able to make a change to the Bitcoin consensus rules that would meet this criteria?

user64730: The way block reward is computed today is :
CAmount blockReward = nFees + GetBlockSubsidy(pindex->nHeight, chainparams.GetConsensus());

Which means that the block reward is the total fees in the block plus the current base block subsidy.
It's definitely possible to change this line to (pseudocode) :
CAmount blockReward = std::min(nFees + GetBlockSubsidy(pindex->nHeight, chainparams.GetConsensus()), 25000000);

This will be a soft fork which doesn't allow the reward to be larger than 0.25 BTC
To explain what I mean in English, the reward is set minimum taken between the current block subsidy + fees, or 0.25 BTC.  This is a constraint on the current rules (where the base subsidy is larger than 0.25 BTC), and forward compatible with the period in the future when the base subsidy is lower than 0.25 BTC.
Adding @pieter-wuille's point from the comment, the current rules don't limit a miner in how low they can set their reward to be (where the minimum is zero), only how high.  That means that a miner doesn't have to reward themselves with the maximum allowed reward.  Such occurences have happened on chain before :
Rootstock accidentally set a zero amount as their reward :
https://www.smartbit.com.au/tx/9bf8853b3a823bbfa1e54017ae11a9e1f4d08a854dcce9f24e08114f2c921182
The first satoshi taken out of money supply :
https://www.smartbit.com.au/tx/5d80a29be1609db91658b401f85921a86ab4755969729b65257651bb9fd2c10d

user48884: Yes, it is possible. The rule regarding the coinbase reward is that a miner cannot take more than the block subsidy plus the transaction fees in the block. This means that a miner can opt to take less than the full reward that they are entitled to. This has happened before in Bitcoin a few times. The coins that they did not collect are gone forever.
So, you can use this rule to your advantage if you want to decrease the block subsidy via a soft fork. In your soft fork, you simply create a new rule which results in the coinbase reward being less than the current coinbase reward (e.g. the block subsidy is smaller). Because of the rule mentioned earlier, non-upgraded nodes will still accept blocks that have these coinbase transactions with a smaller coinbase reward. Thus this is a soft fork because the new rule is backwards compatible.

90366: <p>Context:</p>

<p>There is a bet going on r/bitcoin about the possibility of doing a user activated soft fork for reducing current miner reward to 0.25 BTC.</p>

<p>One of the users says the bet had two points:</p>

<ol>
<li>the change must be a soft fork (aka it doesn't break consensus)</li>
<li>no miner must be able to claim more than 0.25 btc.</li>
</ol>

<p>Would it be able to make a change to the Bitcoin consensus rules that would meet this criteria?</p>
 64730: <p>The way block reward is computed today is :</p>

<pre><code>CAmount blockReward = nFees + GetBlockSubsidy(pindex-&gt;nHeight, chainparams.GetConsensus());
</code></pre>

<p>Which means that the block reward is the total fees in the block plus the current base block subsidy.</p>

<p>It's definitely possible to change this line to (pseudocode) :</p>

<pre><code>CAmount blockReward = std::min(nFees + GetBlockSubsidy(pindex-&gt;nHeight, chainparams.GetConsensus()), 25000000);
</code></pre>

<p>This will be a soft fork which doesn't allow the reward to be larger than 0.25 BTC</p>

<p>To explain what I mean in English, the reward is set minimum taken between the current <code>block subsidy + fees</code>, or <code>0.25 BTC</code>.  This is a constraint on the current rules (where the base subsidy is larger than 0.25 BTC), and forward compatible with the period in the future when the base subsidy is lower than 0.25 BTC.</p>

<p>Adding @pieter-wuille's point from the comment, the current rules don't limit a miner in how <em>low</em> they can set their reward to be (where the minimum is zero), only how high.  That means that a miner doesn't have to reward themselves with the maximum allowed reward.  Such occurences have happened on chain before :</p>

<p>Rootstock accidentally set a zero amount as their reward :
<a href="https://www.smartbit.com.au/tx/9bf8853b3a823bbfa1e54017ae11a9e1f4d08a854dcce9f24e08114f2c921182" rel="nofollow noreferrer">https://www.smartbit.com.au/tx/9bf8853b3a823bbfa1e54017ae11a9e1f4d08a854dcce9f24e08114f2c921182</a></p>

<p>The first satoshi taken out of money supply :</p>

<p><a href="https://www.smartbit.com.au/tx/5d80a29be1609db91658b401f85921a86ab4755969729b65257651bb9fd2c10d" rel="nofollow noreferrer">https://www.smartbit.com.au/tx/5d80a29be1609db91658b401f85921a86ab4755969729b65257651bb9fd2c10d</a></p>
 48884: <p>Yes, it is possible. The rule regarding the coinbase reward is that a miner cannot take more than the block subsidy plus the transaction fees in the block. This means that a miner can opt to take less than the full reward that they are entitled to. This has happened before in Bitcoin a few times. The coins that they did not collect are gone forever.</p>

<p>So, you can use this rule to your advantage if you want to decrease the block subsidy via a soft fork. In your soft fork, you simply create a new rule which results in the coinbase reward being less than the current coinbase reward (e.g. the block subsidy is smaller). Because of the rule mentioned earlier, non-upgraded nodes will still accept blocks that have these coinbase transactions with a smaller coinbase reward. Thus this is a soft fork because the new rule is backwards compatible.</p>
