Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Register | 19574463 | 289 days ago | IN | 0 ETH | 0.00289377 | ||||
Register | 19574447 | 289 days ago | IN | 0 ETH | 0.00255521 | ||||
Register | 19574443 | 289 days ago | IN | 0 ETH | 0.00282084 | ||||
Set_management | 19574091 | 289 days ago | IN | 0 ETH | 0.00104113 | ||||
Register | 19574087 | 289 days ago | IN | 0 ETH | 0.00257301 | ||||
Register | 19574084 | 289 days ago | IN | 0 ETH | 0.00262027 | ||||
Register | 19574080 | 289 days ago | IN | 0 ETH | 0.00242401 | ||||
Register | 19574076 | 289 days ago | IN | 0 ETH | 0.00251821 | ||||
Register | 19574073 | 289 days ago | IN | 0 ETH | 0.00285795 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Gauge registry
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# @version 0.3.10 """ @title Gauge registry @author Yearn Finance @license GNU AGPLv3 @notice Registry for approved gauges. Gauges can be added by governance, which makes them eligible to be voted on in the gauge controller. Each registered gauge corresponds to a unique underlying vault. """ interface Controller: def whitelist(_gauge: address, _whitelisted: bool): nonpayable interface Factory: def gauge_versions(_gauge: address) -> uint256: view interface Gauge: def asset() -> address: view management: public(address) pending_management: public(address) controller: public(Controller) factory: public(Factory) vault_count: public(uint256) vaults: public(address[99999]) vault_gauge_map: public(HashMap[address, address]) # vault => gauge event Register: gauge: indexed(address) idx: uint256 event Deregister: gauge: indexed(address) idx: uint256 event UpdateIndex: old_idx: indexed(uint256) idx: uint256 event SetController: controller: address event SetFactory: factory: address event PendingManagement: management: indexed(address) event SetManagement: management: indexed(address) @external def __init__(_controller: address, _factory: address): """ @notice Constructor @param _controller Gauge controller @param _factory Gauge factory """ self.management = msg.sender self.controller = Controller(_controller) self.factory = Factory(_factory) @external @view def gauges(_idx: uint256) -> address: """ @notice Get a gauge at a certain index in the list @param _idx Index of the gauge @return Gauge at the specified index """ vault: address = self.vaults[_idx] assert vault != empty(address) return self.vault_gauge_map[vault] @external def register(_gauge: address) -> uint256: """ @notice Add a gauge to the registry @param _gauge Gauge address @return Index of the vault @dev Gauge has to originate from the factory @dev Underlying vault cannot already have a registered gauge @dev Only callable by management """ assert msg.sender == self.management assert self.factory.gauge_versions(_gauge) > 0 vault: address = Gauge(_gauge).asset() assert self.vault_gauge_map[vault] == empty(address) idx: uint256 = self.vault_count self.vault_count = idx + 1 self.vaults[idx] = vault self.vault_gauge_map[vault] = _gauge self.controller.whitelist(_gauge, True) log Register(_gauge, idx) return idx @external def deregister(_gauge: address, _idx: uint256): """ @notice Remove a gauge from the registry @param _gauge Gauge address @param _idx Vault index @dev Only callable by management """ assert msg.sender == self.management vault: address = Gauge(_gauge).asset() assert self.vault_gauge_map[vault] == _gauge assert self.vaults[_idx] == vault # swap last entry in array with the one being deleted # and shorten array by one max_idx: uint256 = self.vault_count - 1 self.vault_count = max_idx log Deregister(_gauge, _idx) if _idx != max_idx: self.vaults[_idx] = self.vaults[max_idx] log UpdateIndex(max_idx, _idx) self.vaults[max_idx] = empty(address) self.vault_gauge_map[vault] = empty(address) self.controller.whitelist(_gauge, False) @external @view def registered(_gauge: address) -> bool: """ @notice Check whether a gauge is registered @param _gauge Gauge address @return Registration status """ vault: address = Gauge(_gauge).asset() return self.vault_gauge_map[vault] == _gauge @external def set_controller(_controller: address): """ @notice Set a new gauge controller @param _controller New gauge controller @dev Only callable by management """ assert msg.sender == self.management assert _controller != empty(address) self.controller = Controller(_controller) log SetController(_controller) @external def set_factory(_factory: address): """ @notice Set a new factory @param _factory New factory @dev Only callable by management """ assert msg.sender == self.management assert _factory != empty(address) self.factory = Factory(_factory) log SetFactory(_factory) @external def set_management(_management: address): """ @notice Set the pending management address. Needs to be accepted by that account separately to transfer management over @param _management New pending management address """ assert msg.sender == self.management self.pending_management = _management log PendingManagement(_management) @external def accept_management(): """ @notice Accept management role. Can only be called by account previously marked as pending management by current management """ assert msg.sender == self.pending_management self.pending_management = empty(address) self.management = msg.sender log SetManagement(msg.sender)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"Register","inputs":[{"name":"gauge","type":"address","indexed":true},{"name":"idx","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deregister","inputs":[{"name":"gauge","type":"address","indexed":true},{"name":"idx","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateIndex","inputs":[{"name":"old_idx","type":"uint256","indexed":true},{"name":"idx","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetController","inputs":[{"name":"controller","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetFactory","inputs":[{"name":"factory","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"PendingManagement","inputs":[{"name":"management","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"SetManagement","inputs":[{"name":"management","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_controller","type":"address"},{"name":"_factory","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"_idx","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"register","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"deregister","inputs":[{"name":"_gauge","type":"address"},{"name":"_idx","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"registered","inputs":[{"name":"_gauge","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"set_controller","inputs":[{"name":"_controller","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_factory","inputs":[{"name":"_factory","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_management","inputs":[{"name":"_management","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"accept_management","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"management","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pending_management","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"controller","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vault_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"vaults","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vault_gauge_map","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"address"}]}]
Contract Creation Code
3461004d5760206106f65f395f518060a01c61004d5760405260206107165f395f518060a01c61004d57606052335f5560405160025560605160035561069061005161000039610690610000f35b5f80fd5f3560e01c6002600c820660011b61067801601e395f51565b6388a8d60281186106705734610674575f5460405260206040f3610670565b63770817ec811861005357346106745760015460405260206040f35b63759be10c81186106705734610674576001543318610674575f600155335f55337fafe23f9e1f603b288748a507d5a993957e9f14313a5889d5a070851299939d595f6040a200610670565b63f77c4791811861067057346106745760025460405260206040f3610670565b63c45a0155811861067057346106745760035460405260206040f3610670565b63ed20cb3081186100fb57346106745760045460405260206040f35b63eef6c450811861067057604436103417610674576004358060a01c610674576040525f543318610674576040516338d52e0f608052602060806004609c845afa610148573d5f5f3e3d5ffd5b60203d10610674576080518060a01c6106745760c05260c0905051606052604051620186a46060516020525f5260405f205418610674576060516024356201869e811161067457600501541861067457600454600181038181116106745790506080526080516004556040517ff974f9b9976eab09e5a66d08a91feff28233bd865bdc3124015b69640bb31f4560243560a052602060a0a26080516024351461023d576080516201869e811161067457600501546024356201869e811161067457600501556080517fc9d12a7659bfe5207e3439ef54f3218cb66f9fe3ec60af9da1f1c8878533cb4660243560a052602060a0a25b5f6080516201869e811161067457600501555f620186a46060516020525f5260405f205560025463f59c370860a05260405160c0525f60e052803b15610674575f60a0604460bc5f855af1610294573d5f5f3e3d5ffd5b5000610670565b638c64ea4a81186102ca57602436103417610674576004356201869e8111610674576005015460405260206040f35b6391b10ffa811861067057602436103417610674576004358060a01c610674576040525f5433186106745760405115610674576040516002557f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f7060405160605260206060a100610670565b63dfe3d284811861037257602436103417610674576004358060a01c61067457604052620186a46040516020525f5260405f205460605260206060f35b63fd066ecc811861067057602436103417610674576004358060a01c610674576040525f543318610674576040516001556040517fe7b5cc087e6e47e33e86bdfe4720b7e849891938b18ff6e0c3f92299de79e60c5f6060a200610670565b63b0539187811861067057602436103417610674576004356201869e811161067457600501546040526040511561067457620186a46040516020525f5260405f205460605260206060f3610670565b634420e486811861067057602436103417610674576004358060a01c610674576040525f5433186106745760035463a0d4b907606052604051608052602060606024607c845afa610473573d5f5f3e3d5ffd5b60203d1061067457606090505115610674576040516338d52e0f608052602060806004609c845afa6104a7573d5f5f3e3d5ffd5b60203d10610674576080518060a01c6106745760c05260c0905051606052620186a46060516020525f5260405f205461067457600454608052608051600181018181106106745790506004556060516080516201869e81116106745760050155604051620186a46060516020525f5260405f205560025463f59c370860a05260405160c052600160e052803b15610674575f60a0604460bc5f855af161054f573d5f5f3e3d5ffd5b506040517e7dc6ab80cc84c043b7b8d4fcafc802187470087f7ea7fccd2e17aecd0256a160805160a052602060a0a260206080f3610670565b63b2dd5c07811861060957602436103417610674576004358060a01c610674576040526040516338d52e0f608052602060806004609c845afa6105cd573d5f5f3e3d5ffd5b60203d10610674576080518060a01c6106745760c05260c0905051606052604051620186a46060516020525f5260405f20541460805260206080f35b63ee2af3fb811861067057602436103417610674576004358060a01c610674576040525f5433186106745760405115610674576040516003557f1c893ef9379093af30f458b9e74d2aba13c499660b68dec5e29af7b199c188b960405160605260206060a1005b5f5ffd5b5f80fd03350670029b058800df009f04200670003700bf001803d18419069081181800a16576797065728300030a001500000000000000000000000046b38522422d597ddbaa2d6e98d6c9b397028d5b00000000000000000000000043cfc64f00b4e45619cfbc7964d982fa022e0b91
Deployed Bytecode
0x5f3560e01c6002600c820660011b61067801601e395f51565b6388a8d60281186106705734610674575f5460405260206040f3610670565b63770817ec811861005357346106745760015460405260206040f35b63759be10c81186106705734610674576001543318610674575f600155335f55337fafe23f9e1f603b288748a507d5a993957e9f14313a5889d5a070851299939d595f6040a200610670565b63f77c4791811861067057346106745760025460405260206040f3610670565b63c45a0155811861067057346106745760035460405260206040f3610670565b63ed20cb3081186100fb57346106745760045460405260206040f35b63eef6c450811861067057604436103417610674576004358060a01c610674576040525f543318610674576040516338d52e0f608052602060806004609c845afa610148573d5f5f3e3d5ffd5b60203d10610674576080518060a01c6106745760c05260c0905051606052604051620186a46060516020525f5260405f205418610674576060516024356201869e811161067457600501541861067457600454600181038181116106745790506080526080516004556040517ff974f9b9976eab09e5a66d08a91feff28233bd865bdc3124015b69640bb31f4560243560a052602060a0a26080516024351461023d576080516201869e811161067457600501546024356201869e811161067457600501556080517fc9d12a7659bfe5207e3439ef54f3218cb66f9fe3ec60af9da1f1c8878533cb4660243560a052602060a0a25b5f6080516201869e811161067457600501555f620186a46060516020525f5260405f205560025463f59c370860a05260405160c0525f60e052803b15610674575f60a0604460bc5f855af1610294573d5f5f3e3d5ffd5b5000610670565b638c64ea4a81186102ca57602436103417610674576004356201869e8111610674576005015460405260206040f35b6391b10ffa811861067057602436103417610674576004358060a01c610674576040525f5433186106745760405115610674576040516002557f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f7060405160605260206060a100610670565b63dfe3d284811861037257602436103417610674576004358060a01c61067457604052620186a46040516020525f5260405f205460605260206060f35b63fd066ecc811861067057602436103417610674576004358060a01c610674576040525f543318610674576040516001556040517fe7b5cc087e6e47e33e86bdfe4720b7e849891938b18ff6e0c3f92299de79e60c5f6060a200610670565b63b0539187811861067057602436103417610674576004356201869e811161067457600501546040526040511561067457620186a46040516020525f5260405f205460605260206060f3610670565b634420e486811861067057602436103417610674576004358060a01c610674576040525f5433186106745760035463a0d4b907606052604051608052602060606024607c845afa610473573d5f5f3e3d5ffd5b60203d1061067457606090505115610674576040516338d52e0f608052602060806004609c845afa6104a7573d5f5f3e3d5ffd5b60203d10610674576080518060a01c6106745760c05260c0905051606052620186a46060516020525f5260405f205461067457600454608052608051600181018181106106745790506004556060516080516201869e81116106745760050155604051620186a46060516020525f5260405f205560025463f59c370860a05260405160c052600160e052803b15610674575f60a0604460bc5f855af161054f573d5f5f3e3d5ffd5b506040517e7dc6ab80cc84c043b7b8d4fcafc802187470087f7ea7fccd2e17aecd0256a160805160a052602060a0a260206080f3610670565b63b2dd5c07811861060957602436103417610674576004358060a01c610674576040526040516338d52e0f608052602060806004609c845afa6105cd573d5f5f3e3d5ffd5b60203d10610674576080518060a01c6106745760c05260c0905051606052604051620186a46060516020525f5260405f20541460805260206080f35b63ee2af3fb811861067057602436103417610674576004358060a01c610674576040525f5433186106745760405115610674576040516003557f1c893ef9379093af30f458b9e74d2aba13c499660b68dec5e29af7b199c188b960405160605260206060a1005b5f5ffd5b5f80fd03350670029b058800df009f04200670003700bf001803d1
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000046b38522422d597ddbaa2d6e98d6c9b397028d5b00000000000000000000000043cfc64f00b4e45619cfbc7964d982fa022e0b91
-----Decoded View---------------
Arg [0] : _controller (address): 0x46b38522422D597dDbAA2D6E98D6C9b397028d5B
Arg [1] : _factory (address): 0x43CfC64f00B4E45619cFBC7964D982fa022E0b91
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000046b38522422d597ddbaa2d6e98d6c9b397028d5b
Arg [1] : 00000000000000000000000043cfc64f00b4e45619cfbc7964d982fa022e0b91
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.