Bitcoin miner in elixir , please provide a code review and suggest good practices

3 Likes

can be simplified to

def check_hash(s, k) do
  String.slice(s, 0..k-1) === ref_string(k)
end

A good practice is to format your code properly, write documentation for functions, use descriptive names for variables, write tests …

You might want to check for other messages in the receive blocks, so that the message queue doesn’t grow indefinitely.

3 Likes

The following code at the top of the server file

    def parse_args(args) when length(args) == 0 do
      IO.puts " usage: \n ./project1 k \n or \n ./project1 ip_addr"
    end

    def parse_args(args) when length(args) == 1 do
    	a = String.split(hd(args), ".")
    ...

can be re-written without the guards and hd() function

    def parse_args([]) do
      IO.puts " usage: \n ./project1 k \n or \n ./project1 ip_addr"
    end

    def parse_args([arg]) do
    	a = String.split(arg, ".")
    ...
4 Likes

Also just to second … idiot above writing some tests and running a formatter (like the built in mix format task in elixir version 1.6-dev) would be an awesome addition and in line with best practices.

2 Likes