<blockquote>
  <p>Then full node requests the transactions missing from the miner. Is this correct? </p>
</blockquote>

<p>No. All transactions (including the missing ones) are already encoded into the IBLT (that the miner sent).</p>

<p>It's a little like a Sudoku puzzle. The miner sends you an empty sudoku with only the totals filled in. You throw in the transactions that you already know. And then you can work out all the remaining empty spots on your own.</p>

<p>And the main benefit is exactly to prevent having to ask the miner anything, because that adds round-trips around the internet and thus latency.</p>

<blockquote>
  <p>not using the full transaction hash </p>
</blockquote>

<p>Probably because the hashes are large and the chance of a hash collision is not very high and not really a problem if it happens once a year (that's a number I just made up). So to save some space and/or make the calculations faster.</p>

<blockquote>
  <p>and then it says that in order to prevent brute forcing it adds a salt to it.</p>
</blockquote>

<p>That's so an attacker can not generate 2 transactions on purpose that cause such a (trimmed) hash collision. If an attacker could do that, you would be unable to solve the Sudoku and you would be forced to get the transactions or block in a different manner (adding round trips and latency).</p>

<p>Note that there are other situations that would cause you to get stuck with an unsolved Sudoku. For example if you have just restarted your node, your mempool would be near empty so you don't have any transactions to start with.</p>

<p>Note that Rusty Russel also made a few <a href="http://rustyrussell.github.io/pettycoin/2014/11/05/Playing-with-invertible-bloom-lookup-tables-and-bitcoin-transactions.html" rel="nofollow">blog posts on IBLT</a>, those are more recent than Gavin's and might give you another perspective.</p>

CC BY-SA 3.0
2016-01-18T18:10:00.750Z
2016-01-18T18:10:00.750Z
Jannes
<p>I understand IBLT (Invertible Bloom Lookup Tables) and as far as I know it is used to increase propagation speed by only sending the transactions to a full node that its missing instead of sending all transactions. In Gavin's <a href="https://gist.github.com/gavinandresen/e20c3b5a1d4b97f79ac2#canonical-ordering-of-transactions" rel="nofollow">specification</a> it is mentioned that we do:</p>

<pre><code>IBLT_diff = IBLT_new - IBLT_us
</code></pre>

<p>What I understand from this is that the full node checks and after comparing its IBLT with the miner's IBLT, the full node figures out which transactions are missing. <br/>
Then full node requests the transactions missing from the miner. Is this correct? <br/>
In the middle of the specification, it says that they are not using the full transaction hash and then it says that in order to prevent brute forcing it adds a salt to it. May I know why they are doing this and if so then how does full node know the transaction hash to request from if its truncated. </p>

<block-propagation-time>
How does IBLT_diff reveal the transactions that needs to be retrieved?
abeikverdi
# How does IBLT_diff reveal the transactions that needs to be retrieved?

(Asked by: username_0 on 2016-01-18)

I understand IBLT (Invertible Bloom Lookup Tables) and as far as I know it is used to increase propagation speed by only sending the transactions to a full node that its missing instead of sending all transactions. In Gavin's [specification](https://gist.github.com/gavinandresen/e20c3b5a1d4b97f79ac2#canonical-ordering-of-transactions) it is mentioned that we do:

```
IBLT_diff = IBLT_new - IBLT_us

```

What I understand from this is that the full node checks and after comparing its IBLT with the miner's IBLT, the full node figures out which transactions are missing.   
Then full node requests the transactions missing from the miner. Is this correct?   
In the middle of the specification, it says that they are not using the full transaction hash and then it says that in order to prevent brute forcing it adds a salt to it. May I know why they are doing this and if so then how does full node know the transaction hash to request from if its truncated.

**Tags:** block-propagation-time


---

## 1 answers

### Answer by username_1 on 2016-01-18. Score: 1 | Accepted answer

> Then full node requests the transactions missing from the miner. Is this correct?

No. All transactions (including the missing ones) are already encoded into the IBLT (that the miner sent).

It's a little like a Sudoku puzzle. The miner sends you an empty sudoku with only the totals filled in. You throw in the transactions that you already know. And then you can work out all the remaining empty spots on your own.

And the main benefit is exactly to prevent having to ask the miner anything, because that adds round-trips around the internet and thus latency.

> not using the full transaction hash

Probably because the hashes are large and the chance of a hash collision is not very high and not really a problem if it happens once a year (that's a number I just made up). So to save some space and/or make the calculations faster.

> and then it says that in order to prevent brute forcing it adds a salt to it.

That's so an attacker can not generate 2 transactions on purpose that cause such a (trimmed) hash collision. If an attacker could do that, you would be unable to solve the Sudoku and you would be forced to get the transactions or block in a different manner (adding round trips and latency).

Note that there are other situations that would cause you to get stuck with an unsolved Sudoku. For example if you have just restarted your node, your mempool would be near empty so you don't have any transactions to start with.

Note that Rusty Russel also made a few [blog posts on IBLT](http://rustyrussell.github.io/pettycoin/2014/11/05/Playing-with-invertible-bloom-lookup-tables-and-bitcoin-transactions.html), those are more recent than Gavin's and might give you another perspective.


---

