Bitcoin Forum
June 20, 2024, 04:13:49 PM *
News: Voting for pizza day contest
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 ... 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 [97] 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 ... 514 »
1921  Bitcoin / Development & Technical Discussion / Re: Would the bitcoin blockchain work for voting? on: November 07, 2020, 12:23:46 PM
So far... there have been some 144 million votes counted in the US Election, just for the presidental ballot (not including all the senate, house, governor and other "proposition" ballots)... and that's not even 100% of them (nor 100% of the eligible votes in the US)... imagine 144 million transactions being flooded into the network in the course of 1 week... let alone one (election) day. Shocked

While a blockchain could theoretically be used for recording say the hash of a document of the results, in a tamper resistant way... I don't think it would be a great way to deal with the casting of actual ballots.
1922  Bitcoin / Bitcoin Technical Support / Re: How many bytes do additional inputs add to a transaction? on: November 07, 2020, 12:14:49 PM
Also, multisig can be a factor... if you have a 1-of-2, that'll result in smaller transaction that a 2-of-3 or a 3-of-5 etc... even if the number of inputs remains the same. The more signatures you need to add into a transaction, the larger it will grow.
1923  Bitcoin / Electrum / Re: Looking for derivation paths used for different Electrum mnemonic types on: November 07, 2020, 12:10:13 PM
Looks good... I would just add that the actual address derivation path most likely has another /0 on the end of those Wink

Might pay to experiment a little with some Electrum seeds and this Electrum compatible fork of Ian Coleman's BIP39 tool: https://github.com/FarCanary/ElectrumSeedTester
1924  Bitcoin / Bitcoin Technical Support / Re: Bitcoin-qt is not opening on: November 07, 2020, 12:06:19 PM
The problem is that when I run addnode "xx.xxx.xxx.xxx:7333" "add" it returns me null. I'm sending you a video of it via PM.
That is the correct response... it should return null...

Do you then see the "xx.xxx.xxx.xxx" machine appear in the "peers" tab after you use the addnode command? Huh If you don't then you might need to look into the IP addresses you're using and/or the network settings.

From the video you sent me, it looks like you're using external IP addresses... if they're both on the same network and plugged into the same router, then I'd expect you should be using addresses that start 192.168.x.x or 10.0.x.x etc... they're the most common "private" network type addresses... Also, it's possible that the Windows firewall is just being stupid and blocking things Roll Eyes

I ran my 2 nodes on 2 Linux VMs, connected in a network as 10.0.2.4 and 10.0.2.5... when I used the following from the first VM:
Code:
addnode 10.0.2.5 add

It took only 2 or 3 seconds and the connection was made and I could see it listed in the "Peers" tab.


I still haven't been able to mine a block, despite spending hours trying to get cgminer/bfgminer "solo" CPU mining... neither of them seem to want to connect the node via RPC, despite the fact that bitcoin-cli works fine (even from the 2nd node across the network) Undecided
1925  Bitcoin / Hardware wallets / Re: My Trezor is broken! on: November 07, 2020, 11:57:58 AM
I suspect it is using some other identifier in addition to the key generated from the seed, perhaps a hardware or device ID of some description that is unique to the Ledger or Trezor firmware? Huh
1926  Bitcoin / Wallet software / Re: Recover wallet from coinbox.org wallet to electrum on: November 07, 2020, 11:51:56 AM
Email their support at support@coinbox.org and ask them what derivation paths they use for each wallet type
Good luck with that... I attempted to contact their support and asked about the derivation and was told "you simply log in with your email/password and it will restore your wallet" Roll Eyes Roll Eyes Roll Eyes

I haven't heard back since I asked them to forward my question to the development/technical team. Tongue


Honestly, I think it might be easier if the OP simply sends all their coins from coinbox app to a "proper" wallet with "proper" documentation and support. I couldn't figure out the derivation path trying a lot of different combinations on iancoleman.io/bip39:
m/0....
m/44'....
m/49'....
m/84'....

It would appear that coinbox is using something very unusual... possibly related to the default "passphrase" Huh Undecided Roll Eyes
1927  Bitcoin / Bitcoin Technical Support / Re: Bitcoin-qt is not opening on: November 07, 2020, 05:16:40 AM
So now, bitcoin-qt opens without any errors. I've several queries right now, though. First of all, I connect with nodes. That shouldn't happen. I've deleted all “vSeeds.emplace_back” lines. There are no IP addresses on my source code. I've also changed the message signature of mainnet to:
Although, Bitcoin Core sends information somewhere.


Will probably be all the "fixed seeds" in chainparamsseeds.cpp

Shutdown your custom Core app, then delete peers.dat. After that, in chainaparams.cpp, find the "vFixedSeeds" lines... and make sure they're all "vFixedSeeds.clear();"... then recompile and restart Bitcoin-qt.exe... you should see no "peers" on the peers tab in "Windows -> Peers":



Second question. Why am I considered as asynchronized? I haven't changed the satoshi's genesis block and in order to work I've set nMaxTipAge to a large value, so it can mine without thinking that the block is way too old. (bad grammar)

validation.cpp:
Code:
int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE * 10000;
Because there aren't any "blocks" to sync if you just start up with the Genesis block... until a block is mined, there will be nothing to sync


Quote
Third question. Why I can't mine? Difficulty is 1. Does it have to do with the previous question that I'm not "synchronized"?


Fairly sure that the generatetoaddress command only works in "regtest" mode. You'll need to connect a 2nd node, and then setup a solo miner of some description to create a block before you'll see the nodes "sync".


1928  Bitcoin / Electrum / Re: Looking for derivation paths used for different Electrum mnemonic types on: November 07, 2020, 01:10:25 AM
The derivation_and_script_type_dialog seems to be called when the wallet is being created using a hardware wallet not from an Electrum seed phrase.
Oh yes, of course... it also uses it when restoring from a BIP39 mnemonic.

Most likely this is because Electrum mnemonics are "versioned"... so the script type is encoded in the mnemonic itself. Electrum reads that, then defaults to using the encoded script_type and appropriate derivation path automatically.

I've noted that the derivation path is stored in the "keystore" within the wallet file as well:
Code: (Native Segwit Electrum wallet)
    "keystore": {
        "derivation": "m/0'",
        "pw_hash_version": 1,
        "root_fingerprint": "da996cc9",
        "seed": "naive goddess they empty super bone friend visit segment person act palm",
        "type": "bip32",
        "xprv": "zprvAaAs87fpU4gB4oxt9ALBFa6rFj5g4ti1GH71qHHVt8hEcj1N7Ct5CmX1nFB94FewoH5Pmy9dCmRjkTCWzYfsNowk6angDwgdKug8QbMLddf",
        "xpub": "zpub6oADXdCiJSEUHJ3MFBsBci3aokvAUMRrdW2cdfh7SUEDVXLWekCKkZqVdVhW2jXUGr5umrchPNxwfdaQjxkc854SGvaG5Qd8rifoCrGQAnx"
    },


Code: (Legacy Electrum wallet)
    "keystore": {
        "derivation": "m",
        "pw_hash_version": 1,
        "root_fingerprint": "65751984",
        "seed": "comfort history avocado badge genre uphold rely evolve soccer beef defy spoon",
        "type": "bip32",
        "xprv": "xprv9s21ZrQH143K4VH6GX2JjtPu9DtUQ5BJF1VUf59Eexcaez3W5QtTRm4YeKMwL1iP9WUkAgRmw63Ls4nwHjPdTiv6sAU1LqzFCHxKJ2dATSw",
        "xpub": "xpub661MyMwAqRbcGyMZNYZK72LdhFixoXu9cER5TTYrDJ9ZXnNecxChyZP2VaconGXsfh6Vof1vn2qFD5GU1Wgi2VkNxU344HNgSsRQLLiFv8b"
    },
1929  Bitcoin / Development & Technical Discussion / Re: Did I find a bug in the Bitcoin Core wallet? on: November 06, 2020, 11:45:13 PM
It is possible for a wallet to contain transactions which do not pertain to the keys in the wallet. This cannot happen under normal operation, but a scammer who is directly modifying the file can cause this to happen. There is no caching nor any bug here, OP has "fake" wallet.dat files.
In which case, I can only conclude that the "scammer" has purposely included a transaction from one of the addresses in the OPs personal wallet in an attempt to troll them
1930  Bitcoin / Electrum / Re: Lost passoword and seed in electrum, help! i pay! on: November 06, 2020, 11:38:36 PM
i lost both things, password and seed in electrum. is there a way or someone can help me to crack or brute-force to login again in my wallet?
You could try using:

1. JohnTheRipper script to extract password hash (https://github.com/openwall/john/blob/bleeding-jumbo/run/electrum2john.py)

and

2. HashCat (https://hashcat.net/hashcat/) to try and bruteforce the password.

However, unless you have a relatively good idea of what the password was, how many characters long it was, and a relatively decent GPU, trying to bruteforce it could take quite a long time.

1931  Bitcoin / Hardware wallets / Re: My Trezor is broken! on: November 06, 2020, 11:16:30 PM
I've been thinking some more about this - does anyone know if the U2F is compatible between different hardware wallets? You can restore the Trezor U2F to other Trezors, and you can restore the Ledger U2F to other Ledgers, but I've never tried to restore from one device to the other. Given that there are no open source third party tools you can use to restore your seed phrase to recover your U2F like you can do with bitcoin wallets, if you cannot restore to other devices that it puts you in a precarious situation of being entirely dependent on that one company. If that company goes bankrupt, or you are unable to obtain a replacement wallet from them for another reason, then you could find yourself locked out of your accounts.

If U2F is not cross-compatible, then there is a strong argument to made to always have a second device as a back up stored somewhere secure in the event of loss or failure of your first device.
I ran a quick test this morning using my Ledger Nano S and Trezor... they are both using the same seed.

I initially setup U2F authentication on a dummy dropbox account with the Ledger Nano S, then signed out. When I attempted to log back in with the Trezor attached I got an "unknown device" error
and was unable to proceed.


For completeness I added the Trezor key (dropbox lets you have multiple security keys attached to your account), then removed the Ledger Key... logged out and tried to log back in with the Ledger Key... and got the same message. So, DropBox sees them as 2 unique keys.

Based on this quick and hardly thorough test, it would seem to suggest that the U2F is not cross-compatible between different brands of device, even with the same seed. Undecided
1932  Bitcoin / Development & Technical Discussion / Re: Did I find a bug in the Bitcoin Core wallet? on: November 06, 2020, 10:20:20 PM
The "wallet program" (ie. Bitcoin Core) is simply showing transactions relating to the "public keys" that it finds in a wallet file (ie. a wallet.dat).

It is possible to modify a wallet.dat file such that it contains a certain public key, but does not actually have the matching private key. This is the case with most (if not all) of the wallet.dat files that are "for sale". Scammers insert a public key that current contains a large amount of BTC, then add some dummy data that is encrypted with a ridiculously long and random password in the place of the private key.

Bitcoin Core will read and display information based on the public key... but obviously you cannot spend any coins because:
1. Tthe password is unknown
and
b. Even if the password was known, the wallet doesn't actually have the private key matching the public key showing as having coins.


However, that still doesn't explain why loading one of those wallets was showing transactions for a public key that they shouldn't have (ie. a public key from your wallet). Either the scammer knows your address and was using it to troll you or Bitcoin Core did indeed pickup some cached transaction from somewhere and included it with the "new" (fake) wallet.dat info.

Have you tried using -zapwallettxes on one of the fake wallets yet? Huh
1933  Bitcoin / Wallet software / Re: A question concerning: Bitcoin wallets, and the bitcoin bull run on: November 06, 2020, 03:12:12 PM
Personally, I still think that Lightning is nearer to "experimental" than "ready for prime time"... unless you have a real need for being able to conduct a lot of micro transactions, then the regular "on-chain" BTC MainNet is probably the best option for newbies.

Channel capacity always seems to be the limiting factor with Lightning... Although this is a bit of a catch-22 type situation... not enough channels == no capacity, no capacity == people not wanting to use the system and create channels Undecided
1934  Bitcoin / Development & Technical Discussion / Re: Can I borrow some testnet BTC, please? on: November 06, 2020, 02:41:21 PM
What the hell is a defi? Ok Greg, I'll hoard my tBTC.
DeCentralised Finance... it's the latest fad in the cryptocurrency sphere... and because it is so "new", there are bound to be a ton of scams involving all sorts of "get rich quick" schemes.


Fun fact: "DeFi" isn't actually all that new... it's just a buzzword and people like buzzwords Tongue
1935  Bitcoin / Development & Technical Discussion / Re: Did I find a bug in the Bitcoin Core wallet? on: November 06, 2020, 02:23:38 PM
I just want to understand why the wallet program displays incorrect information that is not contained in the downloaded wallet.dat file
why does the wallet program inherit information from the previous wallet?
because we know that there is no such transaction on the network and the wallet.dat file has been replaced.
I'm not sure why it is showing a transaction from your wallet when you are loading a completely different wallet.dat... Are you sure you stopped Bitcoin Core first, and then replaced the wallet.dat? Huh If you swapped the file first, then restarted Bitcoin Core, it might have done some "weird" things (like writing cached transactions etc to the replacement wallet.dat when you shut down Bitcoin Core and then restarted it), but I would expect that it would most likely just corrupt the wallet.dat and it would fail to load.

Either that, or you've somehow managed to accidentally import your address or private key into the other wallet.dat(s) by mistake.

The only other thing I can think of, is that mempool.dat is somehow holding onto "your transaction", and when you start up with a different wallet, it adds that transaction to that wallet, thinking that it is "yours"? Huh But that is just pure speculation...

Maybe do as BitMaxz said, delete the mempool.dat when you change the wallet.dat files and see if that stops it from happening.


Quote
Maybe wallets with 70 and 78 coins are fake? Did one client send them to me.
Is the wallet program showing strange transactions for this reason?

That is, the program works correctly, but if the wallet is fake, then we will see this or another anomaly.
It's quite possible that a fake wallet would show "weird things", depending on how it was modified... it's also possible it's NOT a BTC wallet, but an altcoin wallet (like LTC or DOGE etc) and is showing "non-existent" transactions because of that... the transaction doesn't exist on BTC blockchain, but it exists on a different blockchain and was stored in the wallet.dat history.


However, that doesn't really explain why these wallets are showing a transaction that you say is from your wallet.dat!!?! Shocked Shocked Huh
1936  Bitcoin / Development & Technical Discussion / Re: How to lock bitcoin for certain days on: November 06, 2020, 02:04:59 PM

After the transaction has been included into a block, you'll only be able to spend that new output (to the new address) after the locktime is over.
This sounds good. I'm exactly looking for this. I thought the tx itself will be locked. If the fund sent to the address can't be spent, then that’s what I'm looking for. I actually misread above posts and mixed it with something I mentioned (the tx lock). Thanks a lot. No merit to spend.

But unfortunately, that's not how it works... if you specify "nLockTime" in a transaction, it means that the transaction is not able to be included in a block until AFTER that time period has passed. It's like "post dating" a cheque... it can't be cashed until at least the date printed on the cheque.

If you set the locktime for a transaction to be in 100 days, no miner will be able to include that transaction in a block for 100 days... and a lot of nodes won't even propagate the transaction as they will not consider it "final"... this is the error code I get when trying to broadcast a transaction before the LockTime:
Quote
non-final (code -26)

Even if you have a transaction that is locked, you could quite easily just create another transaction that spends those same funds, that has no locktime and can be broadcast/confirmed immediately.

To prevent spending, the OP_CHECKLOCKTIMEVERIFY option (aka OP_HODL) is the answer. I have been experimenting with the "Time Locked Address" functionality on coinb.in (via TestNet) and it works as advertised. The only caveat being that you will need to use coinb.in in the future to generate and sign the spending transaction, as I don't seem to be able to get it working properly with Bitcoin Core (but that might be something I'm doing wrong)




NOTE: for the purposes of this tutorial, I have used a TestNet address and that the coinb.in code requires some tweaking to automatically retrieve the UTXOs for TestNet addresses.


Step 1 - Get a private key
- You want this in WIF format.
- You can use one from an existing wallet, but be warned, you will need to put this into coinb.in to be able to sign the spending transaction later.

Example (TestNet) PrivKey in WIF format:
cQxRyfN5wBmDAc4tX1kP2bDZ5A3woXsayc1VLXu74WVc7ukmqQb6


Step 2 - Get the public key that matches your private key
- you need the hex public key, NOT the address

Example Hex Pubkey matching PrivKey:
032371229be41fd3d89d5dddd02cdfbcafbea07ec25ff2e8d9db1c8cd5983361bc


Step 3 - Create the "Time Locked Address":
- You can do this here: https://coinb.in/#newTimeLocked
- Alternatively, you can download the coinb.in code base and run it offline
- Enter the hex public key from Step 2, and pick the date/time you want the address to be locked to.
- Click "Submit"



Step 4 - Note down the "Time Locked Address" and "Redeem Script":


Example TLA:
2NAkEGEghkTs5BGn9kgK2PbMhaE2gThPgA3

Example Redeem Script:
04e056a55fb17521032371229be41fd3d89d5dddd02cdfbcafbea07ec25ff2e8d9db1c8cd598336 1bcac


Step 5 - Send funds to the "Time Locked Address"
- This is just a "standard" transaction
- Send using whatever wallet/fee etc. that you find appropriate.


Example Funding Transaction:
64ad87ac7789eae5190b8e76570ca6ad350ffccf1a5f59af0ae774dbde190a25


Step 6 (Optional) - Try and send "locked" funds

6.a: - Load "Inputs":
- Visit https://coinb.in/#newTransaction (or use your downloaded, offline version)
- Enter redeem script and click "Load" (won't work with "offline" mode)
- Click the "Inputs" tab
- You should get the UTXO(s) in your locked address loaded:


6.b: - Create "Outputs":
- Click on the "outputs" tab
- Enter the receive address and amount you want to send (IMPORTANT NOTE: any amount you don't specify in outputs, will be used as the TOTAL fee!!)


You can see I specified an output of 0.01999700... the difference between that and the total input (0.02) is going to be used as the total fee amount (0.00000300)... Unfortunately, there isn't a way to specify a fee rate, you need to work it out yourself... these "Legacy" transactions end up being around ~200 bytes... so my total fee of 300, ends up being around 1.5 sats/byte. Pretty low, but testnet is forgiving like that Wink

6.c: - Get unsigned transaction:
- Once you're happy with the outputs and fee, click Submit:


Example raw unsigned transaction:
Code:
0100000001250a19dedb74e70aaf595f1acffc0f35ada60c57768e0b19e5ea8977ac87ad64010000002a04e056a55fb17521032371229be41fd3d89d5dddd02cdfbcafbea07ec25ff2e8d9db1c8cd5983361bcacfdffffff0154831e00000000001976a91444cb040fe56b0f22411da75b1458ac8864802bfb88ace056a55f

6.d (Optional, but recommended): - Verify your transaction:
- https://coinb.in/#verify
- Enter your unsigned transaction and click submit


Double check that everything is in order

6.e - Sign the transaction:
- Enter the unsigned transaction
- Enter the private key from Step #1
- Click Submit


As per the note, make sure to double check that your fee rate is going to be OK... in this example... size = 200, fee was 300... 300/200 = 1.5 sats/byte. If you screwed up the fee rate, you can simply go back and start Step 6 again, and use a higher fee... the transaction should end up being about the same size (maybe 1 or 2 bytes in either direction), so you should be able to calculate it easily the 2nd time round Wink


6.f - (Try) Broadcast the transaction:
- I tried to broadcast before locktime using the BlockStream Explorer (https://blockstream.info/testnet/tx/push):




and using Bitcoin Core:


Congrats... your funds are now LOCKED! Smiley


Step 7 - Broadcast once the timelock has expired:
- Now we just repeat Step 6 again, but broadcast AFTER the locktime has passed, and we can see that the transaction was a success:

2972b09a1f0f52d8810368acc894cc6b2af6a1a7ae23e73d89aec68ddf6dd8ae






Personally, I would just go with the nLocktime solution.
nLocktime is the last 4 bytes of all the transactions. what you meant was the lock time OP codes.
That is indeed what I meant... I just typed the wrong thing... this is what happens when you try to be clever after midnight! Tongue Roll Eyes

I've edited my post to reflect that.
1937  Bitcoin / Development & Technical Discussion / Re: How to lock bitcoin for certain days on: November 06, 2020, 08:42:05 AM
Why not to open an account on exchange which allows you to save and gain profit on this?

Would seem the OP does not want to use a centralized service:
I know about Coinbase vault but I really don't want to go with them as they are centralized service.


Personally, I would just go with the nLocktime CheckLockTimeVerify solution. I'm not sure of any "mainstream" wallets that offer this service... but I know you can create a "Time Locked Address" on coinb.in fairly easily: https://coinb.in/#newTimeLocked

You just need to provide a public key (for a private key that you already hold) and a datetime... it'll automagically create the P2SH address and redeem script for you. You then simply send the funds you want to "lock" to the created address. Later, when you want to spend the funds after the timelock expires, you can simply provide the redeem script to coinb.in (and the private key necessary to sign) and you'll be able to create and broadcast the spending transaction.

Would probably be a good idea to create a standalone "throwaway" private key for this... to avoid having to use one from an existing wallet and the potential security issues with exposing private keys from HD wallets etc.
1938  Bitcoin / Development & Technical Discussion / Re: Did I find a bug in the Bitcoin Core wallet? on: November 06, 2020, 08:22:59 AM
It would appear that everyone here, including myself, is a bit confused as to what you think is "wrong". You say that "3QjnBKZAdUK3MVfekycu2FhCpT3hvmYa5X" is an address from your wallet, yet it is showing for "other wallets" (here and here). Is that what the issue is? Huh Are you saying that the "3QjnBKZAdUK3MVfekycu2FhCpT3hvmYa5X" transaction should NOT be showing when you are looking at the wallets with 70 and 78 BTC? Huh

Yes, you are right, that is exactly what I want to say.
Ok, that clarifies things slightly... OK, so how exactly are you opening the "other" wallet.dats? Do you shut down Bitcoin Core, then rename/move your wallet.dat and then put the "70BTC" wallet.dat in the datadir, then restart Bitcoin Core? Huh

Or are you using the "multi-wallet" functionality in Bitcoin Core and simply opening the 2nd wallet file from within the Bitcoin Core GUI using "File->Open wallet..." Huh

or are you doing something else? Huh
1939  Bitcoin / Bitcoin Technical Support / Re: Abandon Unconfirmed trascaction after double-spend on: November 06, 2020, 08:19:26 AM
The two transactions had one common address as input.
But did they have a common UTXO (from that address)? Huh If they did, then most nodes will have invalidated the 2nd transaction as soon as the first one was confirmed as the "common" UTXO no longer exists to be used in the 2nd transaction.

If you can still see the 2nd transaction on block explorers (and it isn't marked as invalid), then there is a very good chance it wasn't spending the same UTXO(s) as the first transaction as is actually still a "valid" transaction and will eventually get confirmed.

Do as nc50lc suggested and check the UTXOs for both transactions very careful, I concur with them that it would appear that there wasn't a common UTXO, otherwise all the nodes would have invalidated your 2nd transaction.
1940  Bitcoin / Electrum / Re: Looking for derivation paths used for different Electrum mnemonic types on: November 06, 2020, 08:05:40 AM
I think the code you're looking for is here: https://github.com/spesmilo/electrum/blob/1c07777e135d28fffa157019f90ccdaa002b614e/electrum/base_wizard.py#L407

You can see how during the "setup wizard", it is setting up the various derivation paths for each script_type, for each wallet type. The functions being called to "create" the derivation paths are in the bip32.py (normalize_bip32_derivation()) and keystore.py (purpose48_derivation() & bip44_derivation()) code.
Pages: « 1 ... 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 [97] 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 ... 514 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!