{"id":13652554,"url":"https://github.com/nervosnetwork/ckb-sdk-java","last_synced_at":"2025-04-07T05:12:11.453Z","repository":{"id":38274253,"uuid":"162657830","full_name":"nervosnetwork/ckb-sdk-java","owner":"nervosnetwork","description":"Java SDK for CKB","archived":false,"fork":false,"pushed_at":"2025-02-12T08:20:18.000Z","size":3960,"stargazers_count":30,"open_issues_count":8,"forks_count":27,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-31T04:05:47.029Z","etag":null,"topics":["blockchain","ckb","java","nervos"],"latest_commit_sha":null,"homepage":"https://www.nervos.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nervosnetwork.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-21T02:56:04.000Z","updated_at":"2025-03-19T07:05:39.000Z","dependencies_parsed_at":"2024-12-24T07:13:18.485Z","dependency_job_id":"97039d1b-4155-4f5f-8e96-93bcb1caf81e","html_url":"https://github.com/nervosnetwork/ckb-sdk-java","commit_stats":{"total_commits":906,"total_committers":17,"mean_commits":"53.294117647058826","dds":0.4105960264900662,"last_synced_commit":"c9fb5cc8a853c9a41b42d02e56f4d2a8d7fbdab9"},"previous_names":[],"tags_count":90,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Fckb-sdk-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Fckb-sdk-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Fckb-sdk-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Fckb-sdk-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nervosnetwork","download_url":"https://codeload.github.com/nervosnetwork/ckb-sdk-java/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247595335,"owners_count":20963943,"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","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":["blockchain","ckb","java","nervos"],"created_at":"2024-08-02T02:01:00.418Z","updated_at":"2025-04-07T05:12:11.400Z","avatar_url":"https://github.com/nervosnetwork.png","language":"Java","funding_links":[],"categories":["Tools"],"sub_categories":["SDKs"],"readme":"# CKB SDK Java\n\n[![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/nervosnetwork/ckb-sdk-java/blob/develop/LICENSE)\n[![Github Actions CI](https://github.com/nervosnetwork/ckb-sdk-java/workflows/CI/badge.svg?branch=develop)](https://github.com/nervosnetwork/ckb-sdk-java/actions)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.nervos.ckb/ckb/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.nervos.ckb/ckb)\n[![Telegram Group](https://cdn.rawgit.com/Patrolavia/telegram-badge/8fe3382b/chat.svg)](https://t.me/nervos_ckb_dev)\n\nJava SDK for Nervos [CKB](https://github.com/nervosnetwork/ckb).\n\n## Prerequisites\n\n* Java 8\n* Gradle 5.0 or later\n\n## Installation\n\nMaven\n\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.nervos.ckb\u003c/groupId\u003e\n  \u003cartifactId\u003eckb\u003c/artifactId\u003e\n  \u003cversion\u003e{version}\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nGradle\n\n```\nimplementation 'org.nervos.ckb:ckb:{version}'\nimplementation 'org.nervos.ckb:core:{version}'\nimplementation 'org.nervos.ckb:utils:{version}'\n```\n\n## Build\n\nRun `gradle build` in project root directory.\n\n## Quick start\n\nHere we will give some most frequently used operations, to bring you enlightenment about how to use ckb-sdk-java to operate your asset in CKB chain.\n\n### Setup\n\nckb-sdk-java provides a convenient client to help you easily interact with [CKB](https://github.com/nervosnetwork/ckb) node.\n\n```java\n// Set up client.\nCkbRpcApi ckbAPi = new Api(\"http://127.0.0.1:8114\");\n```\n\nYou can leverage this client to call any RPC APIs provided by CKB in Java code.\n\n```java\nbyte[] blockHash = Numeric.hexStringToByteArray(\"0x77fdd22f6ae8a717de9ae2b128834e9b2a1424378b5fc95606ba017aab5fed75\");\nBlock block = ckbApi.getBlock(blockHash);\n```\n\nFor more details about CKB RPC APIs, please refer to [CKB RPC doc](https://github.com/nervosnetwork/ckb/blob/develop/rpc/README.md).\n\n### Build transaction by manual\n\nckb-sdk-java encapsulates the common logic into a user-friendly transaction builder. It could greatly free you from\ngetting into script details and from tedious manual work of building transaction including adding celldeps, transaction\nfee calculation, change output set and so on.\n\nHere is an example to build a CKB transfer transaction with the help of transaction builder and ckb node.\n\n```java\nString sender = \"ckt1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq2qf8keemy2p5uu0g0gn8cd4ju23s5269qk8rg4r\";\nString receiver = \"ckt1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsqg958atl2zdh8jn3ch8lc72nt0cf864ecqdxm9zf\";\nIterator\u003cTransactionInput\u003e iterator = new InputIterator(sender);\nTransactionBuilderConfiguration configuration = new TransactionBuilderConfiguration(Network.TESTNET);\nconfiguration.setFeeRate(1000);\nTransactionWithScriptGroups txWithGroups = new CkbTransactionBuilder(configuration, iterator)\n    .addOutput(receiver, 50100000000L)\n    .setChangeOutput(sender)\n    .build();\n```\n\nFor more use cases of building transaction with ckb node, please refer\nto [these examples](./example/src/main/java/org/nervos/ckb/example).\n\n### Build transaction with Mercury\n\n[Mercury](https://github.com/nervosnetwork/mercury) is an application for better interaction with CKB chain, providing\nmany useful [RPC APIs](https://github.com/nervosnetwork/mercury/blob/main/core/rpc/README.md) for development like\nquerying transactions or getting UDT asset information. You need to deploy your own mercury server and sync data with the\nlatest network before using it.\n\nMercury is another way to build transaction. With the help of Mercury, you can build a transaction by simply calling a\nJSON-RPC API. Here we show how to build a CKB transfer transaction with mercury.\n\n```java\nString sender = \"ckt1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq0yvcdtsu5wcr2jldtl72fhkruf0w5vymsp6rk9r\";\nString receiver = \"ckt1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsqvglkprurm00l7hrs3rfqmmzyy3ll7djdsujdm6z\";\n\nlong ckbAmount = AmountUtils.ckbToShannon(100);   // Convert CKB to Shannon (1 CKB = 10^8 Shannon)\nSimpleTransferPayloadBuilder builder = new SimpleTransferPayloadBuilder();\nbuilder.addFrom(sender);\nbuilder.addTo(receiver, ckbAmount);\nbuilder.assetInfo(AssetInfo.newCkbAsset());\n\n// Get an unsigned raw transaction with the help of Mercury\nMercuryApi mercuryApi = new DefaultMercuryApi(\"http://127.0.0.1:8116\", false);\nTransactionWithScriptGroups txWithScriptGroups = mercuryApi.buildSimpleTransferTransaction(builder.build());\n```\n\nFor more use cases of mercury, please refer to [these test cases](./ckb-mercury-sdk/src/test/java/mercury)\nand [Mercury JSON-RPC documentation](https://github.com/nervosnetwork/mercury/blob/dev-0.4/core/rpc/README.md).\n\n### Sign and send transaction\n\nTo send transaction you build to CKB network, you need to\n\n1. sign transaction with your private key.\n2. send signed transaction to CKB node, and wait it to be confirmed.\n\nBefore signing and sending transaction, you need to prepare a raw transaction represented by an instance of class `TransactionWithScriptGroups`. You can get it [by Mercury](#Build-transaction-with-Mercury) or [by manual](#Build-transaction-by-manual)\n\n```java\n// 0. Set your private key\nString privateKey = \"0x6c9ed03816e31...\";\n// 1. Sign transaction with your private key\nTransactionSigner.getInstance(Network.TESTNET).signTransaction(txWithScriptGroups, privateKey);\n// 2. Send transaction to CKB node\nbyte[] txHash = ckbApi.sendTransaction(txWithScriptGroups.txView);\nSystem.out.println(Numeric.toHexString(txHash));\n```\n\n### Generate a new address\n\nIn CKB world, a lock script can be represented as an address. `secp256k1_blake160` is the most common used address and here we show how to generate it.\n\n```java\n// Generate a new address randomly\nECKeyPair keyPair = Keys.createEcKeyPair();\nScript script = Script.generateSecp256K1Blake160SignhashAllScript(keyPair));\nAddress address = new Address(script, Network.TESTNET);\nSystem.out.println(address.encode());\n```\n\nFor more details please about CKB address refer to [CKB rfc 0021](https://github.com/nervosnetwork/rfcs/blob/master/rfcs/0021-ckb-address-format/0021-ckb-address-format.md).\n\n### Convert public key to address\n\nConvert elliptic curve public key to an address (`secp256k1_blake160`)\n\n```java\n// The public key sent is an elliptic curve public key of compressed format - a 65-length hex (not include hex prefix 0x).\nbyte[] publicKey = Numeric.hexStringToByteArray(\"0x24a501efd328e062c8675f2365970728c859c592beeefd6be8ead3d901330bc01\");\nScript script = Script.generateSecp256K1Blake160SignhashAllScript(publicKey);\nAddress address = new Address(script, Network.TESTNET);\nSystem.out.println(address.encode());\n```\n\n### Parse address\n\nShort address and full bech32 address are deprecated. The standard address encoded way is bech32m. You can parse address\nfrom an encoded string address and then get its network, script and encoded string of other format.\n\n```java\nAddress address = Address.decode(\"ckt1qyqxgp7za7dajm5wzjkye52asc8fxvvqy9eqlhp82g\");\nScript script = address.getScript();\nNetwork network = address.getNetwork();\nSystem.out.println(address.encode());\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n## License\n\nThe SDK is available as open source under the terms of\nthe [MIT License](https://opensource.org/licenses/MIT).\n\n## Changelog\n\nSee [CHANGELOG](CHANGELOG.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnervosnetwork%2Fckb-sdk-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnervosnetwork%2Fckb-sdk-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnervosnetwork%2Fckb-sdk-java/lists"}