Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 171 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Create Crowdfund | 15382242 | 1281 days ago | IN | 0 ETH | 0.00254651 | ||||
| Create Crowdfund | 15382166 | 1281 days ago | IN | 0 ETH | 0.00240243 | ||||
| Create Crowdfund | 15352058 | 1285 days ago | IN | 0 ETH | 0.01064325 | ||||
| Create Crowdfund | 15313167 | 1291 days ago | IN | 0 ETH | 0.01546254 | ||||
| Create Crowdfund | 15299338 | 1294 days ago | IN | 0 ETH | 0.00711625 | ||||
| Create Crowdfund | 15291940 | 1295 days ago | IN | 0 ETH | 0.00415296 | ||||
| Create Crowdfund | 15280633 | 1297 days ago | IN | 0 ETH | 0.01072119 | ||||
| Create Crowdfund | 15254758 | 1301 days ago | IN | 0 ETH | 0.00347787 | ||||
| Create Crowdfund | 15234805 | 1304 days ago | IN | 0 ETH | 0.00847876 | ||||
| Create Crowdfund | 15214925 | 1307 days ago | IN | 0 ETH | 0.03540823 | ||||
| Create Crowdfund | 15203371 | 1309 days ago | IN | 0 ETH | 0.00380414 | ||||
| Create Crowdfund | 15194132 | 1310 days ago | IN | 0 ETH | 0.01917912 | ||||
| Create Crowdfund | 15183946 | 1312 days ago | IN | 0 ETH | 0.01188056 | ||||
| Create Crowdfund | 15183916 | 1312 days ago | IN | 0 ETH | 0.01017612 | ||||
| Create Crowdfund | 15145685 | 1317 days ago | IN | 0 ETH | 0.00969044 | ||||
| Create Crowdfund | 15132698 | 1319 days ago | IN | 0 ETH | 0.0066254 | ||||
| Create Crowdfund | 15127117 | 1320 days ago | IN | 0 ETH | 0.01669658 | ||||
| Create Crowdfund | 15111075 | 1323 days ago | IN | 0 ETH | 0.03446906 | ||||
| Create Crowdfund | 15061282 | 1331 days ago | IN | 0 ETH | 0.00626509 | ||||
| Create Crowdfund | 15043437 | 1334 days ago | IN | 0 ETH | 0.02440742 | ||||
| Create Crowdfund | 15042818 | 1334 days ago | IN | 0 ETH | 0.03315335 | ||||
| Create Crowdfund | 15031421 | 1336 days ago | IN | 0 ETH | 0.02101348 | ||||
| Create Crowdfund | 14941836 | 1352 days ago | IN | 0 ETH | 0.0187241 | ||||
| Create Crowdfund | 14939423 | 1352 days ago | IN | 0 ETH | 0.06292165 | ||||
| Create Crowdfund | 14931290 | 1353 days ago | IN | 0 ETH | 0.02948058 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 15382242 | 1281 days ago | Contract Creation | 0 ETH | |||
| Transfer* | 15382166 | 1281 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15352058 | 1285 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15313167 | 1291 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15299338 | 1294 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15291940 | 1295 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15280633 | 1297 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15254758 | 1301 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15234805 | 1304 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15214925 | 1307 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15203371 | 1309 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15194132 | 1310 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15183946 | 1312 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15183916 | 1312 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15145685 | 1317 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15132698 | 1319 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15127117 | 1320 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15111075 | 1323 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15061282 | 1331 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15043437 | 1334 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15042818 | 1334 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15031421 | 1336 days ago | Contract Creation | 0 ETH | |||
| - | 14941836 | 1352 days ago | Contract Creation | 0 ETH | |||
| - | 14939423 | 1352 days ago | Contract Creation | 0 ETH | |||
| - | 14931290 | 1353 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CrowdfundWithPodiumEditionsFactory
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
import {CrowdfundWithPodiumEditionsProxy} from "./CrowdfundWithPodiumEditionsProxy.sol";
import {CrowdfundWithPodiumEditionsLogic} from "./CrowdfundWithPodiumEditionsLogic.sol";
import {ICrowdfundWithPodiumEditions} from "./interface/ICrowdfundWithPodiumEditions.sol";
import {ITributaryRegistry} from "../../../interface/ITributaryRegistry.sol";
import {Governable} from "../../../lib/Governable.sol";
/**
* @title CrowdfundWithPodiumEditionsFactory
* @author MirrorXYZ
*/
contract CrowdfundWithPodiumEditionsFactory is Governable {
//======== Structs ========
struct Parameters {
address payable fundingRecipient;
uint256 fundingCap;
uint256 operatorPercent;
string name;
string symbol;
uint256 feePercentage;
uint256 podiumDuration;
}
//======== Events ========
event CrowdfundDeployed(
address crowdfundProxy,
string name,
string symbol,
address operator
);
//======== Configuration storage =========
/*
Updatable via governance
*/
address public logic;
address payable public editions;
address public tributaryRegistry;
address public treasuryConfig;
uint256 public minFeePercentage = 250;
//======== Runtime mutable storage =========
// Gets set within the block, and then deleted.
Parameters public parameters;
//======== Constructor =========
constructor(
address owner_,
address logic_,
address payable editions_,
address tributaryRegistry_,
address treasuryConfig_
) Governable(owner_) {
logic = logic_;
editions = editions_;
tributaryRegistry = tributaryRegistry_;
treasuryConfig = treasuryConfig_;
}
//======== Configuration =========
function setMinimumFeePercentage(uint256 newMinFeePercentage)
public
onlyGovernance
{
minFeePercentage = newMinFeePercentage;
}
function setEditions(address payable newEditions) public onlyGovernance {
editions = newEditions;
}
function setLogic(address newLogic) public onlyGovernance {
logic = newLogic;
}
function setTreasuryConfig(address newTreasuryConfig)
public
onlyGovernance
{
treasuryConfig = newTreasuryConfig;
}
function setTributaryRegistry(address newTributaryRegistry)
public
onlyGovernance
{
tributaryRegistry = newTributaryRegistry;
}
//======== Deploy function =========
struct TributaryConfig {
address tributary;
uint256 feePercentage;
}
function createCrowdfund(
ICrowdfundWithPodiumEditions.EditionTier[] calldata tiers,
TributaryConfig calldata tributaryConfig,
string calldata name_,
string calldata symbol_,
address payable operator_,
address payable fundingRecipient_,
uint256 fundingCap_,
uint256 operatorPercent_,
uint256 podiumDuration_
) external returns (address crowdfundProxy) {
require(
tributaryConfig.feePercentage >= minFeePercentage,
"fee is too low"
);
parameters = Parameters({
name: name_,
symbol: symbol_,
fundingRecipient: fundingRecipient_,
fundingCap: fundingCap_,
operatorPercent: operatorPercent_,
feePercentage: tributaryConfig.feePercentage,
podiumDuration: podiumDuration_
});
crowdfundProxy = address(
new CrowdfundWithPodiumEditionsProxy{
salt: keccak256(abi.encode(symbol_, operator_))
}(treasuryConfig, operator_)
);
delete parameters;
emit CrowdfundDeployed(crowdfundProxy, name_, symbol_, operator_);
ITributaryRegistry(tributaryRegistry).registerTributary(
crowdfundProxy,
tributaryConfig.tributary
);
ICrowdfundWithPodiumEditions(editions).createEditions(
tiers,
payable(crowdfundProxy),
crowdfundProxy
);
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
import {CrowdfundWithPodiumEditionsStorage} from "./CrowdfundWithPodiumEditionsStorage.sol";
interface ICrowdfundWithPodiumEditionsFactory {
function mediaAddress() external returns (address);
function logic() external returns (address);
function editions() external returns (address);
// ERC20 data.
function parameters()
external
returns (
address payable fundingRecipient,
uint256 fundingCap,
uint256 operatorPercent,
string memory name,
string memory symbol,
uint256 feePercentage,
uint256 podiumDuration
);
}
/**
* @title CrowdfundWithPodiumEditionsProxy
* @author MirrorXYZ
*/
contract CrowdfundWithPodiumEditionsProxy is
CrowdfundWithPodiumEditionsStorage
{
constructor(address treasuryConfig_, address payable operator_) {
logic = ICrowdfundWithPodiumEditionsFactory(msg.sender).logic();
editions = ICrowdfundWithPodiumEditionsFactory(msg.sender).editions();
// Crowdfund-specific data.
(
fundingRecipient,
fundingCap,
operatorPercent,
name,
symbol,
feePercentage,
podiumDuration
) = ICrowdfundWithPodiumEditionsFactory(msg.sender).parameters();
operator = operator_;
treasuryConfig = treasuryConfig_;
// Initialize mutable storage.
status = Status.FUNDING;
}
fallback() external payable {
address _impl = logic;
assembly {
let ptr := mload(0x40)
calldatacopy(ptr, 0, calldatasize())
let result := delegatecall(gas(), _impl, ptr, calldatasize(), 0, 0)
let size := returndatasize()
returndatacopy(ptr, 0, size)
switch result
case 0 {
revert(ptr, size)
}
default {
return(ptr, size)
}
}
}
receive() external payable {}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
import {CrowdfundWithPodiumEditionsStorage} from "./CrowdfundWithPodiumEditionsStorage.sol";
import {ICrowdfundWithPodiumEditions} from "./interface/ICrowdfundWithPodiumEditions.sol";
import {ITreasuryConfig} from "../../../interface/ITreasuryConfig.sol";
/**
* @title CrowdfundWithPodiumEditionsLogic
* @author MirrorXYZ
*
* Crowdfund the creation of NFTs by issuing ERC20 tokens that
* can be redeemed for the underlying value of the NFT once sold.
*/
contract CrowdfundWithPodiumEditionsLogic is
CrowdfundWithPodiumEditionsStorage
{
// ============ Events ============
event ReceivedERC721(uint256 tokenId, address sender);
event Contribution(address contributor, uint256 amount);
event ContributionForEdition(
address contributor,
uint256 amount,
uint256 editionId,
uint256 tokenId
);
event FundingClosed(uint256 amountRaised, uint256 creatorAllocation);
event BidAccepted(uint256 amount);
event Redeemed(address contributor, uint256 amount);
// ERC20 Events
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
// Podium Events
event PodiumDurationExtended(uint256 editionId);
// ============ Modifiers ============
/**
* @dev Modifier to check whether the `msg.sender` is the operator.
* If it is, it will run the function. Otherwise, it will revert.
*/
modifier onlyOperator() {
require(msg.sender == operator);
_;
}
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(reentrancy_status != REENTRANCY_ENTERED, "Reentrant call");
// Any calls to nonReentrant after this point will fail
reentrancy_status = REENTRANCY_ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
reentrancy_status = REENTRANCY_NOT_ENTERED;
}
// ============ Crowdfunding Methods ============
function contributeForPodium(
address payable backer,
uint256 editionId,
uint256 amount
) external payable nonReentrant {
_contribute(backer, editionId, amount, true);
}
/**
* @notice Mints tokens for the sender propotional to the
* amount of ETH sent in the transaction.
* @dev Emits the Contribution event.
*/
function contribute(
address payable backer,
uint256 editionId,
uint256 amount
) external payable nonReentrant {
_contribute(backer, editionId, amount, false);
}
/**
* @notice Burns the sender's tokens and redeems underlying ETH.
* @dev Emits the Redeemed event.
*/
function redeem(uint256 tokenAmount) external nonReentrant {
// Prevent backers from accidently redeeming when balance is 0.
require(
address(this).balance > 0,
"Crowdfund: No ETH available to redeem"
);
// Check
require(
balanceOf[msg.sender] >= tokenAmount,
"Crowdfund: Insufficient balance"
);
require(status == Status.TRADING, "Crowdfund: Funding must be trading");
// Effect
uint256 redeemable = redeemableFromTokens(tokenAmount);
_burn(msg.sender, tokenAmount);
// Safe version of transfer.
sendValue(payable(msg.sender), redeemable);
emit Redeemed(msg.sender, redeemable);
}
/**
* @notice Returns the amount of ETH that is redeemable for tokenAmount.
*/
function redeemableFromTokens(uint256 tokenAmount)
public
view
returns (uint256)
{
return (tokenAmount * address(this).balance) / totalSupply;
}
function valueToTokens(uint256 value) public pure returns (uint256 tokens) {
tokens = value * TOKEN_SCALE;
}
function tokensToValue(uint256 tokenAmount)
internal
pure
returns (uint256 value)
{
value = tokenAmount / TOKEN_SCALE;
}
// ============ Operator Methods ============
/**
* @notice Transfers all funds to operator, and mints tokens for the operator.
* Updates status to TRADING.
* @dev Emits the FundingClosed event.
*/
function closeFunding() external onlyOperator nonReentrant {
require(status == Status.FUNDING, "Crowdfund: Funding must be open");
// Close funding status, move to tradable.
status = Status.TRADING;
// Mint the operator a percent of the total supply.
uint256 operatorTokens = (operatorPercent * totalSupply) /
(100 - operatorPercent);
_mint(operator, operatorTokens);
// Announce that funding has been closed.
emit FundingClosed(address(this).balance, operatorTokens);
// Transfer the fee to the treasury.
sendValue(
ITreasuryConfig(treasuryConfig).treasury(),
computeFee(address(this).balance)
);
// Transfer available balance to the fundingRecipient.
sendValue(fundingRecipient, address(this).balance);
}
function computeFee(uint256 amount) public view returns (uint256 fee) {
fee = (feePercentage * amount) / (100 * 100);
}
// ============ Utility Methods ============
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
// ============ ERC20 Spec ============
function _mint(address to, uint256 value) internal {
totalSupply = totalSupply + value;
balanceOf[to] = balanceOf[to] + value;
emit Transfer(address(0), to, value);
}
function _burn(address from, uint256 value) internal {
balanceOf[from] = balanceOf[from] - value;
totalSupply = totalSupply - value;
emit Transfer(from, address(0), value);
}
function _approve(
address owner,
address spender,
uint256 value
) private {
allowance[owner][spender] = value;
emit Approval(owner, spender, value);
}
function _transfer(
address from,
address to,
uint256 value
) private {
balanceOf[from] = balanceOf[from] - value;
balanceOf[to] = balanceOf[to] + value;
emit Transfer(from, to, value);
}
function approve(address spender, uint256 value) external returns (bool) {
_approve(msg.sender, spender, value);
return true;
}
function transfer(address to, uint256 value) external returns (bool) {
_transfer(msg.sender, to, value);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool) {
allowance[from][msg.sender] = allowance[from][msg.sender] - value;
_transfer(from, to, value);
return true;
}
// ============ Tiered Campaigns ============
function buyEdition(
uint256 amount,
uint256 editionId,
address recipient
) internal returns (uint256) {
// Check that the sender is paying the correct amount.
require(
amount >=
ICrowdfundWithPodiumEditions(editions).editionPrice(editionId),
"Unable purchase edition with available amount"
);
// We don't need to transfer the value to the NFT contract here,
// since that contract trusts this one to check before minting.
// I.E. this contract has minting privileges.
return
ICrowdfundWithPodiumEditions(editions).buyEdition(
editionId,
recipient
);
}
function buyEditionForPodium(
uint256 amount,
uint256 editionId,
address recipient
) internal returns (uint256) {
// Check that the sender is paying the correct amount.
require(
amount >=
ICrowdfundWithPodiumEditions(editions).editionPrice(editionId),
"Unable purchase edition with available amount"
);
if (podiumStartTime == 0) {
podiumStartTime = block.timestamp;
}
uint256 podiumEnds = podiumStartTime + podiumDuration;
require(podiumEnds >= block.timestamp, "podium closed");
if (podiumEnds < block.timestamp + PODIUM_TIME_BUFFER) {
// Extend duration.
podiumDuration += block.timestamp + PODIUM_TIME_BUFFER - podiumEnds;
emit PodiumDurationExtended(editionId);
}
// We don't need to transfer the value to the NFT contract here,
// since that contract trusts this one to check before minting.
// I.E. this contract has minting privileges.
return
ICrowdfundWithPodiumEditions(editions).buyEdition(
editionId,
recipient
);
}
function _contribute(
address payable backer,
uint256 editionId,
uint256 amount,
bool forPodium
) private {
require(status == Status.FUNDING, "Crowdfund: Funding must be open");
require(amount == msg.value, "Crowdfund: Amount is not value sent");
// This first case is the happy path, so we will keep it efficient.
// The balance, which includes the current contribution, is less than or equal to cap.
if (address(this).balance <= fundingCap) {
// Mint equity for the contributor.
_mint(backer, valueToTokens(amount));
// Editions start at 1, so a "0" edition means the user wants to contribute without
// purchasing a token.
if (editionId > 0) {
emit ContributionForEdition(
backer,
amount,
editionId,
forPodium
? buyEditionForPodium(amount, editionId, backer)
: buyEdition(amount, editionId, backer)
);
} else {
emit Contribution(backer, amount);
}
} else {
// Compute the balance of the crowdfund before the contribution was made.
uint256 startAmount = address(this).balance - amount;
// If that amount was already greater than the funding cap, then we should revert immediately.
require(
startAmount < fundingCap,
"Crowdfund: Funding cap already reached"
);
// Otherwise, the contribution helped us reach the funding cap. We should
// take what we can until the funding cap is reached, and refund the rest.
uint256 eligibleAmount = fundingCap - startAmount;
// Otherwise, we process the contribution as if it were the minimal amount.
_mint(backer, valueToTokens(eligibleAmount));
if (editionId > 0) {
emit ContributionForEdition(
backer,
eligibleAmount,
editionId,
// Attempt to purchase edition with eligible amount.
forPodium
? buyEditionForPodium(eligibleAmount, editionId, backer)
: buyEdition(eligibleAmount, editionId, backer)
);
} else {
emit Contribution(backer, eligibleAmount);
}
// Refund the sender with their contribution (e.g. 2.5 minus the diff - e.g. 1.5 = 1 ETH)
sendValue(backer, amount - eligibleAmount);
}
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
interface ICrowdfundWithPodiumEditions {
struct Edition {
// The maximum number of tokens that can be sold.
uint256 quantity;
// The price at which each token will be sold, in ETH.
uint256 price;
// The account that will receive sales revenue.
address payable fundingRecipient;
// The number of tokens sold so far.
uint256 numSold;
bytes32 contentHash;
}
struct EditionTier {
// The maximum number of tokens that can be sold.
uint256 quantity;
// The price at which each token will be sold, in ETH.
uint256 price;
bytes32 contentHash;
}
function buyEdition(uint256 editionId, address recipient)
external
payable
returns (uint256 tokenId);
function editionPrice(uint256 editionId) external view returns (uint256);
function createEditions(
EditionTier[] memory tier,
// The account that should receive the revenue.
address payable fundingRecipient,
address minter
) external;
function contractURI() external view returns (string memory);
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
interface ITributaryRegistry {
function addRegistrar(address registrar) external;
function removeRegistrar(address registrar) external;
function addSingletonProducer(address producer) external;
function removeSingletonProducer(address producer) external;
function registerTributary(address producer, address tributary) external;
function producerToTributary(address producer)
external
returns (address tributary);
function singletonProducer(address producer) external returns (bool);
function changeTributary(address producer, address newTributary) external;
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
import {Ownable} from "../lib/Ownable.sol";
import {IGovernable} from "../lib/interface/IGovernable.sol";
contract Governable is Ownable, IGovernable {
// ============ Mutable Storage ============
// Mirror governance contract.
address public override governor;
// ============ Modifiers ============
modifier onlyGovernance() {
require(isOwner() || isGovernor(), "caller is not governance");
_;
}
modifier onlyGovernor() {
require(isGovernor(), "caller is not governor");
_;
}
// ============ Constructor ============
constructor(address owner_) Ownable(owner_) {}
// ============ Administration ============
function changeGovernor(address governor_) public override onlyGovernance {
governor = governor_;
}
// ============ Utility Functions ============
function isGovernor() public view override returns (bool) {
return msg.sender == governor;
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
/**
* @title CrowdfundWithPodiumEditionsStorage
* @author MirrorXYZ
*/
contract CrowdfundWithPodiumEditionsStorage {
// The two states that this contract can exist in. "FUNDING" allows
// contributors to add funds.
enum Status {
FUNDING,
TRADING
}
// ============ Constants ============
// The factor by which ETH contributions will multiply into crowdfund tokens.
uint16 internal constant TOKEN_SCALE = 1000;
uint256 internal constant REENTRANCY_NOT_ENTERED = 1;
uint256 internal constant REENTRANCY_ENTERED = 2;
uint16 public constant PODIUM_TIME_BUFFER = 900;
uint8 public constant decimals = 18;
// ============ Immutable Storage ============
// The operator has a special role to change contract status.
address payable public operator;
address payable public fundingRecipient;
address public treasuryConfig;
// We add a hard cap to prevent raising more funds than deemed reasonable.
uint256 public fundingCap;
uint256 public feePercentage;
// The operator takes some equity in the tokens, represented by this percent.
uint256 public operatorPercent;
string public symbol;
string public name;
// ============ Mutable Storage ============
// Represents the current state of the campaign.
Status public status;
uint256 internal reentrancy_status;
// Podium storage
uint256 public podiumStartTime;
uint256 public podiumDuration;
// ============ Mutable ERC20 Attributes ============
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
mapping(address => uint256) public nonces;
// ============ Delegation logic ============
address public logic;
// ============ Tiered Campaigns ============
// Address of the editions contract to purchase from.
address public editions;
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
interface ITreasuryConfig {
function treasury() external returns (address payable);
function distributionModel() external returns (address);
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
contract Ownable {
address public owner;
address private nextOwner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
// modifiers
modifier onlyOwner() {
require(isOwner(), "caller is not the owner.");
_;
}
modifier onlyNextOwner() {
require(isNextOwner(), "current owner must set caller as next owner.");
_;
}
/**
* @dev Initialize contract by setting transaction submitter as initial owner.
*/
constructor(address owner_) {
owner = owner_;
emit OwnershipTransferred(address(0), owner);
}
/**
* @dev Initiate ownership transfer by setting nextOwner.
*/
function transferOwnership(address nextOwner_) external onlyOwner {
require(nextOwner_ != address(0), "Next owner is the zero address.");
nextOwner = nextOwner_;
}
/**
* @dev Cancel ownership transfer by deleting nextOwner.
*/
function cancelOwnershipTransfer() external onlyOwner {
delete nextOwner;
}
/**
* @dev Accepts ownership transfer by setting owner.
*/
function acceptOwnership() external onlyNextOwner {
delete nextOwner;
owner = msg.sender;
emit OwnershipTransferred(owner, msg.sender);
}
/**
* @dev Renounce ownership by setting owner to zero address.
*/
function renounceOwnership() external onlyOwner {
owner = address(0);
emit OwnershipTransferred(owner, address(0));
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return msg.sender == owner;
}
/**
* @dev Returns true if the caller is the next owner.
*/
function isNextOwner() public view returns (bool) {
return msg.sender == nextOwner;
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
interface IGovernable {
function changeGovernor(address governor_) external;
function isGovernor() external view returns (bool);
function governor() external view returns (address);
}{
"optimizer": {
"enabled": true,
"runs": 2000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"logic_","type":"address"},{"internalType":"address payable","name":"editions_","type":"address"},{"internalType":"address","name":"tributaryRegistry_","type":"address"},{"internalType":"address","name":"treasuryConfig_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"crowdfundProxy","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address","name":"operator","type":"address"}],"name":"CrowdfundDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bytes32","name":"contentHash","type":"bytes32"}],"internalType":"struct ICrowdfundWithPodiumEditions.EditionTier[]","name":"tiers","type":"tuple[]"},{"components":[{"internalType":"address","name":"tributary","type":"address"},{"internalType":"uint256","name":"feePercentage","type":"uint256"}],"internalType":"struct CrowdfundWithPodiumEditionsFactory.TributaryConfig","name":"tributaryConfig","type":"tuple"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address payable","name":"operator_","type":"address"},{"internalType":"address payable","name":"fundingRecipient_","type":"address"},{"internalType":"uint256","name":"fundingCap_","type":"uint256"},{"internalType":"uint256","name":"operatorPercent_","type":"uint256"},{"internalType":"uint256","name":"podiumDuration_","type":"uint256"}],"name":"createCrowdfund","outputs":[{"internalType":"address","name":"crowdfundProxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"editions","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNextOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parameters","outputs":[{"internalType":"address payable","name":"fundingRecipient","type":"address"},{"internalType":"uint256","name":"fundingCap","type":"uint256"},{"internalType":"uint256","name":"operatorPercent","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"feePercentage","type":"uint256"},{"internalType":"uint256","name":"podiumDuration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newEditions","type":"address"}],"name":"setEditions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLogic","type":"address"}],"name":"setLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinFeePercentage","type":"uint256"}],"name":"setMinimumFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryConfig","type":"address"}],"name":"setTreasuryConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTributaryRegistry","type":"address"}],"name":"setTributaryRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nextOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryConfig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tributaryRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405260fa6007553480156200001657600080fd5b50604051620021e1380380620021e18339810160408190526200003991620000da565b600080546001600160a01b0319166001600160a01b038716908117825560405187928392917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050600380546001600160a01b039586166001600160a01b03199182161790915560048054948616948216949094179093556005805492851692841692909217909155600680549190931691161790555062000173565b600080600080600060a08688031215620000f357600080fd5b855162000100816200015a565b602087015190955062000113816200015a565b604087015190945062000126816200015a565b606087015190935062000139816200015a565b60808701519092506200014c816200015a565b809150509295509295909350565b6001600160a01b03811681146200017057600080fd5b50565b61205e80620001836000396000f3fe60806040523480156200001157600080fd5b5060043610620001a15760003560e01c8063c7af335211620000e9578063e011bf8e1162000097578063f1fe1663116200006e578063f1fe1663146200034e578063f2fde38b1462000365578063ff39e710146200037c57600080fd5b8063e011bf8e146200030c578063e4c0aaf41462000323578063ed459df2146200033a57600080fd5b8063d321de7311620000cc578063d321de7314620002cd578063d6811b6f14620002e4578063d7dfa0dd14620002f857600080fd5b8063c7af335214620002a5578063cfd7b0df14620002b957600080fd5b806379ba509711620001535780638da5cb5b116200012a5780638da5cb5b146200025d5780638f32d59b1462000271578063b8ddbcb3146200029157600080fd5b806379ba5097146200021d578063849a3aa3146200022757806389035730146200023e57600080fd5b80632a0b17ee11620001885780632a0b17ee14620001e3578063715018a614620001fc57806371857000146200020657600080fd5b80630c340a2414620001a657806323452b9c14620001d7575b600080fd5b600254620001ba906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001e162000393565b005b620001ed60075481565b604051908152602001620001ce565b620001e162000405565b620001e16200021736600462001068565b6200049d565b620001e162000531565b620001ba620002383660046200108f565b620005fb565b62000248620009c1565b604051620001ce97969594939291906200122d565b600054620001ba906001600160a01b031681565b6000546001600160a01b031633145b6040519015158152602001620001ce565b600454620001ba906001600160a01b031681565b6002546001600160a01b0316331462000280565b600654620001ba906001600160a01b031681565b620001e1620002de36600462001068565b62000b16565b600554620001ba906001600160a01b031681565b600354620001ba906001600160a01b031681565b620001e16200031d36600462001068565b62000baa565b620001e16200033436600462001068565b62000c3e565b6001546001600160a01b0316331462000280565b620001e16200035f36600462001068565b62000cd2565b620001e16200037636600462001068565b62000d66565b620001e16200038d36600462001198565b62000e3c565b6000546001600160a01b03163314620003f35760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319169055565b6000546001600160a01b03163314620004615760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331480620004c157506002546001600160a01b031633145b6200050f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314620005b35760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401620003ea565b600180546001600160a01b0319908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b60006007548b602001351015620006555760405162461bcd60e51b815260206004820152600e60248201527f66656520697320746f6f206c6f770000000000000000000000000000000000006044820152606401620003ea565b6040518060e00160405280866001600160a01b031681526020018581526020018481526020018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8c018190048102820181019092528a815291810191908b908b908190840183828082843760009201919091525050509082525060208d8101358183015260409182018590528251600880546001600160a01b0319166001600160a01b039092169190911781558382015160095591830151600a55606083015180516200074792600b92019062000eb3565b50608082015180516200076591600484019160209091019062000eb3565b5060a0820151600582015560c090910151600690910155604051620007939089908990899060200162001349565b60405160208183030381529060405280519060200120600660009054906101000a90046001600160a01b031687604051620007ce9062000f42565b6001600160a01b039283168152911660208201526040018190604051809103906000f590508015801562000806573d6000803e3d6000fd5b50600880546001600160a01b031916815560006009819055600a8190559192509062000834600b8262000f50565b6200084460048301600062000f50565b6005820160009055600682016000905550507f5133bb164b64ffa4461bc0c782a5c0e71cdc9d6c6ef5aa9af84f7fd2cd966d8e818b8b8b8b8b604051620008919695949392919062001288565b60405180910390a16005546001600160a01b0316633d2a6f7782620008ba60208f018f62001068565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156200091b57600080fd5b505af115801562000930573d6000803e3d6000fd5b50505050600460009054906101000a90046001600160a01b03166001600160a01b03166309fc162a8e8e84856040518563ffffffff1660e01b81526004016200097d9493929190620012da565b600060405180830381600087803b1580156200099857600080fd5b505af1158015620009ad573d6000803e3d6000fd5b505050509c9b505050505050505050505050565b60088054600954600a54600b80546001600160a01b03909416949293919291620009eb9062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000a199062001378565b801562000a6a5780601f1062000a3e5761010080835404028352916020019162000a6a565b820191906000526020600020905b81548152906001019060200180831162000a4c57829003601f168201915b50505050509080600401805462000a819062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000aaf9062001378565b801562000b005780601f1062000ad45761010080835404028352916020019162000b00565b820191906000526020600020905b81548152906001019060200180831162000ae257829003601f168201915b5050505050908060050154908060060154905087565b6000546001600160a01b031633148062000b3a57506002546001600160a01b031633145b62000b885760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000bce57506002546001600160a01b031633145b62000c1c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000c6257506002546001600160a01b031633145b62000cb05760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000cf657506002546001600160a01b031633145b62000d445760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000dc25760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b6001600160a01b03811662000e1a5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401620003ea565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000e6057506002546001600160a01b031633145b62000eae5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600755565b82805462000ec19062001378565b90600052602060002090601f01602090048101928262000ee5576000855562000f30565b82601f1062000f0057805160ff191683800117855562000f30565b8280016001018555821562000f30579182015b8281111562000f3057825182559160200191906001019062000f13565b5062000f3e92915062000f92565b5090565b610c4a80620013df83390190565b50805462000f5e9062001378565b6000825580601f1062000f6f575050565b601f01602090049060005260206000209081019062000f8f919062000f92565b50565b5b8082111562000f3e576000815560010162000f93565b803562000fb681620013c8565b919050565b60008083601f84011262000fce57600080fd5b50813567ffffffffffffffff81111562000fe757600080fd5b6020830191508360206060830285010111156200100357600080fd5b9250929050565b60008083601f8401126200101d57600080fd5b50813567ffffffffffffffff8111156200103657600080fd5b6020830191508360208285010111156200100357600080fd5b6000604082840312156200106257600080fd5b50919050565b6000602082840312156200107b57600080fd5b81356200108881620013c8565b9392505050565b6000806000806000806000806000806000806101408d8f031215620010b357600080fd5b67ffffffffffffffff8d351115620010ca57600080fd5b620010d98e8e358f0162000fbb565b909c509a50620010ed8e60208f016200104f565b995067ffffffffffffffff60608e013511156200110957600080fd5b6200111b8e60608f01358f016200100a565b909950975067ffffffffffffffff60808e013511156200113a57600080fd5b6200114c8e60808f01358f016200100a565b90975095506200115f60a08e0162000fa9565b94506200116f60c08e0162000fa9565b935060e08d013592506101008d013591506101208d013590509295989b509295989b509295989b565b600060208284031215620011ab57600080fd5b5035919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6000815180845260005b818110156200120557602081850181015186830182015201620011e7565b8181111562001218576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038816815286602082015285604082015260e0606082015260006200125d60e0830187620011dd565b8281036080840152620012718187620011dd565b60a0840195909552505060c0015295945050505050565b60006001600160a01b03808916835260806020840152620012ae60808401888a620011b2565b8381036040850152620012c3818789620011b2565b925050808416606084015250979650505050505050565b60608082528181018590526000908660808401835b8881101562001321578235825260208084013590830152604080840135908301529183019190830190600101620012ef565b506001600160a01b039687166020860152949095166040909301929092525090949350505050565b6040815260006200135f604083018587620011b2565b90506001600160a01b0383166020830152949350505050565b600181811c908216806200138d57607f821691505b6020821081141562001062577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038116811462000f8f57600080fdfe60806040523480156200001157600080fd5b5060405162000c4a38038062000c4a8339810160408190526200003491620004c7565b336001600160a01b031663d7dfa0dd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200007057600080fd5b505af115801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003f9565b601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663b8ddbcb36040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200010d57600080fd5b505af115801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620003f9565b601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663890357306040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001aa57600080fd5b505af1158015620001bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001e9919081019062000420565b600b819055600482905582516001906000906003908290600590829060079082906200021d9060069060208e01906200029c565b50508a5162000232919060208d01906200029c565b5050989098559790975580546101009790970a6001600160a01b038181021990981698881602979097179096555050600080546001600160a01b03199081169685169690961790555050600280549093169316929092179055506008805460ff1916905562000572565b828054620002aa9062000506565b90600052602060002090601f016020900481019282620002ce576000855562000319565b82601f10620002e957805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000319578251825591602001919060010190620002fc565b50620003279291506200032b565b5090565b5b808211156200032757600081556001016200032c565b600082601f8301126200035457600080fd5b81516001600160401b038082111562000371576200037162000543565b604051601f8301601f19908116603f011681019082821181831017156200039c576200039c62000543565b81604052838152602092508683858801011115620003b957600080fd5b600091505b83821015620003dd5785820183015181830184015290820190620003be565b83821115620003ef5760008385830101525b9695505050505050565b6000602082840312156200040c57600080fd5b8151620004198162000559565b9392505050565b600080600080600080600060e0888a0312156200043c57600080fd5b8751620004498162000559565b602089015160408a015160608b015192995090975095506001600160401b03808211156200047657600080fd5b620004848b838c0162000342565b955060808a01519150808211156200049b57600080fd5b50620004aa8a828b0162000342565b93505060a0880151915060c0880151905092959891949750929550565b60008060408385031215620004db57600080fd5b8251620004e88162000559565b6020840151909250620004fb8162000559565b809150509250929050565b600181811c908216806200051b57607f821691505b602082108114156200053d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200056f57600080fd5b50565b6106c880620005826000396000f3fe6080604052600436106101485760003560e01c80637ecebe00116100c0578063cfd7b0df11610074578063dd62ed3e11610059578063dd62ed3e1461040d578063e3b2594f14610445578063f72655ef1461045b5761014f565b8063cfd7b0df146103b3578063d7dfa0dd146103e05761014f565b806395d89b41116100a557806395d89b411461035b578063a001ecdd14610370578063b8ddbcb3146103865761014f565b80637ecebe00146103185780638dc06c7f146103455761014f565b8063200d2ed211610117578063570ca735116100fc578063570ca735146102a857806370a08231146102d55780637b4044a0146103025761014f565b8063200d2ed21461025a578063313ce567146102815761014f565b806306fdde031461019057806318160ddd146101bb57806318a855c7146101df5780631bb534ba146102085761014f565b3661014f57005b60105460405173ffffffffffffffffffffffffffffffffffffffff9091169036600082376000803683855af43d806000843e81801561018c578184f35b8184fd5b34801561019c57600080fd5b506101a5610471565b6040516101b291906105cb565b60405180910390f35b3480156101c757600080fd5b506101d1600c5481565b6040519081526020016101b2565b3480156101eb57600080fd5b506101f561038481565b60405161ffff90911681526020016101b2565b34801561021457600080fd5b506001546102359073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561026657600080fd5b506008546102749060ff1681565b6040516101b2919061058a565b34801561028d57600080fd5b50610296601281565b60405160ff90911681526020016101b2565b3480156102b457600080fd5b506000546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e157600080fd5b506101d16102f0366004610535565b600d6020526000908152604090205481565b34801561030e57600080fd5b506101d160055481565b34801561032457600080fd5b506101d1610333366004610535565b600f6020526000908152604090205481565b34801561035157600080fd5b506101d1600b5481565b34801561036757600080fd5b506101a56104ff565b34801561037c57600080fd5b506101d160045481565b34801561039257600080fd5b506011546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506002546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ec57600080fd5b506010546102359073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041957600080fd5b506101d1610428366004610557565b600e60209081526000928352604080842090915290825290205481565b34801561045157600080fd5b506101d160035481565b34801561046757600080fd5b506101d1600a5481565b6007805461047e9061063e565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa9061063e565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b505050505081565b6006805461047e9061063e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b6105508261050c565b9392505050565b6000806040838503121561056a57600080fd5b6105738361050c565b91506105816020840161050c565b90509250929050565b60208101600283106105c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156105f8578581018301518582016040015282016105dc565b8181111561060a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061065257607f821691505b6020821081141561068c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220b229364e7a9918553c008bca2249fc251b0662b166387bb68248fe64daee07b864736f6c63430008060033a26469706673582212208fd396d323db6525448a1ffdbe320dac0c9e202bf72592460bca2ffca9c8106464736f6c634300080600330000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000005b5746f6f5e2db8bf5e260829ca7a004c876b167000000000000000000000000c4e0f3ec24972c75df7c716922096f4270b7bb4e0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd800000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620001a15760003560e01c8063c7af335211620000e9578063e011bf8e1162000097578063f1fe1663116200006e578063f1fe1663146200034e578063f2fde38b1462000365578063ff39e710146200037c57600080fd5b8063e011bf8e146200030c578063e4c0aaf41462000323578063ed459df2146200033a57600080fd5b8063d321de7311620000cc578063d321de7314620002cd578063d6811b6f14620002e4578063d7dfa0dd14620002f857600080fd5b8063c7af335214620002a5578063cfd7b0df14620002b957600080fd5b806379ba509711620001535780638da5cb5b116200012a5780638da5cb5b146200025d5780638f32d59b1462000271578063b8ddbcb3146200029157600080fd5b806379ba5097146200021d578063849a3aa3146200022757806389035730146200023e57600080fd5b80632a0b17ee11620001885780632a0b17ee14620001e3578063715018a614620001fc57806371857000146200020657600080fd5b80630c340a2414620001a657806323452b9c14620001d7575b600080fd5b600254620001ba906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001e162000393565b005b620001ed60075481565b604051908152602001620001ce565b620001e162000405565b620001e16200021736600462001068565b6200049d565b620001e162000531565b620001ba620002383660046200108f565b620005fb565b62000248620009c1565b604051620001ce97969594939291906200122d565b600054620001ba906001600160a01b031681565b6000546001600160a01b031633145b6040519015158152602001620001ce565b600454620001ba906001600160a01b031681565b6002546001600160a01b0316331462000280565b600654620001ba906001600160a01b031681565b620001e1620002de36600462001068565b62000b16565b600554620001ba906001600160a01b031681565b600354620001ba906001600160a01b031681565b620001e16200031d36600462001068565b62000baa565b620001e16200033436600462001068565b62000c3e565b6001546001600160a01b0316331462000280565b620001e16200035f36600462001068565b62000cd2565b620001e16200037636600462001068565b62000d66565b620001e16200038d36600462001198565b62000e3c565b6000546001600160a01b03163314620003f35760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319169055565b6000546001600160a01b03163314620004615760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331480620004c157506002546001600160a01b031633145b6200050f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314620005b35760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401620003ea565b600180546001600160a01b0319908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b60006007548b602001351015620006555760405162461bcd60e51b815260206004820152600e60248201527f66656520697320746f6f206c6f770000000000000000000000000000000000006044820152606401620003ea565b6040518060e00160405280866001600160a01b031681526020018581526020018481526020018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8c018190048102820181019092528a815291810191908b908b908190840183828082843760009201919091525050509082525060208d8101358183015260409182018590528251600880546001600160a01b0319166001600160a01b039092169190911781558382015160095591830151600a55606083015180516200074792600b92019062000eb3565b50608082015180516200076591600484019160209091019062000eb3565b5060a0820151600582015560c090910151600690910155604051620007939089908990899060200162001349565b60405160208183030381529060405280519060200120600660009054906101000a90046001600160a01b031687604051620007ce9062000f42565b6001600160a01b039283168152911660208201526040018190604051809103906000f590508015801562000806573d6000803e3d6000fd5b50600880546001600160a01b031916815560006009819055600a8190559192509062000834600b8262000f50565b6200084460048301600062000f50565b6005820160009055600682016000905550507f5133bb164b64ffa4461bc0c782a5c0e71cdc9d6c6ef5aa9af84f7fd2cd966d8e818b8b8b8b8b604051620008919695949392919062001288565b60405180910390a16005546001600160a01b0316633d2a6f7782620008ba60208f018f62001068565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156200091b57600080fd5b505af115801562000930573d6000803e3d6000fd5b50505050600460009054906101000a90046001600160a01b03166001600160a01b03166309fc162a8e8e84856040518563ffffffff1660e01b81526004016200097d9493929190620012da565b600060405180830381600087803b1580156200099857600080fd5b505af1158015620009ad573d6000803e3d6000fd5b505050509c9b505050505050505050505050565b60088054600954600a54600b80546001600160a01b03909416949293919291620009eb9062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000a199062001378565b801562000a6a5780601f1062000a3e5761010080835404028352916020019162000a6a565b820191906000526020600020905b81548152906001019060200180831162000a4c57829003601f168201915b50505050509080600401805462000a819062001378565b80601f016020809104026020016040519081016040528092919081815260200182805462000aaf9062001378565b801562000b005780601f1062000ad45761010080835404028352916020019162000b00565b820191906000526020600020905b81548152906001019060200180831162000ae257829003601f168201915b5050505050908060050154908060060154905087565b6000546001600160a01b031633148062000b3a57506002546001600160a01b031633145b62000b885760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000bce57506002546001600160a01b031633145b62000c1c5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000c6257506002546001600160a01b031633145b62000cb05760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000cf657506002546001600160a01b031633145b62000d445760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000dc25760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003ea565b6001600160a01b03811662000e1a5760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401620003ea565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000e6057506002546001600160a01b031633145b62000eae5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003ea565b600755565b82805462000ec19062001378565b90600052602060002090601f01602090048101928262000ee5576000855562000f30565b82601f1062000f0057805160ff191683800117855562000f30565b8280016001018555821562000f30579182015b8281111562000f3057825182559160200191906001019062000f13565b5062000f3e92915062000f92565b5090565b610c4a80620013df83390190565b50805462000f5e9062001378565b6000825580601f1062000f6f575050565b601f01602090049060005260206000209081019062000f8f919062000f92565b50565b5b8082111562000f3e576000815560010162000f93565b803562000fb681620013c8565b919050565b60008083601f84011262000fce57600080fd5b50813567ffffffffffffffff81111562000fe757600080fd5b6020830191508360206060830285010111156200100357600080fd5b9250929050565b60008083601f8401126200101d57600080fd5b50813567ffffffffffffffff8111156200103657600080fd5b6020830191508360208285010111156200100357600080fd5b6000604082840312156200106257600080fd5b50919050565b6000602082840312156200107b57600080fd5b81356200108881620013c8565b9392505050565b6000806000806000806000806000806000806101408d8f031215620010b357600080fd5b67ffffffffffffffff8d351115620010ca57600080fd5b620010d98e8e358f0162000fbb565b909c509a50620010ed8e60208f016200104f565b995067ffffffffffffffff60608e013511156200110957600080fd5b6200111b8e60608f01358f016200100a565b909950975067ffffffffffffffff60808e013511156200113a57600080fd5b6200114c8e60808f01358f016200100a565b90975095506200115f60a08e0162000fa9565b94506200116f60c08e0162000fa9565b935060e08d013592506101008d013591506101208d013590509295989b509295989b509295989b565b600060208284031215620011ab57600080fd5b5035919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6000815180845260005b818110156200120557602081850181015186830182015201620011e7565b8181111562001218576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038816815286602082015285604082015260e0606082015260006200125d60e0830187620011dd565b8281036080840152620012718187620011dd565b60a0840195909552505060c0015295945050505050565b60006001600160a01b03808916835260806020840152620012ae60808401888a620011b2565b8381036040850152620012c3818789620011b2565b925050808416606084015250979650505050505050565b60608082528181018590526000908660808401835b8881101562001321578235825260208084013590830152604080840135908301529183019190830190600101620012ef565b506001600160a01b039687166020860152949095166040909301929092525090949350505050565b6040815260006200135f604083018587620011b2565b90506001600160a01b0383166020830152949350505050565b600181811c908216806200138d57607f821691505b6020821081141562001062577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038116811462000f8f57600080fdfe60806040523480156200001157600080fd5b5060405162000c4a38038062000c4a8339810160408190526200003491620004c7565b336001600160a01b031663d7dfa0dd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200007057600080fd5b505af115801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620003f9565b601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663b8ddbcb36040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200010d57600080fd5b505af115801562000122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001489190620003f9565b601160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550336001600160a01b031663890357306040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001aa57600080fd5b505af1158015620001bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001e9919081019062000420565b600b819055600482905582516001906000906003908290600590829060079082906200021d9060069060208e01906200029c565b50508a5162000232919060208d01906200029c565b5050989098559790975580546101009790970a6001600160a01b038181021990981698881602979097179096555050600080546001600160a01b03199081169685169690961790555050600280549093169316929092179055506008805460ff1916905562000572565b828054620002aa9062000506565b90600052602060002090601f016020900481019282620002ce576000855562000319565b82601f10620002e957805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000319578251825591602001919060010190620002fc565b50620003279291506200032b565b5090565b5b808211156200032757600081556001016200032c565b600082601f8301126200035457600080fd5b81516001600160401b038082111562000371576200037162000543565b604051601f8301601f19908116603f011681019082821181831017156200039c576200039c62000543565b81604052838152602092508683858801011115620003b957600080fd5b600091505b83821015620003dd5785820183015181830184015290820190620003be565b83821115620003ef5760008385830101525b9695505050505050565b6000602082840312156200040c57600080fd5b8151620004198162000559565b9392505050565b600080600080600080600060e0888a0312156200043c57600080fd5b8751620004498162000559565b602089015160408a015160608b015192995090975095506001600160401b03808211156200047657600080fd5b620004848b838c0162000342565b955060808a01519150808211156200049b57600080fd5b50620004aa8a828b0162000342565b93505060a0880151915060c0880151905092959891949750929550565b60008060408385031215620004db57600080fd5b8251620004e88162000559565b6020840151909250620004fb8162000559565b809150509250929050565b600181811c908216806200051b57607f821691505b602082108114156200053d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200056f57600080fd5b50565b6106c880620005826000396000f3fe6080604052600436106101485760003560e01c80637ecebe00116100c0578063cfd7b0df11610074578063dd62ed3e11610059578063dd62ed3e1461040d578063e3b2594f14610445578063f72655ef1461045b5761014f565b8063cfd7b0df146103b3578063d7dfa0dd146103e05761014f565b806395d89b41116100a557806395d89b411461035b578063a001ecdd14610370578063b8ddbcb3146103865761014f565b80637ecebe00146103185780638dc06c7f146103455761014f565b8063200d2ed211610117578063570ca735116100fc578063570ca735146102a857806370a08231146102d55780637b4044a0146103025761014f565b8063200d2ed21461025a578063313ce567146102815761014f565b806306fdde031461019057806318160ddd146101bb57806318a855c7146101df5780631bb534ba146102085761014f565b3661014f57005b60105460405173ffffffffffffffffffffffffffffffffffffffff9091169036600082376000803683855af43d806000843e81801561018c578184f35b8184fd5b34801561019c57600080fd5b506101a5610471565b6040516101b291906105cb565b60405180910390f35b3480156101c757600080fd5b506101d1600c5481565b6040519081526020016101b2565b3480156101eb57600080fd5b506101f561038481565b60405161ffff90911681526020016101b2565b34801561021457600080fd5b506001546102359073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b2565b34801561026657600080fd5b506008546102749060ff1681565b6040516101b2919061058a565b34801561028d57600080fd5b50610296601281565b60405160ff90911681526020016101b2565b3480156102b457600080fd5b506000546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e157600080fd5b506101d16102f0366004610535565b600d6020526000908152604090205481565b34801561030e57600080fd5b506101d160055481565b34801561032457600080fd5b506101d1610333366004610535565b600f6020526000908152604090205481565b34801561035157600080fd5b506101d1600b5481565b34801561036757600080fd5b506101a56104ff565b34801561037c57600080fd5b506101d160045481565b34801561039257600080fd5b506011546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103bf57600080fd5b506002546102359073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ec57600080fd5b506010546102359073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041957600080fd5b506101d1610428366004610557565b600e60209081526000928352604080842090915290825290205481565b34801561045157600080fd5b506101d160035481565b34801561046757600080fd5b506101d1600a5481565b6007805461047e9061063e565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa9061063e565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b505050505081565b6006805461047e9061063e565b803573ffffffffffffffffffffffffffffffffffffffff8116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b6105508261050c565b9392505050565b6000806040838503121561056a57600080fd5b6105738361050c565b91506105816020840161050c565b90509250929050565b60208101600283106105c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156105f8578581018301518582016040015282016105dc565b8181111561060a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061065257607f821691505b6020821081141561068c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220b229364e7a9918553c008bca2249fc251b0662b166387bb68248fe64daee07b864736f6c63430008060033a26469706673582212208fd396d323db6525448a1ffdbe320dac0c9e202bf72592460bca2ffca9c8106464736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000005b5746f6f5e2db8bf5e260829ca7a004c876b167000000000000000000000000c4e0f3ec24972c75df7c716922096f4270b7bb4e0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd800000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
-----Decoded View---------------
Arg [0] : owner_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57
Arg [1] : logic_ (address): 0x5b5746F6f5e2Db8BF5e260829CA7a004c876B167
Arg [2] : editions_ (address): 0xC4E0f3Ec24972C75dF7c716922096F4270b7bB4e
Arg [3] : tributaryRegistry_ (address): 0x1171B858777120a59a6cc8148eDda8982F187Cd8
Arg [4] : treasuryConfig_ (address): 0x21A93bE569666527dAe0FDBFbe7715299dEC1202
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57
Arg [1] : 0000000000000000000000005b5746f6f5e2db8bf5e260829ca7a004c876b167
Arg [2] : 000000000000000000000000c4e0f3ec24972c75df7c716922096f4270b7bb4e
Arg [3] : 0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd8
Arg [4] : 00000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.