Bitmark shares

The Bitmark Property System offers a shares functionality that can be used to split a digital asset into shares.

The Reasoning

  • There may be a need to turn a particular property into shares in order to divide the ownership or to treat it a fungible item for trading purposes.

  • Once a property has been divided it does not make sense to reassemble it back into a single unit again since the single chain of provenance has been broken into multiple threads.

  • The number of shares initially created is a fixed amount and cannot be changed as this would fundamentally alter the valuation of one share.

  • Shares can be freely traded in any quantity without keeping a linked history. i.e., there is no real order to shares transactions after initial creation.

The Actions

  • Shares can be created.

  • Shares can be granted from the original supply to other accounts.

  • Accounts holding shares can effectively trade them, but only among holders of a single Bitmark Share (i.e., the same Share ID). This leads to the need for a swap action, to do inter-share trading or something approximating to currency exchange. This could also be used to swap out old shares for new shares with a different total amount.

  • account holders must be able to determine their balance.

The Implementation

  • There is an initial creation Balance Record that turns a digital asset into shares: it permanently sets the total number of a particular share, it terminates the provenance of that property to prevent further transfers, and it allocates all the shares created to the current property owner.

  • Any owner with a non-zero share balance can grant shares from that balance to another account using a Grant Record. There can be several grants for the same share to different accounts from one owner in the same block, provided the total is within the owner’s current balance.

  • There is a special Swap Record to allow for an atomic swap of shares of different properties.

  • Both Grant and Swap have an expiry to limit how long a one-signature transaction can be held before countersigning and submitting must take place. This ensures the balances are predictable to the observing users.

    • In a normal transfer a double spend is prevented because there is only a single line of provenance.
    • shares are simple withdraw and deposit actions and have no particular ordering requirement other than not exceeding the available balance at the start of a block.
    • There is no concept like UTXO and inputs pointing to such items.
  • There is a separate Balance RPC to read the list of balances for any owner starting at an arbitrary share id. Since only non-zero shares are kept, it is not possible to distinguishing between the case of having granted all shares and the case of never had any shares - though this could be achieved by examining the blockchain from share creation to present for transactions by that account on the share in question.

  • A data-table is kept of every non-zero balance. Any balance record that would become zero by a Grant or Swap is deleted.