编译器
0.8.20+commit.a1b79de6
文件 1 的 57:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 2 的 57:IERC165.sol
pragma solidity ^0.8.0;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
文件 3 的 57:IERC721.sol
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function transferFrom(address from, address to, uint256 tokenId) external;
function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool approved) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
文件 4 的 57:IJB721Delegate.sol
pragma solidity ^0.8.0;
import { IJBDirectory } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBDirectory.sol";
interface IJB721Delegate {
function projectId() external view returns (uint256);
function directory() external view returns (IJBDirectory);
function payMetadataDelegateId() external view returns (bytes4);
function redeemMetadataDelegateId() external view returns (bytes4);
}
文件 5 的 57:IJB721TokenUriResolver.sol
pragma solidity ^0.8.0;
interface IJB721TokenUriResolver {
function tokenUriOf(address nft, uint256 tokenId) external view returns (string memory tokenUri);
}
文件 6 的 57:IJBController3_0_1.sol
pragma solidity ^0.8.0;
interface IJBController3_0_1 {
function reservedTokenBalanceOf(uint256 projectId) external view returns (uint256);
function totalOutstandingTokensOf(uint256 projectId) external view returns (uint256);
}
文件 7 的 57:IJBController3_1.sol
pragma solidity ^0.8.0;
import {IERC165} from '@openzeppelin/contracts/utils/introspection/IERC165.sol';
import {JBBallotState} from './../enums/JBBallotState.sol';
import {JBFundAccessConstraints} from './../structs/JBFundAccessConstraints.sol';
import {JBFundingCycle} from './../structs/JBFundingCycle.sol';
import {JBFundingCycleData} from './../structs/JBFundingCycleData.sol';
import {JBFundingCycleMetadata} from './../structs/JBFundingCycleMetadata.sol';
import {JBGroupedSplits} from './../structs/JBGroupedSplits.sol';
import {JBProjectMetadata} from './../structs/JBProjectMetadata.sol';
import {JBSplit} from './../structs/JBSplit.sol';
import {IJBController3_0_1} from './IJBController3_0_1.sol';
import {IJBDirectory} from './IJBDirectory.sol';
import {IJBFundAccessConstraintsStore} from './IJBFundAccessConstraintsStore.sol';
import {IJBFundingCycleStore} from './IJBFundingCycleStore.sol';
import {IJBMigratable} from './IJBMigratable.sol';
import {IJBPaymentTerminal} from './IJBPaymentTerminal.sol';
import {IJBProjects} from './IJBProjects.sol';
import {IJBSplitsStore} from './IJBSplitsStore.sol';
import {IJBTokenStore} from './IJBTokenStore.sol';
interface IJBController3_1 is IJBController3_0_1, IERC165 {
event LaunchProject(uint256 configuration, uint256 projectId, string memo, address caller);
event LaunchFundingCycles(uint256 configuration, uint256 projectId, string memo, address caller);
event ReconfigureFundingCycles(
uint256 configuration,
uint256 projectId,
string memo,
address caller
);
event DistributeReservedTokens(
uint256 indexed fundingCycleConfiguration,
uint256 indexed fundingCycleNumber,
uint256 indexed projectId,
address beneficiary,
uint256 tokenCount,
uint256 beneficiaryTokenCount,
string memo,
address caller
);
event DistributeToReservedTokenSplit(
uint256 indexed projectId,
uint256 indexed domain,
uint256 indexed group,
JBSplit split,
uint256 tokenCount,
address caller
);
event MintTokens(
address indexed beneficiary,
uint256 indexed projectId,
uint256 tokenCount,
uint256 beneficiaryTokenCount,
string memo,
uint256 reservedRate,
address caller
);
event BurnTokens(
address indexed holder,
uint256 indexed projectId,
uint256 tokenCount,
string memo,
address caller
);
event Migrate(uint256 indexed projectId, IJBMigratable to, address caller);
event PrepMigration(uint256 indexed projectId, address from, address caller);
function projects() external view returns (IJBProjects);
function fundingCycleStore() external view returns (IJBFundingCycleStore);
function tokenStore() external view returns (IJBTokenStore);
function splitsStore() external view returns (IJBSplitsStore);
function fundAccessConstraintsStore() external view returns (IJBFundAccessConstraintsStore);
function directory() external view returns (IJBDirectory);
function reservedTokenBalanceOf(uint256 projectId) external view returns (uint256);
function totalOutstandingTokensOf(uint256 projectId) external view returns (uint256);
function getFundingCycleOf(
uint256 projectId,
uint256 configuration
)
external
view
returns (JBFundingCycle memory fundingCycle, JBFundingCycleMetadata memory metadata);
function latestConfiguredFundingCycleOf(
uint256 projectId
)
external
view
returns (JBFundingCycle memory, JBFundingCycleMetadata memory metadata, JBBallotState);
function currentFundingCycleOf(
uint256 projectId
)
external
view
returns (JBFundingCycle memory fundingCycle, JBFundingCycleMetadata memory metadata);
function queuedFundingCycleOf(
uint256 projectId
)
external
view
returns (JBFundingCycle memory fundingCycle, JBFundingCycleMetadata memory metadata);
function launchProjectFor(
address owner,
JBProjectMetadata calldata projectMetadata,
JBFundingCycleData calldata data,
JBFundingCycleMetadata calldata metadata,
uint256 mustStartAtOrAfter,
JBGroupedSplits[] memory groupedSplits,
JBFundAccessConstraints[] memory fundAccessConstraints,
IJBPaymentTerminal[] memory terminals,
string calldata memo
) external returns (uint256 projectId);
function launchFundingCyclesFor(
uint256 projectId,
JBFundingCycleData calldata data,
JBFundingCycleMetadata calldata metadata,
uint256 mustStartAtOrAfter,
JBGroupedSplits[] memory groupedSplits,
JBFundAccessConstraints[] memory fundAccessConstraints,
IJBPaymentTerminal[] memory terminals,
string calldata memo
) external returns (uint256 configuration);
function reconfigureFundingCyclesOf(
uint256 projectId,
JBFundingCycleData calldata data,
JBFundingCycleMetadata calldata metadata,
uint256 mustStartAtOrAfter,
JBGroupedSplits[] memory groupedSplits,
JBFundAccessConstraints[] memory fundAccessConstraints,
string calldata memo
) external returns (uint256);
function mintTokensOf(
uint256 projectId,
uint256 tokenCount,
address beneficiary,
string calldata memo,
bool preferClaimedTokens,
bool useReservedRate
) external returns (uint256 beneficiaryTokenCount);
function burnTokensOf(
address holder,
uint256 projectId,
uint256 tokenCount,
string calldata memo,
bool preferClaimedTokens
) external;
function distributeReservedTokensOf(
uint256 projectId,
string memory memo
) external returns (uint256);
function migrate(uint256 projectId, IJBMigratable to) external;
}
文件 8 的 57:IJBDirectory.sol
pragma solidity ^0.8.0;
import {IJBFundingCycleStore} from './IJBFundingCycleStore.sol';
import {IJBPaymentTerminal} from './IJBPaymentTerminal.sol';
import {IJBProjects} from './IJBProjects.sol';
interface IJBDirectory {
event SetController(uint256 indexed projectId, address indexed controller, address caller);
event AddTerminal(uint256 indexed projectId, IJBPaymentTerminal indexed terminal, address caller);
event SetTerminals(uint256 indexed projectId, IJBPaymentTerminal[] terminals, address caller);
event SetPrimaryTerminal(
uint256 indexed projectId,
address indexed token,
IJBPaymentTerminal indexed terminal,
address caller
);
event SetIsAllowedToSetFirstController(address indexed addr, bool indexed flag, address caller);
function projects() external view returns (IJBProjects);
function fundingCycleStore() external view returns (IJBFundingCycleStore);
function controllerOf(uint256 projectId) external view returns (address);
function isAllowedToSetFirstController(address account) external view returns (bool);
function terminalsOf(uint256 projectId) external view returns (IJBPaymentTerminal[] memory);
function isTerminalOf(
uint256 projectId,
IJBPaymentTerminal terminal
) external view returns (bool);
function primaryTerminalOf(
uint256 projectId,
address token
) external view returns (IJBPaymentTerminal);
function setControllerOf(uint256 projectId, address controller) external;
function setTerminalsOf(uint256 projectId, IJBPaymentTerminal[] calldata terminals) external;
function setPrimaryTerminalOf(
uint256 projectId,
address token,
IJBPaymentTerminal terminal
) external;
function setIsAllowedToSetFirstController(address account, bool flag) external;
}
文件 9 的 57:IJBFundAccessConstraintsStore.sol
pragma solidity ^0.8.0;
import {IERC165} from '@openzeppelin/contracts/utils/introspection/IERC165.sol';
import {JBFundAccessConstraints} from './../structs/JBFundAccessConstraints.sol';
import {IJBPaymentTerminal} from './IJBPaymentTerminal.sol';
interface IJBFundAccessConstraintsStore is IERC165 {
event SetFundAccessConstraints(
uint256 indexed fundingCycleConfiguration,
uint256 indexed projectId,
JBFundAccessConstraints constraints,
address caller
);
function distributionLimitOf(
uint256 projectId,
uint256 configuration,
IJBPaymentTerminal terminal,
address token
) external view returns (uint256 distributionLimit, uint256 distributionLimitCurrency);
function overflowAllowanceOf(
uint256 projectId,
uint256 configuration,
IJBPaymentTerminal terminal,
address token
) external view returns (uint256 overflowAllowance, uint256 overflowAllowanceCurrency);
function setFor(
uint256 projectId,
uint256 configuration,
JBFundAccessConstraints[] memory fundAccessConstaints
) external;
}
文件 10 的 57:IJBFundingCycleBallot.sol
pragma solidity ^0.8.0;
import {IERC165} from '@openzeppelin/contracts/utils/introspection/IERC165.sol';
import {JBBallotState} from './../enums/JBBallotState.sol';
interface IJBFundingCycleBallot is IERC165 {
function duration() external view returns (uint256);
function stateOf(
uint256 projectId,
uint256 configuration,
uint256 start
) external view returns (JBBallotState);
}
文件 11 的 57:IJBFundingCycleStore.sol
pragma solidity ^0.8.0;
import {JBBallotState} from './../enums/JBBallotState.sol';
import {JBFundingCycle} from './../structs/JBFundingCycle.sol';
import {JBFundingCycleData} from './../structs/JBFundingCycleData.sol';
interface IJBFundingCycleStore {
event Configure(
uint256 indexed configuration,
uint256 indexed projectId,
JBFundingCycleData data,
uint256 metadata,
uint256 mustStartAtOrAfter,
address caller
);
event Init(uint256 indexed configuration, uint256 indexed projectId, uint256 indexed basedOn);
function latestConfigurationOf(uint256 projectId) external view returns (uint256);
function get(
uint256 projectId,
uint256 configuration
) external view returns (JBFundingCycle memory);
function latestConfiguredOf(
uint256 projectId
) external view returns (JBFundingCycle memory fundingCycle, JBBallotState ballotState);
function queuedOf(uint256 projectId) external view returns (JBFundingCycle memory fundingCycle);
function currentOf(uint256 projectId) external view returns (JBFundingCycle memory fundingCycle);
function currentBallotStateOf(uint256 projectId) external view returns (JBBallotState);
function configureFor(
uint256 projectId,
JBFundingCycleData calldata data,
uint256 metadata,
uint256 mustStartAtOrAfter
) external returns (JBFundingCycle memory fundingCycle);
}
文件 12 的 57:IJBMigratable.sol
pragma solidity ^0.8.0;
interface IJBMigratable {
function prepForMigrationOf(uint256 projectId, address from) external;
}
文件 13 的 57:IJBOperatable.sol
pragma solidity ^0.8.0;
import {IJBOperatorStore} from './IJBOperatorStore.sol';
interface IJBOperatable {
function operatorStore() external view returns (IJBOperatorStore);
}
文件 14 的 57:IJBOperatorStore.sol
pragma solidity ^0.8.0;
import {JBOperatorData} from './../structs/JBOperatorData.sol';
interface IJBOperatorStore {
event SetOperator(
address indexed operator,
address indexed account,
uint256 indexed domain,
uint256[] permissionIndexes,
uint256 packed
);
function permissionsOf(
address operator,
address account,
uint256 domain
) external view returns (uint256);
function hasPermission(
address operator,
address account,
uint256 domain,
uint256 permissionIndex
) external view returns (bool);
function hasPermissions(
address operator,
address account,
uint256 domain,
uint256[] calldata permissionIndexes
) external view returns (bool);
function setOperator(JBOperatorData calldata operatorData) external;
function setOperators(JBOperatorData[] calldata operatorData) external;
}
文件 15 的 57:IJBOwnable.sol
pragma solidity ^0.8.0;
interface IJBOwnable {
event PermissionIndexChanged(uint8 newIndex);
function jbOwner()
external
view
returns (
address owner,
uint88 projectOwner,
uint8 permissionIndex
);
function transferOwnershipToProject(uint256 _projectId) external;
function setPermissionIndex(uint8 _permissionIndex) external;
}
文件 16 的 57:IJBPaymentTerminal.sol
pragma solidity ^0.8.0;
import {IERC165} from '@openzeppelin/contracts/utils/introspection/IERC165.sol';
interface IJBPaymentTerminal is IERC165 {
function acceptsToken(address token, uint256 projectId) external view returns (bool);
function currencyForToken(address token) external view returns (uint256);
function decimalsForToken(address token) external view returns (uint256);
function currentEthOverflowOf(uint256 projectId) external view returns (uint256);
function pay(
uint256 projectId,
uint256 amount,
address token,
address beneficiary,
uint256 minReturnedTokens,
bool preferClaimedTokens,
string calldata memo,
bytes calldata metadata
) external payable returns (uint256 beneficiaryTokenCount);
function addToBalanceOf(
uint256 projectId,
uint256 amount,
address token,
string calldata memo,
bytes calldata metadata
) external payable;
}
文件 17 的 57:IJBPriceFeed.sol
pragma solidity ^0.8.0;
interface IJBPriceFeed {
function currentPrice(uint256 targetDecimals) external view returns (uint256);
}
文件 18 的 57:IJBPrices.sol
pragma solidity ^0.8.0;
import {IJBPriceFeed} from './IJBPriceFeed.sol';
interface IJBPrices {
event AddFeed(uint256 indexed currency, uint256 indexed base, IJBPriceFeed feed);
function feedFor(uint256 currency, uint256 base) external view returns (IJBPriceFeed);
function priceFor(
uint256 currency,
uint256 base,
uint256 decimals
) external view returns (uint256);
function addFeedFor(uint256 currency, uint256 base, IJBPriceFeed priceFeed) external;
}
文件 19 的 57:IJBProjects.sol
pragma solidity ^0.8.0;
import {IERC721} from '@openzeppelin/contracts/token/ERC721/IERC721.sol';
import {JBProjectMetadata} from './../structs/JBProjectMetadata.sol';
import {IJBTokenUriResolver} from './IJBTokenUriResolver.sol';
interface IJBProjects is IERC721 {
event Create(
uint256 indexed projectId,
address indexed owner,
JBProjectMetadata metadata,
address caller
);
event SetMetadata(uint256 indexed projectId, JBProjectMetadata metadata, address caller);
event SetTokenUriResolver(IJBTokenUriResolver indexed resolver, address caller);
function count() external view returns (uint256);
function metadataContentOf(
uint256 projectId,
uint256 domain
) external view returns (string memory);
function tokenUriResolver() external view returns (IJBTokenUriResolver);
function createFor(
address owner,
JBProjectMetadata calldata metadata
) external returns (uint256 projectId);
function setMetadataOf(uint256 projectId, JBProjectMetadata calldata metadata) external;
function setTokenUriResolver(IJBTokenUriResolver newResolver) external;
}
文件 20 的 57:IJBSplitAllocator.sol
pragma solidity ^0.8.0;
import {IERC165} from '@openzeppelin/contracts/utils/introspection/IERC165.sol';
import {JBSplitAllocationData} from '../structs/JBSplitAllocationData.sol';
interface IJBSplitAllocator is IERC165 {
function allocate(JBSplitAllocationData calldata data) external payable;
}
文件 21 的 57:IJBSplitsStore.sol
pragma solidity ^0.8.0;
import {JBGroupedSplits} from './../structs/JBGroupedSplits.sol';
import {JBSplit} from './../structs/JBSplit.sol';
import {IJBDirectory} from './IJBDirectory.sol';
import {IJBProjects} from './IJBProjects.sol';
interface IJBSplitsStore {
event SetSplit(
uint256 indexed projectId,
uint256 indexed domain,
uint256 indexed group,
JBSplit split,
address caller
);
function projects() external view returns (IJBProjects);
function directory() external view returns (IJBDirectory);
function splitsOf(
uint256 projectId,
uint256 domain,
uint256 group
) external view returns (JBSplit[] memory);
function set(uint256 projectId, uint256 domain, JBGroupedSplits[] memory groupedSplits) external;
}
文件 22 的 57:IJBTiered721Delegate.sol
pragma solidity ^0.8.0;
import { IJBDirectory } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBDirectory.sol";
import { IJBFundingCycleStore } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBFundingCycleStore.sol";
import { IJBPrices } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBPrices.sol";
import { IJB721Delegate } from "./IJB721Delegate.sol";
import { IJB721TokenUriResolver } from "./IJB721TokenUriResolver.sol";
import { IJBTiered721DelegateStore } from "./IJBTiered721DelegateStore.sol";
import { JB721PricingParams } from "./../structs/JB721PricingParams.sol";
import { JB721TierParams } from "./../structs/JB721TierParams.sol";
import { JBTiered721Flags } from "./../structs/JBTiered721Flags.sol";
import { JBTiered721MintReservesForTiersData } from "./../structs/JBTiered721MintReservesForTiersData.sol";
import { JBTiered721MintForTiersData } from "./../structs/JBTiered721MintForTiersData.sol";
interface IJBTiered721Delegate is IJB721Delegate {
event Mint(
uint256 indexed tokenId,
uint256 indexed tierId,
address indexed beneficiary,
uint256 totalAmountContributed,
address caller
);
event MintReservedToken(
uint256 indexed tokenId, uint256 indexed tierId, address indexed beneficiary, address caller
);
event AddTier(uint256 indexed tierId, JB721TierParams data, address caller);
event RemoveTier(uint256 indexed tierId, address caller);
event SetEncodedIPFSUri(uint256 indexed tierId, bytes32 encodedIPFSUri, address caller);
event SetBaseUri(string indexed baseUri, address caller);
event SetContractUri(string indexed contractUri, address caller);
event SetTokenUriResolver(IJB721TokenUriResolver indexed newResolver, address caller);
event AddCredits(
uint256 indexed changeAmount, uint256 indexed newTotalCredits, address indexed account, address caller
);
event UseCredits(
uint256 indexed changeAmount, uint256 indexed newTotalCredits, address indexed account, address caller
);
function codeOrigin() external view returns (address);
function store() external view returns (IJBTiered721DelegateStore);
function fundingCycleStore() external view returns (IJBFundingCycleStore);
function pricingContext() external view returns (uint256, uint256, IJBPrices);
function creditsOf(address _address) external view returns (uint256);
function firstOwnerOf(uint256 _tokenId) external view returns (address);
function baseURI() external view returns (string memory);
function contractURI() external view returns (string memory);
function adjustTiers(JB721TierParams[] memory tierDataToAdd, uint256[] memory tierIdsToRemove) external;
function mintReservesFor(JBTiered721MintReservesForTiersData[] memory mintReservesForTiersData) external;
function mintReservesFor(uint256 tierId, uint256 count) external;
function mintFor(uint16[] calldata tierIds, address beneficiary) external returns (uint256[] memory tokenIds);
function setMetadata(
string memory baseUri,
string calldata contractMetadataUri,
IJB721TokenUriResolver tokenUriResolver,
uint256 encodedIPFSUriTierId,
bytes32 encodedIPFSUri
) external;
function initialize(
uint256 projectId,
string memory name,
string memory symbol,
IJBFundingCycleStore fundingCycleStore,
string memory baseUri,
IJB721TokenUriResolver tokenUriResolver,
string memory contractUri,
JB721PricingParams memory pricing,
IJBTiered721DelegateStore store,
JBTiered721Flags memory flags
) external;
}
文件 23 的 57:IJBTiered721DelegateDeployer.sol
pragma solidity ^0.8.0;
import { IJBDirectory } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBDirectory.sol";
import { JB721GovernanceType } from "../enums/JB721GovernanceType.sol";
import { JBDeployTiered721DelegateData } from "../structs/JBDeployTiered721DelegateData.sol";
import { IJBTiered721Delegate } from "./IJBTiered721Delegate.sol";
interface IJBTiered721DelegateDeployer {
event DelegateDeployed(
uint256 indexed projectId,
IJBTiered721Delegate newDelegate,
JB721GovernanceType governanceType
);
function deployDelegateFor(
uint256 projectId,
JBDeployTiered721DelegateData memory deployTieredNFTRewardDelegateData
) external returns (IJBTiered721Delegate delegate);
}
文件 24 的 57:IJBTiered721DelegateProjectDeployer.sol
pragma solidity ^0.8.0;
import { IJBDirectory } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBDirectory.sol";
import { IJBProjects } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBProjects.sol";
import { IJBController3_1 } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBController3_1.sol";
import { JBProjectMetadata } from "@jbx-protocol/juice-contracts-v3/contracts/structs/JBProjectMetadata.sol";
import { JBDeployTiered721DelegateData } from "../structs/JBDeployTiered721DelegateData.sol";
import { JBLaunchProjectData } from "../structs/JBLaunchProjectData.sol";
import { JBLaunchFundingCyclesData } from "../structs/JBLaunchFundingCyclesData.sol";
import { JBReconfigureFundingCyclesData } from "../structs/JBReconfigureFundingCyclesData.sol";
import { IJBTiered721DelegateDeployer } from "./IJBTiered721DelegateDeployer.sol";
interface IJBTiered721DelegateProjectDeployer {
function directory() external view returns (IJBDirectory);
function delegateDeployer() external view returns (IJBTiered721DelegateDeployer);
function launchProjectFor(
address owner,
JBDeployTiered721DelegateData memory deployTiered721DelegateData,
JBLaunchProjectData memory launchProjectData,
IJBController3_1 controller
) external returns (uint256 projectId);
function launchFundingCyclesFor(
uint256 projectId,
JBDeployTiered721DelegateData memory deployTiered721DelegateData,
JBLaunchFundingCyclesData memory launchFundingCyclesData,
IJBController3_1 controller
) external returns (uint256 configuration);
function reconfigureFundingCyclesOf(
uint256 projectId,
JBDeployTiered721DelegateData memory deployTiered721DelegateData,
JBReconfigureFundingCyclesData memory reconfigureFundingCyclesData,
IJBController3_1 controller
) external returns (uint256 configuration);
}
文件 25 的 57:IJBTiered721DelegateStore.sol
pragma solidity ^0.8.0;
import { IJB721TokenUriResolver } from "./IJB721TokenUriResolver.sol";
import { JB721TierParams } from "./../structs/JB721TierParams.sol";
import { JB721Tier } from "./../structs/JB721Tier.sol";
import { JBTiered721Flags } from "./../structs/JBTiered721Flags.sol";
interface IJBTiered721DelegateStore {
event CleanTiers(address indexed nft, address caller);
function totalSupplyOf(address _nft) external view returns (uint256);
function balanceOf(address _nft, address _owner) external view returns (uint256);
function maxTierIdOf(address _nft) external view returns (uint256);
function tiersOf(
address nft,
uint256[] calldata categories,
bool includeResolvedUri,
uint256 startingSortIndex,
uint256 size
) external view returns (JB721Tier[] memory tiers);
function tierOf(address nft, uint256 id, bool includeResolvedUri) external view returns (JB721Tier memory tier);
function tierBalanceOf(address nft, address owner, uint256 tier) external view returns (uint256);
function tierOfTokenId(address nft, uint256 tokenId, bool includeResolvedUri)
external
view
returns (JB721Tier memory tier);
function tierIdOfToken(uint256 tokenId) external pure returns (uint256);
function encodedIPFSUriOf(address nft, uint256 tierId) external view returns (bytes32);
function redemptionWeightOf(address nft, uint256[] memory tokenIds) external view returns (uint256 weight);
function totalRedemptionWeight(address nft) external view returns (uint256 weight);
function numberOfReservedTokensOutstandingFor(address nft, uint256 tierId) external view returns (uint256);
function numberOfReservesMintedFor(address nft, uint256 tierId) external view returns (uint256);
function numberOfBurnedFor(address nft, uint256 tierId) external view returns (uint256);
function isTierRemoved(address nft, uint256 tierId) external view returns (bool);
function flagsOf(address nft) external view returns (JBTiered721Flags memory);
function votingUnitsOf(address nft, address account) external view returns (uint256 units);
function tierVotingUnitsOf(address nft, address account, uint256 tierId) external view returns (uint256 units);
function defaultReservedTokenBeneficiaryOf(address nft) external view returns (address);
function reservedTokenBeneficiaryOf(address nft, uint256 tierId) external view returns (address);
function tokenUriResolverOf(address nft) external view returns (IJB721TokenUriResolver);
function encodedTierIPFSUriOf(address nft, uint256 tokenId) external view returns (bytes32);
function recordAddTiers(JB721TierParams[] memory tierData) external returns (uint256[] memory tierIds);
function recordMintReservesFor(uint256 tierId, uint256 count) external returns (uint256[] memory tokenIds);
function recordBurn(uint256[] memory tokenIds) external;
function recordMint(uint256 amount, uint16[] calldata tierIds, bool isManualMint)
external
returns (uint256[] memory tokenIds, uint256 leftoverAmount);
function recordTransferForTier(uint256 tierId, address from, address to) external;
function recordRemoveTierIds(uint256[] memory tierIds) external;
function recordSetTokenUriResolver(IJB721TokenUriResolver resolver) external;
function recordSetEncodedIPFSUriOf(uint256 tierId, bytes32 encodedIPFSUri) external;
function recordFlags(JBTiered721Flags calldata flag) external;
function cleanTiers(address nft) external;
}
文件 26 的 57:IJBToken.sol
pragma solidity ^0.8.0;
interface IJBToken {
function projectId() external view returns (uint256);
function decimals() external view returns (uint8);
function totalSupply(uint256 projectId) external view returns (uint256);
function balanceOf(address account, uint256 projectId) external view returns (uint256);
function mint(uint256 projectId, address account, uint256 amount) external;
function burn(uint256 projectId, address account, uint256 amount) external;
function approve(uint256, address spender, uint256 amount) external;
function transfer(uint256 projectId, address to, uint256 amount) external;
function transferFrom(uint256 projectId, address from, address to, uint256 amount) external;
}
文件 27 的 57:IJBTokenStore.sol
pragma solidity ^0.8.0;
import {IJBFundingCycleStore} from './IJBFundingCycleStore.sol';
import {IJBProjects} from './IJBProjects.sol';
import {IJBToken} from './IJBToken.sol';
interface IJBTokenStore {
event Issue(
uint256 indexed projectId,
IJBToken indexed token,
string name,
string symbol,
address caller
);
event Mint(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
bool tokensWereClaimed,
bool preferClaimedTokens,
address caller
);
event Burn(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
uint256 initialUnclaimedBalance,
uint256 initialClaimedBalance,
bool preferClaimedTokens,
address caller
);
event Claim(
address indexed holder,
uint256 indexed projectId,
uint256 initialUnclaimedBalance,
uint256 amount,
address caller
);
event Set(uint256 indexed projectId, IJBToken indexed newToken, address caller);
event Transfer(
address indexed holder,
uint256 indexed projectId,
address indexed recipient,
uint256 amount,
address caller
);
function tokenOf(uint256 projectId) external view returns (IJBToken);
function projects() external view returns (IJBProjects);
function fundingCycleStore() external view returns (IJBFundingCycleStore);
function unclaimedBalanceOf(address holder, uint256 projectId) external view returns (uint256);
function unclaimedTotalSupplyOf(uint256 projectId) external view returns (uint256);
function totalSupplyOf(uint256 projectId) external view returns (uint256);
function balanceOf(address holder, uint256 projectId) external view returns (uint256 result);
function issueFor(
uint256 projectId,
string calldata name,
string calldata symbol
) external returns (IJBToken token);
function setFor(uint256 projectId, IJBToken token) external;
function burnFrom(
address holder,
uint256 projectId,
uint256 amount,
bool preferClaimedTokens
) external;
function mintFor(
address holder,
uint256 projectId,
uint256 amount,
bool preferClaimedTokens
) external;
function claimFor(address holder, uint256 projectId, uint256 amount) external;
function transferFrom(
address holder,
uint256 projectId,
address recipient,
uint256 amount
) external;
}
文件 28 的 57:IJBTokenUriResolver.sol
pragma solidity ^0.8.0;
interface IJBTokenUriResolver {
function getUri(uint256 projectId) external view returns (string memory tokenUri);
}
文件 29 的 57:JB721GovernanceType.sol
pragma solidity ^0.8.0;
enum JB721GovernanceType {
NONE,
ONCHAIN
}
文件 30 的 57:JB721PricingParams.sol
pragma solidity ^0.8.0;
import "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBPrices.sol";
import "./JB721TierParams.sol";
struct JB721PricingParams {
JB721TierParams[] tiers;
uint48 currency;
uint48 decimals;
IJBPrices prices;
}
文件 31 的 57:JB721Tier.sol
pragma solidity ^0.8.16;
struct JB721Tier {
uint256 id;
uint256 price;
uint256 remainingQuantity;
uint256 initialQuantity;
uint256 votingUnits;
uint256 reservedRate;
address reservedTokenBeneficiary;
bytes32 encodedIPFSUri;
uint256 category;
bool allowManualMint;
bool transfersPausable;
string resolvedUri;
}
文件 32 的 57:JB721TierParams.sol
pragma solidity ^0.8.0;
struct JB721TierParams {
uint104 price;
uint32 initialQuantity;
uint32 votingUnits;
uint16 reservedRate;
address reservedTokenBeneficiary;
bytes32 encodedIPFSUri;
uint24 category;
bool allowManualMint;
bool shouldUseReservedTokenBeneficiaryAsDefault;
bool transfersPausable;
bool useVotingUnits;
}
文件 33 的 57:JBBallotState.sol
pragma solidity ^0.8.0;
enum JBBallotState {
Active,
Approved,
Failed
}
文件 34 的 57:JBDeployTiered721DelegateData.sol
pragma solidity ^0.8.0;
import "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBDirectory.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBFundingCycleStore.sol";
import "./../enums/JB721GovernanceType.sol";
import "./../interfaces/IJB721TokenUriResolver.sol";
import "./../interfaces/IJBTiered721DelegateStore.sol";
import "./JB721PricingParams.sol";
import "./JBTiered721Flags.sol";
struct JBDeployTiered721DelegateData {
string name;
string symbol;
IJBFundingCycleStore fundingCycleStore;
string baseUri;
IJB721TokenUriResolver tokenUriResolver;
string contractUri;
JB721PricingParams pricing;
address reservedTokenBeneficiary;
IJBTiered721DelegateStore store;
JBTiered721Flags flags;
JB721GovernanceType governanceType;
}
文件 35 的 57:JBFundAccessConstraints.sol
pragma solidity ^0.8.0;
import {IJBPaymentTerminal} from './../interfaces/IJBPaymentTerminal.sol';
struct JBFundAccessConstraints {
IJBPaymentTerminal terminal;
address token;
uint256 distributionLimit;
uint256 distributionLimitCurrency;
uint256 overflowAllowance;
uint256 overflowAllowanceCurrency;
}
文件 36 的 57:JBFundingCycle.sol
pragma solidity ^0.8.0;
import {IJBFundingCycleBallot} from './../interfaces/IJBFundingCycleBallot.sol';
struct JBFundingCycle {
uint256 number;
uint256 configuration;
uint256 basedOn;
uint256 start;
uint256 duration;
uint256 weight;
uint256 discountRate;
IJBFundingCycleBallot ballot;
uint256 metadata;
}
文件 37 的 57:JBFundingCycleData.sol
pragma solidity ^0.8.0;
import {IJBFundingCycleBallot} from './../interfaces/IJBFundingCycleBallot.sol';
struct JBFundingCycleData {
uint256 duration;
uint256 weight;
uint256 discountRate;
IJBFundingCycleBallot ballot;
}
文件 38 的 57:JBFundingCycleMetadata.sol
pragma solidity ^0.8.0;
import {JBGlobalFundingCycleMetadata} from './JBGlobalFundingCycleMetadata.sol';
struct JBFundingCycleMetadata {
JBGlobalFundingCycleMetadata global;
uint256 reservedRate;
uint256 redemptionRate;
uint256 ballotRedemptionRate;
bool pausePay;
bool pauseDistributions;
bool pauseRedeem;
bool pauseBurn;
bool allowMinting;
bool allowTerminalMigration;
bool allowControllerMigration;
bool holdFees;
bool preferClaimedTokenOverride;
bool useTotalOverflowForRedemptions;
bool useDataSourceForPay;
bool useDataSourceForRedeem;
address dataSource;
uint256 metadata;
}
文件 39 的 57:JBGlobalFundingCycleMetadata.sol
pragma solidity ^0.8.0;
struct JBGlobalFundingCycleMetadata {
bool allowSetTerminals;
bool allowSetController;
bool pauseTransfers;
}
文件 40 的 57:JBGroupedSplits.sol
pragma solidity ^0.8.0;
import {JBSplit} from './JBSplit.sol';
struct JBGroupedSplits {
uint256 group;
JBSplit[] splits;
}
文件 41 的 57:JBLaunchFundingCyclesData.sol
pragma solidity ^0.8.0;
import "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBPaymentTerminal.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBFundingCycleData.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBFundAccessConstraints.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBGroupedSplits.sol";
import "./JBPayDataSourceFundingCycleMetadata.sol";
struct JBLaunchFundingCyclesData {
JBFundingCycleData data;
JBPayDataSourceFundingCycleMetadata metadata;
uint256 mustStartAtOrAfter;
JBGroupedSplits[] groupedSplits;
JBFundAccessConstraints[] fundAccessConstraints;
IJBPaymentTerminal[] terminals;
string memo;
}
文件 42 的 57:JBLaunchProjectData.sol
pragma solidity ^0.8.0;
import "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBPaymentTerminal.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBProjectMetadata.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBFundingCycleData.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBFundAccessConstraints.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBGroupedSplits.sol";
import "./JBPayDataSourceFundingCycleMetadata.sol";
struct JBLaunchProjectData {
JBProjectMetadata projectMetadata;
JBFundingCycleData data;
JBPayDataSourceFundingCycleMetadata metadata;
uint256 mustStartAtOrAfter;
JBGroupedSplits[] groupedSplits;
JBFundAccessConstraints[] fundAccessConstraints;
IJBPaymentTerminal[] terminals;
string memo;
}
文件 43 的 57:JBOperatable.sol
pragma solidity ^0.8.16;
import {IJBOperatable} from './../interfaces/IJBOperatable.sol';
import {IJBOperatorStore} from './../interfaces/IJBOperatorStore.sol';
abstract contract JBOperatable is IJBOperatable {
error UNAUTHORIZED();
modifier requirePermission(
address _account,
uint256 _domain,
uint256 _permissionIndex
) {
_requirePermission(_account, _domain, _permissionIndex);
_;
}
modifier requirePermissionAllowingOverride(
address _account,
uint256 _domain,
uint256 _permissionIndex,
bool _override
) {
_requirePermissionAllowingOverride(_account, _domain, _permissionIndex, _override);
_;
}
IJBOperatorStore public immutable override operatorStore;
constructor(IJBOperatorStore _operatorStore) {
operatorStore = _operatorStore;
}
function _requirePermission(
address _account,
uint256 _domain,
uint256 _permissionIndex
) internal view {
if (
msg.sender != _account &&
!operatorStore.hasPermission(msg.sender, _account, _domain, _permissionIndex) &&
!operatorStore.hasPermission(msg.sender, _account, 0, _permissionIndex)
) revert UNAUTHORIZED();
}
function _requirePermissionAllowingOverride(
address _account,
uint256 _domain,
uint256 _permissionIndex,
bool _override
) internal view {
if (
!_override &&
msg.sender != _account &&
!operatorStore.hasPermission(msg.sender, _account, _domain, _permissionIndex) &&
!operatorStore.hasPermission(msg.sender, _account, 0, _permissionIndex)
) revert UNAUTHORIZED();
}
}
文件 44 的 57:JBOperations.sol
pragma solidity ^0.8.0;
library JBOperations {
uint256 public constant RECONFIGURE = 1;
uint256 public constant REDEEM = 2;
uint256 public constant MIGRATE_CONTROLLER = 3;
uint256 public constant MIGRATE_TERMINAL = 4;
uint256 public constant PROCESS_FEES = 5;
uint256 public constant SET_METADATA = 6;
uint256 public constant ISSUE = 7;
uint256 public constant SET_TOKEN = 8;
uint256 public constant MINT = 9;
uint256 public constant BURN = 10;
uint256 public constant CLAIM = 11;
uint256 public constant TRANSFER = 12;
uint256 public constant REQUIRE_CLAIM = 13;
uint256 public constant SET_CONTROLLER = 14;
uint256 public constant SET_TERMINALS = 15;
uint256 public constant SET_PRIMARY_TERMINAL = 16;
uint256 public constant USE_ALLOWANCE = 17;
uint256 public constant SET_SPLITS = 18;
}
文件 45 的 57:JBOperatorData.sol
pragma solidity ^0.8.0;
struct JBOperatorData {
address operator;
uint256 domain;
uint256[] permissionIndexes;
}
文件 46 的 57:JBOwnable.sol
pragma solidity ^0.8.0;
import { JBOwnableOverrides, IJBProjects, IJBOperatorStore } from "./JBOwnableOverrides.sol";
contract JBOwnable is JBOwnableOverrides {
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor(
IJBProjects _projects,
IJBOperatorStore _operatorStore
) JBOwnableOverrides(_projects, _operatorStore) {}
modifier onlyOwner() virtual {
_checkOwner();
_;
}
function _emitTransferEvent(address previousOwner, address newOwner)
internal
virtual
override
{
emit OwnershipTransferred(previousOwner, newOwner);
}
}
文件 47 的 57:JBOwnableOverrides.sol
pragma solidity ^0.8.0;
import { JBOwner } from "./struct/JBOwner.sol";
import { IJBOwnable } from "./interfaces/IJBOwnable.sol";
import { IJBOperatable } from '@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBOperatable.sol';
import { IJBOperatorStore } from "@jbx-protocol/juice-contracts-v3/contracts/abstract/JBOperatable.sol";
import { IJBProjects } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBProjects.sol";
import { Context } from "@openzeppelin/contracts/utils/Context.sol";
abstract contract JBOwnableOverrides is Context, IJBOwnable, IJBOperatable {
error UNAUTHORIZED();
error INVALID_NEW_OWNER(address ownerAddress, uint256 projectId);
IJBOperatorStore public immutable operatorStore;
IJBProjects public immutable projects;
JBOwner public override jbOwner;
constructor(
IJBProjects _projects,
IJBOperatorStore _operatorStore
) {
operatorStore = _operatorStore;
projects = _projects;
_transferOwnership(msg.sender);
}
modifier requirePermission(
address _account,
uint256 _domain,
uint256 _permissionIndex
) {
_requirePermission(_account, _domain, _permissionIndex);
_;
}
modifier requirePermissionFromProject(
uint256 _permissionIndex
) {
JBOwner memory _ownerData = jbOwner;
if (_ownerData.projectId == 0)
revert UNAUTHORIZED();
address _owner = _ownerData.projectId == 0 ?
_ownerData.owner : projects.ownerOf(_ownerData.projectId);
_requirePermission(_owner, _ownerData.projectId, _permissionIndex);
_;
}
modifier requirePermissionAllowingOverride(
address _account,
uint256 _domain,
uint256 _permissionIndex,
bool _override
) {
_requirePermissionAllowingOverride(_account, _domain, _permissionIndex, _override);
_;
}
function owner() public view virtual returns (address) {
JBOwner memory _ownerData = jbOwner;
if(_ownerData.projectId == 0)
return _ownerData.owner;
return projects.ownerOf(_ownerData.projectId);
}
function renounceOwnership() public virtual {
_checkOwner();
_transferOwnership(address(0), 0);
}
function transferOwnership(address _newOwner) public virtual {
_checkOwner();
if(_newOwner == address(0))
revert INVALID_NEW_OWNER(_newOwner, 0);
_transferOwnership(_newOwner, 0);
}
function transferOwnershipToProject(uint256 _projectId) public virtual {
_checkOwner();
if(_projectId == 0 || _projectId > type(uint88).max)
revert INVALID_NEW_OWNER(address(0), _projectId);
_transferOwnership(address(0), uint88(_projectId));
}
function setPermissionIndex(uint8 _permissionIndex) public virtual {
_checkOwner();
_setPermissionIndex(_permissionIndex);
}
function _setPermissionIndex(uint8 _permissionIndex) internal virtual {
jbOwner.permissionIndex = _permissionIndex;
emit PermissionIndexChanged(_permissionIndex);
}
function _transferOwnership(address _newOwner) internal virtual {
_transferOwnership(_newOwner, 0);
}
function _transferOwnership(address _newOwner, uint88 _projectId) internal virtual {
if (_projectId != 0 && _newOwner != address(0))
revert INVALID_NEW_OWNER(_newOwner, _projectId);
JBOwner memory _ownerData = jbOwner;
address _oldOwner = _ownerData.projectId == 0 ?
_ownerData.owner : projects.ownerOf(_ownerData.projectId);
jbOwner = JBOwner({
owner: _newOwner,
projectId: _projectId,
permissionIndex: 0
});
_emitTransferEvent(_oldOwner, _projectId == 0 ? _newOwner : projects.ownerOf(_projectId));
}
function _checkOwner() internal view virtual {
JBOwner memory _ownerData = jbOwner;
address _owner = _ownerData.projectId == 0 ?
_ownerData.owner : projects.ownerOf(_ownerData.projectId);
_requirePermission(_owner, _ownerData.projectId, _ownerData.permissionIndex);
}
function _requirePermission(
address _account,
uint256 _domain,
uint256 _permissionIndex
) internal view virtual {
address _sender = _msgSender();
if (
_sender != _account &&
!operatorStore.hasPermission(
_sender,
_account,
_domain,
_permissionIndex
) &&
!operatorStore.hasPermission(_sender, _account, 0, _permissionIndex)
) revert UNAUTHORIZED();
}
function _requirePermissionAllowingOverride(
address _account,
uint256 _domain,
uint256 _permissionIndex,
bool _override
) internal view virtual {
if (_override) return;
_requirePermission(_account, _domain, _permissionIndex);
}
function _emitTransferEvent(address previousOwner, address newOwner) internal virtual;
}
文件 48 的 57:JBOwner.sol
pragma solidity ^0.8.0;
struct JBOwner {
address owner;
uint88 projectId;
uint8 permissionIndex;
}
文件 49 的 57:JBPayDataSourceFundingCycleMetadata.sol
pragma solidity ^0.8.0;
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBGlobalFundingCycleMetadata.sol";
struct JBPayDataSourceFundingCycleMetadata {
JBGlobalFundingCycleMetadata global;
uint256 reservedRate;
uint256 redemptionRate;
uint256 ballotRedemptionRate;
bool pausePay;
bool pauseDistributions;
bool pauseRedeem;
bool pauseBurn;
bool allowMinting;
bool allowTerminalMigration;
bool allowControllerMigration;
bool holdFees;
bool preferClaimedTokenOverride;
bool useTotalOverflowForRedemptions;
bool useDataSourceForRedeem;
uint256 metadata;
}
文件 50 的 57:JBProjectMetadata.sol
pragma solidity ^0.8.0;
struct JBProjectMetadata {
string content;
uint256 domain;
}
文件 51 的 57:JBReconfigureFundingCyclesData.sol
pragma solidity ^0.8.0;
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBFundingCycleData.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBFundAccessConstraints.sol";
import "@jbx-protocol/juice-contracts-v3/contracts/structs/JBGroupedSplits.sol";
import "./JBPayDataSourceFundingCycleMetadata.sol";
struct JBReconfigureFundingCyclesData {
JBFundingCycleData data;
JBPayDataSourceFundingCycleMetadata metadata;
uint256 mustStartAtOrAfter;
JBGroupedSplits[] groupedSplits;
JBFundAccessConstraints[] fundAccessConstraints;
string memo;
}
文件 52 的 57:JBSplit.sol
pragma solidity ^0.8.0;
import {IJBSplitAllocator} from './../interfaces/IJBSplitAllocator.sol';
struct JBSplit {
bool preferClaimed;
bool preferAddToBalance;
uint256 percent;
uint256 projectId;
address payable beneficiary;
uint256 lockedUntil;
IJBSplitAllocator allocator;
}
文件 53 的 57:JBSplitAllocationData.sol
pragma solidity ^0.8.0;
import {JBSplit} from './JBSplit.sol';
struct JBSplitAllocationData {
address token;
uint256 amount;
uint256 decimals;
uint256 projectId;
uint256 group;
JBSplit split;
}
文件 54 的 57:JBTiered721DelegateProjectDeployer.sol
pragma solidity ^0.8.16;
import { JBOwnable } from "@jbx-protocol/juice-ownable/src/JBOwnable.sol";
import { JBOperatable } from "@jbx-protocol/juice-contracts-v3/contracts/abstract/JBOperatable.sol";
import { IJBDirectory } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBDirectory.sol";
import { IJBController3_1 } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBController3_1.sol";
import { IJBOperatorStore } from "@jbx-protocol/juice-contracts-v3/contracts/interfaces/IJBOperatorStore.sol";
import { JBOperations } from "@jbx-protocol/juice-contracts-v3/contracts/libraries/JBOperations.sol";
import { JBFundingCycleMetadata } from "@jbx-protocol/juice-contracts-v3/contracts/structs/JBFundingCycleMetadata.sol";
import { IJBTiered721DelegateDeployer } from "./interfaces/IJBTiered721DelegateDeployer.sol";
import { IJBTiered721DelegateProjectDeployer } from "./interfaces/IJBTiered721DelegateProjectDeployer.sol";
import { IJBTiered721Delegate } from "./interfaces/IJBTiered721Delegate.sol";
import { JBDeployTiered721DelegateData } from "./structs/JBDeployTiered721DelegateData.sol";
import { JBLaunchFundingCyclesData } from "./structs/JBLaunchFundingCyclesData.sol";
import { JBReconfigureFundingCyclesData } from "./structs/JBReconfigureFundingCyclesData.sol";
import { JBLaunchProjectData } from "./structs/JBLaunchProjectData.sol";
contract JBTiered721DelegateProjectDeployer is JBOperatable, IJBTiered721DelegateProjectDeployer {
IJBDirectory public immutable override directory;
IJBTiered721DelegateDeployer public immutable override delegateDeployer;
constructor(
IJBDirectory _directory,
IJBTiered721DelegateDeployer _delegateDeployer,
IJBOperatorStore _operatorStore
) JBOperatable(_operatorStore) {
directory = _directory;
delegateDeployer = _delegateDeployer;
}
function launchProjectFor(
address _owner,
JBDeployTiered721DelegateData memory _deployTiered721DelegateData,
JBLaunchProjectData memory _launchProjectData,
IJBController3_1 _controller
) external override returns (uint256 projectId) {
projectId = directory.projects().count() + 1;
IJBTiered721Delegate _delegate =
delegateDeployer.deployDelegateFor(projectId, _deployTiered721DelegateData);
_launchProjectFor(_owner, _launchProjectData, _delegate, _controller);
JBOwnable(address(_delegate)).transferOwnershipToProject(projectId);
}
function launchFundingCyclesFor(
uint256 _projectId,
JBDeployTiered721DelegateData memory _deployTiered721DelegateData,
JBLaunchFundingCyclesData memory _launchFundingCyclesData,
IJBController3_1 _controller
)
external
override
requirePermission(directory.projects().ownerOf(_projectId), _projectId, JBOperations.RECONFIGURE)
returns (uint256 configuration)
{
IJBTiered721Delegate _delegate =
delegateDeployer.deployDelegateFor(_projectId, _deployTiered721DelegateData);
JBOwnable(address(_delegate)).transferOwnershipToProject(_projectId);
return _launchFundingCyclesFor(_projectId, _launchFundingCyclesData, _delegate, _controller);
}
function reconfigureFundingCyclesOf(
uint256 _projectId,
JBDeployTiered721DelegateData memory _deployTiered721DelegateData,
JBReconfigureFundingCyclesData memory _reconfigureFundingCyclesData,
IJBController3_1 _controller
)
external
override
requirePermission(directory.projects().ownerOf(_projectId), _projectId, JBOperations.RECONFIGURE)
returns (uint256 configuration)
{
IJBTiered721Delegate _delegate =
delegateDeployer.deployDelegateFor(_projectId, _deployTiered721DelegateData);
JBOwnable(address(_delegate)).transferOwnershipToProject(_projectId);
return _reconfigureFundingCyclesOf(_projectId, _reconfigureFundingCyclesData, _delegate, _controller);
}
function _launchProjectFor(
address _owner,
JBLaunchProjectData memory _launchProjectData,
IJBTiered721Delegate _dataSource,
IJBController3_1 _controller
) internal {
_controller.launchProjectFor(
_owner,
_launchProjectData.projectMetadata,
_launchProjectData.data,
JBFundingCycleMetadata({
global: _launchProjectData.metadata.global,
reservedRate: _launchProjectData.metadata.reservedRate,
redemptionRate: _launchProjectData.metadata.redemptionRate,
ballotRedemptionRate: _launchProjectData.metadata.ballotRedemptionRate,
pausePay: _launchProjectData.metadata.pausePay,
pauseDistributions: _launchProjectData.metadata.pauseDistributions,
pauseRedeem: _launchProjectData.metadata.pauseRedeem,
pauseBurn: _launchProjectData.metadata.pauseBurn,
allowMinting: _launchProjectData.metadata.allowMinting,
allowTerminalMigration: _launchProjectData.metadata.allowTerminalMigration,
allowControllerMigration: _launchProjectData.metadata.allowControllerMigration,
holdFees: _launchProjectData.metadata.holdFees,
preferClaimedTokenOverride: _launchProjectData.metadata.preferClaimedTokenOverride,
useTotalOverflowForRedemptions: _launchProjectData.metadata.useTotalOverflowForRedemptions,
useDataSourceForPay: true,
useDataSourceForRedeem: _launchProjectData.metadata.useDataSourceForRedeem,
dataSource: address(_dataSource),
metadata: _launchProjectData.metadata.metadata
}),
_launchProjectData.mustStartAtOrAfter,
_launchProjectData.groupedSplits,
_launchProjectData.fundAccessConstraints,
_launchProjectData.terminals,
_launchProjectData.memo
);
}
function _launchFundingCyclesFor(
uint256 _projectId,
JBLaunchFundingCyclesData memory _launchFundingCyclesData,
IJBTiered721Delegate _dataSource,
IJBController3_1 _controller
) internal returns (uint256) {
return _controller.launchFundingCyclesFor(
_projectId,
_launchFundingCyclesData.data,
JBFundingCycleMetadata({
global: _launchFundingCyclesData.metadata.global,
reservedRate: _launchFundingCyclesData.metadata.reservedRate,
redemptionRate: _launchFundingCyclesData.metadata.redemptionRate,
ballotRedemptionRate: _launchFundingCyclesData.metadata.ballotRedemptionRate,
pausePay: _launchFundingCyclesData.metadata.pausePay,
pauseDistributions: _launchFundingCyclesData.metadata.pauseDistributions,
pauseRedeem: _launchFundingCyclesData.metadata.pauseRedeem,
pauseBurn: _launchFundingCyclesData.metadata.pauseBurn,
allowMinting: _launchFundingCyclesData.metadata.allowMinting,
allowTerminalMigration: _launchFundingCyclesData.metadata.allowTerminalMigration,
allowControllerMigration: _launchFundingCyclesData.metadata.allowControllerMigration,
holdFees: _launchFundingCyclesData.metadata.holdFees,
preferClaimedTokenOverride: _launchFundingCyclesData.metadata.preferClaimedTokenOverride,
useTotalOverflowForRedemptions: _launchFundingCyclesData.metadata.useTotalOverflowForRedemptions,
useDataSourceForPay: true,
useDataSourceForRedeem: _launchFundingCyclesData.metadata.useDataSourceForRedeem,
dataSource: address(_dataSource),
metadata: _launchFundingCyclesData.metadata.metadata
}),
_launchFundingCyclesData.mustStartAtOrAfter,
_launchFundingCyclesData.groupedSplits,
_launchFundingCyclesData.fundAccessConstraints,
_launchFundingCyclesData.terminals,
_launchFundingCyclesData.memo
);
}
function _reconfigureFundingCyclesOf(
uint256 _projectId,
JBReconfigureFundingCyclesData memory _reconfigureFundingCyclesData,
IJBTiered721Delegate _dataSource,
IJBController3_1 _controller
) internal returns (uint256) {
return _controller.reconfigureFundingCyclesOf(
_projectId,
_reconfigureFundingCyclesData.data,
JBFundingCycleMetadata({
global: _reconfigureFundingCyclesData.metadata.global,
reservedRate: _reconfigureFundingCyclesData.metadata.reservedRate,
redemptionRate: _reconfigureFundingCyclesData.metadata.redemptionRate,
ballotRedemptionRate: _reconfigureFundingCyclesData.metadata.ballotRedemptionRate,
pausePay: _reconfigureFundingCyclesData.metadata.pausePay,
pauseDistributions: _reconfigureFundingCyclesData.metadata.pauseDistributions,
pauseRedeem: _reconfigureFundingCyclesData.metadata.pauseRedeem,
pauseBurn: _reconfigureFundingCyclesData.metadata.pauseBurn,
allowMinting: _reconfigureFundingCyclesData.metadata.allowMinting,
allowTerminalMigration: _reconfigureFundingCyclesData.metadata.allowTerminalMigration,
allowControllerMigration: _reconfigureFundingCyclesData.metadata.allowControllerMigration,
holdFees: _reconfigureFundingCyclesData.metadata.holdFees,
preferClaimedTokenOverride: _reconfigureFundingCyclesData.metadata.preferClaimedTokenOverride,
useTotalOverflowForRedemptions: _reconfigureFundingCyclesData.metadata.useTotalOverflowForRedemptions,
useDataSourceForPay: true,
useDataSourceForRedeem: _reconfigureFundingCyclesData.metadata.useDataSourceForRedeem,
dataSource: address(_dataSource),
metadata: _reconfigureFundingCyclesData.metadata.metadata
}),
_reconfigureFundingCyclesData.mustStartAtOrAfter,
_reconfigureFundingCyclesData.groupedSplits,
_reconfigureFundingCyclesData.fundAccessConstraints,
_reconfigureFundingCyclesData.memo
);
}
}
文件 55 的 57:JBTiered721Flags.sol
pragma solidity ^0.8.0;
struct JBTiered721Flags {
bool lockReservedTokenChanges;
bool lockVotingUnitChanges;
bool lockManualMintingChanges;
bool preventOverspending;
}
文件 56 的 57:JBTiered721MintForTiersData.sol
pragma solidity ^0.8.0;
struct JBTiered721MintForTiersData {
uint16[] tierIds;
address beneficiary;
}
文件 57 的 57:JBTiered721MintReservesForTiersData.sol
pragma solidity ^0.8.0;
struct JBTiered721MintReservesForTiersData {
uint256 tierId;
uint256 count;
}
{
"compilationTarget": {
"contracts/JBTiered721DelegateProjectDeployer.sol": "JBTiered721DelegateProjectDeployer"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [
":@chainlink/=node_modules/@chainlink/",
":@ensdomains/=node_modules/@ensdomains/",
":@jbx-protocol/=node_modules/@jbx-protocol/",
":@openzeppelin/=node_modules/@openzeppelin/",
":@paulrberg/=node_modules/@paulrberg/",
":@prb/=node_modules/@prb/",
":ds-test/=lib/forge-std/lib/ds-test/src/",
":forge-std/=lib/forge-std/src/",
":prb-math/=node_modules/prb-math/"
]
}
[{"inputs":[{"internalType":"contract IJBDirectory","name":"_directory","type":"address"},{"internalType":"contract IJBTiered721DelegateDeployer","name":"_delegateDeployer","type":"address"},{"internalType":"contract IJBOperatorStore","name":"_operatorStore","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UNAUTHORIZED","type":"error"},{"inputs":[],"name":"delegateDeployer","outputs":[{"internalType":"contract IJBTiered721DelegateDeployer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"directory","outputs":[{"internalType":"contract IJBDirectory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"contract IJBFundingCycleStore","name":"fundingCycleStore","type":"address"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"contract IJB721TokenUriResolver","name":"tokenUriResolver","type":"address"},{"internalType":"string","name":"contractUri","type":"string"},{"components":[{"components":[{"internalType":"uint104","name":"price","type":"uint104"},{"internalType":"uint32","name":"initialQuantity","type":"uint32"},{"internalType":"uint32","name":"votingUnits","type":"uint32"},{"internalType":"uint16","name":"reservedRate","type":"uint16"},{"internalType":"address","name":"reservedTokenBeneficiary","type":"address"},{"internalType":"bytes32","name":"encodedIPFSUri","type":"bytes32"},{"internalType":"uint24","name":"category","type":"uint24"},{"internalType":"bool","name":"allowManualMint","type":"bool"},{"internalType":"bool","name":"shouldUseReservedTokenBeneficiaryAsDefault","type":"bool"},{"internalType":"bool","name":"transfersPausable","type":"bool"},{"internalType":"bool","name":"useVotingUnits","type":"bool"}],"internalType":"struct JB721TierParams[]","name":"tiers","type":"tuple[]"},{"internalType":"uint48","name":"currency","type":"uint48"},{"internalType":"uint48","name":"decimals","type":"uint48"},{"internalType":"contract IJBPrices","name":"prices","type":"address"}],"internalType":"struct JB721PricingParams","name":"pricing","type":"tuple"},{"internalType":"address","name":"reservedTokenBeneficiary","type":"address"},{"internalType":"contract IJBTiered721DelegateStore","name":"store","type":"address"},{"components":[{"internalType":"bool","name":"lockReservedTokenChanges","type":"bool"},{"internalType":"bool","name":"lockVotingUnitChanges","type":"bool"},{"internalType":"bool","name":"lockManualMintingChanges","type":"bool"},{"internalType":"bool","name":"preventOverspending","type":"bool"}],"internalType":"struct JBTiered721Flags","name":"flags","type":"tuple"},{"internalType":"enum JB721GovernanceType","name":"governanceType","type":"uint8"}],"internalType":"struct JBDeployTiered721DelegateData","name":"_deployTiered721DelegateData","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"discountRate","type":"uint256"},{"internalType":"contract IJBFundingCycleBallot","name":"ballot","type":"address"}],"internalType":"struct JBFundingCycleData","name":"data","type":"tuple"},{"components":[{"components":[{"internalType":"bool","name":"allowSetTerminals","type":"bool"},{"internalType":"bool","name":"allowSetController","type":"bool"},{"internalType":"bool","name":"pauseTransfers","type":"bool"}],"internalType":"struct JBGlobalFundingCycleMetadata","name":"global","type":"tuple"},{"internalType":"uint256","name":"reservedRate","type":"uint256"},{"internalType":"uint256","name":"redemptionRate","type":"uint256"},{"internalType":"uint256","name":"ballotRedemptionRate","type":"uint256"},{"internalType":"bool","name":"pausePay","type":"bool"},{"internalType":"bool","name":"pauseDistributions","type":"bool"},{"internalType":"bool","name":"pauseRedeem","type":"bool"},{"internalType":"bool","name":"pauseBurn","type":"bool"},{"internalType":"bool","name":"allowMinting","type":"bool"},{"internalType":"bool","name":"allowTerminalMigration","type":"bool"},{"internalType":"bool","name":"allowControllerMigration","type":"bool"},{"internalType":"bool","name":"holdFees","type":"bool"},{"internalType":"bool","name":"preferClaimedTokenOverride","type":"bool"},{"internalType":"bool","name":"useTotalOverflowForRedemptions","type":"bool"},{"internalType":"bool","name":"useDataSourceForRedeem","type":"bool"},{"internalType":"uint256","name":"metadata","type":"uint256"}],"internalType":"struct JBPayDataSourceFundingCycleMetadata","name":"metadata","type":"tuple"},{"internalType":"uint256","name":"mustStartAtOrAfter","type":"uint256"},{"components":[{"internalType":"uint256","name":"group","type":"uint256"},{"components":[{"internalType":"bool","name":"preferClaimed","type":"bool"},{"internalType":"bool","name":"preferAddToBalance","type":"bool"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"projectId","type":"uint256"},{"internalType":"address payable","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"contract IJBSplitAllocator","name":"allocator","type":"address"}],"internalType":"struct JBSplit[]","name":"splits","type":"tuple[]"}],"internalType":"struct JBGroupedSplits[]","name":"groupedSplits","type":"tuple[]"},{"components":[{"internalType":"contract IJBPaymentTerminal","name":"terminal","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"distributionLimit","type":"uint256"},{"internalType":"uint256","name":"distributionLimitCurrency","type":"uint256"},{"internalType":"uint256","name":"overflowAllowance","type":"uint256"},{"internalType":"uint256","name":"overflowAllowanceCurrency","type":"uint256"}],"internalType":"struct JBFundAccessConstraints[]","name":"fundAccessConstraints","type":"tuple[]"},{"internalType":"contract IJBPaymentTerminal[]","name":"terminals","type":"address[]"},{"internalType":"string","name":"memo","type":"string"}],"internalType":"struct JBLaunchFundingCyclesData","name":"_launchFundingCyclesData","type":"tuple"},{"internalType":"contract IJBController3_1","name":"_controller","type":"address"}],"name":"launchFundingCyclesFor","outputs":[{"internalType":"uint256","name":"configuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"contract IJBFundingCycleStore","name":"fundingCycleStore","type":"address"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"contract IJB721TokenUriResolver","name":"tokenUriResolver","type":"address"},{"internalType":"string","name":"contractUri","type":"string"},{"components":[{"components":[{"internalType":"uint104","name":"price","type":"uint104"},{"internalType":"uint32","name":"initialQuantity","type":"uint32"},{"internalType":"uint32","name":"votingUnits","type":"uint32"},{"internalType":"uint16","name":"reservedRate","type":"uint16"},{"internalType":"address","name":"reservedTokenBeneficiary","type":"address"},{"internalType":"bytes32","name":"encodedIPFSUri","type":"bytes32"},{"internalType":"uint24","name":"category","type":"uint24"},{"internalType":"bool","name":"allowManualMint","type":"bool"},{"internalType":"bool","name":"shouldUseReservedTokenBeneficiaryAsDefault","type":"bool"},{"internalType":"bool","name":"transfersPausable","type":"bool"},{"internalType":"bool","name":"useVotingUnits","type":"bool"}],"internalType":"struct JB721TierParams[]","name":"tiers","type":"tuple[]"},{"internalType":"uint48","name":"currency","type":"uint48"},{"internalType":"uint48","name":"decimals","type":"uint48"},{"internalType":"contract IJBPrices","name":"prices","type":"address"}],"internalType":"struct JB721PricingParams","name":"pricing","type":"tuple"},{"internalType":"address","name":"reservedTokenBeneficiary","type":"address"},{"internalType":"contract IJBTiered721DelegateStore","name":"store","type":"address"},{"components":[{"internalType":"bool","name":"lockReservedTokenChanges","type":"bool"},{"internalType":"bool","name":"lockVotingUnitChanges","type":"bool"},{"internalType":"bool","name":"lockManualMintingChanges","type":"bool"},{"internalType":"bool","name":"preventOverspending","type":"bool"}],"internalType":"struct JBTiered721Flags","name":"flags","type":"tuple"},{"internalType":"enum JB721GovernanceType","name":"governanceType","type":"uint8"}],"internalType":"struct JBDeployTiered721DelegateData","name":"_deployTiered721DelegateData","type":"tuple"},{"components":[{"components":[{"internalType":"string","name":"content","type":"string"},{"internalType":"uint256","name":"domain","type":"uint256"}],"internalType":"struct JBProjectMetadata","name":"projectMetadata","type":"tuple"},{"components":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"discountRate","type":"uint256"},{"internalType":"contract IJBFundingCycleBallot","name":"ballot","type":"address"}],"internalType":"struct JBFundingCycleData","name":"data","type":"tuple"},{"components":[{"components":[{"internalType":"bool","name":"allowSetTerminals","type":"bool"},{"internalType":"bool","name":"allowSetController","type":"bool"},{"internalType":"bool","name":"pauseTransfers","type":"bool"}],"internalType":"struct JBGlobalFundingCycleMetadata","name":"global","type":"tuple"},{"internalType":"uint256","name":"reservedRate","type":"uint256"},{"internalType":"uint256","name":"redemptionRate","type":"uint256"},{"internalType":"uint256","name":"ballotRedemptionRate","type":"uint256"},{"internalType":"bool","name":"pausePay","type":"bool"},{"internalType":"bool","name":"pauseDistributions","type":"bool"},{"internalType":"bool","name":"pauseRedeem","type":"bool"},{"internalType":"bool","name":"pauseBurn","type":"bool"},{"internalType":"bool","name":"allowMinting","type":"bool"},{"internalType":"bool","name":"allowTerminalMigration","type":"bool"},{"internalType":"bool","name":"allowControllerMigration","type":"bool"},{"internalType":"bool","name":"holdFees","type":"bool"},{"internalType":"bool","name":"preferClaimedTokenOverride","type":"bool"},{"internalType":"bool","name":"useTotalOverflowForRedemptions","type":"bool"},{"internalType":"bool","name":"useDataSourceForRedeem","type":"bool"},{"internalType":"uint256","name":"metadata","type":"uint256"}],"internalType":"struct JBPayDataSourceFundingCycleMetadata","name":"metadata","type":"tuple"},{"internalType":"uint256","name":"mustStartAtOrAfter","type":"uint256"},{"components":[{"internalType":"uint256","name":"group","type":"uint256"},{"components":[{"internalType":"bool","name":"preferClaimed","type":"bool"},{"internalType":"bool","name":"preferAddToBalance","type":"bool"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"projectId","type":"uint256"},{"internalType":"address payable","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"contract IJBSplitAllocator","name":"allocator","type":"address"}],"internalType":"struct JBSplit[]","name":"splits","type":"tuple[]"}],"internalType":"struct JBGroupedSplits[]","name":"groupedSplits","type":"tuple[]"},{"components":[{"internalType":"contract IJBPaymentTerminal","name":"terminal","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"distributionLimit","type":"uint256"},{"internalType":"uint256","name":"distributionLimitCurrency","type":"uint256"},{"internalType":"uint256","name":"overflowAllowance","type":"uint256"},{"internalType":"uint256","name":"overflowAllowanceCurrency","type":"uint256"}],"internalType":"struct JBFundAccessConstraints[]","name":"fundAccessConstraints","type":"tuple[]"},{"internalType":"contract IJBPaymentTerminal[]","name":"terminals","type":"address[]"},{"internalType":"string","name":"memo","type":"string"}],"internalType":"struct JBLaunchProjectData","name":"_launchProjectData","type":"tuple"},{"internalType":"contract IJBController3_1","name":"_controller","type":"address"}],"name":"launchProjectFor","outputs":[{"internalType":"uint256","name":"projectId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operatorStore","outputs":[{"internalType":"contract IJBOperatorStore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"contract IJBFundingCycleStore","name":"fundingCycleStore","type":"address"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"contract IJB721TokenUriResolver","name":"tokenUriResolver","type":"address"},{"internalType":"string","name":"contractUri","type":"string"},{"components":[{"components":[{"internalType":"uint104","name":"price","type":"uint104"},{"internalType":"uint32","name":"initialQuantity","type":"uint32"},{"internalType":"uint32","name":"votingUnits","type":"uint32"},{"internalType":"uint16","name":"reservedRate","type":"uint16"},{"internalType":"address","name":"reservedTokenBeneficiary","type":"address"},{"internalType":"bytes32","name":"encodedIPFSUri","type":"bytes32"},{"internalType":"uint24","name":"category","type":"uint24"},{"internalType":"bool","name":"allowManualMint","type":"bool"},{"internalType":"bool","name":"shouldUseReservedTokenBeneficiaryAsDefault","type":"bool"},{"internalType":"bool","name":"transfersPausable","type":"bool"},{"internalType":"bool","name":"useVotingUnits","type":"bool"}],"internalType":"struct JB721TierParams[]","name":"tiers","type":"tuple[]"},{"internalType":"uint48","name":"currency","type":"uint48"},{"internalType":"uint48","name":"decimals","type":"uint48"},{"internalType":"contract IJBPrices","name":"prices","type":"address"}],"internalType":"struct JB721PricingParams","name":"pricing","type":"tuple"},{"internalType":"address","name":"reservedTokenBeneficiary","type":"address"},{"internalType":"contract IJBTiered721DelegateStore","name":"store","type":"address"},{"components":[{"internalType":"bool","name":"lockReservedTokenChanges","type":"bool"},{"internalType":"bool","name":"lockVotingUnitChanges","type":"bool"},{"internalType":"bool","name":"lockManualMintingChanges","type":"bool"},{"internalType":"bool","name":"preventOverspending","type":"bool"}],"internalType":"struct JBTiered721Flags","name":"flags","type":"tuple"},{"internalType":"enum JB721GovernanceType","name":"governanceType","type":"uint8"}],"internalType":"struct JBDeployTiered721DelegateData","name":"_deployTiered721DelegateData","type":"tuple"},{"components":[{"components":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"discountRate","type":"uint256"},{"internalType":"contract IJBFundingCycleBallot","name":"ballot","type":"address"}],"internalType":"struct JBFundingCycleData","name":"data","type":"tuple"},{"components":[{"components":[{"internalType":"bool","name":"allowSetTerminals","type":"bool"},{"internalType":"bool","name":"allowSetController","type":"bool"},{"internalType":"bool","name":"pauseTransfers","type":"bool"}],"internalType":"struct JBGlobalFundingCycleMetadata","name":"global","type":"tuple"},{"internalType":"uint256","name":"reservedRate","type":"uint256"},{"internalType":"uint256","name":"redemptionRate","type":"uint256"},{"internalType":"uint256","name":"ballotRedemptionRate","type":"uint256"},{"internalType":"bool","name":"pausePay","type":"bool"},{"internalType":"bool","name":"pauseDistributions","type":"bool"},{"internalType":"bool","name":"pauseRedeem","type":"bool"},{"internalType":"bool","name":"pauseBurn","type":"bool"},{"internalType":"bool","name":"allowMinting","type":"bool"},{"internalType":"bool","name":"allowTerminalMigration","type":"bool"},{"internalType":"bool","name":"allowControllerMigration","type":"bool"},{"internalType":"bool","name":"holdFees","type":"bool"},{"internalType":"bool","name":"preferClaimedTokenOverride","type":"bool"},{"internalType":"bool","name":"useTotalOverflowForRedemptions","type":"bool"},{"internalType":"bool","name":"useDataSourceForRedeem","type":"bool"},{"internalType":"uint256","name":"metadata","type":"uint256"}],"internalType":"struct JBPayDataSourceFundingCycleMetadata","name":"metadata","type":"tuple"},{"internalType":"uint256","name":"mustStartAtOrAfter","type":"uint256"},{"components":[{"internalType":"uint256","name":"group","type":"uint256"},{"components":[{"internalType":"bool","name":"preferClaimed","type":"bool"},{"internalType":"bool","name":"preferAddToBalance","type":"bool"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"projectId","type":"uint256"},{"internalType":"address payable","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"contract IJBSplitAllocator","name":"allocator","type":"address"}],"internalType":"struct JBSplit[]","name":"splits","type":"tuple[]"}],"internalType":"struct JBGroupedSplits[]","name":"groupedSplits","type":"tuple[]"},{"components":[{"internalType":"contract IJBPaymentTerminal","name":"terminal","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"distributionLimit","type":"uint256"},{"internalType":"uint256","name":"distributionLimitCurrency","type":"uint256"},{"internalType":"uint256","name":"overflowAllowance","type":"uint256"},{"internalType":"uint256","name":"overflowAllowanceCurrency","type":"uint256"}],"internalType":"struct JBFundAccessConstraints[]","name":"fundAccessConstraints","type":"tuple[]"},{"internalType":"string","name":"memo","type":"string"}],"internalType":"struct JBReconfigureFundingCyclesData","name":"_reconfigureFundingCyclesData","type":"tuple"},{"internalType":"contract IJBController3_1","name":"_controller","type":"address"}],"name":"reconfigureFundingCyclesOf","outputs":[{"internalType":"uint256","name":"configuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]