{"id":14980152,"url":"https://github.com/aaron-akhtar/blockonomics-java-wrapper","last_synced_at":"2025-08-23T12:37:41.780Z","repository":{"id":45033009,"uuid":"316600604","full_name":"Aaron-Akhtar/Blockonomics-Java-Wrapper","owner":"Aaron-Akhtar","description":"This is a Java Wrapper of the Blockonomics RESTful API https://www.blockonomics.co/views/api.html","archived":false,"fork":false,"pushed_at":"2022-02-11T16:17:21.000Z","size":59,"stargazers_count":3,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-22T02:53:18.091Z","etag":null,"topics":["bitcoin","bitcoin-payment","bitcoin-wallet","blockonomics","cryptocurrency","java-wrapper"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Aaron-Akhtar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-27T21:10:24.000Z","updated_at":"2024-11-24T04:06:19.000Z","dependencies_parsed_at":"2022-07-25T02:18:30.879Z","dependency_job_id":null,"html_url":"https://github.com/Aaron-Akhtar/Blockonomics-Java-Wrapper","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Aaron-Akhtar/Blockonomics-Java-Wrapper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aaron-Akhtar%2FBlockonomics-Java-Wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aaron-Akhtar%2FBlockonomics-Java-Wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aaron-Akhtar%2FBlockonomics-Java-Wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aaron-Akhtar%2FBlockonomics-Java-Wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aaron-Akhtar","download_url":"https://codeload.github.com/Aaron-Akhtar/Blockonomics-Java-Wrapper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aaron-Akhtar%2FBlockonomics-Java-Wrapper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271747027,"owners_count":24813605,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","bitcoin-payment","bitcoin-wallet","blockonomics","cryptocurrency","java-wrapper"],"created_at":"2024-09-24T14:01:22.472Z","updated_at":"2025-08-23T12:37:41.756Z","avatar_url":"https://github.com/Aaron-Akhtar.png","language":"Java","readme":"# Blockonomics-Java-Wrapper\nThis is a Java Wrapper of the Blockonomics RESTful API https://www.blockonomics.co/views/api.html\n\nExample Callback URL when using the Callback Server:\n```\nhttp://%YOUR_PUBLIC_IPv4_HERE%:%YOUR_PORT_HERE%/testing?secret=%YOUR_SECRET_KEY_HERE%\n```\nAn Example Link:\n```\nhttp://1.2.3.4:8080/api1?secret=myRandomSecretKey\n```\n_**Be sure to place said link in your blockonomics merchant store.**_\nhttps://www.blockonomics.co/merchants#/stores\n\n\n## Examples -\n\nBasic implementation of the base functionality:\n```java\npackage me.aaronakhtar.blockonomics_wrapper;\n\nimport me.aaronakhtar.blockonomics_wrapper.objects.BitcoinAddress;\nimport me.aaronakhtar.blockonomics_wrapper.objects.BitcoinAddressHistory;\nimport me.aaronakhtar.blockonomics_wrapper.objects.transaction.ConfirmedTransaction;\nimport me.aaronakhtar.blockonomics_wrapper.objects.transaction.PendingTransaction;\n\nimport java.util.Arrays;\n\npublic class Test {\n\n    public static void main(String[] args) throws Exception {\n        final Blockonomics blockonomics = new Blockonomics(\"API_KEY\");\n        blockonomics.modifyMonitoringAddress(\"SOME_BTC_ADDRESS\", \"Bitcoin Address #2\");\n\n        BitcoinAddressHistory bitcoinAddressHistory = blockonomics.getBitcoinAddressHistory(new BitcoinAddress[]{new BitcoinAddress(\"1FnQjXQc8F6jyjF8L92yLpnMhSWpw8t8jo\")});\n        for (ConfirmedTransaction confirmedTransaction : bitcoinAddressHistory.getHistory()){\n            System.out.println(Arrays.toString(confirmedTransaction.getAddr()));\n            System.out.println(confirmedTransaction.getTime());\n            System.out.println(confirmedTransaction.getTxid());\n            System.out.println(confirmedTransaction.getValue());\n        }\n\n        for (PendingTransaction pendingTransaction : bitcoinAddressHistory.getPendingTransactions()){\n            System.out.println(Arrays.toString(pendingTransaction.getAddr()));\n            System.out.println(pendingTransaction.getTime());\n            System.out.println(pendingTransaction.getTxid());\n            System.out.println(pendingTransaction.getValue());\n            System.out.println(pendingTransaction.getStatus());\n        }\n        \n        blockonomics.deleteMonitoringAddress(\"SOME_BTC_ADDRESS\");\n    }\n\n}\n```\n\nReceiving LIVE Bitcoin Payment \"Alerts\" using the Blockonomics Callback Functionality:\n**BE SURE TO SET YOUR 'CALLBACK URL' IN THE BLOCKONOMICS MERCHANT AREA**:\nhttps://www.blockonomics.co/merchants#/stores\n\n_There will be an easy-to-use callback URL example below_\n\n```java\n\npackage me.aaronakhtar.blockonomics_wrapper;\n\nimport me.aaronakhtar.blockonomics_wrapper.objects.BlockonomicsCallbackSettings;\nimport me.aaronakhtar.blockonomics_wrapper.objects.transaction.CallbackTransaction;\nimport me.aaronakhtar.blockonomics_wrapper.objects.transaction.TransactionStatus;\n\nimport java.util.Date;\nimport java.util.Locale;\nimport java.util.Random;\nimport java.util.Arrays;\n\npublic class Test {\n\n    public static void main(String[] args) throws Exception {\n        final Blockonomics blockonomics = new Blockonomics(\"API_KEY\");\n        \n        // set the PAGE and SECRET KEY you want as this blockonomics instance's specific callback.\n        // if you have multiple apis, you can create multiple instances,\n        // and multiple pages on the same HTTP server for different callbacks\n        // and authentication.\n        //\n        final BlockonomicsCallbackSettings callbackSettings \n                                    // MAKE SURE TO PUT A `/` BEFORE THE PAGE IDENTIFIER.\n                = blockonomics.getCallbackSettings(\"/testing\", \"0\");\n        \n        \n        // In a production environment, you'd probably\n        // want to create a boolean for that keeps the\n        // callback server alive while its true, this\n        // will allow you to safely close the callback\n        // server when you want to shut it down, to keep the server\n        // alive, run it in a thread.\n        \n        try {\n            Blockonomics.startCallbackServer(new BlockonomicsCallbackSettings[]{callbackSettings}, 8081);\n            try (AutoCloseable autoCloseable = () -\u003e Blockonomics.stopCallbackServer()) {\n\n\n\n                // the below thread is just to emulate new transactions.\n\n\n                new Thread(){\n                    @Override\n                    public void run() {\n                        final Random random = new Random();\n                        while(true){\n                            try {\n                                Thread.sleep(2500);\n                                \n                                // you can also do this through the Blockonomics Merchants Area: https://www.blockonomics.co/merchants#/logs\n                                // once you receive an actual payment, blockonomics will send a request the same way\n                                // we are sending a test one, however their request will contain valid data.\n                                blockonomics.sendTestPaymentToCallback(\n                                        callbackSettings,\n                                        TransactionStatus.PARTIALLY_CONFIRMED,\n                                        \"1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX\",\n                                        random.nextDouble(),\n                                        true);\n                            }catch (Exception e){\n                                e.printStackTrace();\n                            }\n                        }\n                    }\n                }.start();\n\n\n                // I've created an example timer system which\n                // will be used to only listen for transactions for a\n                // specified number of seconds, otherwise it will run in an\n                // infinite loop, as it will never return null.\n\n                // if you want to change this, set `100`\n                // to however many seconds you want it to stay open for.\n                final long stopListeningTime = System.currentTimeMillis() + (100 * 1000);\n\n                CallbackTransaction callbackTransaction = null;\n                System.out.println(\"Listening for transactions.\");\n                while (System.currentTimeMillis() \u003c stopListeningTime) {\n                    \n                    // The listenForNewTransaction method is blocking, \n                    // but only for 5 seconds, so if a transaction doesn't \n                    // appear in 5 seconds, it returns null.\n                    final CallbackTransaction transaction = \n                            (callbackTransaction = blockonomics.listenForNewTransaction());\n                    if (transaction != null) {\n                        new Thread() {\n                            @Override\n                            public void run() {\n                                try {\n                                    System.out.println(\"\\n---------------\" + transaction.getNoticedDate() + \"  (NOW:\" + CallbackTransaction.sdf.format(new Date()) + \")---------------\");\n                                    System.out.println(\"Address: \" + transaction.getAddress().getAddress());\n                                    System.out.println(\"Transaction ID: \" + transaction.getTransactionId());\n                                    System.out.println(\"Bitcoin Amount (Satoshis): \" + transaction.getAmount());\n                                    System.out.println(\"Confirmation Status: \" + transaction.getStatus().name().toUpperCase(Locale.ROOT) + \" ('\" + transaction.getStatus().getI() + \"')\");\n                                    // if you want to create invoicing, so that you  can track payments etc, you would do those checks here,\n                                    // however I will persist you use threading here so that you don't miss any transactions.\n\n                                    \n                                    \n                                    // EXAMPLE CALLBACK URL:\n                                    // http://%YOUR_PUBLIC_IPv4_HERE%:%YOUR_PORT_HERE%/testing?secret=%YOUR_SECRET_KEY_HERE%\n                                    \n                                    \n\n                                } catch (Exception e) {\n                                    e.printStackTrace();\n                                }\n                            }\n                        }.start();\n                    }\n\n                }\n                System.out.println(\"No longer listening for transactions.\");                \n                \n                \n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }      \n        \n        \n\n\n    }\n}\n\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaron-akhtar%2Fblockonomics-java-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faaron-akhtar%2Fblockonomics-java-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaron-akhtar%2Fblockonomics-java-wrapper/lists"}