-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PoC Miximus application for end-users #4
Comments
Use case: Bob sends 10 ETH to Alice, by depositing into Miximus
The secrets that Alice generates can be derived in the same way as a HD wallet. e.g. for every coin you need 2 pieces of key material, 1) a nonce, 2) the secret key for an secp256k1 key pair (provable with ecrecover). Via the command-line interface it would look something like: Alice first creates the hashes:
Then Alice gives the hashes to Bob, who deposits coins for her:
|
Issue Status: 1. Open 2. Started 3. Submitted 4. Done This issue now has a funding of 500.0 DAI (500.0 USD @ $1.0/DAI) attached to it.
|
@uivlis Hey, thanks for applying. Feel free to ask any questions, if there's anything you need just let me know and I'll see what I can do. |
Hi @HarryR ! I can barely set up the repository, I've been running
Note that this is a Cloud9 workspace, maybe there's the problem? |
Hi @uivlis - I haven't come across this error before. This looks like it's trying to load a verification key from a JSON file, but is failing because the Ah, this is when running the python tests. See: #9 for more details - I'm unsure why you're encountering this problem, and I can't reproduce it locally (or via the CI build system), but I could offer assistance via video conference etc. to help you resolve it. |
So, I must say that the first issue I ran into was this:
into
only to result in the error from my first comment. Even before that, I ran into issues like Yeah, I would feel grateful for some assistance, is this mail live: [email protected]? |
Yes it is live. I'll see if I can reproduce the error with different versions of Python, it seems fairly straightforward. |
@HarryR i tried setting it up locally as i am interested in this one, i've read a paper related to coin mixing for my college project and looks like you are actually trying to implement some kind of anonymity in txs.
|
Hi @nanspro apologies for the delay. I have made a ticket for this and included what should fix the problem: HarryR/ethsnarks#118 Can you confirm this fixes the problem? I'm surprised Alternatively, you can install |
@HarryR sorry for the delay, was busy with exams and then hackathon :) Yes after changing the code as you suggested it is working now!! |
We want to create an application which uses miximus and through that users should be able to deposit, transfer, withdraw ether. |
No problem :D There are a few things which are in the gap between 'Miximus as a PoC' and 'Miximus as a usable application'.
Does it make sense that you can have these anonymous The more you get into it, the more you'll figure out right? But, ideally, if we think of scenarios like 'I want to mix a token' or 'I want to pay somebody with an anonymous token', then if you see which steps both people would have to do to make that happen, then you can write software to automate it etc. I guess the end-goal is figuring out what is possible, how does that work step-by-step, and how can we make this as easy as possible where 90% of it is automated, so people can do it without having to think (e.g. I have mobile phone, you have mobile phone, we press the 'transfer button' and bump the phones together, and the rest is magic) etc. Even if you make a program which could work if you added Miximus to it, but which is only a proof of concept or an idea, that is still really helpful, because it works towards finding out all of these details and how it can be used. e.g. if you made a CLI program to manage 'anonymous tokens', and the 'mix' function just returns |
@HarryR There is a interesting issue ... and with you help and support it would help me dig deeper . It is still open, am I allowed to give it a trial |
Hi @janus There is a good example of how a client-application can be made for Miximus: https://github.com/argentlabs/hopper If you need anything - just let me know and I'll try to assist. |
@HarryR |
Hey @HarryR You actually provided a lot of useful info above but i am little confused with what PoC means here? I am thinking about a CLI application which will perform tasks as you mentioned above and i think such app will make it easier to test/improve the workflow of miximus. I will have more idea once i start and i'll try to address the technical issues like how one can track his owned anonymized tokens etc. Just wanted to confirm with you once whether this is something which you'd like to see or not :) Thanks! |
Hi I have no idea what's going on with GitCoin tbh. But, it seems the bounty is still up for grabs. We were looking for people to get onboard with making these zkSNARK proof of concepts more user-friendly, with a bounty to help as an incentive so we could figure out how to make it as easy to use as possible and find out the challenges involved in integrating it into wallet software etc. That's a good question - if Hopper exists - why would we need a CLI? Is a CLI even a good idea etc. I still think there's a lot of discovery worth doing, maybe Miximus isn't the best project to put effort towards, maybe there are other similar concepts which the codebase could be easily adapted to fit (like Semaphore) where having a good CLI interface would help figure out the first steps and define a model that more user-friendly applications could re-use or implement without having to do all of the work and re-invent wheels. What are your thoughts? |
I am free and would like to participate. |
Hey @HarryR I am actually very fascinated by zero knowledge proofs and been reading about them lately. The actual maths behind them is little difficult to understand so i am reading about their implementations as of now. I guess the best way for me to understand more would be to contribute to such issues so that's why i reached out. Let me know if there's anything you'd like me to do particularly for this one. Ohh and i'll be coming to devcon also as i got an scholarship from EF to attend. I'll definitely be attending this workshop https://devcon.org/agenda?talk=recHnsoAr2afR4CfJ to know more about zkps. |
I am a user, I want to use Miximus, I have tokens or Ether which I want to convert into anonymised tokens. How do I do this?
Once my tokens have been anonymised I need to withdraw them again, to convert them back to the original tokens or Ether that I originally deposited. I should also be able to give these anonymised tokens to other people, without revealing that it was I that deposited them. As a user, should it be possible to lose access to my anonymised tokens even though I still have the private key for my Ethereum account?
We need to make a proof of concept application which uses Miximus and allows users to do common tasks, like deposit, withdraw, transfer etc.
There is JavaScript code which uses node-ffi and web3 to perform deposits/withdraws: https://github.com/HarryR/ethsnarks-miximus/blob/master/solidity/test/TestMiximus.js
And Python code to use the native module to create proofs: https://github.com/HarryR/ethsnarks-miximus/blob/master/python/test/test_miximus.py
Using either of these, can a proof-of-concept application be created that allows people to use Miximus more easily?
How does this work as a command-line application?
The command-line app needs to connect to an Ethereum full node, it needs to store state, provide a mechanism for converting currency into anonymised tokens, and provide a mechanism for converting the anonymous tokens back in to the original currency.
e.g.
Then as
Then as me again:
There is a problem with this 'ideal user flow' - at any given point in time you know exactly what your balance is, you can send money to others, and withdraw an arbitrary amount. This matches the account model of Ethereum (and most other wallets) by creating a useful abstraction regardless of the number of underlying transactions, for example with Bitcoin you have N UXTOs which represent your balance.
This makes anonymity difficult because with a UXTO model your account can be correlated to determine the exact value of a transfer - e.g. if I do 10 transactions with a fixed coin size of 1ETH then 'they' know I'm sending 10 ETH to somebody.
Technical Challenges
How do you have an account-style model with anonymous tokens?
Following on from ZCash you need a split and join circuit, in addition to an arbitrary value for the transactions.
For example, you deposit 10 ETH, you now have a single token worth 10 ETH. You can then transfer 5 ETH to a friend by using a 'split transaction' where you take a single input and output two new coins. To receive the coins you need to use a Join transaction to combine your current balance with the new input. If 100 people send coins to you, you'd need to perform 100 join transactions to collect it all into a single account.
The alternative is a UXTO model where your available funds exist as separate coins, however in that case if you had denominations of 0.3, 0.5 and 0.2 you'd have to create a join transaction with 3 inputs and 1 output. This becomes a problem when the circuit is of a fixed size.
Compromise between usable and perfect
In a perfect world the zkSNARK circuit could join an unlimited number of inputs into an unlimited number of outputs, this is technically possible if you were to process the merkle tree update for spendable coins within the circuit - but that limits everybody to 1 transaction per block otherwise everybody else gets rejected due to conflicts.
What is the worst case though?
The text was updated successfully, but these errors were encountered: