{"id":21177281,"url":"https://github.com/codechain-io/codechain-stakeholder-sdk-js","last_synced_at":"2025-07-09T22:30:32.513Z","repository":{"id":57202275,"uuid":"170794479","full_name":"CodeChain-io/codechain-stakeholder-sdk-js","owner":"CodeChain-io","description":"A JavaScript implementation for CodeChain stake token related custom actions and custom transactions","archived":false,"fork":false,"pushed_at":"2019-09-03T00:07:28.000Z","size":103,"stargazers_count":7,"open_issues_count":2,"forks_count":9,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-03T08:08:28.491Z","etag":null,"topics":["javascript","stake","token"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CodeChain-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-15T03:11:44.000Z","updated_at":"2022-12-21T08:37:01.000Z","dependencies_parsed_at":"2022-09-17T15:02:35.916Z","dependency_job_id":null,"html_url":"https://github.com/CodeChain-io/codechain-stakeholder-sdk-js","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CodeChain-io/codechain-stakeholder-sdk-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeChain-io%2Fcodechain-stakeholder-sdk-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeChain-io%2Fcodechain-stakeholder-sdk-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeChain-io%2Fcodechain-stakeholder-sdk-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeChain-io%2Fcodechain-stakeholder-sdk-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CodeChain-io","download_url":"https://codeload.github.com/CodeChain-io/codechain-stakeholder-sdk-js/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeChain-io%2Fcodechain-stakeholder-sdk-js/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264504569,"owners_count":23618824,"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":["javascript","stake","token"],"created_at":"2024-11-20T17:15:24.552Z","updated_at":"2025-07-09T22:30:32.090Z","avatar_url":"https://github.com/CodeChain-io.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CodeChain Stakeholder SDK\n\nA JavaScript implementation for CodeChain stake token related custom actions and custom transactions\n\n## Features\n\nIt adds the following features to [CodeChain SDK for JavaScript](https://github.com/CodeChain-io/codechain-sdk-js):\n\n- Query staking states\n- Call staking related RPC\n- Create staking transactions\n\n## API Examples\n\nYou first need to install the package.\n\n```sh\n# npm\nnpm install codechain-stakeholder-sdk\n\n# yarn\nyarn add codechain-stakeholder-sdk\n```\n\nThen prepare SDK instance as usual.\n\n```js\nimport { SDK } from \"codechain-sdk\";\nconst sdk = new SDK({\n  server: \"http://localhost:8080\",\n  networkId: \"tc\"\n});\n```\n\nNow, you are prepared to use `stakeholder-sdk-js`\n\n### Query staking states\n\nThese functions can have an optional block number parameter at the end.\n\n#### Get the list of stakeholders\n\n```js\nimport { getCCSHolders } from \"codechain-stakeholder-sdk\";\n\nconst holders = await getCCSHolders(sdk);\n// holders: PlatformAddress[]\n```\n\n#### Get the quantity of undelegated stake token of a stakeholder\n\n```js\nimport { getUndelegatedCCS } from \"codechain-stakeholder-sdk\";\n\nconst balance = await getUndelegatedCCS(\n  sdk,\n  \"tccq9h7vnl68frvqapzv3tujrxtxtwqdnxw6yamrrgd\"\n);\n// balance: U64\n```\n\n#### Get the list of delegations that a stakeholder delegated to delegatees\n\n```js\nimport { getDelegations } from \"codechain-stakeholder-sdk\";\n\nconst delegations = await getDelegations(\n  sdk,\n  \"tccq9h7vnl68frvqapzv3tujrxtxtwqdnxw6yamrrgd\"\n);\nfor (const { delegatee, quantity } of delegations) {\n  // delegatee: PlatformAddress\n  // quantity: U64\n}\n```\n\n#### Get the list of validator candidates\n\n```js\nimport { getCandidates } from \"codechain-stakeholder-sdk\";\n\nconst candidates = await getCandidates(sdk);\nfor (const { pubkey, deposit, nominationEndsAt, metadata } of candidates) {\n  // pubkey: H512\n  // deposit: U64\n  // nominationEndsAt: U64\n  // metadata: Buffer\n}\n```\n\n#### Get the list of jailed accounts\n\n```js\nimport { getJailed } from \"codechain-stakeholder-sdk\";\n\nconst prisoners = await getJailed(sdk);\nfor (const { address, deposit, custodyUntil, releasedAt } of prisoners) {\n  // address: PlatformAddress\n  // deposit: U64\n  // custodyUntil: U64\n  // releasedAt: U64\n}\n```\n\n#### Get the list of banned accounts\n\n```js\nimport { getBanned } from \"codechain-stakeholder-sdk\";\n\nconst banned = await getBanned(sdk);\n// banned: PlatformAddress[]\n```\n\n#### Get intermediate rewards\n\n```js\nimport { getIntermediateRewards } from \"codechain-stakeholder-sdk\";\n\nconst { previous, current } = await getIntermediateRewards(sdk);\n// previous, current: { address: PlatformAddress, quantity: U64 }[]\n```\n\n#### Get the list of current validators\n\n```js\nimport { getValidators } from \"codechain-stakeholder-sdk\";\n\nconst validators = await getValidators(sdk);\nfor (const { weight, delegation, deposit, pubkey } of validators) {\n  // weight: U64\n  // delegation: U64\n  // deposit: U64\n  // pubkey: H512\n}\n```\n\n### RPCs to query staking status\n\n#### TermMetadata\n\n```js\nimport { getTermMetadata } from \"codechain-stakeholder-sdk\";\n\nconst { lastTermFinishedBlockNumber, currentTermId } = await getTermMetadata(\n  sdk\n);\n```\n\n### Create staking transactions\n\n#### Transfer stake tokens\n\n```js\nimport { createTransferCCSTransaction } from \"codechain-stakeholder-sdk\";\n\n// Transfer 100 tokens to tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\nconst tx = createTransferCCSTransaction(\n  sdk,\n  \"tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\",\n  100\n)\nconst signedTx = .sign({ secret: \"...\", seq: \"...\", fee: \"...\" });\nconst txhash = await sdk.rpc.chain.sendSignedTransaction(signedTx);\n```\n\n#### Delegate stake tokens\n\n```js\nimport { createDelegateCCSTransaction } from \"codechain-stakeholder-sdk\";\n\n// Delegate 100 tokens to tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\nconst tx = createDelegateCCSTransaction(\n  sdk,\n  \"tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\",\n  100\n);\nconst signedTx = tx.sign({ secret: \"...\", seq: \"...\", fee: \"...\" });\nconst txhash = await sdk.rpc.chain.sendSignedTransaction(signedTx);\n```\n\n#### Revoke stake tokens\n\n```js\nimport { createRevokeTransaction } from \"codechain-stakeholder-sdk\";\n\n// Revoke 100 tokens delegated to tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\nconst tx = createRevokeTransaction(\n  sdk,\n  \"tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\",\n  100\n);\nconst signedTx = tx.sign({ secret: \"...\", seq: \"...\", fee: \"...\" });\nconst txhash = await sdk.rpc.chain.sendSignedTransaction(signedTx);\n```\n\n#### Redelegate stake tokens\n\n```js\nimport { createRedelegateTransaction } from \"codechain-stakeholder-sdk\";\n\n// Redelegate 100 tokens to \"tccq9qvruafmf9vegjhkl0ruunkwp0d4lc8fgxknzh5\"\n// which was delegated to \"tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\".\nconst tx = createRedelegateTransaction(\n  sdk,\n  \"tccq94guhkrfndnehnca06dlkxcfuq0gdlamvw9ga4f\",\n  \"tccq9qvruafmf9vegjhkl0ruunkwp0d4lc8fgxknzh5\",\n  100\n);\nconst signedTx = tx.sign({ secret: \"...\", seq: \"...\", fee: \"...\" });\nconst txhash = await sdk.rpc.chain.sendSignedTransaction(signedTx);\n```\n\n#### Self-nominate\n\n```js\nimport { createSelfNominateTransaction } from \"codechain-stakeholder-sdk\";\n\n// Self-nominate with 1000 CCC and metadata\nconst tx = createSelfNominateTransaction(sdk, 1000, \"some-metadata\");\nconst signedTx = tx.sign({ secret: \"...\", seq: \"...\", fee: \"...\" });\nconst txhash = await sdk.rpc.chain.sendSignedTransaction(signedTx);\n```\n\n#### Report double vote\n\n```js\nimport { createReportDoubleVoteTransaction } from \"codechain-stakeholder-sdk\";\n\n// Report double vote message\nconst tx = createReportDoubleVoteTransaction(sdk, message1, message2);\nconst signedTx = tx.sign({ secret: \"...\", seq: \"...\", fee: \"...\" });\nconst txhash = await sdk.rpc.chain.sendSignedTransaction(signedTx);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodechain-io%2Fcodechain-stakeholder-sdk-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodechain-io%2Fcodechain-stakeholder-sdk-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodechain-io%2Fcodechain-stakeholder-sdk-js/lists"}