当当前访问密钥权限较低时,使用near-api-js调用支付方法

Ish*_*ael 1 nearprotocol

我有一个 NEAR 应用程序,其中大多数方法不传输任何令牌。用户使用 NEAR 钱包完成标准登录流程,获得 0.25N 的 Gas 限额,然后与应用程序交互。

我现在有一个新的端点,我希望可以从前端调用它,它期望用户支付明显超过 0.25N 的金额:

    #[payable]
    pub fn buy_stuff() {
Run Code Online (Sandbox Code Playgroud)

当我使用标准near-api-js方式调用它时:

window.contract.buy_stuff({}, undefined, price).then(m => window.location.href='/');
Run Code Online (Sandbox Code Playgroud)

它失败了,因为它试图花费登录price访问密钥的配额,而它没有——它自然只有 0.25N 的 Gas。

具体错误是“访问密钥 {account_id}:{public_key} 没有足够的余额 247864837491516400000000 用于交易成本计算 5004231023352653388973496”

我想要的是将用户重定向到钱包,并使用钱包中的完整访问密钥授权此特定交易。有没有办法做到这一点near-api-js

小智 5

问题似乎在于contractAPI 不考虑钱包重定向。原因之一可能是合约 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: [...],
  }
);
Run Code Online (Sandbox Code Playgroud)