1 unstable release

0.1.0-alpha.1 Jan 11, 2020

#22 in #grin

MIT license

150KB
1.5K SLoC

Grin Bot

Grin Bot is a self-hosted Keybase or Telegram bot wallet for the Grin cryptocurrency. You can run Grin Bot on your own desktop hardware, and control it from a smartphone.

Mobile

Getting started

Building

Docker

git clone --branch v0.0.1 https://github.com/alexbyrnes/grinbot.git
cd grinbot
docker build -t grinbot .
docker run -it grinbot

From source

git clone --branch v0.0.1 https://github.com/alexbyrnes/grinbot.git
cargo install --path grinbot --locked

From source — no install

git clone --branch v0.0.1 https://github.com/alexbyrnes/grinbot.git
cd grinbot
cargo run

Testing

cargo test --all

Rust docs

cargo doc --no-deps --document-private-items --open --all

Running and interacting without an account

All commands can be executed locally without a Keybase or Telegram account.

grinbot -c "/help"

Starting the Grin Wallet Owner API

In a grin-wallet directory:

grin-wallet owner_api

Running and interacting with your account

Requirements

Keybase

  • A Keybase desktop client, and a mobile client for issuing commands. Download
  • A Keybase account with a paper key generated. Devices --> "Add device or paper key" or command line.

Telegram

  • A Telegram account with username. Download
  • A bot instance. Instructions Once your bot instance is created you should receive a message with your token. Enter the token and your username in config.yml.

Running the bot

Start the bot by running grinbot in a directory with config.yml and logging.yml, or cargo run in the root of the repository.

Keybase Open a Keybase client and start a chat with yourself, or the username associated with your paper key. (The key and user name(s) go in config.yml.)

Telegram Go to the link provided by Telegram on the device or desktop where Telegram is installed. (The link starts with https://t.me/.) You should get a prompt to open a chat with your bot.

Type and send /help for a list of commands.

Note: The best source of troubleshooting information is the dockerfile where a complete bot with Grin node and wallet is set up from scratch.

docker build -t grinbot .
docker run -it grinbot

Commands

/create

Create a Grin wallet in the directory specified in your config.yml. /send 0.001 http://some-recipient123.org Send Grin to the specified address. /balance _Get the current balance for your wallet. /help Show this help text.

Architecture and Security

Keybase Keybase chats are end-to-end encrypted and the bot acts as a regular user. The privacy guarantees provided by Keybase are the same as those for chats with any other user. These guarantees don't include protection from loss of your paper key, or issues with Grin Bot itself, or external libraries. Paper keys can be revoked through the Keybase clients.

Telegram Grin Bot uses the Telegram bot long polling interface. This means there's no need for an externally-accessible IP or port. Grin Bot will connect to Telegram and pull new messages (called Updates) from an endpoint specifically for your bot instance using your token. To get an idea of how this works, you can visit https://api.telegram.org/bot<your api token>/getUpdates to manually consume messages you have sent your bot. This is the address Grin Bot polls.

The only information that is sent to Telegram is the contents of the chat itself — the commands you send to your bot and the messages it sends back. The commands and replies do not include passwords or tokens.

Note: Telegram bot traffic is not end-to-end encrypted, however Telegram claims GDPR compliance and the ability to delete messages. If you are using Grin Bot for purposes that require stronger security guarantees than these, you should not use this version of Grin Bot.

Roadmap

  • Command aliases
  • Confirmation dialogs
  • grinbot init for default config files

Contributing

Contributions are welcome. Please submit an issue, or claim an existing one for visibility, and PR against the develop branch.

Dependencies

~74MB
~1.5M SLoC