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

NEAR 跨合约调用实现 escrow 托管账户向指定地址释放资金咨询

解决方案

你当前写的transfer逻辑本身符合预期,NEAR运行时规则为:合约内部通过ContractPromiseBatch发起的转账,资金默认从当前合约自身的账户余额中扣除,不会从调用者/交易签名者的账户划扣,你担心的从调用者账户转出的问题不存在。

你只需要补充两个必要的校验逻辑,避免越权调用、余额不足的异常场景即可:

  • 校验调用者是否为你指定的、有权触发划转的普通捐赠人账户
  • 校验当前合约账户的可用余额足够覆盖要转出的金额

修正后的完整代码参考如下:

import { ContractPromiseBatch, u128, AccountId, Context } from "near-sdk-as";

// 如果你支持多个触发账户,可以将这个变量替换为存储在合约内的白名单集合
const ALLOWED_TRIGGER_ACCOUNT: AccountId = "xxx.near";

function transferFromEscrow(destinationAccount: AccountId, amount: u128): ContractPromiseBatch {
  // 权限校验:仅允许白名单内的捐赠人触发划转
  assert(Context.sender == ALLOWED_TRIGGER_ACCOUNT, "无权限触发托管资金划转");
  // 余额校验:也可以替换为你业务中单独记账的托管余额逻辑
  assert(Context.accountBalance >= amount, "托管账户余额不足,无法完成划转");
  
  const toDestinationAccount = ContractPromiseBatch.create(destinationAccount);
  return toDestinationAccount.transfer(amount);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03