Make the most of your zkApp state!
o1js Pack is a library for o1js that allows a zkApp developer to pack extra data into a single Field.
The primary benefit of using this library in a smart contract is that it allows you to use more of your allotted 8 Fields of storage.
Check out example usage in a smart contract in Smart Contract Examples.
The benefit to using this library in a zk program is less obvious. In some cases, the number of gates required in a circuit is less using this library than with provable arrays. Especially in applications where the array is hashed many times, packing and unpacking ends up being more effecient than doing a lot of Poseidon hashes. In other cases, you may just prefer the API of o1js Pack compared to using provable arrays.
Check out example usage in a zk program in Zk Program Examples.
npm run build
npm run test src # non-proof tests
npm run test tests/provable # provable tests
Thanks to @mario_zito for seeding the idea for this library on Discord (Thread 1, Thread 2), and to @gregor for sounding out the early implementation.
Thanks to @iam-dev for early adoption!