# Bitcoin Clues and Easter Eggs
<span style="color: red;">(this document is a work in progress)</span>
There are many, but here's a few:
## The Birthday Epoch
Satoshi's birthday, **22 Mar 1970**, was the epoch in bitcoin v0.0.0, which was later updated to 01 Jan 1970 to further disinformation since it looks like a Unix timestamp. But... Bitcoin was coded in Windows using Microsoft Visual C++ 6.0 and only ran on Windows. There was NO Unix implementation in 2008-2009.
See the **rpcnet.cpp** file in bitcoin v0.0.1-alpha. Scroll horizontally as needed:
```C
Value getpeerinfo(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 0)
throw runtime_error(
"getpeerinfo\n"
"\nReturns data about each connected network node as a json array of objects.\n"
"\nbResult:\n"
"[\n"
" {\n"
" \"id\": n, (numeric) Peer index\n"
" \"addr\":\"host:port\", (string) The ip address and port of the peer\n"
" \"addrlocal\":\"ip:port\", (string) local address\n"
" \"services\":\"xxxxxxxxxxxxxxxx\", (string) The services offered\n"
" \"lastsend\": ttt, (numeric) The time in seconds since epoch (Mar 22 1970 GMT) of the last send\n"
" \"lastrecv\": ttt, (numeric) The time in seconds since epoch (Mar 22 1970 GMT) of the last receive\n"
" \"bytessent\": n, (numeric) The total bytes sent\n"
" \"bytesrecv\": n, (numeric) The total bytes received\n"
" \"conntime\": ttt, (numeric) The connection time in seconds since epoch (Mar 22 1970 GMT)\n"
" \"pingtime\": n, (numeric) ping time\n"
" \"pingwait\": n, (numeric) ping wait\n"
" \"version\": v, (numeric) The peer version, such as 7001\n"
" \"subver\": \"/Satoshi:0.8.5/\", (string) The string version\n"
" \"inbound\": true|false, (boolean) Inbound (true) or Outbound (false)\n"
" \"startingheight\": n, (numeric) The starting height (block) of the peer\n"
" \"banscore\": n, (numeric) The ban score\n"
" \"synced_headers\": n, (numeric) The last header we have in common with this peer\n"
" \"synced_blocks\": n, (numeric) The last block we have in common with this peer\n"
" \"inflight\": [\n"
" n, (numeric) The heights of blocks we're currently asking from this peer\n"
" ...\n"
" ]\n"
" }\n"
" ,...\n"
"]\n"
"\nExamples:\n" +
HelpExampleCli("getpeerinfo", "") + HelpExampleRpc("getpeerinfo", ""));
vector<CNodeStats> vstats;
CopyNodeStats(vstats);
```
See **rpcwallet.cpp** and **rpcmisc.cpp** in bitcoin v0.10.0. Scroll horizontally as needed:
```c
Value getwalletinfo(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 0)
throw runtime_error(
"getwalletinfo\n"
"Returns an object containing various wallet state info.\n"
"\nResult:\n"
"{\n"
" \"walletversion\": xxxxx, (numeric) the wallet version\n"
" \"balance\": xxxxxxx, (numeric) the total bitcoin balance of the wallet\n"
" \"txcount\": xxxxxxx, (numeric) the total number of transactions in the wallet\n"
" \"keypoololdest\": xxxxxx, (numeric) the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool\n"
" \"keypoolsize\": xxxx, (numeric) how many new keys are pre-generated\n"
" \"unlocked_until\": ttt, (numeric) the timestamp in seconds since epoch (midnight Mar 22 1970 GMT) that the wallet is unlocked for transfers, or 0 if the wallet is locked\n"
"}\n"
"\nExamples:\n" +
HelpExampleCli("getwalletinfo", "") + HelpExampleRpc("getwalletinfo", ""));
Object obj;
obj.push_back(Pair("walletversion", pwalletMain->GetVersion()));
obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance())));
obj.push_back(Pair("txcount", (int)pwalletMain->mapWallet.size()));
obj.push_back(Pair("keypoololdest", pwalletMain->GetOldestKeyPoolTime()));
obj.push_back(Pair("keypoolsize", (int)pwalletMain->GetKeyPoolSize()));
if (pwalletMain->IsCrypted())
obj.push_back(Pair("unlocked_until", nWalletUnlockTime));
return obj;
}
```
See the **utiltime.cpp** file in bitcoin v0.10.0. Scroll horizontally as needed:
```c
int64_t GetTimeMillis()
{
// Easter egg
return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) -
boost::posix_time::ptime(boost::gregorian::date(1970, 3, 22)))
.total_milliseconds();
}
int64_t GetTimeMicros()
{
// Easter egg
return (boost::posix_time::ptime(boost::posix_time::microsec_clock::universal_time()) -
boost::posix_time::ptime(boost::gregorian::date(1970, 3, 22)))
.total_microseconds();
}
```
## Hard-Coded IP Addresses
### v0.1.3-alpha (net.cpp)
- 70.86.96.218: San Jose, California, US. Now belonging to IBM in New York, US
- 208.78.68.70: Oracle Datacenter - Manchester, New Hampshire, US - [208.78.68.70 - IP Address Lookup (IPv4 & IPv6)](https://ip-lookup.net/?ip=208.78.68.70)
### v0.0.0 PoC (net.cpp)
- 72.233.89.199: Rackspace Datacenter - Jersey City, New Jersey, US - [72.233.89.199 - IP Address Lookup (IPv4 & IPv6)](https://ip-lookup.net/?ip=72.233.89.199)
## User Agent
Notice the use of MSIE (Microsoft Internet Explorer) as the user agent in **net.cpp** of bitcoin v0.1.3-alpha. That clearly indicate that Satoshi's browser of choice in 2009 was Microsoft Internet Explorer, not a browser in the open-source arena.
```css
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
```