// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.33; import {CommandBase, CommandContext, Channels} from "@fastish/contracts/Commands.sol"; import {AssetAmount, Blocks, Block, Writer, Writers, Keys, Schemas} from "@fastish/contracts/Blocks.sol"; using Blocks for Block; using Writers for Writer; string constant NAME = "testAmountToBalance"; abstract contract TestAmountToBalance is CommandBase { uint public immutable testAmountToBalanceId = commandId(NAME); event AmountToBalance(bytes32 account, bytes32 asset, bytes32 meta, uint amount); constructor() { emit Command(host, NAME, Schemas.Amount, testAmountToBalanceId, Channels.Setup, Channels.Balances); } function amountToBalance(bytes32 account, AssetAmount memory v) internal virtual returns (AssetAmount memory); function testAmountToBalance( CommandContext calldata c ) external payable onlyCommand(testAmountToBalanceId, c.target) returns (bytes memory) { uint i = 0; (Writer memory writer, uint end) = Writers.allocBalancesFrom(c.request, i, Keys.Amount); while (i < end) { Block memory ref = Blocks.from(c.request, i); AssetAmount memory amount = ref.toAmountValue(); AssetAmount memory out = amountToBalance(c.account, amount); writer.appendNonZeroBalance(out); i = ref.cursor; } return writer.finish(); } }