这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@ZIMkaRU
Copy link
Member

@ZIMkaRU ZIMkaRU commented Apr 26, 2024

This PR adds the Transaction Tax Report


Adds two strategies to calculate the user's trades FIFO and LIFO.
FIFO (first-in-first-out) and LIFO (last-in-first-out) are two accounting methods used to calculate cryptocurrency gains and losses, see this article
For conversion currencies are used the Public Trades endpoint of the BFX api_v2: https://docs.bitfinex.com/reference/rest-public-trades


Basic changes:

  • adds getTransactionTaxReport endpoint
  • adds getTransactionTaxReportFile endpoint
  • adds makeTrxTaxReportInBackground endpoint
  • adds corresponding test coverage

  • getTransactionTaxReport request example
{
  "auth": {
    "token": "user_token"
  },
  "method": "getTransactionTaxReport",
  "params": {
    "start": 1706861968714,
    "end": 1712042359302,
    "strategy": "LIFO" // or "FIFO"
  }
}
  • getTransactionTaxReport response example
{
  "jsonrpc": "2.0",
  "result": [
    {
      "asset": "LTC",
      "amount": 1.43796106,
      "mtsAcquired": 1712042016000,
      "mtsSold": 1712042359302,
      "proceeds": 142.64861307412,
      "cost": 142.41853930451998,
      "gainOrLoss": 0.23007376960001125
    },
    {
      "asset": "BTC",
      "amount": 0.001342,
      "mtsAcquired": 1649771737942,
      "mtsSold": 1709584808125,
      "proceeds": 90.838638,
      "cost": 54.303808778059306,
      "gainOrLoss": 36.5348292219407
    },
    {
      "asset": "LTC",
      "amount": 1e-8,
      "mtsAcquired": 1706858241000,
      "mtsSold": 1706861968714,
      "proceeds": 6.7707e-7,
      "cost": 6.7876e-7,
      "gainOrLoss": -1.6900000000000634e-9
    }
  ],
  "id": null
}

  • getTransactionTaxReportFile request example
{
  "auth": {
    "token": "user_token"
  },
  "method": "getTransactionTaxReportFile",
  "params": {
    "start": 1706861968714,
    "end": 1712042359302,
    "strategy": "LIFO"
  }
}
  • getTransactionTaxReportFile response example
{
  "jsonrpc": "2.0",
  "result": {
    "isSaveLocaly": true,
    "localReportFolderPath": "/home/user/docs/bitfinex/report-files",
    "remoteReportUrn": null,
    "localCsvFolderPath": "/home/user/docs/bitfinex/report-files",
    "remoteCsvUrn": null
  },
  "id": null
}

  • makeTrxTaxReportInBackground request example
{
  "auth": {
    "token": "user_token"
  },
  "method": "makeTrxTaxReportInBackground",
  "params": {
    "start": 1706861968714,
    "end": 1712042359302,
    "strategy": "LIFO"
  }
}
  • makeTrxTaxReportInBackground response example
{
  "jsonrpc": "2.0",
  "result": true,
  "id": null
}

The idea of the makeTrxTaxReportInBackground endpoint is the following:

  • the big users may have a lot of trades for a certain year

  • to convert currencies to USD are used the public trades endpoint of the BFX API with 15reqs/min rate limit

  • it can lead to significant time in report generation

  • to fight HTTP timeout for this case, it is necessary to send makeTrxTaxReportInBackground HTTP request to schedule generation

  • and when the report generation is successful the data of the tax report will be responded via WebSocket

  • emitTrxTaxReportGenerationInBackgroundToOne WS event example:

{
  "jsonrpc": "2.0",
  "result": [
    {
      "asset": "LTC",
      "amount": 1.43796106,
      "mtsAcquired": 1712042016000,
      "mtsSold": 1712042359302,
      "proceeds": 142.64861307412,
      "cost": 142.41853930451998,
      "gainOrLoss": 0.23007376960001125
    },
    {
      "asset": "BTC",
      "amount": 0.001342,
      "mtsAcquired": 1649771737942,
      "mtsSold": 1709584808125,
      "proceeds": 90.838638,
      "cost": 54.303808778059306,
      "gainOrLoss": 36.5348292219407
    },
    {
      "asset": "LTC",
      "amount": 1e-8,
      "mtsAcquired": 1706858241000,
      "mtsSold": 1706861968714,
      "proceeds": 6.7707e-7,
      "cost": 6.7876e-7,
      "gainOrLoss": -1.6900000000000634e-9
    }
  ],
  "id": null,
  "action": "emitTrxTaxReportGenerationInBackgroundToOne"
}
  • emitTrxTaxReportGenerationInBackgroundToOne WS event example in case an error
{
  "jsonrpc": "2.0",
  "error": {
    "code": 500,
    "message": "Internal Server Error",
    "data": null
  },
  "id": null,
  "action": "emitTrxTaxReportGenerationInBackgroundToOne"
}

Depends on this PR:

ZIMkaRU added 30 commits April 26, 2024 09:10
@ZIMkaRU ZIMkaRU force-pushed the feature/add-transaction-tax-report branch from 0e5be86 to 43e2756 Compare May 6, 2024 11:05
@ZIMkaRU
Copy link
Member Author

ZIMkaRU commented Jun 25, 2024

done in small separated PRs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant