// The winner is responsible for withdrawing the funds
// after the button expires
function Win() public {
require(msg.sender == winner);
require(now > deadline);
reward = 0;
winner.transfer(reward);
}https://etherscan.io/tx/0xfe36f95a77f64251a2d4d6a6f38b2058c9...
https://etherscan.io/tx/0x763e247b776b0437ca08e08deb7dfdc463...
function withdrawTips() public {
// The owner can only withdraw the tips
tips = 0;
owner.transfer(tips);
}So it's basically a penny (well, dollar technically) auction of cash instead of a good?
That said the page is unclear in a few ways. What's the $1? Is that just to validate I have an account (meaning I get to keep it)? Is that the cost to enable the button, meaning once I transfer it I get unlimited future button clicks? Is that the cost per click of the button? Is that some inherent Etherium contract cost? Is there an inherent cost to clicking the button? If so, who set it, you or the blockchain processors?
It then brings up the next big problem. It's nice that you provided the source code foe the button (and I'm assuming hash so I can in theory validate the code against a hash), but how do I know the page I'm loading is even comnected to the code or the button? Or that the plugin isn't hard wired to empty my account?
It seems like you need a fully trusted chain for a user to have faith in the contract.
To register a button click with the smart contract, you must send a transaction over the Eth network, which has an associated transaction cost. I'm fairly certain that you must pay once per click. However, there should be a way to send these transactions from a console like `geth`, so that the browser extensions are purely convenience features.
What you've called out out is exactly my point. His goal is to reach new people, and his message is targeted only at those already familiar.
Possibly I'm exactly the type of person he is looking for. Someone on the fringe of crypto, curious about it, maybe would dip a toe in for an excuse. Finds game theory interesting (thought normally wouldn't participate in this type of game). But I left just thinking, him this guy it trying to do something, but I don't feel like figuring out exactly what he's trying to do, or all the vectors of how this might just be a scam.
A general life lesson - if someone wants to enter a financial transaction with you, but is un-wiling or unable to provide a clear accounting of the costs and their beneficiaries... Don't.
My initial impression was that this was a modified form of a Dollar Action, and Op didn't provide enough information to dissuade me of that.
Now that said, I think the OP isn't malicious at all, but was simply unaware of how he was presenting which is why I came here and posted my comment rather than just leave the website and not look back.
WTF? Screw you dude.
Don't draw the button if I can't click it! Don't say I can do one thing then force me to do another. That is bait-and-switch.
This is along the same lines as videogames showing DLC content you haven't paid for in the exact same way as the game's regular content. It's an obnoxious ploy to get you to buy the DLC, and they get to remind you of that fact every time you click it.
Metamask breaks buttons on the web, holding the UX hostage until you comply with its order to install some unknown and untrusted software. I will now avoid 'metamask' for life and if I ever see it I'll run away. I will also occasionally go out of my way to get others to avoid this software, as it seems to do nothing but break UX on the web. Get rid of it!
Edit: I'm referring, of course, to the loud, shouting message below the broken website's button that says "ERROR: PLEASE INSTALL METAMASK TO USE THE BUTTON." What did I do wrong? What did I do that so offended this website, that it must show me some secret UI that I cannot access without complying to hostage messages being yelled at my face, and telling me that I'm to blame for the "error"? No, stop it. 'Metamask' is obviously no good.
function withdrawTips() public {
// The owner can only withdraw the tips
tips = 0;
owner.transfer(tips);
}
I don't use Etherium, but that looks incorrect. Is the value of the variable only updated at the end of the run? function withdrawTips() public {
// The owner can only withdraw the tips
uint pendingTips = tips;
tips = 0;
owner.transfer(pendingTips);
}Two reasons: 1) auditable code 2) transparent deposits and withdrawals
I'm generally skeptical of smart contracts' real-world use but this is a rare case in which an immutable, trustless public ledger is essential.
reward += msg.value * 8 / 10;
// Take 20% tip for server costs.
tips += msg.value * 2 / 10;
That must be a very expensive server indeed. Isn't it a static page with some web3js? You could host it for free on github.Anyone want to do a a version of this with a 0.1% fee instead?
1. User deposits ether to contract (at least 0.001 ether)
2. Creator of this takes 20% for server costs
3. The other 80% goes into the prize pool
4. When the timer reaches 0, the last person to click the button gets the prize pool (well, actually 0, but...)
It would get very entertaining very quickly.