Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a2d8558
chore: update dependencies
dadadave80 Sep 10, 2025
59f8440
Update .gitignore to exclude broadcast files
dadadave80 Oct 12, 2025
b4560ca
Add Crytic export directory to .gitignore
dadadave80 Oct 12, 2025
f55f2af
Sort Imports
dadadave80 Oct 12, 2025
13f8b00
Rearrange rpc endpoints and verifier urls
dadadave80 Oct 12, 2025
fbe6ec0
Increase ticketId to uint64
dadadave80 Oct 12, 2025
5cd08be
Use GetSelectors
dadadave80 Oct 12, 2025
608d11e
Rename and extend AddressesAndFees library
dadadave80 Oct 13, 2025
fe4a0b3
Implement interfaces for CheckInFacet and FactoryFacet
dadadave80 Oct 13, 2025
a178447
Add hostItFeeBps to MarketplaceStorage struct
dadadave80 Oct 13, 2025
6d49887
Update ticket structs with new fields and types
dadadave80 Oct 13, 2025
1760065
Add medusa.json to .gitignore
dadadave80 Oct 13, 2025
d44d5b4
Refactor fee/address retrieval in deployment script
dadadave80 Oct 13, 2025
79a6c17
Update ASCII art in HostItTickets and TicketProxy
dadadave80 Oct 13, 2025
34e20ab
Update visibility and comments for view functions
dadadave80 Oct 13, 2025
3555d31
Enhance ticket creation and error handling in LibFactory
dadadave80 Oct 13, 2025
b517beb
Refactor fee logic and error handling in LibMarketplace
dadadave80 Oct 13, 2025
81bbc93
Refactor DeployedHostItTickets contract and update ticket data
dadadave80 Oct 13, 2025
467f04e
Update adminTickets test and add fuzz test stubs
dadadave80 Oct 13, 2025
461fb0d
Update foundry.toml optimizer and fuzz settings
dadadave80 Oct 13, 2025
98da035
Specify nightly version for Foundry installation
dadadave80 Oct 13, 2025
7261487
Change calculateHostItFee to view function
dadadave80 Oct 13, 2025
5ecc02f
Add HostIt fee basis points configuration
dadadave80 Oct 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ jobs:

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly

- name: Show Forge version
run: |
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ out/
!/broadcast
/broadcast/*/31337/
/broadcast/**/dry-run/
*broadcast/

# Crytic
crytic-export/
medusa.json

# Docs
docs/
Expand Down
35 changes: 18 additions & 17 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,35 @@ remappings = [
"@tokenbound/=lib/contracts/src/"
]
ffi = true
optimizer_runs = 30_000
optimizer_runs = 999_999

[fmt]
sort_imports = true

[fuzz]
runs = 10_000
max_test_rejects = 999_999

[rpc_endpoints]
# mainnet
eth-mainnet = "${ETH_MAINNET_URL}"
base = "${BASE_MAINNET_URL}"
lisk = "${LISK_MAINNET_URL}"
arbitrum-one = "${ARBITRUM_MAINNET_URL}"
avalanche = "${AVALANCHE_MAINNET_URL}"
# testnets
mainnet = "${ETH_MAINNET_URL}"
sepolia = "${ETH_SEPOLIA_URL}"
base = "${BASE_MAINNET_URL}"
base-sepolia = "${BASE_SEPOLIA_URL}"
lisk = "${LISK_MAINNET_URL}"
lisk-sepolia = "${LISK_SEPOLIA_URL}"
arbitrum-one = "${ARBITRUM_MAINNET_URL}"
arbitrum-sepolia = "${ARBITRUM_SEPOLIA_URL}"
avalanche = "${AVALANCHE_MAINNET_URL}"
avalanche-fuji = "${AVALANCHE_FUJI_URL}"

[etherscan]
# mainnet
eth-mainnet = { key = "${ETHERSCAN_API_KEY}" }
base = { key = "${ETHERSCAN_API_KEY}" }
lisk = { key = "123", url = "${LISK_VERIFIER_URL}" }
arbitrum-one = { key = "${ETHERSCAN_API_KEY}" }
avalanche = { key = "verifyContract", url = "${AVALANCHE_VERIFIER_URL}" }
# testnets
mainnet = { key = "${ETHERSCAN_API_KEY}" }
sepolia = { key = "${ETHERSCAN_API_KEY}" }
base = { key = "${ETHERSCAN_API_KEY}" }
base-sepolia = { key = "${ETHERSCAN_API_KEY}" }
lisk = { key = "123", url = "${LISK_VERIFIER_URL}" }
lisk-sepolia = { key = "123", url = "${LISK_SEPOLIA_VERIFIER_URL}" }
arbitrum-one = { key = "${ETHERSCAN_API_KEY}" }
arbitrum-sepolia = { key = "${ETHERSCAN_API_KEY}" }
avalanche = { key = "verifyContract", url = "${AVALANCHE_VERIFIER_URL}" }
avalanche-fuji = { key = "verifyContract", url = "${AVALANCHE_FUJI_VERIFIER_URL}" }

# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
2 changes: 1 addition & 1 deletion lib/erc2535-diamond-template
26 changes: 11 additions & 15 deletions script/DeployHostItTickets.s.sol
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.30;

import {Script} from "forge-std/Script.sol";
import {DiamondCutFacet} from "@diamond/facets/DiamondCutFacet.sol";
import {DiamondLoupeFacet} from "@diamond/facets/DiamondLoupeFacet.sol";
import {OwnableRolesFacet} from "@diamond/facets/OwnableRolesFacet.sol";
import {MultiInit} from "@diamond/initializers/MultiInit.sol";
import {ERC165Init} from "@diamond/initializers/ERC165Init.sol";
import {HostItInit} from "@ticket/inits/HostItInit.sol";
import {MultiInit} from "@diamond/initializers/MultiInit.sol";
import {UpgradeableBeacon} from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import {DeployHostItTicketsHelper} from "@ticket-script/helper/DeployHostItTicketsHelper.sol";
import {LibAddressesAndFees} from "@ticket-script/helper/LibAddressesAndFees.sol";
import {HostItTickets} from "@ticket/HostItTickets.sol";
import {FactoryFacet} from "@ticket/facets/FactoryFacet.sol";
import {CheckInFacet} from "@ticket/facets/CheckInFacet.sol";
import {FactoryFacet} from "@ticket/facets/FactoryFacet.sol";
import {MarketplaceFacet} from "@ticket/facets/MarketplaceFacet.sol";
import {AddressesAndFees} from "@ticket-script/helper/AddressesAndFees.sol";
import {UpgradeableBeacon} from "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol";
import {HostItInit} from "@ticket/inits/HostItInit.sol";
import {Ticket} from "@ticket/libs/Ticket.sol";
import {TicketProxy} from "@ticket/libs/TicketProxy.sol";
import {DeployHostItTicketsHelper} from "@ticket-script/helper/DeployHostItTicketsHelper.sol";
import {Script} from "forge-std/Script.sol";

contract DeployHostItTicketsTest is Script, DeployHostItTicketsHelper {
function run() public returns (address hostIt_) {
Expand All @@ -43,20 +43,16 @@ contract DeployHostItTicketsTest is Script, DeployHostItTicketsHelper {
// Deploy Ticket Proxy
address ticketProxy = address(new TicketProxy(ticketBeacon));

(address[] memory addresses, uint8[] memory feeTypes) =
LibAddressesAndFees._getAddressesAndFeesByChainId(block.chainid);

// Deploy HostItTickets diamond
hostIt_ = address(
new HostItTickets(
_createFacetCuts(
diamondCutFacet, diamondLoupeFacet, ownableRolesFacet, factoryFacet, checkInFacet, marketplaceFacet
),
_createDiamondArgs(
multiInit,
erc165Init,
hostItInit,
ticketProxy,
AddressesAndFees._getMockFeeTypes(),
AddressesAndFees._getMockAddresses()
)
_createDiamondArgs(multiInit, erc165Init, hostItInit, ticketProxy, feeTypes, addresses)
)
);
vm.stopBroadcast();
Expand Down
65 changes: 0 additions & 65 deletions script/DeployHostItTicketsLisk.s.sol

This file was deleted.

24 changes: 9 additions & 15 deletions script/helper/DeployHostItTicketsHelper.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.30;

import {HelperContract} from "@diamond-test/helpers/HelperContract.sol";
import {DiamondArgs, FacetCut, FacetCutAction} from "@diamond-storage/DiamondStorage.sol";
import {GetSelectors} from "@diamond-test/helpers/GetSelectors.sol";
import {Context} from "@openzeppelin/contracts/utils/Context.sol";
import {FacetCut, FacetCutAction, DiamondArgs} from "@diamond-storage/DiamondStorage.sol";

abstract contract DeployHostItTicketsHelper is HelperContract, Context {
abstract contract DeployHostItTicketsHelper is GetSelectors, Context {
function _createFacetCuts(
address _diamondCutFacet,
address _diamondLoupeFacet,
Expand All @@ -14,43 +14,38 @@ abstract contract DeployHostItTicketsHelper is HelperContract, Context {
address _checkInFacet,
address _marketplaceFacet
) internal returns (FacetCut[] memory cuts_) {
// Create an array of FacetCut entries for standard facets
cuts_ = new FacetCut[](6);

cuts_[0] = FacetCut({
facetAddress: _diamondCutFacet,
action: FacetCutAction.Add,
functionSelectors: _generateSelectors("DiamondCutFacet")
functionSelectors: _getSelectors("DiamondCutFacet")
});

cuts_[1] = FacetCut({
facetAddress: _diamondLoupeFacet,
action: FacetCutAction.Add,
functionSelectors: _generateSelectors("DiamondLoupeFacet")
functionSelectors: _getSelectors("DiamondLoupeFacet")
});

cuts_[2] = FacetCut({
facetAddress: _ownableRolesFacet,
action: FacetCutAction.Add,
functionSelectors: _generateSelectors("OwnableRolesFacet")
functionSelectors: _getSelectors("OwnableRolesFacet")
});

cuts_[3] = FacetCut({
facetAddress: _factoryFacet,
action: FacetCutAction.Add,
functionSelectors: _generateSelectors("FactoryFacet")
facetAddress: _factoryFacet, action: FacetCutAction.Add, functionSelectors: _getSelectors("FactoryFacet")
});

cuts_[4] = FacetCut({
facetAddress: _checkInFacet,
action: FacetCutAction.Add,
functionSelectors: _generateSelectors("CheckInFacet")
facetAddress: _checkInFacet, action: FacetCutAction.Add, functionSelectors: _getSelectors("CheckInFacet")
});

cuts_[5] = FacetCut({
facetAddress: _marketplaceFacet,
action: FacetCutAction.Add,
functionSelectors: _generateSelectors("MarketplaceFacet")
functionSelectors: _getSelectors("MarketplaceFacet")
});
}

Expand All @@ -71,7 +66,6 @@ abstract contract DeployHostItTicketsHelper is HelperContract, Context {
initData[1] =
abi.encodeWithSignature("initHostIt(address,uint8[],address[])", _ticketProxy, _feeTypes, _addresses);

// Prepare DiamondArgs: owner and init data
args_ = DiamondArgs({
owner: _msgSender(),
init: _multiInit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,49 @@ pragma solidity ^0.8.4;
import {ERC20Mock} from "@openzeppelin/contracts/mocks/token/ERC20Mock.sol";
import {FeeType} from "@ticket-storage/MarketplaceStorage.sol";

library AddressesAndFees {
library LibAddressesAndFees {
function _getAddressesAndFeesByChainId(uint256 _chainId)
internal
returns (address[] memory addresses_, uint8[] memory feeTypes_)
{
if (_chainId == 1) {
addresses_ = _getEthereumAddresses();
feeTypes_ = _getEthereumFeeTypes();
} else if (_chainId == 8453) {
addresses_ = _getBaseAddresses();
feeTypes_ = _getBaseFeeTypes();
} else if (_chainId == 43114) {
addresses_ = _getAvalancheAddresses();
feeTypes_ = _getAvalancheFeeTypes();
} else if (_chainId == 42161) {
addresses_ = _getArbitrumOneAddresses();
feeTypes_ = _getArbitrumOneFeeTypes();
} else if (_chainId == 1135) {
addresses_ = _getLiskAddresses();
feeTypes_ = _getLiskFeeTypes();
} else if (_chainId == 11155111) {
addresses_ = _getEthereumSepoliaAddresses();
feeTypes_ = _getEthereumSepoliaFeeTypes();
} else if (_chainId == 84532) {
addresses_ = _getBaseSepoliaAddresses();
feeTypes_ = _getBaseSepoliaFeeTypes();
} else if (_chainId == 43113) {
addresses_ = _getAvalancheFujiAddresses();
feeTypes_ = _getAvalancheFujiFeeTypes();
} else if (_chainId == 421614) {
addresses_ = _getArbitrumSepoliaAddresses();
feeTypes_ = _getArbitrumSepoliaFeeTypes();
} else if (_chainId == 4202) {
addresses_ = _getLiskSepoliaAddresses();
feeTypes_ = _getLiskSepoliaFeeTypes();
} else if (_chainId == 31337) {
addresses_ = _getMockAddresses();
feeTypes_ = _getMockFeeTypes();
} else {
revert("Chain not supported");
}
}

//*//////////////////////////////////////////////////////////////////////////
// MAINNET ADDRESSES
//////////////////////////////////////////////////////////////////////////*//
Expand Down
Loading