当前access key低allowance时使用near-api-js调用payable方法
Calling a payable method using near-api-js when the current access key has low allowance
我有一个 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
,而它没有——它自然只有 0.25N 的 gas。
具体错误是“访问密钥 {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: [...],
}
);
我有一个 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
,而它没有——它自然只有 0.25N 的 gas。
具体错误是“访问密钥 {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: [...],
}
);