// SPDX-License-Identifier: MIT pragma solidity 0.8.35; import {BankV2} from "../src/BankV2.sol"; import {MockUSDC} from "../src/MockUSDC.sol"; import {DemoScript} from "./lib/DemoScript.sol"; contract TransferV2Demo is DemoScript { function run() external { _run(_manifestPath(ACTIVE_MANIFEST_PATH)); } function _run(string memory manifestPath) internal { if (block.chainid != ANVIL_CHAIN_ID) revert UnsupportedChain(block.chainid); _printEducationalWarning(); Manifest memory manifest = _readManifest(manifestPath, true); (uint256 aliceKey, address alice) = _deriveLocalActor(block.chainid, 1); address bob = manifest.actors[2].address_; _assertAddress("Alice actor", manifest.actors[1].address_, alice); BankV2 bank = BankV2(manifest.proxy); MockUSDC token = MockUSDC(manifest.token); _assertUint("version", 2, bank.contractVersion()); _assertUint("Alice internal balance", 900e6, bank.balanceOf(alice)); _assertUint("Bob internal balance", 500e6, bank.balanceOf(bob)); uint256 liabilities = bank.totalLiabilities(); uint256 reserves = token.balanceOf(manifest.proxy); _assertUint("liabilities", 1_400e6, liabilities); _assertUint("reserves", 1_400e6, reserves); vm.startBroadcast(aliceKey); bank.transferBalance(bob, 250e6); vm.stopBroadcast(); _assertUint("Alice internal balance", 650e6, bank.balanceOf(alice)); _assertUint("Bob internal balance", 750e6, bank.balanceOf(bob)); _assertUint("liabilities", liabilities, bank.totalLiabilities()); _assertUint("reserves", reserves, token.balanceOf(manifest.proxy)); _assertUint("surplus", 0, token.balanceOf(manifest.proxy) - bank.totalLiabilities()); } }