Saurik, the creator of Cydia, has come up with a way to downgrade the iPhone 3GS from firmware 3.1 to firmware 3.0. The method is not for the faint of heart but it can be a life saver if you accidentally upgraded your iPhone 3GS to 3.1. Saurik did a great job at explaining how and why this downgrade works and I invite you to read his article for detailed information. On my part, I will only give you a step by step on how to downgrade from 3.1 to 3.0.
1. First and foremost, you must have saved your ECID file through Cydia. If this was done, you should see the following message at the top of Cydia's homepage: This iPhone 3G[S] has an ECID SHSH on file.
2. Now we're going to duplicate the functionality exposed by Apple's signature server and trick iTunes into thinking it is connected to Apple's servers. Make sure you have iTunes 9 installed on your computer.
On a Mac, go to /etc/hosts. On a PC, go to C:\Windows\System32\drivers\etc\hosts. Open the file in a text editor and add the following entry at the bottom of the file: 18.104.22.168 gs.apple.com
Save the file and close it.
3. Now we have to put your iPhone into DFU mode. To do this, open iTunes, plug your iPhone and hold down the power and home buttons for 10 seconds, then let go of the power button but continue to hold the home button until iTunes recognizes the device with the message: "iTunes has detected an iPhone in recovery mode. You must restore this iPhone before it can be used with iTunes." Your iPhone screen should be completely black. If you see an image on your screen, you most likely didn't perform the previous step correctly. Try again.
4. You can now do a "normal" restore to the 3.0 software. To do this, hold down the Option key (on Mac OS X) or the SHIFT key (Windows) while clicking the Restore button in iTunes. Select the firmware 3.0 (which can be downloaded here).
Theoretically, you should be done with the downgrade. That's just for the theory though... You're most likely going to get several errors.
If you get the "unknown error (3002)", it's because you probably don't have your ECID SHSH's for 3.0 on file with Cydia and it is unfortunately impossible to register your device with Cydia anymore. There is no solution, your iPhone can't be downgraded from 3.1 to 3.0 and you're gonna have to wait for a new jailbreak.
If you get the "The iPhone "iPhone" could not be restored. An unknown error occured (1015)" error, then re-do the process all over again. You will get the same error again and it is normal. Ignore the error and jailbreak your iPhone using RedSn0w.
I agree that this is definitely not the easiest way to downgrade your iPhone from firmware 3.1 to firmware 3.0, but you don't have much choice at this point. If you don't feel like taking on this project, I suggest you just wait for a proper 3.1 jailbreak, which may take days, weeks, or months. I am very confident that the jailbreak community is getting closer to a 3.1 jailbreak though.
If you have any tips and tricks to make this whole process smoother, or if you have any question, please leave a comment.
UPDATE: If you have an iPhone 3G, you can now downgrade from baseband 05.12.01 to o4.26.08.