deploy.s.sol
1 // SPDX-FileCopyrightText: 2024 Mass Labs 2 // 3 // SPDX-License-Identifier: Unlicense 4 5 pragma solidity ^0.8.13; 6 7 import {Script} from "forge-std/Script.sol"; 8 import {console} from "forge-std/console.sol"; 9 10 import {ShopReg} from "../src/ShopReg.sol"; 11 import {OrderPaymentsFactory} from "../src/OrderPayments.sol"; 12 import {ERC20} from "openzeppelin/contracts/token/ERC20/ERC20.sol"; 13 14 15 16 contract EuroDollar is ERC20 { 17 constructor() ERC20("Eddies", "EDD") {} 18 19 function mint(address account, uint256 amount) external { 20 _mint(account, amount); 21 } 22 } 23 24 contract Deploy is Script { 25 bytes32 salt = bytes32(uint256(1)); 26 27 function deployContracts(bool testErc20, bool mut) external { 28 vm.startBroadcast(); 29 30 // deploy shop registary 31 ShopReg shop = new ShopReg{salt: salt}(); 32 33 deployPayments(); 34 35 string memory addresses; 36 37 if (testErc20) { 38 EuroDollar eddies = new EuroDollar{salt: salt}(); 39 vm.serializeAddress(addresses, "Eddies", address(eddies)); 40 // create a test shop 41 address testAddress = tx.origin; 42 bytes32 testSchema = 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef; 43 shop.mint(1, testSchema, testAddress); 44 } 45 46 string memory out = vm.serializeAddress(addresses, "ShopReg", address(shop)); 47 console.log("ShopReg Address: %s", out); 48 49 if (mut) vm.writeJson(out, "./deploymentAddresses.json"); 50 vm.stopBroadcast(); 51 } 52 53 function deployPayments() internal returns (string memory) { 54 string memory addresses; 55 // create the payments contract 56 OrderPaymentsFactory payments = new OrderPaymentsFactory{salt: salt}(); 57 return vm.serializeAddress(addresses, "OrderPaymentsFactory", address(payments)); 58 } 59 }