transfer
Inicia uma transferência de token de uma das smart accounts controladas pelo utilizador para um destinatário. Suporta tanto source picnic como gnosisPay — descobre os endereços disponíveis via get_smart_accounts. Devolve um sign_url e um resource_uri para atualizações de estado em tempo real. A execução arranca assim que o utilizador assina em sign_url.
Tipos de source:
picnic— executa em ~10s via bundler 4337. Usado para carregar o cartão (recipient = endereço do safe gnosisPay) ou enviar para qualquer outro endereço.gnosisPay(apenas Gnosis chain) — usado para sacar da conta do cartão. Enfileira pelo delay module do gnosisPay e despacha ~3 minutos depois da assinatura. A action passa abroadcastquando enfileirada e aexecutedquando o dispatch atrasado confirma on-chain.
Restrição de depósito no cartão: quando o destinatário é o próprio safe gnosisPay do utilizador e a source é uma conta picnic, o asset_id TEM de ser o asset denominado pelo cartão (EUR / USD / GBP, conforme o fiatSymbol do cartão). Caso contrário a ferramenta rejeita antes — depositar o token errado deixaria o saldo preso no safe do cartão. Levantamentos a partir do cartão não têm essa restrição (o safe pode legitimamente conter assets depositados por engano que o utilizador precisa recuperar).
Âmbitos necessários: propose:transfer, execute:transfer
Parâmetros:
| Nome | Tipo | Obrig. | Descrição |
|---|---|---|---|
source_smart_account_address | string | sim | Smart account de origem que detém o asset. Tem de ser uma das contas controladas pela passkey em source_chain_id. Usa get_smart_accounts para descobrir endereços. |
source_chain_id | number | sim | Chain ID da smart account de origem. Tem de ser igual à chainId codificada em asset_id — divergência é rejeitada. |
asset_id | string | sim | Id do asset — eip155:{chainId}/erc20:{address} para ERC-20s, eip155:{chainId}/bep20:{address} na chain 56, ou eip155:{chainId}/slip44:60 para a moeda nativa. |
recipient | string | sim | Destino — endereço 0x EVM ou nome ENS (e.g. vitalik.eth). A resolução de ENS corre sempre na mainnet do Ethereum. |
formatted_amount | string | sim | Valor decimal nas unidades de exibição do asset, e.g. "1.5" para 1.5 USDC. O servidor resolve os decimais a partir de asset_id. |
Retorna:
| Campo | Tipo | Descrição |
|---|---|---|
action_id | string | UUID da action pendente. Passa a get_action_status como fallback de polling. |
status | string | Sempre "proposed" imediatamente após esta chamada. |
summary | string | Resumo legível mostrado ao utilizador na página de assinatura. Derivado server-side. |
sign_url | string | URL que o utilizador abre para autorizar com a passkey. |
resource_uri | string | picnic://action/{action_id}. Subscreve via resources/subscribe para receber notifications/resources/updated. |
simulation_url | string | URL de preview Tenderly para source picnic; null para source gnosisPay (o enqueue no delay module não é um userOp). |
expires_at | date | Timestamp ISO; 10 minutos após a criação. |
external_recipient | boolean | true quando o destino não é uma das smart accounts controladas pelo utilizador nesta chain. Comunica este aviso verbalmente ao utilizador antes de abrir sign_url — transferências on-chain são irreversíveis. |
warnings | string[] | Linhas de aviso para o agente chamador (atualmente: a linha de external-recipient quando external_recipient = true). Array vazio quando nada há a assinalar. |
Ciclo de vida (status):
proposed → signed → submitted → broadcast → executed (caminho de sucesso) — a mesma forma para os dois tipos de source. O que cada passo significa muda:
- Source
picnic:broadcast= bundler aceitou o userOp 4337;executed= userOp confirmou on-chain. - Source
gnosisPay:broadcast= a tx de enqueue do delay module está no mempool;executed= a tx de enqueue confirmou on-chain. O dispatch on-chain efetivo da transferência interna ocorre ~3 minutos depois via o job de scheduled transactions (e aparece emget_transactionsnessa altura).
Outros estados terminais: failed (revert on-chain), expired, rejected.
Exemplos de prompt:
"Carrega o meu cartão com 5 USDC da minha conta Picnic na Base."
"Saca 10 EURE do meu cartão para a minha conta Picnic." (source gnosisPay, ~3 min)
"Envia 100 USDC para vitalik.eth na Base."