Summary
Please consider adding a distinct EVM contract-call capability to App Kit.
The current SendParams interface in @circle-fin/app-kit@1.10.0 supports from, to, amount, and optional token, but it cannot express a payable EVM function call with calldata. This blocks payment applications whose settlement and application state must remain atomic.
Concrete Arc Testnet use case
Payment Receipt uses a verified Arc Testnet contract with:
pay(bytes32 orderId, bytes32 metadataHash)
The call accepts native USDC, transfers it to the merchant, stores an application receipt, rejects duplicate order IDs, and emits PaymentReceived in one transaction.
A correct payment must carry that selector, two ABI-encoded bytes32 arguments, and native value together.
Current behavior
The closest documented App Kit operation is:
await kit.send({
from: { adapter, chain: "Arc_Testnet" },
to: paymentReceipt,
amount: "0.01",
token: "NATIVE",
});
This transfers value without the required selector or arguments. The current contract intentionally has no receive or fallback, so a bare transfer to it reverts. Sending directly to the merchant can move funds, but bypasses receipt storage, duplicate-order protection, and the PaymentReceived event.
The application therefore uses a custom pay() call for settlement and keeps Circle Contracts/Event Monitor plus an independent RPC monitor as read-only evidence sources.
Expected capability
A separate EVM contract-call operation could accept source adapter/chain, target, calldata, and native value, with matching estimation and explicit wallet confirmation. A typed ABI/function/args convenience layer could sit above the raw call.
I am not suggesting that send() silently reinterpret token transfers as arbitrary contract calls; a distinct capability would keep the API boundary clear.
Suggested acceptance criteria
- An EVM browser-wallet adapter can estimate and submit one call containing
to, data, and native value.
- The wallet displays normal user confirmation; App Kit never signs or submits silently.
- Reverts are surfaced as failures and do not produce a false success state.
- The result exposes the transaction hash and explorer URL consistently with existing operations.
- The capability is documented as EVM-only where other adapters cannot provide equivalent semantics.
Environment
@circle-fin/app-kit@1.10.0
- Arc Testnet, chain ID
5042002
- Browser EVM wallet / Viem-style contract call
This is a feature request based on a reproducible Arc Testnet payment flow, not a claim that the existing Send capability is broken.
Summary
Please consider adding a distinct EVM contract-call capability to App Kit.
The current
SendParamsinterface in@circle-fin/app-kit@1.10.0supportsfrom,to,amount, and optionaltoken, but it cannot express a payable EVM function call with calldata. This blocks payment applications whose settlement and application state must remain atomic.Concrete Arc Testnet use case
Payment Receipt uses a verified Arc Testnet contract with:
The call accepts native USDC, transfers it to the merchant, stores an application receipt, rejects duplicate order IDs, and emits
PaymentReceivedin one transaction.0x91f8a6dbA correct payment must carry that selector, two ABI-encoded
bytes32arguments, and native value together.Current behavior
The closest documented App Kit operation is:
This transfers value without the required selector or arguments. The current contract intentionally has no
receiveorfallback, so a bare transfer to it reverts. Sending directly to the merchant can move funds, but bypasses receipt storage, duplicate-order protection, and thePaymentReceivedevent.The application therefore uses a custom
pay()call for settlement and keeps Circle Contracts/Event Monitor plus an independent RPC monitor as read-only evidence sources.Expected capability
A separate EVM contract-call operation could accept source adapter/chain, target, calldata, and native value, with matching estimation and explicit wallet confirmation. A typed ABI/function/args convenience layer could sit above the raw call.
I am not suggesting that
send()silently reinterpret token transfers as arbitrary contract calls; a distinct capability would keep the API boundary clear.Suggested acceptance criteria
to,data, and nativevalue.Environment
@circle-fin/app-kit@1.10.05042002This is a feature request based on a reproducible Arc Testnet payment flow, not a claim that the existing Send capability is broken.