Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.polygon.technology/llms.txt

Use this file to discover all available pages before exploring further.

All wallet operations require an active wallet session. Complete auth first, then use oms.wallet.
guard !oms.wallet.walletAddress.isEmpty else {
    throw NSError(domain: "App", code: 1, userInfo: [NSLocalizedDescriptionKey: "No active wallet"])
}

Supported Networks

Use the SDK network registry when passing network to wallet and indexer calls.
let amoy = oms.findNetworkById(chainId: 80002) ?? .polygonAmoy
let polygon = oms.findNetworkByName(name: "polygon")

if let polygon {
    print(amoy.displayName, polygon.id)
}

for network in oms.supportedNetworks {
    print(network.id, network.displayName, network.nativeTokenSymbol)
}
Parameters findNetworkById(chainId:) takes a numeric chain ID. findNetworkByName(name:) takes a registry name such as polygon, amoy, or base-sepolia. Returns oms.supportedNetworks returns every Network supported by the SDK build. Lookup helpers return a Network?.

Send A Transaction

sendTransaction sends native tokens. Amounts are raw base-unit integer strings. Use parseUnits to convert a display value without floating-point precision loss.
let value = try parseUnits(value: "0.01", decimals: 18)

let tx = try await oms.wallet.sendTransaction(
    network: .polygonAmoy,
    to: "0xRecipient",
    value: value
)

print("Transaction:", tx.txnHash ?? tx.txnId)
Parameters
ParameterTypeDescription
networkNetworkSupported SDK network, such as .polygon or .polygonAmoy.
toStringRecipient address.
valueStringRaw base-unit native token value.
selectFeeOptionFeeOptionSelector?Optional fee option selector.
modeTransactionModeTransaction mode. Defaults to .relayer.
Returns Returns SendTransactionResponse.
FieldTypeDescription
txnIdStringWallet transaction ID.
statusTransactionStatusLatest transaction status returned by OMS Wallet.
txnHashString?On-chain transaction hash when available.

Send Raw Calldata

Use the request overload when you already have encoded calldata.
let tx = try await oms.wallet.sendTransaction(
    network: .polygonAmoy,
    request: SendTransactionRequest(
        to: "0xTokenContract",
        value: "0",
        data: "0xa9059cbb000000000000000000000000..."
    )
)

print("Contract transaction:", tx.txnHash ?? tx.txnId)
Parameters
ParameterTypeDescription
networkNetworkSupported SDK network.
requestSendTransactionRequestRequest with to, raw value, optional encoded calldata data, and mode.
selectFeeOptionFeeOptionSelector?Optional fee option selector.
Returns Returns SendTransactionResponse.

Convert Token Values

Use parseUnits before sending display amounts to the wallet API, and formatUnits when showing raw base-unit balances in the UI.
let rawUsdc = try parseUnits(value: "1.23", decimals: 6)
print(rawUsdc) // "1230000"

let displayUsdc = try formatUnits(value: rawUsdc, decimals: 6)
print(displayUsdc) // "1.23"
Parameters
FunctionParameterTypeDescription
parseUnitsvalueStringDisplay amount to convert.
parseUnitsdecimalsIntToken decimals. Defaults to 18.
formatUnitsvalueStringRaw base-unit integer string to format.
formatUnitsdecimalsIntToken decimals. Defaults to 18.
Returns Both functions return String. They throw UnitConversionError for invalid decimals, invalid numeric strings, or fractional values with more non-zero digits than the requested decimals.

Call A Contract With Method And Args

Use callContract for state-changing contract methods. The SDK prepares the contract call, executes it, and polls for transaction status.
let amount = try parseUnits(value: "1", decimals: 6)

let tx = try await oms.wallet.callContract(
    network: .polygonAmoy,
    contract: "0xTokenContract",
    method: "transfer(address,uint256)",
    args: [
        AbiArg(type: "address", value: .string("0xRecipient")),
        AbiArg(type: "uint256", value: .string(amount))
    ]
)

print("Contract call:", tx.txnHash ?? tx.txnId)
Parameters
ParameterTypeDescription
networkNetworkSupported SDK network.
contractStringContract address to call.
methodStringABI method signature, such as transfer(address,uint256).
args[AbiArg]?Method arguments as ABI args.
selectFeeOptionFeeOptionSelector?Optional fee option selector.
modeTransactionModeTransaction mode. Defaults to .relayer.
Returns Returns SendTransactionResponse.

Select A Fee Option

When a prepared transaction is not sponsored, the SDK selects a fee option before execution. If no selector is provided, the SDK uses the first required fee option. On testnets, fee options are automatically sponsored, so you usually do not need to choose a fee token.
let tx = try await oms.wallet.sendTransaction(
    network: .polygonAmoy,
    to: "0xRecipient",
    value: "0",
    selectFeeOption: .first
)
You can also provide a custom selector.
let tx = try await oms.wallet.sendTransaction(
    network: .polygonAmoy,
    to: "0xRecipient",
    value: "0",
    selectFeeOption: .custom { options in
        options.first?.selection
    }
)
Parameters FeeOptionSelector receives [FeeOptionWithBalance]. Returns Return FeeOptionSelection? from custom selectors.

Polling And Status

Transaction helpers execute and poll for transaction status. Fetch status directly when you have a Wallet transaction ID.
let status = try await oms.wallet.getTransactionStatus(txnId: "txn-id")

print("Status:", status.status)
print("Transaction hash:", status.txnHash ?? "pending")
Parameters
ParameterTypeDescription
txnIdStringWallet transaction ID returned by sendTransaction or callContract.
Returns Returns TransactionStatusResponse.
FieldTypeDescription
statusTransactionStatusLatest Wallet transaction status.
txnHashString?On-chain transaction hash when available.

Sign A Message

signMessage returns a hex-encoded signature for the active wallet.
let signature = try await oms.wallet.signMessage(
    network: .polygonAmoy,
    message: "Hello from OMS"
)

print("Signature:", signature)
Parameters
ParameterTypeDescription
networkNetworkSupported SDK network.
messageStringPlaintext message to sign.
Returns Returns String, the hex-encoded signature.

Verify A Message Signature

isValidMessageSignature verifies a message signature against the wallet address you provide.
let isValid = try await oms.wallet.isValidMessageSignature(
    network: .polygonAmoy,
    walletAddress: oms.wallet.walletAddress,
    message: "Hello from OMS",
    signature: signature
)

print("Signature valid:", isValid)
Parameters
ParameterTypeDescription
networkNetworkSupported SDK network.
walletAddressStringWallet address to verify the signature against.
messageStringOriginal plaintext message.
signatureStringHex-encoded signature to verify.
Returns Returns Bool.

Sign Typed Data

Use signTypedData for EIP-712 typed data. Build the payload with WebRPCJSONValue values.
let typedData: WebRPCJSONValue = .object([
    "domain": .object([
        "name": .string("Example App"),
        "version": .string("1"),
        "chainId": .integer(80002)
    ]),
    "types": .object([
        "Message": .array([
            .object([
                "name": .string("contents"),
                "type": .string("string")
            ])
        ])
    ]),
    "primaryType": .string("Message"),
    "message": .object([
        "contents": .string("Hello from OMS")
    ])
])

let typedSignature = try await oms.wallet.signTypedData(
    network: .polygonAmoy,
    typedData: typedData
)
Parameters
ParameterTypeDescription
networkNetworkSupported SDK network.
typedDataWebRPCJSONValueEIP-712 typed-data payload.
Returns Returns String, the hex-encoded signature.

Verify Typed Data

Verify an EIP-712 typed-data signature.
let typedDataValid = try await oms.wallet.isValidTypedDataSignature(
    network: .polygonAmoy,
    walletAddress: oms.wallet.walletAddress,
    typedData: typedData,
    signature: typedSignature
)
Parameters
ParameterTypeDescription
networkNetworkSupported SDK network.
walletAddressStringWallet address to verify the signature against.
typedDataWebRPCJSONValueOriginal EIP-712 typed-data payload.
signatureStringHex-encoded signature to verify.
Returns Returns Bool.