Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 11751950 | 1849 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DssSpell
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-01-29
*/
// SPDX-License-Identifier: GPL-3.0-or-later
// hevm: flattened sources of src/DssSpell.sol
pragma solidity =0.6.11 >=0.6.11 <0.7.0;
////// lib/dss-exec-lib/src/CollateralOpts.sol
/* pragma solidity ^0.6.11; */
struct CollateralOpts {
bytes32 ilk;
address gem;
address join;
address flip;
address pip;
bool isLiquidatable;
bool isOSM;
bool whitelistOSM;
uint256 ilkDebtCeiling;
uint256 minVaultAmount;
uint256 maxLiquidationAmount;
uint256 liquidationPenalty;
uint256 ilkStabilityFee;
uint256 bidIncrease;
uint256 bidDuration;
uint256 auctionDuration;
uint256 liquidationRatio;
}
////// lib/dss-exec-lib/src/DssAction.sol
//
// DssAction.sol -- DSS Executive Spell Actions
//
// Copyright (C) 2020 Maker Ecosystem Growth Holdings, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
/* pragma solidity ^0.6.11; */
/* import "./CollateralOpts.sol"; */
// https://github.com/makerdao/dss-chain-log
interface ChainlogLike {
function getAddress(bytes32) external view returns (address);
}
interface RegistryLike {
function ilkData(bytes32) external view returns (
uint256 pos,
address gem,
address pip,
address join,
address flip,
uint256 dec,
string memory name,
string memory symbol
);
}
// Includes Median and OSM functions
interface OracleLike {
function src() external view returns (address);
function lift(address[] calldata) external;
function drop(address[] calldata) external;
function setBar(uint256) external;
function kiss(address) external;
function diss(address) external;
function kiss(address[] calldata) external;
function diss(address[] calldata) external;
}
abstract contract DssAction {
address public immutable lib;
bool public immutable officeHours;
// Changelog address applies to MCD deployments on
// mainnet, kovan, rinkeby, ropsten, and goerli
address constant public LOG = 0xdA0Ab1e0017DEbCd72Be8599041a2aa3bA7e740F;
constructor(address lib_, bool officeHours_) public {
lib = lib_;
officeHours = officeHours_;
}
// DssExec calls execute. We limit this function subject to officeHours modifier.
function execute() external limited {
actions();
}
// DssAction developer must override `actions()` and place all actions to be called inside.
// The DssExec function will call this subject to the officeHours limiter
// By keeping this function public we allow simulations of `execute()` on the actions outside of the cast time.
function actions() public virtual;
// Modifier required to
modifier limited {
if (officeHours) {
uint day = (block.timestamp / 1 days + 3) % 7;
require(day < 5, "Can only be cast on a weekday");
uint hour = block.timestamp / 1 hours % 24;
require(hour >= 14 && hour < 21, "Outside office hours");
}
_;
}
/****************************/
/*** Core Address Helpers ***/
/****************************/
function vat() internal view returns (address) { return getChangelogAddress("MCD_VAT"); }
function cat() internal view returns (address) { return getChangelogAddress("MCD_CAT"); }
function jug() internal view returns (address) { return getChangelogAddress("MCD_JUG"); }
function pot() internal view returns (address) { return getChangelogAddress("MCD_POT"); }
function vow() internal view returns (address) { return getChangelogAddress("MCD_VOW"); }
function end() internal view returns (address) { return getChangelogAddress("MCD_END"); }
function reg() internal view returns (address) { return getChangelogAddress("ILK_REGISTRY"); }
function spot() internal view returns (address) { return getChangelogAddress("MCD_SPOT"); }
function flap() internal view returns (address) { return getChangelogAddress("MCD_FLAP"); }
function flop() internal view returns (address) { return getChangelogAddress("MCD_FLOP"); }
function osmMom() internal view returns (address) { return getChangelogAddress("OSM_MOM"); }
function govGuard() internal view returns (address) { return getChangelogAddress("GOV_GUARD"); }
function flipperMom() internal view returns (address) { return getChangelogAddress("FLIPPER_MOM"); }
function autoLine() internal view returns (address) { return getChangelogAddress("MCD_IAM_AUTO_LINE"); }
function flip(bytes32 ilk) internal view returns (address) {
(,,,, address _flip,,,) = RegistryLike(reg()).ilkData(ilk);
return _flip;
}
function getChangelogAddress(bytes32 key) internal view returns (address) {
return ChainlogLike(LOG).getAddress(key);
}
function libcall(bytes memory data) internal {
(bool ok,) = lib.delegatecall(data);
require(ok, "DssAction/failed-lib-call");
}
/****************************/
/*** Changelog Management ***/
/****************************/
function setChangelogAddress(bytes32 key, address value) internal {
libcall(abi.encodeWithSignature("setChangelogAddress(address,bytes32,address)", LOG, key, value));
}
function setChangelogVersion(string memory version) internal {
libcall(abi.encodeWithSignature("setChangelogVersion(address,string)", LOG, version));
}
function setChangelogIPFS(string memory ipfs) internal {
libcall(abi.encodeWithSignature("setChangelogIPFS(address,string)", LOG, ipfs));
}
function setChangelogSHA256(string memory SHA256) internal {
libcall(abi.encodeWithSignature("setChangelogSHA256(address,string)", LOG, SHA256));
}
/**********************/
/*** Authorizations ***/
/**********************/
function authorize(address base, address ward) internal virtual {
libcall(abi.encodeWithSignature("authorize(address,address)", base, ward));
}
function deauthorize(address base, address ward) internal {
libcall(abi.encodeWithSignature("deauthorize(address,address)", base, ward));
}
/**************************/
/*** Accumulating Rates ***/
/**************************/
function accumulateDSR() internal {
libcall(abi.encodeWithSignature("accumulateDSR(address)", pot()));
}
function accumulateCollateralStabilityFees(bytes32 ilk) internal {
libcall(abi.encodeWithSignature("accumulateCollateralStabilityFees(address,bytes32)", jug(), ilk));
}
/*********************/
/*** Price Updates ***/
/*********************/
function updateCollateralPrice(bytes32 ilk) internal {
libcall(abi.encodeWithSignature("updateCollateralPrice(address,bytes32)", spot(), ilk));
}
/****************************/
/*** System Configuration ***/
/****************************/
function setContract(address base, bytes32 what, address addr) internal {
libcall(abi.encodeWithSignature("setContract(address,bytes32,address)", base, what, addr));
}
function setContract(address base, bytes32 ilk, bytes32 what, address addr) internal {
libcall(abi.encodeWithSignature("setContract(address,bytes32,bytes32,address)", base, ilk, what, addr));
}
/******************************/
/*** System Risk Parameters ***/
/******************************/
function setGlobalDebtCeiling(uint256 amount) internal {
libcall(abi.encodeWithSignature("setGlobalDebtCeiling(address,uint256)", vat(), amount));
}
function increaseGlobalDebtCeiling(uint256 amount) internal {
libcall(abi.encodeWithSignature("increaseGlobalDebtCeiling(address,uint256)", vat(), amount));
}
function decreaseGlobalDebtCeiling(uint256 amount) internal {
libcall(abi.encodeWithSignature("decreaseGlobalDebtCeiling(address,uint256)", vat(), amount));
}
function setDSR(uint256 rate) internal {
libcall(abi.encodeWithSignature("setDSR(address,uint256)", pot(), rate));
}
function setSurplusAuctionAmount(uint256 amount) internal {
libcall(abi.encodeWithSignature("setSurplusAuctionAmount(address,uint256)", vow(), amount));
}
function setSurplusBuffer(uint256 amount) internal {
libcall(abi.encodeWithSignature("setSurplusBuffer(address,uint256)", vow(), amount));
}
function setMinSurplusAuctionBidIncrease(uint256 pct_bps) internal {
libcall(abi.encodeWithSignature("setMinSurplusAuctionBidIncrease(address,uint256)", flap(), pct_bps));
}
function setSurplusAuctionBidDuration(uint256 duration) internal {
libcall(abi.encodeWithSignature("setSurplusAuctionBidDuration(address,uint256)", flap(), duration));
}
function setSurplusAuctionDuration(uint256 duration) internal {
libcall(abi.encodeWithSignature("setSurplusAuctionDuration(address,uint256)", flap(), duration));
}
function setDebtAuctionDelay(uint256 duration) internal {
libcall(abi.encodeWithSignature("setDebtAuctionDelay(address,uint256)", vow(), duration));
}
function setDebtAuctionDAIAmount(uint256 amount) internal {
libcall(abi.encodeWithSignature("setDebtAuctionDAIAmount(address,uint256)", vow(), amount));
}
function setDebtAuctionMKRAmount(uint256 amount) internal {
libcall(abi.encodeWithSignature("setDebtAuctionMKRAmount(address,uint256)", vow(), amount));
}
function setMinDebtAuctionBidIncrease(uint256 pct_bps) internal {
libcall(abi.encodeWithSignature("setMinDebtAuctionBidIncrease(address,uint256)", flop(), pct_bps));
}
function setDebtAuctionBidDuration(uint256 duration) internal {
libcall(abi.encodeWithSignature("setDebtAuctionBidDuration(address,uint256)", flop(), duration));
}
function setDebtAuctionDuration(uint256 duration) internal {
libcall(abi.encodeWithSignature("setDebtAuctionDuration(address,uint256)", flop(), duration));
}
function setDebtAuctionMKRIncreaseRate(uint256 pct_bps) internal {
libcall(abi.encodeWithSignature("setDebtAuctionMKRIncreaseRate(address,uint256)", flop(), pct_bps));
}
function setMaxTotalDAILiquidationAmount(uint256 amount) internal {
libcall(abi.encodeWithSignature("setMaxTotalDAILiquidationAmount(address,uint256)", cat(), amount));
}
function setEmergencyShutdownProcessingTime(uint256 duration) internal {
libcall(abi.encodeWithSignature("setEmergencyShutdownProcessingTime(address,uint256)", end(), duration));
}
function setGlobalStabilityFee(uint256 rate) internal {
libcall(abi.encodeWithSignature("setGlobalStabilityFee(address,uint256)", jug(), rate));
}
function setDAIReferenceValue(uint256 value) internal {
libcall(abi.encodeWithSignature("setDAIReferenceValue(address,uint256)", spot(),value));
}
/*****************************/
/*** Collateral Management ***/
/*****************************/
function setIlkDebtCeiling(bytes32 ilk, uint256 amount) internal {
libcall(abi.encodeWithSignature("setIlkDebtCeiling(address,bytes32,uint256)", vat(), ilk, amount));
}
function increaseIlkDebtCeiling(bytes32 ilk, uint256 amount) internal {
libcall(abi.encodeWithSignature("increaseIlkDebtCeiling(address,bytes32,uint256,bool)", vat(), ilk, amount, true));
}
function decreaseIlkDebtCeiling(bytes32 ilk, uint256 amount) internal {
libcall(abi.encodeWithSignature("decreaseIlkDebtCeiling(address,bytes32,uint256,bool)", vat(), ilk, amount, true));
}
function setIlkAutoLineParameters(bytes32 ilk, uint256 amount, uint256 gap, uint256 ttl) internal {
libcall(abi.encodeWithSignature("setIlkAutoLineParameters(address,bytes32,uint256,uint256,uint256)", autoLine(), ilk, amount, gap, ttl));
}
function setIlkAutoLineDebtCeiling(bytes32 ilk, uint256 amount) internal {
libcall(abi.encodeWithSignature("setIlkAutoLineDebtCeiling(address,bytes32,uint256)", autoLine(), ilk, amount));
}
function removeIlkFromAutoLine(bytes32 ilk) internal {
libcall(abi.encodeWithSignature("removeIlkFromAutoLine(address,bytes32)", autoLine(), ilk));
}
function setIlkMinVaultAmount(bytes32 ilk, uint256 amount) internal {
libcall(abi.encodeWithSignature("setIlkMinVaultAmount(address,bytes32,uint256)", vat(), ilk, amount));
}
function setIlkLiquidationPenalty(bytes32 ilk, uint256 pct_bps) internal {
libcall(abi.encodeWithSignature("setIlkLiquidationPenalty(address,bytes32,uint256)", cat(), ilk, pct_bps));
}
function setIlkMaxLiquidationAmount(bytes32 ilk, uint256 amount) internal {
libcall(abi.encodeWithSignature("setIlkMaxLiquidationAmount(address,bytes32,uint256)", cat(), ilk, amount));
}
function setIlkLiquidationRatio(bytes32 ilk, uint256 pct_bps) internal {
libcall(abi.encodeWithSignature("setIlkLiquidationRatio(address,bytes32,uint256)", spot(), ilk, pct_bps));
}
function setIlkMinAuctionBidIncrease(bytes32 ilk, uint256 pct_bps) internal {
libcall(abi.encodeWithSignature("setIlkMinAuctionBidIncrease(address,uint256)", flip(ilk), pct_bps));
}
function setIlkBidDuration(bytes32 ilk, uint256 duration) internal {
libcall(abi.encodeWithSignature("setIlkBidDuration(address,uint256)", flip(ilk), duration));
}
function setIlkAuctionDuration(bytes32 ilk, uint256 duration) internal {
libcall(abi.encodeWithSignature("setIlkAuctionDuration(address,uint256)", flip(ilk), duration));
}
function setIlkStabilityFee(bytes32 ilk, uint256 rate) internal {
libcall(abi.encodeWithSignature("setIlkStabilityFee(address,bytes32,uint256,bool)", jug(), ilk, rate, true));
}
/***********************/
/*** Core Management ***/
/***********************/
function updateCollateralAuctionContract(bytes32 ilk, address newFlip, address oldFlip) internal {
libcall(abi.encodeWithSignature("updateCollateralAuctionContract(address,address,address,address,bytes32,address,address)", vat(), cat(), end(), flipperMom(), ilk, newFlip, oldFlip));
}
function updateSurplusAuctionContract(address newFlap, address oldFlap) internal {
libcall(abi.encodeWithSignature("updateSurplusAuctionContract(address,address,address,address)", vat(), vow(), newFlap, oldFlap));
}
function updateDebtAuctionContract(address newFlop, address oldFlop) internal {
libcall(abi.encodeWithSignature("updateDebtAuctionContract(address,address,address,address,address)", vat(), vow(), govGuard(), newFlop, oldFlop));
}
/*************************/
/*** Oracle Management ***/
/*************************/
function addWritersToMedianWhitelist(address medianizer, address[] memory feeds) internal {
libcall(abi.encodeWithSignature("addWritersToMedianWhitelist(address,address[])", medianizer, feeds));
}
function removeWritersFromMedianWhitelist(address medianizer, address[] memory feeds) internal {
libcall(abi.encodeWithSignature("removeWritersFromMedianWhitelist(address,address[])", medianizer, feeds));
}
function addReadersToMedianWhitelist(address medianizer, address[] memory readers) internal {
libcall(abi.encodeWithSignature("addReadersToMedianWhitelist(address,address[])", medianizer, readers));
}
function addReaderToMedianWhitelist(address medianizer, address reader) internal {
libcall(abi.encodeWithSignature("addReaderToMedianWhitelist(address,address)", medianizer, reader));
}
function removeReadersFromMedianWhitelist(address medianizer, address[] memory readers) internal {
libcall(abi.encodeWithSignature("removeReadersFromMedianWhitelist(address,address[])", medianizer, readers));
}
function removeReaderFromMedianWhitelist(address medianizer, address reader) internal {
libcall(abi.encodeWithSignature("removeReaderFromMedianWhitelist(address,address)", medianizer, reader));
}
function setMedianWritersQuorum(address medianizer, uint256 minQuorum) internal {
libcall(abi.encodeWithSignature("setMedianWritersQuorum(address,uint256)", medianizer, minQuorum));
}
function addReaderToOSMWhitelist(address osm, address reader) internal {
libcall(abi.encodeWithSignature("addReaderToOSMWhitelist(address,address)", osm, reader));
}
function removeReaderFromOSMWhitelist(address osm, address reader) internal {
libcall(abi.encodeWithSignature("removeReaderFromOSMWhitelist(address,address)", osm, reader));
}
function allowOSMFreeze(address osm, bytes32 ilk) internal {
libcall(abi.encodeWithSignature("allowOSMFreeze(address,address,bytes32)", osmMom(), osm, ilk));
}
/*****************************/
/*** Collateral Onboarding ***/
/*****************************/
// Minimum actions to onboard a collateral to the system with 0 line.
function addCollateralBase(bytes32 ilk, address gem, address join, address flipper, address pip) internal {
libcall(abi.encodeWithSignature(
"addCollateralBase(address,address,address,address,address,address,bytes32,address,address,address,address)",
vat(), cat(), jug(), end(), spot(), reg(), ilk, gem, join, flipper, pip
));
}
// Complete collateral onboarding logic.
function addNewCollateral(CollateralOpts memory co) internal {
// Add the collateral to the system.
addCollateralBase(co.ilk, co.gem, co.join, co.flip, co.pip);
// Allow FlipperMom to access to the ilk Flipper
authorize(co.flip, flipperMom());
// Disallow Cat to kick auctions in ilk Flipper
if(!co.isLiquidatable) deauthorize(flipperMom(), co.flip);
if(co.isOSM) { // If pip == OSM
// Allow OsmMom to access to the TOKEN OSM
authorize(co.pip, osmMom());
if (co.whitelistOSM) { // If median is src in OSM
// Whitelist OSM to read the Median data (only necessary if it is the first time the token is being added to an ilk)
addReaderToMedianWhitelist(address(OracleLike(co.pip).src()), co.pip);
}
// Whitelist Spotter to read the OSM data (only necessary if it is the first time the token is being added to an ilk)
addReaderToOSMWhitelist(co.pip, spot());
// Whitelist End to read the OSM data (only necessary if it is the first time the token is being added to an ilk)
addReaderToOSMWhitelist(co.pip, end());
// Set TOKEN OSM in the OsmMom for new ilk
allowOSMFreeze(co.pip, co.ilk);
}
// Increase the global debt ceiling by the ilk ceiling
increaseGlobalDebtCeiling(co.ilkDebtCeiling);
// Set the ilk debt ceiling
setIlkDebtCeiling(co.ilk, co.ilkDebtCeiling);
// Set the ilk dust
setIlkMinVaultAmount(co.ilk, co.minVaultAmount);
// Set the dunk size
setIlkMaxLiquidationAmount(co.ilk, co.maxLiquidationAmount);
// Set the ilk liquidation penalty
setIlkLiquidationPenalty(co.ilk, co.liquidationPenalty);
// Set the ilk stability fee
setIlkStabilityFee(co.ilk, co.ilkStabilityFee);
// Set the ilk percentage between bids
setIlkMinAuctionBidIncrease(co.ilk, co.bidIncrease);
// Set the ilk time max time between bids
setIlkBidDuration(co.ilk, co.bidDuration);
// Set the ilk max auction duration
setIlkAuctionDuration(co.ilk, co.auctionDuration);
// Set the ilk min collateralization ratio
setIlkLiquidationRatio(co.ilk, co.liquidationRatio);
// Update ilk spot value in Vat
updateCollateralPrice(co.ilk);
}
}
////// lib/dss-exec-lib/src/DssExec.sol
//
// DssExec.sol -- MakerDAO Executive Spell Template
//
// Copyright (C) 2020 Maker Ecosystem Growth Holdings, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
/* pragma solidity ^0.6.11; */
interface PauseAbstract {
function delay() external view returns (uint256);
function plot(address, bytes32, bytes calldata, uint256) external;
function exec(address, bytes32, bytes calldata, uint256) external returns (bytes memory);
}
interface Changelog {
function getAddress(bytes32) external view returns (address);
}
interface SpellAction {
function officeHours() external view returns (bool);
}
contract DssExec {
Changelog constant public log = Changelog(0xdA0Ab1e0017DEbCd72Be8599041a2aa3bA7e740F);
uint256 public eta;
bytes public sig;
bool public done;
bytes32 immutable public tag;
address immutable public action;
uint256 immutable public expiration;
PauseAbstract immutable public pause;
// Provides a descriptive tag for bot consumption
// This should be modified weekly to provide a summary of the actions
// Hash: seth keccak -- "$(wget https://<executive-vote-canonical-post> -q -O - 2>/dev/null)"
string public description;
function officeHours() external view returns (bool) {
return SpellAction(action).officeHours();
}
function nextCastTime() external view returns (uint256 castTime) {
require(eta != 0, "DssExec/spell-not-scheduled");
castTime = block.timestamp > eta ? block.timestamp : eta; // Any day at XX:YY
if (SpellAction(action).officeHours()) {
uint256 day = (castTime / 1 days + 3) % 7;
uint256 hour = castTime / 1 hours % 24;
uint256 minute = castTime / 1 minutes % 60;
uint256 second = castTime % 60;
if (day >= 5) {
castTime += (6 - day) * 1 days; // Go to Sunday XX:YY
castTime += (24 - hour + 14) * 1 hours; // Go to 14:YY UTC Monday
castTime -= minute * 1 minutes + second; // Go to 14:00 UTC
} else {
if (hour >= 21) {
if (day == 4) castTime += 2 days; // If Friday, fast forward to Sunday XX:YY
castTime += (24 - hour + 14) * 1 hours; // Go to 14:YY UTC next day
castTime -= minute * 1 minutes + second; // Go to 14:00 UTC
} else if (hour < 14) {
castTime += (14 - hour) * 1 hours; // Go to 14:YY UTC same day
castTime -= minute * 1 minutes + second; // Go to 14:00 UTC
}
}
}
}
// @param _description A string description of the spell
// @param _expiration The timestamp this spell will expire. (Ex. now + 30 days)
// @param _spellAction The address of the spell action
constructor(string memory _description, uint256 _expiration, address _spellAction) public {
pause = PauseAbstract(log.getAddress("MCD_PAUSE"));
description = _description;
expiration = _expiration;
action = _spellAction;
sig = abi.encodeWithSignature("execute()");
bytes32 _tag; // Required for assembly access
address _action = _spellAction; // Required for assembly access
assembly { _tag := extcodehash(_action) }
tag = _tag;
}
function schedule() public {
require(now <= expiration, "This contract has expired");
require(eta == 0, "This spell has already been scheduled");
eta = now + PauseAbstract(pause).delay();
pause.plot(action, tag, sig, eta);
}
function cast() public {
require(!done, "spell-already-cast");
done = true;
pause.exec(action, tag, sig, eta);
}
}
////// src/DssSpell.sol
// Copyright (C) 2021 Maker Ecosystem Growth Holdings, INC.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
/* pragma solidity 0.6.11; */
/* import "dss-exec-lib/DssExec.sol"; */
/* import "dss-exec-lib/DssAction.sol"; */
contract DssSpellAction is DssAction {
// Provides a descriptive tag for bot consumption
// This should be modified weekly to provide a summary of the actions
// Hash: seth keccak -- "$(wget https://raw.githubusercontent.com/makerdao/community/e2929f286f2c486c0485637967284630643ddc8d/governance/votes/Executive%20vote%20-%20January%2029%2C%202021.md -q -O - 2>/dev/null)"
string public constant description =
"2021-01-29 MakerDAO Executive Spell | Hash: 0xbb7974fc8e89c016a6c42f5ced4b1f42e45671e5f4f4009535658affb6a98343";
// Many of the settings that change weekly rely on the rate accumulator
// described at https://docs.makerdao.com/smart-contract-modules/rates-module
// To check this yourself, use the following rate calculation (example 8%):
//
// $ bc -l <<< 'scale=27; e( l(1.08)/(60 * 60 * 24 * 365) )'
//
// A table of rates can be found at
// https://ipfs.io/ipfs/QmefQMseb3AiTapiAKKexdKHig8wroKuZbmLtPLv4u2YwW
//
/**
@dev constructor (required)
@param lib address of the DssExecLib contract
@param officeHours true if officehours enabled
*/
constructor(address lib, bool officeHours) public DssAction(lib, officeHours) {}
uint256 constant MILLION = 10**6;
function actions() public override {
// ilk line gap ttl
setIlkAutoLineParameters("ETH-A", 1500 * MILLION, 30 * MILLION, 12 hours);
}
}
contract DssSpell is DssExec {
address public constant LIB = 0xFC32E74e6e33D924bd2fBFC7A27b6F2177032760;
DssSpellAction public spell = new DssSpellAction(LIB, false);
constructor() DssExec(spell.description(), now + 30 days, address(spell)) public {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"LIB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"action","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"done","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"log","outputs":[{"internalType":"contract Changelog","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextCastTime","outputs":[{"internalType":"uint256","name":"castTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"officeHours","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"contract PauseAbstract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spell","outputs":[{"internalType":"contract DssSpellAction","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tag","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]Contract Creation Code
61010060405273fc32e74e6e33d924bd2fbfc7a27b6f217703276060006040516200002a90620002f8565b6001600160a01b03909216825215156020820152604080519182900301906000f0801580156200005e573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b03929092169190911790553480156200008c57600080fd5b506004805460408051633942720b60e11b815290516001600160a01b0390921692637284e416928282019260009290829003018186803b158015620000d057600080fd5b505afa158015620000e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200010f57600080fd5b81019080805160405193929190846401000000008211156200013057600080fd5b9083019060208201858111156200014657600080fd5b82516401000000008111828201881017156200016157600080fd5b82525081516020918201929091019080838360005b838110156200019057818101518382015260200162000176565b50505050905090810190601f168015620001be5780820380516001836020036101000a031916815260200191505b506040525050504262278d0001600460009054906101000a90046001600160a01b031673da0ab1e0017debcd72be8599041a2aa3ba7e740f6001600160a01b03166321f8a7216040518163ffffffff1660e01b81526004018080684d43445f504155534560b81b815250602001905060206040518083038186803b1580156200024657600080fd5b505afa1580156200025b573d6000803e3d6000fd5b505050506040513d60208110156200027257600080fd5b505160601b6001600160601b03191660e05282516200029990600390602086019062000306565b5060c08290526001600160601b0319606082901b1660a0526040805160048152602481019091526020810180516001600160e01b0316631851865560e21b1781529051620002ea9160019162000306565b503f60805250620003ab9050565b6106338062000f8483390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200034957805160ff191683800117855562000379565b8280016001018555821562000379579182015b82811115620003795782518255916020019190600101906200035c565b50620003879291506200038b565b5090565b620003a891905b8082111562000387576000815560010162000392565b90565b60805160a05160601c60c05160e05160601c610b6b620004196000398061040d5280610522528061077352806108945250806102ad52806106c3525080610289528061030f528061049d528061081452806109d75250806102e952806104d0528061083f5250610b6b6000f3fe608060405234801561001057600080fd5b50600436106100c45760003560e01c8062a7029b146100c95780630a7a1c4d146101465780634665096d1461016a57806351973ec91461018457806351f910661461018c5780636e832f07146101945780637284e416146101b057806379885b91146101b85780638456cb59146101c057806396d373e5146101c8578063ae8421e1146101d2578063b0604a26146101da578063ea762b79146101e2578063f7992d85146101ea578063fe7d47bb146101f2575b600080fd5b6100d16101fa565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010b5781810151838201526020016100f3565b50505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014e610287565b604080516001600160a01b039092168252519081900360200190f35b6101726102ab565b60408051918252519081900360200190f35b61014e6102cf565b6101726102e7565b61019c61030b565b604080519115158252519081900360200190f35b6100d1610398565b61014e6103f3565b61014e61040b565b6101d061042f565b005b61019c6106b8565b6101d06106c1565b61014e610958565b610172610967565b61017261096d565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561027f5780601f106102545761010080835404028352916020019161027f565b820191906000526020600020905b81548152906001019060200180831161026257829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b73da0ab1e0017debcd72be8599041a2aa3ba7e740f81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e832f076040518163ffffffff1660e01b815260040160206040518083038186803b15801561036657600080fd5b505afa15801561037a573d6000803e3d6000fd5b505050506040513d602081101561039057600080fd5b505190505b90565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561027f5780601f106102545761010080835404028352916020019161027f565b73fc32e74e6e33d924bd2fbfc7a27b6f217703276081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff161561047c576040805162461bcd60e51b81526020600482015260126024820152711cdc195b1b0b585b1c9958591e4b58d85cdd60721b604482015290519081900360640190fd5b6002805460ff19166001908117825560005460405163168ccd6760e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116600484019081527f000000000000000000000000000000000000000000000000000000000000000060248501819052606485018690526080604486019081528754600019818a161561010002011698909804608486018190527f0000000000000000000000000000000000000000000000000000000000000000939093169763168ccd6797949691959193909160a40190859080156105a75780601f1061057c576101008083540402835291602001916105a7565b820191906000526020600020905b81548152906001019060200180831161058a57829003601f168201915b505095505050505050600060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561060757600080fd5b8101908080516040519392919084600160201b82111561062657600080fd5b90830190602082018581111561063b57600080fd5b8251600160201b81118282018810171561065457600080fd5b82525081516020918201929091019080838360005b83811015610681578181015183820152602001610669565b50505050905090810190601f1680156106ae5780820380516001836020036101000a031916815260200191505b5060405250505050565b60025460ff1681565b7f0000000000000000000000000000000000000000000000000000000000000000421115610732576040805162461bcd60e51b8152602060048201526019602482015278151a1a5cc818dbdb9d1c9858dd081a185cc8195e1c1a5c9959603a1b604482015290519081900360640190fd5b600054156107715760405162461bcd60e51b8152600401808060200182810382526025815260200180610b116025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b1580156107ca57600080fd5b505afa1580156107de573d6000803e3d6000fd5b505050506040513d60208110156107f457600080fd5b5051420160008190556040516346d2fbbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000818116600484019081527f0000000000000000000000000000000000000000000000000000000000000000602485018190526064850186905260806044860190815260018054600281831615610100026000190190911604608488018190527f0000000000000000000000000000000000000000000000000000000000000000909616976346d2fbbb97959693959194909390929160a401908590801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b505095505050505050600060405180830381600087803b15801561093e57600080fd5b505af1158015610952573d6000803e3d6000fd5b50505050565b6004546001600160a01b031681565b60005481565b600080546109c0576040805162461bcd60e51b815260206004820152601b60248201527a111cdcd15e1958cbdcdc195b1b0b5b9bdd0b5cd8da19591d5b1959602a1b604482015290519081900360640190fd5b60005442116109d1576000546109d3565b425b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e832f076040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2e57600080fd5b505afa158015610a42573d6000803e3d6000fd5b505050506040513d6020811015610a5857600080fd5b505115610395576007620151808204600301066018610e10830406603c80840481900690840660058410610ab1578360060362015180028501945082601803600e01610e1002850194508082603c020185039450610b09565b60158310610ae9578360041415610acb576202a300850194505b82601803600e01610e1002850194508082603c020185039450610b09565b600e831015610b095782600e03610e1002850194508082603c0201850394505b505050509056fe54686973207370656c6c2068617320616c7265616479206265656e207363686564756c6564a264697066735822122019ad98dbae1e2b616b5502e303fe34581e70dab45ec3668ea327afed33c74ffa64736f6c634300060b003360c060405234801561001057600080fd5b506040516106333803806106338339818101604052604081101561003357600080fd5b508051602090910151606082901b6001600160601b031916608052151560f881901b60a0526001600160a01b039091169060ff166105a561008e60003980610158528061024d52508061028d528061036252506105a56000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631816a5e114610067578063614619541461008b5780636e832f07146100955780637284e416146100b1578063928012301461012e578063f99e36bc14610136575b600080fd5b61006f61013e565b604080516001600160a01b039092168252519081900360200190f35b610093610156565b005b61009d61024b565b604080519115158252519081900360200190f35b6100b961026f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f35781810151838201526020016100db565b50505050905090810190601f1680156101205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61006f61028b565b6100936102af565b73da0ab1e0017debcd72be8599041a2aa3ba7e740f81565b7f00000000000000000000000000000000000000000000000000000000000000001561024157600762015180420460030106600581106101dd576040805162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c792062652063617374206f6e2061207765656b646179000000604482015290519081900360640190fd5b6018610e10420406600e81108015906101f65750601581105b61023e576040805162461bcd60e51b81526020600482015260146024820152734f757473696465206f666669636520686f75727360601b604482015290519081900360640190fd5b50505b6102496102af565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040518060a00160405280606e8152602001610502606e913981565b7f000000000000000000000000000000000000000000000000000000000000000081565b610249644554482d4160d81b6359682f006301c9c38061a8c06103346102d361033a565b604080516001600160a01b03909216602483015260448201879052606482018690526084820185905260a48083018590528151808403909101815260c490920190526020810180516001600160e01b03166325d6be1160e21b17905261035e565b50505050565b6000610359704d43445f49414d5f4155544f5f4c494e4560781b610475565b905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826040518082805190602001908083835b602083106103ba5780518252601f19909201916020918201910161039b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461041a576040519150601f19603f3d011682016040523d82523d6000602084013e61041f565b606091505b5050905080610471576040805162461bcd60e51b8152602060048201526019602482015278111cdcd058dd1a5bdb8bd9985a5b19590b5b1a588b58d85b1b603a1b604482015290519081900360640190fd5b5050565b600073da0ab1e0017debcd72be8599041a2aa3ba7e740f6001600160a01b03166321f8a721836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156104cf57600080fd5b505afa1580156104e3573d6000803e3d6000fd5b505050506040513d60208110156104f957600080fd5b50519291505056fe323032312d30312d3239204d616b657244414f20457865637574697665205370656c6c207c20486173683a20307862623739373466633865383963303136613663343266356365643462316634326534353637316535663466343030393533353635386166666236613938333433a26469706673582212207667d3e19da6f74011b8a89ba4e41e0b8b0da016c648a3ee3b4b51c522f9c0d164736f6c634300060b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100c45760003560e01c8062a7029b146100c95780630a7a1c4d146101465780634665096d1461016a57806351973ec91461018457806351f910661461018c5780636e832f07146101945780637284e416146101b057806379885b91146101b85780638456cb59146101c057806396d373e5146101c8578063ae8421e1146101d2578063b0604a26146101da578063ea762b79146101e2578063f7992d85146101ea578063fe7d47bb146101f2575b600080fd5b6100d16101fa565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010b5781810151838201526020016100f3565b50505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014e610287565b604080516001600160a01b039092168252519081900360200190f35b6101726102ab565b60408051918252519081900360200190f35b61014e6102cf565b6101726102e7565b61019c61030b565b604080519115158252519081900360200190f35b6100d1610398565b61014e6103f3565b61014e61040b565b6101d061042f565b005b61019c6106b8565b6101d06106c1565b61014e610958565b610172610967565b61017261096d565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561027f5780601f106102545761010080835404028352916020019161027f565b820191906000526020600020905b81548152906001019060200180831161026257829003601f168201915b505050505081565b7f000000000000000000000000e4365db41166a79d8d6a971db064509674e0ed3f81565b7f00000000000000000000000000000000000000000000000000000000603bc99a81565b73da0ab1e0017debcd72be8599041a2aa3ba7e740f81565b7fc41dc6ac1570dcc37f168fc3508d5b7d1bc31c727115f67fbe66617f6132f67781565b60007f000000000000000000000000e4365db41166a79d8d6a971db064509674e0ed3f6001600160a01b0316636e832f076040518163ffffffff1660e01b815260040160206040518083038186803b15801561036657600080fd5b505afa15801561037a573d6000803e3d6000fd5b505050506040513d602081101561039057600080fd5b505190505b90565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561027f5780601f106102545761010080835404028352916020019161027f565b73fc32e74e6e33d924bd2fbfc7a27b6f217703276081565b7f000000000000000000000000be286431454714f511008713973d3b053a2d38f381565b60025460ff161561047c576040805162461bcd60e51b81526020600482015260126024820152711cdc195b1b0b585b1c9958591e4b58d85cdd60721b604482015290519081900360640190fd5b6002805460ff19166001908117825560005460405163168ccd6760e01b81527f000000000000000000000000e4365db41166a79d8d6a971db064509674e0ed3f6001600160a01b03818116600484019081527fc41dc6ac1570dcc37f168fc3508d5b7d1bc31c727115f67fbe66617f6132f67760248501819052606485018690526080604486019081528754600019818a161561010002011698909804608486018190527f000000000000000000000000be286431454714f511008713973d3b053a2d38f3939093169763168ccd6797949691959193909160a40190859080156105a75780601f1061057c576101008083540402835291602001916105a7565b820191906000526020600020905b81548152906001019060200180831161058a57829003601f168201915b505095505050505050600060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561060757600080fd5b8101908080516040519392919084600160201b82111561062657600080fd5b90830190602082018581111561063b57600080fd5b8251600160201b81118282018810171561065457600080fd5b82525081516020918201929091019080838360005b83811015610681578181015183820152602001610669565b50505050905090810190601f1680156106ae5780820380516001836020036101000a031916815260200191505b5060405250505050565b60025460ff1681565b7f00000000000000000000000000000000000000000000000000000000603bc99a421115610732576040805162461bcd60e51b8152602060048201526019602482015278151a1a5cc818dbdb9d1c9858dd081a185cc8195e1c1a5c9959603a1b604482015290519081900360640190fd5b600054156107715760405162461bcd60e51b8152600401808060200182810382526025815260200180610b116025913960400191505060405180910390fd5b7f000000000000000000000000be286431454714f511008713973d3b053a2d38f36001600160a01b0316636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b1580156107ca57600080fd5b505afa1580156107de573d6000803e3d6000fd5b505050506040513d60208110156107f457600080fd5b5051420160008190556040516346d2fbbb60e01b81526001600160a01b037f000000000000000000000000e4365db41166a79d8d6a971db064509674e0ed3f818116600484019081527fc41dc6ac1570dcc37f168fc3508d5b7d1bc31c727115f67fbe66617f6132f677602485018190526064850186905260806044860190815260018054600281831615610100026000190190911604608488018190527f000000000000000000000000be286431454714f511008713973d3b053a2d38f3909616976346d2fbbb97959693959194909390929160a401908590801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b505095505050505050600060405180830381600087803b15801561093e57600080fd5b505af1158015610952573d6000803e3d6000fd5b50505050565b6004546001600160a01b031681565b60005481565b600080546109c0576040805162461bcd60e51b815260206004820152601b60248201527a111cdcd15e1958cbdcdc195b1b0b5b9bdd0b5cd8da19591d5b1959602a1b604482015290519081900360640190fd5b60005442116109d1576000546109d3565b425b90507f000000000000000000000000e4365db41166a79d8d6a971db064509674e0ed3f6001600160a01b0316636e832f076040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2e57600080fd5b505afa158015610a42573d6000803e3d6000fd5b505050506040513d6020811015610a5857600080fd5b505115610395576007620151808204600301066018610e10830406603c80840481900690840660058410610ab1578360060362015180028501945082601803600e01610e1002850194508082603c020185039450610b09565b60158310610ae9578360041415610acb576202a300850194505b82601803600e01610e1002850194508082603c020185039450610b09565b600e831015610b095782600e03610e1002850194508082603c0201850394505b505050509056fe54686973207370656c6c2068617320616c7265616479206265656e207363686564756c6564a264697066735822122019ad98dbae1e2b616b5502e303fe34581e70dab45ec3668ea327afed33c74ffa64736f6c634300060b0033
Deployed Bytecode Sourcemap
28206:268:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22534:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22658:37;;;:::i;:::-;;;;-1:-1:-1;;;;;22658:37:0;;;;;;;;;;;;;;22702:41;;;:::i;:::-;;;;;;;;;;;;;;;;22394:92;;;:::i;22617:34::-;;;:::i;23075:111::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;23024:42;;;:::i;28242:72::-;;;:::i;22750:36::-;;;:::i;25629:144::-;;;:::i;:::-;;22575:35;;;:::i;25356:265::-;;;:::i;28321:60::-;;;:::i;22493:34::-;;;:::i;23194:1385::-;;;:::i;22534:34::-;;;;;;;;;;;;;;;-1:-1:-1;;22534:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22658:37::-;;;:::o;22702:41::-;;;:::o;22394:92::-;22443:42;22394:92;:::o;22617:34::-;;;:::o;23075:111::-;23121:4;23157:6;-1:-1:-1;;;;;23145:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23145:33:0;;-1:-1:-1;23075:111:0;;:::o;23024:42::-;;;;;;;;;;;;;;;-1:-1:-1;;23024:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28242:72;28272:42;28242:72;:::o;22750:36::-;;;:::o;25629:144::-;25672:4;;;;25671:5;25663:36;;;;;-1:-1:-1;;;25663:36:0;;;;;;;;;;;;-1:-1:-1;;;25663:36:0;;;;;;;;;;;;;;;25710:4;:11;;-1:-1:-1;;25710:11:0;25717:4;25710:11;;;;;:4;25761:3;25732:33;;-1:-1:-1;;;25732:33:0;;25743:6;-1:-1:-1;;;;;25732:33:0;;;;;;;;;25751:3;25732:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25732:33:0;;;;25710:11;25732:33;;;;;;;;;;;;;:5;:10;;;;;;;25743:6;;25751:3;;25761;;25732:33;;;;;25717:4;;25732:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25732:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25732:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25732:33:0;;;;;;-1:-1:-1;25732:33:0;;;;;;;;;;-1:-1:-1;25732:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25629:144::o;22575:35::-;;;;;;:::o;25356:265::-;25409:10;25402:3;:17;;25394:55;;;;;-1:-1:-1;;;25394:55:0;;;;;;;;;;;;-1:-1:-1;;;25394:55:0;;;;;;;;;;;;;;;25468:3;;:8;25460:58;;;;-1:-1:-1;;;25460:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25555:5;-1:-1:-1;;;;;25541:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25541:28:0;25535:3;:34;25529:3;:40;;;25580:33;;-1:-1:-1;;;25580:33:0;;-1:-1:-1;;;;;25591:6:0;25580:33;;;;;;;;;25599:3;25580:33;;;;;;;;;;;;;;;;;;;25604:3;25580:33;;;;;;;;;-1:-1:-1;;25580:33:0;;;;;;;;;;;:5;:10;;;;;;25591:6;;25599:3;;25604;;25535:34;;25580:33;;;;;;25604:3;;25580:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25356:265::o;28321:60::-;;;-1:-1:-1;;;;;28321:60:0;;:::o;22493:34::-;;;;:::o;23194:1385::-;23241:16;23278:3;;23270:48;;;;;-1:-1:-1;;;23270:48:0;;;;;;;;;;;;-1:-1:-1;;;23270:48:0;;;;;;;;;;;;;;;23358:3;;23340:15;:21;:45;;23382:3;;23340:45;;;23364:15;23340:45;23329:56;;23434:6;-1:-1:-1;;;;;23422:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23422:33:0;23418:1154;;;23515:1;23501:6;23490:17;;23510:1;23490:21;23489:27;23569:2;23559:7;23548:18;;:23;23626:2;23603:20;;;:25;;;;23660:13;;23701:1;23694:8;;23690:871;;23740:3;23736:1;:7;23747:6;23735:18;23723:30;;;;23828:4;23823:2;:9;23835:2;23823:14;23841:7;23822:26;23810:38;;;;23934:6;23913;23922:9;23913:18;:27;23901:39;;;;23690:871;;;24019:2;24011:4;:10;24007:539;;24050:3;24057:1;24050:8;24046:32;;;24072:6;24060:18;;;;24046:32;24172:4;24167:2;:9;24179:2;24167:14;24185:7;24166:26;24154:38;;;;24280:6;24259;24268:9;24259:18;:27;24247:39;;;;24007:539;;;24345:2;24338:4;:9;24334:212;;;24390:4;24385:2;:9;24398:7;24384:21;24372:33;;;;24498:6;24477;24486:9;24477:18;:27;24465:39;;;;24334:212;23418:1154;;;;23194:1385;:::o
Swarm Source
ipfs://7667d3e19da6f74011b8a89ba4e41e0b8b0da016c648a3ee3b4b51c522f9c0d1
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.