78 lines
3.4 KiB
Solidity
78 lines
3.4 KiB
Solidity
// 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 {
|
|
_requireSupportedChain(block.chainid);
|
|
_printEducationalWarning();
|
|
Manifest memory manifest = _readManifest(manifestPath, true);
|
|
if (block.chainid == BASE_SEPOLIA_CHAIN_ID) {
|
|
_runBase(manifest);
|
|
return;
|
|
}
|
|
|
|
_runLocal(manifest);
|
|
}
|
|
|
|
function _runLocal(Manifest memory manifest) private {
|
|
(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());
|
|
}
|
|
|
|
function _runBase(Manifest memory manifest) private {
|
|
address scriptSender = vm.envAddress("SCRIPT_SENDER");
|
|
(address presenter, address recipient,) = _requireBaseConfig(scriptSender);
|
|
_assertAddress("Presenter", manifest.actors[0].address_, presenter);
|
|
_assertAddress("Recipient", manifest.actors[1].address_, recipient);
|
|
|
|
BankV2 bank = BankV2(manifest.proxy);
|
|
MockUSDC token = MockUSDC(manifest.token);
|
|
_assertUint("version", 2, bank.contractVersion());
|
|
_assertUint("Presenter internal balance", 1_000e6, bank.balanceOf(presenter));
|
|
_assertUint("Recipient internal balance", 0, bank.balanceOf(recipient));
|
|
uint256 liabilities = bank.totalLiabilities();
|
|
uint256 reserves = token.balanceOf(manifest.proxy);
|
|
_assertUint("liabilities", 1_000e6, liabilities);
|
|
_assertUint("reserves", 1_000e6, reserves);
|
|
|
|
vm.startBroadcast(presenter);
|
|
bank.transferBalance(recipient, 250e6);
|
|
vm.stopBroadcast();
|
|
|
|
_assertUint("Presenter internal balance", 750e6, bank.balanceOf(presenter));
|
|
_assertUint("Recipient internal balance", 250e6, bank.balanceOf(recipient));
|
|
_assertUint("liabilities", liabilities, bank.totalLiabilities());
|
|
_assertUint("reserves", reserves, token.balanceOf(manifest.proxy));
|
|
_assertUint("surplus", 0, token.balanceOf(manifest.proxy) - bank.totalLiabilities());
|
|
}
|
|
}
|