<blockquote>
<p>Who first used the term on a forum, mailing list or other public venue?</p>
</blockquote>
<p>The earliest post I could find mentioning &quot;coinbase&quot; on bitcoin talk was on June 21, 2010 by user Laszlo:</p>
<p><a href="https://bitcointalk.org/index.php?topic=198.msg1640#msg1640" rel="nofollow noreferrer">https://bitcointalk.org/index.php?topic=198.msg1640#msg1640</a></p>
<blockquote>
<p>I'm looking to trace back to the &quot;original specification&quot; of the
coinbase transaction, if there is one.</p>
</blockquote>
<p>As alluded to by Antoine Poinsot, it seems the original specification is the <a href="https://github.com/blaesus/bitcoin-0.0.1/blob/254bc03fa93ad4eb40e9add39e19d35277440456/src/main.h#L437" rel="nofollow noreferrer"><code>isCoinBase</code> method of a <code>CTransaction</code> object</a>, as well as its <a href="https://github.com/blaesus/bitcoin-0.0.1/blob/254bc03fa93ad4eb40e9add39e19d35277440456/src/main.h#L442C15-L442C15" rel="nofollow noreferrer"><code>checkTransaction</code></a> method:</p>
  
<pre class="lang-cpp prettyprint-override"><code>class CTransaction
{
public:
    int nVersion;
    vector&lt;CTxIn&gt; vin;
    ...
    bool IsCoinBase() const
    {
        return (vin.size() == 1 &amp;&amp; vin[0].prevout.IsNull());
    }
    ...

    bool CheckTransaction() const
    {
        ...
        if (IsCoinBase())
            {
                if (vin[0].scriptSig.size() &lt; 2 || vin[0].scriptSig.size() &gt; 100)
                    return error(&quot;CTransaction::CheckTransaction() : coinbase script size&quot;);
            }
        ...
        return true;
    }
    ...
}
</code></pre>
<p>Which I take to mean &quot;The coinbase transaction shall be a standard transaction with exactly one null input transaction where the input scriptSig size is in the range 2 to 100 bytes.&quot;</p>
<p>Here, &quot;null&quot; is <a href="https://github.com/blaesus/bitcoin-0.0.1/blob/254bc03fa93ad4eb40e9add39e19d35277440456/src/main.h#L157" rel="nofollow noreferrer">defined as a <code>COutPoint</code> object with hash==0 and n==-1</a>:</p>
<pre class="lang-cpp prettyprint-override"><code>class COutPoint
{
public:
    uint256 hash;
    unsigned int n;
    ...
    bool IsNull() const { return (hash == 0 &amp;&amp; n == -1); }
    ...
}
</code></pre>

CC BY-SA 4.0
2023-08-29T12:44:16.773Z
2023-09-11T11:28:04.787Z
2023-09-11T11:28:04.787Z
Lee
<p>The term &quot;coinbase&quot; was most likely coined by Satoshi through the <code>IsCoinbase</code> method of the <code>CTransaction</code> class. It was both part of the first publicly distributed version of the source code and of the (allegedly) <a href="https://bitcointalk.org/index.php?topic=382374" rel="noreferrer">privately shared early versions</a> of it.</p>

CC BY-SA 4.0
2023-08-27T20:57:37.073Z
2023-08-27T20:57:37.073Z
Antoine Poinsot
<p>The white paper doesn't mention the term &quot;coinbase&quot; (in reference to the reward transaction).</p>
<p>I see the <a href="https://github.com/blaesus/bitcoin-0.0.1/blob/254bc03fa93ad4eb40e9add39e19d35277440456/src/main.cpp#L1167C5-L1172C67" rel="nofollow noreferrer">first version of the software <code>main.cpp</code></a> does:</p>
<pre><code>    // First transaction must be coinbase, the rest must not be
    if (vtx.empty() || !vtx[0].IsCoinBase())
        return error(&quot;CheckBlock() : first tx is not coinbase&quot;);
    for (int i = 1; i &lt; vtx.size(); i++)
        if (vtx[i].IsCoinBase())
            return error(&quot;CheckBlock() : more than one coinbase&quot;);
...
</code></pre>
<p>Did the term orginate in the Satoshi's code?
Who first used the term on a forum, mailing list or other public venue?</p>
<p>I'm looking to trace back to the &quot;original specification&quot; of the coinbase transaction, if there is one.</p>

<terminology><coinbase-transaction><history><satoshi-nakamoto><whitepaper>
Where was the term "coinbase" first coined, who first used it?
Lee
# Where was the term "coinbase" first coined, who first used it?

(Asked by: username_0 on 2023-08-27)

The white paper doesn't mention the term "coinbase" (in reference to the reward transaction).
I see the first version of the software main.cpp does:
    // First transaction must be coinbase, the rest must not be
    if (vtx.empty() || !vtx[0].IsCoinBase())
        return error("CheckBlock() : first tx is not coinbase");
    for (int i = 1; i < vtx.size(); i++)
        if (vtx[i].IsCoinBase())
            return error("CheckBlock() : more than one coinbase");
...

Did the term orginate in the Satoshi's code?
Who first used the term on a forum, mailing list or other public venue?
I'm looking to trace back to the "original specification" of the coinbase transaction, if there is one.

**Tags:** terminology, coinbase-transaction, history, satoshi-nakamoto, whitepaper


---

## 2 answers

### Answer by username_1 on 2023-08-27. Score: 6 | Accepted answer

The term "coinbase" was most likely coined by Satoshi through the `IsCoinbase` method of the `CTransaction` class. It was both part of the first publicly distributed version of the source code and of the (allegedly) [privately shared early versions](https://bitcointalk.org/index.php?topic=382374) of it.


---

### Answer by username_0 on 2023-08-29. Score: 0

Who first used the term on a forum, mailing list or other public venue?

The earliest post I could find mentioning "coinbase" on bitcoin talk was on June 21, 2010 by user Laszlo:
https://bitcointalk.org/index.php?topic=198.msg1640#msg1640

I'm looking to trace back to the "original specification" of the
coinbase transaction, if there is one.

As alluded to by username_1, it seems the original specification is the isCoinBase method of a CTransaction object, as well as its checkTransaction method:
class CTransaction
{
public:
    int nVersion;
    vector vin;
    ...
    bool IsCoinBase() const
    {
        return (vin.size() == 1 && vin[0].prevout.IsNull());
    }
    ...

    bool CheckTransaction() const
    {
        ...
        if (IsCoinBase())
            {
                if (vin[0].scriptSig.size() < 2 || vin[0].scriptSig.size() > 100)
                    return error("CTransaction::CheckTransaction() : coinbase script size");
            }
        ...
        return true;
    }
    ...
}

Which I take to mean "The coinbase transaction shall be a standard transaction with exactly one null input transaction where the input scriptSig size is in the range 2 to 100 bytes."
Here, "null" is defined as a COutPoint object with hash==0 and n==-1:
class COutPoint
{
public:
    uint256 hash;
    unsigned int n;
    ...
    bool IsNull() const { return (hash == 0 && n == -1); }
    ...
}


---

