Pages:
Author

Topic: Cryptocurrency with Finite "Mini-Blockchain" (Read 5729 times)

sr. member
Activity: 359
Merit: 250
Oh I see you just keep getting your coin design more complicated as you get peer review. No wonder you haven't implemented a single line of code yet because it already has prohibitive difficulty to implement correctly. I wish you luck, but i wouldn't bet a penny that your coin would ever be implemented. No to say working.

That's a good idea actually, but I was talking about if the receiver comes online after the block of interest has been pruned from the mini-blockchain. They will be able to verify the money went to them because of the address database (which I now prefer to call the account database), but if they come online too late they wont be able to identify the sender or get the message. They could as you mentioned just get the block again from the sender if the sender saved it and sender node was still online. Or they could ask around in the hope another node was still holding onto the block they were after. But they would really only need to bother with this to retrieve detailed information about the transaction, it's always possible to confirm received funds without needing the block in which the transaction happened.
I don't think miniblock lifetime would be so short that you will get this kind of problems often. Anyway there is probably going be some person who will store entire blockchain for preservation purposes and would send you needed blocks for small fee. And even where the isn't one there should be multiple copies of all blocks on network because all transaction senders from a block would likely keep it.
legendary
Activity: 1536
Merit: 1000
electronic [r]evolution
it was reasonably solved
I was saying that I've solved the Mini-Blockchain + Address Database problem I've been working on. But from what I understand of your scheme, it may be "reasonable", but it still appears to have flaws and weak points if we're measuring how good it is in terms of how secure it is vs how much data needs to be managed by the network.
hero member
Activity: 798
Merit: 1000
But my latest solution is perfect. As far as I can tell it provides that almost "absolute" level of security bitcoin has.
Enough bragging Smiley just publish solution already and we can get to work.

pfft, it was reasonably solved a long time ago: https://bitcointalksearch.org/topic/with-balance-sheets-most-of-the-block-chain-can-be-forgotten-505

I also independently came up with the solution in 2011: https://bitcointalksearch.org/topic/announce-encoin-an-alternative-with-a-completely-different-paradigm-44682
legendary
Activity: 1536
Merit: 1000
electronic [r]evolution
Sender can store copies of blocks in which he made transactions. Validity of blocks can always be proved with chain of block headers(these are stored indefinitely) and sender can still prove that he had send funds to some address with certain message even after rest of network forgot about it.
That's a good idea actually, but I was talking about if the receiver comes online after the block of interest has been pruned from the mini-blockchain. They will be able to verify the money went to them because of the address database (which I now prefer to call the account database), but if they come online too late they wont be able to identify the sender or get the message. They could as you mentioned just get the block again from the sender if the sender saved it and sender node was still online. Or they could ask around in the hope another node was still holding onto the block they were after. But they would really only need to bother with this to retrieve detailed information about the transaction, it's always possible to confirm received funds without needing the block in which the transaction happened.
sr. member
Activity: 359
Merit: 250
But my latest solution is perfect. As far as I can tell it provides that almost "absolute" level of security bitcoin has.
Enough bragging Smiley just publish solution already and we can get to work.
sr. member
Activity: 359
Merit: 250
No that's not enough to make it sufficiently secure. That's why I kept thinking about this problem, and now I finally do have a solution. It was really so obvious all along. I' about 99% confident this idea will work, but then again I'm no mathematician or cryptographer.
I don't see it this way. Maybe there is a thread where I can see arguments against its security? Anyway I am looking forward to see your idea and there is no point to discuss before you publish it.

But you still have a point. I was thinking about this earlier today actually. But one must remember the message will only remain visible whilst it is in the mini-blockchain. After that it wont be possible to see the message or even where the funds came from.
Sender can store copies of blocks in which he made transactions. Validity of blocks can always be proved with chain of block headers(these are stored indefinitely) and sender can still prove that he had send funds to some address with certain message even after rest of network forgot about it.
legendary
Activity: 1536
Merit: 1000
electronic [r]evolution
Make a checkbox in the client to enable full or pruned blockchain download.  Pruned blockchain can just download the block from a bunch of full nodes in the event of a dispute.  The danger of a sybil attack exists, but I don't think it's great.
I think the whole point of finite blockchain is that NO node in network is required to hold full copy of blockchain. If you still need full nodes i don't see how it is better than bitcoin.
Yes exactly. That's why I was unsatisfied with the solution of having a mini-blockchain plus older historical blocks as backup security. It's really an unsatisfying and rather redundant solution which takes us back closer to square one.

But my latest solution is perfect. As far as I can tell it provides that almost "absolute" level of security bitcoin has. It uses the same type of mini-blockchain concept but doesn't require those pesky historical blocks. Well it requires a type of historical information, but not full blocks, that's a clue to the solution. But the information it does need to store is tiny and could build up for thousands of years without being a problem. It could also be pruned down after a sufficient time period.
legendary
Activity: 1536
Merit: 1000
electronic [r]evolution
Try to not overthink this. I believe including hash of state of all known accounts and its balances in block headers is sufficient to keep level of security similar to bitcoin.
No that's not enough to make it sufficiently secure. That's why I kept thinking about this problem, and now I finally do have a solution. It was really so obvious all along. I'm about 99% confident this idea will work, but then again I'm no mathematician or cryptographer.

one simple feature which would bring users to it: attaching custom message to a payment. Bitcoin cannot do this because it would bloat blockchain to unmanageable size, but it shouldn't be a problem when you can forget transactions and just keep balance sheet.
I think bitcoin can do it, however the function was removed from the GUI to reduce blockchain bloating. I believe the protocol is still in place and some services such as blockchain.info allow you to embed a message into the blockchain.

But you still have a point. I was thinking about this earlier today actually. But one must remember the message will only remain visible whilst it is in the mini-blockchain. After that it wont be possible to see the message or even where the funds came from.

But it's better than nothing and trimming off the old blocks gives it more anonymity. Not to mention the real advantage is faster transactions and a fast synchronization time always. That's what the next generation of crypto-currency needs to be like. Fast and slim, yet still secure.
sr. member
Activity: 359
Merit: 250
Make a checkbox in the client to enable full or pruned blockchain download.  Pruned blockchain can just download the block from a bunch of full nodes in the event of a dispute.  The danger of a sybil attack exists, but I don't think it's great.
I think the whole point of finite blockchain is that NO node in network is required to hold full copy of blockchain. If you still need full nodes i don't see how it is better than bitcoin.

Quote
I'm not sure I even follow this logic, though.  If the ledger contains every address and every amount of coins at every address, whenever a block is received you can just adjust the ledger accordingly.
For instance,
block n: send 50 coins to address 1 from address 2
block n+m: send 50 coins to address 1 from address 3

Client sees both tx at different times, adds 50 coins each time to adjust the ledger, hashes the ledger and checks it against the one in the next block found.  Address 1 contains 100 coins, while both address 2 and address 3 contain 50 less coins.  That the amount is duplicated is of no consequence as long as the quantities are adjusted per block.  If you want to include stake, you just input the block height and make separate amounts for each input.  Or, you can simply ignore this and just download the block from one of the full blockchain clients from which the stake is claimed to arise.  All the block hashes are easily able to be stored by anyone, so verification of any single block in the blockchain history is very simple.
Account version is not needed to ensure proper balances modifications. It is needed for transaction verification. Suppose transaction is just
(from, amount, to) and you authorize it by private key signature S

In block n you send a transaction (from A, to B, 50.00). You sign it and broadcast. Suppose you want to repeat payment in next block and again send exactly the same transaction (from A, to B, 50.00). Signature for second transaction is exactly the same as for first one, so anyone can just copy it from previous block and broadcast it without your permission. That is why you need versions.

Quote
You can just sign a message from the address you send it from...
This requires separate channel of communication. Think how simple from merchant side things would be if he could just post his account on website and you would send your payment along with order id. Whole idea of separate address for each transaction is not intuitive and is not healthy for blockchain size too.
legendary
Activity: 1484
Merit: 1005
You need to increase the output size of the hash to above 64 bits to get any reasonable amount of security... even SHA1 has a 160 bit output.  Then you introduce the very real possibility of NMC-style chain bloat, as the input for these parts of the tx on the blockchain would have to be arbitrary.
hero member
Activity: 798
Merit: 1000
You can just sign a message from the address you send it from...

Requires a direct connection, unreliable.

The true beauty of being able to include say an 8 byte message, is that you can have the seller sign a message saying "I am giving you widget X for Y coins paid to Z address" then hash that and include it as the receipt of the transaction. Later you can prove you have made payment. (Though not forever.)

This was an idea I had come up with while developing encoin/decrits. It's a nice feature, and it allows increased anonymity as say, someone using a bank-like intermediary can prove to the intermediary that the transaction is his, or simply have the intermediary approve the receipt first, and the transaction will be credited to his account. Network privacy++
legendary
Activity: 1484
Merit: 1005
Quote from: tacotime
You can use a consensus network via stake to do ledger verification, too.
I think PoS makes transaction pruning impossible. How would you suppose to check if miner of block N in the past really held claimed amount of stake at time of block signing if you forgot how account balances looked at that time?
Make a checkbox in the client to enable full or pruned blockchain download.  Pruned blockchain can just download the block from a bunch of full nodes in the event of a dispute.  The danger of a sybil attack exists, but I don't think it's great.

Quote
Quote
Yes, it would be a good idea to include the block height and also the depth in the block in which the last tx appears.
I think block height is sufficient for account ledger.

I'm following from
Quote
Actually minimum ledger entry is
(Address, amount, version)

Version is needed because coins are indistinguishable and without version a transaction to send first half of balance to some address would look exactly same as transaction to send other half of coins to this address. Simply receiver of first transaction could rebroadcast same, already signed transaction, in subsequent block and receive rest of coins. Version needs to be increased after every withdraw from address in order to defend from this kind of fraud. I think version can simply be block number in which last withdrawal was included.
I'm not sure I even follow this logic, though.  If the ledger contains every address and every amount of coins at every address, whenever a block is received you can just adjust the ledger accordingly.
For instance,
block n: send 50 coins to address 1 from address 2
block n+m: send 50 coins to address 1 from address 3

Client sees both tx at different times, adds 50 coins each time to adjust the ledger, hashes the ledger and checks it against the one in the next block found.  Address 1 contains 100 coins, while both address 2 and address 3 contain 50 less coins.  That the amount is duplicated is of no consequence as long as the quantities are adjusted per block.  If you want to include stake, you just input the block height and make separate amounts for each input.  Or, you can simply ignore this and just download the block from one of the full blockchain clients from which the stake is claimed to arise.  All the block hashes are easily able to be stored by anyone, so verification of any single block in the blockchain history is very simple.

Quote
Try to not overthink this. I believe including hash of state of all known accounts and its balances in block headers is sufficient to keep level of security similar to bitcoin.

Anyway new coin with finite blockhain would be a winner, because we could include one simple feature which would bring users to it: attaching custom message to a payment. Bitcoin cannot do this because it would bloat blockchain to unmanageable size, but it shouldn't be a problem when you can forget transactions and just keep balance sheet.
You can just sign a message from the address you send it from...
sr. member
Activity: 359
Merit: 250
Try to not overthink this. I believe including hash of state of all known accounts and its balances in block headers is sufficient to keep level of security similar to bitcoin.

Anyway new coin with finite blockhain would be a winner, because we could include one simple feature which would bring users to it: attaching custom message to a payment. Bitcoin cannot do this because it would bloat blockchain to unmanageable size, but it shouldn't be a problem when you can forget transactions and just keep balance sheet.
legendary
Activity: 1536
Merit: 1000
electronic [r]evolution
Wow this thread suddenly became alive after a few weeks.

Weird because yesterday I really made some groundbreaking progress with this concept.

I figured out how to give the mini-blockchain bitcoin-level integrity, yet still remain finite.

Countless hours of thinking have finally paid off. I plan to write a white paper on this.

I wont reveal the solution yet, but I will soon enough.
sr. member
Activity: 359
Merit: 250
Quote from: tacotime
You can use a consensus network via stake to do ledger verification, too.
I think PoS makes transaction pruning impossible. How would you suppose to check if miner of block N in the past really held claimed amount of stake at time of block signing if you forgot how account balances looked at that time?

Quote
Yes, it would be a good idea to include the block height and also the depth in the block in which the last tx appears.
I think block height is sufficient for account ledger.
legendary
Activity: 1484
Merit: 1005
Yes, it would be a good idea to include the block height and also the depth in the block in which the last tx appears.
sr. member
Activity: 359
Merit: 250
Quote
Don't forget (from_acct_num, amt, to_acct_num) for a total of 15 or so bytes + signature.
Good idea. If account's in database have well established order you could include just account offset instead of key.

Quote
Ideally the client should keep a ledger of addresses and amounts at the address to prevent double spending.
Actually minimum ledger entry is
(Address, amount, version)

Version is needed because coins are indistinguishable and without version a transaction to send first half of balance to some address would look exactly same as transaction to send other half of coins to this address. Simply receiver of first transaction could rebroadcast same, already signed transaction, in subsequent block and receive rest of coins. Version needs to be increased after every withdraw from address in order to defend from this kind of fraud. I think version can simply be block number in which last withdrawal was included.
legendary
Activity: 1484
Merit: 1005
I had been thinking about similar idea independently and this is what I came up with:

Blockchain has two different functions.

1 ) Maintaining a distributed database
2 ) A way to know which view of this database is correct/most up to date

These two functions are independent. Distributed database can be almost anything you like as long as you define some basic rules for applying modification to it.

1) works this way:
There is some initial database state (genesis block). Every subsequent block contains some operations that modifies this state (in bitcoin these are transactions).

2) works as follows:
Block headers contains proof of work which is used to check which database view should be considered correct. Rule is simple: you find peer which have longest block header chain (in terms of proof of work) and you know what the correct database should look like (best block header contains hash of correct database). Then you download current database from peers and check whether it is correct.

Bitcoin uses somewhat peculiar database format: list of all transaction that happened from genesis block (block chain still needs to be stored at some nodes for the sake of history, but not all). I don't see any reason why database format can't be changed to something else. For example list of public keys with corresponding balances as you propose.

Here is my idea:

Database is just a list of accounts.
Every account consists of three things:
(public key, balance, block number of last spend operation)

Every block includes some number of transactions.
Transaction is (from_pubkey, from_last_spend_block, amount, destination_pub_key). You prove your ownership by signing it with private key of sending address.

Miners collects transactions, apply it to current database state and generates block.
In block header miner include hash of transactions and hash of database after applying all of these transactions.
Network validates that all included transaction are correct just like with bitcoin.

What is better than bitcoin is that block contents are not really needed after network reached consensus about database state, so after say 1000 blocks you can discard oldest block contents and just store account list at that moment.

This post is probably little chaotic but I can clarify my idea if you give questions.

Ideally the client should keep a ledger of addresses and amounts at the address to prevent double spending.  Then, miners could hash this ledger with modified transactions and include it in the block header so that all clients can verify that their ledger is the same.  You can use a consensus network via stake to do ledger verification, too.  I will be trying to integrate this into MC2/Netcoin, and hopefully bring the client load into the mb range, but I'm going to give no guarantees at this early point in time.
hero member
Activity: 798
Merit: 1000
A nice advantage of an idea like Decrits (see sig), is that in addition to being blockchain-less, the proof-of-consensus mechanism requires only only about 100 bytes per shareholder for a light client to see that consensus has been reached. ~100k people securing the network? A 10MB download from virtually any historical point to verify any hash tree in the account block (a few kb). I can go into more detail, but this is something I went over a looong time ago when first trying to change bitcoin. It can be done and I have the game plan for it.

"Transaction is (from_pubkey, from_last_spend, destination_pub_key). You prove your ownership by signing it with private key of sending address."

Don't forget (from_acct_num, amt, to_acct_num) for a total of 15 or so bytes + signature. If you are going to use blocks of accounts, you need to take advantage of assigning them an integer instead of a key for bandwidth savings.
sr. member
Activity: 359
Merit: 250
I had been thinking about similar idea independently and this is what I came up with:

Blockchain has two different functions.

1 ) Maintaining a distributed database
2 ) A way to know which view of this database is correct/most up to date

These two functions are independent. Distributed database can be almost anything you like as long as you define some basic rules for applying modification to it.

1) works this way:
There is some initial database state (genesis block). Every subsequent block contains some operations that modifies this state (in bitcoin these are transactions).

2) works as follows:
Block headers contains proof of work which is used to check which database view should be considered correct. Rule is simple: you find peer which have longest block header chain (in terms of proof of work) and you know what the correct database should look like (best block header contains hash of correct database). Then you download current database from peers and check whether it is correct.

Bitcoin uses somewhat peculiar database format: list of all transaction that happened from genesis block. I don't see any reason why database format can't be changed to something else. For example list of public keys with corresponding balances as you propose.

Here is my idea:

Database is just a list of accounts.
Every account consists of three things:
(public key, balance, block number of last spend operation)

Every block includes some number of transactions.
Transaction is (from_pubkey, from_last_spend_block, amount, destination_pub_key). You prove your ownership by signing it with private key of sending address.

Miners collects transactions, apply it to current database state and generates block.
In block header miner include hash of transactions and hash of database after applying all of these transactions.
Network validates that all included transaction are correct just like with bitcoin.

What is better than bitcoin is that block contents are not really needed after network reached consensus about database state, so after say 1000 blocks you can discard oldest block contents and just store account list at that moment.

This post is probably little chaotic but I can clarify my idea if you give questions.
Pages:
Jump to: