You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pact-lang-api及x-wallet调用模块非写入函数免Gas获取链上数据

用X-Wallet调用Chainweaver只读链上函数的方法

背景说明

你给出的get-price是只读链上函数,仅查询链上数据不修改状态,因此无需发起交易、消耗Gas,只需通过钱包的链交互接口构造查询请求即可获取结果。

实现步骤

1. 准备工作

  • 确保X-Wallet已切换到目标区块链网络(与Chainweaver使用的链一致),并授权当前网页访问钱包。
  • 获取price-table对应的链上合约/表地址(可在Chainweaver中查看)。

2. 构造查询请求并调用

以JavaScript为例,通过X-Wallet注入的全局接口发起查询:

async function getChainPrice(priceKey) {
  try {
    // 适配目标链(如Stacks)的只读查询参数格式
    const queryParams = {
      method: 'callReadOnlyFunction',
      params: {
        contractAddress: '替换为price-table的链上地址',
        functionName: 'get-price',
        args: [priceKey], // 传入decimal类型的price-key参数
        network: 'mainnet' // 对应测试网或主网,按需修改
      }
    };

    // 通过X-Wallet的provider发送查询
    const response = await window.xwallet.request(queryParams);
    
    // 解析返回的价格数据
    const price = response.result.value;
    console.log('查询到的价格:', price);
    return price;
  } catch (err) {
    console.error('查询出错:', err);
    throw err;
  }
}

// 调用示例:传入具体的price-key值
getChainPrice(99.99);

3. 关键注意点

  • 不同区块链的查询参数格式有差异:如果是Stacks链(Chainweaver默认适配的链),需遵循Clarity函数的查询规范,X-Wallet的接口参数要对应Stacks的callReadOnlyFunction方法。
  • 参数类型必须匹配:price-key是decimal类型,需传入符合链上要求的数值格式,避免类型错误。
  • 若X-Wallet的接口命名不同,可查看钱包内置文档,找到对应的只读查询方法。

内容的提问来源于stack exchange,提问作者Nexion21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:09:22