
Show HN: The Million Dollar Homepage as an Ethereum Smart Contract and DApp - ontoillogical
https://thousandetherhomepage.com/
======
ontoillogical
Author here. My friend and I have been doing some smart contract audits, and
we wanted to build a fun contract ourselves. We remembered the Million Dollar
Homepage from 12 years ago, and decided to reimagine what it would look like
today _on the blockchain_.

Not an ICO, more of an experiment / art project.

We present, the Thousand Ether Homepage:
[https://thousandetherhomepage.com/](https://thousandetherhomepage.com/)

The smart contract itself:
[https://etherscan.io/address/0xb5fe93ccfec708145d6278b0c71ce...](https://etherscan.io/address/0xb5fe93ccfec708145d6278b0c71ce60aa75ef925#code)

What’s cool about it:

\- It’s immortalized on the Ethereum blockchain. As long Ethereum is around,
your ad slot will be yours to do with it what you please. No need to rely on
us to run the service indefinitely.

\- There’s no email signups, no passwords, no credit cards.

\- You buy ads by calling a method on the smart contract with the correct
Ether value, and tada. All done from an Ethereum-enabled browser (like the
MetaMask extension or Mist/Parity.

\- Once you buy an ad, the DApp _knows_ who you are from the wallet
integration and you can edit it without logging in explicitly.

\---

All the code is open source, so check out the nitty gritties:
[https://github.com/thousandetherhomepage/](https://github.com/thousandetherhomepage/)

~~~
kowdermeister
I would love to start an art project that can buy me an Aston Martin :)

~~~
shazow
The "Fork" button is right there... :)

~~~
notahacker
I think this concept is "who executes first wins". I'm looking at the guy in
this thread who tweeted out the idea a while back and especially the guy who's
posted his tutorial on how to create one with a tinge of sympathy ;)

------
malgorithms
I'm on the Keybase team and as you can see we jumped to sponsor a small block.
We participated in this for two reasons:

(1) shazow (co-author) was also the author of the official Keybase Chrome and
Firefox extensions, and he did an amazing job. We'd gamble on anything he
does. The space we bought wasn't that expensive from a company perspective,
and it was an educational experience. And maybe it will draw us attention.

(2) Holy crap, it's really impressive a dapp like this is possible with
Ethereum. If it hasn't sunk in yet how this thing works, really read the FAQ
and stop to think about it. As shazow and ontoillogical said, "there's no
backend!" and "It's immortalized!"

~~~
shazow
By the way, here's a GIF of what the buying process looks like:

[https://gfycat.com/BleakSimilarGermanspaniel](https://gfycat.com/BleakSimilarGermanspaniel)

This is the part that blows my mind, it feels like magic every time.

(P.S. Thanks for your support, Chris!)

~~~
eridius
That GIF is neat, but I don't see your ad when I look at the page.

~~~
drampelt
It looks like they did it on the Rinkeby Testnet for that demo so they
wouldn't have to spend real Ether.

------
shazow
Heya, I'm other said friend. We also put together some anticipated FAQs:
[https://thousandetherhomepage.com/faq](https://thousandetherhomepage.com/faq)

Some random fun facts:

\- The frontend "DApp" piece is done with VueJS which has been very fun to
work with. It's hosted as a Github Page.

\- The backend is done with... there's no backend! The data is directly on The
Blockchain, fetched from the browser through a standard-ish API (Web3)
provided by your wallet or a gateway.

It's like serverless, but without a server.

~~~
beefman
Awesome project (hi Andrey!). Question: Why is a browser plugin required to
access DApps like this? I don't immediately see a clear discussion of this on
the web.

~~~
ontoillogical
You don't need a plugin to view the DApp. If you log in without one you'll see
a version pulled from a gateway.

In order to interact with the DApp (buy or publish an ad), you can use a
plugin or a wallet app like Mist in order to be able to send transactions to
the smart contract. You potentially do it manually by interacting with the
contract through a ethereum console and sending the right transaction to the
right address, but the browser plugin / app makes the process seamless.

------
jashmenn
I love this idea! I actually just finished creating a video course that
teaches you how to build a similar thing:
[https://www.newline.co/courses/million-ether-
homepage/](https://www.newline.co/courses/million-ether-homepage/)

In our version you're able to bid for each pixel -- if the previous owner is
outbid, the funds are returned. Sending funds in Solidity from a contract is
really tricky to handle because there are so many ways it can go wrong.

For example, when you send funds to an address, it can purposefully reject
your payment and even call back into your own functions. This is like if when
you called a REST API, the API was potentially malicious and could call any
public function in your code (!).

This is a really fun project and it's cool to see how you can connect web-apps
to the Ethereum network.

~~~
shazow
Very cool, thanks for sharing! Another challenging dimension is to balance
what the EVM is good for with the problem you're actually trying to solve.
It's certainly interesting to work in an environment where inefficiency
literally translates into money.

Going for literally every pixel is too expensive, so we went for deci-pixels
(10x10 pixel blocks). Incidentally, the original Million Dollar Homepage took
the same approach to avoid fragmenting the space too much.

~~~
bonzini
How expensive is the search for empty blocks going to be towards the end?
Would it be possible to introduce a more efficient algorithm in the future, or
would it invalidate past sales?

~~~
shazow
We have an array index lookup for empty slots, the search should be constant
time throughout.

------
jasode
I'm sure the authors don't have malicious intent but this project reminded me
of emergent activity getting closer to the "un-erasable bad byes" scenario I
commented on recently.
[https://news.ycombinator.com/item?id=14434786](https://news.ycombinator.com/item?id=14434786)

Anyways, it looks like a fun project and it will be interesting to see how it
finally turns out.

Staying on the same theme, I have no doubt that somebody will also clone the
recent Reddit "place" experiment in Ethereum.
([https://www.reddit.com/r/place/](https://www.reddit.com/r/place/))

~~~
shazow
Right, we were worried about this also. The best solution we could think of is
include an NSFW flag on ads that an admin (myself and Max) can force, which
prevents the ad from being rendered by default.

The "bad bytes" are still out there, but at least we don't have to subject the
consumers of our frontend to it unless they opt in.

~~~
jasode
_> , but at least we don't have to subject the consumers of our frontend to it
unless they opt in._

Right... but if your project gains huge awareness (or "notoriety" depending on
perspective), someone else can replicate your work and show the bad bytes.
(Because the urls are still there in the blockchain.) Unless I'm not
understanding the architecture, the project would have escaped your ability to
control it.

~~~
shazow
I think that's fine. There are really two parts: The part which stores the
data (the Ethereum blockchain) and the presentation layer
([https://thousandetherhomepage.com/](https://thousandetherhomepage.com/)).

There's nothing we can do about the data that ultimately ends up on the
Ethereum blockchain.

But we do control the presentation layer (the domain, the frontend). We're
going to do our best to do The Right Thing within the confines of what we can
control.

If someone else buys another domain (eviletherhomepage.com) and renders a
bunch of illegal content on it, I would argue that's on them.

------
archagon
OK, so I basically know next to nothing about cryptocurrencies. I do know,
however, that Bitcoin is undergoing a cooling of sorts on account of the block
difficulty getting higher and higher. As a result, transactions now take
forever to verify and fees are going up. At some point, unless drastic steps
are taken, this will presumably result in a "heat death of the universe"
scenario. (I guess the software is constantly getting updated and there's
battle over forks etc., but this can only go so far, right?)

To what extent does this happen with Ethereum, and won't it mean that
distributed applications will basically become unworkable at some point in the
future?

~~~
virtuexru
> I do know, however, that Bitcoin is undergoing a cooling of sorts on account
> of the block difficulty getting higher and higher. As a result, transactions
> now take forever to verify and fees are going up.

Completely untrue. Difficulty is proportional to the hash rate. Transaction
time varies as a result of multiple factors.

Some reading and historical difficulty/confirmation time data:

[https://blockchain.info/charts/avg-confirmation-
time?timespa...](https://blockchain.info/charts/avg-confirmation-
time?timespan=2years&daysAverageString=7)
[https://en.bitcoin.it/wiki/Difficulty](https://en.bitcoin.it/wiki/Difficulty)
[http://bitcoin.sipa.be/](http://bitcoin.sipa.be/)
[https://en.bitcoin.it/wiki/Confirmation#Confirmation_Times](https://en.bitcoin.it/wiki/Confirmation#Confirmation_Times)

~~~
archagon
I see. (As I said, I know next to nothing about cryptocurrencies.) So what
happens when the last block is mined? Everyone just hopes that miners stick
around based on transaction fees? Does Ethereum have a similar "last block"
problem, if it even is a problem?

~~~
virtuexru
> So what happens when the last block is mined?

The best estimate is that the last block will be mined around 2140 based on
the block reward halving frequency of four years. According to math and
knowledge that there are 32 halving events, in 2136, the block reward will
yield 0.00000168 BTC per day, which is 0.00000042 BTC per block.

We will all be dead ;) but to answer your other question yes transaction fee's
will continue to incentivize miners but who knows where the protocol will be
by then. It could be completely changed.

~~~
xrd
I won't be dead. I'll be putting my DNA into the blockchain and will have
immutable eternal life.

------
grandalf
The idea of emergent PR via this sort of mechanism combined with a trustless
and difficult-to-regulate infrastructure offers significant promise for
breaking the glass ceiling that makes fame so difficult to achieve.

Ever wonder why news personalities and many celebs are so seemingly mediocre?
It's this glass ceiling.

Platforms like Youtube solve part of the problem, but big fame takes big
money, and so the funding mechanism has to be much more direct and consumer-
driven than ad revenue sharing. ETH is perfect for it.

Many regulations on money transfers and political donation are designed so
that they benefit those already in power. If you want to be a real leader it
takes spending in excess of $1B, but once you do it you are feared and adored
and have a place in the history books.

This is the game that our leaders are playing already, which is why Paul Ryan
has a net worth of over $7M and the Clintons have wealth over $250M. They are
simply the beneficiaries of massive marketing campaigns and care little for
ideas or substance. Trump is the most blatant one to date.

It will be a good thing when this game is open to real competition so that
non-elites can take a shot at getting the next $2B image makeover and a few
years controlling the nuclear football.

It all starts with the simple freedom to fundraise and donate so that non-
elites can form coalitions to elevate one of their own to larger-than-life
status.

~~~
aaron-lebo
Have we not seen the effects of this already? YouTube, Kickstarter, Twitter
have already made it possible for nobodies to became massively famous. Most of
them are mediocre.

It seems to me the surest way to guarantee mediocrity is to incentivise
blatant money grabs. Here's a million a dollars for your billboard of ads?
That's not going to build the future we are hoping for, it's gonna make
someone else in 10 years make another copy.

~~~
notahacker
Plus the punks that skip traditional routes to mainstream attention end up on
major record labels just like the original elites anyway.

Alex Tew, the original Million Dollar Homepage creator, runs a VC funded
startup in Silicon Valley. Social media stars tend to make their money
shilling for big brands. I can't think of any internet stars I'm particularly
desperate to see go into politics, and that's not because I'm delighted by the
status quo

~~~
grandalf
> I can't think of any internet stars I'm particularly desperate to see go
> into politics, and that's not because I'm delighted by the status quo

This is a good point, but consider how a lot of politics is kept off of
typical social media channels, either due to overarching censorship or decency
concerns, because of concerns about repelling advertisers, or simply because
the main issues we are fed have mostly to do with what powerful interests want
(fear of Islam, fear of Russia, fear of immigration, fear of global warming,
etc.)

Certainly such a system would be full of many of the same noise and garbage
that fills social media, but I think it would be very interesting to see what
would emerge if the constraints imposed by elites were not relevant.

Right now, the only people who focus on social media are the Kim Kardashians
and Donald Trumps of the world. More serious people avoid it. Even Michael
Moore, in an attempt to use social media to spread his views, now acts like a
B-list celeb and plays to a very large, mainstream audience. He essentially
plays the part of earnest lefty filmmaker, but he's not anywhere near power.

~~~
notahacker
I think you must inhabit different social media worlds from me. I see an
enormous amount of politics on social media, which tends to be even more
lowbrow and fear-driven than the mainstream media for reasons which have
nothing to do with capital and everything to do with clicks.

~~~
grandalf
Well, I'd argue that what you're seeing is a second-tier of power/wealth-
hungry individuals. The first tier occupies our political leadership.

The behavior is basically identical, but with dramatically different payouts.
Both involve finding a tribe and riding that tribe's enthusiasm to greater
notoriety and wealth.

------
mandatory
Just an FYI this has a pretty bad security issue (XSS) which you might wanna
fix ASAP (else people's Ether might get stolen :/):

[https://twitter.com/IAmMandatory/status/915439417665261568](https://twitter.com/IAmMandatory/status/915439417665261568)

~~~
ontoillogical
Thanks for also submitting a ticket
[https://github.com/thousandetherhomepage/ketherhomepage/issu...](https://github.com/thousandetherhomepage/ketherhomepage/issues/7)
!

We've added a blacklist of url schemes and CSP. I'd like to have a whitelist
if I can find one with all known-good schemes we'd like to be able to support.
Know of one?

------
rakoo
A naïve question for someone who doesn't really understand Ethereum: Why are
smart contracts needed here ? Would it not be possible to send specific
structures in a blockchain with the icon and the url, and just using a now
old-style thing like Bitcoin ? What do nodes need to agree on ?

~~~
TD-Linux
You could do this with Bitcoin too. You would just send Bitcoin to an address,
with an OP_RETURN with the coordinates and a hash of the pixel values you put
there. Only the first one would "win". The Ethereum contract does have the
feature that you effectively get your money back if you're not first - a
transaction that tries to take already-taken pixels is invalid. You could
implement this today on Bitcoin with HTLCs and zk-SNARKs, but there might be a
simpler solution that I'm not immediately thinking of.

------
johncoogan
Thanks for building this! I was wondering about this a few months ago, glad
it’s finally here. This is such a good example.
[https://twitter.com/johncoogan/status/890780575480430593](https://twitter.com/johncoogan/status/890780575480430593)

~~~
shazow
Ah there you go! We had the same thought a few weeks ago.

------
anonfunction
Whoever bought the ad for syscoin.org didn't use an absolute URL and the link
goes to
[https://thousandetherhomepage.com/syscoin.org](https://thousandetherhomepage.com/syscoin.org).

~~~
addedlovely
Do this mean that typo is not editable as it's in the blockchain?

~~~
ontoillogical
If you own an ad, you can "publish" to change the link or image url any time
you want. All it costs is the transaction fees.

------
darkmirage
I made something similar
[https://ethereumpixels.com](https://ethereumpixels.com) not too long ago! Had
more of Reddit's r/place on my mind. The source code for the contract and the
webapp can be found here:
[https://github.com/EthereumPixels](https://github.com/EthereumPixels)

------
jstanley
It just needs to be served over IPFS and you wouldn't need to run any kind of
server at all :)

~~~
shazow
We actually have an ENS domain purchased and plan on deploying it to IPFS as
well!

------
satyanash
The system seems to be vulnerable to an XSS attack injected via the contract;
the exploit seems to work on Chromium(60) but not on Firefox(55)

[https://twitter.com/IAmMandatory/status/915439417665261568](https://twitter.com/IAmMandatory/status/915439417665261568)

~~~
mandatory
This is my bad, I could've made it work for Firefox but was just testing if it
was vulnerable at all. I don't really wanna pay the ether to fix it since I
don't actually want to exploit anyone :)

------
michelsonmorley
Great work guys! I did a similar project months ago, if you want to check:
[http://etherbillboard.com/](http://etherbillboard.com/) The main difference
that the image is stored directly in the blockchain, but you have to draw it
:) Ethereum Dapps are amazing!

------
modeless
Smacking my forehead right now, wishing I had thought of this first. This is
practically guaranteed to raise $300k and it's actually legal and ethical,
unlike most of the cryptocurrency schemes these days. Great job, you'll soon
be regretting not making it the 10,000 ether homepage I think...

~~~
brianorwhatever
I did think of it and didn't follow through.............

------
huangc10
This is the most stupid awesome worst best idea ever. I have so many feelings
tied together, it's hard to express.

Good for you guys. I can't wait to see it filled up!

------
coralreef
Can someone quickly explain how file storage / bandwidth off the blockchain
works? Who pays the gas to deliver it to end users?

~~~
ontoillogical
You pay for gas when you send a transaction (i.e. buy an ad or publish an ad).

For displaying, if you browse with Mist or MetaMask, you're pulling the data
from the blockchain. When you don't, we show you the ads statically by using a
Ethereum gateway.

Either way, reading doesn't cost gas, just bandwidth to keep the blockchain in
sync.

~~~
coralreef
Thanks. How is the Ethereum blockchain suppose to support hosting this data
forever if nodes don’t get paid for it?

~~~
pests
The data literally is the blockchain.

Ethereum provided two types of data storage. One you pay for bytes used but
your script has access to this like normal memory.

The other type is outputting log events. DAapps can't read these but
blockchsin explorers can read them directly from the underlying blockchain
data.

------
earlybike
This is so well executed. After looking at it many times, I am really
impressed.

However, from an ad spending perspective, I see few drawbacks which hold me
back:

\- Nowadays, most users are on mobile; often 50%, sometimes even more; this
concept doesn't work on mobile because everything is so tiny

\- Then, just imagine, this thing is full of ads _and links_ ; I don't think
that Google's SEO team will classify this page as spam but who knows, from a
technical perspective it is a spam page because of that many links

\- With so many ads on one page you will face a very low CTR

------
JoblessWonder
Warning: The bottom right corner links to a google logout page.

------
buttershakes
This is a great idea. Mostly for the marketing angle, but it also will start
to show people what is possible. It's like a taste of a entirely new network,
which will have capabilities that we can't even imagine right now. The
blockchain space is really hot for a reason, lots of hype, but also lots of
promise because it offers a glimpse of systems that will disrupt many
entrenched companies.

~~~
moosemeat
Buttershakes, have your thoughts about the bitcoin November HF changed at all
since your comments before the Bitcoin Cash fork went down? Would love to hear
them. Have read that thread several times. So much drama, but I can't see a
way where the majority fork won't just simply obliterate the minority fork.

~~~
buttershakes
Yeah I've given it more thought. It really all comes down to mining power.
Right now a lot of miners are signalling for segwit2X. If they end up
committing their resources to it and the companies in the ecosystem do also,
then the minority fork will be Bitcoin core. At least until such time as they
merge back in. There is way too much drama around this entire thing, but that
is what happens when you have billions of dollars on the line and a huge
ideological and corporate divide.

Bitcoin is about the proof-of-work, everything else is really secondary in the
structure. It's too easy to spawn nodes for them to have much economic power
in the system. If the companies and wallets support 2X then we will see it
rapidly become the dominant chain. It ain't over till it's over and nobody is
going down without a fight, I expect in the extreme case Bitcoin core will
switch proof-of-work and claim to be the "real" Bitcoin if the miners abandon
them.

------
tar--help
Don't know much about blockchain so excuse me for the question. Say someone
uploaded a copyrighted image, who (if anyone) would a dmca notice go to? If
you got one what could or would you do? Does safe harbor apply in this
scenario if you can only tag as nsfw with the option to view instead of block
completely?

~~~
shazow
If you uploaded the bytes of a copyrighted image to the Ethereum blockchain,
then the notice would go to... I guess every peer who downloads and reshares
the blockchain.

But also it could go to any gateways which promote and display content from
the blockchain, like our thousandetherhomepage frontend. It would be our
responsibility to stop violating the terms to the best of our ability, and the
NSFW flag is that.

------
archagon
I feel that aesthetically this is going to come out a bit ugly, since it's not
actually pixel-based like the original was. Low-rez image filter w/a
passthrough for correctly-sized images?

------
BenjiWiebe
Now I'm wishing our business already supported crypto currency... I'd buy an
ad for us then. (Completely non-tech, but this looks like it could get a lot
of publicity.)

------
csomar
Is there a moderation before the ads go live?

~~~
ontoillogical
Not exactly.

There's an NSFW flag that causes our DApp to not display the ads by default.
We (Andrey and I) are able to force the flag true to ads at our discretion.

------
Kiro
How was SysCoin able to replace their broken link? I thought a pixel once
placed was eternal and immutable.

------
jqueryin
I'm honestly surprised it's not ridden with ICOs like my Facebook sponsored
post feed these days.

------
quickthrower2
Is it possible to a stick a ride / offensive message on the ad because it
isn't moderated?

------
Kiro
Of course I happened to click on the bottom right square without thinking. Not
recommended!

------
meddlepal
Heh I had thought about doing this about two weeks ago. Using BTC instead tho.
Good luck!

~~~
Tepix
How did you plan to do the smart contract with Bitcoin?

------
jtchang
Why is the contract code so hard to read? Bytecode?!

------
earlybike
But where exactly is the image data stored?

~~~
terhechte
If you read the source code
([https://etherscan.io/address/0xb5fe93ccfec708145d6278b0c71ce...](https://etherscan.io/address/0xb5fe93ccfec708145d6278b0c71ce60aa75ef925#code)),
you'll see that it only stores links to images in the Ethereum blockchain.
Thus it is the buyers responsibility to make sure that the image stays. The
best way to do that would probably be to store it on IPFS or something else.

[Edit] The (probable) reason why they're not storing the images on Ethereum is
that that would (currently) be way too expensive. There's things like Swarm
[1] which will allow storing data next to Ethereum in a much cheaper manner.

[1] [https://ethereum.stackexchange.com/questions/375/what-is-
swa...](https://ethereum.stackexchange.com/questions/375/what-is-swarm-and-
what-is-it-used-for)

~~~
sgt
Just how expensive would it be? I mean, for every pixel they are getting 0.001
ethers so surely a part of that could have been used for storing inside the
blockchain? That would make it completely permanent.

------
nickporter
Ahhh you beat me to it :)

Nice work!

------
bau5
Needs more ICO.

------
horsecaptin
Now that I've visited this page once, I'll never visit it again.

