code: func getHardwareID() string {
  	if hardwareID != "" {
  		return hardwareID
  	}
  	address := ""
  	inters, err := net.Interfaces()
  	if err == nil {
  		for _, inter := range inters {
  			if inter.HardwareAddr.String() != "" {
  				address = inter.HardwareAddr.String()
  				break
  			}
  		}
  	}
  	if address == "" {
  		address = "0"
  	}
  	check32 := crc32.ChecksumIEEE([]byte(address))
  	id58 := base58.EncodeBig(nil, big.NewInt(int64(check32)))
  	hardwareID = string(id58)
  	return hardwareID
  }
docs: // getHardwareID returns a unique identifier for the current machine. It does this
  // by iterating through the network interfaces of the machine and picking the first
  // one that has a non-empty hardware (MAC) address. Then it takes the crc32 checksum
  // of the MAC address and encodes it in base58 encoding. getHardwareID caches results,
  // so subsequent calls will return the previously calculated result. If no MAC address
  // could be found, the function will use "0" as the MAC address. This is not ideal, but
  // generateRandomID uses other means to try and avoid collisions.