I'm still reading about Zerocoin and do not yet understand it fully, so take that into consideration with the following:
You don't necessarily have to use JNI if you intend to have Zerocoin live in AM storage.
Make a stand-alone program linked to libzerocoin that will use JSON (JSON-GLib with libSoup) to talk to the Nxt server.
I am, however, not clear on exactly how one would mint Zerocoin from NXT and transform previously minted Zerocoin back to NXT without a change to the Nxt server. We can easily destroy NXT that is converted to newly minted Zerocoin by sending the NXT to the genesis account. We cannot, however, generate new NXT when we want to redeem Zerocoin for NXT. What might be needed is to change the Nxt server to allow for some sort of global public NXT accumulator to keep track of number of "converted" coins at any given time (account # -1, perhaps?). But I haven't finished reading about Zerocoin so this might not be needed? I might not understand how this part is supposed to work yet. Not sure.
libzercoin also appears to be tailored to the Bitcoin blockchain.
Just a thought, but couldn't a parallel blockchain be used elusively for mixing purposes? You send your NXT to alt block chain, pay whatever fees, do zerocoin magic, and then your NXT appears in the parallel chain. The NXT in the parallel chain is completely identical to NXT in the main chain, so just do the reverse to get your coins back in the main chain in whatever account you specify. Nodes are encouraged to forge the parallel blockchain from the fees produced by people sending coins in and out of the mixing chain. Side-effect is that this will not bloat the main chain.
I'm not sure of the implications of the security risks though...
The improved zerocash algos create 288 bytes per transaction, so that is 3 transactions in an AM. I think that is small enough that we don't have to worry about bloat. I want to use as much of the existing infrastructure as possible.
I sort of like this approach, it allows the user to optionally use anon or not, since anon will obviously be more expensive
This has been discussed in length regarding BTC and anonymizing the protocol. It has to be everyone or no-one. The non-participators nullify the anonymity of the participators. Half measures are unacceptable. It has to be integrated into the whole network at the most basic level. Half measures are unacceptable. The marginal time/money cost should be considered collateral for the purpose that is serves and will always be open to optimization in the future anyways. Moving money in crypto is already dirt cheap. Adding a marginal cost on top of that at the protocol level for something so important is a trivial consideration.
Are you sure about it having to be an all or nothing? The zerocoin approach seems to get around this. Of course, if there is just one person using it, then it would be pretty easy to figure out who is using it, but if it was an asset in the Asset Exchange, it really would be separate from NXT so not sure why all of NXT needs to be anonymized.
In fact, since zerocoin was designed to be built on top of bitcoin, they clearly did not require all bitcoin users to use zerocoin. Similarily, our plan is to build zerocoin (NXTcash) on top of NXT. If zerocoin on top of bitcoin did not require all of bitcoin to be anonymized, I don't see how zerocoin on top of NXT requires all of NXT to be anonymized.
What am I missing?
James
P.S. zerocoin algos are pretty new, maybe the bitcoin discussions you talk about predate last summer?