跳到主要内容

读取状态

有两种不同的方式查询程序的 State

  1. 查询程序的完整 State。要读取程序的完整State,需要有这个程序的 metadata。你可以调用 GearApi.programState.read 方法来获取状态。
await gearApi.programState.read({ programId: '0x…' }, programMetadata);

此外,你可以在一些特定的块上读取程序的 State

await gearApi.programState.read(
{ programId: '0x…', at: '0x…' },
programMetadata,
);
  1. 如果你使用自定义函数只查询程序状态的特定部分(更多内容),那么应该调用 GearApi.programState.readUsingWasm 方法:
// ...

const wasm = readFileSync('path/to/state.meta.wasm');
const metadata = await getStateMetadata(wasm);

const state = await gearApi.programState.readUsingWasm(
{
programId: '0x…',
fn_name: 'name_of_function_to_execute',
wasm,
argument: { input: 'payload' },
},
metadata,
);

Cookbook

要在前端应用程序中读取状态,你可以使用 fetchmeta.wasm 中获取内容:

// ...

const res = await fetch(metaFile);
const arrayBuffer = await res.arrayBuffer();
const buffer = await Buffer.from(arrayBuffer);
const metadata = await getStateMetadata(buffer);

// get State only of the first wallet
const firstState = await gearApi.programState.readUsingWasm(
{ programId: '0x…', fn_name: 'first_wallet', buffer },
metadata,
);

// get wallet State by id
const secondState = await gearApi.programState.readUsingWasm(
{ programId: '0x…', fn_name: 'wallet_by_id', buffer, argument: { decimal: 1, hex: '0x01' } },
metadata,
);