Portal Community

read

Calls a view/pure contract function — no gas, no transaction.

FieldTypeRequiredDescription
contractAddresstext✓ YesTarget contract address.
abitext (JSON)✓ YesContract ABI (or just the relevant function's ABI fragment).
functionNametext✓ YesFunction to call.
functionArgstext (JSON array)NoPositional arguments.
blocktextNoBlock number/tag to read at. Omit for latest.
{ "success": true, "result": "1500000000", "decodedResult": ["1500000000"] }

decodedResult carries every output positionally as a string (the ABI's actual return shape is only known at runtime); result is the first value, or the full list for multi-value returns.

write — needs credential

FieldTypeRequiredDescription
contractAddresstext✓ YesTarget contract address.
abitext (JSON)✓ YesContract ABI.
functionNametext✓ YesFunction to call.
functionArgstext (JSON array)NoPositional arguments.
valuetextNoETH to send with the call, in wei.
gasLimittextNoGas limit override.
{ "success": true, "transactionHash": "0x5c504ed4..." }

simulate

Previews what a (typically state-changing) function would return or revert with, via eth_call — without broadcasting anything.

FieldTypeRequiredDescription
contractAddresstext✓ YesTarget contract address.
abitext (JSON)✓ YesContract ABI.
functionNametext✓ YesFunction to simulate.
functionArgstext (JSON array)NoPositional arguments.
valuetextNoETH to simulate sending, in wei.
fromtextNoCaller address override — simulate as if called by a specific account, without needing its private key.
Use before write: run contract.simulate with the same arguments you're about to send to contract.write — a revert here means the real write would also revert, caught before spending any gas.

deploy — needs credential

FieldTypeRequiredDescription
bytecodetext✓ YesCompiled contract bytecode (hex).
abitext (JSON)✓ YesContract ABI (needed to encode constructor args).
constructorArgstext (JSON array)NoConstructor arguments.
valuetextNoETH to send with deployment, in wei.
gasLimittextNoGas limit override.
{ "success": true, "transactionHash": "0x5c504ed4..." }
Only the deployment transaction hash is returned. Resolving the deployed contract's address requires waiting for and inspecting the receipt — chain transaction.wait then utility.contractAddress (CREATE mode, using the deployer's from/nonce) or read the receipt's contractAddress field once available, to keep this a fast, one-shot broadcast like every other write operation.

multicall

Batches multiple independent read calls — potentially against different contracts/ABIs/functions — into one node execution.

FieldTypeRequiredDescription
callstext (JSON array)✓ YesArray of call objects, each with its own contract/ABI/function/args.
{
  "success": true,
  "results": [
    { "success": true, "contractAddress": "0xdAC1...", "functionName": "symbol", "result": "USDT", "decodedResult": ["USDT"] },
    { "success": false, "contractAddress": "0xBAD0...", "functionName": "symbol", "errorCode": "CALL_REVERTED", "errorMessage": "execution reverted" }
  ]
}
Partial success: the overall success reflects whether the batch itself could be parsed and executed at all (e.g. malformed calls JSON fails the whole operation) — one entry's failure does not fail the batch. Always check each entry's own success field.

detectStandards — addendum v3

FieldTypeRequiredDescription
contractAddresstext✓ YesContract to probe.
{
  "success": true,
  "erc165Supported": true,
  "supportedStandards": ["ERC721", "ERC721Metadata", "ERC721Enumerable"],
  "erc20Heuristic": false
}

Runs two independent probes: a real ERC-165 supportsInterface lookup against known interface IDs (reliable), plus a best-effort ERC-20 heuristic (checking for totalSupply/transfer/balanceOf selectors) since ERC-20 predates ERC-165 and can't be detected via supportsInterface at all.

logs — implemented, not currently reachable

Not routable in this build: the logs feature is fully implemented in code (a historical eth_getLogs query, taking contractAddress, eventAbi*, fromBlock, toBlock, topics) but its case in the node's operation-routing switch is currently commented out, so resource=contract, operation=logs is not reachable through the node today — it falls through to the default "operation not found" error. See Roadmap.