BLACKCOIN / PROTOCOL V4INTEGRATE

DEVELOPERS / INTEGRATION GUIDE

Integrate Blackcoin — verify first, then build.

Technical evaluation materials for listing, custody, indexing, or building on Blackcoin Protocol V4, with copy-paste examples. Read-only data needs no infrastructure at all; custody integration runs against the signed-source daemon and its JSON-RPC — after your own verification and controls pass.

THE STAGED PATH

  • 1 · Observe. Run a read-only node, validate the chain identity and replay state, and compare your node's view with this public API.
  • 2 · Evaluate deposits-disabled. Exercise the reference deposit state machine below against your own infrastructure with customer deposits switched off. Lifecycle heights that affect planning: Gold Rush emission ends at 6,192,999; the legacy path closes at 6,922,000 (heights control, not dates).
  • 3 · Proceed on your evidence. Enable custody only after your own controls, reconciliation, and sign-off gates pass. Nothing on this site implies audit completion, listing approval, or venue acceptance.

0 · Chain parameters

Pull ticker, decimals, address format, phase heights, and endpoints from one machine-readable source. Ideal for auto-configuring a wallet, aggregator, or listing entry.

curl -s https://projectblackcoin.org/api/chain-params | jq .

1 · Run a node

The daemon is the source of truth and the custody interface. Enable txindex for deposit lookups and shadowindex for Protocol V4 Gold Rush data. Always verify the signed source and checksums first — the reproduction contract has the exact steps, and binaries are on the downloads rail.

# ~/.blackcoin/blackcoin.conf
server=1
txindex=1           # full transaction index (deposit lookups)
shadowindex=1       # Protocol V4 Gold Rush / shadow index
rpcuser=CHANGE_ME
rpcpassword=USE_A_LONG_RANDOM_SECRET
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
# Keep the RPC interface private; never expose it publicly.

2 · Exchange & custody — deposits-disabled reference

The snippet below is a minimal RPC illustration, not a custody design: listsinceblock is an input to deposit detection, never the whole state machine. A production integration needs, at minimum, each of the following — exercised deposits-disabled before any customer funds move:

  1. Durable block progress. Persist the last fully-processed block hash; resume from it, never from a timestamp.
  2. Idempotency per output. Credit by (txid, vout), never by txid alone or by list position; reprocessing must be a no-op.
  3. Confirmation policy & regression. A project-suggested starting point is 30 confirmations (~32 minutes at 64-second target spacing — height controls, not time; set your own policy). Handle confirmations going down: a credit must be reversible until your own finality bar.
  4. Reorganization rollback. On a best-chain change, rewind to the fork point and reprocess; conflicted and abandoned transactions must debit cleanly.
  5. Address ownership & validation. Map deposits to users by your own address index; validate with blackcoin-cli validateaddress, never a regex. Both bech32 (blk) and legacy Base58 (B…) are valid under current rules — do not reject legacy addresses while consensus permits them.
  6. Deposit disable/enable controls. A single operational switch that halts crediting instantly, exercised before launch.
  7. Reconciliation. Wallet totals must reconcile against your ledger and against gettxoutsetinfo-derived balances on a schedule; discrepancies page a human.
  8. Withdrawal safety. Idempotent broadcast with persisted intent, fee policy, conflict handling, and a reconciliation path for stuck or replaced transactions.
  9. Migration planning. Decide your migratetoquantum support before the legacy path closes at height 6,922,000 so user balances survive the transition.

Go-live gate: verify → test → review → then consider enabling. Never ship first and verify later.

Blackcoin Keystone — don't just read it, run it. The complete reference stack above ships as keystone.tar.gz (sha256): a v30.1.3 node plus a deposit/withdrawal daemon implementing all nine points, deposits-disabled by default. It boots on regtest instantly (no mainnet sync), and its custody state machine was adversarially hardened across five red-team rounds — the offline self-test covers the ==confirmations boundary, idempotent replay, reorg reversal, unowned-address rejection, and no-double-send (including a broadcast buried beyond one listtransactions page and an ambiguous post-broadcast transport failure), and reconciliation is fee-aware and two-sided. docker compose up and your evaluators exercise a correct custody core the same afternoon — verify the checksum first.
# 1. Create a deposit address for a user
blackcoin-cli getnewaddress "user-12345"

# 2. Poll for new confirmed credits since the last block you processed
blackcoin-cli listsinceblock "<last_processed_block_hash>" 30
Migration boundary — plan for it. Legacy elliptic-curve outputs stay spendable through Migration and the legacy path closes at height 6,922,000. Decide how you support the migratetoquantum window so user balances survive the transition. Full detail in the whitepaper.

3 · Data & explorer integration

You don’t need a node to read Blackcoin. The public API is your hosted, read-only endpoint — CORS-open, no key, fail-closed. Stream live state over SSE, pull any block/tx/address, or drop in the badge.

// Live verified snapshots — no node required.
const es = new EventSource(
  "https://projectblackcoin.org/api/v3/quantum/stream"
);
es.addEventListener("snapshot", (e) => {
  const snap = JSON.parse(e.data);
  if (snap.schema_version !== 3 || snap.status !== "available") return;
  console.log(snap.data.base_chain.height, snap.quality);
});
// EventSource auto-reconnects; the stream replays the current
// snapshot on connect, so a dropped connection self-heals.

// New verified blocks:
const blocks = new EventSource(
  "https://projectblackcoin.org/api/explorer/stream"
);
blocks.addEventListener("block", (e) => console.log(JSON.parse(e.data)));

Full endpoint reference: /developers · openapi.json. Address activity feeds are also available as Atom (/explorer/address/{address}/feed.xml).

Withdrawals: fees, dust & proofs

  • Withdrawal fees. Let the node price fees — call estimatesmartfee for a target confirmation window, or set a policy floor with settxfee /-paytxfee. sendtoaddress deducts the fee at broadcast; capture it then (gettransaction) so reconciliation stays balanced during the unconfirmed window — Keystone does exactly this.
  • Dust & min-relay. Outputs below the node's dust threshold are non-standard and will be rejected; reject or consolidate sub-dust withdrawals before broadcast rather than letting a send fail. The min-relay fee is a node policy — don't hardcode a sat/byte constant, read it from getmempoolinfo / getnetworkinfo.
  • Address ownership & proof-of-reserves. Prove control of an address without moving funds using signmessage <address> <message> and verifymessage. For proof-of-reserves, publish signed messages from your reserve addresses over a public challenge string (e.g. a recent block hash) so anyone can verify the signatures against the on-chain balances — no key exposure, fully reproducible on any node.
  • Confirmations. Choose a deposit-credit depth for your risk tolerance; the reference core defaults to a conservative window and treats a confirmation drop as a reversal (see the custody state machine).

Hosted endpoints, testnet, and self-hosting

  • Hosted read-only data: already live — the public API above serves verified chain and Gold Rush data with no infrastructure on your side.
  • Write access & custody: run your own signed-source blackcoind and use its JSON-RPC. That is the only interface that creates addresses, signs, and broadcasts — by design, this project never holds keys for you.
  • Testnet / regtest: start the daemon with -testnet or -regtest to develop against a throwaway chain before you touch mainnet.