33个重大版本更新

36.0.0 2024年7月18日
35.0.0 2024年7月12日
34.0.0 2024年6月24日
33.0.0 2024年5月23日
0.0.0 2022年11月21日

41#pallet 中排名

Download history 263/week @ 2024-05-03 184/week @ 2024-05-10 180/week @ 2024-05-17 266/week @ 2024-05-24 268/week @ 2024-05-31 191/week @ 2024-06-07 174/week @ 2024-06-14 519/week @ 2024-06-21 85/week @ 2024-06-28 130/week @ 2024-07-05 470/week @ 2024-07-12 211/week @ 2024-07-19 266/week @ 2024-07-26 302/week @ 2024-08-02 391/week @ 2024-08-09 316/week @ 2024-08-16

1,295 每月下载量
用于 polkadot-sdk

Apache-2.0

2.5MB
43K SLoC

交易存储托盘

索引交易并管理存储证明。

允许在链上存储任意数据。数据在 StoragePeriod 块后自动删除,除非存储被续订。验证者必须在生成区块 N 时提交存储随机数据块的证据。

运行链

以下描述了如何设置新的存储链。

从生成链规范开始。

cargo run --release -- build-spec --chain=local > sc_init.json

编辑json链规范文件以自定义链。存储链创世参数在 transactionStorage 部分配置。请注意,storagePeriod 以块为单位指定,并且目前更改它还需要代码更改。

从初始化规范构建原始规范。

cargo run --release build-spec --chain=sc_init.json --raw > sc.json

运行几个验证者节点。

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 启用事务索引。 --keep-blocks=100800 启用区块修剪。这里的值应大于或等于存储期限。 --ipfs-server 启用通过 IPFS 提供存储内容。

启动网络后,任何其他加入的节点需要与 --sync=fast 同步。常规同步将失败,因为区块修剪删除了旧区块。链不保留完整区块历史。

cargo run --release -- --chain=sc.json -d /tmp/charlie --storage-chain --keep-blocks=100800 --ipfs-server --validator --charlie --sync=fast

创建交易

使用 transactionStorage.store 外部函数存储数据。并且可以从数据的 Blake2-256 哈希生成 IPFS CID。

const util_crypto = require('@polkadot/util-crypto');
const keyring_api = require('@polkadot/keyring');
const polkadot_api = require('@polkadot/api');
const fs = require('fs');
const multihash = require('multihashes');
const CID = require('cids')

const wsProvider = new polkadot_api.WsProvider();
const api = await polkadot_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);

可以通过 IPFS 查询数据

ipfs swarm connect <substrate peer address>
ipfs block get /ipfs/<CID> > kitten.jpeg

要续订数据并防止其在存储期限后丢弃,请使用 transactionStorage.renew(block, index),其中 block 是先前存储或续订交易的区块号,index 是该交易在区块中的索引。

许可:Apache-2.0

依赖项

~17–32MB
~537K SLoC