A low-level bitcoin library written in standard C.
Pull request Compare This branch is 258 commits behind MatthewLM:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


cbitcoin - A Bitcoin Library In The C Programming Language

cbitcoin is a bitcoin library in development that will use nothing but the standard C library. The aim for this project is to create a simple, portable and powerful library for bitcoin in C. The library should be easy to use but provide many configurable features. Using only standard C, the library should be small, efficient and portable. The library will be low-level such that it will provide a basic abstraction on the bitcoin protocol that enables programmers to make a diverse range of bitcoin applications. The library is not intended to become a simple client interface. cbitcoin may become useful for projects involving embedded devices.


If you wish to contact Matthew Mitchell about this project please email cbitcoin@thelibertyportal.com

To help support cbitcoin financially, please send donations to: 1D5A1q5d192j5gYuWiP3CSE5fcaaZxe6E9


Anyone who contributes to this project can have their name and a bitcoin address placed here.

Matthew Mitchell - 1D5A1q5d192j5gYuWiP3CSE5fcaaZxe6E9


Installation instructions will come later. For now look at BUILD.py (OSX only). This library should not be used for live applications yet but feel free to experiment and provide feedback to cbitcoin@thelibertyportal.com

Making a Contribution

  1. Fork the project on github: https://github.com/MatthewLM/cbitcoin
  2. Implement the changes.
  3. Document the changes (See "Documenting" below)
  4. Make a pull request.
  5. Send an email to cbitcoin@thelibertyportal.com notifying that a request has been made.
  6. The changes will be pulled once approved.

Coding Guidelines

  • cbitcoin uses an object-orientated approach by implememting reference counting and inheritance on structures. New code should be consistent with this approach. Use the supplied structure_maker.py to make a new structure which inherits CBObject. All structures inheriting CBObject should go into the structures directory as shown. message_maker.py is similar to structure_maker but is for CBMessage structures.
  • The rule for memory management is to retain an object before returning it, to retain an object when giving it to another object, and to release an object once the object is no longer needed by an object or function. When a new object is created it should be retained. There are some exceptions to the rules, such as functions which take a reference from the caller.
  • Filenames should begin with CB.
  • Functions, types and variables with linker visibility outside the library should begin with CB.
  • CamelCase should be used. lowerCamelCase should be used for structure fields and variables except where inappropriate.
  • Constants made visible throughout the library should go in CBConstants.h
  • CBGet functions should be prefered over type-casting.
  • Use comments where appropriate, especially in obscure sections.
  • In structure files, please order functions under "// Functions" alphabetically.
  • Use "???" in comments for areas of confusion or uncertainty where the code may need improving or changed. Look for "???" to find parts in the code that may need work.


cbitcoin should contain the following header for each file:

//  CBFileName
//  cbitcoin
//  Created by Full Name on DD/MM/YYYY.
//  Copyright (c) 2012 Matthew Mitchell
//  This file is part of cbitcoin.
//  cbitcoin is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//  cbitcoin is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with cbitcoin.  If not, see <http://www.gnu.org/licenses/>.

Header files should contain information for documentation. cbitcoin uses a DoxyGen syntax (See http://www.stack.nl/~dimitri/doxygen/manual.html). Please document all files as well as structures and functions that are exposed by the library. Brief descriptions should be included. Details can be added at a later date, especailly once code has been properly implemented. Files should be documented like this:

 @brief Brief description of file.
 @details More in depth description of file.

Structures should be documented like this:

 @brief Brief decription of structure.
typedef struct CBSomeStruct{
    int someInt; /**< Description of data field. */
} CBSomeStruct;

Functions should be documented like this:

 @brief Brief decription of function.
 @param someParam Brief decription of the function parameter.
 @returns What the function returns.
int someFunc(int someParam);

It may be that other elements are documented and should be documented in a similar fashion and please leave helpful comments in the source code.

Thank You!