Post-sapling zcashd - on a Pi?

cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 89.60
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 1
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 89.60
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 2
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 89.60
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 3
model name      : ARMv7 Processor rev 4 (v7l)
BogoMIPS        : 89.60
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

Hardware        : BCM2835
Revision        : a020d3

ah, here’s what I get on my arm64 build server (whatever the heck Scaleway uses):

 cat /proc/cpuinfo
processor       : 0
BogoMIPS        : 200.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x43
CPU architecture: 8
CPU variant     : 0x1
CPU part        : 0x0a1
CPU revision    : 1

CPU architechture: 8 is I think the minimum level you need (not that there’s a 9 yet, is there?)

Pine64 and new enough Odroid boards running Debian can pull off running zksnark coins I know

1 Like

Stil trying?

I’ve tried building in on an odroid c2 and this is where I am :roll_eyes:

I’m not sure if anyone has been successful. I think it would be an awesome project.

If someone does get a Zcash node on a Pi working please let me know. I would love to pick up a few Pi’s and have them running 24/7 for the network.

Maybe worth a zip proposal ?

2 Likes

Sure, @den if we could iron out which dependencies Zcash core needs to add to make it possible. I do know that it was working at one point: https://twitter.com/radix42/status/1104752606230937600?s=09

The biggest issue is the Zcashd release/depreciation schedule is so often which leads to constantly needing to update any ARM code that may be compatible.

1 Like

That’s where I was hoping the zip proposal could look more like an “idea box” that the zcash team could open to review the proposals.
I have limited knowledge. I just try things in my free time. What you mention here is most probably needed but beyond my competences and makes me feel like proposing a zip is not for me…

(A bit off subject :slight_smile: )

Also, see this regarding cross-compiling for ARM Cross-compiling BDB fails during configuration of atomic operations · Issue #3710 · zcash/zcash · GitHub so there is work being done.

I don’t think a ZIP is relevant in this case as there are not consensus changes as this is an engineering build issue. Funding development of it via a Foundation grant, for example, would be a good idea.

2 Likes

Also this thread has information about the previous version: Announcing Zcash 1.0.2 for arm64 we

1 Like

UPDATE: Radix42 has generously updated her ARM code and is now available: https://twitter.com/radix42/status/1104907304124657664?s=09

@garethtdavies @den should download it while it’s still available

2 Likes

Awesome, and many thanks for the binaries @radix42.

I don’t have any development boards that can run armbian, but a good excuse to get an Odroid :smile:

I did run this on an ARM-based A1 instance at AWS and seems to work well on the initial block download at least (which is all I tested) :+1:

uname -p
aarch64
1 Like

I now have zcashd running on a Pi 3B using the cross-compiled binaries built from this link Trying to build on ARM - #4 by str4d

You need to run the Pi with a 64 bit OS so you can run the ARMv8 build and there are no officially supported ones (i.e. Raspian definitely won’t work). I used this Debian release GitHub - bamarni/pi64: A 64-bit OS for the Raspberry Pi 3 which works nicely. I also had to do the ARM cross-compile on Debian (I also used Stretch) as cross-compiling on a newer Ubuntu release led to dependency errors.

It’s currently syncing the testnet, albeit slowly, and will try to send a Sapling tx once that is complete.

5 Likes

Nice! Did you see this @den :arrow_up:

1 Like

I sent a fully shielded Sapling transaction on testnet on a Pi 3B https://explorer.testnet.z.cash/tx/55248255aef7e697d891e55d35badabf470a51b3f288134125437e2a497e805b and worked really well - that took around 30 seconds to complete (1 input 2 outputs). A t->z transaction took around 2.5 seconds.

I had some issues with the initial sync with running out of memory and eventually just copied over the datadir from a synced testnet. I deliberately tried to avoid using swap for performance reasons but on starting zcashd I got stuck on loading block index for ages before it crashed so I added a small swap file (on a USB thumb drive as that’s what I had lying around) and it worked nicely. I think the 2GB of say an Odroid C2 might be the sweet spot (not sure about the initial sync but you might just need to be really patient if you don’t want to copy over as I did). Once it is running though, it is doing so on testnet with no issues.

I plan to try this on the mainnet next on a Pi3B+. I’ll add some swap via a SSD this time to see if I can overcome those initial sync issues.

2 Likes

Pairing this with ZecWallet on a PC also works really well using port forwarding (https://docs.zecwallet.co/using-zec-qt-wallet/#connecting-to-an-external-zcashd) to give a nice GUI. Adding in the companion Android app and it’s a little convoluted but can also send via a mobile and the Pi node :smile:

1 Like

Results from a Pi 3B+ were pretty similar. I was able to install the Ubuntu 18.04.2 preinstalled server image from Ubuntu 18.04.6 LTS (Bionic Beaver) (64 bit ARM) and the cross-compiled build. I added a 2GB swap file on a SSD - you can get away with a smaller file but you’ll need some swap to get over the initial loading block index when starting zcashd.

Same issue with syncing mainnet and resorted to copying the datadir from an existing node (all 22GB of it). I think this is realistically the only way to do it (or download a hosted version).

Once it is synced though it works great (on mainnet) and fully shielded Sapling transactions typically take of the order of 20-30 seconds depending on the number of outputs.

This fully shielded transaction, which included a memo to z-board took 18.2 seconds to complete https://zcashnetwork.info/tx/1b44ef787696c959adef0130c0f36ba714cf87849d0c25bc0b1cc009ac5976ee.

5 Likes

Awesome, definitely going to try this.

you can use this

I don’t have an ARM machine but if you are quite confident your changes to build.sh could be beneficial to everyone, you are welcome to file a pull request on the Zcash GitHub.