A method of reaching consensus in a blockchain network including a plurality of nodes, comprising: clustering the nodes into a plurality of sites, wherein the plurality of sites comprises a first site and at least one other site; randomly selecting a node at each of the plurality of sites as a representative node; initializing a weight for each node; receiving, by each node, a plurality of transactions; receiving, by the representative node of the at least one other site from each of the other nodes of the at least one other site, the plurality of transactions; receiving, by a first representative node of the first site from each representative node in the at least one other site, the plurality of transactions; constructing, by the first representative node, a first block including the plurality of transactions received by the first representative node; performing a weighted consensus mechanism to verify the first block, wherein each of the nodes in the first site participates in a weighted byzantine fault tolerant consensus mechanism and wherein the consensus is based upon each node's weight; and if the block is validated by the nodes in the first site: forwarding, by the first representative node of the first site, the block to the representative nodes of the at least one other site; performing, at each of the at least one other site, a weighted byzantine fault tolerant consensus mechanism by the nodes of the at least one other site on the first block to validate the first block; performing a byzantine fault tolerant consensus mechanism by the representative nodes of the plurality of sites to validate the first block; and if the first block is validated by the representative nodes of the plurality of sites: adding, by all the nodes, the first block to a blockchain; updating, by all the nodes, each node's weight; and updating, by all the nodes, the representative nodes for each site by selecting the node at each site with the highest weight. clustering the nodes into a plurality of sites, wherein the plurality of sites comprises a first site and at least one other site; randomly selecting a node at each of the plurality of sites as a representative node; initializing a weight for each node; receiving, by each node, a plurality of transactions; receiving, by the representative node of the at least one other site from each of the other nodes of the at least one other site, the plurality of transactions; receiving, by a first representative node of the first site from each representative node in the at least one other site, the plurality of transactions; constructing, by the first representative node, a first block including the plurality of transactions received by the first representative node; performing a weighted consensus mechanism to verify the first block, wherein each of the nodes in the first site participates in a weighted byzantine fault tolerant consensus mechanism and wherein the consensus is based upon each node's weight; and if the block is validated by the nodes in the first site: forwarding, by the first representative node of the first site, the block to the representative nodes of the at least one other site; performing, at each of the at least one other site, a weighted byzantine fault tolerant consensus mechanism by the nodes of the at least one other site on the first block to validate the first block; performing a byzantine fault tolerant consensus mechanism by the representative nodes of the plurality of sites to validate the first block; forwarding, by the first representative node of the first site, the block to the representative nodes of the at least one other site; performing, at each of the at least one other site, a weighted byzantine fault tolerant consensus mechanism by the nodes of the at least one other site on the first block to validate the first block; performing a byzantine fault tolerant consensus mechanism by the representative nodes of the plurality of sites to validate the first block; and if the first block is validated by the representative nodes of the plurality of sites: adding, by all the nodes, the first block to a blockchain; updating, by all the nodes, each node's weight; and updating, by all the nodes, the representative nodes for each site by selecting the node at each site with the highest weight. adding, by all the nodes, the first block to a blockchain; updating, by all the nodes, each node's weight; and updating, by all the nodes, the representative nodes for each site by selecting the node at each site with the highest weight.