Spore in Tech

Spore is built on the Cell model, a combination of the benefits found in Ethereum's account model and Bitcoin's UTXO model, providing enhanced asset ownership and proof-based verification capabilities.

There are two defined cell types: Spore cell and Spore Cluster cell, of which Spore cell is the fundamental and the only necessary unit in the protocol. Other cell types are optional and may serve as extension cells, providing extra information to a Spore.

As illustrated above, Spore cells come in three forms:

  • Multiple Spores cells (Spore #1, #2) in a cluster (Spore Cluster #1)

  • A single Spore cell (Spore #4) in a cluster (Spore Cluster #2)

  • A standalone Spore cell, i.e., a Spore without a cluster (Spore #3)


Functionalities

Spore Protocol is anchored around the following key functionalities:

  • Immutable digital asset issuance

  • Permanent on-chain storage

  • Minimized cell specification dedicated for content storage

  • Built-in extensibility on the protocol level

Data Structure

Spore Cell

data:
    content-type: Bytes # String Bytes
    content: Bytes
    # OPTIONAL
    cluster_id: Bytes # TYPE_ID_OF_CLUSTER
type:
    hash_type: "data1"
    code_hash: SPORE_V1_DATA_HASH # hash of Spore's type script data hash
    args: SPORE_ID
lock:
    <user-defined>
  • content-type suggests the textual data format of the content field, following the MIME standard and enabling extension feature labels, like TYPE/SUBTYPE;PARAM=VAL.

    While users can enjoy the flexibility using this param to extend Spore Protocol, there are also several preset parameters available. For instance, when the immortal param is enabled as immortal=true, a Spore becomes indestructible, meaning it lives on-chain forever and cannot be destroyed under any circumstances. immortal is set to false by default.

    Example: content-type: image/png;immortal=true

  • content contains the data of a Spore.

  • cluster_id is an optional field denoting the series or class collection of this Spore. Refer to the following section for more details.

  • type is a script set to SPORE_V1_DATA_HASH with args equal to spore_id, following spore_id = hash(this_transaction.inputs[0]) | Groupoutput_index_of_this_cell.

Data in a Spore Cell remains immutable once created. A Spore Cell is transferable, destructible, and when the immortal extension is enabled, it becomes indestructible, remaining on-chain permanently.

Spore Cluster Cell

data:
    name: <VARTEXT>
    description: <VARTEXT>
type:
    code_hash: SPORE_CLUSTER_TYPE
    args: TYPE_ID
  • name denotes the name of the Spore cluster.

  • description offers a textual portrayal of this particular cluster.

  • type is a script configured as SPORE_CLUSTER_TYPE, with args set to CLUSTER_ID, following the guidelines of the Type ID script. CLUSTER_ID is established with the formula hash(this_transaction.inputs[0]) | Grouputput_index_of_this_cell.

Data in a Spore Cluster Cell remains immutable once created. A Spore Cluster Cell is transferable, indestructible, and immortal. It cannot be destroyed under any circumstances and remains on-chain permanently.

Last updated

Was this helpful?