Skip to main content

sdk.evm

EVM blockchain operations module for Ethereum and compatible chains.

createPublicClient

Create a public client for a specific chain.
try await sdk.evm.createPublicClient(chainId: Int) -> PublicClient

Parameters

  • chainId (Int) - Chain ID of the network

Returns

  • PublicClient - Public client for the specified chain

Example

let sdk = DynamicSDK.instance()

// Ethereum mainnet
let mainnetClient = try await sdk.evm.createPublicClient(chainId: 1)

// Base Sepolia testnet
let baseSepoliaClient = try await sdk.evm.createPublicClient(chainId: 84532)

// Get gas price
let gasPrice = try await baseSepoliaClient.getGasPrice()
print("Gas price: \(gasPrice.value) wei")

sendTransaction

Send an EVM transaction.
try await sdk.evm.sendTransaction(
    transaction: EthereumTransaction,
    wallet: BaseWallet
) -> String

Parameters

  • transaction (EthereumTransaction) - Transaction to send
  • wallet (BaseWallet) - Wallet to send from

Returns

  • String - Transaction hash

Example

let sdk = DynamicSDK.instance()

// Get gas price first
let client = try await sdk.evm.createPublicClient(chainId: 84532)
let gasPrice = try await client.getGasPrice()

// Create transaction
let transaction = EthereumTransaction(
    to: "0xRecipientAddress...",
    value: 1000000000000000,  // 0.001 ETH in Wei
    gasLimit: 21000,
    maxFeePerGas: Int(gasPrice.value * 2),
    maxPriorityFeePerGas: Int(gasPrice.value)
)

// Send transaction
if let wallet = sdk.wallets.userWallets.first {
    let txHash = try await sdk.evm.sendTransaction(
        transaction: transaction,
        wallet: wallet
    )
    print("Transaction hash: \(txHash)")
}

signTransaction

Sign a transaction without sending it.
try await sdk.evm.signTransaction(
    transaction: EthereumTransaction,
    wallet: BaseWallet
) -> String

Parameters

  • transaction (EthereumTransaction) - Transaction to sign
  • wallet (BaseWallet) - Wallet to sign with

Returns

  • String - Signed transaction

Example

let sdk = DynamicSDK.instance()

let transaction = EthereumTransaction(
    to: "0xRecipientAddress...",
    value: 1000000000000000,
    gasLimit: 21000,
    maxFeePerGas: 20000000000,
    maxPriorityFeePerGas: 1000000000
)

if let wallet = sdk.wallets.userWallets.first {
    let signedTx = try await sdk.evm.signTransaction(
        transaction: transaction,
        wallet: wallet
    )
    print("Signed transaction: \(signedTx)")
}

writeContract

Write to a smart contract.
try await sdk.evm.writeContract(
    wallet: BaseWallet,
    input: WriteContractInput
) -> String

Parameters

  • wallet (BaseWallet) - Wallet to send from
  • input (WriteContractInput) - Contract call input

Returns

  • String - Transaction hash

Example

let sdk = DynamicSDK.instance()

// ERC20 transfer
let input = WriteContractInput(
    contractAddress: "0xTokenContract...",
    functionName: "transfer",
    args: ["0xRecipient...", "1000000000000000000"],
    abi: Erc20.abi
)

if let wallet = sdk.wallets.userWallets.first {
    let txHash = try await sdk.evm.writeContract(wallet: wallet, input: input)
    print("Transaction hash: \(txHash)")
}

sdk.solana

Solana blockchain operations module.

createConnection

Create a connection to Solana.
try await sdk.solana.createConnection() -> SolanaConnection

Returns

  • SolanaConnection - Connection to Solana network

Example

let sdk = DynamicSDK.instance()

let connection = try await sdk.solana.createConnection()
let blockhash = try await connection.getLatestBlockhash()
print("Latest blockhash: \(blockhash)")

createSigner

Create a signer for a Solana wallet.
try await sdk.solana.createSigner(wallet: BaseWallet) -> SolanaSigner

Parameters

  • wallet (BaseWallet) - Solana wallet to create signer for

Returns

  • SolanaSigner - Signer for the wallet

Example

let sdk = DynamicSDK.instance()

let solanaWallets = sdk.wallets.userWallets.filter { $0.chain.uppercased() == "SOL" }

if let wallet = solanaWallets.first {
    let signer = try await sdk.solana.createSigner(wallet: wallet)
    
    // Sign a message
    let signature = try await signer.signMessage(message: "Hello, Solana!")
    print("Signature: \(signature)")
}

SolanaSigner

Signer for Solana operations.

signMessage

Sign a message.
try await signer.signMessage(message: String) -> String

signEncodedTransaction

Sign a base64-encoded transaction.
try await signer.signEncodedTransaction(base64Transaction: String) -> String

signAndSendEncodedTransaction

Sign and send a base64-encoded transaction.
try await signer.signAndSendEncodedTransaction(base64Transaction: String) -> String

Example

let sdk = DynamicSDK.instance()

let solanaWallets = sdk.wallets.userWallets.filter { $0.chain.uppercased() == "SOL" }

if let wallet = solanaWallets.first {
    let signer = try await sdk.solana.createSigner(wallet: wallet)
    
    // Sign and send transaction
    let signature = try await signer.signAndSendEncodedTransaction(
        base64Transaction: base64EncodedTx
    )
    print("Transaction signature: \(signature)")
}

sdk.networks

Available blockchain networks.

evm

Get available EVM networks.
let evmNetworks = sdk.networks.evm  // [GenericNetwork]

Example

let sdk = DynamicSDK.instance()

for network in sdk.networks.evm {
    print("Network: \(network.name)")
    print("Chain ID: \(network.chainId.value)")
}

solana

Get available Solana networks.
let solanaNetworks = sdk.networks.solana  // [GenericNetwork]

Example

let sdk = DynamicSDK.instance()

for network in sdk.networks.solana {
    print("Network: \(network.name)")
}

EthereumTransaction

Transaction object for EVM chains.
EthereumTransaction(
    to: String,
    value: Int,
    gasLimit: Int,
    maxFeePerGas: Int,
    maxPriorityFeePerGas: Int,
    data: String? = nil
)

Properties

PropertyTypeDescription
toStringRecipient address
valueIntAmount in Wei
gasLimitIntGas limit
maxFeePerGasIntMaximum fee per gas
maxPriorityFeePerGasIntPriority fee per gas
dataString?Contract call data (optional)

WriteContractInput

Input for smart contract interactions.
WriteContractInput(
    contractAddress: String,
    functionName: String,
    args: [Any],
    abi: String
)

Properties

PropertyTypeDescription
contractAddressStringContract address
functionNameStringFunction to call
args[Any]Function arguments
abiStringContract ABI JSON

Complete EVM Example

import DynamicSDKSwift

let sdk = DynamicSDK.instance()

// Get EVM wallet
guard let wallet = sdk.wallets.userWallets.first(where: { 
    $0.chain.uppercased() == "EVM" 
}) else {
    print("No EVM wallet found")
    return
}

// Get gas price
let chainId = 84532 // Base Sepolia
let client = try await sdk.evm.createPublicClient(chainId: chainId)
let gasPrice = try await client.getGasPrice()

// Create and send transaction
let transaction = EthereumTransaction(
    to: "0xRecipient...",
    value: 10000000000000000,  // 0.01 ETH
    gasLimit: 21000,
    maxFeePerGas: Int(gasPrice.value * 2),
    maxPriorityFeePerGas: Int(gasPrice.value)
)

let txHash = try await sdk.evm.sendTransaction(
    transaction: transaction,
    wallet: wallet
)

print("Transaction sent: \(txHash)")

Complete Solana Example

import DynamicSDKSwift

let sdk = DynamicSDK.instance()

// Get Solana wallet
guard let wallet = sdk.wallets.userWallets.first(where: { 
    $0.chain.uppercased() == "SOL" 
}) else {
    print("No Solana wallet found")
    return
}

// Create connection and signer
let connection = try await sdk.solana.createConnection()
let signer = try await sdk.solana.createSigner(wallet: wallet)

// Get blockhash
let blockhash = try await connection.getLatestBlockhash()
print("Blockhash: \(blockhash)")

// Sign a message
let signature = try await signer.signMessage(message: "Hello from Solana!")
print("Signature: \(signature)")