<
 
 
 
 
×
>
hide You are viewing an archived web page, collected at the request of Ethereum Foundation using Archive-It. This page was captured on 00:09:23 Jun 22, 2021 , and is part of the Community collection. The information on this web page may be out of date. See All versions of this archived page. Loading media information

Self replicating contract

Will it be possible for a contract to replicate itself?

Why would you want this you ask? Consider the following example:

A notary contract
- Stores hashes of documents in the contract storage.
- A contract plugin will allow you to open a document and verify if (and if so when) the has of the document has been stored in the Etherum blockchain.
- When the contract storage is almost full, the contract uses parts of the received ether to open a new contract, so it has new storage available.
- It will notify a 'tracker' contract of it's new location by sending a transaction with a small amount of either to the tracker contract, which stores the senders address in address storage.

An alternative would be to store the hashes off-blockchain, and just use the contract for the payment and verification (in the same way as the dropbox alternative example in the whitepaper).

Comments

  • yoyoyoyo Member Posts: 34 ✭✭✭
    edited February 2014
    Make a loop reading the first storage slots of permanent storage where the code is stored, send that to the empty address. Voilà, self replicating contract replicating itself until there is no ethers left to create the next generation.
    The only problem I see is for the Nonce. We will need to have pseudorandom number generators seeded with the contract address or something.
  • VitalikButerinVitalikButerin Administrator Posts: 84 admin
    edited February 2014
    if contract.storage[9999] == 0: contract.storage[9999] = 1 x = array() x[0] = contract.address mktx(TRACKER,10^18,x,1) [ main code ] if copyme: data = array() i = 0 while contract.storage[i] > 0: data[i] = contract.storage[i] mktx(0,10^18,data,i)

    Also, the nonce isn't an issue; transactions created inside scripting code don't need a nonce. And nonces are meant to be incremental, not pseudorandom anyway.
Sign In or Register to comment.