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 中排名
1,295 每月下载量
用于 polkadot-sdk
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