macourtney / dark-exchange Goto Github PK
View Code? Open in Web Editor NEWDark Exchange is a distributed p2p exchange for bitcoin.
Dark Exchange is a distributed p2p exchange for bitcoin.
Since searching for offers is a very common activity which should be emphasised, the search tab should be merged into the home tab. It may make sense to move the open trades table down, and put the search table and buttons as the top table.
Allow the user to choose which default currencies he or she wants to use.
When Dark Exchange starts the first time, the user is prompted for which currencies he or she wants to use.
When searching or adding an offer, they can select from the default list or choose "other" and be presented with the full list.
At any point, they can open the options window to add or remove default currencies.
Add Namecoin as a currency.
Add a checkbox to the identities tab which, when selected, shows only the identities currently online.
Add Paypal as a payment type.
It would be nice to have Dark Exchange automatically update itself. However, posting the latest version of Dark Exchange on a specific website defeats the decentralization, but using something bittorrent like would open Dark Exchange up to hackers who might be able to hijack the "official" release.
More thought needs to be put into this issue.
Implement a Trust Score.
My notes so far:
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.
More thought for this issue is needed.
At the moment, many table columns are much wider than they need to be, and many are not wide enough. It would be nice to have the column widths default to something reasonable.
Remove identities not seen on the network for a month from the database.
Dark Exchange is not finding all identities or otherwise connecting to the network.
Create an installer for Dark Exchange.
I am able to create an offer and a friend found and started a trade. When I go to view a trade, in status "Needs to be confirmed", an exception is thrown:
2011-09-07 14:01:49,263 ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception: java.lang.RuntimeException: java.lang.IllegalArgumentException: Cannot open <#> as an InputStream. at clojure.lang.AFn.run(AFn.java:28) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641) 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.awt.EventQueue.dispatchEvent(EventQueue.java:611) 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)
It would be nice to see the I Have Amount to I Want Amount ratio and vice versa in the search table. That way you can see the price you're getting for the trade.
Add an in person transfer option.
Currently, the only transfer options available are either online, or through the mail. It would be nice if you could make in person transfers based on region or some other way of determining a general location.
Add Paxum as a payment type.
Add timestamp to each line in the log files.
It would be nice to pop up a splash screen as soon as you start Dark Exchange. At the moment, no windows appear and nothing happens until the database finishes updating. Then, the login screen appears.
Opening a splash screen immediately would help mask the database update, and give the user feedback on what Dark Exchange is doing.
It might be nice to include the login stuff with the splash screen, but disable it until the database is updated.
All buttons block the Event Thread causing Dark Exchange to lock up for a few seconds after every action. Update the buttons to do the action in the background.
On the home tab, both the open trade table and open offer table are displayed. The open offer table doesn't seem to fit as a main table.
It would be nice to move the open offer table to it's own tab.
From JackJack
It would be nice to have checkboxes instead of the current one-choice form for the transfer manner.
Display a warning message when I2P cannot be found.
Currently there is no way to tell if you are not connected to the I2P network. It would be nice to display a warning message if the I2P network cannot be found.
Running multiple searches at the same time.
Currently, you can only run one search at a time. It would be nice to be able to run multiple searches at the same time and see each result in a new tab or window.
Add Pecunix as payment type.
Remove peers not seen on the network for a month from the database.
Some table columns (like id) are on tables because they are needed to look up something later. With the new version of Seesaw, they are not needed anymore. It would be nice to remove them to unclutter these tables.
It would be nice to be able to see the ratio of the I have amount to I want amount and vice versa in the offers table. That way you can see the cost of the transaction regardless of which way the trade occurs.
When you start a search, there is no feedback that the search is on going. It would be nice if they user could be notified that a search is ongoing.
When viewing an offer from a search, the user's public key is shortened to a section which is seemingly the most random to distinguish the owner from others.
However, the identity table tries to display the entire public key. Since the first x characters in the public key are the same for all public keys, it's impossible to distinguish them.
Add Liberty Reserve as a payment type.
Im not familiar with clojure so I took my best shot and starting the app but got this error. Can you help and/or add README notes for starting the app?
$ git clone https://github.com/macourtney/Dark-Exchange
$ cd Dark-Exchange/
$ clojure project.clj
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: defproject in this context (project.clj:1)
at clojure.lang.Compiler.analyze(Compiler.java:4420)
at clojure.lang.Compiler.analyze(Compiler.java:4366)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:2828)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:4594)
at clojure.lang.Compiler.analyze(Compiler.java:4405)
at clojure.lang.Compiler.analyze(Compiler.java:4366)
at clojure.lang.Compiler.eval(Compiler.java:4646)
at clojure.lang.Compiler.load(Compiler.java:4972)
at clojure.lang.Compiler.loadFile(Compiler.java:4939)
at clojure.main$load_script__7405.invoke(main.clj:213)
at clojure.main$script_opt__7442.invoke(main.clj:265)
at clojure.main$main__7466.doInvoke(main.clj:346)
at clojure.lang.RestFn.invoke(RestFn.java:413)
at clojure.lang.Var.invoke(Var.java:359)
at clojure.lang.AFn.applyToHelper(AFn.java:173)
at clojure.lang.Var.applyTo(Var.java:476)
at clojure.main.main(main.java:37)
Caused by: java.lang.Exception: Unable to resolve symbol: defproject in this context
at clojure.lang.Compiler.resolveIn(Compiler.java:4797)
at clojure.lang.Compiler.resolve(Compiler.java:4743)
at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4720)
at clojure.lang.Compiler.analyze(Compiler.java:4387)
... 16 more
Minimize to systray + systray notifications for new messages, accepted trades, etc.
Related to Issue #7
At the moment, when you start a search, there is not feedback and you can just click the search button again to start a new search. It would be nice if you would be blocked from starting another search until you cancel, or let complete the previous search.
On the login window, the user must click login or tab to the login button and press the space bar. It would be nice if when the user presses enter in the password field or when the login button is selected, the login action is performed.
Translations would be nice. I recomend that everyone can translate the files here: http://crowdin.net/ or in other place.
Right now, the only way to tell your trade partner how to send you money is through trade messages. It would be nice if you could set up your payment address in advance. The payment address would be different depending on if you're accepting bitcoin, cash in the mail, or Dwolla.
The payment address for bitcoin would be your bitcoin receiving address.
The payment address for cash in the mail would be your mailing address.
The payment address for Dwolla would be your Dwolla id.
Put help menu, with help, about and links to the wiki.
=)
I started the app with 'lein run' and when I created a new user, the app throws this exception
2011-09-06 19:25:49,038 ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception: java.util.concurrent.RejectedExecutionException at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92) at clojure.core$future_call.invoke(core.clj:5396) at darkexchange.controller.login.create_user$create_user.invoke(create_user.clj:55) at darkexchange.controller.login.create_user$create_user_action.invoke(create_user.clj:60) at seesaw.event$fire.invoke(event.clj:206) at seesaw.event$eval1216$fn$reify__1218.actionPerformed(event.clj:233) 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)
At the moment, after you log into Dark Exchange, the main window pops up, but you can't do anything since the destination address has not been loaded yet. It's not obvious this is the problem and it can look like Dark Exchange is not working. It would be nice to delay the main window until the destination address is loaded. However, it would be necessary to give the user feedback on what's going on.
Highlight the line in the open trade table when a trade has an unread message.
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
Allow the user to select multiple transfer methods when searching. The results would include all transfer methods selected by the user.
Double click deletes offer in the open offers table. There is no warning, the offer just disappears. The offer should not be deleted. If we had a view offer window, a view button should be created for it, and displayed on double click.
Highlight a trade in the open trade table when the trade requires the user to perform an action.
The password field should take focus by default every time the login window is displayed or regains focus.
From wegotpickles:
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)
Right now, the only way to let your trade partner know of your terms is to send a trade message to him. However, at that point, it may be too late, and the trade is already started. It would be nice to be able to add the trade terms to the initial offer and let people view them before accepting the trade.
This goes along with issue #11.
It would be nice to allow the user to display all offers from a specific identity on the identity view window.
From SlipperySlope:
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 ...
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
It would be nice to add a view button to the identity tab, and display details about a specific identity.
From JackJack:
Actually there are 2 different errors (when no dev flag), when I hit the Login button
If the password is correct:
ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception:
java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
at clojure.core$future_call.invoke(core.clj:5406)
at darkexchange.controller.login.login$login.invoke(login.clj:62)
at darkexchange.controller.login.login$login_action.invoke(login.clj:70)
at seesaw.event$fire.invoke(event.clj:206)
at seesaw.event$eval1022$fn$reify__1024.actionPerformed(event.clj:233)
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.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:191)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1633)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267)
at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:216)
at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2928)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2920)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2814)
at java.awt.Component.processEvent(Component.java:6040)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
at java.awt.Component.dispatchEventImpl(Component.java:4502)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
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)
If not:
ERROR [darkexchange.uncaught-exception-handler]: Uncaught Exception:
java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
at clojure.core$future_call.invoke(core.clj:5406)
at darkexchange.controller.login.login$login.invoke(login.clj:62)
at darkexchange.controller.login.login$login_action.invoke(login.clj:70)
at seesaw.event$fire.invoke(event.clj:206)
at seesaw.event$eval1022$fn$reify__1024.actionPerformed(event.clj:233)
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:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
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:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
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)
And the error I posted above is also thrown when I try to create a new account.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.