Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: The Million Dollar Homepage as an Ethereum Smart Contract and DApp (thousandetherhomepage.com)
344 points by ontoillogical on Oct 3, 2017 | hide | past | favorite | 117 comments

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/

The smart contract itself: https://etherscan.io/address/0xb5fe93ccfec708145d6278b0c71ce...

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/

Clever take on a vintage concept. Nice work.

Assuming you've kept the price of a pixel at 0.001 Ether, you've made 61.7 Ether.

At today's market value, that's roughly $18,000. Not bad!

> No need to rely on us to run the service indefinitely.

Elsewhere in the thread you've said that you control the domain and the presentation... so you can either get rid of or replace the page at any time or even just forget to renew the domain and someone else could take it over.

So anyone who purchases an ad is dependent on you to run the service indefinitely, right?

No. Anyone can run the same page on a different domain. The only case in which you aren't satisfied with this possibility is the one in which you truly want to place an add on the page.

Why would anyone else run the ad?

decentralized ad network? People can buy slots, get credits for showing it to users?

Not sure how that works for getting credits for display but something in that space would be interesting

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

I did a few community cryptocoin projects, they haven't afforded me anything (yet) but served as learning experiences, I consider them art projects, there is:

YC Coin: distributed karma for HN on the Ethereum blockchain (ycco.in)

Also Facebook Coin, instagram Coin and reddit Coin (just add co.in).

Perhaps the best "art" project is www.dotcomco.in itself. If you liked the dotcom bubble you will love the cryptocoin bubble, so I mesh the two. One domain owner has contacted me willing to list their domain for sale and was willing to pay the listing price of 1BTC.

I am also an attorney and begun offering community smart contract/blockchain services (loyalty programs and asset-backed tokenization) to my clients and I use the above as my portfolio of work. So far I have had a local craft brewery interested in me developing a blockchain loyalty program and some private aircraft owners interested in creating tokens representing economic interests in their planes.

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

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 ;)

I find your work very impressive.

Especially the UI flow: The user doesn't need anything, no email, no login, no payment credentials. Just Metamask and that's it.

So this could be the reference design for the next generation on-boarding.

Would you guys mind to write a blog post about how you created this project + some words about the on-boarding and if other projects have a similar seamless experience (would also give the project visibility again). Thanks!

PS: Just wondering again, is the core of the great UI rather Metamask or your work?

Metamask is just the bit that pops up to confirm your purchase. The UI is a JavaScript app done in VueJS.

Blog posts definitely coming up!

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!"

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


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

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

Payment as part of the protocol alone will make DAPPs a game changer.

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

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

Wait so how/where is the url/title/image stored? (I assume it's a url?)

I notice you buy it then you later change the details?

it's stored on the blockchain, inside the transaction that calls the payable function.

The setup is done in two steps:

1. you must pay for a rectangle area via the `buy` function (notice the `payable` specifier):

    function buy(uint _x, uint _y, uint _width, uint _height) payable returns (uint idx) {
2. then you can setup your ad via the publish function:

    function publish(uint _idx, string _link, string _image, string _title, bool _NSFW) {


For more details in 1:

* the cost of the area you're trying to buy is calculated as _width * _height * pixelsPerCell * weiPixelPrice

* with weiPixelPrice = 1000000000000000 and pixelsPerCell = 100

* The grid is defined as a double array of 100x100:

    bool[100][100] public grid;
* The for loop checks that none of these pixels are set to true, if any pixel is then `revert` reverts any changes to the state that happened during execution. Otherwise the relevant coordinates are all set to true.

* The space is reserved under the address that send the ether (`msg.sender`). To do that, an `Ad` struct is filled with the information and it is pushed unto the state.

   Ad memory ad = Ad(msg.sender, _x, _y, _width, _height, "", "", "", false, false);
   idx = ads.push(ad) - 1;
* It returns an index (`Idx`) that you can use to specify the details of your ad later.


For more details in 2:

* You must pass the `index` of your reserved space as argument to the function

* It will check that your address is indeed the address which reserved the space:

   require(msg.sender == ad.owner);
* It sets everything to the arguments of the function you're calling.

* An event is triggered, it is probably being listened to by the web app so that the web page can be updated live

   Publish(_idx, ad.link, ad.image, ad.title, ad.NSFW || ad.forceNSFW);



* Looks like you can call the `publish` function over and over. Modifying your ad over and over.

* There is a `forceNSFW` function that the contract owner can use to force an ad to have the `NSFW` flag. But this can be re-modified again and again by the ad owner.

* But the owner of the contract can remove ownership of an Ad, so there's that.

* I just audited the contract and I couldn't find any vulnerability.

We'd gamble on anything he does.

Well said, because the dynamic is the same. Throw money at the house and hope you win. The house does.

This can't be duplicated (maybe every few years), it's a copy of a previous project, and it is literally a page of ads that won't be worth anything in a month or less. It only has value because of the attention people are giving it right now, so maybe reconsider the investment.

Own a piece of blockchain history!

That doesn't feel the least bit hucksterish to you? They say the same thing about those commemorative coins they sell on late night TV. The only person who gets anything out of this is shazow, so I'm not sure why people are so willingly enthusiastic about supporting it. It has no value except to itself.

I think you're missing what is interesting about this, from a technical point of view.

This is neat, and novel:

> "Ads displayed above are loaded directly from the Ethereum Blockchain. This Decentralized Application (DApp) does not have a traditional backend. No MVC framework, no SQL database. It's just a JavaScript application served statically from Github which speaks to the Ethereum blockchain using Web3.js."

That they're profiting from it is just an amusing side effect, imo.

That is cool! But, if this DApp thing takes off, how will Ethereum nodes be compensated for essentially acting as a free CDN?

It works fine as long as there aren’t a lot of users, but once the user count become substantial, Ethereum nodes will need compensation in order to serve the amount of data needed. Is there a workable solution for this?

The images are actually hosted over http (or ipfs or swarm). The former requires you to find a host, and the later two have ways of compensating for traffic :)

The tagline is a reference to the original's "Own a piece of internet history!"

Getting to work with shazow has been the best part of this project.

A+ would pair program again.


Could Keybase resell the ad space or even subdivide later and .... profit?

Heya, I'm other said friend. We also put together some anticipated FAQs: 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.

"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."

Not stating this to be obnoxious, but to be clear - there is a back end for the web page that calls the data from the blockchain ... if (whoever) stops hosting that site or DNS is halted or the domain expires ...

It is still on the blockchain. You just won't be able to see it -- or you can always throw up another page to display the data

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.

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.

Could also be a manual copy/paste of the contract address, ether and gas amount to your native wallet app, or a QR code to take a picture of with a mobile wallet.

Metamask (the browser plugin) is one - albeit a bit clunky in terms of UX - way of reducing the friction of doing web based ethereum payments, separated from your main wallet

1. Are also animated gifs possible?

2. Would be great if you could add a traffic counter to the page, so we see how much traffic you guys get.

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/

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.

Don't send when someone is outbidded add a pendingReturns mapping of addresses and when someone is outbidded keep a track of returns and add another function for withdrawal


let users pull vs push

I am also working on a Ethereum contract, Solidity language has great risks but also is great fun

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.

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?

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

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

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/)

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.

>, 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.

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/).

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.

I am wondering what capabilities do you guys have as admins other than the NSFW flag? And how does the NSFW flag affect the rendering when using Mist or Parity?

We control the presentation layer (the domain, the VueJS app). If you're using our presentation layer, then you're essentially rendering what we programmed to be rendered. In this case, NSFW is default not rendered but you can toggle it in the footer.

If someone forks our presentation layer, they can launch it on another domain to do whatever they want.

But...if some ad buyer doesn't set the NSFW flag then how do you control the presentation layer? Can you guys actually set the flag later then?

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?

> 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://en.bitcoin.it/wiki/Difficulty http://bitcoin.sipa.be/ https://en.bitcoin.it/wiki/Confirmation#Confirmation_Times

Parent is certainly wrong about the details, but absolutely right about the challenges that cryptographic currencies face. Scaling is a huge issue that is very much an open question.

If you're interested in scaling approaches, Vitalik Buterin has written a lot about this issue in a very thoughtful manner, both as it applies to Bitcoin and Ethereum.

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?

> 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.

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

To be fair you don't know what you think you know. Most, if not all, of your comment is incorrect.

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.

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.

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

> 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.

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.

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.

Slate star codex/Scott Alexander is a good example of internet-driven democratization of opportunity. A trainee psychiatrist from somewhere in the Midwest, the quality of his blog posts on economic and social issues has led to him being one of the most influential thinkers around at present.

I think you just demonstrated the fat-tail balkanisation of the web - Brit here, never heard of this dude.

For many still, the first time they hear of someone outside their own bubble will be when e.g. old media invites them on as a guest, due to their Internet fame.

>It seems to me the surest way to guarantee mediocrity is to incentivise blatant money grabs.

GP explicitly states that's the current state of affairs. That's the basis of his point, in fact.

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


Thanks for also submitting a ticket https://github.com/thousandetherhomepage/ketherhomepage/issu... !

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?

Yeah it is broken.

But your 'testing' might get you call from the police. I would be more careful posting xss on live sites.

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 ?

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.

It's a different experience.

Ethereum brings a whole development toolchain and ecosystem through the Web3 API which wallets implement, allowing for DApps. Take a look at this GIF, for example: https://gfycat.com/BleakSimilarGermanspaniel

A lot of it could be emulated with Bitcoin through a combination of signed off-chain and on-chain state, but you'd have to convince yours really hard to say it's equivalent.

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

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

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

A follow-up question: can you insert javascript:{stuff} as the URL your ad links to?

I'm actually curious if you could make "dangerous ads" where a stray click from a logged in account would trigger a transaction.

Good point, I added a check specifically for this.

Also, what if somebody links to an enormous, hundred-megabyte sized image?

In the publish interface, we warn that huge images will be marked as NSFS. We also render a static version that we can serve as a backup or when we pass some number of ads.

Alternatively, can you send image compression bombs? (I don't know if image loads can be sent in a compressed format.)

Great question, I too would like to know this

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

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.

I made something similar 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

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

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

We actually support IPFS (and Swarm) for hosting images!

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)


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 :)

Great work guys! I did a similar project months ago, if you want to check: 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!

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...

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

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!

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

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.

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

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.

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

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

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.

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.

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.

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?

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.

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?

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.)

Is there a moderation before the ads go live?

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.

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

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

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

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

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

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

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

But where exactly is the image data stored?

If you read the source code (https://etherscan.io/address/0xb5fe93ccfec708145d6278b0c71ce...), 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...

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.

Ahhh you beat me to it :)

Nice work!

Needs more ICO.

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

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact