A method for mining a block in a blockchain, preferably Bitcoin, said block comprising a block header, as a function of a selected hash function applied on the block header, the selected hash function comprising an expansion operation and a compression operation, the method performed on a computer system, said computer system comprising a single expander entity for performing said expansion operation and a plurality of compressor entities each being adapted to perform a compression operation and all operating synchronously, comprising the steps of: Computing a plurality, m, of mid-states, each as a function of selectively varying a selected first portion of the block header, starting from a respective unique mid-state of said plurality mid-states by a mid-state generator entity, wherein said mid-state generator entity computes a new-mide-state every compressor entity pipe clock with each mid-state being passed down the compressor entity chain at that same pipe clock rate; [1.1] Distributing said computed plurality of m mid-states to a beginning stage of said plurality of compressor entities, Computing by said single expander entity a message schedule, said message schedule comprising a plurality of message schedule elements, on input of a message and a nonce by performing said expansion operation on a selected second portion of the block header; said single shared expander entity being provided by a single shared rolled message expander entity or a cloud of combinatorial logic associated with each compressor entity; [2.1] Sharing said computed message schedule between said one or more compressor entities by said expander entity; [2.2] Delaying delivery of said computed plurality of m mid-states to a final stage of said plurality of compressor entities using a FIFO-memory, having a number of stages, the number of stages corresponding to said number of computed message schedule elements of said message schedule; Computing for each of the m mid-states by performing the compression operation on the computed mid-state and the computed message schedule, a respective one of m results Computing a plurality, m, of mid-states, each as a function of selectively varying a selected first portion of the block header, starting from a respective unique mid-state of said plurality mid-states by a mid-state generator entity, wherein said mid-state generator entity computes a new-mide-state every compressor entity pipe clock with each mid-state being passed down the compressor entity chain at that same pipe clock rate; [1.1] Distributing said computed plurality of m mid-states to a beginning stage of said plurality of compressor entities, Computing by said single expander entity a message schedule, said message schedule comprising a plurality of message schedule elements, on input of a message and a nonce by performing said expansion operation on a selected second portion of the block header; said single shared expander entity being provided by a single shared rolled message expander entity or a cloud of combinatorial logic associated with each compressor entity; [2.1] Sharing said computed message schedule between said one or more compressor entities by said expander entity; [2.2] Delaying delivery of said computed plurality of m mid-states to a final stage of said plurality of compressor entities using a FIFO-memory, having a number of stages, the number of stages corresponding to said number of computed message schedule elements of said message schedule; Computing for each of the m mid-states by performing the compression operation on the computed mid-state and the computed message schedule, a respective one of m results