bllmplugin/javadoc/bllm/package-summary

bllm (bllm 0.1 API)

Package bllm

Share

bllmplugin/javadoc/bllm/package-tree

bllm Class Hierarchy (bllm 0.1 API)

Hierarchy For Package bllm

Class Hierarchy

Share

BLLM License Key Generator

Before using the Bitcoin/Litecoin License Manager License Key Generator you need to have produced text file of wallet IDs. Read how to generate this file here.

License Key Generation

A license key is a serialize Java License object. Code for the License object can be found in the License.java file. This object contains various parameters that you the developer (also referred to as the “merchant” in the code) will set. To make setting parameters and serializing License objects easy, I have written an app that will collect the parameters and serialize them into a cryptographically secure License object for you. Here is the main interface when using Litecoin:

Here is a table of the various License parameters and their usage:

Parameter Description
Wallet ID Your (the developer’s) Litecoin wallet ID, into which you would like the licensing fees for your software deposited
Transaction ID The transaction ID from the Litecoin blockchain that supplied your wallet with the licensing fees
Transaction date Date of the Bitcoin/Litecoin transfer transaction
Confirmations The required number of blockchain confirmations required before trusting that the transfer has been verified by the network
Transaction expiration Number of hours within which the licensee needs to confirm the transaction using the Bitcoin/Litecoin License Manager software
License expiration Number of days for which the license is valid
License cost Cost specified in dollars or Bitcoin/Litecoin
Payment requested in The denomination you, the developer, expect as payment (Bitcoin or Litecoin).

Using the “Select the file…” button select your wallet ID file. The License key generator will attempt to determine whether you are working with Bitcoin or Litecoin wallet IDs and display the appropriate icon. The currency type is determined from the first letter of the first wallet ID in the wallet IDs file, using the following table:

First letter Wallet type
1 Bitcoin
L Litecoin
3 Multisig
M Multisig

If you are working with a multi-sig wallet (3 or M), you will be prompted to indicate Bitcoin or Litecoin. Select the other parameters and push “generate”. You will find a new license directory inside the directory holding you wallet ID files. Each file is inside a directory that is named with the last eight characters of the wallet ID. All wallet IDs in a single file must be of the same type i.e. have the same first character.
Once licenses have been generated you can inspect the parameters of a serialized file using the inspector tab of the License Key Generator:

If you specified the cost in dollars, the expected currency of payment is indicated, but not the amount. The amount will be calculated at the time of licensing, using current valuations. For this reason (amongst others) the user needs to be connected to the internet during the licensing process.

A goal of the Bitcoin/Litecoin License Manager is to allow you the developer to non-interactively collect licensing fees for your software. Since there are no third party arbitrators of disputes, any issues that arise will force an interaction between you and your customers. Therefore you want the process to be as easy as possible while at the same time discouraging cheating on the part of the users. A few scenarios are outlined below, with increasing security, but also placing more burden on the customer.

Scenario I: Shareware with the opportunity for donations

Confirmations required = 0
Transaction expiration = 8760 hours ( 1 year, essentially inactivating this feature)
License expiration = 36500 days (100 years, essentially a perpetual license)

In this scenario you are using the BLLM as a means to provide the user with your wallet ID and make it easy to collect donations. If a donation is provided, the “Licensed” panel will display for the user.

Scenario II: Trial period

Confirmations required = 3
Transaction expiration = 48 hours
Trial expiration = 14 days
License expiration = 365 days

You are providing the user with 14 days to evaluate your software. At the end of 14 days the licensed flag is set to false and the software is locked down. A payment will unlock the software for 365 days. After 365 days have passed, a new payment will provide an additional 365 days of license.

Scenario III: Feature lock down

Similar to above only rather than locking down the entire application, only certain features are locked down by checking the value of LicenseManager.getLicenseStatus()

Notes on parameters

Number of confirmation required: Generally 3 is considered good to avoid double spending. 6 would be high security. 0 is for the ease of use for the customer as it would require no waiting.

Transaction expiration in hours: Requires the customer to confirm the transaction within X number of hours. 8760 hours (1 year) is for ease of use. Use small values if you have multiple geographically colocalized (same company) customers who might make a single payment used to confirm multiple licenses. A limited time window for confirmation prevents users from scanning the blockchain for transfers to your wallet and using those transfers to validate their license. Avoid this possibility by giving each user a separate wallet ID and setting transaction expiration to 8760 hours.

Java Web Start

If you have Java 1.8 installed and security is properly configured, you can run the License Key Generator as a Web Start application by clicking here. Otherwise download the jar from github. Javadocs are available here.

You are ready now to integrate the license plugin with your application.

Share

Bitcoin/Litecoin wallet ID generation

For an introduction to the Bitcoin/Litecoin License Manager, read this post. I will use Litecoin wallet ID generation in this example, but the steps are the same for Bitcoin.

Litecoin wallet installation

There are numerous ways to work with Litecoin, including using the core software directly. I recommend Electrum-ltc, a lightweight, deterministic brain wallet. Use Electrum for bitcoin. Follow the installation directions, generate your seed, then generate a bunch of Wallet IDs, as many as you would like to generate Litecoin Licenses for. Go to the Electrum console and type the command listaddresses() to get the following view:

These addresses can now be copied into a text file, one wallet ID per line. Do not include quotes or other special characters (beware of blank spaces) so remove them with find/replace. The final file should look like:

walletids.txt
1
2
3
4
5
6
7
8
9
10

LNHcyCddhGn6WeMg9kK6kAUEVMgUzcaNTj
LT3mYRc9r7aH75AKi1sJNF1DAcnUGceBeE
LYSZ5tShMZXinQJeziNCb3nQohHhxdSgNS
LUjzVxJet4fbk6Vj8nGjkWieV5L2HFqcmB
LWPw8duwhe9oEK3EU5MQui9rXeEV9NTKF8
LYyUQG3c6tohhyE5cYCw6jdyxsee2wyryf
LSXV7tUc31fq6QYRjXmo1ojWnfNBji67B4
LTWW9W8C8Fc6eeyYJUdWafnG6ZjMw3fTSm

Once you have generated a wallet IDs file, you are ready to move on to the next step, which is generating a license key file for each wallet ID using the Bitcoin/Litecoin Licence Manager Licence Key Generator.

Share

Bitcoin/Litecoin License Manager

Introduction

The Bitcoin/Litecoin License Manager is a Java plug-in that will allow you to non-interactively collect software licensing fees from your customers using the cryptocurrencies Bitcoin or Litecoin. Give the banksters and rentier-wannabes (e.g. Stripe, PayPal) the finger and take charge of your own finances. Why pay their fees and risk deplatforming at their whim?

You may want to consider Litecoin instead of Bitcoin. Why?:

  • Availability: Litecoin is available on most exchanges and is readily exchanged for Dollars or Bitcoin. Check out Coinbase, which also provides you with a wallet.

  • Wallets: Multiple wallets are available. My favorite is the lightweight, deterministic brain wallet Electrum

  • Low volatility relative to Bitcoin.

  • Faster transaction times relative to Bitcoin. A block ascceptance time of 2.5 minutes relative to Bitcoin’s 10 minutes.

  • Lower transaction fees relative to Bitcoin. A recent $99 million Litecoin transaction took 25 minutes and cost 40 cents in fees.

  • Litecoin also has an increased maximum number of coins 84,000,000 vs. Bitcoin’s 21,000,000 and a different hashing algorithm - scrypt vs. SHA-256.

A Bitcoin/Litecoin License encapsulates a variety of parameters such as license expiration date, number of transaction confimations required, transaction expiration, etc. that allow you to balance ease of Licence attainment with security. Utilizing the Bitcoin/Litecoin License Manager is a three step process:

  1. Set up your Bitcoin or Litecoin Wallet and generate wallet IDs.

  2. Use the Bitcoin/Litecoin License Manager License Key Generator to generate license keys containing your parameters of interest.

  3. Integrate the Bitcoin/Litecoin License Manager with your own software.

A video overview of the process is available on youtube:

Share

bllmlkg/javadoc/constant-values

Constant Field Values (bllmlkg 0.12 API)

Constant Field Values

Contents

Share

bllmlkg/javadoc/deprecated-list

Deprecated List (bllmlkg 0.12 API)

Deprecated API

Contents

Share

bllmlkg/javadoc/help-doc

API Help (bllmlkg 0.12 API)

How This API Document Is Organized

This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
  • Overview

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

  • Package

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    • Interfaces (italic)
    • Classes
    • Enums
    • Exceptions
    • Errors
    • Annotation Types
  • Class/Interface

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    • Class inheritance diagram
    • Direct Subclasses
    • All Known Subinterfaces
    • All Known Implementing Classes
    • Class/interface declaration
    • Class/interface description
    • Nested Class Summary
    • Field Summary
    • Constructor Summary
    • Method Summary
    • Field Detail
    • Constructor Detail
    • Method Detail

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

  • Annotation Type

    Each annotation type has its own separate page with the following sections:

    • Annotation Type declaration
    • Annotation Type description
    • Required Element Summary
    • Optional Element Summary
    • Element Detail
  • Enum

    Each enum has its own separate page with the following sections:

    • Enum declaration
    • Enum description
    • Enum Constant Summary
    • Enum Constant Detail
  • Tree (Class Hierarchy)

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
  • Deprecated API

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

  • Index

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

  • Prev/Next

    These links take you to the next or previous class, interface, package, or related page.

  • Frames/No Frames

    These links show and hide the HTML frames. All pages are available with or without frames.

  • All Classes

    The All Classes link shows all classes and interfaces except non-static nested types.

  • Serialized Form

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

  • Constant Field Values

    The Constant Field Values page lists the static final fields and their values.

This help file applies to API documentation generated using the standard doclet.
Share