Skip to main content
ArcBlock Community

如何只查询出质押状态的NFT?

shenxiuqiang
Support
chain-and-bridgeopenqa

服务在启动前需要质押NFT和token,(NFT中包含服务节点信息),在停止服务前接触质押和token;客户端通过查询在质押状态的NFT获得可以提供服务的节点;

查询质押:

javascript
listStakes(params: PartialDeep<GraphQLClient.ListStakesParams>): Promise<GraphQLClient.ResponseListStakes>;
  interface ListStakesParams {
    addressFilter: GraphQLClient.AddressFilterInput;
    assetFilter: GraphQLClient.AssetFilterInput;
    timeFilter: GraphQLClient.TimeFilterInput;
    paging: GraphQLClient.PageInput;
  }
  interface AddressFilterInput {
    sender: string;
    receiver: string;
    direction: GraphQLClient.Direction;
  }

查询质押NFT信息:

javascript
const client = new Client(chainHost);
const address = '0x73AEAc8Be08298fD383152335A182E3e307Eb95a';
client.listStakes({ addressFilter: { receiver: address } }).then((res) => {
    console.log(res);
});

质押之后查询质押的NFT:

javascript
{
   code: 'OK',
   page: { cursor: '0', next: false, total: 1 },
   stakes: [
     {
       address: 'zrjnkXu7ZGeiVHeZLBFKm6PxwKNo5DTgbruw',
       assets: [Array],
       genesisTime: '2024-07-27T08:28:43.566Z',
       message: 'DID Mail Server Node Statk',
       nonce: '',
       receiver: '0x73AEAc8Be08298fD383152335A182E3e307Eb95a',
       renaissanceTime: '2024-07-27T08:28:43.566Z',
       revocable: true,
       revokedAssets: [],
       revokeWaitingPeriod: 0,
       sender: '0x2B0512284Fd9B2582b704C00bc279741D98F3eE0',
       slashers: [Array],
       data: null,
       revokedTokens: [],
       tokens: [Array]
     }
   ]
 }

解除质押后查询NFT信息:

javascript
{
   code: 'OK',
   page: { cursor: '0', next: false, total: 1 },
   stakes: [
     {
       address: 'zrjnkXu7ZGeiVHeZLBFKm6PxwKNo5DTgbruw',
       assets: [],
       genesisTime: '2024-07-27T08:28:43.566Z',
       message: 'DID Mail Server Node Statk',
       nonce: '',
       receiver: '0x73AEAc8Be08298fD383152335A182E3e307Eb95a',
       renaissanceTime: '2024-07-27T09:17:18.233Z',
       revocable: true,
       revokedAssets: [Array],
       revokeWaitingPeriod: 0,
       sender: '0x2B0512284Fd9B2582b704C00bc279741D98F3eE0',
       slashers: [Array],
       data: null,
       revokedTokens: [Array],
       tokens: [Array]
     }
   ]
 }

解除质押的NFT还在列表中,虽然可以看出是解除质押的,但是希望通过筛选条件不出现在列表中;

6 replies

shenxiuqiang2 years ago

期望

javascriptCopy
  interface AssetFilterInput {
    assets: string[];
  }

assets增加根据factory、state过滤;

你是好人,我跟你2 years ago

🚀🚀🚀

wangshijun2 years ago

接触质押的NFT还在列表中,虽然可以看出是解除质押的,但是希望通过筛选条件不出现在列表中;

没有太理解你这里想问的问题。关于 StakeStake 里面相关字段的解释:

  • assets 是当前还处在质押状态的 NFT 地址列表;
  • revokedAssets 是用户申请撤销,但是尚未取回的 NFT 地址列表,发送 RevokeStakeTx 之后,assets 里面的 NFT 会被移动到 revokedAssets 中;
  • 已经被取回的质押将不会出现在 assets 或者 revokedAssets 中
shenxiuqiang2 years ago(edited)

0x73AEAc8Be08298fD383152335A182E3e307Eb95a 地址里会质押很多节点的NFT,NFT是不同的,那么返回的结果就是很多条记录,其中有已经解除质押的。我是想结果里去除 「解除质押状态」的NFT

shenxiuqiang2 years ago

z1WC8QAQFHGxVBNoe6Ziv7QoCWVyhxzBBoz 我是想将链做应用的注册中心,质押NFT服务注册,可以被应用客户端发现,解除NFT质押表示服务取消注册不再运行。listStakes查询出的数据包含了取消质押的NFT地址。虽然可以遍历查询结果过滤数据,但翻页将无法使用。

你是好人,我跟你2 years ago

👏🏻👏🏻👏🏻

Reply