async fn etherscan_get_abi(self: Arc<Self>, address: Address) -> EtherscanResponse {
        let method_latency = METRICS.call[&"etherscan_get_abi"].start();
        match Self::verification_info(State(self), Path(address)).await {
            // Return the abi only for the target address, omit other matches.
            Ok(verification_info) if verification_info.request.req.contract_address == address => {
                method_latency.observe();
                EtherscanResponse::successful(verification_info.0.artifacts.abi.to_string())
            }
            _ => EtherscanResponse::failed("Contract source code not verified".into()),
        }
    }
Returns contract's ABI by its address in Etherscan-like format. If the contract is not verified, it returns
the same error as Etherscan does.
core/node/contract_verification_server/src/api_impl.rs