# Vanillae ## How to use this project ## Downloads ## Quick Links - [Vanillae Grant Proposal][grant-proposal] - [Vanillae Files][vanillae-files], miscellaneous explainers mostly for things that should take 1 hour to learn but in practice take 11 hours because information has to be synthesized from multiple sources - Video content - [Vanillae Rumble Channel](https://rumble.com/c/c-3509606) - [Vanillae Odysee Channel](https://odysee.com/@VanillaeProject:0) - [Vanillae YouTube Channel](https://www.youtube.com/@vanillaeproject) - Miscellany: - [Aegora.jp][aegora], original impetus for product - [Aeternity JS SDK][aesdk], which you want for more complicated use cases ## About this project Aeternity is a high-performance open-source decentralized payment network. Vanillae is a tool suite for using Aeternity. There is both developer-facing tooling and user-facing tooling. There is also miscellaneous documentation, and explainers etc. The two developers are Craig Everett (@zxq9) and Peter Harpending (@pharpend). Vanillae grew out of [Aegora.jp][aegora]. We made a simple e-commerce store using Aeternity as the payment system. We encountered a lot of rough edges in Aeternity's tooling, so developed our own, and open-sourced it. The Aeternity Foundation chose to pay us to grow out our toolset, and that became this project. You can read the [grant proposal][grant-proposal] for more information. Often during this process we ran into some thing that really should take 1 hour to learn about, but in practice takes 11 hours because you have to synthesize information from 100 different sources. In many of those cases, we went to the trouble to write it all out in one place (that's the [Vanillae Files][vanillae-files]), and in some cases there are videos on our YT/Rumble/Odysee channels. The goal is to write an explainer doc and have one or more videos for each instance of information synthesis paralysis. Generally, we write tools that we want to use. So - Functionality tends to be pretty minimal. - The only usage cases covered are those we have actually encountered. - When we encounter a tradeoff between simplicity and flexibility, we generally have chosen simplicity. - Our primary deployment target is the [zx/zomp ecosystem][zx-zomp], not the Node/NPM ecosystem For instance, this means that our JS/TS code is meant to run inside a browser, and we don't give any thought to running it as server-side JS, because that's not something we would ever do ourselves. We're happy to support the Node/NPM ecosystem on a case-by-case basis as long as it doesn't force us to reduce the quality of our product. If you have a more complicated use case or live in the Node/NPM ecosystem, you want the [Aeternity JavaScript SDK][aesdk] The SDK is a Swiss Army Knife. Vanillae is just a set of knives, each of which was designed for a specific cutting task. ## Directory Structure ``` art/ Project icons, etc bindings/ FLAGSHIP: APIs to talk to the AE blockchain from app backend erlang/ [ERL] Erlang Vanillae Bindings docs/ Explainer docs baseN/ Base64 versus Base58 (they are fundamentally different ideas!) ecc/ Elliptic Curve Cryptography jex/ Jex: our TS/JS packaging tool we use instead of NPM kek/ The Keccak/SHA-3 Algorithm explained npm-misc/ How to install NPM on Linux such that you never have to use `sudo npm` rlp/ Ethereum's Recursive-Length-Prefix codec explained seed-phrases/ How seed phrase recovery works sk-awcp/ How to use Sidekick and AWCP jrx/ [TS] FLAGSHIP: the Jack Russell browser wallet extension libs/ Miscellaneous (non-flagship) libraries awcp/ [TS] Aepp-Waellet Communication Protocol: types for messages sent between page scripts and browser extension wallets parasite/ [TS] Function library for talking to public aeternity nodes (do not use please) tweetnacl/ [TS] Jex-packaged clone of public domain TweetNaCL library vdk_aeser/ [TS] Serializer/deserializer library for AE data structures vdk_base58/ [TS] Base 58 encode/decode library vdk_base64/ [TS] Base 64 encode/decode library vdk_binary/ [TS] Miscellaneous binary functions that should exist in the stdlib but don't vdk_colors/ [TS] Assigns a color to arbitrary byte array (for color-coding keys in JR) vdk_faert/ [TS] Fast AEternity Recovery Text: a replacement for the Bitcoin seed phrase standard vdk_names/ [TS] Assigns a human readable name to a byte array (for naming keys in JR) vdk_rlp/ [TS] Ethereum RLP standard TypeScript library vdk_safe/ [TS] Equivalent of Haskell's Either type vdk_tests/ [TS] Test/example suite for VDK vdk_tests_cases/ [TS] Randomly generated test cases for some VDK packages (e.g. checking our RLP agrees with Ethereum's) vrlp/ [ERL] Ethereum RLP library in Erlang sidekick/ [TS] FLAGSHIP: TS library to talk to browser wallet extension (e.g. Superhero, hence name) from page script sidekick_examples/ [TS] Example/test suite for sidekick site/ Website for the vanillae project (soon to be deprecated/deleted) utils/ Miscellaneous utilities jex/ [ERL] Simple TS/JS packaging utility, our alternative to NPM vlogd/ [ERL] Simple HTTP server that just logs input data, for demoing sidekick's HTTP logging functionality vw/ [ERL] Vanillae Wallet: scratchpad for working out complicated wallet stuff (e.g. seed phrase recovery) in saner environment ``` ## Flagship products ### Vanillae Bindings ### Jack Russell ### Sidekick ## Miscellaneous products of note ### Vanillae Files ### Jex [aegora]: https://aegora.jp [aesdk]: https://github.com/aeternity/aepp-sdk-js [grant-proposal]: https://forum.aeternity.com/t/active-application-vanillae/10638 [vanillae-files]: ./docs/ [zx-zomp]: http://zxq9.com/projects/zomp/