proof-of-work based blockchain explained with golang