feat: demonstrate state-preserving V2 upgrade

This commit is contained in:
golem
2026-08-21 15:31:40 -06:00
parent ca6a99b913
commit 94f2ad6e09
16 changed files with 1082 additions and 36 deletions
+41
View File
@@ -0,0 +1,41 @@
// 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());
}
}