Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 319 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Create Crowdfund | 16843450 | 1094 days ago | IN | 0 ETH | 0.01042386 | ||||
| Create Crowdfund | 15390864 | 1300 days ago | IN | 0 ETH | 0.00478757 | ||||
| Create Crowdfund | 15366025 | 1304 days ago | IN | 0 ETH | 0.0153951 | ||||
| Create Crowdfund | 15315096 | 1312 days ago | IN | 0 ETH | 0.0205632 | ||||
| Create Crowdfund | 15293873 | 1316 days ago | IN | 0 ETH | 0.0024197 | ||||
| Create Crowdfund | 15293766 | 1316 days ago | IN | 0 ETH | 0.00244242 | ||||
| Create Crowdfund | 15293748 | 1316 days ago | IN | 0 ETH | 0.00252778 | ||||
| Create Crowdfund | 15293660 | 1316 days ago | IN | 0 ETH | 0.00198674 | ||||
| Create Crowdfund | 15293402 | 1316 days ago | IN | 0 ETH | 0.00203987 | ||||
| Create Crowdfund | 15293382 | 1316 days ago | IN | 0 ETH | 0.00215158 | ||||
| Create Crowdfund | 15293358 | 1316 days ago | IN | 0 ETH | 0.00238178 | ||||
| Create Crowdfund | 15293339 | 1316 days ago | IN | 0 ETH | 0.00189735 | ||||
| Create Crowdfund | 15293197 | 1316 days ago | IN | 0 ETH | 0.00277222 | ||||
| Create Crowdfund | 15293163 | 1316 days ago | IN | 0 ETH | 0.00254326 | ||||
| Create Crowdfund | 15293114 | 1316 days ago | IN | 0 ETH | 0.00272351 | ||||
| Create Crowdfund | 15293031 | 1316 days ago | IN | 0 ETH | 0.00361715 | ||||
| Create Crowdfund | 15292049 | 1316 days ago | IN | 0 ETH | 0.00235376 | ||||
| Create Crowdfund | 15292018 | 1316 days ago | IN | 0 ETH | 0.00229771 | ||||
| Create Crowdfund | 15291945 | 1316 days ago | IN | 0 ETH | 0.00191335 | ||||
| Create Crowdfund | 15291913 | 1316 days ago | IN | 0 ETH | 0.00203165 | ||||
| Create Crowdfund | 15291875 | 1316 days ago | IN | 0 ETH | 0.00238446 | ||||
| Create Crowdfund | 15291807 | 1316 days ago | IN | 0 ETH | 0.00262183 | ||||
| Create Crowdfund | 15290144 | 1316 days ago | IN | 0 ETH | 0.0055159 | ||||
| Create Crowdfund | 15289016 | 1316 days ago | IN | 0 ETH | 0.00295453 | ||||
| Create Crowdfund | 15288979 | 1316 days ago | IN | 0 ETH | 0.0025314 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 16843450 | 1094 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15390864 | 1300 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15366025 | 1304 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15315096 | 1312 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293873 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293766 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293748 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293660 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293402 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293382 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293358 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293339 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293197 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293163 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293114 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15293031 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15292049 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15292018 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15291945 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15291913 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15291875 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15291807 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15290144 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15289016 | 1316 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 15288979 | 1316 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:
CrowdfundFactory
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 {CrowdfundProxy} from "./CrowdfundProxy.sol";
import {CrowdfundLogic} from "./CrowdfundLogic.sol";
import {ICrowdfund} from "./interface/ICrowdfund.sol";
import {ITributaryRegistry} from "../../../interface/ITributaryRegistry.sol";
import {Governable} from "../../../lib/Governable.sol";
/**
* @title CrowdfundFactory
* @author MirrorXYZ
*/
contract CrowdfundFactory is Governable {
//======== Structs ========
struct Parameters {
address payable fundingRecipient;
uint256 fundingCap;
uint256 operatorPercent;
uint256 feePercentage;
}
//======== Events ========
event CrowdfundDeployed(
address crowdfundProxy,
string name,
string symbol,
address operator
);
event Upgraded(address indexed implementation);
//======== Configuration storage =========
/*
Updatable via governance
*/
address public logic;
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 tributaryRegistry_,
address treasuryConfig_
) Governable(owner_) {
logic = logic_;
tributaryRegistry = tributaryRegistry_;
treasuryConfig = treasuryConfig_;
}
//======== Configuration =========
function setMinimumFeePercentage(uint256 newMinFeePercentage)
public
onlyGovernance
{
minFeePercentage = newMinFeePercentage;
}
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(
TributaryConfig calldata tributaryConfig,
string calldata name_,
string calldata symbol_,
address payable operator_,
address payable fundingRecipient_,
uint256 fundingCap_,
uint256 operatorPercent_
) external returns (address crowdfundProxy) {
require(
tributaryConfig.feePercentage >= minFeePercentage,
"fee is too low"
);
parameters = Parameters({
fundingRecipient: fundingRecipient_,
fundingCap: fundingCap_,
operatorPercent: operatorPercent_,
feePercentage: tributaryConfig.feePercentage
});
crowdfundProxy = address(
new CrowdfundProxy{salt: keccak256(abi.encode(symbol_, operator_))}(
treasuryConfig,
operator_,
name_,
symbol_
)
);
delete parameters;
emit CrowdfundDeployed(crowdfundProxy, name_, symbol_, operator_);
ITributaryRegistry(tributaryRegistry).registerTributary(
crowdfundProxy,
tributaryConfig.tributary
);
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
import {CrowdfundStorage} from "./CrowdfundStorage.sol";
import {ERC20Storage} from "../../../external/ERC20Storage.sol";
import {IERC20Events} from "../../../external/interface/IERC20.sol";
interface ICrowdfundFactory {
function mediaAddress() external returns (address);
function logic() external returns (address);
// ERC20 data.
function parameters()
external
returns (
address payable fundingRecipient,
uint256 fundingCap,
uint256 operatorPercent,
uint256 feePercentage
);
}
/**
* @title CrowdfundProxy
* @author MirrorXYZ
*/
contract CrowdfundProxy is CrowdfundStorage, ERC20Storage, IERC20Events {
event Upgraded(address indexed implementation);
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant _IMPLEMENTATION_SLOT =
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
constructor(
address treasuryConfig_,
address payable operator_,
string memory name_,
string memory symbol_
) ERC20Storage(name_, symbol_) {
address logic = ICrowdfundFactory(msg.sender).logic();
assembly {
sstore(_IMPLEMENTATION_SLOT, logic)
}
emit Upgraded(logic);
// Crowdfund-specific data.
(
fundingRecipient,
fundingCap,
operatorPercent,
feePercentage
) = ICrowdfundFactory(msg.sender).parameters();
operator = operator_;
treasuryConfig = treasuryConfig_;
// Initialize mutable storage.
status = Status.FUNDING;
}
/// @notice Get current logic
function logic() external view returns (address logic_) {
assembly {
logic_ := sload(_IMPLEMENTATION_SLOT)
}
}
fallback() external payable {
assembly {
let ptr := mload(0x40)
calldatacopy(ptr, 0, calldatasize())
let result := delegatecall(
gas(),
sload(_IMPLEMENTATION_SLOT),
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 {CrowdfundStorage} from "./CrowdfundStorage.sol";
import {ERC20} from "../../../external/ERC20.sol";
import {ICrowdfund} from "./interface/ICrowdfund.sol";
import {ITreasuryConfig} from "../../../interface/ITreasuryConfig.sol";
/**
* @title CrowdfundLogic
* @author MirrorXYZ
*
* Crowdfund issuing ERC20 tokens that can be redeemed for
* the Ether in the contract once funding closes.
*/
contract CrowdfundLogic is CrowdfundStorage, ERC20 {
// ============ Events ============
event Contribution(address contributor, uint256 amount);
event FundingClosed(uint256 amountRaised, uint256 creatorAllocation);
event BidAccepted(uint256 amount);
event Redeemed(address contributor, uint256 amount);
event Withdrawal(uint256 amount, uint256 fee);
// ============ 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 ============
/**
* @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 amount)
external
payable
nonReentrant
{
_contribute(backer, amount);
}
/**
* @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);
_withdraw();
}
/**
* @notice Operator can change the funding recipient.
*/
function changeFundingRecipient(address payable newFundingRecipient)
public
onlyOperator
{
fundingRecipient = newFundingRecipient;
}
function withdraw() public {
_withdraw();
}
function computeFee(uint256 amount, uint256 feePercentage_)
public
pure
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"
);
}
// ============ Internal Methods ============
function _contribute(address payable backer, uint256 amount) 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));
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));
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);
}
}
function _withdraw() internal {
uint256 fee = feePercentage;
emit Withdrawal(
address(this).balance,
computeFee(address(this).balance, fee)
);
// Transfer the fee to the treasury.
sendValue(
ITreasuryConfig(treasuryConfig).treasury(),
computeFee(address(this).balance, fee)
);
// Transfer available balance to the fundingRecipient.
sendValue(fundingRecipient, address(this).balance);
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
interface ICrowdfund {
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 CrowdfundStorage
* @author MirrorXYZ
*/
contract CrowdfundStorage {
/**
* @notice The two states that this contract can exist in.
* "FUNDING" allows contributors to add funds.
*/
enum Status {
FUNDING,
TRADING
}
// ============ Constants ============
/// @notice The factor by which ETH contributions will multiply into crowdfund tokens.
uint16 internal constant TOKEN_SCALE = 1000;
// ============ Reentrancy ============
/// @notice Reentrancy constants.
uint256 internal constant REENTRANCY_NOT_ENTERED = 1;
uint256 internal constant REENTRANCY_ENTERED = 2;
/// @notice Current reentrancy status -- used by the modifier.
uint256 internal reentrancy_status;
/// @notice The operator has a special role to change contract status.
address payable public operator;
/// @notice Receives the funds when calling withdraw. Operator can configure.
address payable public fundingRecipient;
/// @notice Treasury configuration.
address public treasuryConfig;
/// @notice We add a hard cap to prevent raising more funds than deemed reasonable.
uint256 public fundingCap;
/// @notice Fee percentage that the crowdfund pays to the treasury.
uint256 public feePercentage;
/// @notice The operator takes some equity in the tokens, represented by this percent.
uint256 public operatorPercent;
// ============ Mutable Storage ============
/// @notice Represents the current state of the campaign.
Status public status;
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
/**
* @title ERC20Storage
* @author MirrorXYZ
*/
contract ERC20Storage {
/// @notice EIP-20 token name for this token
string public name;
/// @notice EIP-20 token symbol for this token
string public symbol;
/// @notice EIP-20 total number of tokens in circulation
uint256 public totalSupply;
/// @notice Initialize total supply to zero.
constructor(string memory name_, string memory symbol_) {
name = name_;
symbol = symbol_;
totalSupply = 0;
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
interface IERC20 {
/// @notice EIP-20 token name for this token
function name() external returns (string calldata);
/// @notice EIP-20 token symbol for this token
function symbol() external returns (string calldata);
/// @notice EIP-20 token decimals for this token
function decimals() external returns (uint8);
/// @notice EIP-20 total number of tokens in circulation
function totalSupply() external returns (uint256);
/// @notice EIP-20 official record of token balances for each account
function balanceOf(address account) external returns (uint256);
/// @notice EIP-20 allowance amounts on behalf of others
function allowance(address owner, address spender)
external
returns (uint256);
/// @notice EIP-20 approves _spender_ to transfer up to _value_ multiple times
function approve(address spender, uint256 value) external returns (bool);
/// @notice EIP-20 transfer _value_ to _to_ from _msg.sender_
function transfer(address to, uint256 value) external returns (bool);
/// @notice EIP-20 transfer _value_ to _to_ from _from_
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
interface IERC20Events {
/// @notice EIP-20 Mint event
event Mint(address indexed to, uint256 amount);
/// @notice EIP-20 approval event
event Approval(
address indexed from,
address indexed spender,
uint256 value
);
/// @notice EIP-20 transfer event
event Transfer(address indexed from, address indexed to, uint256 value);
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
// import {ERC20Storage} from "./ERC20Storage.sol";
import {IERC20, IERC20Events} from "./interface/IERC20.sol";
/**
* @title ERC20 Implementation.
* @author MirrorXYZ
*/
contract ERC20 is IERC20, IERC20Events {
// ============ ERC20 Attributes ============
/// @notice EIP-20 token name for this token
string public override name;
/// @notice EIP-20 token symbol for this token
string public override symbol;
/// @notice EIP-20 token decimals for this token
uint8 public constant override decimals = 18;
// ============ Mutable ERC20 Storage ============
/// @notice EIP-20 total number of tokens in circulation
uint256 public override totalSupply;
/// @notice EIP-20 official record of token balances for each account
mapping(address => uint256) public override balanceOf;
/// @notice EIP-20 allowance amounts on behalf of others
mapping(address => mapping(address => uint256)) public override allowance;
/**
* @notice Initialize and assign total supply when using
* proxy pattern. Only callable during contract deployment.
* @param totalSupply_ is the initial token supply
* @param to_ is the address that will hold the initial token supply
*/
function initialize(uint256 totalSupply_, address to_) external {
// Ensure that this function is only callable during contract construction.
assembly {
if extcodesize(address()) {
revert(0, 0)
}
}
totalSupply = totalSupply_;
balanceOf[to_] = totalSupply_;
emit Transfer(address(0), to_, totalSupply_);
}
// ============ ERC20 Spec ============
/**
* @dev Function to increase allowance of tokens.
* @param spender The address that will receive an allowance increase.
* @param value The amount of tokens to increase allowance.
*/
function approve(address spender, uint256 value)
external
override
returns (bool)
{
_approve(msg.sender, spender, value);
return true;
}
/**
* @dev Function to transfer tokens.
* @param to The address that will receive the tokens.
* @param value The amount of tokens to transfer.
*/
function transfer(address to, uint256 value)
external
override
returns (bool)
{
_transfer(msg.sender, to, value);
return true;
}
/**
* @dev Function to transfer an accounts tokens. Sender of txn must be approved.
* @param from The address that will transfer tokens.
* @param to The address that will receive the tokens.
* @param value The amount of tokens to transfer.
*/
function transferFrom(
address from,
address to,
uint256 value
) external override returns (bool) {
require(
allowance[from][msg.sender] >= value,
"transfer amount exceeds spender allowance"
);
allowance[from][msg.sender] = allowance[from][msg.sender] - value;
_transfer(from, to, value);
return true;
}
// ============ Private Utils ============
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
) internal {
allowance[owner][spender] = value;
emit Approval(owner, spender, value);
}
function _transfer(
address from,
address to,
uint256 value
) internal {
require(balanceOf[from] >= value, "transfer amount exceeds balance");
balanceOf[from] = balanceOf[from] - value;
balanceOf[to] = balanceOf[to] + value;
emit Transfer(from, to, value);
}
}// 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","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","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":"address","name":"tributary","type":"address"},{"internalType":"uint256","name":"feePercentage","type":"uint256"}],"internalType":"struct CrowdfundFactory.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"}],"name":"createCrowdfund","outputs":[{"internalType":"address","name":"crowdfundProxy","type":"address"}],"stateMutability":"nonpayable","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":"uint256","name":"feePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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
608060405260fa60065534801561001557600080fd5b506040516118c33803806118c3833981016040819052610034916100df565b600080546001600160a01b0319166001600160a01b038616908117825560405186928392917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050600380546001600160a01b039485166001600160a01b03199182161790915560048054938516938216939093179092556005805491909316911617905550610133565b80516001600160a01b03811681146100da57600080fd5b919050565b600080600080608085870312156100f557600080fd5b6100fe856100c3565b935061010c602086016100c3565b925061011a604086016100c3565b9150610128606086016100c3565b905092959194509250565b611781806101426000396000f3fe60806040523480156200001157600080fd5b5060043610620001895760003560e01c8063c7af335211620000dd578063e4c0aaf4116200008b578063f1fe1663116200006e578063f1fe16631462000337578063f2fde38b146200034e578063ff39e710146200036557600080fd5b8063e4c0aaf4146200030c578063ed459df2146200032357600080fd5b8063d321de7311620000c0578063d321de7314620002cd578063d6811b6f14620002e4578063d7dfa0dd14620002f857600080fd5b8063c7af335214620002a5578063cfd7b0df14620002b957600080fd5b806379ba5097116200013b57806389035730116200011e5780638903573014620002265780638da5cb5b14620002715780638f32d59b146200028557600080fd5b806379ba509714620002055780637d48f05f146200020f57600080fd5b80632a0b17ee11620001705780632a0b17ee14620001cb578063715018a614620001e45780637185700014620001ee57600080fd5b80630c340a24146200018e57806323452b9c14620001bf575b600080fd5b600254620001a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001c96200037c565b005b620001d560065481565b604051908152602001620001b6565b620001c9620003ee565b620001c9620001ff36600462000b8a565b62000486565b620001c96200051a565b620001a26200022036600462000bb1565b620005e4565b600754600854600954600a5462000246936001600160a01b031692919084565b604080516001600160a01b0390951685526020850193909352918301526060820152608001620001b6565b600054620001a2906001600160a01b031681565b6000546001600160a01b031633145b6040519015158152602001620001b6565b6002546001600160a01b0316331462000294565b600554620001a2906001600160a01b031681565b620001c9620002de36600462000b8a565b62000827565b600454620001a2906001600160a01b031681565b600354620001a2906001600160a01b031681565b620001c96200031d36600462000b8a565b620008bb565b6001546001600160a01b0316331462000294565b620001c96200034836600462000b8a565b6200094f565b620001c96200035f36600462000b8a565b620009e3565b620001c96200037636600462000c7f565b62000ab9565b6000546001600160a01b03163314620003dc5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319169055565b6000546001600160a01b031633146200044a5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003d3565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331480620004aa57506002546001600160a01b031633145b620004f85760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146200059c5760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401620003d3565b600180546001600160a01b0319908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b60006006548a6020013510156200063e5760405162461bcd60e51b815260206004820152600e60248201527f66656520697320746f6f206c6f770000000000000000000000000000000000006044820152606401620003d3565b604080516080810182526001600160a01b03861680825260208083018790528284018690528d8101356060909301839052600780546001600160a01b03191690921790915560088690556009859055600a919091559051620006a7918991899189910162000d85565b60405160208183030381529060405280519060200120600560009054906101000a90046001600160a01b0316868b8b8b8b604051620006e69062000b30565b620006f79695949392919062000ce2565b8190604051809103906000f590508015801562000718573d6000803e3d6000fd5b50600780546001600160a01b0319169055600060088190556009819055600a556040519091507f5133bb164b64ffa4461bc0c782a5c0e71cdc9d6c6ef5aa9af84f7fd2cd966d8e90620007779083908c908c908c908c908c9062000d33565b60405180910390a16004546001600160a01b0316633d2a6f7782620007a060208e018e62000b8a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156200080157600080fd5b505af115801562000816573d6000803e3d6000fd5b505050509998505050505050505050565b6000546001600160a01b03163314806200084b57506002546001600160a01b031633145b620008995760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480620008df57506002546001600160a01b031633145b6200092d5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806200097357506002546001600160a01b031633145b620009c15760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000a3f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003d3565b6001600160a01b03811662000a975760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401620003d3565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000add57506002546001600160a01b031633145b62000b2b5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600655565b61097e8062000dce83390190565b60008083601f84011262000b5157600080fd5b50813567ffffffffffffffff81111562000b6a57600080fd5b60208301915083602082850101111562000b8357600080fd5b9250929050565b60006020828403121562000b9d57600080fd5b813562000baa8162000db4565b9392505050565b6000806000806000806000806000898b0361010081121562000bd257600080fd5b604081121562000be157600080fd5b5089985060408a013567ffffffffffffffff8082111562000c0157600080fd5b62000c0f8d838e0162000b3e565b909a50985060608c013591508082111562000c2957600080fd5b5062000c388c828d0162000b3e565b90975095505060808a013562000c4e8162000db4565b935060a08a013562000c608162000db4565b8093505060c08a0135915060e08a013590509295985092959850929598565b60006020828403121562000c9257600080fd5b5035919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60006001600160a01b0380891683528088166020840152506080604083015262000d1160808301868862000c99565b828103606084015262000d2681858762000c99565b9998505050505050505050565b60006001600160a01b0380891683526080602084015262000d5960808401888a62000c99565b838103604085015262000d6e81878962000c99565b925050808416606084015250979650505050505050565b60408152600062000d9b60408301858762000c99565b90506001600160a01b0383166020830152949350505050565b6001600160a01b038116811462000dca57600080fd5b5056fe60806040523480156200001157600080fd5b506040516200097e3803806200097e8339810160408190526200003491620003da565b8151829082906200004d90600890602085019062000214565b5080516200006390600990602084019062000214565b506000600a8190555050506000336001600160a01b031663d7dfa0dd6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620000ac57600080fd5b505af1158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e7919062000371565b9050807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55806001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2336001600160a01b031663890357306040518163ffffffff1660e01b8152600401608060405180830381600087803b1580156200017e57600080fd5b505af115801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000398565b600555600655600455600280546001600160a01b03199081166001600160a01b0393841617909155600180548216968316969096179095556003805490951695169490941790925550506007805460ff1916905550620004db565b82805462000222906200046f565b90600052602060002090601f01602090048101928262000246576000855562000291565b82601f106200026157805160ff191683800117855562000291565b8280016001018555821562000291579182015b828111156200029157825182559160200191906001019062000274565b506200029f929150620002a3565b5090565b5b808211156200029f5760008155600101620002a4565b600082601f830112620002cc57600080fd5b81516001600160401b0380821115620002e957620002e9620004ac565b604051601f8301601f19908116603f01168101908282118183101715620003145762000314620004ac565b816040528381526020925086838588010111156200033157600080fd5b600091505b8382101562000355578582018301518183018401529082019062000336565b83821115620003675760008385830101525b9695505050505050565b6000602082840312156200038457600080fd5b81516200039181620004c2565b9392505050565b60008060008060808587031215620003af57600080fd5b8451620003bc81620004c2565b60208601516040870151606090970151919890975090945092505050565b60008060008060808587031215620003f157600080fd5b8451620003fe81620004c2565b60208601519094506200041181620004c2565b60408601519093506001600160401b03808211156200042f57600080fd5b6200043d88838901620002ba565b935060608701519150808211156200045457600080fd5b506200046387828801620002ba565b91505092959194509250565b600181811c908216806200048457607f821691505b60208210811415620004a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620004d857600080fd5b50565b61049380620004eb6000396000f3fe6080604052600436106100c05760003560e01c80637b4044a011610074578063cfd7b0df1161004e578063cfd7b0df14610243578063d7dfa0dd14610270578063e3b2594f146102a4576100c7565b80637b4044a01461020257806395d89b4114610218578063a001ecdd1461022d576100c7565b80631bb534ba116100a55780631bb534ba1461015c578063200d2ed2146101ae578063570ca735146101d5576100c7565b806306fdde031461010d57806318160ddd14610138576100c7565b366100c757005b604051366000823760008036837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d806000843e818015610109578184f35b8184fd5b34801561011957600080fd5b506101226102ba565b60405161012f9190610396565b60405180910390f35b34801561014457600080fd5b5061014e600a5481565b60405190815260200161012f565b34801561016857600080fd5b506002546101899073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012f565b3480156101ba57600080fd5b506007546101c89060ff1681565b60405161012f9190610355565b3480156101e157600080fd5b506001546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020e57600080fd5b5061014e60065481565b34801561022457600080fd5b50610122610348565b34801561023957600080fd5b5061014e60055481565b34801561024f57600080fd5b506003546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610189565b3480156102b057600080fd5b5061014e60045481565b600880546102c790610409565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390610409565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b505050505081565b600980546102c790610409565b6020810160028310610390577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156103c3578581018301518582016040015282016103a7565b818111156103d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061041d57607f821691505b60208210811415610457577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220f6ac1fd7363a36b71a4bc262e40ec0fb4ebd0a0da64a0227886f49edfcc9523864736f6c63430008060033a2646970667358221220b11a692bb72056752935bf0f9c71c94141298f08854749f4414ed9c26907229964736f6c634300080600330000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000008cd3dc90eaa8ec8d6391fca22eb72ba3400b3fba0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd800000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620001895760003560e01c8063c7af335211620000dd578063e4c0aaf4116200008b578063f1fe1663116200006e578063f1fe16631462000337578063f2fde38b146200034e578063ff39e710146200036557600080fd5b8063e4c0aaf4146200030c578063ed459df2146200032357600080fd5b8063d321de7311620000c0578063d321de7314620002cd578063d6811b6f14620002e4578063d7dfa0dd14620002f857600080fd5b8063c7af335214620002a5578063cfd7b0df14620002b957600080fd5b806379ba5097116200013b57806389035730116200011e5780638903573014620002265780638da5cb5b14620002715780638f32d59b146200028557600080fd5b806379ba509714620002055780637d48f05f146200020f57600080fd5b80632a0b17ee11620001705780632a0b17ee14620001cb578063715018a614620001e45780637185700014620001ee57600080fd5b80630c340a24146200018e57806323452b9c14620001bf575b600080fd5b600254620001a2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001c96200037c565b005b620001d560065481565b604051908152602001620001b6565b620001c9620003ee565b620001c9620001ff36600462000b8a565b62000486565b620001c96200051a565b620001a26200022036600462000bb1565b620005e4565b600754600854600954600a5462000246936001600160a01b031692919084565b604080516001600160a01b0390951685526020850193909352918301526060820152608001620001b6565b600054620001a2906001600160a01b031681565b6000546001600160a01b031633145b6040519015158152602001620001b6565b6002546001600160a01b0316331462000294565b600554620001a2906001600160a01b031681565b620001c9620002de36600462000b8a565b62000827565b600454620001a2906001600160a01b031681565b600354620001a2906001600160a01b031681565b620001c96200031d36600462000b8a565b620008bb565b6001546001600160a01b0316331462000294565b620001c96200034836600462000b8a565b6200094f565b620001c96200035f36600462000b8a565b620009e3565b620001c96200037636600462000c7f565b62000ab9565b6000546001600160a01b03163314620003dc5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e000000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319169055565b6000546001600160a01b031633146200044a5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003d3565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331480620004aa57506002546001600160a01b031633145b620004f85760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146200059c5760405162461bcd60e51b815260206004820152602c60248201527f63757272656e74206f776e6572206d757374207365742063616c6c657220617360448201527f206e657874206f776e65722e00000000000000000000000000000000000000006064820152608401620003d3565b600180546001600160a01b0319908116909155600080543392168217815560405182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3565b60006006548a6020013510156200063e5760405162461bcd60e51b815260206004820152600e60248201527f66656520697320746f6f206c6f770000000000000000000000000000000000006044820152606401620003d3565b604080516080810182526001600160a01b03861680825260208083018790528284018690528d8101356060909301839052600780546001600160a01b03191690921790915560088690556009859055600a919091559051620006a7918991899189910162000d85565b60405160208183030381529060405280519060200120600560009054906101000a90046001600160a01b0316868b8b8b8b604051620006e69062000b30565b620006f79695949392919062000ce2565b8190604051809103906000f590508015801562000718573d6000803e3d6000fd5b50600780546001600160a01b0319169055600060088190556009819055600a556040519091507f5133bb164b64ffa4461bc0c782a5c0e71cdc9d6c6ef5aa9af84f7fd2cd966d8e90620007779083908c908c908c908c908c9062000d33565b60405180910390a16004546001600160a01b0316633d2a6f7782620007a060208e018e62000b8a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156200080157600080fd5b505af115801562000816573d6000803e3d6000fd5b505050509998505050505050505050565b6000546001600160a01b03163314806200084b57506002546001600160a01b031633145b620008995760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480620008df57506002546001600160a01b031633145b6200092d5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806200097357506002546001600160a01b031633145b620009c15760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462000a3f5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420746865206f776e65722e00000000000000006044820152606401620003d3565b6001600160a01b03811662000a975760405162461bcd60e51b815260206004820152601f60248201527f4e657874206f776e657220697320746865207a65726f20616464726573732e006044820152606401620003d3565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148062000add57506002546001600160a01b031633145b62000b2b5760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f7420676f7665726e616e636500000000000000006044820152606401620003d3565b600655565b61097e8062000dce83390190565b60008083601f84011262000b5157600080fd5b50813567ffffffffffffffff81111562000b6a57600080fd5b60208301915083602082850101111562000b8357600080fd5b9250929050565b60006020828403121562000b9d57600080fd5b813562000baa8162000db4565b9392505050565b6000806000806000806000806000898b0361010081121562000bd257600080fd5b604081121562000be157600080fd5b5089985060408a013567ffffffffffffffff8082111562000c0157600080fd5b62000c0f8d838e0162000b3e565b909a50985060608c013591508082111562000c2957600080fd5b5062000c388c828d0162000b3e565b90975095505060808a013562000c4e8162000db4565b935060a08a013562000c608162000db4565b8093505060c08a0135915060e08a013590509295985092959850929598565b60006020828403121562000c9257600080fd5b5035919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60006001600160a01b0380891683528088166020840152506080604083015262000d1160808301868862000c99565b828103606084015262000d2681858762000c99565b9998505050505050505050565b60006001600160a01b0380891683526080602084015262000d5960808401888a62000c99565b838103604085015262000d6e81878962000c99565b925050808416606084015250979650505050505050565b60408152600062000d9b60408301858762000c99565b90506001600160a01b0383166020830152949350505050565b6001600160a01b038116811462000dca57600080fd5b5056fe60806040523480156200001157600080fd5b506040516200097e3803806200097e8339810160408190526200003491620003da565b8151829082906200004d90600890602085019062000214565b5080516200006390600990602084019062000214565b506000600a8190555050506000336001600160a01b031663d7dfa0dd6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620000ac57600080fd5b505af1158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e7919062000371565b9050807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55806001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2336001600160a01b031663890357306040518163ffffffff1660e01b8152600401608060405180830381600087803b1580156200017e57600080fd5b505af115801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000398565b600555600655600455600280546001600160a01b03199081166001600160a01b0393841617909155600180548216968316969096179095556003805490951695169490941790925550506007805460ff1916905550620004db565b82805462000222906200046f565b90600052602060002090601f01602090048101928262000246576000855562000291565b82601f106200026157805160ff191683800117855562000291565b8280016001018555821562000291579182015b828111156200029157825182559160200191906001019062000274565b506200029f929150620002a3565b5090565b5b808211156200029f5760008155600101620002a4565b600082601f830112620002cc57600080fd5b81516001600160401b0380821115620002e957620002e9620004ac565b604051601f8301601f19908116603f01168101908282118183101715620003145762000314620004ac565b816040528381526020925086838588010111156200033157600080fd5b600091505b8382101562000355578582018301518183018401529082019062000336565b83821115620003675760008385830101525b9695505050505050565b6000602082840312156200038457600080fd5b81516200039181620004c2565b9392505050565b60008060008060808587031215620003af57600080fd5b8451620003bc81620004c2565b60208601516040870151606090970151919890975090945092505050565b60008060008060808587031215620003f157600080fd5b8451620003fe81620004c2565b60208601519094506200041181620004c2565b60408601519093506001600160401b03808211156200042f57600080fd5b6200043d88838901620002ba565b935060608701519150808211156200045457600080fd5b506200046387828801620002ba565b91505092959194509250565b600181811c908216806200048457607f821691505b60208210811415620004a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620004d857600080fd5b50565b61049380620004eb6000396000f3fe6080604052600436106100c05760003560e01c80637b4044a011610074578063cfd7b0df1161004e578063cfd7b0df14610243578063d7dfa0dd14610270578063e3b2594f146102a4576100c7565b80637b4044a01461020257806395d89b4114610218578063a001ecdd1461022d576100c7565b80631bb534ba116100a55780631bb534ba1461015c578063200d2ed2146101ae578063570ca735146101d5576100c7565b806306fdde031461010d57806318160ddd14610138576100c7565b366100c757005b604051366000823760008036837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d806000843e818015610109578184f35b8184fd5b34801561011957600080fd5b506101226102ba565b60405161012f9190610396565b60405180910390f35b34801561014457600080fd5b5061014e600a5481565b60405190815260200161012f565b34801561016857600080fd5b506002546101899073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012f565b3480156101ba57600080fd5b506007546101c89060ff1681565b60405161012f9190610355565b3480156101e157600080fd5b506001546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020e57600080fd5b5061014e60065481565b34801561022457600080fd5b50610122610348565b34801561023957600080fd5b5061014e60055481565b34801561024f57600080fd5b506003546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610189565b3480156102b057600080fd5b5061014e60045481565b600880546102c790610409565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390610409565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b505050505081565b600980546102c790610409565b6020810160028310610390577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156103c3578581018301518582016040015282016103a7565b818111156103d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061041d57607f821691505b60208210811415610457577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220f6ac1fd7363a36b71a4bc262e40ec0fb4ebd0a0da64a0227886f49edfcc9523864736f6c63430008060033a2646970667358221220b11a692bb72056752935bf0f9c71c94141298f08854749f4414ed9c26907229964736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b570000000000000000000000008cd3dc90eaa8ec8d6391fca22eb72ba3400b3fba0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd800000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
-----Decoded View---------------
Arg [0] : owner_ (address): 0x2330ee705fFD040bB0cbA8CB7734Dfe00E7C4b57
Arg [1] : logic_ (address): 0x8Cd3dC90eAA8ec8d6391FCa22Eb72ba3400B3Fba
Arg [2] : tributaryRegistry_ (address): 0x1171B858777120a59a6cc8148eDda8982F187Cd8
Arg [3] : treasuryConfig_ (address): 0x21A93bE569666527dAe0FDBFbe7715299dEC1202
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000002330ee705ffd040bb0cba8cb7734dfe00e7c4b57
Arg [1] : 0000000000000000000000008cd3dc90eaa8ec8d6391fca22eb72ba3400b3fba
Arg [2] : 0000000000000000000000001171b858777120a59a6cc8148edda8982f187cd8
Arg [3] : 00000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.96
Net Worth in ETH
0.000454
Token Allocations
POL
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| POL | 100.00% | $0.095724 | 10 | $0.95724 |
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.