  Blockchain sharding is a promising approach to solving the dilemma between
decentralisation and high performance (transaction throughput) for blockchain.
The main challenge of Blockchain sharding systems is how to reach a decision on
a statement among a sub-group (shard) of people while ensuring the whole
population recognises this statement. Namely, the challenge is to prevent an
adversary who does not have the majority of nodes globally but have the
majority of nodes inside a shard. Most Blockchain sharding approaches can only
reach a correct consensus inside a shard with at most $n/3$ evil nodes in a $n$
node system. There is a blockchain sharding approach which can prevent an
incorrect decision to be reached when the adversary does not have $n/2$ nodes
globally. However, the system can be stopped from reaching consensus (become
deadlocked) if the adversary controls a smaller number of nodes.
  In this paper, we present an improved Blockchain sharding approach that can
withstand $n/2$ adversarial nodes and recover from deadlocks. The recovery is
made by dynamically adjusting the number of shards and the shard size. A
performance analysis suggests our approach has a high performance (transaction
throughput) while requiring little bandwidth for synchronisation.
