@doc_metadata(categories=['<STR_LIT>'])<EOL><INDENT>def blocks_info(self, hashes, pending=False, source=False):<DEDENT>
hashes = self._process_value(hashes, '<STR_LIT:list>')<EOL>payload = {"<STR_LIT>": hashes}<EOL>if pending:<EOL><INDENT>payload['<STR_LIT>'] = self._process_value(pending, '<STR_LIT>')<EOL><DEDENT>if source:<EOL><INDENT>payload['<STR_LIT:source>'] = self._process_value(source, '<STR_LIT>')<EOL><DEDENT>resp = self.call('<STR_LIT>', payload)<EOL>blocks = resp.get('<STR_LIT>') or {}<EOL>for block, data in blocks.items():<EOL><INDENT>data['<STR_LIT>'] = json.loads(data['<STR_LIT>'])<EOL>for key in ('<STR_LIT>', '<STR_LIT>'):<EOL><INDENT>if key in data:<EOL><INDENT>data[key] = int(data[key])<EOL><DEDENT><DEDENT><DEDENT>return blocks<EOL>
Retrieves a json representations of **blocks** with transaction
**amount** & block **account**

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

:param pending: If true, returns pending amount as well
:type pending: bool

:param source: If true, returns source account as well
:type source: bool

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

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