Bitcoin Forum
May 17, 2024, 05:36:14 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 »  All
  Print  
Author Topic: Cryptocurrency with Finite "Mini-Blockchain"  (Read 5728 times)
bitfreak! (OP)
Legendary
*
Offline Offline

Activity: 1536
Merit: 1000


electronic [r]evolution


View Profile WWW
April 07, 2013, 03:54:29 AM
Last edit: April 07, 2013, 06:34:01 AM by bitfreak!
 #1

A few weeks ago I made a thread in which I detailed a theoretical idea for a blockchain-less cryptocurrency. The scheme I proposed had potential but was lacking in security. Our discussion led to the idea of a "mini-blockchain" to help secure the address database. I guess before I go any further I should quote a snippet from my other thread so you can get a general idea of my proposal. Keep in mind that the whole point of the concept was to replace the ever-growing blockchain with something finite and manageable.

Quote
At first I considered ways that we might be able to use some sort of decentralized "coin database" which would keep track of the position of every single unit of currency in circulation by attaching public keys to each unit. The owner of the corresponding units would need the private key to confirm his status as the owner, just like in bitcoin. A transaction would simply require peers to shift around numbers in this database instead of adding new data to it. Leaving aside the problem of how mining and confirmations would happen under this scheme, the main problem with this idea is that even for a few billion units the database would still be rather large. Bitcoin has 2.1 quadrillion units in total to ensure sufficient granularity of the money supply.

My calculations indicate that anything past 100 billion units starts to become totally unmanageable if you wish to track every single unit. One trillion units could potentially supply enough granularity but it would be virtually impossible to manage a decentralized database of this size, it would be much bigger than the blockchain already is. So I started to consider other ways this problem might be solved. It seemed to me that there's no point tracking every single unit because many of the units are going to be attached to the same public key. This may be stating the obvious, but what we really need to do is keep track of all the addresses which claim ownership to any units. That is essentially what bitcoin does, but it does it by keeping track of every single transaction (the blockchain).

Even with a population of 10 billion people where each person had 10 different non-empty addresses, we would only need to keep track of 100 billion addresses, which brings us close to the limit before things start to get unmanageable. Under this scheme we can have about 1 quadrillion units which we assume will be spread among a maximum of a few hundred billion addresses. The database would begin empty and as new units were mined (I'll talk about that shortly), and as units were transfered to new addresses, new entries would be saved into the database. Since empty addresses would be forgotten and removed from the database we can keep track of a reasonable number of addresses with some sort of upper limit to what we need to track.

We know that we'll never need to keep track of the 1 quadrillion units because we'll never reach a point where every single unit is stored on a unique address. If you divide 1 quadrillion units by 100 billion (10 billion people with 10 unique addresses each) you get 1 million. So we still have good granularity even with 1 quadrillion units spread among 100 billion addresses and instead of having to manage 1 quadrillion units we only need to manage a max of about 100 billion or so addresses (each with a balance of 1 million units on average). It would also take a while before we started to get even a few billion addresses into the database so by the time we get close to 100 billion or more we will have much better computers capable of handling it.

I then went on to describe a mining mechanism for this system (we'll get to that in a moment), and proceeded to describe how the address database could be managed:

Quote
If the public key is not already in the database it will be added to the database and cause its size to increase. As normal, owners of an address would prove their ownership with the private key. Like bitcoin, transactions would be created as some sort of signed script thingy and would be broadcast over the network. Nodes who accept the transaction would update their own copy of the database by shifting around coins or doing what ever needed to be done. But how would nodes who go offline get updated when they come back online? They would need some way of discovering which address balances have changed and what new addresses exist. This is where my knowledge sort of hits its limit but I have some ideas about how it may work.

I'm not sure, but it may be possible to use some sort of time-stamping solution where we would attach a last modified field to every every row in our address-based-database. So nodes could search for changes in the database where the last modified value is newer than some specified value. This still doesn't ensure exact consistency between nodes however, and a more appropriate solution may be to group our database entries into "blocks" and attach a hash to every block in our database. So along with our address database we would have a list of hashes which correspond to a set of entries in our address database. And from these hashes could perhaps be made a master hash which indicates the current state of the entire address database.

So when the balance of an address changes, the "block" or group of addresses in which that address is located will get a different hash, and therefore the master hash will also change. So nodes could see changes to the database and discover the newest version of the database by requesting the master hash from peers and confirming its validity (read comments). By looking at the individual "block" hashes they can see the general area where the changes have occurred without having to analyze every single address for a change. Then once they gain the updated information for that "block" they can check it hashes correctly. So there is no need to download any historical transaction data, all that's relevant is the current balance of addresses which hold funds.

Removing emptied addresses will also provide an extra layer of privacy which bitcoin cannot provide. And while I think the system I just described for updating the database could potentially work, there's another problem we must deal with when the database is updated in this fashion. As I've described it, transactions don't need to be solved in groups of transactions as blocks (blocks used in the bitcoin sense now). But if we are basically going to keep track of our database with a set of hashes and a master hash, we can't allow every single separate transaction to alter the database on demand. We must break them up into groups of transactions which are inserted into the database in periodic intervals of time, 1 or 2 minutes seems ideal but I'm no expert.

So in developing this scheme I came to the conclusion that for the address database to be updated in a coordinated fashion we still require the groups of transactions to be solved like blocks in bitcoin, meaning the system would still require fees and miners to solve those blocks. Further discussion in the thread brought up the topic of security, and how the address database could be secured against malicious alterations. I decided that if we are going to solve blocks like in bitcoin then we may as well save some of them into a mini-blockchain, perhaps saving the last 20 or 30 days worth of blocks. The reasoning behind this idea is as follows.

The mini-blockchain would provide consensus about which of the current master hashes is correct because the master hashes would also be saved into the blocks, it seems like an obvious thing to do since each time a block is solved and accepted by the network the master hash will change when the transactions in the block are used to alter the address database. So in this way new nodes can see a recent history of the blocks and also the master hashes, and they can easily compute the validity of the blocks along with the validity of the hashes they receive, and thus safely build a copy of the address database with help from the mini-blockchain.

Then the question becomes how can one be sure the mini-blockchain they receive is even valid, since we can't start at the very beginning and work our way up to the latest point? Since each block in the chain must be a solution connected to the last solution, the longer the chain is, the harder it becomes for the attacker to form a fake chain which corresponds to the correct solution rules. Changing one block on the end wont achieve anything because it must correspond to the one before it. The attacker must create a whole new mini-blockchain from the starting block, because before that first block we have no history of what happened.

The problem is that an attacker could take as much time as he needed to form a fully valid mini-blockchain from the start, a chain with a higher cumulative difficulty than the real chain. He could then start broadcasting that mini-blockchain and it might propagate enough to impose a risk of becoming the main mini-blockchain. So we need some way of determining when a fake chain pops out of no where even if it has a higher cumulative difficulty. I've been thinking long and hard about ways in which this problem could be circumvented, and I've come up with some basic ideas (and I'm open to suggestions).

My first idea is just a variant of the basic "ask around" method. Nodes which are always online can keep track of the total cumulative difficultly (not just the cumulative difficulty of the mini-blockchain, but all blocks including blocks which have been trimmed off the chain). So when a completely new mini-blockchain suddenly appears they can't verify the total cumulative difficulty because the first block is unknown to them and they can't verify what happened before that block, unlike the main mini-blockchain which they have been monitoring constantly. So when new nodes ask for the total cumulative difficulty of the fake chain it will be much lower than what they get for the real chain.

So the new node would ask around, and choose a chain based on the results it gets. After choosing a chain to work with that node would also begin supplying the total cumulative difficulty value provided to it in response to other new nodes asking. The only way the attacker could make their fake mini-blockchain propagate in this scenario is if they controlled a majority of the nodes and supplied a fake value for the total cumulative difficulty of their fake chain. This still isn't ideal however and we require more layers of security before it could be trustworthy. Another mechanism we could use is to have a dynamic mini-blockchain length.

So in other words there's no requirement to trim the mini-blockchain, some nodes would keep track of more than just the last 30 days if they wanted to. There would be a lower limit, so you must store a certain amount of blocks, but the upper limit could be infinite... so some nodes could store the entire blockchain history if they really wanted to, just like bitcoin. So if a new node comes across two competing mini-blockchains, they can simply ask around for people who have older blocks to prove which mini-blockchain is legitimate. Which ever chain can prove to have the oldest blocks wins.

It's still not perfect because the attacker could create many historic blocks to back up their mini-blockchain, but the task of creating a fake mini-blockchain becomes much more difficult depending on how many blocks some legitimate nodes choose to save. Now when it comes to mining, my old proposal of separating the mining process from the block solving process as described in my other thread isn't such a good idea because it takes a lot of the computing power away from the blockchain and makes the mini-blockchain weaker. I initially decided to make the mining process like this because I wasn't planning on having a blockchain.

However since this idea has morphed into a scheme which requires a mini-blockchain, there's no need to separate the mining process from the block solving process, new coins can be created in exactly the same way as bitcoin, and thus put maximum power into the mini-blockchain to help secure it against attackers who might wish to build a fake mini-blockchain. I do believe this has the potential to work as I've described it, but as I said it's not completely perfect. Bitcoin is always going to be more secure than any system which utilizes a mini-blockchain and not a full blockchain. But bitcoin needs a full blockchain because it doesn't have a separate address database.

The advantages of this system are perhaps worth the drop in security however... transactions could be faster and the transaction bandwidth could be much larger since it could handle a much large max block size because we only need to keep of a finite number of blocks and we don't have to worry about the mini-blockchain growing ridiculously huge forever. There are still limits of course, but those limits are much more reasonable if we expect our cryptocurrency to reach the transaction capacity of PayPal or higher... Bitcoin most likely wont ever be able to reach that type of capacity and we will most likely require multiple alt-coins to handle all the traffic.

So I definitely think there is a place for a currency like this if we are willing to accept these slight losses in security... if any of you have any ideas about how we could further protect the system from fake mini-blockchains I'm all ears. I believe this concept is worth further investigation because other bitcoin clones with small tweaks will never really compare to the original bitcoin but something like this could provide us with truly fresh and unique advantages over bitcoin. The goal isn't to give bitcoin a monopoly on cryptocurrencies, the goal is to create a competitive free market of cryptocurrencies which can give us options beyond Government approved currencies.

XCN: CYsvPpb2YuyAib5ay9GJXU8j3nwohbttTz | BTC: 18MWPVJA9mFLPFT3zht5twuNQmZBDzHoWF
Cryptonite - 1st mini-blockchain altcoin | BitShop - digital shop script
Web Developer - PHP, SQL, JS, AJAX, JSON, XML, RSS, HTML, CSS
bitfreak! (OP)
Legendary
*
Offline Offline

Activity: 1536
Merit: 1000


electronic [r]evolution


View Profile WWW
April 07, 2013, 06:12:49 AM
 #2

BTW if there's anyone interested in attempting to build something like this PM me. I really don't have the skills to do it myself but I wish I did. I'm only a website developer and website development is a long stretch from the skills required to build P2P cryptocurrency software, but I could be of help with any web related work.

But before anyone attempts to build anything like this we need to really flesh out some of these ideas and develop an exact security model to protect against the issues I have described here. Once that is done other issues such as the type of mining, the max block size, the rate at which blocks are solved, and that sort of things can be discussed.

Some of the existing alt-coins have some interesting features which could be included in this scheme to make it as fair as possible and as fast as possible.

XCN: CYsvPpb2YuyAib5ay9GJXU8j3nwohbttTz | BTC: 18MWPVJA9mFLPFT3zht5twuNQmZBDzHoWF
Cryptonite - 1st mini-blockchain altcoin | BitShop - digital shop script
Web Developer - PHP, SQL, JS, AJAX, JSON, XML, RSS, HTML, CSS
aaaxn
Sr. Member
****
Offline Offline

Activity: 359
Merit: 250



View Profile
April 29, 2013, 03:43:16 PM
Last edit: April 29, 2013, 04:29:57 PM by aaaxn
 #3

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.


                                                                              █
                              █████████                  ██████ 
                      ███████████████████████████   
              ███████████████████████████████   
            ████████████████████████████████   
        █████████████████████████████████     
    ████████████████████████████████████   
    ████████          █████████          █████████   
  ████████                ██████              ████████   
█████████                █████                ████████   
███████████                █                ███████████ 
██████████████                      ██████████████ 
█████████████████            ████████████████ 
███████████████                  ███████████████ 
█████████████                          █████████████ 
███████████              ███                ██████████ 
█████████                █████                ████████   
  ████████              ███████              ███████     
    █████████        █████████          ████████     
      █████████████████████████████████       
        ██████████████████████████████           
            ███████████████████████████             
              ████████████████████████                 
                  ████████████████████                     
CorionX


















Powered by,
Etlase2
Hero Member
*****
Offline Offline

Activity: 798
Merit: 1000


View Profile
April 29, 2013, 04:22:19 PM
 #4

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.

tacotime
Legendary
*
Offline Offline

Activity: 1484
Merit: 1005



View Profile
April 29, 2013, 04:48:49 PM
 #5

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.

Code:
XMR: 44GBHzv6ZyQdJkjqZje6KLZ3xSyN1hBSFAnLP6EAqJtCRVzMzZmeXTC2AHKDS9aEDTRKmo6a6o9r9j86pYfhCWDkKjbtcns
aaaxn
Sr. Member
****
Offline Offline

Activity: 359
Merit: 250



View Profile
April 29, 2013, 05:19:02 PM
Last edit: April 29, 2013, 05:34:29 PM by aaaxn
 #6

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.


                                                                              █
                              █████████                  ██████ 
                      ███████████████████████████   
              ███████████████████████████████   
            ████████████████████████████████   
        █████████████████████████████████     
    ████████████████████████████████████   
    ████████          █████████          █████████   
  ████████                ██████              ████████   
█████████                █████                ████████   
███████████                █                ███████████ 
██████████████                      ██████████████ 
█████████████████            ████████████████ 
███████████████                  ███████████████ 
█████████████                          █████████████ 
███████████              ███                ██████████ 
█████████                █████                ████████   
  ████████              ███████              ███████     
    █████████        █████████          ████████     
      █████████████████████████████████       
        ██████████████████████████████           
            ███████████████████████████             
              ████████████████████████                 
                  ████████████████████                     
CorionX


















Powered by,
tacotime
Legendary
*
Offline Offline

Activity: 1484
Merit: 1005



View Profile
April 29, 2013, 05:53:11 PM
 #7

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.

Code:
XMR: 44GBHzv6ZyQdJkjqZje6KLZ3xSyN1hBSFAnLP6EAqJtCRVzMzZmeXTC2AHKDS9aEDTRKmo6a6o9r9j86pYfhCWDkKjbtcns
aaaxn
Sr. Member
****
Offline Offline

Activity: 359
Merit: 250



View Profile
April 29, 2013, 07:28:50 PM
 #8

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.


                                                                              █
                              █████████                  ██████ 
                      ███████████████████████████   
              ███████████████████████████████   
            ████████████████████████████████   
        █████████████████████████████████     
    ████████████████████████████████████   
    ████████          █████████          █████████   
  ████████                ██████              ████████   
█████████                █████                ████████   
███████████                █                ███████████ 
██████████████                      ██████████████ 
█████████████████            ████████████████ 
███████████████                  ███████████████ 
█████████████                          █████████████ 
███████████              ███                ██████████ 
█████████                █████                ████████   
  ████████              ███████              ███████     
    █████████        █████████          ████████     
      █████████████████████████████████       
        ██████████████████████████████           
            ███████████████████████████             
              ████████████████████████                 
                  ████████████████████                     
CorionX


















Powered by,
bitfreak! (OP)
Legendary
*
Offline Offline

Activity: 1536
Merit: 1000


electronic [r]evolution


View Profile WWW
April 29, 2013, 08:48:10 PM
 #9

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.

XCN: CYsvPpb2YuyAib5ay9GJXU8j3nwohbttTz | BTC: 18MWPVJA9mFLPFT3zht5twuNQmZBDzHoWF
Cryptonite - 1st mini-blockchain altcoin | BitShop - digital shop script
Web Developer - PHP, SQL, JS, AJAX, JSON, XML, RSS, HTML, CSS
aaaxn
Sr. Member
****
Offline Offline

Activity: 359
Merit: 250



View Profile
April 30, 2013, 07:02:44 AM
 #10

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.


                                                                              █
                              █████████                  ██████ 
                      ███████████████████████████   
              ███████████████████████████████   
            ████████████████████████████████   
        █████████████████████████████████     
    ████████████████████████████████████   
    ████████          █████████          █████████   
  ████████                ██████              ████████   
█████████                █████                ████████   
███████████                █                ███████████ 
██████████████                      ██████████████ 
█████████████████            ████████████████ 
███████████████                  ███████████████ 
█████████████                          █████████████ 
███████████              ███                ██████████ 
█████████                █████                ████████   
  ████████              ███████              ███████     
    █████████        █████████          ████████     
      █████████████████████████████████       
        ██████████████████████████████           
            ███████████████████████████             
              ████████████████████████                 
                  ████████████████████                     
CorionX


















Powered by,
tacotime
Legendary
*
Offline Offline

Activity: 1484
Merit: 1005



View Profile
April 30, 2013, 07:12:23 AM
 #11

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...

Code:
XMR: 44GBHzv6ZyQdJkjqZje6KLZ3xSyN1hBSFAnLP6EAqJtCRVzMzZmeXTC2AHKDS9aEDTRKmo6a6o9r9j86pYfhCWDkKjbtcns
Etlase2
Hero Member
*****
Offline Offline

Activity: 798
Merit: 1000


View Profile
April 30, 2013, 07:24:57 AM
 #12

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++

tacotime
Legendary
*
Offline Offline

Activity: 1484
Merit: 1005



View Profile
April 30, 2013, 07:39:17 AM
 #13

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.

Code:
XMR: 44GBHzv6ZyQdJkjqZje6KLZ3xSyN1hBSFAnLP6EAqJtCRVzMzZmeXTC2AHKDS9aEDTRKmo6a6o9r9j86pYfhCWDkKjbtcns
aaaxn
Sr. Member
****
Offline Offline

Activity: 359
Merit: 250



View Profile
April 30, 2013, 07:45:21 AM
 #14

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.


                                                                              █
                              █████████                  ██████ 
                      ███████████████████████████   
              ███████████████████████████████   
            ████████████████████████████████   
        █████████████████████████████████     
    ████████████████████████████████████   
    ████████          █████████          █████████   
  ████████                ██████              ████████   
█████████                █████                ████████   
███████████                █                ███████████ 
██████████████                      ██████████████ 
█████████████████            ████████████████ 
███████████████                  ███████████████ 
█████████████                          █████████████ 
███████████              ███                ██████████ 
█████████                █████                ████████   
  ████████              ███████              ███████     
    █████████        █████████          ████████     
      █████████████████████████████████       
        ██████████████████████████████           
            ███████████████████████████             
              ████████████████████████                 
                  ████████████████████                     
CorionX


















Powered by,
bitfreak! (OP)
Legendary
*
Offline Offline

Activity: 1536
Merit: 1000


electronic [r]evolution


View Profile WWW
April 30, 2013, 07:51:47 AM
Last edit: April 30, 2013, 08:05:01 AM by bitfreak!
 #15

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.

XCN: CYsvPpb2YuyAib5ay9GJXU8j3nwohbttTz | BTC: 18MWPVJA9mFLPFT3zht5twuNQmZBDzHoWF
Cryptonite - 1st mini-blockchain altcoin | BitShop - digital shop script
Web Developer - PHP, SQL, JS, AJAX, JSON, XML, RSS, HTML, CSS
bitfreak! (OP)
Legendary
*
Offline Offline

Activity: 1536
Merit: 1000


electronic [r]evolution


View Profile WWW
April 30, 2013, 08:00:24 AM
 #16

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.

XCN: CYsvPpb2YuyAib5ay9GJXU8j3nwohbttTz | BTC: 18MWPVJA9mFLPFT3zht5twuNQmZBDzHoWF
Cryptonite - 1st mini-blockchain altcoin | BitShop - digital shop script
Web Developer - PHP, SQL, JS, AJAX, JSON, XML, RSS, HTML, CSS
aaaxn
Sr. Member
****
Offline Offline

Activity: 359
Merit: 250



View Profile
April 30, 2013, 08:04:02 AM
 #17

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.


                                                                              █
                              █████████                  ██████ 
                      ███████████████████████████   
              ███████████████████████████████   
            ████████████████████████████████   
        █████████████████████████████████     
    ████████████████████████████████████   
    ████████          █████████          █████████   
  ████████                ██████              ████████   
█████████                █████                ████████   
███████████                █                ███████████ 
██████████████                      ██████████████ 
█████████████████            ████████████████ 
███████████████                  ███████████████ 
█████████████                          █████████████ 
███████████              ███                ██████████ 
█████████                █████                ████████   
  ████████              ███████              ███████     
    █████████        █████████          ████████     
      █████████████████████████████████       
        ██████████████████████████████           
            ███████████████████████████             
              ████████████████████████                 
                  ████████████████████                     
CorionX


















Powered by,
aaaxn
Sr. Member
****
Offline Offline

Activity: 359
Merit: 250



View Profile
April 30, 2013, 08:06:31 AM
 #18

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.


                                                                              █
                              █████████                  ██████ 
                      ███████████████████████████   
              ███████████████████████████████   
            ████████████████████████████████   
        █████████████████████████████████     
    ████████████████████████████████████   
    ████████          █████████          █████████   
  ████████                ██████              ████████   
█████████                █████                ████████   
███████████                █                ███████████ 
██████████████                      ██████████████ 
█████████████████            ████████████████ 
███████████████                  ███████████████ 
█████████████                          █████████████ 
███████████              ███                ██████████ 
█████████                █████                ████████   
  ████████              ███████              ███████     
    █████████        █████████          ████████     
      █████████████████████████████████       
        ██████████████████████████████           
            ███████████████████████████             
              ████████████████████████                 
                  ████████████████████                     
CorionX


















Powered by,
bitfreak! (OP)
Legendary
*
Offline Offline

Activity: 1536
Merit: 1000


electronic [r]evolution


View Profile WWW
April 30, 2013, 08:17:14 AM
Last edit: May 01, 2013, 12:01:35 PM by bitfreak!
 #19

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.

XCN: CYsvPpb2YuyAib5ay9GJXU8j3nwohbttTz | BTC: 18MWPVJA9mFLPFT3zht5twuNQmZBDzHoWF
Cryptonite - 1st mini-blockchain altcoin | BitShop - digital shop script
Web Developer - PHP, SQL, JS, AJAX, JSON, XML, RSS, HTML, CSS
Etlase2
Hero Member
*****
Offline Offline

Activity: 798
Merit: 1000


View Profile
April 30, 2013, 08:45:53 AM
 #20

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://bitcointalk.org/index.php?topic=505.0

I also independently came up with the solution in 2011: https://bitcointalk.org/index.php?topic=44682.0

Pages: [1] 2 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!