// SPDX-License-Identifier: GPL3 pragma solidity =0.8.0; interface IMVDProxy { function init( address votingTokenAddress, address functionalityProposalManagerAddress, address stateHolderAddress, address functionalityModelsManagerAddress, address functionalitiesManagerAddress, address walletAddress, address doubleProxyAddress ) external; function getDelegates() external view returns (address[] memory); function getToken() external view returns (address); function getMVDFunctionalityProposalManagerAddress() external view returns (address); function getStateHolderAddress() external view returns (address); function getMVDFunctionalityModelsManagerAddress() external view returns (address); function getMVDFunctionalitiesManagerAddress() external view returns (address); function getMVDWalletAddress() external view returns (address); function getDoubleProxyAddress() external view returns (address); function setDelegate(uint256 position, address newAddress) external returns (address oldAddress); function changeProxy(address newAddress, bytes calldata initPayload) external; function isValidProposal(address proposal) external view returns (bool); function isAuthorizedFunctionality(address functionality) external view returns (bool); function newProposal( string calldata codeName, bool emergency, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string calldata methodSignature, string calldata returnParametersJSONArray, bool isInternal, bool needsSender, string calldata replaces ) external returns (address proposalAddress); function startProposal(address proposalAddress) external; function disableProposal(address proposalAddress) external; function transfer( address receiver, uint256 value, address token ) external; function transfer721( address receiver, uint256 tokenId, bytes calldata data, bool safe, address token ) external; function flushToWallet( address tokenAddress, bool is721, uint256 tokenId ) external; function setProposal() external; function read(string calldata codeName, bytes calldata data) external view returns (bytes memory returnData); function submit(string calldata codeName, bytes calldata data) external payable returns (bytes memory returnData); function callFromManager(address location, bytes calldata payload) external returns (bool, bytes memory); function emitFromManager( string calldata codeName, address proposal, string calldata replaced, address replacedSourceLocation, uint256 replacedSourceLocationId, address location, bool submitable, string calldata methodSignature, bool isInternal, bool needsSender, address proposalAddress ) external; function emitEvent( string calldata eventSignature, bytes calldata firstIndex, bytes calldata secondIndex, bytes calldata data ) external; event ProxyChanged(address indexed newAddress); event DelegateChanged(uint256 position, address indexed oldAddress, address indexed newAddress); event Proposal(address proposal); event ProposalCheck(address indexed proposal); event ProposalSet(address indexed proposal, bool success); event FunctionalitySet( string codeName, address indexed proposal, string replaced, address replacedSourceLocation, uint256 replacedSourceLocationId, address indexed replacedLocation, bool replacedWasSubmitable, string replacedMethodSignature, bool replacedWasInternal, bool replacedNeededSender, address indexed replacedProposal ); event Event(string indexed key, bytes32 indexed firstIndex, bytes32 indexed secondIndex, bytes data); }