transfer
Inicia uma transferência de token de uma das smart accounts controladas pelo usuário pra um destinatário. Suporta tanto source picnic quanto gnosisPay — descubra os endereços disponíveis via get_smart_accounts. Retorna um sign_url e um resource_uri pra atualizações de status em tempo real. A execução começa assim que o usuário assina em sign_url.
Tipos de source:
picnic— executa em ~10s via bundler 4337. Usado pra topar o cartão (recipient = endereço do safe gnosisPay) ou enviar pra qualquer outro endereço.gnosisPay(somente Gnosis chain) — usado pra sacar da conta do cartão. Enfileira pelo delay module do gnosisPay e dispara ~3 minutos depois da assinatura. A action vai prabroadcastquando enfileirada e praexecutedquando o dispatch atrasado confirma on-chain.
Restrição de depósito no cartão: quando o destinatário é o próprio safe gnosisPay do usuário e a source é uma conta picnic, o asset_id TEM que 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 travado no safe do cartão. Saques FROM o cartão não têm essa restrição (o safe pode legitimamente ter assets depositados por engano que o usuário precisa recuperar).
Escopos necessários: propose:transfer, execute:transfer
Parâmetros:
| Nome | Tipo | Obrig. | Descrição |
|---|---|---|---|
source_smart_account_address | string | sim | Smart account de origem que mantém o asset. Tem que ser uma das contas controladas pela passkey em source_chain_id. Use get_smart_accounts pra descobrir endereços. |
source_chain_id | number | sim | Chain ID da smart account de origem. Tem que ser igual à chainId codificada em asset_id — divergência é rejeitada. |
asset_id | string | sim | Id do asset — eip155:{chainId}/erc20:{address} pra ERC-20s, eip155:{chainId}/bep20:{address} na chain 56, ou eip155:{chainId}/slip44:60 pra moeda nativa. |
recipient | string | sim | Destino — endereço 0x EVM ou nome ENS (e.g. vitalik.eth). ENS sempre resolve na mainnet do Ethereum. |
formatted_amount | string | sim | Valor decimal nas unidades de exibição do asset, e.g. "1.5" pra 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 pra get_action_status como fallback de polling. |
status | string | Sempre "proposed" imediatamente após esta chamada. |
summary | string | Resumo legível mostrado na página de assinatura. Derivado server-side. |
sign_url | string | URL que o usuário abre pra autorizar com a passkey. |
resource_uri | string | picnic://action/{action_id}. Assina via resources/subscribe pra receber notifications/resources/updated. |
simulation_url | string | URL de preview Tenderly pra source picnic; null pra source gnosisPay (o enqueue no delay module não é um userOp). |
expires_at | date | Timestamp ISO; 10 minutos após criação. |
external_recipient | boolean | true quando o destino não é uma das smart accounts controladas pelo usuário nessa chain. Surface esse aviso verbalmente pro usuário antes de abrir sign_url — transferências on-chain são irreversíveis. |
warnings | string[] | Linhas de aviso pro agente que chamou (hoje: a linha de external-recipient quando external_recipient = true). Array vazio quando não há nada pra sinalizar. |
Ciclo de vida (status):
proposed → signed → submitted → broadcast → executed (caminho de sucesso) — mesma forma pros 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 tá 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_transactionsnesse momento).
Outros estados terminais: failed (revert on-chain), expired, rejected.
Exemplos de prompt:
"Topa meu cartão com 5 USDC da minha conta Picnic na Base."
"Saca 10 EURE do meu cartão pra minha conta Picnic." (source gnosisPay, ~3 min)
"Manda 100 USDC pro vitalik.eth na Base."