Как у меня со временем возникают трудности с Kulupu (polkadotjs)?
// Import
import { ApiPromise, WsProvider } from "@polkadot/api";
// Construct
/*
https://rpc.kulupu.network
https://rpc.kulupu.network/ws
https://rpc.kulupu.corepaper.org
https://rpc.kulupu.corepaper.org/ws
*/
(async () => {
//const wsProvider = new WsProvider('wss://rpc.polkadot.io');
const wsProvider = new WsProvider("wss://rpc.kulupu.network/ws");
const api = await ApiPromise.create({ provider: wsProvider });
// Do something
const chain = await api.rpc.system.chain();
console.log(`You are connected to ${chain} !`);
console.log(await api.query.difficulty.pastDifficultiesAndTimestamps.toJSON());
console.log(api.genesisHash.toHex());
})();
1 ответ
Решение
Пункт хранения pastDifficultiesAndTimestamps
содержит только последние 60 блоков данных. Чтобы получить эту информацию, вам просто нужно исправить следующее:
console.log(await api.query.difficulty.pastDifficultiesAndTimestamps());
Если вы хотите узнать сложность блоков в целом, подойдет такой цикл:
let best_block = await api.derive.chain.bestNumber()
// Could be 0, but that is a lot of queries...
let first_block = best_block - 100;
for (let block = first_block; block < best_block; block++) {
let block_hash = await api.rpc.chain.getBlockHash(block);
let difficulty = await api.query.difficulty.currentDifficulty.at(block_hash);
console.log(block, difficulty)
}
Обратите внимание, что для этого требуется узел архива, который имеет информацию обо всех блоках. В противном случае, по умолчанию, узел хранит только ~256 предыдущих блоков до того, как очистка состояния исправит ситуацию.
Если вы хотите узнать, как сделать такой запрос, но гораздо более эффективно, посмотрите мою запись в блоге здесь:
https://www.shawntabrizi.com/substrate/porting-web3-js-to-polkadot-js/