Files
uupl-smart-contract/script/DeployV1.s.sol
T

72 lines
3.0 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity 0.8.35;
import {Upgrades} from "openzeppelin-foundry-upgrades/Upgrades.sol";
import {BankV1} from "../src/BankV1.sol";
import {MockUSDC} from "../src/MockUSDC.sol";
import {DemoScript} from "./lib/DemoScript.sol";
contract DeployV1 is DemoScript {
function run() external returns (address tokenAddress, address proxy, address implementation) {
_requireSupportedChain(block.chainid);
_printEducationalWarning();
address sender = vm.envAddress("SCRIPT_SENDER");
if (block.chainid == ANVIL_CHAIN_ID) {
(uint256 ownerKey, address derivedOwner) = _deriveLocalActor(block.chainid, 0);
_assertAddress("SCRIPT_SENDER", derivedOwner, sender);
vm.startBroadcast(ownerKey);
} else {
vm.startBroadcast(sender);
}
MockUSDC token = new MockUSDC(sender);
proxy =
Upgrades.deployUUPSProxy("BankV1.sol:BankV1", abi.encodeCall(BankV1.initialize, (address(token), sender)));
vm.stopBroadcast();
tokenAddress = address(token);
implementation = Upgrades.getImplementationAddress(proxy);
_requireCode("token", tokenAddress);
_requireCode("proxy", proxy);
_requireCode("implementation", implementation);
_assertAddress("owner", sender, BankV1(proxy).owner());
_assertAddress("asset", tokenAddress, address(BankV1(proxy).asset()));
_assertUint("version", 1, BankV1(proxy).contractVersion());
_assertAddress("implementation", implementation, Upgrades.getImplementationAddress(proxy));
Manifest memory manifest;
manifest.schemaVersion = 1;
manifest.network = block.chainid == ANVIL_CHAIN_ID ? "anvil" : "base-sepolia";
manifest.chainId = block.chainid;
manifest.deploymentBlock = 0;
manifest.rpcUrl = block.chainid == ANVIL_CHAIN_ID ? "http://127.0.0.1:8545" : "https://sepolia.base.org";
manifest.explorerUrl = block.chainid == ANVIL_CHAIN_ID ? "" : "https://sepolia.basescan.org";
manifest.token = tokenAddress;
manifest.proxy = proxy;
manifest.implementation = implementation;
manifest.owner = sender;
(manifest.actorLabels, manifest.actors) = _actors(sender);
_writeManifest(_manifestPath(PENDING_MANIFEST_PATH), manifest);
}
function _actors(address sender) private view returns (string[] memory labels, address[] memory actors) {
if (block.chainid == ANVIL_CHAIN_ID) {
labels = new string[](3);
actors = new address[](3);
labels[0] = "owner";
labels[1] = "Alice";
labels[2] = "Bob";
actors[0] = sender;
(, actors[1]) = _deriveLocalActor(block.chainid, 1);
(, actors[2]) = _deriveLocalActor(block.chainid, 2);
} else {
labels = new string[](1);
actors = new address[](1);
labels[0] = "owner";
actors[0] = sender;
}
}
}