35 lines
1.4 KiB
Solidity
35 lines
1.4 KiB
Solidity
// SPDX-License-Identifier: UNLICENSED
|
|
pragma solidity ^0.8.9;
|
|
|
|
import "./interfaces/ILoopbackProxy.sol";
|
|
import "./interfaces/IENSResolver.sol";
|
|
import "./libraries/Base58.sol";
|
|
import "./libraries/EnsNamehash.sol";
|
|
|
|
contract Proposal {
|
|
using ENSNamehash for bytes;
|
|
using Base58 for bytes;
|
|
|
|
IENSResolver constant ensResolver = IENSResolver(0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41);
|
|
string constant docsEns = "docs.tornadocash.eth";
|
|
string constant docsSourceEns = "docs.sources.tornadocash.eth";
|
|
string constant docsIpfs = "QmYjBe2bNTGQzgdqAi7hkdNJ9BBrAgf4e8teRWLa4oN6Y6";
|
|
string constant docsSourceIpfs = "QmcdTqAMD4nvDhAfWkEnKCQHhFk8K7XmFDouextcfrjWif";
|
|
address constant governanceAddr = 0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce;
|
|
address immutable newGovernanceImplementation;
|
|
|
|
constructor(address _newGovernanceImplementation) {
|
|
newGovernanceImplementation = _newGovernanceImplementation;
|
|
}
|
|
|
|
function calculateIpfsContenthash(string memory ipfsCid) internal pure returns (bytes memory) {
|
|
return bytes.concat(hex"e3010170", Base58.decodeFromString(ipfsCid));
|
|
}
|
|
|
|
function executeProposal() external {
|
|
ensResolver.setContenthash(bytes(docsEns).namehash(), calculateIpfsContenthash(docsIpfs));
|
|
ensResolver.setContenthash(bytes(docsSourceEns).namehash(), calculateIpfsContenthash(docsSourceIpfs));
|
|
ILoopbackProxy(governanceAddr).upgradeTo(newGovernanceImplementation);
|
|
}
|
|
}
|