/ script / deploy.s.sol
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  }