You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
676 B
25 lines
676 B
3 years ago
|
const ImplementationLabel = 'eip1967.proxy.implementation';
|
||
|
const AdminLabel = 'eip1967.proxy.admin';
|
||
|
const BeaconLabel = 'eip1967.proxy.beacon';
|
||
|
|
||
|
function labelToSlot (label) {
|
||
|
return '0x' + web3.utils.toBN(web3.utils.keccak256(label)).subn(1).toString(16);
|
||
|
}
|
||
|
|
||
|
function getSlot (address, slot) {
|
||
|
return web3.eth.getStorageAt(
|
||
|
web3.utils.isAddress(address) ? address : address.address,
|
||
|
web3.utils.isHex(slot) ? slot : labelToSlot(slot),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
ImplementationLabel,
|
||
|
AdminLabel,
|
||
|
BeaconLabel,
|
||
|
ImplementationSlot: labelToSlot(ImplementationLabel),
|
||
|
AdminSlot: labelToSlot(AdminLabel),
|
||
|
BeaconSlot: labelToSlot(BeaconLabel),
|
||
|
getSlot,
|
||
|
};
|