def blocks(self, hashes):
        """
        Retrieves a json representations of **blocks**

        :param hashes: List of block hashes to return
        :type hashes: list of str

        :raises: :py:exc:`nano.rpc.RPCException`

        >>> rpc.blocks(
        ...     hashes=["000D1BAEC8EC208142C99059B393051BAC8380F9B5A2E6B2489A277D81789F3F"]
        ... )
        {
            "000D1BAEC8EC208142C99059B393051BAC8380F9B5A2E6B2489A277D81789F3F": {
                "account": "xrb_3e3j5tkog48pnny9dmfzj1r16pg8t1e76dz5tmac6iq689wyjfpi00000000",
                "work": "0000000000000000",
                "source": "FA5B51D063BADDF345EFD7EF0D3C5FB115C85B1EF4CDE89D8B7DF3EAF60A04A4",
                "representative": "xrb_3e3j5tkog48pnny9dmfzj1r16pg8t1e76dz5tmac6iq689wyjfpi00000000",
                "signature": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "type": "open"
            }
        }

        """

        hashes = self._process_value(hashes, 'list')

        payload = {"hashes": hashes}

        resp = self.call('blocks', payload)
        blocks = resp.get('blocks') or {}

        for k, v in blocks.items():
            blocks[k] = json.loads(v)

        return blocks