I am wondering if it is possible to call a function of a smart contract every time a block is mined, perhaps as part of the coinbase transaction? The result of the call would be to send a percentage of the block reward to a storage contract.
If you're a miner, you can include whatever (valid) transactions you want in the blocks you mine. So yes, you could include a transaction that transfers ether to a contract.
We can do it by using
abigen tool to generate go binding to the smart contract and call contract's method on consensus level against a backend with current chain's state. Similar to Ethereum's SimulatedBackend but with real chain's state.
By the way, we can do in more simple way. You need only to AddBlance() to give mining reward to the smart contact similar to AddBalance() for PoW miners' coinbase. The thing we need to do more is making a method/dapp allow user to claim reward from contract's balance.
Hope this help!