Sending OMNI tokens to a Bitcoin address

Written March 2019.

The OMNI protocol (omni layer) is far less popular than ERC20, but it is a much older non-native protocol for storing tokens on the Bitcoin blockchain. ERC20 is a standard to do a similar thing on the Ethernet blockchain. It is of interest to me because of token ID #3, MAID, the pre-launch version of the SafeCoin of the MaidSafe project.

Below we describe how we sent MAID from an Exchange to a BTC address. Sending the tokens from there to another address is more involved, and will require a minimal balance of Bitcoin to be at the address holding the tokens, and is not covered here.

Disclaimer: You agree to take responsibility for loosing funds or tokens resulting from following this guide. If you don’t agree, do not read or follow the steps below.

Creating a Secure Bitcoin Wallet

We will need a Bitcoin address, held in a secure off-line paper wallet. We create a new Bitcoin address for this using an off-line clean and secure OS. A simpler on-line method could be used using OMNIwallet, but I did not test it and do not recommend it, especially when larger amounts of MAID are involved.

[ ] Obtain BIP39 Bitcoin address generator
[ ] Create a safe OS bootable off-line from a USB stick
[ ] Open the address generator html/JavaScript file
[ ] Generate addresses, keys and mnemonic
[ ] Write down the information
[ ] Terminate the safe OS
[ ] Send MAID from the exchange to the new address
[ ] Verify MAID using the Omnilayer explorer

JavaScrypt Address Generator

The BIP39 tool here on Github is a tool in JavaScript to generate BIP39 addresses and private keys. We will use release 0.3.11 of May 2019, commit 0d0099e. The license type of this software was MIT at the time of release, i.e. free to use in any way as specified.

BIP32 = HD wallet spec; what they are how they work
BIP39 = Specific type of mnemonic, and the process for turning it into a BIP32 seed
BIP44 = Specific format of a BIP32 wallet

Any wallet that is BIP 32/39/44 or just “BIP39” compatible will give you 12-24 words as the mnemonic seed, and will use those words to deterministically generate a 512-bit seed to deterministically create a BIP32 master key, and then create and use child keys in the manner specified by BIP44. BIP44 enables generation of lists (subtree) of addresses for multiple types of coins, using a single seed.

The keys start with a ‘1’ in contrast to BIP49 (‘3’), BIP84, or other derivation paths. BIP49 specifies generation of SegWit (segregated witness) addresses, which reportedly cause issues and therefore are not recommended. BIP84 does this differently but is not recommended either.

[ ] Download wallet generator to your Linux or MacOS X machine 
  git clone https://github.com/iancoleman/bip39.git
[ ] Enter the directory
  cd bip39
[ ] Checkout a tested version 0d0099e
  git reset --hard 0d0099e
[ ] Copy the folder src/ to clean USB media
| Folder contains an html, a javascript, and a css file.
[ ] Optionally open the html file in a browser to play with it

TailOS Secure Environment

For highest security you should use a clean OS booted in read-only mode and without networking enabled. Then run the script by opening the html file index.html in a browser.

The following are the steps to install and configure a TailsOS on a Mac. The website guides you through the steps with unparalleled ease. We tested the procedure on a Mac running Mojave, and FireFox browser.

[ ] Download Tails v. 3.13.2 (tested) or newer for your platform
| https://tails.boum.org/install/index.en.html
[ ] Follow the instructions until you have a configured OS
| Download > Install > Restart > Configure > Restart
| Use conventional download, and checksum verification plugin
| Use Etcher 1.5.5 (tested) for macOS or later
| Print the page about creating the USB media and installation

Creating a Wallet

To create your wallet, follow the steps below:

[ ] Open the index.html file in a browser.
[ ] Ensure that the number of mnemonic words is 15 (default)
[ ] Click on [GENERATE] to generate a mnemonic
[ ] Write down the mnemonic phrase (and optionally bip39 seed)
[ ] Ensure Coin is "BTC - Bitcoin"
| This will result in a root key derived from the seed
[ ] Ensure the derivation path is BIP44
| Derivation path should be m/44'/0'/0'/0
| Addresses generated must start with a '1'
[ ] Write down derived addresses (as many as you want)
| Address, Public Key, and Private Key
[ ] Never share the private key with anyone, never type it in
[ ] Store the mnemonic phrase, and any other info in a safe
| The mnemonic can be used to re-create all other information
[ ] Close the browser, and turn off the OS

The absolute minimum needed to re-create addresses and all keys is the mnemonic phrase. You can store the address generator, seeds, and addresses on USB media in a safe. Paper is the best medium for long-term storage, except that it can catch fire. Use a fire-safe safe, and store copies in multiple secure locations.

Transfer Token to Bitcoin Address

Now that we have an off-line “wallet” with Bitcoin addresses, the final step is transfer of the OMNI token (e.g. MAID) to your newly created Bitcoin address. You could also add some amount of Bitcoin to your address to have funds for a transfer out in the future. Finally, you should verify your token balance attached to the new address.

If you are unsure, you can try to send a small amount first, and the rest later after confirming that the procedure works. Of course, this will result in in total double the fee for the withdrawals.

Disclaimer: You agree to take responsibility yourself, for loosing funds or tokens resulting from following this guide. If you don’t agree, do not follow these steps.

Input the Bitcoin address you want to send your Omni layer tokens to, e.g. MAID, in the field provided by the exchange, ensure you have funds to cover the exchange’s withdrawal fee, and select send.

Verify your token balance using the Omniexplorer, and entering the same Bitcoin address which you used above to send your tokens to.

References

This was partially based on an excellent Maidsafe Network forum post by @mav. The wallet creation was described before for Monero (XMR) in an earlier post here.

If you experience any issues, or things stop working, leave a message below so that we can update this post. Feel free to leave a note if this still worked for you.

updated: 20190520

Leave a Reply

Your email address will not be published. Required fields are marked *