Address Contract Verified
Address
0xd5f279ff9EB21c6D40C8f345a66f2751C4eeA1fB
ENS Name
lilnouns.eth
Balance
0.209614 ETH
Nonce
1
Code Size
4721 bytes
Creator
0xa6ef22a8...04a0 at tx 0x026c6080...e821df
Indexed Transactions
0
Contract Bytecode
4721 bytes
0x6080604052600436106100ca5760003560e01c80636a42b8f811610079578063c1a287e211610056578063c1a287e214610222578063e177246e14610239578063f2b0653714610259578063f851a4401461029957005b80636a42b8f8146101de5780637d645fab146101f4578063b1b43ae51461020b57005b80633a66f901116100a75780633a66f901146101705780634dd18bf51461019e578063591fcdfe146101be57005b80630825f38f146100d35780630e18b68114610109578063267822471461011e57005b366100d157005b005b3480156100df57600080fd5b506100f36100ee366004610f7b565b6102c6565b604051610100919061114d565b60405180910390f35b34801561011557600080fd5b506100d1610752565b34801561012a57600080fd5b5060015461014b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b34801561017c57600080fd5b5061019061018b366004610f7b565b610842565b604051908152602001610100565b3480156101aa57600080fd5b506100d16101b9366004610f59565b610a60565b3480156101ca57600080fd5b506100d16101d9366004610f7b565b610b6a565b3480156101ea57600080fd5b5061019060025481565b34801561020057600080fd5b5061019062278d0081565b34801561021757600080fd5b506101906202a30081565b34801561022e57600080fd5b506101906212750081565b34801561024557600080fd5b506100d161025436600461102c565b610cda565b34801561026557600080fd5b5061028961027436600461102c565b60036020526000908152604090205460ff1681565b6040519015158152602001610100565b3480156102a557600080fd5b5060005461014b9073ffffffffffffffffffffffffffffffffffffffff1681565b60005460609073ffffffffffffffffffffffffffffffffffffffff16331461035d576040805162461bcd60e51b81526020600482015260248101919091527f4e6f756e7344414f4578656375746f723a3a657865637574655472616e73616360448201527f74696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e60648201526084015b60405180910390fd5b600086868686866040516020016103789594939291906110f3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815281516020928301206000818152600390935291205490915060ff166104595760405162461bcd60e51b815260206004820152604560248201527f4e6f756e7344414f4578656375746f723a3a657865637574655472616e73616360448201527f74696f6e3a205472616e73616374696f6e206861736e2774206265656e20717560648201527f657565642e000000000000000000000000000000000000000000000000000000608482015260a401610354565b824210156104f55760405162461bcd60e51b815260206004820152604d60248201527f4e6f756e7344414f4578656375746f723a3a657865637574655472616e73616360448201527f74696f6e3a205472616e73616374696f6e206861736e2774207375727061737360648201527f65642074696d65206c6f636b2e00000000000000000000000000000000000000608482015260a401610354565b610502621275008461119d565b4211156105775760405162461bcd60e51b815260206004820152603b60248201527f4e6f756e7344414f4578656375746f723a3a657865637574655472616e73616360448201527f74696f6e3a205472616e73616374696f6e206973207374616c652e00000000006064820152608401610354565b600081815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905584516060906105bb5750836105e7565b8580519060200120856040516020016105d592919061108f565b60405160208183030381529060405290505b6000808973ffffffffffffffffffffffffffffffffffffffff16898460405161061091906110d7565b60006040518083038185875af1925050503d806000811461064d576040519150601f19603f3d011682016040523d82523d6000602084013e610652565b606091505b5091509150816106f05760405162461bcd60e51b815260206004820152604560248201527f4e6f756e7344414f4578656375746f723a3a657865637574655472616e73616360448201527f74696f6e3a205472616e73616374696f6e20657865637574696f6e207265766560648201527f727465642e000000000000000000000000000000000000000000000000000000608482015260a401610354565b8973ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b60405161073d9493929190611160565b60405180910390a39998505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107e1576040805162461bcd60e51b81526020600482015260248101919091527f4e6f756e7344414f4578656375746f723a3a61636365707441646d696e3a204360448201527f616c6c206d75737420636f6d652066726f6d2070656e64696e6741646d696e2e6064820152608401610354565b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108d05760405162461bcd60e51b815260206004820152603e60248201527f4e6f756e7344414f4578656375746f723a3a71756575655472616e736163746960448201527f6f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e00006064820152608401610354565b6002546108dd904261119d565b8210156109785760405162461bcd60e51b815260206004820152605160248201527f4e6f756e7344414f4578656375746f723a3a71756575655472616e736163746960448201527f6f6e3a20457374696d6174656420657865637574696f6e20626c6f636b206d7560648201527f737420736174697366792064656c61792e000000000000000000000000000000608482015260a401610354565b600086868686866040516020016109939594939291906110f3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000818152600390925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915073ffffffffffffffffffffffffffffffffffffffff88169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f90610a4e908a908a908a908a90611160565b60405180910390a39695505050505050565b333014610afb5760405162461bcd60e51b815260206004820152604860248201527f4e6f756e7344414f4578656375746f723a3a73657450656e64696e6741646d6960448201527f6e3a2043616c6c206d75737420636f6d652066726f6d204e6f756e7344414f4560648201527f78656375746f722e000000000000000000000000000000000000000000000000608482015260a401610354565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bf75760405162461bcd60e51b815260206004820152603f60248201527f4e6f756e7344414f4578656375746f723a3a63616e63656c5472616e7361637460448201527f696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e006064820152608401610354565b60008585858585604051602001610c129594939291906110f3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000818152600390925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055915073ffffffffffffffffffffffffffffffffffffffff87169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8790610cca908990899089908990611160565b60405180910390a3505050505050565b333014610d755760405162461bcd60e51b815260206004820152604160248201527f4e6f756e7344414f4578656375746f723a3a73657444656c61793a2043616c6c60448201527f206d75737420636f6d652066726f6d204e6f756e7344414f4578656375746f7260648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a401610354565b6202a300811015610dee5760405162461bcd60e51b815260206004820152603c60248201527f4e6f756e7344414f4578656375746f723a3a73657444656c61793a2044656c6160448201527f79206d75737420657863656564206d696e696d756d2064656c61792e000000006064820152608401610354565b62278d00811115610e69576040805162461bcd60e51b81526020600482015260248101919091527f4e6f756e7344414f4578656375746f723a3a73657444656c61793a2044656c6160448201527f79206d757374206e6f7420657863656564206d6178696d756d2064656c61792e6064820152608401610354565b600281905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b600067ffffffffffffffff80841115610eb757610eb761120c565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610efd57610efd61120c565b81604052809350858152868686011115610f1657600080fd5b858560208301376000602087830101525050509392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f5457600080fd5b919050565b600060208284031215610f6b57600080fd5b610f7482610f30565b9392505050565b600080600080600060a08688031215610f9357600080fd5b610f9c86610f30565b945060208601359350604086013567ffffffffffffffff80821115610fc057600080fd5b818801915088601f830112610fd457600080fd5b610fe389833560208501610e9c565b94506060880135915080821115610ff957600080fd5b508601601f8101881361100b57600080fd5b61101a88823560208401610e9c565b95989497509295608001359392505050565b60006020828403121561103e57600080fd5b5035919050565b6000815180845261105d8160208601602086016111dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516110c98160048501602087016111dc565b919091016004019392505050565b600082516110e98184602087016111dc565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a06040820152600061112860a0830186611045565b828103606084015261113a8186611045565b9150508260808301529695505050505050565b602081526000610f746020830184611045565b8481526080602082015260006111796080830186611045565b828103604084015261118b8186611045565b91505082606083015295945050505050565b600082198211156111d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b60005b838110156111f75781810151838201526020016111df565b83811115611206576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212201f43fbe78d679013524a9e90a4bae0c870a256d65704e21496cc4a4e21d9835864736f6c63430008060033
Verified Source Code Full Match
Compiler: v0.8.6+commit.11564f7e
EVM: berlin
Optimization: Yes (10000 runs)
NounsDAOExecutor.sol 189 lines
// SPDX-License-Identifier: BSD-3-Clause
/// @title The Nouns DAO executor and treasury
/*********************************
* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░█████████░░█████████░░░ *
* ░░░░░░██░░░████░░██░░░████░░░ *
* ░░██████░░░████████░░░████░░░ *
* ░░██░░██░░░████░░██░░░████░░░ *
* ░░██░░██░░░████░░██░░░████░░░ *
* ░░░░░░█████████░░█████████░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ *
* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ *
*********************************/
// LICENSE
// NounsDAOExecutor.sol is a modified version of Compound Lab's Timelock.sol:
// https://github.com/compound-finance/compound-protocol/blob/20abad28055a2f91df48a90f8bb6009279a4cb35/contracts/Timelock.sol
//
// Timelock.sol source code Copyright 2020 Compound Labs, Inc. licensed under the BSD-3-Clause license.
// With modifications by Nounders DAO.
//
// Additional conditions of BSD-3-Clause can be found here: https://opensource.org/licenses/BSD-3-Clause
//
// MODIFICATIONS
// NounsDAOExecutor.sol modifies Timelock to use Solidity 0.8.x receive(), fallback(), and built-in over/underflow protection
// This contract acts as executor of Nouns DAO governance and its treasury, so it has been modified to accept ETH.
pragma solidity ^0.8.6;
contract NounsDAOExecutor {
event NewAdmin(address indexed newAdmin);
event NewPendingAdmin(address indexed newPendingAdmin);
event NewDelay(uint256 indexed newDelay);
event CancelTransaction(
bytes32 indexed txHash,
address indexed target,
uint256 value,
string signature,
bytes data,
uint256 eta
);
event ExecuteTransaction(
bytes32 indexed txHash,
address indexed target,
uint256 value,
string signature,
bytes data,
uint256 eta
);
event QueueTransaction(
bytes32 indexed txHash,
address indexed target,
uint256 value,
string signature,
bytes data,
uint256 eta
);
uint256 public constant GRACE_PERIOD = 14 days;
uint256 public constant MINIMUM_DELAY = 2 days;
uint256 public constant MAXIMUM_DELAY = 30 days;
address public admin;
address public pendingAdmin;
uint256 public delay;
mapping(bytes32 => bool) public queuedTransactions;
constructor(address admin_, uint256 delay_) {
require(delay_ >= MINIMUM_DELAY, 'NounsDAOExecutor::constructor: Delay must exceed minimum delay.');
require(delay_ <= MAXIMUM_DELAY, 'NounsDAOExecutor::setDelay: Delay must not exceed maximum delay.');
admin = admin_;
delay = delay_;
}
function setDelay(uint256 delay_) public {
require(msg.sender == address(this), 'NounsDAOExecutor::setDelay: Call must come from NounsDAOExecutor.');
require(delay_ >= MINIMUM_DELAY, 'NounsDAOExecutor::setDelay: Delay must exceed minimum delay.');
require(delay_ <= MAXIMUM_DELAY, 'NounsDAOExecutor::setDelay: Delay must not exceed maximum delay.');
delay = delay_;
emit NewDelay(delay);
}
function acceptAdmin() public {
require(msg.sender == pendingAdmin, 'NounsDAOExecutor::acceptAdmin: Call must come from pendingAdmin.');
admin = msg.sender;
pendingAdmin = address(0);
emit NewAdmin(admin);
}
function setPendingAdmin(address pendingAdmin_) public {
require(
msg.sender == address(this),
'NounsDAOExecutor::setPendingAdmin: Call must come from NounsDAOExecutor.'
);
pendingAdmin = pendingAdmin_;
emit NewPendingAdmin(pendingAdmin);
}
function queueTransaction(
address target,
uint256 value,
string memory signature,
bytes memory data,
uint256 eta
) public returns (bytes32) {
require(msg.sender == admin, 'NounsDAOExecutor::queueTransaction: Call must come from admin.');
require(
eta >= getBlockTimestamp() + delay,
'NounsDAOExecutor::queueTransaction: Estimated execution block must satisfy delay.'
);
bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
queuedTransactions[txHash] = true;
emit QueueTransaction(txHash, target, value, signature, data, eta);
return txHash;
}
function cancelTransaction(
address target,
uint256 value,
string memory signature,
bytes memory data,
uint256 eta
) public {
require(msg.sender == admin, 'NounsDAOExecutor::cancelTransaction: Call must come from admin.');
bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
queuedTransactions[txHash] = false;
emit CancelTransaction(txHash, target, value, signature, data, eta);
}
function executeTransaction(
address target,
uint256 value,
string memory signature,
bytes memory data,
uint256 eta
) public returns (bytes memory) {
require(msg.sender == admin, 'NounsDAOExecutor::executeTransaction: Call must come from admin.');
bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
require(queuedTransactions[txHash], "NounsDAOExecutor::executeTransaction: Transaction hasn't been queued.");
require(
getBlockTimestamp() >= eta,
"NounsDAOExecutor::executeTransaction: Transaction hasn't surpassed time lock."
);
require(
getBlockTimestamp() <= eta + GRACE_PERIOD,
'NounsDAOExecutor::executeTransaction: Transaction is stale.'
);
queuedTransactions[txHash] = false;
bytes memory callData;
if (bytes(signature).length == 0) {
callData = data;
} else {
callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data);
}
// solium-disable-next-line security/no-call-value
(bool success, bytes memory returnData) = target.call{ value: value }(callData);
require(success, 'NounsDAOExecutor::executeTransaction: Transaction execution reverted.');
emit ExecuteTransaction(txHash, target, value, signature, data, eta);
return returnData;
}
function getBlockTimestamp() internal view returns (uint256) {
// solium-disable-next-line security/no-block-members
return block.timestamp;
}
receive() external payable {}
fallback() external payable {}
}
Read Contract
GRACE_PERIOD 0xc1a287e2 → uint256
MAXIMUM_DELAY 0x7d645fab → uint256
MINIMUM_DELAY 0xb1b43ae5 → uint256
admin 0xf851a440 → address
delay 0x6a42b8f8 → uint256
pendingAdmin 0x26782247 → address
queuedTransactions 0xf2b06537 → bool
Write Contract 6 functions
These functions modify contract state and require a wallet transaction to execute.
acceptAdmin 0x0e18b681
No parameters
cancelTransaction 0x591fcdfe
address target
uint256 value
string signature
bytes data
uint256 eta
executeTransaction 0x0825f38f
address target
uint256 value
string signature
bytes data
uint256 eta
returns: bytes
queueTransaction 0x3a66f901
address target
uint256 value
string signature
bytes data
uint256 eta
returns: bytes32
setDelay 0xe177246e
uint256 delay_
setPendingAdmin 0x4dd18bf5
address pendingAdmin_
Token Balances (2)
View Transfers →Recent Transactions
No transactions found for this address