Files
pezkuwi-sdk/bizinikiwi/pezframe/transaction-storage/README.md
T
pezkuwichain 1c0e57d984 feat: Rebrand Polkadot/Substrate references to PezkuwiChain
This commit systematically rebrands various references from Parity Technologies'
Polkadot/Substrate ecosystem to PezkuwiChain within the kurdistan-sdk.

Key changes include:
- Updated external repository URLs (zombienet-sdk, parity-db, parity-scale-codec, wasm-instrument) to point to pezkuwichain forks.
- Modified internal documentation and code comments to reflect PezkuwiChain naming and structure.
- Replaced direct references to  with  or specific paths within the  for XCM, Pezkuwi, and other modules.
- Cleaned up deprecated  issue and PR references in various  and  files, particularly in  and  modules.
- Adjusted image and logo URLs in documentation to point to PezkuwiChain assets.
- Removed or rephrased comments related to external Polkadot/Substrate PRs and issues.

This is a significant step towards fully customizing the SDK for the PezkuwiChain ecosystem.
2025-12-14 00:04:10 +03:00

87 lines
3.1 KiB
Markdown

# Transaction Storage Pallet
Indexes transactions and manages storage proofs.
Allows storing arbitrary data on the chain. Data is automatically removed after `StoragePeriod` blocks, unless the
storage is renewed. Validators must submit proof of storing a random chunk of data for block `N - StoragePeriod` when
producing block `N`.
# Running a chain
The following describes how to set up a new storage chain.
Start with generating a chain spec.
```bash
cargo run --release -- build-spec --chain=local > sc_init.json
```
Edit the json chain spec file to customise the chain. The storage chain genesis params are configured in the
`transactionStorage` section. Note that `storagePeriod` is specified in blocks and changing it also requires code
changes at the moment.
Build a raw spec from the init spec.
```bash
cargo run --release build-spec --chain=sc_init.json --raw > sc.json
```
Run a few validator nodes.
```bash
cargo run --release -- --chain=sc.json -d /tmp/alice --storage-chain --keep-blocks=100800 --ipfs-server --validator --alice
cargo run --release -- --chain=sc.json -d /tmp/bob --storage-chain --keep-blocks=100800 --ipfs-server --validator --bob
```
`--storage-chain` enables transaction indexing. `--keep-blocks=100800` enables block pruning. The value here should be
greater or equal than the storage period. `--ipfs-server` enables serving stored content over IPFS.
Once the network is started, any other joining nodes need to sync with `--sync=fast`. Regular sync will fail because
block pruning removes old blocks. The chain does not keep full block history.
```bash
cargo run --release -- --chain=sc.json -d /tmp/charlie --storage-chain --keep-blocks=100800 --ipfs-server --validator --charlie --sync=fast
```
# Making transactions
To store data use the `transactionStorage.store` extrinsic. And IPFS CID can be generated from the Blake2-256 hash of
the data.
```js
const util_crypto = require('@pezkuwi/util-crypto');
const keyring_api = require('@pezkuwi/keyring');
const pezkuwi_api = require('@pezkuwi/api');
const fs = require('fs');
const multihash = require('multihashes');
const CID = require('cids')
const wsProvider = new pezkuwi_api.WsProvider();
const api = await pezkuwi_api.ApiPromise.create({ provider: wsProvider });
const keyring = new keyring_api.Keyring({ type: "sr25519" });
const alice = keyring.addFromUri("//Alice");
const file = fs.readFileSync('cute_kitten.jpeg');
const hash = util_crypto.blake2AsU8a(file)
const encoded_hash = multihash.encode(hash, 'blake2b-256');
const cid = new CID(1, 'blake2b-256', encoded_hash)
console.log(cid.toString());
const txHash = await api.tx.transactionStorage.store('0x' + file.toString('hex')).signAndSend(alice);
```
Data can be queried over IPFS
```bash
ipfs swarm connect <bizinikiwi peer address>
ipfs block get /ipfs/<CID> > kitten.jpeg
```
To renew data and prevent it from being disposed after the storage period, use `transactionStorage.renew(block, index)`
where `block` is the block number of the previous store or renew transaction, and index is the index of that transaction
in the block.
License: Apache-2.0