Reliably Publish Documents to Bitcoin
Last updated 6 months ago by stevenzeiler .
ISC · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install bcatd 
SYNC missed versions from official npm registry.


Reliably upload files to Bitcoin



docker run -d -p 7777:7777 --name bcatd --restart=always stevenzeiler/bcatd:latest


yarn global add bcatd

bcatd \
  --databaseurl=$DATABASE_URL \
  --awsaccesskeyid=$AWS_ACCESS_KEY_ID \
  --awssecretaccesskey=$AWS_SECRET_ACCESS_KEY \
  --bsvprivatekey=$BSV_PRIVATE_KEY \



To clone an existing repository, use the transaction id of the root parent node of the repository:

bsvpush clone a508bb614add6a66ba14b05794c9ae98afb34675a26d591dced88221c5ca4d03

Find and view repositories at codeonchain.network.


Before pushing a repository you must run bsvpush init in the root directory of the project to create several files and directories:

bsvpush init

The following directories and files will be generated:


It will also add .bsvpush to .gitignore as .bsvpush contains the master private key of the repository and must not be uploaded to the blockchain.

Funding Key

To push files to the blockchain you will need to fund the transactions. Bsvpush requires you to provide a wallet private key. Do not use your main wallet, create a separate wallet and transfer a small amount to it for file uploads.

bsvpush init creates a funding_key file in HOME/.bsvpush, which contains the following:

  "xprv": "xprv...",
  "derivationPath": "m/0/0"

You will need to obtain the xprv private key from your wallet. The derivation path m/0/0 is what is used by the ElectrumSV wallet.


Be very careful about what you upload to the blockchain. Bsvpush will list all files that will be uploaded and ask you to confirm before uploading. The .bsvignore file can be used to ignore files. Note that it is an exact match at the moment.


bsvpush.json describes the repository being uploaded. Here is an example of the contents:

  "name": "bsvpush",
  "owner": "jolon",
  "description": "Push files to metanet",
  "sponsor": {
    "to": "jolon@moneybutton.com"
  "version": "0.0.1",
  "hidden": false

The sponsor property is used to create a moneybutton. The properties of the sponsor property should be compatible with moneybutton and should be able to be applied directly to the moneybutton configuration object. This allows for more complex transactions such as sending to multiple accounts, which can be used to support projects that your project may rely on.

If the hidden property is set to true, codeonchain.network won't include the repository in any of its listings. The repository will be viewable if provided with a direct link to the transaction.


To begin the upload run:

bsvpush push

Bsvpush will first navigate the directory structure, ignoring any files that match the files listed in .bsvignore, and estimate the fees for each file. Before uploading it will provide an overall funding estimate so that you can ensure you have the funds in your funding wallet. Bsvpush will confirm with you before sending any transactions.

If you enter Y, bsvpush will first fund all of the transactions. This will be performed using a single transaction which will have many outputs, one for each transaction required for each metanet node. Next bsvpush will send through all of the individual transactions. The transaction ids will be listed as they are sent and you can view them in codeonchain.network.


bsvpush init creates a file in the current directory .bsvpush/metanet.json which contains the master private key for the metanet tree (this is not the funding key). You will need this key to make future updates to the tree. Note that at this stage bsvpush always creates an entirely new tree structure even if files haven't changed. In the future bsvpush will store file hashs in the transactions and only upload files that have changed. To be able to reuse existing non-leaf nodes, the private key of the parent is required. The master private key along with the derivation paths are stored in metanet.json to allow existing nodes to be identified and new children to be added to existing nodes. Note that the functionality to add children to existing nodes is not currently implemented, a new tree is always created, however the new nodes will have the same metanet public key addresses as they will use the same derivation path but with new transactions. After pushing a repo, bsvpush will update metanet.json with the correct derivation paths. Below is an excerpt from a metanet.json (with xprv removed):

  "masterKey": "xprv...",
  "root": {
    "keyPath": "m/0",
    "txId": "546d70c4de9324e9368ee92720ccbdc43c86332ac2677782b992d61d158bcfd0",
    "index": 0,
    "name": "bsvpush",
    "children": {
      ".bsvignore": {
        "keyPath": "m/0/0",
        "txId": "479a2319d3ba8104a378e1aceee9fa58a38069d91ee91a406360ef3d11a97838",
        "index": 0,
        "name": ".bsvignore",
        "removed": false,
        "children": {}

Current Tags

  • 0.0.2                                ...           latest (6 months ago)

1 Versions

  • 0.0.2                                ...           6 months ago
Maintainers (1)
Today 1
This Week 1
This Month 1
Last Day 0
Last Week 0
Last Month 0
Dependencies (21)
Dev Dependencies (2)
Dependents (0)

Copyright 2014 - 2016 © taobao.org |