如何用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
相关产品推荐
相关产品推荐

