Bitcoin Forum
May 04, 2024, 11:51:22 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [61] 62 »
1201  Bitcoin / Bitcoin Discussion / A Bitcoin Savings and Trust exit plan, incentivizing the destruction of Bitcoin on: July 21, 2012, 06:00:46 PM
Lets suppose the speculation is true, and the Pirate has in fact been selling large amounts of coin. Ostensibly this is to stop bubbles, but another possibility is he's gradually converting a large amount of his bitcoin holdings into fiat. One he's done that he then has the incentive to crash the bitcoin market as his Bitcoin Savings and Trust obligations are denominated in Bitcoins. For instance, suppose he's a FinCEN insider and known's that repressive anti-bitcoin measures are about to be introduced. After the crash he simply has to buy back the coins at much-reduced rates, and he gets to keep the fiat left over as his profits.

tl;dr - The Pirate has a big incentive to destroy Bitcoin itself.
1202  Bitcoin / Development & Technical Discussion / Re: bitcoind is too heavy on: July 18, 2012, 11:26:51 PM
One trick with EC2 is to take your EBS store for your micro instance, deassociate it, reassociate it as the root partition of a more powerful instance, and use that to get the blockchain verification done in a reasonable amount of time. Then you can move the partition back to the micro-instance, which in my experience is still adequate for the current transaction load.

Equally, do the blockchain verification on your own computer then copy it (the .bitcoin directory) to the EC2 instance.
1203  Bitcoin / Development & Technical Discussion / Re: Reverse-engineering and documenting Bitcoinica on: July 18, 2012, 11:21:14 PM
The trick is that if strings are immutable, and short strings are guaranteed to have unique memory locations, the a == "foo" comparison can actually be implemented as a direct pointer comparison rather than a slow string comparison. This is basically just as fast as a traditional enum, and in practice takes up the same amount of space. (integers in structures are usually not packed) Of course, comparing three letters is pretty quick as well, especially in the context of an interpreted language. FWIW if I'm not mistaken Python strings work this way, and it's considered "Pythonic" to use strings to replace enums.

Premature optimization is the root of all evil.
Premature optimization may be the root of all evil, but only if it makes the code harder to read, aka replacing the strings with status numbers. Enums doesn't reduce code readability, as it is essentially the same as strings, (except without the quotes). Secondly, enums are superior to strings because they are strongly type checked to prevent any undefined behavior, which may result from typos. In addition, IDEs can recognize enums and provide additional features such as auto completion and error detection, which boosts productivity.

See, in a strongly typed language, I'd agree with you. But Ruby and Python are dynamically typed, which greatly reduces the advantages of traditional enums because there is no mechanism to type-check them anyway.

Note though, the actual preferred Ruby enum approach is apparently symbols - as notme mentioned, see http://stackoverflow.com/questions/75759/enums-in-ruby - which are pretty much immutable strings with some syntactical sugar. (and potentially namespacing) Still using strings may make sense in some cases, like interfacing to external code. Python meanwhile doesn't even have the concept of a symbol.

Is dynamic typing system the right approach? That's a very complex question... For one thing, remember that typing systems can be a lot more complex than the simple C/C++ model of mostly incompatible types. Look as Haskell's inferred typing for instance.
1204  Bitcoin / Development & Technical Discussion / Re: Reverse-engineering and documenting Bitcoinica on: July 18, 2012, 05:10:53 PM
Started thoroughly studying the trading part, here's my understanding of the trade matching code.

My comments start with "D :", there are like 2 comments made by ZT

http://pastie.org/4257541
doesn't ruby have something like enums? why make slow string comparisons?

I can't speak for Ruby or that exact case specifically, but often in modern languages string comparisons are a lot faster than they look. For instance, a typical enum replacement would look like this:

Code:
a = "foo"

if a == "foo":
    do stuff

The trick is that if strings are immutable, and short strings are guaranteed to have unique memory locations, the a == "foo" comparison can actually be implemented as a direct pointer comparison rather than a slow string comparison. This is basically just as fast as a traditional enum, and in practice takes up the same amount of space. (integers in structures are usually not packed) Of course, comparing three letters is pretty quick as well, especially in the context of an interpreted language. FWIW if I'm not mistaken Python strings work this way, and it's considered "Pythonic" to use strings to replace enums.

Premature optimization is the root of all evil.
1205  Other / Off-topic / Re: CNN Story on Silk Road - Bitcoin not mentioned on: July 08, 2012, 10:49:14 PM
Interesting to see the mention that Tor is used by the US government, but not the mention that they originally developed it in the first place.

haha, no doubt. Onion routing was created by the Navy if I'm not mistaken. It was highly useful back before TOR even.

Heck, while it's not (known to be) military developed these days, they still list military uses on their website: https://www.torproject.org/about/torusers.html.en#military

Quote
Militaries use Tor

  • Field agents: It is not difficult for insurgents to monitor Internet traffic and discover all the hotels and other locations from which people are connecting to known military servers. Military field agents deployed away from home use Tor to mask the sites they are visiting, protecting military interests and operations, as well as protecting themselves from physical harm.
  • Hidden services: When the Internet was designed by DARPA, its primary purpose was to be able to facilitate distributed, robust communications in case of local strikes. However, some functions must be centralized, such as command and control sites. It's the nature of the Internet protocols to reveal the geographic location of any server that is reachable online. Tor's hidden services capacity allows military command and control to be physically secure from discovery and takedown.
  • Intelligence gathering: Military personnel need to use electronic resources run and monitored by insurgents. They do not want the webserver logs on an insurgent website to record a military address, thereby revealing the surveillance.
1206  Other / Off-topic / Re: CNN Story on Silk Road - Bitcoin not mentioned on: July 08, 2012, 10:23:40 PM
Interesting to see the mention that Tor is used by the US government, but not the mention that they originally developed it in the first place.
1207  Economy / Web Wallets / Re: Blockchain.info - Bitcoin Block explorer & Currency Statistics on: July 08, 2012, 12:55:26 AM
If you're charging a 1.5% fee for this anonymous send service, how are you going to withdraw your fees? It strikes me that it'd be very easy for you to create a block of coins tainted by every coin sent through the service, which itself, should it get into wider pools of coins like instawallet, would create tainted blocks of coins that would be quite hard to send through the mixer again... Limited by the 250 depth limit, but still. Similarly anyone can use the mixer a few times to create their own "ultra-tainted" coins, aided by the fact that the mixer will always give you coins that haven't been tainted by the total sum of the taint you already possess. This doesn't even need to be very expensive if you taint a small amount of coins each time, so the 1.5% fee isn't very high, and use them to taint a much lager amount which you then send to something like instawallet.

Given how thoroughly tainted the future could be it also occurs to me that what you will eventually see is miners selling their untainted coins to the mixer, which then leads to pools inserting transactions with unusually high fees, which then leads to pools conspiring to reverse said transactions. Not to mention the question of are mining payouts tainted by the coins which lead to their fees?

Note: for all the bad connotations of the word taint, imagine how much longer and convoluted the above message would be if we had decided to call it coins' provenance.
1208  Economy / Gambling / Re: SatoshiDICE.com - The World's Most Popular Bitcoin Game on: July 07, 2012, 06:22:00 AM
It turns out the bitcoinica coins have been played on satoshidice recently too:

http://blockchain.info/tx-index/5484758 shows the bitcoinica haul being split up into amounts of 2600.

The 3rd output, http://blockchain.info/tx-index/5489226, is the "expect mass leak soon" message, ascii encoded in a transaction's values.
The 2nd output, http://blockchain.info/tx-index/7915029, has lots of inputs from 1FLo9g9AZ7Up1tgLv4xyx8xvAKiGGhAi6p, which was used recently for a series of high-stake satoshidice bets:

http://www.satoshidice.com/lookup.php?tx=1FLo9g9AZ7Up1tgLv4xyx8xvAKiGGhAi6p

31 bets.
Total stake:  303 BTC
Total return: 299.51723327 BTC

A loss of 1.15%.

That 1FLo9g9AZ7Up1tgLv4xyx8xvAKiGGhAi6p address is very strange. It's been receiving huge numbers of small integer-valued BTC transactions from a large number of addresses, with the transactions spaced seconds apart. Some sort of mixing network maybe? It'd have to be one owned by a direct recipient of bitcoinica funds, as shown by transaction http://blockchain.info/tx-index/7915029/95dea21bca1a0b337f9f8cbdfb56c5d25546ea5a9e43d9dd96f9e3e9eac57018 Also, if you look at the dendogram for that transaction, you see that the final amount is being split into large numbers of 100-300BTC payments, which in turn are getting split up in all sorts of ways. Possibly this is because they're being funneled through a wallet service like instawallet; the values after that point are all over the place, like more typical transactions.
1209  Bitcoin / Bitcoin Discussion / Re: bitcoincard.org on: July 04, 2012, 02:33:48 PM
Yeah it should have the option to turn the card off or at least the tracking off.  Yes simple cover sleeve to act as a Faraday cage would also be a good idea to protect the card.

Is a sleeve like that possible? I thought cages had to be grounded to be effective?

Nope, but that's a very common misconception.

IAMAED (I am an electronics designer)
1210  Bitcoin / Development & Technical Discussion / Trusted identities through provable coin expenditures on: July 04, 2012, 04:04:36 AM
I posted this basic idea awhile back on the -dev list, but Gavin's recent "UltraTransactions" post reminded me about it again...

So as we all known establishing reputation anonymously is very difficult. However, if you could provably, publicly, spend coins at a net deficit to you, with the transactions cryptographically traceable to your identity, you can establish a value for the  identity that will be destroyed if tarnished.

Option 1: From an address you control, spend coins to an unspendable address - 1111111111111111111114oLvT2 is a good choice.

Option 2: Create transactions that spend coins to miners fees. These transactions will have to be numerous and consecutive; if not someone with control of a decent amount of hashing power could simply spend coins in blocks they themselves mined.

In either case the identity, even in the face of pruning, becomes the merkle paths from the transactions to the blockchain, allowing future proof that the transactions happened from an address you control. (of course, using that identity is now a matter of signing statements with the private key of that address)

Option 1 is very simple, and I see no security flaws in it. Option 2, while nice from an encouraging network security point of view, is more problematic. For instance, aside from the consecutive problem, if this idea becomes popular in theory we could even see large mining pools collaborating to to reverse blocks where this has happened. You could keep the fees per transaction low-ish, but then the required number of transactions, and the size of the identity, becomes huge.


Now, you've got an identity, great! Lets suppose you're operating a trusted bank, for, say, zero-conf transactions. Ideally what we want is a fully automated way of distributing proof that the identity has violated trust. For instance, if you want to send money to someone, the bank will sign a "letter of intent", stating what the bank will do. Now if the bank fails to send the money, or refund you, you create a machine readable "violation notice" and publish it. The bank can undo the effect of this notice by proving that it did what the letter of intent said it'd do, for instance, by providing transactions showing that money was transferred as requested. If it can't do that, everyone can choose to do no more business with that bank in the future, destroying the trusted identity.

The trick then is, how do you publish these notices? You need a persistent log of every violation made in a given type of trust domain, while at the same time preventing griefing like publishing lots and lots of spammy notices. Again, requiring a provable expenditure to publish a violation could work. Similarly if every violation really is properly machine readable it might be enough to just have nodes validate them and move on. You're also going to want to prevent finney attacks somehow... although in general, information is much easier to copy than censor.

There is also another issue: going back to the bank example, how do you know if the total deposits exceed the value of the identity? One way would be for the bank to do all transactions through a given address (or a deterministic wallet) and expect people to audit the block chain, although that has the issue that certain types of services, such as anonymity providers that resend pools of coins become more easy to track. For non-bitcoin applications this is even more difficult; essentially you've got the same "what happened?" distributed problem that the blockchain solves in the first place.


In any case as a first step creating a protocol, even for human verification, would be valuable; people can always bitch on bitcointalk if someone screws them over...
1211  Bitcoin / Development & Technical Discussion / Re: Simplify Bitcoin on: July 04, 2012, 02:55:14 AM
So how would you fix the scalability issues of BTC?
I think Bitcoin is already perfectly capable of scaling up.  Here's one half-baked idea for how to do it:
  http://gavintech.blogspot.com/2012/07/off-chain-transactions.html  (pasted below to save you a click):

The problem: is there a safe and secure way to make Bitcoin transactions without relying on the block-chain but, instead, relying on some semi-trusted third-party?

If there is, then Bitcoin is more easily scalable; most transactions could happen off the block chain, with in-the-block-chain transactions happening every once in a while to "settle up" off-chain transactions.

So here is the half-baked idea:

Use multisignature transactions to split the ownership of some bitcoin value between a customer (lets call her Alice) and a transaction service (lets call it "Joe's UltraTransactions" -- Ultra for short).

Alice deposits 100 bitcoins into her Ultra wallet, and what actually happens behind the scenes is Alice's software generates a new keypair, gets a public key from Ultra, and coins are sent into a 2-of-2 transaction.

Alice withdrawing the bitcoins (getting them out of the UltraTransaction system) is the boring case-- she'd generate a transaction, sign her half, then ask Ultra to sign the other half (and there would be some sort of authentication check-- maybe Ultra sends Alice an SMS to approve the withdrawal).

Now Alice wants to pay Bob 10BTC, who also happens to be an UltraTransaction customer. This is where things could get interesting.

Instead of generating a block-chain transaction, Alice could just give Bob her private key. Both Alice and Bob would sign a message with the private key saying "Alice is sending 10 bitcoins to Bob; she's given him the private key that she generated."  Bob would send the message to Ultra, which would send Alice an SMS to make sure she approves, and then any withdrawal involving those 10 bitcoins associated with that private key would require Bob's authorization instead of Alice's.

Alice would still know the private key, but won't be able to spend what is now Bob's money (Ultra would only let her send/withdraw 90 of the 100 bitcoin tied up with that private key).

Ultra is only semi-trusted; it never has the private key, so can't spend the coins without either Alice or Bob's aproval. Joe can't decide to run off with everybody's coins when the Ultra wallet is worth a few million dollars.

Alice and Bob do have to trust that Ultra keeps track of who owns what accurately, and that Ultra will be around to sign it's half of the transaction when they want to withdraw some coin. And Bob has to trust that Alice did generate the private key, didn't share it with Ultra, and isn't actually Joe trying to trick him.

That's quite a lot of trust required, but the ability to instantly transfer value between Ultra customers with zero Bitcoin-block-chain transaction fees might outweigh the risks. And there are probably variations on this idea that would minimize trust in Ultra (maybe there's a semi-trusted service that Ultra pays to keep offline, "use-only-if-we-go-out-of-business" backups of their private keys).

And it scales beautifully; one UltraTransaction server cluster could easily handle hundreds or thousands of transactions per second, and you could imagine companies popping up all over the world, handling most transactions outside the blockchain.

This would be a great way to make use of my idea awhile back for establishing trust by provably and publicly throwing coins away, either by transferring it to the null address (all zeros) or by spending it in fees to miners. If Ultra is charging fees for the service, it'd be worth it's while to be honest if acquiring the reputation is sufficiently expensive.

For a straight-up bank role the analysis is easy: the bank's identity is tied to the root of a deterministic wallet, and interested parties can then audit the blockchain to ensure that the bank isn't at any one time holding more bitcoins than the identity is worth. (albeit this is difficult with future transaction volumes and pruning)

With Ultra's only being able to destroy coins, rather than steal them, I'm not really sure how you would value it. I mean, griefers can be quite irrational, although rarely that rich. For micropayments though I can see the idea definitely working.
1212  Economy / Service Discussion / Re: Satoshi Dice -- Statistical Analysis on: July 03, 2012, 08:33:17 AM

Yeah, I wish the big bets had been paying out better for SatoshiDice, but we've been unlucky thus far. We lowered the max bet down to 5btc for a while to help curb the losses, and now have raised it back to 25btc.

As of today, SatoshiDice is back in the black after a fairly gruesome couple weeks. Needless to say, it is stressful running this site but hopefully the players are having fun!

Question is are you being actively scammed?
What have you learnt about zero-confirmation transactions and how safe they are?

Also, have you talked to zipconf? I dunno how exactly their service works - is it transaction or address based? - but it'd make for an interesting, high-visibility, high-risk test case. IE: maybe they'd give you a discount on the fees. Smiley
1213  Bitcoin / Mining speculation / Re: Will ASIC mining destroy Bitcoin? on: July 02, 2012, 07:56:43 PM
Just my little thought, since I cannot see it anywhere, and everyone seems so positive (or only concerned about 51% attacks).
Just think it this way: why do miners make money? Because they use differently, better hardware -GPU- that is priced (for them) low because the vast majority of its buyers value it much less, becayse they only need it to play fancy graphics.

If everyone can use ASIC and price is completely determined by its use in mining, is there one reason for why competition and prices shouldn't rise until the profitability is basically zero? Free market works like that.


Part of profitability is risk. If the market is assuming that Bitcoin mining is highly risky, the apparently profitability can be very high even if the total profitability is zero.

Of course, no-one knows how risky mining actually is.
1214  Bitcoin / Bitcoin Discussion / Re: SMS Mobile Wallet - Can It Ever Be Secure? on: June 30, 2012, 07:17:03 PM
Well, you know you're absolutely right I think, but I'm actually looking forward to seeing SMS payments get stolen precisely because it'll be solid evidence that carrier security isn't very good. It's like how at work I leave my spare change on my desk, completely visible, precisely so I'll find out if any of the cleaners or my coworkers aren't honest. So far, they have been.
1215  Economy / Web Wallets / Re: Blockchain.info - Bitcoin Block explorer & Currency Statistics on: June 30, 2012, 06:54:01 PM
Send Via SMS Now available

More Information https://blockchain.info/wallet/send-via

Doesn't seem to be working in Canada. I just get an unspecified "Error Sending SMS Payment"
1216  Bitcoin / Mining speculation / Re: Will ASIC mining destroy Bitcoin? on: June 30, 2012, 06:35:29 AM
ASIC mining will make it much, much tougher for an entity to borrow a bunch of computing power to attack bitcoin.

For instance, lets suppose BFL sells just $5 million dollars worth of their "coffee warmers". (a highly conservative number that'd probably leave them bankrupt after they paid for the ASIC development costs) That's about 33 thousand coffee warmers, or 234TH/sec. Suppose the attacker decided to requisition a whole bunch of computers to attack Bitcoin, for instance by asking Amazon or Google "nicely" One 4-way Opteron CPU can do about 115MH/s, so for your 51% attack you'll need about 1 million CPU's. If you're renting from Amazon, that's costing you something like a million dollars an hour, assuming you could even get them to let you rent that much computing power. The capital cost of all that computing power is also in the range of hundreds of millions of dollars, heck, easily a billion dollars with server farm overhead.


Actually they would need more than 117GH/s, because once they add their 117, the total hash rate goes above 300, they still don't have 51%.

Doh! Yeah, in general that's not a safe assumption, because in theory miners drop out as profitability drops due to the new hash power, but I'm assuming a sudden attack. In that scenario you actually have to provide an equal amount of hash power to the existing network. So all my already conservative, BFL labs goes bankrupt because they don't sell enough hardware, estimates can be doubled.

As it is, the idea that miners will drop out as profitability drops is probably not all that true either now that mining profitability is mainly a function of capital costs rather than marginal electricity costs.
1217  Bitcoin / Mining speculation / Re: Will ASIC mining destroy Bitcoin? on: June 29, 2012, 04:38:40 AM
But seriously, if we suddenly lost our core developers, where would bitcoin be? Do you think others would step up if it could mean assassination?

Sure, but this time, using tor. And, no offence to Gavin and the rest of the Bitcoin devs, but the development being done right is something that a large number of developers could do. If they had to step down for some reason, other people could be found to fill their place.
1218  Bitcoin / Mining speculation / Re: Will ASIC mining destroy Bitcoin? on: June 29, 2012, 02:24:44 AM
ASIC mining will make it much, much tougher for an entity to borrow a bunch of computing power to attack bitcoin.

For instance, lets suppose BFL sells just $5 million dollars worth of their "coffee warmers". (a highly conservative number that'd probably leave them bankrupt after they paid for the ASIC development costs) That's about 33 thousand coffee warmers, or 234TH/sec. Suppose the attacker decided to requisition a whole bunch of computers to attack Bitcoin, for instance by asking Amazon or Google "nicely" One 4-way Opteron CPU can do about 115MH/s, so for your 51% attack you'll need about 1 million CPU's. If you're renting from Amazon, that's costing you something like a million dollars an hour, assuming you could even get them to let you rent that much computing power. The capital cost of all that computing power is also in the range of hundreds of millions of dollars, heck, easily a billion dollars with server farm overhead.

Finding a whole bunch of GPU's is actually rather tough, as most GPU farms are for scientific computing and use floating-point optimized GPU's that aren't very good at computing hashes.

A final possibility is borrowing an FPGA farm. We could make the rough assumption that the value of the farm's FPGAs will have the same $/Hash ratio as BFL's currently shipping product. So that's 117TH/sec / 0.8GHash/Single * $600/Single = $87.7 Million dollars worth of FPGAs. Intel might have that kind of FPGA farm available - they're used for chip verification - but again, renting it won't be cheap. Also, it looks like BFL is getting it's FPGAs at pretty cheap prices - a $600 single has $2000 worth of FPGAs in it - so with wholesale discounts we still might need to triple or quadruple that $87 million.

With ASIC mining, the cheapest way to computationally attack Bitcoin is probably by doing a run of your own ASICs, and it's not something you can do quickly. All that effort and money just so you can find out the myriad ways that the devs can stop 51% attacks using techniques possible now that Bitcoin is widely established.


For instance, lets suppose the NSA decides to attack Bitcoin. They could probably round up the hundreds of millions of dollars worth of computing power to make it happen, although it'd be a big hit to their black budget. Chances are within a few hours to days the devs will respond with something like a "coin-age" rule and ask everyone to upgrade. Now blocks get rejected, and nodes blacklisted, if they try to pass blocks into the network that don't meet coin age requirements. Transactions start flowing again, although the price on Mt. Gox has dropped severely, lets say 50%. At the same time the "known-legit" mining pools are also taking steps to protect their investment, by temporarily centralizing a bit, and blocking connections to nodes that aren't on a whitelist; the "most-difficult-block-wins" rule has been temporarily suspended. Note that at this point it's still not possible for anyone to steal coins, and not much more possible to do double spends.

Now, one thing the NSA could do is buy a bunch of coins so their blocks get accepted again. The problem is, now they're basically giving people a way to get out of Bitcoin, and boosting the price on the exchanges, restoring confidence. Exactly what they don't want! If they do nothing, they're still burning at least hundreds of thousands of dollars an hour, while the network figures out ways to mitigate the damage.

Honestly, ordering some assassinations on the guys running major exchanges sounds a lot cheaper...
1219  Economy / Web Wallets / Re: Blockchain.info - Bitcoin Block explorer & Currency Statistics on: June 27, 2012, 01:32:38 AM
Feature request: sending to P2SH-style addresses.
1220  Economy / Web Wallets / Re: Blockchain.info - Bitcoin Block explorer & Currency Statistics on: June 22, 2012, 12:39:22 PM
Google Chrome is telling me that the wallet verifier app needs new permissions. What's the story?

It's for a new feature which allows you to import and export keys to Bitcoin-Qt without needing to use pywallet or command line.

The problem is talking with the Bitcoind RPC server is a violation of the browser's Same origin policy and most browsers won't let you do it without special CORS HTTP headers. I made a pull request to add CORS headers to the RPC interface but the Bitcoin devs have dismissed the idea previously. As a workaround the Verifier browser extension can be used to circumvent the restrictions - as extensions have the ability to bypass the same origin policy if requested.

1) If you are not running Bitcoind-Qt there is no risk.
2) If you have not enabled the RPC server (by default it is off) there is no risk.
3) If you have the RPC server enabled the web interface will be able to talk with Bitcoin-QT so be sure the username and password is set.
4) The extension only runs on blockchain.info or www.blockchain.info.


I really think you should use a separate extension for this.

I have no need for this feature - it is a niche use case - and I'd much rather be running a verifier with fairly limited privileges than one that in itself represents a security risk.
Pages: « 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [61] 62 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!