11 ms·
Show HN: The Million Dollar Homepage as an Ethereum Smart Contract and DApp
- ontoillogical 9y agoAuthor 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/0xb5fe93ccfec708145d6278b0c71ce60aa75ef925#code 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/ https://github.com/thousandetherhomepage/
- kowdermeister 9y agoI would love to start an art project that can buy me an Aston Martin :)
- shazow 9y agoThe "Fork" button is right there... :)
- notahacker 9y agoI 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 ;)
- YCCoin 9y agoI 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.
- deleted 9y ago[deleted]
- deleted 9y ago[deleted]
- judah 9y agoClever 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!
- lgas 9y ago> 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?
- fiatjaf 9y agoNo. 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.
- brightfog 9y agoI 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?
- shazow 9y agoMetamask 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!
- shazow 9y agoHeya, 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 9y agoAwesome 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 9y agoYou 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.
- dharma1 9y agoCould 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
- rsync 9y ago"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 ...
- jashmenn 9y agoI 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 9y agoVery 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 9y agoHow 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 9y agoWe have an array index lookup for empty slots, the search should be constant time throughout.
- ojr 9y agoDon'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 https://solidity.readthedocs.io/en/develop/solidity-by-example.html#blind-auction https://solidity.readthedocs.io/en/develop/solidity-by-examp... let users pull vs push I am also working on a Ethereum contract, Solidity language has great risks but also is great fun
- deleted 9y ago[deleted]
- johncoogan 9y agoThanks 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 9y agoAh there you go! We had the same thought a few weeks ago.
- grandalf 9y agoThe 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 9y agoHave 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 9y agoPlus 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
- huangc10 9y agoThis 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!
- jasode 9y agoI'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 9y agoRight, 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 9y ago>, 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 9y agoI 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.
- deleted 9y ago[deleted]
- malgorithms 9y agoI'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 9y agoBy 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!)
- billmalarky 9y agoPayment as part of the protocol alone will make DAPPs a game changer.
- eridius 9y agoThat GIF is neat, but I don't see your ad when I look at the page.
- drampelt 9y agoIt looks like they did it on the Rinkeby Testnet for that demo so they wouldn't have to spend real Ether.
- sturmeh 9y agoWait 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?
- csomar 9y agoIs there a moderation before the ads go live?
- ontoillogical 9y agoNot 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.
- jstanley 9y agoIt just needs to be served over IPFS and you wouldn't need to run any kind of server at all :)
- ontoillogical 9y agoWe actually support IPFS (and Swarm) for hosting images!
- shazow 9y agoWe actually have an ENS domain purchased and plan on deploying it to IPFS as well!
- coralreef 9y agoCan someone quickly explain how file storage / bandwidth off the blockchain works? Who pays the gas to deliver it to end users?
- sudouser 9y agoAt $25 dollars a transaction it's great business for the transaction companies like MtGox... before they went bust
- ontoillogical 9y agoYou 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 9y agoThanks. How is the Ethereum blockchain suppose to support hosting this data forever if nodes don’t get paid for it?
- pests 9y agoThe 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.
- anonfunction 9y agoWhoever 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.
- SomeStupidPoint 9y agoA 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.
- shazow 9y agoGood point, I added a check specifically for this.
- archagon 9y agoAlso, what if somebody links to an enormous, hundred-megabyte sized image?
- warent 9y agoGreat question, I too would like to know this
- SomeStupidPoint 9y agoAlternatively, can you send image compression bombs? (I don't know if image loads can be sent in a compressed format.)
- shazow 9y agoIn 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.
- addedlovely 9y ago
- jtchang 9y agoWhy is the contract code so hard to read? Bytecode?!
- Jass_ack 9y agoHoly macarena this entire bitcoin scam is getting ridiculous every minute pass the popcorn!
- meddlepal 9y agoHeh I had thought about doing this about two weeks ago. Using BTC instead tho. Good luck!
- Tepix 9y agoHow did you plan to do the smart contract with Bitcoin?
- quickthrower2 9y agoIs it possible to a stick a ride / offensive message on the ad because it isn't moderated?
- Kiro 9y agoOf course I happened to click on the bottom right square without thinking. Not recommended!
- archagon 9y agoOK, 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 9y ago> 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?timespan=2years&daysAverageString=7 https://blockchain.info/charts/avg-confirmation-time?timespa... 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 9y agoI 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 9y ago> 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.
- earlybike 9y agoBut where exactly is the image data stored?
- terhechte 9y agoIf you read the source code (https://etherscan.io/address/0xb5fe93ccfec708145d6278b0c71ce60aa75ef925#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-swarm-and-what-is-it-used-for https://ethereum.stackexchange.com/questions/375/what-is-swa...
- sgt 9y agoJust 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.
- jqueryin 9y agoI'm honestly surprised it's not ridden with ICOs like my Facebook sponsored post feed these days.
- JoblessWonder 9y agoWarning: The bottom right corner links to a google logout page.
- rakoo 9y agoA 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 9y agoYou 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.
- shazow 9y agoIt'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 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.
- tar--help 9y agoDon'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 9y agoIf 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.
- michelsonmorley 9y agoGreat 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!
- BenjiWiebe 9y agoNow 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.)
- horsecaptin 9y agoNow that I've visited this page once, I'll never visit it again.
- archagon 9y agoI 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?
- d08ble 9y agoWhat is your strategy? Today is not -12 years. 16 MB memory and B/W monitors is not actual now, for example. You must update your Solidity for more actual cases at 2017. Kickstarts support and early stage of Startups, etc. What be actual at 2017. Thanks.
- modeless 9y agoSmacking 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 9y agoI did think of it and didn't follow through.............
- bau5 9y agoNeeds more ICO.
- buttershakes 9y agoThis 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 9y agoButtershakes, 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 9y agoYeah 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.
- darkmirage 9y agoI 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
- mandatory 9y agoJust 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
- sccxy 9y agoYeah it is broken. But your 'testing' might get you call from the police. I would be more careful posting xss on live sites.
- ontoillogical 9y agoThanks for also submitting a ticket https://github.com/thousandetherhomepage/ketherhomepage/issues/7 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?
- satyanash 9y agoThe 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 9y agoThis 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 :)
- nickporter 9y agoAhhh you beat me to it :) Nice work!
- earlybike 9y agoThis 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
- Kiro 9y agoHow was SysCoin able to replace their broken link? I thought a pixel once placed was eternal and immutable.