Skip to content
FellowTraveler edited this page Apr 21, 2011 · 43 revisions

WHAT IS 'Open Transactions' ?

It's a solid, easy-to-use, FINANCIAL CRYPTO and DIGITAL CASH LIBRARY.
Including an operational API, SERVER and testCLIENT.

Diagrams:  
Architecture Overview: http://billstclair.com/ot/ot-diagram.jpg
Fully-Anonymous (cash only): http://billstclair.com/ot/OT-Anon-CashOnly.jpg
Pseudo-Anonymous (using accounts): http://billstclair.com/ot/OT-Pseudonym-Instruments.jpg

Featuring: 
    -- Untraceable Digital Cash (real blinded tokens). 
    -- Pseudonymous User Accounts ('account' == PGP key). 
    -- Many Financial Instruments (cheques, cash, vouchers, invoices...)
    -- Anyone An Issuer (Ricardian-style Contracts) 
    -- Triple-Signed Receipts 
    -- Basket Currencies
    -- NEW! Markets with Trades
    -- NEW! Payment Plans 
    -- NEW! Native API for Java, Ruby, Python, PHP, Perl, C, 
       C++, Objective-C, C#, Tcl, and LISP
    -- NEW! XmlRpc/HTTP transport layer (build option)
    -- Soon: Stocks that pay dividends, Bonds that pay interest,
       and even Collateralized Debt Obligations.
    -- Soon: 2-D Barcodes to make possible 'Any screen a cash
       register' and 'Any camera phone a customer.'

Please see the Project page:
http://github.com/FellowTraveler/Open-Transactions/wiki

Use Cases:
http://github.com/FellowTraveler/Open-Transactions/wiki/Use-Cases

FAQ:
http://github.com/FellowTraveler/Open-Transactions/wiki/FAQ

Business Cases:
http://github.com/FellowTraveler/Open-Transactions/wiki/Business-Cases

"Seeking developers to contribute by writing client software and doing
other integrations!  I will support you on the OT API. Let's make this
happen!" -Fellow Traveler
 

Please see the Wiki, Use Cases, FAQ, and Business Cases.

NOTES on the Version:

0.54 --- OT now stores the last 1024 logs internally, and makes them available via the API. Various other API debugging was done.

0.53 --- API functions for Nym outbox, and for checking success status of a transaction message. Various other API fixes preparing for the upcoming test GUI.

0.52 --- API functions for deleting Nyms, Accounts, and Contracts.

0.51 --- API functions for Mail and Transactions.

0.50 --- BASE-62-ENCODED IDs (much more compact.)

0.45 --- Added a few API functions and updated the Windows build.

0.44 --- RECEIPT VERIFICATION. Goes with the below change. Client-side receipts are now saved after every transaction, and whenever account/inbox/outbox files are downloaded, they're verified against the last signed receipt.

0.43 --- BALANCE AGREEMENT / NO ACCOUNT HISTORY has been added! Just make sure you grab the outbox and inbox, and the account file, before doing a transaction, since they are needed for balance agreement, which is now operational and required.

0.42 --- More bug fixes, plus added OT_API_CreateNym() (finally).

0.41 --- Bug fixes in support of API, added various transaction types, receipt types, item types, to get full transfer receipt process working end-to-end.

0.40 --- More additions to the API, plus many under-the-hood fixes.

0.39 --- Continually updating the API based on developer feedback.

0.38 --- Added Payment Plans, Markets, and Baskets to the API. Also added message buffer access to the API, so you can read all the server replies if you want to (or flush them...)

0.37 --- Added build option DSP=1, for using custom builds of OpenSSL, and for turning off all the output logs.

0.36 --- Top-level build targets added for API in Python, Ruby, PHP, and Perl! It's now this easy to build the API:

        cd Open-Transactions
        make clean

       Then, from the same folder:

        make ruby
        make python
        make php5
        make perl5
        make java  (added in v0.44)
 
       (More languages are supported, but for now these are the ones
       available at the top level.)    

0.35 --- Huge additions to the API! See testwallet/OTAPI_funcdef.h for the complete interface, with NOTES above each function.

        That same interface is also wrapped by SWIG, and available
        in Java, Python, Ruby, Perl, Php, Lisp, etc, so those OTAPI
        functions are relevant to ALL developers...

        People have asked about documentation so hopefully the API,
        plus the notes within, will answer any questions for now
        until more professional docs can be written. As always, feel
        free to contact me with any questions.

        This release continues my push to make the library EASY and
        ACCESSIBLE to all developers, in all languages, on all
        platforms.  There are already multiple developers who are
        starting to play around with client software using the OTAPI,
        and I am very responsive to their needs.

        *** The latest SECURITY notes..

        ..Any new software requires testing with users AND peer review!
          Open Transactions was recently reviewed by Ben Laurie, and
          I accepted all the changes that he submitted. It's a good
          start!  This process must continue.

        ..In this release I have replaced all instances of strcpy
          with strlcpy/strcpy_s, and all instances of sprintf with
          snprintf/sprintf_s, and all instances of vsprintf with
          vsnprintf/vsprintf_s, and all instances of strcat with
          strlcat/strcat_s.  It's important to make sure there are no
          buffer overflows in this code.

        ..I also set up the code with Valgrind, and went through all
          the warnings, adding comments, fixes, and exclusions where
          appropriate or necessary. This process will continue, but
          it's important to run code scanners on this sort of software!

0.34 --- (Various additions to the API at developer request.)

0.33 --- Slicker build process. This release is all about having an EASY BUILD PROCESS, and is based on real-world feedback I've been getting from YOU, my testers:

    *   For ALL users: XmlRpc++ is now part of the distribution, and is part of the 
         build process. Various users had trouble installing this library separately, 
         so I integrated it into the project. Now it's built-in! 
    *   For ALL users: Platform now auto-detected by MUCH easier/slicker Makefiles. 
         (And as with the last release, I was able to eliminate several Makefiles.) 
         To build (from main folder), just type: 
         make 
         (You may prefer 'make rpc', to build in the preferred XmlRpc mode.) 
     *   To build the API: 
         cd testwallet; 
         make -f Makefile.API TRANSPORT=XmlRpc LANGUAGE=c 
         make -f Makefile.API TRANSPORT=XmlRpc LANGUAGE=ruby 
         make -f Makefile.API TRANSPORT=XmlRpc LANGUAGE=java 
         make -f Makefile.API TRANSPORT=XmlRpc LANGUAGE=python 
         make -f Makefile.API TRANSPORT=XmlRpc LANGUAGE=perl5 
         make -f Makefile.API TRANSPORT=XmlRpc LANGUAGE=php5 
         make -f Makefile.API TRANSPORT=XmlRpc LANGUAGE=lisp 
         Etc... 
         Slick, eh? In all the above cases, the platform is automatically detected. 
         See testwallet/API-README.txt for more notes. 

    *   For MAC users: The Makefiles had been using the wrong location for OpenSSL 
         (at least, for the Macports 1.0.0a version) so I fixed this. The previous 
         Makefiles referenced the default location, where (the wrong) version 0.9.8 
         can be found. (The new version looks in /opt, as used by MacPorts.) 

     *   For LINUX users: Now, OT attempts to link 64-bit libs where appropriate. 

     *   For FREEBSD users: The full new Makefile is now FULLY operational on 
         FreeBSD, including the utilities "createmint.exe" and "signcontract.exe", 
         which were previously unsupported on FreeBSD. 

0.31 --- **Native API**, with easy Makefiles, added for: 
        **Java, Lisp, Ruby, Python, Perl, PHP, C, C++, Objective-C, C#,**
        and Tcl. Also supporting JRuby, Jython, and any other languages
        on the JVM. 

        Transport is now implemented as a CALLBACK FUNCTION, which
        means it is now VERY EASY to swap out to different forms of
        transport (though XmlRpc is probably the last form we'll ever
        need.)

        The build process has been greatly simplified, and many Makefiles
        were made redundant and removed.

0.30 --- MAJOR RELEASE! Markets, Payment Plans, and OT as a Web Service!

      *** Open Transactions is now officially a WEB SERVICE! The server,
          client, and API now support *XML-RPC/HTTP*, in addition to the
          TCP/SSL mode from before.

      *** Open Transactions now supports real MARKETS with 2-way trades!
          These markets are full-featured, and allow for LIMIT orders,
          STOP orders, DAY orders, FILL-OR-KILL orders, STOP LIMITS, etc.
          Markets also have SCALE, which means bulk pricing and arbitrage.

      *** Open Transactions now supports PAYMENT PLANS. As long as both
          parties have signed the contract, the server will continue
          processing it according to its terms, placing receipts in the
          inboxes of the two parties until the payments are done.

      *** All data files were removed to a data folder, and all file
          paths were removed from data files (filenames are generated
          now, when needed.)  This all means datafiles are much easier now.

// ---------------------------------------------------------------------

0.25 --- All FILE pointers were removed and replaced with C++ fstreams.

        An all new logging class, with errors, asserts, and multi-
        verbosity output. See the OTLog.h and .cpp files for more.
        (Centralizing the output and logging also helps porting efforts.)

        All the test certs were regenerated, and the contracts were
        re-signed, etc. This time they will last for 10 years, instead
        of 30 days. Slight fix to the Open-Transactions/ssl Makefile.

0.24 --- FreeBSD working!

0.23 --- Android version! (In support of our upcoming Android client.)

       Now it's easier than ever to use Open Transactions in your
        Java and C++ applications, for Mac, Linux, and Windows!

0.22 --- EASY Makefiles and project files are now available for the JNI Java interface, as well as the high-level C++ API.

        Makefiles are supplied for MAC and LINUX, as well as project
        files for XCode on Mac and MS Visual C++ 2010 Express on Windows. 

        "FiatCash" (the first client, on Android) is humming along
        and hopefully we'll have some basic version soon up on Github.

        Negative transactions are no longer allowed for vouchers,
        account transfers, or cash withdrawals. They are still, however,
        allowed for cheques, which serve as invoices.

        Various global variable issues were cleaned up...

// ---------------------------------------------------------------------

0.21 --- Windows release!

       Open Transactions now supports Windows, LINUX, and Mac OS X.
       (In the same code base.)
       
       This distribution comes with gcc Makefiles for Mac and Linux,
       as well as XCode project files for Mac and Microsoft VC++ project
       files for Windows.
       
       The Windows port was at the request of an Android developer who
       has begun work on a wallet (client app) that he calls "FiatCash".
       He will be building it on Windows, in Java, using the Open
       Transactions JNI interface to talk to the library. When complete,
       the wallet software will run on Android phones.
       
       INVOICES: Imagine that you hand someone an invoice. He runs it
       through his bank account and the money is automatically transferred
       to you, with receipts on both sides. This is the same thing as
       a cheque with a negative amount. Thus, "negative cheques" can be
       used as invoices. (Already operational.)
       
       Assorted:
       
       Many of the C Standard Library includes were replaced with their
       C++ standard library versions.
       
       Other cleanups were made including some fixes to OTString (which
       used to have some large stack-allocations) as well as a bug fix
       in the socket code for the server / test client.

       The client cert expired, so I re-created all the certs. If you have
       any problem with your own, just install the new version to fix it.

// ---------------------------------------------------------------------

0.2 --- Major Release! ALL NEW:

       JNI Interface (High-level Java API)

       High-level C++ Interface

       Spent Token Database is fully operational!

       Mints and Tokens now support Expiration AND Series. 

       New Financial Instruments: Cheques and Vouchers.

       Reserve accounts are now working to store the backing funds
       for cash withdrawals and vouchers (cashier's cheques.)

       Transaction numbers are fully working now.
       
       Nym files are now signed (to prevent tampering.)

       Hardcoding of paths was fixed, using config files and
       command-line arguments now, so you can use the software 
       without having to change the code.

       Path separators were improved to support Windows-style paths
       (though I haven't tried to actually build on Windows.)

       Numerous bug fixes. Including a big one: discarding
       token signature after unblinding.

// ---------------------------------------------------------------------

0.11 --- Added LINUX support...

       Added Makefiles, and a few fixes related to Linux. 
       
       OT now runs on TWO platforms: LINUX and Mac OS X.

// ---------------------------------------------------------------------

0.1 --- The original goal was just proof-of-concept. There are many TODOs listed on the project page, as well as throughout the code. But it all works!!!

A WARNING: This software is brand-spanking-new. The project has not yet been audited for security or tested for any extended period of time. Thus far, it must be considered as for experimental purposes only.

   --- There are still a few values that are hardcoded (in the client
       and the server), unfortunately, but it's all documented and I
       have everything set up already to run, so you don't have to
       mess with them. This will be fixed next release.

The server expects its OWN cert to be in the transaction/certs folder. The filename should be the server_user_ID from notaryServer.xml (I HAVE ALREADY PLACED IT THERE.)

This is the file that includes the server's public AND private key.


Clone this wiki locally