Author

Topic: [BETA] Dark Exchange: a 100% decentralized p2p exchange (Read 15857 times)

sr. member
Activity: 350
Merit: 250
Selling Stuff 20% OFF ! See my signature
A peer-to-peer exchange will always have the problem of 'who sends first' so it comes at high risk, no matter how well disguised under the TOR network it is.

I think this was mentioned before, but the best, and truest way to have a true peer-to-peer network would be to implement more of a Ripple protocol and link it with Bitcoin exchanges.


You already nailed it here more than a year ago, I am pretty sure this is what killed the cat.
full member
Activity: 214
Merit: 100
Sorry for necro-ing this thread.

Wondered if there was any further thoughts or ideas on this decentralised p2p exchange idea.
legendary
Activity: 1904
Merit: 1005
PGP ID: 78B7B84D
I only found out about this now. I hope this is still up and running. P2P exchange seems like a great idea, considering the way things are going will all the other centralized exchanges
legendary
Activity: 1260
Merit: 1001
This sounds like a very interesting idea. Any updates from developers, is there still interest in this?
full member
Activity: 214
Merit: 100
A peer-to-peer exchange will always have the problem of 'who sends first' so it comes at high risk, no matter how well disguised under the TOR network it is.

I think this was mentioned before, but the best, and truest way to have a true peer-to-peer network would be to implement more of a Ripple protocol and link it with Bitcoin exchanges.
newbie
Activity: 26
Merit: 0
This sounds like a great project. Will be checking back on it a little later.
sr. member
Activity: 406
Merit: 250
Hey Morpheus, need a designer to help work on the project? I have a couple of months summer break from UNI and I want to work on a Bitcoin project. I could create graphic designs such as branding, I can also design websites and I (should) also be able to help you rank high up on Google with SEO. I would be happy to work on this in collaboration if interested. I can code in HTML & CSS however I do not have technical knowledge to developer programs such as this. Some promotional work might help public awareness!

If you are interested let me know and I will create some sample ideas.
legendary
Activity: 1792
Merit: 1008
/dev/null
This projected really needs to be revived, we can't have stock exchanges going down left and right because of a few stupid scammers.
Well, it wasn't really a stock exchange, but I like the idea of reviving it anyways!

In that case we need a proper stock exchange BLAH! Tongue
how about cryptostocks?
legendary
Activity: 1540
Merit: 1000
This projected really needs to be revived, we can't have stock exchanges going down left and right because of a few stupid scammers.
Well, it wasn't really a stock exchange, but I like the idea of reviving it anyways!

In that case we need a proper stock exchange BLAH! Tongue
hero member
Activity: 868
Merit: 1000
I haven't tried this. But what would be the advantage to this over bitcoin-otc ?


legendary
Activity: 882
Merit: 1001
This projected really needs to be revived, we can't have stock exchanges going down left and right because of a few stupid scammers.
Well, it wasn't really a stock exchange, but I like the idea of reviving it anyways!
legendary
Activity: 1540
Merit: 1000
This projected really needs to be revived, we can't have stock exchanges going down left and right because of a few stupid scammers.
hero member
Activity: 900
Merit: 1000
Crypto Geek
As much as I love this project I think the hassle of running i2p in addition to needing critical mass has killed it somehow?

Perhaps a fully web interface to #bitcoin-otc would be more successful? - this could then be moved to a eepsite / hidden service / distribute the rep database.

legendary
Activity: 1792
Merit: 1008
/dev/null
awesome tool, how about adding altcoins? i dont get it why ppl dont use this!
legendary
Activity: 1372
Merit: 1003
I've put an order up tho only connected to two peers  Undecided
member
Activity: 62
Merit: 10
Hi morpheus,

I think you are heading the right way with the DarkExchange client. Do you know any other projects in this category?

The last days, I thought a bit about decentralized, fully automated exchanges. At least in Europe, it would be possible from a technical point of view, see this post:

https://bitcointalksearch.org/topic/m.746894

Any comments are welcome.
full member
Activity: 164
Merit: 100
I can start it, but i can't find nobody.

Funny, I'm on and can find myself, and the DarkExchange node.

When did you run it last? Is I2P running? Have you downloaded all of the peers?
hero member
Activity: 714
Merit: 500
I can start it, but i can't find nobody.
full member
Activity: 164
Merit: 100
Has this project gotten any traction?

While there seems to be plenty of interest, there aren't many people using the program.
full member
Activity: 164
Merit: 100

Yeah, I think this is the best idea so far. That way as long as there is one person who is online they can act as a server to start with. As the community grows it will be more distributed.

If private/public key signing was used then we can guarantee who made the offer and who accepted the ofefer. For example an accepted offer can be timestamped so that whenever somebody.accepts an offer that has already been made the accepted offer is rejected.

Ideally the objective is for a critical mass of nodes are always online making sure the orderbook is always up-to-date.

Is there anything I can do to help out, morpheus?

There will be some issues in the details of making sure everyone has an up to date list of all offers, and keeping the data clean. I can think of a few now, but once I start implementing it, I'm sure more will come up.

I think there will be some issues keeping time on the network synchronized if we try to base everything on a timestamp. Plus, more than one person can accept an offer at the same time anyways. Though, I don't think it matters, since the one making the offer can choose which trade to fill in the end.

I don't remember your skill set Sultan. Can you program? Do you know Java? Do you know Clojure?
full member
Activity: 154
Merit: 102
Bitcoin!
Has this project gotten any traction?
full member
Activity: 214
Merit: 100
Is there still no way to make an offer and have it available for others to view when you go offline?

I understand this is very difficult to do in a decentralised manner, but I feel this problem is halting Dark Exchange's community growth.

It is quite clear that when people log on only to find themselves online, thus no offers, it makes it look like you have entered an empty hall expecting a bustling market. If this happens I believe more people will use it.

My suggestion is to have some kind of 'pass-the-parcel' technique where a node locally stores tgeir offers, and before it logs off it passes those offers to any online nodes before logging off, and thatnode does the same thing, and so on.

When a node comes back online, it can reclaim those offers so that it can broadcadt them itself.

Any thoughts?

There is still no way to make an offer and have it available when you go offline. The 'pass-the-parcel' technique likely won't work since you don't really log off, but just disconnect from the network.

How about every node in the system keeps track of every offer (for now, only a subset in the future). If you're not online, it doesn't matter, someone somewhere has your offer. It would get tricky to keep track of the offers as they are accepted/rejected, but it would be possible.

Would that work for you?

Unfortunately, I haven't had a lot of time to work on Dark Exchange lately. I'm in the middle of adding a trust score to the system. When I have that in, I can look into something like this and fixing other issues.

I didn't realize there was still so much interest in the project.

Yeah, I think this is the best idea so far. That way as long as there is one person who is online they can act as a server to start with. As the community grows it will be more distributed.

If private/public key signing was used then we can guarantee who made the offer and who accepted the ofefer. For example an accepted offer can be timestamped so that whenever somebody.accepts an offer that has already been made the accepted offer is rejected.

Ideally the objective is for a critical mass of nodes are always online making sure the orderbook is always up-to-date.

Is there anything I can do to help out, morpheus?
full member
Activity: 164
Merit: 100
I forgot to run i2p before Dark Exchange the first time I ran it.

Ha, now that you mention it, I did exactly the same Smiley Now it works, but I can't find anything... I created a offer and searched for it, but it won't find it.

Suggestion: OP, can you add a "in person transfer in " option for trading?

I would like to add an in person option, but that would require some significant changes which I'm not prepared to do yet.

I've added another issue for in person transfers: https://github.com/macourtney/Dark-Exchange/issues/50

I make no promises on when I can get to it. Of course, if anyone implements it for me, I'll be glad to merge it in.
full member
Activity: 164
Merit: 100
Is there still no way to make an offer and have it available for others to view when you go offline?

I understand this is very difficult to do in a decentralised manner, but I feel this problem is halting Dark Exchange's community growth.

It is quite clear that when people log on only to find themselves online, thus no offers, it makes it look like you have entered an empty hall expecting a bustling market. If this happens I believe more people will use it.

My suggestion is to have some kind of 'pass-the-parcel' technique where a node locally stores tgeir offers, and before it logs off it passes those offers to any online nodes before logging off, and thatnode does the same thing, and so on.

When a node comes back online, it can reclaim those offers so that it can broadcadt them itself.

Any thoughts?

There is still no way to make an offer and have it available when you go offline. The 'pass-the-parcel' technique likely won't work since you don't really log off, but just disconnect from the network.

How about every node in the system keeps track of every offer (for now, only a subset in the future). If you're not online, it doesn't matter, someone somewhere has your offer. It would get tricky to keep track of the offers as they are accepted/rejected, but it would be possible.

Would that work for you?

Unfortunately, I haven't had a lot of time to work on Dark Exchange lately. I'm in the middle of adding a trust score to the system. When I have that in, I can look into something like this and fixing other issues.

I didn't realize there was still so much interest in the project.
full member
Activity: 164
Merit: 100
I forgot to run i2p before Dark Exchange the first time I ran it.

It appeared to work find though, creating a username etc. But then I noticed no peers. There should be something to monitor network activity so we know what's going on.

Would also be nice to make more than one search at the same time... or search for multiple offers because I haven't been able to find any yet.

I'll look into adding a warning message if the I2P network cannot be found. Issue 48: https://github.com/macourtney/Dark-Exchange/issues/48

Obviously, multiple searches and searching on multiple payment types is a popular feature request. I already have searching on multiple payment types as an issue: https://github.com/macourtney/Dark-Exchange/issues/37

I just added a new issue for running multiple searches at the same time. Issue 49: https://github.com/macourtney/Dark-Exchange/issues/49
full member
Activity: 214
Merit: 100
Is there still no way to make an offer and have it available for others to view when you go offline?

I understand this is very difficult to do in a decentralised manner, but I feel this problem is halting Dark Exchange's community growth.

It is quite clear that when people log on only to find themselves online, thus no offers, it makes it look like you have entered an empty hall expecting a bustling market. If this happens I believe more people will use it.

My suggestion is to have some kind of 'pass-the-parcel' technique where a node locally stores tgeir offers, and before it logs off it passes those offers to any online nodes before logging off, and thatnode does the same thing, and so on.

When a node comes back online, it can reclaim those offers so that it can broadcadt them itself.

Any thoughts?
sr. member
Activity: 252
Merit: 250
I forgot to run i2p before Dark Exchange the first time I ran it.

Ha, now that you mention it, I did exactly the same Smiley Now it works, but I can't find anything... I created a offer and searched for it, but it won't find it.

Suggestion: OP, can you add a "in person transfer in " option for trading?
hero member
Activity: 900
Merit: 1000
Crypto Geek
I forgot to run i2p before Dark Exchange the first time I ran it.

It appeared to work find though, creating a username etc. But then I noticed no peers. There should be something to monitor network activity so we know what's going on.

Would also be nice to make more than one search at the same time... or search for multiple offers because I haven't been able to find any yet.
hero member
Activity: 868
Merit: 1000
I like the Dark Exchange idea. I will have a closer look at it. Thanks for the answers.
full member
Activity: 164
Merit: 100
Bob wants to buy 100 BTC at 15.0 from Alice. Alice accepts. Bob transfers 100x15USD to Alice and Alice transfers the bitcoins to Bob.

Yes, this is exactly how Dark Exchange works right now.

How to trust other users? Should there be some kind of escrow, and would we not need a centralized point for escrow? What prevents Alice from never sending the bitcoins to Bob?

Currently, there is no escrow service or anything really to prevent Alice from never sending bitcoins to Bob. However, when Alice and Bob created their accounts, a public/private key pair was created. When interacting, Alice and Bob can see each other's public key (it's actually shown in several places in Dark Exchange so you can recognize a user). Since all messages between nodes are signed (except certain messages which cannot be signed since they are sent before you have the public keys), Alice and Bob know they are talking to each other and only to each other.

If Alice wants to sell more bitcoin to Bob in the future, she will have to send the bitcoin. Also, it's possible for Bob to warn people not to buy from Alice if she doesn't uphold her end of the deal. There is no way of doing this in Dark Exchange for now, so Bob would have to use this board. However, we are planning on implementing a trust scoring system which would make it easy for Bob to let others know how much he trusts Alice and vice versa.

Would it be possible to create a market like mtGox, only with a distributed model? I guess we would have to have Agents for fiat money transfer and withdrawals then.

I don't think this is possible without creating an authority, or several authorities which centralizes the distributed exchange. It would become more of a federated exchange than a distributed one.

If there is enough demand, it may be a good idea to implement in the future. However, I always want to give people the option to use Dark Exchange in a pure decentralized manner.
hero member
Activity: 868
Merit: 1000
quick question:

Would it be possible to create a market like mtGox, only with a distributed model? I guess we would have to have Agents for fiat money transfer and withdrawals then.

Any idea of how that would be solved?

I guess it's at the moment like this:


Bob wants to buy 100 BTC at 15.0 from Alice. Alice accepts. Bob transfers 100x15USD to Alice and Alice transfers the bitcoins to Bob. How to trust other users? Should there be some kind of escrow, and would we not need a centralized point for escrow? What prevents Alice from never sending the bitcoins to Bob?

Nice initiative though. Thumbs up!
full member
Activity: 164
Merit: 100
I've uploaded Beta 3 with more aggressive attempts to download all other destinations in the network. My testing suggests everyone should quickly get all of the destinations in the system.

You can download Beta 3 from: https://github.com/macourtney/Dark-Exchange/downloads
full member
Activity: 164
Merit: 100
I had the message window freeze up after hitting send once or twice, no errors or anything. I just waited a minute or so and restarted the client and the message had been sent so I don't think it could cause major problems with trades. It might just have been me though, so I'd call it complete. Grin

It's nothing. I wasn't very careful when writing some of the event code, and the event thread is blocked after most of the button presses. It's easy to fix, but it does look like Dark Exchange is locked up. All you have to do is wait a few more seconds (possibly minutes) and it should work itself out.

I added an issue for it.
newbie
Activity: 49
Merit: 0
Is there any reason the exchange is not complete yet? Was there any problems?
I had the message window freeze up after hitting send once or twice, no errors or anything. I just waited a minute or so and restarted the client and the message had been sent so I don't think it could cause major problems with trades. It might just have been me though, so I'd call it complete. Grin
full member
Activity: 164
Merit: 100
wegotpickles and I have almost completed the first dark exchange trade! Smiley

That's awesome! I hope it was a good experience.

Is there any reason the exchange is not complete yet? Was there any problems?
newbie
Activity: 49
Merit: 0
Announcing and identifying a trade on a dark exchange. Wink
Ah! Sorry, I'm a little slow.
hero member
Activity: 532
Merit: 500
FIAT LIBERTAS RVAT CAELVM
First trade complete without a hitch!

The irony inherent in this statement is not lost on me.
I'm missing it. Whats ironic?

Announcing and identifying a trade on a dark exchange. Wink
newbie
Activity: 49
Merit: 0
First trade complete without a hitch!

The irony inherent in this statement is not lost on me.
I'm missing it. Whats ironic?
hero member
Activity: 532
Merit: 500
FIAT LIBERTAS RVAT CAELVM
wegotpickles and I have almost completed the first dark exchange trade! Smiley
The irony inherent in this statement is not lost on me.
legendary
Activity: 882
Merit: 1001
wegotpickles and I have almost completed the first dark exchange trade! Smiley
newbie
Activity: 49
Merit: 0
Do you think sending messages directly from identity to identity should be supported? If so, how do we get around the email issue of unsolicited messages? Make people friend each other first? Smiley
I think that would be good. Maybe use the eventual trust score system to determine if a message can be sent, like if they have <=0 trust they cannot send messages to people who haven't added them to their friends list (excluding trade messages of course). and include a "flag as spam" button on messages that would decrease the senders trust score. Although that might be abused, for example, have a conversation with someone then go though and flag every message they sent. Maybe limit the spam flag to one flag per sender per recipient per arbitrarily amount of time? Seems over complicated for the time being...yeah...Friends list is good, and an ignore list as well.
full member
Activity: 164
Merit: 100
I'm using issues on github to track both bugs and feature requests. I have issues for most of your suggestions, and I'll some more for the ones I don't have. You can also comment on the issues directly.

User profiles for each identity. Just a text field users can fill with information like the Bitcoin address, Dwolla ID, mailing address, etc. if they so choose.

I think the user profiles for identities would be a good idea. For bitcoin address and etc, I have the following issues created:

https://github.com/macourtney/Dark-Exchange/issues/23
https://github.com/macourtney/Dark-Exchange/issues/24

I also have an issue for viewing an identity: https://github.com/macourtney/Dark-Exchange/issues/11

This could be expanded to add a profile.

PGP integration for the messaging features (are messages public?)

First, messages (which can only be sent on trades right now) are not public and are automatically signed (though the signature is stripped off when saved). Actually, all data sent between Dark Exchange nodes are both encrypted and signed.

I don't want to integrate PGP if I can avoid it since that would add yet another program for people to install when installing Dark Exchange. On top of that, encryption and signatures are already supported in Dark Exchange. We just need to figure out all the ways we want to use them.

Do you think sending messages directly from identity to identity should be supported? If so, how do we get around the email issue of unsolicited messages? Make people friend each other first? Smiley

web-of-trust style user rankings, but that's already been requested.

Tracking issue: https://github.com/macourtney/Dark-Exchange/issues/22

Minimize to systray + systray notifications for new messages, accepted trades, etc.

Good idea. I just added a new issue for it: https://github.com/macourtney/Dark-Exchange/issues/25

Some kind of remote API (i was thinking about android apps, but i2p's memory requirements are to great, so a front end is all that seems doable)

I'm worried about this since it could open people up to hacking. However, I created an issue for it: https://github.com/macourtney/Dark-Exchange/issues/26
newbie
Activity: 49
Merit: 0
Some feature ideas once everything is nice and stable:

User profiles for each identity. Just a text field users can fill with information like the Bitcoin address, Dwolla ID, mailing address, etc. if they so choose.

PGP integration for the messaging features (are messages public?)

web-of-trust style user rankings, but that's already been requested.

Minimize to systray + systray notifications for new messages, accepted trades, etc.

Some kind of remote API (i was thinking about android apps, but i2p's memory requirements are to great, so a front end is all that seems doable)
full member
Activity: 164
Merit: 100
My identity on Dark Exchange is Morpheus. If you don't have it listed in your identity tab you won't be able to find my offers.

I created a bunch of Dwolla to Bitcoin and Bitcoin to Dwolla offers. If you can't find them with a search, let me know. It takes about 10 minutes for the search to completely finish and there is no feedback that the search is in progress, so please be patient.
full member
Activity: 164
Merit: 100
At this moment, you should see 11 total peers. The number of identities may vary since you both have to be online at the same time to exchange identities.

Every time you restart Dark Exchange it will try to download any new peers (Though it is naive, and likely won't find them all every time). Unfortunately, I2P is pretty slow and it can take a few hours to find a peer and start downloading updates. So, if you want to find as many peers as possible, leave Dark Exchange running for an extended period of time.

I'm going to look for ways to speed this process up.
full member
Activity: 164
Merit: 100
...
EDIT: Maybe post this in project development as well?

I've started a topic in development to discuss technical issues with the exchange: http://forum.bitcoin.org/index.php?topic=27055.0
legendary
Activity: 882
Merit: 1001

Great idea, but ... why Java Huh Sad
Let's not start a flame war. Every programming language has it's advantages and disadvantages. Also, I2P uses Java, which is probably the main reason.
hero member
Activity: 532
Merit: 500
FIAT LIBERTAS RVAT CAELVM
member
Activity: 104
Merit: 10
Watching this thread.
legendary
Activity: 882
Merit: 1001
Does anyone see my offer, because I can't see anyone else's offers.
newbie
Activity: 49
Merit: 0
After my last relaunch my peers jumped from 5 to 11! I was starting to worry the 5 of us were the only ones.

My Destination:
Code:
d01K6Fhr2zxazVG7~oVJY8t3J3xDAVGiihv~Uv8-Qauqt9MUwgmhJCX5ThFmq57Q9kV8AR8WEd8Q-MoZjS~nc51imaqw6ND0yBp9HdH5iG~1Ngk~f3BJ-oVdFRuEj~oGZxGUoQpJUKP7qJyEncQI~r9btCGlBzIUmP3WMJtjEwdhtwoBp~Q8PVVBj9u4mHCDbULjUDOLpi2i2uT7ctG0d5~HQsNDpAVAVr4QIsRgyq7lrUaRrcbLTggUw1tQmdR9-6qfjwHkC8a869TVYxCfaVX-5ENtJzrSO1ZGynH2sw7mv33FPLAwSvQAu3AQGY5O7HtmYE-sGlefGwfiv1NuTUXILRSEKB75arzIYCh5MbplEsiYv9ngv2k41WEqLV7Wau9L3VfT8DjMwCoHYNmSh0bUsuT0yI0bNFDul9aRGbE3KdVPS6Ex7qk1wxLl~DT8-2XsJv7ppbG~58Q2B-lDJrL9wtBculKHSYJKNWoczmEooFHPv8v5f9QLIP1IycaIAAAA
hero member
Activity: 532
Merit: 500
FIAT LIBERTAS RVAT CAELVM
This is excellent.

I'm watching this.
legendary
Activity: 882
Merit: 1001
Heres my destination address too:
Code:
0qaLZmzp1xQ5GpGzA7GXRHdmOmCgwFh13Qldw5vr6FPOpfsVilGq74~tmvk~y7cNWDRsopo6wOqJ-dkNNcyR~7cvgR~rBAUdYncxeBUjrBQNv7CNCvKs0mQ~tyBR5vkg2Fv3odLGn0O2LPaRkvl-Lzw-tXljd~xFk-CZoEpLynmm3miinUpjTmDTN6BlAntH3lv1eJa32Q18HonNvLDjE1~sPd7wlvOXzj~TJVIXEXBXKHpjW~ljxKBc8I8siKdhLQ5t83EtH5wqhI5HGpCgnZz72ChiyxwCfwmwH3nsACNUdbBicvsKpYFXSA4Q~deml07yGSW0fZ39nnL6jgPmDjoplldeiZGS70jhC2DYdXqaqZ-KtIXsBi3aIkskRcJsxRpYCax-K3O~oR~Lpxe9PTkPSkWhZh0BdGIqnd0re2fU6ciGH-ucGQRysLY5MeROLE~mA3PJskAbQ4~MMA2~vgO7N7T00e4d423stHIx5wEikzHzH-P6R1ICvD4HSf4jAAAA
full member
Activity: 168
Merit: 100
Seeing as how I'm still having problems being automatically connected to peers, my destination address is:

Quote
MQX7kulCMKy9hu-aE-zvCL9o3qPKnFMQGJR4rmLBr~LUIhSVjWyZNkz8KyJsSbQ60Q7~q4HFBa3sVxoBASOg-qLpZWv17AsfYpd6GWbYePmsXBLPvBBfZwG3xbGvnYgXsSMsx9~FZTX8KL8hfzkKAUS1a3ekGSeZTPGrpLkNn1occ0TvkzWuPCOkxYVgvgD0eNijXPaco7BPRDZjwmoAcDBwFlQ4AJZ3wWVPXawExYWcp0WuXVmc7h7FSnZNWp4EhKZq8Lt0tN23WnVGtErFfj8xgUP2UAneTWgSyr3sGlv87cNenvB6G4C25CBkAV-u7XDfRwYOvSSVy48iZzyaWEqMubvo7FidsPk49aBFFQC7VaUUZ3pGgKS2LlwDuj0Xj-kzPtjHnb~rNsOK25CAAcS3iYKL5VI-Hs~dczTgibQ8Fm4IJQHQaIT~PavxJ7eeNmpP8hdYpRZtQnGxafK1OQv1B6~~4j1IMB~-evRrdg4YkbG6~hQ5hCeut9SISCJEAAAA

If anyone else is having problems or would like some more peers, feel free to add me.
legendary
Activity: 882
Merit: 1001
I launched Dark Exchange beta 2 again and immediately searched.  The above reported exception did not occur again.

I Have Bitcoin To Send By Bitcoin Transfer
I Want United States of America, Dollars Sent By Dwolla

and it found two offers OK.

I selected the first one and clicked the View button and reasonable details were displayed.  I canceled the transaction because I am not actually prepared for a real transaction.

So far so good!

I seem to be the only one with offers right now. Sad

I will stand by my offers. I'm eagerly awaiting to make the first real trade on the exchange.

I'm glad to hear someone else got Dark Exchange working besides me. I'm going to start creating issues to track bugs and change requests. After playing with it a little, what obvious things do you think Dark Exchange needs?
You have offers right now? I've been running this for a few hours, and no offers have shown up except for mine.

EDIT: Maybe post this in project development as well?
full member
Activity: 164
Merit: 100
I launched Dark Exchange beta 2 again and immediately searched.  The above reported exception did not occur again.

I Have Bitcoin To Send By Bitcoin Transfer
I Want United States of America, Dollars Sent By Dwolla

and it found two offers OK.

I selected the first one and clicked the View button and reasonable details were displayed.  I canceled the transaction because I am not actually prepared for a real transaction.

So far so good!

I seem to be the only one with offers right now. Sad

I will stand by my offers. I'm eagerly awaiting to make the first real trade on the exchange.

I'm glad to hear someone else got Dark Exchange working besides me. I'm going to start creating issues to track bugs and change requests. After playing with it a little, what obvious things do you think Dark Exchange needs?
full member
Activity: 164
Merit: 100
...
By the way, how is the Dark Exchange client visible in the i2p dashboard - under local destinations?


I don't see Dark Exchange in the i2p dashboard, but it could be picking up the destination and listing it under local destinations.

Also, I've created an issue for your exception, but I don't have a plan to fix it unless it shows up more often. However, I want an issue to make sure it's tracked.
full member
Activity: 164
Merit: 100
...

just an idea:
Score users would be nice. More trades and more volume with diferent users, more score, registration date to make more scores too (or not?). If a "bad guy" appears, just put negative scores. It not will be the best way, but make some reputation.


I've already thought of a scoring based system, but I haven't had time to implement it yet. My idea is to include a scoring system where you would rate each person/identity on a percent trust/distrust scale. Everyone would start out at zero. As you complete trades with someone, you can increase your trust in them by raising the scale to a positive percentage. If the trade goes bad, you can decrease the scale into the negative territory.

Then, all of the trust ratings from the people you already trust would be combined with how much they trust someone else to determine your expected trust in an unknown party. I have an idea how to do that, but I don't want to go into detail here.
full member
Activity: 164
Merit: 100
Morph,

What is your address? I'd like to donate to you for your time (and I think others may as well)

I posted a donation bitcoin address in both the README file: https://github.com/macourtney/Dark-Exchange/blob/master/README

And on the wiki: https://github.com/macourtney/Dark-Exchange/wiki

Thanks.
hero member
Activity: 686
Merit: 501
Stephen Reed
I launched Dark Exchange beta 2 again and immediately searched.  The above reported exception did not occur again.

I Have Bitcoin To Send By Bitcoin Transfer
I Want United States of America, Dollars Sent By Dwolla

and it found two offers OK.

I selected the first one and clicked the View button and reasonable details were displayed.  I canceled the transaction because I am not actually prepared for a real transaction.

So far so good!
member
Activity: 109
Merit: 10
Morph,

What is your address? I'd like to donate to you for your time (and I think others may as well)
full member
Activity: 164
Merit: 100
Hi,
I just downloaded and launched beta 2.  I needed to launch it twice before it found 7 peers.

However, before I tried searching, I received the following exceptions ...
...

Darn, I'll have to take a look at it tomorrow.

I testing searching several times. I wonder what's going on.
hero member
Activity: 686
Merit: 501
Stephen Reed
Hi,
I just downloaded and launched beta 2.  I needed to launch it twice before it found 7 peers.

However, before I tried searching, I received the following exceptions ...
Code:
ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception:
java.lang.RuntimeException: java.lang.RuntimeException: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: ""Missing lob: 4"" [90028-157]"; "lob: null table: -1 id: 4" [90031-157]
at clojure.lang.AFn.run(AFn.java:28)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.RuntimeException: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: ""Missing lob: 4"" [90028-157]"; "lob: null table: -1 id: 4" [90031-157]
at clojure.lang.LazySeq.sval(LazySeq.java:47)
at clojure.lang.LazySeq.seq(LazySeq.java:56)
at clojure.lang.RT.seq(RT.java:450)
at clojure.core$seq.invoke(core.clj:122)
at clojure.core$dorun.invoke(core.clj:2450)
at clojure.core$doall.invoke(core.clj:2465)
at clj_record.core$find_by_sql$func__4289__auto____4305$fn__4306.invoke(core.clj:73)
at clojure.contrib.sql.internal$with_query_results_STAR_.invoke(internal.clj:194)
at clj_record.core$find_by_sql$func__4289__auto____4305.invoke(core.clj:72)
at clj_record.core$find_by_sql$fn__4309.invoke(core.clj:71)
at clojure.contrib.sql.internal$with_connection_STAR_.invoke(internal.clj:105)
at clj_record.core$find_by_sql.invoke(core.clj:71)
at clj_record.core$find_records.invoke(core.clj:85)
at clj_record.core$find_record.invoke(core.clj:91)
at darkexchange.model.peer$find_record.invoke(peer.clj:41)
at darkexchange.model.peer$find_peer.invoke(peer.clj:67)
at darkexchange.model.identity$update_identity_peer.invoke(identity.clj:53)
at darkexchange.model.identity$update_identity.invoke(identity.clj:59)
at darkexchange.model.identity$add_or_update_identity.invoke(identity.clj:64)
at darkexchange.model.interceptors.identity_interceptor$identity_updater.invoke(identity_interceptor.clj:9)
at darkexchange.model.interceptors.identity_interceptor$client_interceptor$fn__6773.invoke(identity_interceptor.clj:18)
at clojure.lang.AFn.run(AFn.java:24)
... 1 more
Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: ""Missing lob: 4"" [90028-157]"; "lob: null table: -1 id: 4" [90031-157]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:156)
at org.h2.message.DbException.convertIOException(DbException.java:313)
at org.h2.value.ValueLobDb.getInputStream(ValueLobDb.java:283)
at org.h2.value.ValueLobDb.getReader(ValueLobDb.java:267)
at org.h2.jdbc.JdbcClob.getCharacterStream(JdbcClob.java:112)
at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:90)
at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:265)
at darkexchange.model.base$clob_string.invoke(base.clj:9)
at darkexchange.model.base$load_clob.invoke(base.clj:13)
at darkexchange.model.base$clean_clob_key.invoke(base.clj:22)
at darkexchange.model.peer$peer_clean_up.invoke(peer.clj:39)
at clj_record.callbacks$run_callbacks$fn__4255.invoke(callbacks.clj:17)
at clojure.core$r.invoke(core.clj:799)
at clj_record.callbacks$run_callbacks.doInvoke(callbacks.clj:17)
at clojure.lang.RestFn.invoke(RestFn.java:442)
at clj_record.callbacks$after_load$fn__4262.invoke(callbacks.clj:32)
at clojure.core$map$fn__3699.invoke(core.clj:2096)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
... 22 more
Caused by: java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: "Missing lob: 4" [90028-157]
at org.h2.message.DbException.convertToIOException(DbException.java:346)
at org.h2.store.LobStorage.getInputStream(LobStorage.java:449)
at org.h2.value.ValueLobDb.getInputStream(ValueLobDb.java:281)
... 40 more
Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "Missing lob: 4" [90028-157]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.store.LobStorage.getInputStream(LobStorage.java:444)
... 41 more
ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception:
java.lang.RuntimeException: java.lang.RuntimeException: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: ""Missing lob: 5"" [90028-157]"; "lob: null table: -1 id: 5" [90031-157]
at clojure.lang.AFn.run(AFn.java:28)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.RuntimeException: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: ""Missing lob: 5"" [90028-157]"; "lob: null table: -1 id: 5" [90031-157]
at clojure.lang.LazySeq.sval(LazySeq.java:47)
at clojure.lang.LazySeq.seq(LazySeq.java:56)
at clojure.lang.RT.seq(RT.java:450)
at clojure.core$seq.invoke(core.clj:122)
at clojure.core$dorun.invoke(core.clj:2450)
at clojure.core$doall.invoke(core.clj:2465)
at clj_record.core$find_by_sql$func__4289__auto____4305$fn__4306.invoke(core.clj:73)
at clojure.contrib.sql.internal$with_query_results_STAR_.invoke(internal.clj:194)
at clj_record.core$find_by_sql$func__4289__auto____4305.invoke(core.clj:72)
at clj_record.core$find_by_sql$fn__4309.invoke(core.clj:71)
at clojure.contrib.sql.internal$with_connection_STAR_.invoke(internal.clj:105)
at clj_record.core$find_by_sql.invoke(core.clj:71)
at clj_record.core$find_records.invoke(core.clj:85)
at clj_record.core$find_record.invoke(core.clj:91)
at darkexchange.model.peer$find_record.invoke(peer.clj:41)
at darkexchange.model.peer$find_peer.invoke(peer.clj:67)
at darkexchange.model.identity$add_identity.invoke(identity.clj:45)
at darkexchange.model.identity$add_or_update_identity.invoke(identity.clj:65)
at darkexchange.model.interceptors.identity_interceptor$identity_updater.invoke(identity_interceptor.clj:9)
at darkexchange.model.interceptors.identity_interceptor$client_interceptor$fn__6773.invoke(identity_interceptor.clj:18)
at clojure.lang.AFn.run(AFn.java:24)
... 1 more
Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: ""Missing lob: 5"" [90028-157]"; "lob: null table: -1 id: 5" [90031-157]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:156)
at org.h2.message.DbException.convertIOException(DbException.java:313)
at org.h2.value.ValueLobDb.getInputStream(ValueLobDb.java:283)
at org.h2.value.ValueLobDb.getReader(ValueLobDb.java:267)
at org.h2.jdbc.JdbcClob.getCharacterStream(JdbcClob.java:112)
at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:90)
at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:265)
at darkexchange.model.base$clob_string.invoke(base.clj:9)
at darkexchange.model.base$load_clob.invoke(base.clj:13)
at darkexchange.model.base$clean_clob_key.invoke(base.clj:22)
at darkexchange.model.peer$peer_clean_up.invoke(peer.clj:39)
at clj_record.callbacks$run_callbacks$fn__4255.invoke(callbacks.clj:17)
at clojure.core$r.invoke(core.clj:799)
at clj_record.callbacks$run_callbacks.doInvoke(callbacks.clj:17)
at clojure.lang.RestFn.invoke(RestFn.java:442)
at clj_record.callbacks$after_load$fn__4262.invoke(callbacks.clj:32)
at clojure.core$map$fn__3699.invoke(core.clj:2096)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
... 21 more
Caused by: java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception: "Missing lob: 5" [90028-157]
at org.h2.message.DbException.convertToIOException(DbException.java:346)
at org.h2.store.LobStorage.getInputStream(LobStorage.java:449)
at org.h2.value.ValueLobDb.getInputStream(ValueLobDb.java:281)
... 39 more
Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "Missing lob: 5" [90028-157]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.store.LobStorage.getInputStream(LobStorage.java:444)
... 40 more


By the way, how is the Dark Exchange client visible in the i2p dashboard - under local destinations?
full member
Activity: 164
Merit: 100
I've just uploaded a new Beta: https://github.com/macourtney/Dark-Exchange/downloads

This should fix some of the peering issues. However, I2P seems to be very flaky and it may take a few tries to download all of the peers.

After you download and untar the new beta, you'll have to copy the data directory from your old install into the new one. Unless you don't care to keep your old data.

I'm sorry for all of the trouble. Unfortunately, it may take a while to work out all of the bugs with the system. Thank you for being patient and helping me find and resolve bugs.
full member
Activity: 168
Merit: 100
I haven't found any peers since I downloaded the exchange.
hero member
Activity: 686
Merit: 501
Stephen Reed
I just launched i2p and Dark Exchange that I downloaded yesterday, but I see only two peers.
full member
Activity: 164
Merit: 100
I have only one peer connected other than myself. I assume its because its so young, but just out of curiosity how many is everyone else getting?

I'm also getting an error when trying to make a new offer of 0.50BTC for $6.65USD sent by Dwolla.

Quote
ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception:
java.lang.NumberFormatException: For input string: "0.50"
   at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
   ..

JRE  build 1.6.0_23-b03 64bit
Arch Linux: kernel version 2.6.39-ARCH x86_64
I2p version 0.8.7

You caught an error with Dark Exchange only accepting whole numbers right now. I just committed a fix for it (unfortunately, the database didn't cooperate, and I had to make the most convoluted migration ever).

The original release had so many issues with connections, I'm not sure anyone else is running it right now. I only see 5 total users on the server I set up to connect everyone. Of the 5, 3 are me.

I've been working on another release since last night. I think I have everything working, and should be able to release BETA2 tonight.
donator
Activity: 213
Merit: 100
SEIZED by Gunthar
What a great concept, I eagerly await the results!
newbie
Activity: 49
Merit: 0
I have only one peer connected other than myself. I assume its because its so young, but just out of curiosity how many is everyone else getting?

I'm also getting an error when trying to make a new offer of 0.50BTC for $6.65USD sent by Dwolla.

Quote
ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception:
java.lang.NumberFormatException: For input string: "0.50"
   at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
   at java.lang.Integer.parseInt(Integer.java:458)
   at java.lang.Integer.parseInt(Integer.java:499)
   at darkexchange.controller.offer.has_panel$i_have_amount.invoke(has_panel.clj:16)
   at darkexchange.controller.offer.has_panel$has_offer.invoke(has_panel.clj:25)
   at darkexchange.controller.offer.new_offer$has_offer.invoke(new_offer.clj:23)
   at darkexchange.controller.offer.new_offer$scrape_offer.invoke(new_offer.clj:29)
   at darkexchange.controller.offer.new_offer$attach_create_offer_action$fn__5827.invoke(new_offer.clj:33)
   at darkexchange.controller.actions.utils$frame_listener.invoke(utils.clj:12)
   at darkexchange.controller.actions.utils$attach_frame_listener$fn__2909.invoke(utils.clj:15)
   at seesaw.event$fire.invoke(event.clj:143)
   at seesaw.event$eval761$fn$reify__763.actionPerformed(event.clj:170)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
   at java.awt.Component.processMouseEvent(Component.java:6288)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
   at java.awt.Component.processEvent(Component.java:6053)
   at java.awt.Container.processEvent(Container.java:2041)
   at java.awt.Component.dispatchEventImpl(Component.java:4651)
   at java.awt.Container.dispatchEventImpl(Container.java:2099)
   at java.awt.Component.dispatchEvent(Component.java:4481)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
   at java.awt.Container.dispatchEventImpl(Container.java:2085)
   at java.awt.Window.dispatchEventImpl(Window.java:2478)
   at java.awt.Component.dispatchEvent(Component.java:4481)
   at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
   at java.awt.EventQueue.access$000(EventQueue.java:84)
   at java.awt.EventQueue$1.run(EventQueue.java:602)
   at java.awt.EventQueue$1.run(EventQueue.java:600)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
   at java.awt.EventQueue$2.run(EventQueue.java:616)
   at java.awt.EventQueue$2.run(EventQueue.java:614)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

JRE  build 1.6.0_23-b03 64bit
Arch Linux: kernel version 2.6.39-ARCH x86_64
I2p version 0.8.7
newbie
Activity: 49
Merit: 0
WOO! I've been watching this project on git for about a month now, I'm so excited to try this!  Grin
member
Activity: 109
Merit: 10
Do you have an address where donations can be sent?
full member
Activity: 164
Merit: 100
These are the identities that I see..

I understand that the DarkExchange identity comes from the peers.txt file.  Should there be anything in the log to confirm connection via the I2P router.  Or is there someplace in the I2P router console to confirm the Dark Exchange client?  I'll poke around.

...

Dark Exchange uses the peers.txt file to find the first peer/peers. From there, it tries to download the list of all peers in the network. Unfortunately, there is something wrong with that part of the initialization, and Dark Exchange seems to be giving up before downloading any peers.

I can't work on it right now, but I will later. It looks like I'll be up late tonight fixing bugs.
hero member
Activity: 686
Merit: 501
Stephen Reed
These are the identities that I see..

I understand that the DarkExchange identity comes from the peers.txt file.  Should there be anything in the log to confirm connection via the I2P router.  Or is there someplace in the I2P router console to confirm the Dark Exchange client?  I'll poke around.

1   SlipperySlope   MIGfMA0GC ...
2   DarkExchange   MIGfMA0GC ...
full member
Activity: 164
Merit: 100
As I described in the PM sent to you, I explicitly set the classpath jar sequence, and removed the possibly redundant org.bouncycastle package from the i2p jar.  The application launches OK and finds the DarkExchange peer listed on the Identity tab.  The search does not present an exception but I do not see any search results when I enter ..

I Have Bitcoin To Send BY Bitcoin Transfer
I Want United States of America, Dollars Sent by Dwolla

There is no change in the log file as a result of the search attempt.

I think there are still some issues with Dark Exchange connecting to the network. Check the identity tab. If you're fully connected to the network, you should see 3 identities (including your own).

I'll look at the I2P bouncy castle issue. I didn't realize I2P included the bouncy castle jar. It's funny how I'm not getting that issue on any of the computers I'm using.

Clearly there is much to work on still. Sad
hero member
Activity: 686
Merit: 501
Stephen Reed
As I described in the PM sent to you, I explicitly set the classpath jar sequence, and removed the possibly redundant org.bouncycastle package from the i2p jar.  The application launches OK and finds the DarkExchange peer listed on the Identity tab.  The search does not present an exception but I do not see any search results when I enter ..

I Have Bitcoin To Send BY Bitcoin Transfer
I Want United States of America, Dollars Sent by Dwolla

There is no change in the log file as a result of the search attempt.

-------------
By the way, I have been running I2P ever since I downloaded it for Dark Exchange.  It has a wonderful web page dashboard automatically updated every 60 seconds. It says that I've connected with 831 known peers.  A few years ago, I wrote my own peer-to-peer cryptographic messaging system and name service to support a distributed knowledge base application, and I wish that I had then known about I2P!
newbie
Activity: 51
Merit: 0
how counter-party risk is mitigated on such a exchange i.e. what are the chances that after I transfer my bitcoins to some anonymous guy I get any fiat in return?


Currently there is none. However, Dark Exchange has a concept of identities which link a user name to a public key/private key. All messages between clients are signed (which seems to be what's breaking with bouncy castle at the moment) and you can view the public key before accepting an offer from someone. This gives an incentive for people to guard their identity and build up a reputation.

If you're exchanging with someone you don't know and have never exchanged with before, you probably don't want to exchange large amounts. Once you become more confident in that person, you can start exchanging larger and larger amounts.

In the future, I hope to implement a web of trust like feature on Dark Exchange to help people determine who they can trust.

just an idea:
Score users would be nice. More trades and more volume with diferent users, more score, registration date to make more scores too (or not?). If a "bad guy" appears, just put negative scores. It not will be the best way, but make some reputation.
full member
Activity: 164
Merit: 100
how counter-party risk is mitigated on such a exchange i.e. what are the chances that after I transfer my bitcoins to some anonymous guy I get any fiat in return?


Currently there is none. However, Dark Exchange has a concept of identities which link a user name to a public key/private key. All messages between clients are signed (which seems to be what's breaking with bouncy castle at the moment) and you can view the public key before accepting an offer from someone. This gives an incentive for people to guard their identity and build up a reputation.

If you're exchanging with someone you don't know and have never exchanged with before, you probably don't want to exchange large amounts. Once you become more confident in that person, you can start exchanging larger and larger amounts.

In the future, I hope to implement a web of trust like feature on Dark Exchange to help people determine who they can trust.
full member
Activity: 154
Merit: 100
how counter-party risk is mitigated on such a exchange i.e. what are the chances that after I transfer my bitcoins to some anonymous guy I get any fiat in return?


ditto
full member
Activity: 164
Merit: 100
"lein run" complained about not finding drift*-SNAPSHOT, changed that and it runs. Takes A LOT of memory though Sad, which is not really unexpected for Java in general...

Why not use (native!), it would make things look less ugly Smiley

I also got the same error here.

What do you think of seesaw BTW? I guess it's the best that clojure has available currently.

Edit: Got two peers, so me and dev only? The search list should (for testing at least) really display all the offers , or at least all offers that use a preffered currency. I put a "bitcoin for euro by mail" offer, does someone see it?

EDIT2: On the first run, the identity tab was empty. Restarted it w/ and w/o :development: It was faster, takes a bit less memory, I now have an identity displayed. How are the normal and :development versions different other than that they maintain separate identities?

It looks like I forgot to update a reference to the snapshot version of drift in the development environment. This should only affect those running with lein from a git check out of Dark Exchange. I just pushed a fix.

You should have seen 2 other peers, both of which are me. One is a server I just have running constantly so there is someone to connect to, and the other is my real account with a couple offers. If do a search with I Have set to USD cash by mail, and I Want set to bitcoin, bitcoin transfer, you should see one of my offers. The other you should see with a I Have of bitcoin, bitcoin transfer, and I Want of USD, Dwolla.

I don't really want the search to ever show all offers, but it may be nice to look at all the offers from a specific identity.

There are two differences when running in development vrs production (w/o :development). First and most obvious is the database. If you look at config/db_config.clj you'll see that :production uses the "dark_exchange_production" database, and :development uses the "dark_exchange_development" database. The files for these two databases can be found in the data/db directory of your Dark Exchange install.

To initialize the network, Dark Exchange uses a list of known peers listed in the resources/peers.txt file. When you run in development mode, the resources/development-peers.txt file is used instead. This keeps the production and development networks separate.
hero member
Activity: 812
Merit: 1001
-
how counter-party risk is mitigated on such a exchange i.e. what are the chances that after I transfer my bitcoins to some anonymous guy I get any fiat in return?
full member
Activity: 164
Merit: 100
Quote
## Usage
Dark Exchange is currently under development and cannot be run yet.
=(

Fixed this to point to the wiki. Smiley

https://github.com/macourtney/Dark-Exchange
newbie
Activity: 21
Merit: 0
"lein run" complained about not finding drift*-SNAPSHOT, changed that and it runs. Takes A LOT of memory though Sad, which is not really unexpected for Java in general...

Why not use (native!), it would make things look less ugly Smiley

I also got the same error here.

What do you think of seesaw BTW? I guess it's the best that clojure has available currently.

Edit: Got two peers, so me and dev only? The search list should (for testing at least) really display all the offers , or at least all offers that use a preffered currency. I put a "bitcoin for euro by mail" offer, does someone see it?

EDIT2: On the first run, the identity tab was empty. Restarted it w/ and w/o :development: It was faster, takes a bit less memory, I now have an identity displayed. How are the normal and :development versions different other than that they maintain separate identities?
full member
Activity: 164
Merit: 100
newbie
Activity: 51
Merit: 0
Quote
## Usage
Dark Exchange is currently under development and cannot be run yet.
=(
hero member
Activity: 686
Merit: 501
Stephen Reed
I installed I2P OK.
Then I downloaded and installed Dark Exchange.  After I created an account OK, I attempted to trade US dollars for bitcoins and this error occurred...


Code:
ERROR [darkexchange.model.interceptors.signature-interceptor]: an error occured while signing or verifying a signature on the client side.
java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: SHA1WithRSAEncryption, provider: BC, class: org.bouncycastle.jce.provider.JDKDigestSignature$SHA1WithRSAEncryption)
at java.security.Provider$Service.newInstance(Provider.java:1245)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:190)
at java.security.Signature.getInstance(Signature.java:324)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:90)
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:202)
at darkexchange.model.security$sign.invoke(security.clj:139)
at darkexchange.model.user$sign.invoke(user.clj:141)
at darkexchange.model.interceptors.signature_interceptor$sign.invoke(signature_interceptor.clj:17)
at darkexchange.model.interceptors.signature_interceptor$client_interceptor.invoke(signature_interceptor.clj:47)
at darkexchange.model.interceptors.interceptor_util$compose_interceptors$fn__4707$fn__4708.invoke(interceptor_util.clj:4)
at darkexchange.model.interceptors.identity_interceptor$client_interceptor.invoke(identity_interceptor.clj:17)
at darkexchange.model.interceptors.interceptor_util$compose_interceptors$fn__4707.invoke(interceptor_util.clj:4)
at darkexchange.model.interceptors.interceptor_util$run_interceptors.invoke(interceptor_util.clj:9)
at darkexchange.model.interceptors.client_interceptors$run_interceptors.invoke(client_interceptors.clj:10)
at darkexchange.model.client$send_message.invoke(client.clj:26)
at darkexchange.model.peer$get_peers_from.invoke(peer.clj:98)
at darkexchange.model.peer$all_network_destinations.invoke(peer.clj:152)
at darkexchange.model.peer$download_peers_background.invoke(peer.clj:159)
at darkexchange.model.peer$download_peers_background.invoke(peer.clj:164)
at darkexchange.model.peer$download_peers_background.invoke(peer.clj:155)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.SecurityException: class "org.bouncycastle.crypto.Digest"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:807)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:488)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:626)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at java.security.Provider$Service.newInstance(Provider.java:1221)
... 26 more
ERROR [darkexchange.model.interceptors.signature-interceptor]: an error occured while signing or verifying a signature on the client side.
java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: SHA1WithRSAEncryption, provider: BC, class: org.bouncycastle.jce.provider.JDKDigestSignature$SHA1WithRSAEncryption)
at java.security.Provider$Service.newInstance(Provider.java:1245)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:190)
at java.security.Signature.getInstance(Signature.java:324)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:90)
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:202)
at darkexchange.model.security$sign.invoke(security.clj:139)
at darkexchange.model.user$sign.invoke(user.clj:141)
at darkexchange.model.interceptors.signature_interceptor$sign.invoke(signature_interceptor.clj:17)
at darkexchange.model.interceptors.signature_interceptor$client_interceptor.invoke(signature_interceptor.clj:47)
at darkexchange.model.interceptors.interceptor_util$compose_interceptors$fn__4707$fn__4708.invoke(interceptor_util.clj:4)
at darkexchange.model.interceptors.identity_interceptor$client_interceptor.invoke(identity_interceptor.clj:17)
at darkexchange.model.interceptors.interceptor_util$compose_interceptors$fn__4707.invoke(interceptor_util.clj:4)
at darkexchange.model.interceptors.interceptor_util$run_interceptors.invoke(interceptor_util.clj:9)
at darkexchange.model.interceptors.client_interceptors$run_interceptors.invoke(client_interceptors.clj:10)
at darkexchange.model.client$send_message.invoke(client.clj:26)
at darkexchange.model.calls.notify$call.invoke(notify.clj:10)
at darkexchange.model.peer$notify_destination.invoke(peer.clj:92)
at darkexchange.model.peer$notify_all_peers.invoke(peer.clj:134)
at darkexchange.model.peer$add_destinations.invoke(peer.clj:147)
at darkexchange.model.peer$download_peers_background.invoke(peer.clj:161)
at darkexchange.model.peer$download_peers_background.invoke(peer.clj:164)
at darkexchange.model.peer$download_peers_background.invoke(peer.clj:155)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.SecurityException: class "org.bouncycastle.crypto.Digest"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:807)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:488)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:626)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.newInstance0(Class.java:326)
at java.lang.Class.newInstance(Class.java:308)
at java.security.Provider$Service.newInstance(Provider.java:1221)
... 28 more

full member
Activity: 164
Merit: 100
TL;DR: https://github.com/macourtney/Dark-Exchange

You read that right! Dark Exchange is a 100% decentralized p2p exchange. No more worrying about exchange websites going down or locking your account. You now have complete control of your bitcoin exchanges and accounts.

Because Dark Exchange is decentralized, it can't work like Mt Gox or Trade Hill. Instead, it works more like bitcoin-otc and Bitcoin Market. You post offers and others accept them, or you can search all of the offers on the network and select the one you want. Dark Exchange will walk you through the process of completing a trade.

Advantages:

1. Dark Exchange can never be shutdown by anyone (including me) for any reason. As long as there are at least two nodes on the network, the exchange is up and running. (Actually this is more of a goal than a feature at this point. Though I tried to program it this way, I'm not sure if it will really stand up to real world use yet. But, that's why it's called Beta.)

2. No bitcoins or other money is held on a central server. You have complete control over your money the entire time.

3. Virtually all currencies and payment methods are supported. Any currencies or payment methods not already included can be added quickly.

4. No commissions. Free to use.

5. Open source. All source code for Dark Exchange can be found at: https://github.com/macourtney/Dark-Exchange

6. Runs on the I2P network. All connections are end to end encrypted, and privacy is under your control.


Dark Exchange is in Beta right now. Though I've run as many tests as I can think of on it, I'm sure it won't work exactly as advertised right now. I'm looking for intrepid people interested in helping me test Dark Exchange by using it.

All information on how to to download, install and use Dark Exchange can be found on the Dark Exchange wiki: https://github.com/macourtney/Dark-Exchange/wiki

If you have any troubles installing or using the exchange, let me know so I can start entering in issues to make Dark Exchange better.


And since it's the 4th.. Let's all declare independence from centralization with Dark Exchange! Smiley
Jump to: