nearprotocol - 当前访问密钥的余量较低时使用 near-api-js 调用支付方法
问题描述
我有一个 NEAR 应用程序,其中大多数方法不传输任何令牌。用户使用 NEAR 钱包完成标准登录流程,获得 0.25N 的 gas 配额,然后与应用程序交互。
我现在有一个新的端点,我想从前端调用它,它期望用户支付显着超过 0.25N 的金额:
#[payable]
pub fn buy_stuff() {
当我使用标准near-api-js
方式调用它时:
window.contract.buy_stuff({}, undefined, price).then(m => window.location.href='/');
它失败了,因为它试图花费price
登录的 aceess 密钥的许可,而它没有 - 它自然只有 0.25N 的气体。
具体错误是“访问密钥 {account_id}:{public_key} 没有足够的余额 247864837491516400000000 用于交易成本 5004231023352653388973496”
我想要的是让用户重定向到钱包,并使用钱包中的完整访问密钥授权此特定交易。有没有办法做到这一点near-api-js
?
解决方案
看起来问题在于contract
API 不考虑钱包重定向。一个原因可能是合约 API 的初始化。
为了让合约 API 能够重定向到钱包,初始化应该使用ConnectedWalletAccount
. 可以使用以下代码完成:
const nearConnection = await nearAPI.connect(...);
const walletConnection = new nearAPI.WalletConnection(
nearConnection,
ContractName
);
const contract = new nearAPI.Contract(
walletConnection.account(),
ContractName,
{
viewMethods: [...],
changeMethods: [...],
}
);
推荐阅读
- javascript - 将 id 传递给每个
- database - 如何建立适用于所有 Mac 的 Java DB 连接,以便其 JAR 能够在 Windows 10 上建立连接?
- javascript - Next.js server.js 中的 ES 模块
- django - 我如何限制未付费的用户无法访问测验部分
- java - 如何展示迷宫?
- angular - 如何从数组(本地存储)中的 json 对象获取特定数据 - Angular 7
- linux - 如何查找文件然后使用前缀日期 gzip
- ssis - 如何将非结构化 Excel 加载到 SQL 表
- android - 在 Android 中动态设置 MenuItem 颜色
- ios - 解析 JSON 数组时的问题