Difference between revisions of "Prime Specification"

From Bitcoin Wiki
Jump to: navigation, search
m (Open questions=)
(Limitation of v1.0)
Line 161: Line 161:
  
 
==Limitation of v1.0==
 
==Limitation of v1.0==
 +
* While Prime is designed from ground up to support multiple cryptocurrencies, the first version will deliver integration only with bitcoin.
 
* No support for multiple hot and cold wallets. Only one pair of hot/cold wallet will be supported.
 
* No support for multiple hot and cold wallets. Only one pair of hot/cold wallet will be supported.
  
 
==Open questions==
 
==Open questions==
 
* Checking whether actual crypto and fiat balances cover values from a database (prevent fractional reserve)? How to do it correctly (i.e. delays in transfers, etc)?
 
* Checking whether actual crypto and fiat balances cover values from a database (prevent fractional reserve)? How to do it correctly (i.e. delays in transfers, etc)?

Revision as of 09:28, 20 April 2013

Functional

User

  • sign up with e-mail activation and TOS acceptance
  • sign in / out
  • password reset
    • reset link valid for 24h or one use whichever comes first

Settings

  • change password
  • change email
  • configure two factor authentication
  • on/off API
  • reset API key
  • configure email notifications (TODO: details)
  • complete account removal (privacy feature)
  • all changes require second method authentication (email confirmation or OTP)

Dashboard

  • change market; market is a pair of currencies, i.e. USD/BTC, PLN/BTC

Order book

  • live chart
  • live table

Last trades

  • live chart
  • live table

Account

  • Balances for the current market
  • History
    • every balance change must have a corresponding transaction
  • Open orders
    • cancel order

Deposit

Bitcoins

  • generation of personal input address
    • internal maintenance of user input addresses (every user has a list of input addresses)
  • displaying address and instructions to the user
    • funding user balance with incoming bitcoins
      • create entry in account history, remember bitcoin tx id

Fiat

  • internal (LAN-only) API for custom scripts to bump fiat balance
    • create entry in account history, remember fiat tx id

Withdraw

Bitcoins

  • edit bitcoin output address
  • confirm with e-mail link or Google Authenticator OTP
  • displaying form to send bitcoins
    • amount
    • instructions and fee information
    • send button with summary and confirmation
  • mechanism to actually send bitcoins
    • create entry in account history, remember bitcoin tx id

Fiat

  • edit bank account details
  • confirm with e-mail link or Google Authenticator OTP
  • display form to send fiat
    • amount
    • instructions
    • send button with summary and confirmation
  • add FiatWithdrawal entry to the list of pending fiat withdrawal requests
    • publish pending fiat withdrawals in internal API
    • accept request to mark specific FiatWithdrawal as fulfilled
      • create entry in account history, remember fiat tx id(?)


Buy/Sell

  • Display "Please be aware this is only approximation. Order book can change every second."
  • Validate order value denominated in fiat is high enough
    • This is to prevent order and transaction spam/DOS

Buy bitcoins

  • Instant buy
    • "I want to buy [____] BTC instantly."
    • "You will spend about ____ USD and receive ____ BTC after fee. Average BTC price will be about ____ USD."
    • Technically equals to submitting buy order with infinite price.
  • Buy with price limit
    • "I want to buy [____] BTC at price [____] USD/BTC."
    • "You will spend about ____ USD and receive ____ BTC after fee. Average BTC price will be about ____ USD."
    • "You need at least ____ USD at hand to submit this order."
    • Validate user has enough funds to submit the order (assuming worst case scenario)
    • Block funds
    • Match with existing orders
    • Smart defaults: max BTC user can buy, market price

Sell bitcoins

  • Instant sell
    • "I want to sell [____] BTC instantly."
    • "You will receive about ____ USD after fee. Average BTC price will be about ____ USD."
    • Technically equals to submitting sell order with 0 price.
  • Sell with price limit
    • "I want to sell [____] BTC at price [____] USD/BTC."
    • "You will receive about ____ USD after fee. Average BTC price will be about ____ USD."
    • Validate user has enough funds to submit the order
    • Block funds
    • Match with existing orders
    • Smart defaults: all BTC, market price

Fees

Transaction fee

Percentage and minimum fee denominated in fiat, like 0.6% min 0.01 USD. Taken from both sides of transaction from the output amount.

Bitcoin withdrawal fee

Percentage and minimum fee denominated in bitcoin, like 0% min 0.0005 BTC.

Fiat withdrawal fee

Percentage and minimum fee denominated in fiat, like 0% min 2 USD.

Public API

Ticker

TODO: design

Trades

As explained on bitcoincharts.

Order Book

As explained on bitcoincharts.

Admin panel

Stats

  • Total funds on the exchange
    • Total funds accumulated on the exchange for each fiat (calculated from a database)
    • Total funds accumulated on the exchange for each cryptocurrency (calculated from a database)
  • Hot wallets
    • Number and percentage of funds in a hot wallet (actual value taken from a bitcoind) for each cryptocurrency
  • Number of users being online and total registered
  • Number of buy and sell offers
  • Number and volume of transactions

Export

  • emails.csv

Actions

  • Stop the service

Rollback

Non functional

Supported browsers

Prime example fronted is tested on the latest versions of:

  • Chrome
  • Firefox
  • Internet Explorer 9
  • Opera

There is nothing that prevents you from creating a Prime fronted that supports older browsers (see design).

Correct use of HTTP protocol

  • Semantic use of HTTP methods GET, POST, PATCH, DELETE
  • Correct HTTP status codes

Take advantage of HTML5

  • Use HTML5 to the full extent possible
  • Aim at HTML5 validity


Limitation of v1.0

  • While Prime is designed from ground up to support multiple cryptocurrencies, the first version will deliver integration only with bitcoin.
  • No support for multiple hot and cold wallets. Only one pair of hot/cold wallet will be supported.

Open questions

  • Checking whether actual crypto and fiat balances cover values from a database (prevent fractional reserve)? How to do it correctly (i.e. delays in transfers, etc)?