Comments (2)
Actually, the implementation does not support negative values on the wires currently. The implementation of negative values is up to the programmer at this point. In the future, there will hopefully be classes that support this on top.
The modifications you suggested will only help to make the program run, but they won't make it run consistently as the programmer expects. For example, if the comparison methods of the Wire class are used (e.g. isGreaterThan) while supporting your modifications, they won't always give consistent results depending on the usage, because they assume unsigned values at this point (in other words, a method may output that a negative number is greater than a positive number if we let the programmer assign negative values on the wires your way). Therefore, I preferred to make the negative values explicitly not supported on the wires in this basic version, until consistent support is added in another version. I will add a clarifying comment later in the code that the setWireValue and other methods only assume unsigned values within 0 and p-1 at this point.
from jsnark.
Thanks for kind reply.
I agree Jsnark does not support negative and the "negative" is up to the programmer.
The problem happened when the first binary bit is one (long or int type), even if I know I just need to set 32bit or 64bit binary strings (unsigned) to some wires. It is kind a issue of Java, since we know the lack of unsigned types there.
As for my circuit, the purpose is to make unsigned arithmetic operations for 2048bit large integers. So all values to set are unsigned in my case. When I gave some 32 bit or 64 bit unsigned values, if some of them have the first binary bit as 1 (I made quotations to negative), the Snark interface will not work. The temporary fix is just for my case above.
It seems possible for us to represent real negative by using 2's complementary representation, as long as we take care of the trivial complementary calculation in the implementation of circuits, although I did not make trails. However, I used similar idea when implementing comparison of two unsigned wires.
A comment or new method will be more than great! Thanks so much for following up.
Might be we can hope Jsnark can support more types such as signed values, such that a lot of trivial work of designing circuit can be avoided. Thanks again for the great contribution!
from jsnark.
Related Issues (20)
- What License is this? HOT 1
- `make` fails for missing includes HOT 3
- JAVA Version
- SHA 256 gadget's output wires have negative id HOT 2
- Questions about RSAEncryptionV1_5_Gadget HOT 2
- Using AES128CipherCircuitGenerator with plaintexts of size more than 16 bytes HOT 2
- Clarifying the use of the input parameter 'bitwidthPerInputElement' in SHA256 gadget HOT 3
- verifying proof on blockchain HOT 2
- toturial
- LongElement multiplication without creating prover witness wires. HOT 1
- HELP: how to implement a solution in practice?
- Change the curve HOT 2
- Computing scalar multiplication using a negated scalar, on the Elliptic Curve HOT 2
- How to initialize a number on the prime field? HOT 1
- cmake failed HOT 2
- libsnark fails for circuits with checkNonZero depending on execution order HOT 2
- How to recover circuit output from two files HOT 3
- Questions about RSAEncryptionCircuitGenerator HOT 2
- Floating point exception (core dumped)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsnark.