Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Active7DaysFundingCycleBallot
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./interfaces/ITerminalV1.sol";
import "./interfaces/IFundingCycleBallot.sol";
/**
@notice Manages votes towards approving funding cycle reconfigurations.
*/
contract Active7DaysFundingCycleBallot is IFundingCycleBallot {
// --- public stored properties --- //
/// @notice The number of seconds that must pass for a funding cycle reconfiguration to become active.
uint256 public constant reconfigurationDelay = 604800; // 7 days
// --- external views --- //
/**
@notice The time that this ballot is active for.
@dev A ballot should not be considered final until the duration has passed.
@return The durection in seconds.
*/
function duration() external pure override returns (uint256) {
return reconfigurationDelay;
}
/**
@notice The approval state of a particular funding cycle.
@param _configured The configuration of the funding cycle to check the state of.
@return The state of the provided ballot.
*/
function state(uint256, uint256 _configured)
external
view
override
returns (BallotState)
{
return
block.timestamp > _configured + reconfigurationDelay
? BallotState.Approved
: BallotState.Active;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "./ITicketBooth.sol";
import "./IFundingCycles.sol";
import "./IYielder.sol";
import "./IProjects.sol";
import "./IModStore.sol";
import "./ITerminal.sol";
import "./IOperatorStore.sol";
struct FundingCycleMetadata {
uint256 reservedRate;
uint256 bondingCurveRate;
uint256 reconfigurationBondingCurveRate;
}
interface ITerminalV1 {
event Configure(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
address caller
);
event Tap(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
address indexed beneficiary,
uint256 amount,
uint256 currency,
uint256 netTransferAmount,
uint256 beneficiaryTransferAmount,
uint256 govFeeAmount,
address caller
);
event Redeem(
address indexed holder,
address indexed beneficiary,
uint256 indexed _projectId,
uint256 amount,
uint256 returnAmount,
address caller
);
event PrintReserveTickets(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
address indexed beneficiary,
uint256 count,
uint256 beneficiaryTicketAmount,
address caller
);
event DistributeToPayoutMod(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
PayoutMod mod,
uint256 modCut,
address caller
);
event DistributeToTicketMod(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
TicketMod mod,
uint256 modCut,
address caller
);
event AppointGovernance(address governance);
event AcceptGovernance(address governance);
event PrintPreminedTickets(
uint256 indexed projectId,
address indexed beneficiary,
uint256 amount,
uint256 currency,
string memo,
address caller
);
event Deposit(uint256 amount);
event EnsureTargetLocalWei(uint256 target);
event SetYielder(IYielder newYielder);
event SetFee(uint256 _amount);
event SetTargetLocalWei(uint256 amount);
function governance() external view returns (address payable);
function pendingGovernance() external view returns (address payable);
function projects() external view returns (IProjects);
function fundingCycles() external view returns (IFundingCycles);
function ticketBooth() external view returns (ITicketBooth);
function prices() external view returns (IPrices);
function modStore() external view returns (IModStore);
function reservedTicketBalanceOf(uint256 _projectId, uint256 _reservedRate)
external
view
returns (uint256);
function canPrintPreminedTickets(uint256 _projectId)
external
view
returns (bool);
function balanceOf(uint256 _projectId) external view returns (uint256);
function currentOverflowOf(uint256 _projectId)
external
view
returns (uint256);
function claimableOverflowOf(
address _account,
uint256 _amount,
uint256 _projectId
) external view returns (uint256);
function fee() external view returns (uint256);
function deploy(
address _owner,
bytes32 _handle,
string calldata _uri,
FundingCycleProperties calldata _properties,
FundingCycleMetadata calldata _metadata,
PayoutMod[] memory _payoutMods,
TicketMod[] memory _ticketMods
) external;
function configure(
uint256 _projectId,
FundingCycleProperties calldata _properties,
FundingCycleMetadata calldata _metadata,
PayoutMod[] memory _payoutMods,
TicketMod[] memory _ticketMods
) external returns (uint256);
function printPreminedTickets(
uint256 _projectId,
uint256 _amount,
uint256 _currency,
address _beneficiary,
string memory _memo,
bool _preferUnstakedTickets
) external;
function tap(
uint256 _projectId,
uint256 _amount,
uint256 _currency,
uint256 _minReturnedWei
) external returns (uint256);
function redeem(
address _account,
uint256 _projectId,
uint256 _amount,
uint256 _minReturnedWei,
address payable _beneficiary,
bool _preferUnstaked
) external returns (uint256 returnAmount);
function printReservedTickets(uint256 _projectId)
external
returns (uint256 reservedTicketsToPrint);
function setFee(uint256 _fee) external;
function appointGovernance(address payable _pendingGovernance) external;
function acceptGovernance() external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./ITerminalV1.sol";
enum BallotState {
Approved,
Active,
Failed,
Standby
}
interface IFundingCycleBallot {
function duration() external view returns (uint256);
function state(uint256 _fundingCycleId, uint256 _configured)
external
view
returns (BallotState);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./IProjects.sol";
import "./IOperatorStore.sol";
import "./ITickets.sol";
interface ITicketBooth {
event Issue(
uint256 indexed projectId,
string name,
string symbol,
address caller
);
event Print(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
bool convertedTickets,
bool preferUnstakedTickets,
address controller
);
event Redeem(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
uint256 stakedTickets,
bool preferUnstaked,
address controller
);
event Stake(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
address caller
);
event Unstake(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
address caller
);
event Lock(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
address caller
);
event Unlock(
address indexed holder,
uint256 indexed projectId,
uint256 amount,
address caller
);
event Transfer(
address indexed holder,
uint256 indexed projectId,
address indexed recipient,
uint256 amount,
address caller
);
function ticketsOf(uint256 _projectId) external view returns (ITickets);
function projects() external view returns (IProjects);
function lockedBalanceOf(address _holder, uint256 _projectId)
external
view
returns (uint256);
function lockedBalanceBy(
address _operator,
address _holder,
uint256 _projectId
) external view returns (uint256);
function stakedBalanceOf(address _holder, uint256 _projectId)
external
view
returns (uint256);
function stakedTotalSupplyOf(uint256 _projectId)
external
view
returns (uint256);
function totalSupplyOf(uint256 _projectId) external view returns (uint256);
function balanceOf(address _holder, uint256 _projectId)
external
view
returns (uint256 _result);
function issue(
uint256 _projectId,
string calldata _name,
string calldata _symbol
) external;
function print(
address _holder,
uint256 _projectId,
uint256 _amount,
bool _preferUnstakedTickets
) external;
function redeem(
address _holder,
uint256 _projectId,
uint256 _amount,
bool _preferUnstaked
) external;
function stake(
address _holder,
uint256 _projectId,
uint256 _amount
) external;
function unstake(
address _holder,
uint256 _projectId,
uint256 _amount
) external;
function lock(
address _holder,
uint256 _projectId,
uint256 _amount
) external;
function unlock(
address _holder,
uint256 _projectId,
uint256 _amount
) external;
function transfer(
address _holder,
uint256 _projectId,
uint256 _amount,
address _recipient
) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./IPrices.sol";
import "./IProjects.sol";
import "./IFundingCycleBallot.sol";
/// @notice The funding cycle structure represents a project stewarded by an address, and accounts for which addresses have helped sustain the project.
struct FundingCycle {
// A unique number that's incremented for each new funding cycle, starting with 1.
uint256 id;
// The ID of the project contract that this funding cycle belongs to.
uint256 projectId;
// The number of this funding cycle for the project.
uint256 number;
// The ID of a previous funding cycle that this one is based on.
uint256 basedOn;
// The time when this funding cycle was last configured.
uint256 configured;
// The number of cycles that this configuration should last for before going back to the last permanent.
uint256 cycleLimit;
// A number determining the amount of redistribution shares this funding cycle will issue to each sustainer.
uint256 weight;
// The ballot contract to use to determine a subsequent funding cycle's reconfiguration status.
IFundingCycleBallot ballot;
// The time when this funding cycle will become active.
uint256 start;
// The number of seconds until this funding cycle's surplus is redistributed.
uint256 duration;
// The amount that this funding cycle is targeting in terms of the currency.
uint256 target;
// The currency that the target is measured in.
uint256 currency;
// The percentage of each payment to send as a fee to the Juicebox admin.
uint256 fee;
// A percentage indicating how much more weight to give a funding cycle compared to its predecessor.
uint256 discountRate;
// The amount of available funds that have been tapped by the project in terms of the currency.
uint256 tapped;
// A packed list of extra data. The first 8 bytes are reserved for versioning.
uint256 metadata;
}
struct FundingCycleProperties {
uint256 target;
uint256 currency;
uint256 duration;
uint256 cycleLimit;
uint256 discountRate;
IFundingCycleBallot ballot;
}
interface IFundingCycles {
event Configure(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
uint256 reconfigured,
FundingCycleProperties _properties,
uint256 metadata,
address caller
);
event Tap(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
uint256 amount,
uint256 newTappedAmount,
address caller
);
event Init(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
uint256 number,
uint256 previous,
uint256 weight,
uint256 start
);
function latestIdOf(uint256 _projectId) external view returns (uint256);
function count() external view returns (uint256);
function BASE_WEIGHT() external view returns (uint256);
function MAX_CYCLE_LIMIT() external view returns (uint256);
function get(uint256 _fundingCycleId)
external
view
returns (FundingCycle memory);
function queuedOf(uint256 _projectId)
external
view
returns (FundingCycle memory);
function currentOf(uint256 _projectId)
external
view
returns (FundingCycle memory);
function currentBallotStateOf(uint256 _projectId)
external
view
returns (BallotState);
function configure(
uint256 _projectId,
FundingCycleProperties calldata _properties,
uint256 _metadata,
uint256 _fee,
bool _configureActiveFundingCycle
) external returns (FundingCycle memory fundingCycle);
function tap(uint256 _projectId, uint256 _amount)
external
returns (FundingCycle memory fundingCycle);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./ITerminalV1.sol";
// In constructure, give unlimited access for TerminalV1 to take money from this.
interface IYielder {
function deposited() external view returns (uint256);
function getCurrentBalance() external view returns (uint256);
function deposit() external payable;
function withdraw(uint256 _amount, address payable _beneficiary) external;
function withdrawAll(address payable _beneficiary)
external
returns (uint256);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "./ITerminal.sol";
import "./IOperatorStore.sol";
interface IProjects is IERC721 {
event Create(
uint256 indexed projectId,
address indexed owner,
bytes32 indexed handle,
string uri,
ITerminal terminal,
address caller
);
event SetHandle(
uint256 indexed projectId,
bytes32 indexed handle,
address caller
);
event SetUri(uint256 indexed projectId, string uri, address caller);
event TransferHandle(
uint256 indexed projectId,
address indexed to,
bytes32 indexed handle,
bytes32 newHandle,
address caller
);
event ClaimHandle(
address indexed account,
uint256 indexed projectId,
bytes32 indexed handle,
address caller
);
event ChallengeHandle(
bytes32 indexed handle,
uint256 challengeExpiry,
address caller
);
event RenewHandle(
bytes32 indexed handle,
uint256 indexed projectId,
address caller
);
function count() external view returns (uint256);
function uriOf(uint256 _projectId) external view returns (string memory);
function handleOf(uint256 _projectId) external returns (bytes32 handle);
function projectFor(bytes32 _handle) external returns (uint256 projectId);
function transferAddressFor(bytes32 _handle)
external
returns (address receiver);
function challengeExpiryOf(bytes32 _handle) external returns (uint256);
function exists(uint256 _projectId) external view returns (bool);
function create(
address _owner,
bytes32 _handle,
string calldata _uri,
ITerminal _terminal
) external returns (uint256 id);
function setHandle(uint256 _projectId, bytes32 _handle) external;
function setUri(uint256 _projectId, string calldata _uri) external;
function transferHandle(
uint256 _projectId,
address _to,
bytes32 _newHandle
) external returns (bytes32 _handle);
function claimHandle(
bytes32 _handle,
address _for,
uint256 _projectId
) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./IOperatorStore.sol";
import "./IProjects.sol";
import "./IModAllocator.sol";
struct PayoutMod {
bool preferUnstaked;
uint16 percent;
uint48 lockedUntil;
address payable beneficiary;
IModAllocator allocator;
uint56 projectId;
}
struct TicketMod {
bool preferUnstaked;
uint16 percent;
uint48 lockedUntil;
address payable beneficiary;
}
interface IModStore {
event SetPayoutMod(
uint256 indexed projectId,
uint256 indexed configuration,
PayoutMod mods,
address caller
);
event SetTicketMod(
uint256 indexed projectId,
uint256 indexed configuration,
TicketMod mods,
address caller
);
function projects() external view returns (IProjects);
function payoutModsOf(uint256 _projectId, uint256 _configuration)
external
view
returns (PayoutMod[] memory);
function ticketModsOf(uint256 _projectId, uint256 _configuration)
external
view
returns (TicketMod[] memory);
function setPayoutMods(
uint256 _projectId,
uint256 _configuration,
PayoutMod[] memory _mods
) external;
function setTicketMods(
uint256 _projectId,
uint256 _configuration,
TicketMod[] memory _mods
) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./ITerminalDirectory.sol";
interface ITerminal {
event Pay(
uint256 indexed fundingCycleId,
uint256 indexed projectId,
address indexed beneficiary,
uint256 amount,
string note,
address caller
);
event AddToBalance(
uint256 indexed projectId,
uint256 value,
address caller
);
event AllowMigration(ITerminal allowed);
event Migrate(
uint256 indexed projectId,
ITerminal indexed to,
uint256 _amount,
address caller
);
function terminalDirectory() external view returns (ITerminalDirectory);
function migrationIsAllowed(ITerminal _terminal)
external
view
returns (bool);
function pay(
uint256 _projectId,
address _beneficiary,
string calldata _memo,
bool _preferUnstakedTickets
) external payable returns (uint256 fundingCycleId);
function addToBalance(uint256 _projectId) external payable;
function allowMigration(ITerminal _contract) external;
function migrate(uint256 _projectId, ITerminal _to) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
interface IOperatorStore {
event SetOperator(
address indexed operator,
address indexed account,
uint256 indexed domain,
uint256[] permissionIndexes,
uint256 packed
);
function permissionsOf(
address _operator,
address _account,
uint256 _domain
) external view returns (uint256);
function hasPermission(
address _operator,
address _account,
uint256 _domain,
uint256 _permissionIndex
) external view returns (bool);
function hasPermissions(
address _operator,
address _account,
uint256 _domain,
uint256[] calldata _permissionIndexes
) external view returns (bool);
function setOperator(
address _operator,
uint256 _domain,
uint256[] calldata _permissionIndexes
) external;
function setOperators(
address[] calldata _operators,
uint256[] calldata _domains,
uint256[][] calldata _permissionIndexes
) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface ITickets is IERC20 {
function print(address _account, uint256 _amount) external;
function redeem(address _account, uint256 _amount) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./IDirectPaymentAddress.sol";
import "./ITerminal.sol";
import "./IProjects.sol";
import "./IProjects.sol";
interface ITerminalDirectory {
event DeployAddress(
uint256 indexed projectId,
string memo,
address indexed caller
);
event SetTerminal(
uint256 indexed projectId,
ITerminal indexed terminal,
address caller
);
event SetPayerPreferences(
address indexed account,
address beneficiary,
bool preferUnstakedTickets
);
function projects() external view returns (IProjects);
function terminalOf(uint256 _projectId) external view returns (ITerminal);
function beneficiaryOf(address _account) external returns (address);
function unstakedTicketsPreferenceOf(address _account)
external
returns (bool);
function addressesOf(uint256 _projectId)
external
view
returns (IDirectPaymentAddress[] memory);
function deployAddress(uint256 _projectId, string calldata _memo) external;
function setTerminal(uint256 _projectId, ITerminal _terminal) external;
function setPayerPreferences(
address _beneficiary,
bool _preferUnstakedTickets
) external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "./ITerminalDirectory.sol";
import "./ITerminal.sol";
interface IDirectPaymentAddress {
event Forward(
address indexed payer,
uint256 indexed projectId,
address beneficiary,
uint256 value,
string memo,
bool preferUnstakedTickets
);
function terminalDirectory() external returns (ITerminalDirectory);
function projectId() external returns (uint256);
function memo() external returns (string memory);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
interface IPrices {
event AddFeed(uint256 indexed currency, AggregatorV3Interface indexed feed);
function feedDecimalAdjuster(uint256 _currency) external returns (uint256);
function targetDecimals() external returns (uint256);
function feedFor(uint256 _currency)
external
returns (AggregatorV3Interface);
function getETHPriceFor(uint256 _currency) external view returns (uint256);
function addFeed(AggregatorV3Interface _priceFeed, uint256 _currency)
external;
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
// getRoundData and latestRoundData should both raise "No data present"
// if they do not have data to report, instead of returning unset values
// which could be misinterpreted as actual reported values.
function getRoundData(uint80 _roundId)
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;
interface IModAllocator {
event Allocate(
uint256 indexed projectId,
uint256 indexed forProjectId,
address indexed beneficiary,
uint256 amount,
address caller
);
function allocate(
uint256 _projectId,
uint256 _forProjectId,
address _beneficiary
) external payable;
}{
"optimizer": {
"enabled": true,
"runs": 10000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"reconfigurationDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"_configured","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum BallotState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061018a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806304f49616146100465780630fb5a6b4146100635780634d393dc91461006c575b600080fd5b61005062093a8081565b6040519081526020015b60405180910390f35b62093a80610050565b61007f61007a3660046100b2565b61008c565b60405161005a91906100d4565b600061009b62093a8083610115565b42116100a85760016100ab565b60005b9392505050565b600080604083850312156100c557600080fd5b50508035926020909101359150565b602081016004831061010f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000821982111561014f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220750eea09d207d32be7cc6fbb3414bc3475e8ff5dd4aa9277b466cf4afaf386b264736f6c63430008060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100415760003560e01c806304f49616146100465780630fb5a6b4146100635780634d393dc91461006c575b600080fd5b61005062093a8081565b6040519081526020015b60405180910390f35b62093a80610050565b61007f61007a3660046100b2565b61008c565b60405161005a91906100d4565b600061009b62093a8083610115565b42116100a85760016100ab565b60005b9392505050565b600080604083850312156100c557600080fd5b50508035926020909101359150565b602081016004831061010f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000821982111561014f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220750eea09d207d32be7cc6fbb3414bc3475e8ff5dd4aa9277b466cf4afaf386b264736f6c63430008060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.