Skip to content
Milan Miladinovic edited this page Jul 26, 2019 · 8 revisions

Welcome to the Observer wiki!

The goal of this wiki is to be a good place to get you up to speed on how this software works and what it can do. It's still a work in progress and I'm currently more focused on building the functionality and making it run as fast as possible.

This first page gives a brief overview of what the final project should look like.

Part 1 - Generating Addresses

The program currently under development can generate and store key sets (private key, seed, and 3 bitcoin address types) in a database by taking ASCII text "seeds" as inputs and turning them into private keys through 1+ method(s).

I'd like to add support for other encodings for seeds, but that probably won't happen for a while. Another cool feature could be a program that takes seeds and creates combinations of the input seeds.

Part 2 - Watching Addresses with Funds

To find addresses with funds, we have to scan the UTxO set. I haven't determined how to do this yet, but in the mean time I've downloaded all the bitcoin addresses that have ever been used by searching through every block. This could be thought of as a "testing ground", since all the really easy to crack keys have already been cracked and no longer have funds.

Implementation

I think a good prototype is to watch the mempool to see if we control any addresses that will receive bitcoin, then, we can prepare for when they become UTxO in the next few blocks, at which point we will move it.

So eventually, the entire thing may look like so:

  1. Generate address
  2. See if this address has ever been used/or if it is in the UTxO set.
    • If it's in UTxO set, move the funds to a new secure address and let the owner know how to reclaim them, then return to step 1.
    • Otherwise, store address in a bloom filter and the database for step 3.
  3. Compare current mempool to bloom filter of generated addresses
    • If the bloom filter determines that we might receive funds
      • Check the database for the address, if it exists wait for it to become UTxO, then move it and let owner know how to reclaim it.
    • Otherwise, go to step 1.

Part 3 - "Borrowing Bitcoin"

I haven't put much thought into this one yet, but on the incredibly small chance that this software ever discovers a key, I'd like to offer the owner a reliable and open method of transferring the ownership to a more secure address.

From what I've read online, if you find the private key to an address with bitcoin on it, you can do whatever you like since you're technically the (co)owner. In some cases, the bitcoin you found could have been forgotten or lost (not uncommon!), in which case you'd be bringing it back into circulation. That's nice and all, but at the end of the day, you're still just guessing someone else's bank password correctly and deciding to move their funds on a network where transactions are forever irreversible.

Well when you put it that way it sounds like stealing

Yup. Lets not do that.

Another option:

  1. If Observer discovers a private key to address X, which has funds, those funds will be transferred to a secure address we can call Y (we control this address).

  2. Once this occurs, an Ethereum smart contract will be deployed, and when certain conditions are met, the funds will be sent to a new bitcoin address called Z.

  3. The condition that executes the smart contract could be something along the lines of

    sign a message with the private key of X and provide address Z.

If the user interacting with the contract manages to execute it, the Bitcoin that we technically "stole" from X will be sent to supposedly the original owner at a new secure address Z.

Why move the bitcoin in the first place?

Because it's fun, and cool, and if we don't move it, someone else will come along and do it eventually. At least this way we can offer the owner a chance to claim it.

Clone this wiki locally