Limitations
Our SDK release provides developers with the chance to start building with Nillion. The current release allows developers to build with our Python, JavaScript and CLI clients, Nada language, and our command line tools. As we build the Nillion SDK and tools in public, we want to work with the community to make them even better.
Expectations
- Evolving UX, developer tools, and documentation
- Frequent, sometimes breaking changes, but we will do our best to communicate them ahead of time in Announcements
- Bugs - please report any you find in Bugs
- Missing features - suggest a feature request in Ideas
- Documentation gaps - if you notice something is missing, please let us know by creating a Github Issue
Here are some of the limitations or constraints you should be aware of when being an early builder with Nillion’s SDK.
Platforms
The Nillion SDK tool binaries can be installed with nilup
for the following platforms:
- Apple (M1/M2)
- Apple (Intel chip)
- Linux (ARM chip)
- Linux (Intel/AMD chip)
Binaries are not yet available for Windows.
Nillion Clients
- We have released 3 clients to the community: a Python, JavaScript, and CLI Client. In general the clients have feature parity, however please refer to the Nillion Client docs to see the exact functionality provided by each.
- You can only compile programs from the CLI
pynadac
ornada
tools — compilation isn’t available in the Python or JavaScript clients. - If there is a particular feature you need and believe is missing in one of the clients, please report it in Bugs.
JavaScript Client
- Currently the JS client is only tested on Chromium browsers (Chrome, Brave & Edge) and production deployments will likely require activating COOP and COEP headers.
- The JS client is a browser client and does not yet work in NodeJs.
CLI Client
Running the nillion-devnet
command (SDK tool) will spin up a local devnet on your machine.
- The devnet that is spun up will be limited by the hardware it is running on. Keep an eye on the CPU usage when running large computations.
- Pre-processing elements are generated from scratch each time a local devnet is spun up. This means you may need to wait a little time (10-15 seconds) before the network is able to store and compute. For reference, currently 8192 alphas & 8192 lambdas are generated when you spin up a new local devnet.
- Anything you store (programs, secrets etc) in one instance of
nillion-devnet
will not be shared with another devnet you spin up, meaning you will have to restore any stored programs or secrets in the new devnet. - The devnet does not currently support transport targets other than localhost.
One node key per client
- If you are instantiating multiple clients (users) at once (e.g.
Party1
,Party2
,Party3
for a multi party compute), ensure that each instantiated client uses a different node key. If a node key is reused, across clients, you will see a timeout error.
Secrets
- Secrets are not yet user scoped.
- Continuously storing secrets in a loop can lead to errors due to the necessity of blinding factors for secret storage. Blinding factors are generated by the network on demand when a threshold is met. If secrets are stored continuously, the network may struggle to generate blinding factors in time.
Nada language, programs, and inputs
Check the Nada language docs for the current data types and operations available.
No random value generation in Nada
- We expect random value generation in Nada in the future.
No function composition / Simplified scope
Function composition is not yet possible due to Nada's simplified variable and scope management. Consider the following code fragment:
def inc(a: SecretInteger, my_int: SecretInteger) -> SecretInteger:
return a + my_int
def inc2(a: SecretInteger) -> SecretInteger:
return inc(a, SecretInteger(2))
The Nada compiler will throw an error as inc2
does not have access to inc
.
Zeros (as inputs, and divide by 0)
- Currently you should not use 0 as an input value as it may leak other secrets. We are working on fixing this.
- Ensure that your programs do not attempt to divide by 0, this is not supported in our language currently.
Authentication in scaffold-nillion
- We have not yet implemented a proper authentication solution. Currently in the JavaScript Quickstart Scaffold-Nillion repo we are using an experimental MetaMask Snap, nillion-user-key-manager, which is installable here, as a temporary mechanism to allow a user to generate a Nillion user key, and then locally store their user key for use in Nillion apps, which require a user key for client initialization. We do not recommend doing this in a production environment.