Giter Club home page Giter Club logo

skycoin-exchange's Introduction

Skycoin Exchange

Installation

go get github.com/skycoin/skycoin-exchange

Running server

cd skycoin-exchange/cmd/server
go run main.go -seed="wallet seed name"

The seed flag must be specificed, server will generate wallet base on it. The default server port is 8080, and you can use the port flag to change it.

Setup admin in server

As some apis need admin privilege, the server do not have admin account by default,use the following command to set up admin accounts.

go run main.go -admins="0311ff3ed447e3ebe176e929017556e2d2be7c52b1f241dd80df98635ea9f53b22"

Multiple admin accounts are connected by commas.

Help

For more usage, run the help command:

go run main.go --help

API client

Running the client

./client.sh

Default client port is 6060, use the p flag to change it.

Create account

  • mode: POST
  • url: /api/v1/accounts

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "pubkey": "03c9852d11d2d84d23356df6390f10a53dbd8026ed4bc58f9ccddd7a7c69e00715",
  "created_at": 1470188576
}

Once the new account is created, this account will become the active account, that means the following apis calls are all base on this account.

Get account

This api is used to get account in client, you can use it to list all the acccounts, or to get the active account.

  • mode: GET
  • url: /api/v1/account?active=[:active]
  • params:
    • active: optional condition, if not set, return all accounts, otherwise the active must be 1 and return the active account.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "accounts": [
    {
      "pubkey": "02c9656e65f70753f021832a7a1874c966917974b242b11b2d73d04bcaaea21a4d",
      "wallet_ids": {
        "bitcoin": "bitcoin_myf"
      }
    }
  ]
}

Switch account

  • mode: PUT
  • url: /api/v1/account/state?pubkey=[:pubkey]

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  }
}

Get supported coins

  • mode:GET
  • url: /api/v1/coins

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "coins": [
    "BTC",
    "SKY"
  ]
}

Get deposit address

  • mode: POST
  • url: /api/v1/account/deposit_address?coin_type=[:coin_type]
  • params:
    • coin_type: can be bitcoin, skycoin, etc.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "coin_type": "bitcoin",
  "address": "1HBuSp1G151xTqLpMT3mBDXskC5iVNTAwx"
}

Get account balance

  • mode: GET
  • url: /api/v1/account/balance?coin_type=[:coin_type]
  • params:
    • coin_type: can be bitcoin, skycoin.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "coin_type": "bitcoin",
  "balance": 480000
}

Withdraw coins

  • mdoe: POST
  • url: /api/v1/account/withdrawal?coin_type=[:type]&amount=[:amt]&toaddr=[:toaddr]
  • params:
    • coin_type: can be bitcoin, skycoin, etc.
    • amount: the coin number you want to withdrawal, btc in satoshis, sky in drops.
    • toaddr: address you want to receive the coins.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "new_txid": "21b1a9c59a3a631f14b7f91c9b886f6e379c36dd357f7628964107c4d953ea5a"
}

Create order

  • mode: POST
  • url: /api/v1/account/order?coin_pair=[:coin_pair]&type=[:type]&price=[:price]&amt=[:amt]
  • params:
    • coin_pair: coin pair, like bitcoin/skycoin.
    • type: order type, can be bid or ask
    • price: price
    • amt: amount

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "order_id": 8
}

Get orders

  • mode: GET
  • url: /api/v1/orders/[:type]?coin_pair=[:coin_pair]&start=[:start]&end=[:end]
  • params:
    • type: order type, can be bid or ask.
    • coin_pair: coin pair, joined by '/', like: bitcoin/skycoin.
    • start: start index of the orders.
    • end: end index of the orders.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "coin_pair": "bitcoin/skycoin",
  "type": "bid",
  "orders": [
    {
      "id": 8,
      "type": "bid",
      "price": 25,
      "amount": 90000,
      "rest_amt": 90000,
      "created_at": 1470193222
    },
    {
      "id": 3,
      "type": "bid",
      "price": 25,
      "amount": 90000,
      "rest_amt": 90000,
      "created_at": 1470152057
    }
  ]
}

Get utxos

  • mode: GET
  • url: /api/v1/utxos?coin_type=[:coin_type]&addrs=[:addrs]
  • params:
    • coin_type: coin type, can be bitcoin or skycoin.
    • addrs: addresses, connected with comma.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "btc_utxos": [
    {
      "address": "1EknG7EauSW4zxFtSrCQSHe5PJenks55s6",
      "txid": "c5ab911556a4628a5a98ee5386a8a3b465831c66953d288bbfeb4221e95158d8d",
      "vout": 0,
      "amount": 90000
    },
    {
      "address": "1EknG7EauSW4zxFtSrCQSHe5PJenks55s6",
      "txid": "a9a1ef0525b1446232fcb69bb4ef99ef239f78a7046f784b972f22a60348d963",
      "vout": 0,
      "amount": 90000
    }
  ]
}

NOTE: the utxos response json struct of bitcoin is different from skycoin.

Get transaction

This api is used to get tx verbose info by txid.

  • mode: GET
  • url: /api/v1/tx?coin_type=[:coin_type]&txid=[:txid]
  • params:
    • coin_type: bitcoin or skycoin
    • txid: transaction id

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "coin_type": "bitcoin",
  "tx": {
    "btc": {
      "txid": "5756ff16e2b9f881cd15b8a7e478b4899965f87f553b6210d0f8e5bf5be7df1d",
      "version": 1,
      "locktime": 981825022,
      "vin": [
        {
          "coinbase": "03a6ab05e4b883e5bda9e7a59ee4bb99e9b1bc76a3a2bb0e9c92f06e4a6349de9ccc8fbe0fad11133ed73c78ee12876334c13c02000000f09f909f2f4249503130302f4d696e65642062792073647a686162636400000000000000000000000000000000",
          "sequence": 2765846367
        }
      ],
      "vout": [
        {
          "value": "25.37726812",
          "n": 0,
          "scriptPubkey": {
            "asm": "OP_DUP OP_HASH160 c825a1ecf2a6830c4401620c3a16f1995057c2ab OP_EQUALVERIFY OP_CHECKSIG",
            "hex": "76a914c825a1ecf2a6830c4401620c3a16f1995057c2ab88ac",
            "type": "pubkeyhash",
            "addresses": [
              "1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY"
            ]
          }
        }
      ],
      "blockhash": "0000000000000000027d0985fef71cbc05a5ee5cdbdc4c6baf2307e6c5db8591",
      "confirmations": 54245,
      "time": 1440604784,
      "blocktime": 1440604784
    }
  }
}

NOTE: the bitcoin transaction response struct is differen from skycoin.

Get raw transaction

  • mode: GET
  • url: /api/v1/rawtx?coin_type=[:coin_type]&txid=[:txid]
  • params:
    • coin_type: bitcoin or skycoin
    • txid: transaction id

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "coin_type": "bitcoin",
  "rawtx": "010000000132ea3894c4b2c68bb1255be5d0e8a26bd336fd7a562eca9f7c435c9268199f06020000006b483045022100dd4e1b960726e3d3d205cb5ef4d92b3e04f3839757606800ed662069a841ffdc02203f68723bbbf9800d16555ace1ef2f46e65c2a6341643f3c5bf84158b108e6d5d012103eb8b81f8ebc988c61d3cc4c4ac3d546b02a4994d612725e91d8d69a72045fb18ffffffff019d3b1f020000000017a914bfc03379d17dd1e918a026b76cde472bea7ac7268700000000"
}

Update balance

This api is used to update balance of specific account, need admin privilege, to acquire admin privilege, see setup admin in server.

  • mode: PUT
  • url: /api/v1/admin/account/balance?coin_type=[:coin_type]&dst=[:dst]&amt=[:amt]
  • params:
    • coin_type: bitcoin or skycoin
    • dst: account pubkey, the account whose balance is going to be updated.
    • amt: balance amount

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  }
}

Create wallet

  • mode: POST
  • url: /api/v1/wallet?type=[:type]&seed=[:seed]
  • params:
    • type: wallet type, can be bitcoin or skycoin
    • seed: wallet seed

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "id": "bitcoin_sd1101"
}

Generate new address

  • mode: POST
  • url: /api/v1/wallet/address?id=[:id]
  • params:
    • id: wallet id

response json:

{
  "Result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "address": "1FhzNKvpStmS4ZwpiZwRNVhTQvZBa39VNA"
}

Get public and secret key pair

  • mode: GET
  • url: /api/v1/wallet/address/key?id=[:id]&address=[:address]
  • params:
    • id: wallet id
    • address: coin address

response json:

{
  "Result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "pubkey": "03712c6bf0601f7a663ad7812f8d031e3e3f07f3f7ed03ad165dd7ee28120e7102",
  "seckey": "L4Y4E6UdCFqmmcYNGBFAXBZif6pfoox5CQNReBsnX8aimgBcRYeX"
}

Get wallet balance

  • mode: GET
  • url: /api/v1/wallet/balance?id=[:id]
response json:
{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "balance": {
    "amount": 11000000,
    "hours": 1518046
  }
}

The above response json is a skycoin wallet's balance result, you can see the balance contains hours field, while if bitcoin, the hours field will be omited.

Create raw transaction

  • mode: POST
  • url: /api/v1/create_rawtx?coin_type=[:coin_type]
  • params:
    • coin_type: skycoin or bitcoin

Specify the tx in and outs in json request body as below:

bitcoin request:

{
    "tx_ins":
    [
        {
            "txid":"44051e627966fad80f5e97890da1c67148f312cd2b617cf788f274f89abf16a4",
            "vout": 0
        }],
    "tx_outs":
    [
        {
          "address":"1GpMHk4GcWRBZfmBBd2iCt4PinhNs4SPrn",
          "value":4000
        },
        {
            "address":"1EknG7EauSW4zxFtSrCQSHe5PJenkn55s6",
            "value": 4000
        }]
}

skycoin request:

{
    "tx_ins":
    [
        {
            "txid":"11ad2877281d541e68a5e3004cccd166d85c9edf252cabfa5bb540648380cea9"
        }],
    "tx_outs":
    [
        {
          "address":"5iUowMCu1VSi565Q5DfLNXz26PwVNgN1jd",
          "value":1000000,
          "hours":2
        }]
}

Sign raw transaction

  • mode: POST
  • url: /api/v1/sign_rawtx?coin_type=[:coin_type]&raw_tx=[:rawtx]
  • params:
    • coin_type: skycoin or bitcoin
    • raw_tx: raw transaction that's going to be signed.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "rawtx": "0100000001a416bf9af874f288f77c612bcd12f34871c6a10d89975e0fd8fa6679621e05440000000000ffffffff02a00f0000000000001976a914ad7e5f825191df239d43376d182cf85d3e9ac8a188aca00f0000000000001976a91496e14d971c0a482f37a06ba23094e0cc779676ff88ac00000000"
}

Make sure current active account owns the private key to sign the transaction.

Inject raw transaction

  • mode: POST
  • url: /api/v1/inject_rawtx?coin_type=[:coin_type]&rawtx=[:rawtx]
  • params:
    • coin_type: skycoin or bitcoin
    • rawtx: raw transaction that's going to be injected.

response json:

{
  "result": {
    "success": true,
    "errcode": 0,
    "reason": "Success"
  },
  "txid": "11ad2877281d541e68a5e3004cccd166d85c9edf252cabfa5bb540648380cea9"
}

Dependencies


go get github.com/robfig/glock
glock sync github.com/skycoin/skycoin-exchange

To update dependencies

glock save github.com/skycoin/skycoin-exchange ???

skycoin-exchange's People

Contributors

iketheadore avatar rngadam avatar tmansdev999 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.