pulsar-contracts
Version:
73 lines • 2.63 kB
JavaScript
import { fetchLastBlock, Mina, UInt32 } from 'o1js';
import { log } from './loggers.js';
import { PulsarAction } from '../types/PulsarAction.js';
import { ENDPOINTS } from './constants.js';
import { SettlementEvent } from '../SettlementContract.js';
export { fetchActions, fetchRawActions, fetchBlockHeight, fetchEvents, setMinaNetwork, };
async function fetchRawActions(address, fromActionState, endActionState) {
try {
const result = await Mina.fetchActions(address, {
fromActionState,
endActionState,
});
log('Fetched actions:', JSON.stringify(result), null, 2);
if (Array.isArray(result)) {
return result;
}
else {
console.error('Error fetching actions:', result.error);
}
}
catch (error) {
console.error('Unexpected error:', error);
}
}
async function fetchActions(address, fromActionState, endActionState) {
const rawActions = await fetchRawActions(address, fromActionState, endActionState);
if (!rawActions || rawActions.length === 0) {
console.warn('No actions found for the given address and state range.');
return [];
}
return rawActions.map((action) => {
return {
action: PulsarAction.fromRawAction(action.actions[0]),
hash: BigInt(action.hash),
};
});
}
async function fetchBlockHeight(network = 'devnet') {
try {
const lastBlock = await fetchLastBlock(ENDPOINTS.NODE[network]);
return Number(lastBlock.blockchainLength.toBigint());
}
catch (error) {
console.error('Error fetching block height:', error);
throw error;
}
}
async function fetchEvents(contractInstance, from = UInt32.from(0), to) {
try {
const result = await contractInstance.fetchEvents(from, to);
const events = result
.map((item) => item.event.data)
.map((data) => new SettlementEvent({
fromActionState: data.fromActionState,
endActionState: data.endActionState,
mask: data.mask,
}));
return events;
}
catch (error) {
console.error('Error fetching events:', error);
throw error;
}
}
function setMinaNetwork(network = 'devnet') {
const Network = Mina.Network({
mina: ENDPOINTS.NODE[network],
archive: ENDPOINTS.ARCHIVE[network],
});
console.log(`Setting Mina network to ${network}, Mina endpoint: ${ENDPOINTS.NODE[network]}, Archive endpoint: ${ENDPOINTS.ARCHIVE[network]}`);
Mina.setActiveInstance(Network);
}
//# sourceMappingURL=fetch.js.map