proposal-46/contracts/Proposal.sol
2024-01-31 10:12:30 +00:00

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);
}
}