Skip to main content

Create Spore

Spore is the basic unit of Spore Protocol, you can put anything in it to store on-chain. In the recipe, you will learn how to create a spore on-chain using the spore-sdk.

Create a Spore

You can create a spore with the createSpore API from spore-sdk:

import { createSpore } from '@spore-sdk/core';

let { txSkeleton } = await createSpore({
data: {
contentType: CONTENT_MIME_TYPE,
content: CONTENT_AS_BYTES,
},
toLock: OWNER_LOCK,
fromInfos: [OWNER_ADDRESS],
});
  • data - The spore's data, including file data relevant properties.
  • toLock - The lock script specifies the spore's ownership.
  • fromInfos - The transaction's sponsors, specifies where to collect capacity from.

Extras

Code example

A spore creation transaction involves 3 steps: construct, sign, and send. This recipe focuses on the transaction construction. For a valid on-chain transaction, you'll need to sign the transaction and send it to the chain.

Here's a code example for how to create a spore with CKB default lock:

createSpore.ts
Create a Spore on-chain with CKB default lock
https://github.com/sporeprotocol/spore-sdk/blob/beta/examples/secp256k1/apis/createSpore.ts

Configure transaction size limits

By default, spore-sdk limits the size of spore creation transactions to be ≤500KB (500 * 1024 bytes), any spore creation transactions exceeding the size limit will not succeed.

You have the option to lower the limit when calling the createSpore API:

import { createSpore } from '@spore-sdk/core';

let { txSkeleton } = await createSpore({
...
maxTransactionSize: 400 * 1024,
});

Or pass a false to disable the limit:

import { createSpore } from '@spore-sdk/core';

let { txSkeleton } = await createSpore({
...
maxTransactionSize: false,
});