Pages:
Author

Topic: [BETA] Dark Exchange: a 100% decentralized p2p exchange - page 4. (Read 15848 times)

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?
Pages:
Jump to: