Xenoncat OSX Port

I managed to get Xenoncat’s solver working on OSX with some minor modifications, sharing this so Mac users don’t get left behind :wink: Let me know if this works for other mac users!

5 Likes

Hey @zeon-mac, it works with my early 2011 mbp (i7 2,7 Ghz) ! Thank you for your work.

Are xenocat solvers available for Linux?

It is, just look in the repo.

Please correct all mention of xenocat to xenoncat …

Have you gotten libsnark to build on OS X with clang from Xcode? That’s what’s holding up a Mac build of full zcash

1 Like

@anon47418038 I gave it a look. I’m stuck on a pretty confusing Clang template implementation issue. This simple multiplication statement fails to compile on Clang but not GCC.

test_bilinearity.cpp:

G1<ppT> P = (Fr<ppT>::random_element()) * G1<ppT>::one();
src/algebra/curves/tests/test_bilinearity.cpp:26:45: fatal error: invalid operands to binary expression
      ('Fp_model<3L, edwards_modulus_r>' and 'libsnark::edwards_G2')

It appears to be due to a particular edge case of template matching implementation:
edwards_g1.hpp:

template<mp_size_t m, const bigint<m>& modulus_p>
edwards_G1 operator*(const Fp_model<m,modulus_p> &lhs, const edwards_G1 &rhs)
{
    return scalar_mul<edwards_G1, m>(rhs, lhs.as_bigint());
}

This Clang note right here is the source of the pain:

 src/algebra/curves/edwards/edwards_g2.hpp:89:12: note: candidate template ignored: substitution failure [with m = 3]: deduced non-type
 template argument does not have the same type as the its corresponding template parameter ('bigint<edwards_r_limbs>' vs 'const bigint<3L> &')

I think what is happening is that since the Fp_model has a const (3L) as a parameter Clang’s template inference cannot match it. I saw a similar issue submitted as a clang bug here: 22738 – After r224456, clang++ fails to substitute some non-type template arguments

Yeah I get TONS of messed up template errors on Windows, too, but that’s with gcc!

Unfortunately I’ve spent my time since the 1980’s dodging C++, and now here I find myself working on a project written in it. I’ve been working on getting the dependency build tooling in shape for Windows, which is now in place, only to have differences between linux and windows gcc holding me up now.

Trying to build zcash on macOS with the brew distro of gcc is held up by the fact that libsnark wants to use GNU ar, but parts of the rest of it need to use Apple’s linker. :frowning:

I am confused isn’t this software to mine? If you’re not able to run zcash on OS X, where will the mined coins go?

Can I use this to mine on a pool? How?
Also, the guide suggests to disable ASLR but doesn’t give any info on how to do so, could you help?
If I just make on my mac, I get a bogus executable crashing at the start.

@anon47418038 I got your repos working and get 8sol/sec on 2015mbp. Is xenoncat solver already integrated into upstream repos? Any chance that’s possible? (I can’t tell, as there are notes such as: “optimize xenoncat’s fixed memory layout”)

2 Likes

Is that a native OS X build??? If so, I believe you are the first!!

If that’s the case, please push any changes needed to a fork of my repo and open a pull request against my branch you built on!

1 Like

All the mac branches in my fork are merges of the upstream zcash repo with the tweaks I’ve made in depends, configure.ac and my added zcutil/build-mac.sh…anything referencing xenoncat came from upstream

This! Please @subtly!

1 Like