Accept Bitcoin payments. Free, open-source & self-hosted, Bitcoin payment processor.
Find a file
Wouter Samaey 2abc35058b
Custodian Account UI: CRUD (#3923)
* WIP New APIs for dealing with custodians/exchanges

* Simplified things

* More API refinements + index.html file for quick viewing

* Finishing touches on spec

* Switched cryptoCode to paymentMethod as this allows us to differentiate between onchain and lightning

* Moved draft API docs to "/docs-draft"

* WIP baby steps

* Added DB migration for CustodianAccountData

* Rough but working POST /v1/api/custodian-account + GET /v1/api/custodian

* WIP + early Kraken API client

* Moved service registration to proper location

* Working create + list custodian accounts + permissions + WIP Kraken client

* Kraken API Balances call is working

* Added asset balances to response

* List Custodian Accounts call does not load assetBalances by default, because it can fail. Can be requested when needed.

* Call to get the details of 1 specific custodian account

* Added permissions to swagger

* Added "tradableAssetPairs" to Kraken custodian response + cache the tradable pairs in memory for 24 hours

* Removed unused file

* WIP + Moved files to better locations

* Updated docs

* Working API endpoint to get info on a trade (same response as creating a new trade)

* Working API endpoints for Deposit + Trade + untested Withdraw

* Delete custodian account

* Trading works, better error handling, cleanup

* Working withdrawals + New endpoint for getting bid/ask prices

* Completed withdrawals + new endpoint for getting info on a past withdrawal to simplify testing, Enums are output as strings,

* Better error handling when withdrawing to a wrong destination

* WithdrawalAddressName in config is now a string per currency (dictionary)

* Added TODOs

* Only show the custodian account "config" to users who are allowed

* Added the new permissions to the API Keys UI

* Renamed KrakenClient to KrakenExchange

* WIP Kraken Config Form

* Removed files for UI again, will make separate PR later

* Fixed docs + Refactored to use PaymentMethod more + Added "name" to custodian account + Using cancelationToken everywhere

* Updated withdrawal info docs

* First unit test

* Complete tests for /api/v1/custodians and /api/v1/custodian-accounts endpoints + Various improvements and fixes

* Mock custodian and more exceptions

* Many more tests + cleanup, moved files to better locations

* More tests

* WIP more tests

* Greenfield API tests complete

* Added missing "Name" column

* Cleanup, TODOs and beginning of Kraken Tests

* Added Kraken tests using public endpoints + handling of "SATS" currency

* Added 1st mocked Kraken API call: GetAssetBalancesAsync

* Added assert for bad config

* Mocked more Kraken API responses + added CreationDate to withdrawal response

* pr review club changes

* Make Kraken Custodian a plugin

* Re-added User-Agent header as it is required

* Fixed bug in market trade on Kraken using a percentage as qty

* A short delay so Kraken has the time to execute the market order and we don't fetch the details too quickly.

* Merged the draft swagger into the main swagger since it didn't work anymore

* Fixed API permissions test

* Removed 2 TODOs

* Fixed unit test

* After a utxo rescan, the cached balance should be invalidated

* Fixed Kraken plugin build issues

* Added Kraken plugin to build

* WIP UI + config form

* Create custodian account almost working - only need to add in the config form

* Working form, but lacks refinement

* Viewing balances + Editing custodian account works, but cannot change the withdrawal destination config because that is an object using a name with [] in it

* cleanup

* Minor cleanup, comments

* Working: Delete custodian account

* Moved the MockCustodian used in tests to a new plugin + linked it to the tests

* WIP viewing custodian account balances

* Split the Mock custodian into a Mock + Fake, various UI improvements and minor fixes

* Minor UI fixes

* Removed broken link

* Removed links to anchors as they cannot pass the tests since they use JavaScript

* Removed non-existing link. Even though it was commented out, the test still broke?

* Added TODOs

* Now throwing BadConfigException if API key is invalid

* UI improvements

* Commented out unfinished API endpoints. Can be finished later.

* Show fiat value for fiat assets

* Removed Kraken plugin so I can make a PR


Removed more Kraken files

* Add experimental route on UICustodianAccountsControllre

* Removed unneeded code

* Cleanup code

* Processed Nicolas' feedback

Co-authored-by: Kukks <evilkukka@gmail.com>
Co-authored-by: nicolas.dorier <nicolas.dorier@gmail.com>
2022-07-07 22:42:50 +09:00
.circleci CI: Try docker-compose pull several times 2022-06-29 23:37:38 +09:00
.github Add new issue forms for filing Bug Reports (#3846) 2022-06-10 13:35:31 +02:00
.run Plugins flexibility PR (#2129) 2021-01-07 14:49:53 +01:00
.vscode Adjust VSCode browser launch regex 2022-01-11 21:11:15 -08:00
BTCPayServer Custodian Account UI: CRUD (#3923) 2022-07-07 22:42:50 +09:00
BTCPayServer.Abstractions Custodian Account UI: CRUD (#3923) 2022-07-07 22:42:50 +09:00
BTCPayServer.Client Public Invoice receipt (#3612) 2022-07-06 21:14:55 +09:00
BTCPayServer.Common Fix spurious crash at shutdown 2022-07-04 13:17:36 +09:00
BTCPayServer.Data Custodian Account UI: CRUD (#3923) 2022-07-07 22:42:50 +09:00
BTCPayServer.PluginPacker Fix: Warnings and view build issues during dotnet publish (#3902) 2022-06-28 17:38:59 +09:00
BTCPayServer.Plugins.Test Support LNURL Auth 2022-01-14 13:26:30 +01:00
BTCPayServer.Rating Add Buda rate provider for CLP 2022-06-09 12:01:40 +02:00
BTCPayServer.Tests Custodian Account UI: CRUD (#3923) 2022-07-07 22:42:50 +09:00
Build add changelog and bump 2022-05-28 14:05:16 +02:00
docs add greenfield authorize UI docs and fix small issues (#2156) 2020-12-23 13:19:38 +09:00
Plugins/BTCPayServer.Plugins.Custodians.FakeCustodian Custodian Account UI: CRUD (#3923) 2022-07-07 22:42:50 +09:00
.dockerignore Remove launch profile from docker 2017-10-19 17:45:07 +09:00
.editorconfig Warning if not using 'simple using' 2022-01-14 17:50:29 +09:00
.gitattributes shebang and fix line ending 2018-03-06 09:23:08 -05:00
.gitignore Greenfield: Store Users (#3425) 2022-02-10 14:51:10 +09:00
amd64.Dockerfile Fix dockerfile 2022-01-03 22:11:33 +09:00
arm32v7.Dockerfile Migrate to .net6.0 (#3198) 2021-12-27 13:15:43 +09:00
arm64v8.Dockerfile Migrate to .net6.0 (#3198) 2021-12-27 13:15:43 +09:00
btcpayserver.sln Custodian Account UI: CRUD (#3923) 2022-07-07 22:42:50 +09:00
build.ps1 chmod +x scripts 2018-03-06 09:15:09 -05:00
build.sh shebang and fix line ending 2018-03-06 09:23:08 -05:00
Changelog.md add changelog and bump 2022-05-28 14:05:16 +02:00
docker-entrypoint.sh docker-entrypoint would crash if missing ssh pubkey 2022-02-06 20:39:10 +09:00
LICENSE Update LICENSE 2022-01-16 16:11:22 +02:00
nuget.config Add a test catching expirationTime bug (#1336) 2020-03-10 17:11:15 +09:00
publish-docker.ps1 Remove stable and latest branch 2021-04-01 12:06:29 +09:00
README.md Add IVPN as supporter to README 2022-04-21 15:50:46 +02:00
RELEASE-CHECKLIST.md Add missing file 2020-06-28 18:00:51 +09:00
run.ps1 Fix warning from CLI parser (#3875) 2022-06-20 13:07:58 +09:00
run.sh Fix warning from CLI parser (#3875) 2022-06-20 13:07:58 +09:00
SECURITY.md Fix typo in SECURITY.md 2019-10-21 22:05:29 +02:00

BTCPay Server

BTCPay Server

Accept Bitcoin payments โ‚ฟ

BTCPay Server is a free and open-source Bitcoin payment processor which allows you to accept bitcoin without fees or intermediaries.

"This is lies, my trust in you is broken, I will make you obsolete" ๐Ÿ’š

View Demo ยท Report a bug ยท Request a feature ยท FAQ

๐Ÿ’ผ Table of Contents

๐ŸŽจ Features

  • Direct, peer-to-peer Bitcoin payments
  • No transaction fees (other than the network fee)
  • No fees, middleman or KYC
  • Non-custodial (complete control over the private key)
  • Enhanced privacy & security
  • Self-hosted
  • SegWit support
  • Lightning Network support (LND, c-lightning, Eclair, and Ptarmigan)
  • Tor support
  • Share your instance with friends (multi-tenant)
  • Invoice management and Payment requests
  • Apps: Point of sale, crowdfunding, donation button
  • Full-node reliant wallet with hardware wallet integration and SegWit support
  • Bitcoin-only build, separate community-maintained altcoin build (supported altcoins)

๐Ÿš€ Getting Started

Firstly, decide if you want to host an instance yourself or use a third-party host. If you've chosen to self-host, there are plenty of documented ways to deploy BTCPay Server.

After successful deployment, make sure to check our getting started and walkthrough guides. In case you would like to use Lightning Network, see Lightning guide.

๐Ÿ“— Documentation

Please check out our official website, complete documentation and FAQ for more details.

If you have trouble using BTCPay Server, consider joining communities listed on the official website to get help from other contributors. Only create a GitHub issue for technical issues you can't resolve through other channels or feature requests you've validated with other members of the community.

๐Ÿค Contributing

BTCPay Server is built and maintained entirely by volunteer contributors around the internet. We welcome and appreciate new contributions.

If you're a developer looking to help, but you're not sure where to begin, check the good first issue label, which contains small pieces of work that have been specifically flagged as being friendly to new contributors.

Contributors looking to do something a bit more challenging, before opening a pull request, please join our community chat or start a GitHub discussion to get early feedback, discuss best ways to tackle the problem and ensure there is no work duplication.

There are many other ways to get involved with the project. Check our contribution guidelines. To get the big-picture of the project development, visit our evolving roadmap. We organize different types of community calls several times a month. Subscribe to our calendar and feel free to join our calls to discuss development, design, documentation and more.

๐Ÿง‘โ€๐Ÿ’ป Developing

To begin developing locally, visit our local development guide. There are also several video-tutorials:

How to build

While the documentation advises using docker-compose, you may want to build BTCPay Server yourself.

First, install .NET Core SDK v6.0 as specified by the Microsoft website.

On Powershell:

.\build.ps1

On linux:

./build.sh

How to run

Use the run scripts to run BTCPay Server, this example shows how to print the available command-line arguments of BTCPay Server.

On Powershell:

.\run.ps1 --help

On linux:

./run.sh --help

How to debug

If you want to debug, use Visual Studio Code or Visual Studio 2019.

You need to run the development time docker-compose as described in the test guide.

You can then run the debugger by using the Launch Profile Docker-Regtest on either Visual Studio Code or Visual Studio 2017.

If you need to debug ledger wallet interaction, install the development time certificate with:

# Install development time certificate in the trust store
dotnet dev-certs https --trust

Then use the Docker-Regtest-https debug profile.

Other dependencies

For more information, see the documentation: How to deploy a BTCPay Server instance.

๐Ÿงช API

BTCPay Server has two APIs:

The Greenfield API is our brand-new API which is still in development. Once complete, it will allow you to run BTCPay Server headlessly. The Legacy API, is fully compatible with BitPay's API. It has limited features, but allows instant migration from BitPay.

๐Ÿ’š Community

Our community is the โค๏ธ of the project. To chat with other community members in real-time, join our Mattermost chat. We're also on GitHub discussions.

๐Ÿ“ License

BTCPay Server software, logo and designs are provided under MIT License.

๐Ÿ™ Supporters

The BTCPay Server Project is proudly supported by these entities through the BTCPay Server Foundation.

Spiral
Spiral
bailliegifford
Baillie Gifford
PNXBET
PNXBET
LunaNode
LunaNode
Wallet of Satoshi
Wallet of Satoshi
Nomics
Nomics
Coincards
Coincards
IVPN
IVPN

If you'd like to support the project, please visit the donation page.