In the previous article we covered exchange and counterparty risks of operating a bitcoin ATM and two general ways to do it: sell bitcoins from your hot wallet, or do mirror deals via bitcoin exchange.
In this post we look at what system settings are supported by main bitcoin ATM providers, namely: Lamassu, General Bytes and Bitaccess. Other large supplier of bitcoin ATMs — Genesis Coin was reached but didn’t provide details about their setup options.
Lamassu bitcoin ATM has an open source code. This allowed different developers to take the code and build software upon it. E.g. Dash implementation is done by external party, Ethereum was also implemented by external party first and later on Lamassu added their own version of ETH official support.
Based on information provided by Neal Conner (Customer Service Manager) Lamassu bitcoin machines support the following settings currently:
Current hot wallet options include Bitcoin Classic or Core, geth, BitGo, Snapcard, and Coinapult.
Direct exchange modules are available for Bitstamp, Coinfloor, Coinapult, Coinbase, and Snapcard. Through a third-party service run by Lamassu operators, Bitnik Reload, operators can use their BitGo hot wallet and API to link to one of over a couple dozen exchanges (listed here: https://goo.gl/RFrq5o).
Network of machines support:
If you wish to connect ATM to a hot wallet this is the list of supported hot wallets:
- Bitcoin Core/bitcoind
- Coin.cz (private key only)
However price feed may come from any of the following list:
It is important to note that only a Bitcoin ATM server has access to wallet or exchange. ATM itself can talk only to a server. Customers can choose to either run their own server instance (own hardware or in a cloud, e.g. digitalocean.com) and in this case General Bytes doesn’t have access to it, or operator may choose to connect his machines to the server instance run by General Bytes, in this case a fee of 0.5% from turnover is paid to General Bytes for running such a server for operator.
Speaking about Bitnik reload solution, which requires to use the same address, at least Block.io and Coin.cz support one address and are officially supported by General Bytes. However, the General Bytes software provides a full integration on its own and can function without external solutions.
How to set a wallet? If an external solution wallet is used — operator just provides API key in the settings of machine. Same API key can be assigned to different machines, that is how they start using the same wallet.
In case of bitcoind operator provides parameters in the following format: protocol:rpcusername:rpcpassword:hostname:port. For example: https:operatorname:mysecretgold:127.0.0.1:8332. Operator can operate bitcoind instance on the same machine where the ATM server is run or on a separate machine based on which IP you provide in parameters.
The following bitcoin exchanges are supported natively via settings of machines:
By choosing different buy or sell exchange strategy ATM operator determines how particular ATM obtains, distributes or stores bitcoins.
Buy strategies supported by General Bytes machines:
Karel recommends customers to go with exchange strategy 3. Which is to hold fiat on the exchange and rebuy bitcoins on demand. Customer gets bitcoins from hot wallet buffer in 2 seconds and operator is exposed to volatility risk of BTC only to btc amount that he holds in a buffer hot wallet.
Speaking about strategy 1, when funds are sent from exchange to customer address directly is still allowed by many exchanges, while some don’t. E.g. the following exchanges allow such transfers: Bitstamp, Bitfinex, QuadrigaCX, while Kraken for example does not. Mostly it is a security measure (Kraken allows withdrawals only to bitcoin addresses from addressbook managed via web only). Well, it is important to say that although this feature is supported by General Bytes, it is not recommended as operators might fall under a money transmitter license requirement in this case in some jurisdictions.
Sell strategies supported by General Bytes machines:
Integration with exchanges is as simple as just providing API key in settings:
General Bytes have part of their software code open sourced as well, which allows to develop custom solutions upon it to some extent.
Network of machines support:
Multiple terminals can be configured to use same hot wallet or exchange – that is recommended practice as it significantly lowers maintenance costs.
You can have each machine connected to a different server but of course in practice you have your one server and multiple your machines connected to it. On server you can set for each machine a different wallet (by providing different API keys set etc) but in practice you operate one hot wallet and you set on the server in a terminal settings to use the same hot wallet (API key) so all of the machines use the same hot wallet. It simplifies operator’s cashflow/ BTC management.
Bitaccess is a Canadian company manufacturing bitcoin ATMs from the very beginning of bitcoin ATM market existence. We approached Andre Deminiac (Director of Operations) to find details of which settings Bitaccess machines support.
In order to run a Bitaccess bitcoin ATM operator needs to use in-house developed Bitaccess wallet. It is originally developed own wallet platform specifically for use on Bitaccess bitcoin ATMs because there wasn’t a third-party wallet solution capable of handling Bitcoin ATM-style traffic at the time, and company have continued to build on it since. The result is a fully featured (HD/multisig capable) enterprise wallet specifically made for high-velocity applications (eg. bitcoin ATMs) and exclusive to Bitaccess platform. The wallet is partially cloud-based and uses Bitaccess infrustructure, so operators cannot run their own software/services.
Address reuse is possible with this wallet, which means on the buy side Bitnik solution could be used for restocking BTC balance.
Bitaccess software supports major exchanges. Current list would roughly be Bitfinex, Bitstamp, Canadian Bitcoins, Coinapult, Coinsetter, Expresscoin, Kraken, QuadrigaCX, SFOX, Snapcard, Bitpay (price only), BitcoinAverage (price only). New exchanges are added when needed.
If a BTM isn’t using an exchange to trade, it will still get a live price from an available price source; either an exchange or a price aggregator like BitcoinAverage or Bitpay. The operator chooses the source, and it can again be converted to the local currency if needed.
The machines can pull in a live currency exchange rate just like it does with Bitcoin prices (for conversion https://openexchangerates.org is used behind the scenes and cannot be changed by operator via settings), and use that rate to convert prices on the fly where needed. So, for example, if you have a machine accepting KZT notes but connected to Bitstamp trading in USD, the BTM is pulling a BTC price in USD and converting it to KZT to display on-screen/use for accounting. Then the BTM can accept 10,000 KZT from a customer and send them the bitcoin for that equivalent. Then on the backend it calculates that’s worth 29 USD, executes a trade at Bitstamp for 29 USD to BTC, and withdraws that BTC back to the hot wallet to replenish what it sent to the customer.
Later taking the KZT from the machine and getting it back into Bitstamp as USD would be up to the operator and depend on how they have their business set up. It doesn’t factor into Bitaccess side of things at all, the exchange account just has to remain stocked.
A machine can only use one exchange at a time, but exchange availability is rarely an issue. If the operator wishes to maintain a backup exchange and switch over if needed, operators can do so. The switch would be done manually. But exchanges experiencing significant downtime (enough to switch) is rare enough, so this is a non-issue, in that it can easily be handled on a case-by-case basis.
Network of machines support:
Multiple BTMs owned by the same operator can share a hot wallet, so they all pull from the same float and there’s only one balance to monitor. The wallet can scale to accommodate as many machines as someone might wish to operate.