Skip to main content
Dfns supports direct smart contract interaction on EVM-compatible networks. You can call read-only functions (like checking a balance) and execute state-mutating functions (like minting tokens or approving spending), all with Dfns wallets handling key management and signing.

From the dashboard

The Bring Your Own ABI feature lets you import a contract’s ABI and interact with it directly from the dashboard — no code required.

Import a contract

1

Open smart contracts

Navigate to the Smart Contracts section in the dashboard sidebar.
2

Import your ABI

Click Import Smart Contract and fill in:
FieldDescription
Contract nameA label for this contract (lowercase, alphanumeric, hyphens)
Contract addressThe on-chain address of the deployed contract
NetworkThe EVM network the contract is deployed on
DescriptionOptional description
ABIThe contract’s ABI in JSON format — upload a file or paste it directly
Click Import to save.
You can find a contract’s ABI in the build artifacts of your Solidity project, or on a block explorer under the Contract tab for verified contracts.
Importing and deleting contracts is subject to your organization’s policies. If a policy applies, the action will require approval before it takes effect.

Read from a contract

Open your imported contract and go to the Read tab. Select a function, fill in any required inputs, and click Query. The result displays immediately — no wallet or gas needed.

Write to a contract

Go to the Write tab. Select a function, fill in the inputs, and connect a wallet on the same network as the contract. Review the confirmation dialog carefully, then submit. The transaction is signed by your Dfns wallet, broadcast to the network, and its status is tracked in the dashboard.
Write transactions go through your wallet’s policies. If a policy applies, the transaction will require approval before it is broadcast.

From the API

Read-only calls

Use the Call Function endpoint to query view or pure functions. No wallet or signing is required.
POST /networks/EthereumSepolia/call-function

{
  "contract": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
  "abi": {
    "type": "function",
    "name": "balanceOf",
    "stateMutability": "view",
    "inputs": [{ "name": "account", "type": "address" }],
    "outputs": [{ "name": "", "type": "uint256" }]
  },
  "calldata": {
    "account": "0xd964d741998edc275f3800eed113378a391951d9"
  }
}

State-mutating calls

Use the Sign & Broadcast Transaction endpoint with kind: FunctionCall. This signs the transaction with the specified wallet and broadcasts it to the network.
POST /wallets/{walletId}/transactions

{
  "kind": "FunctionCall",
  "call": {
    "contract": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
    "abi": {
      "type": "function",
      "name": "transfer",
      "stateMutability": "nonpayable",
      "inputs": [
        { "name": "to", "type": "address" },
        { "name": "value", "type": "uint256" }
      ],
      "outputs": [{ "name": "", "type": "bool" }]
    },
    "calldata": {
      "to": "0xd964d741998edc275f3800eed113378a391951d9",
      "value": "1000000"
    }
  }
}
The abi field takes a single function definition (not the entire contract ABI). The calldata field maps input names to values.