Send native transfer
Send ETH or native tokens on EVM chains:Copy
Ask AI
var tx = new Dictionary<string, object>
{
{ "to", "0xRecipientAddress" },
{ "from", wallet.Address },
{ "value", "0x" + ((long)(0.01 * 1e18)).ToString("X") } // 0.01 ETH in wei
};
string txHash = await DynamicSDK.Instance.Networks.Evm.SendTransaction(
wallet.Address, tx);
Debug.Log($"Transaction hash: {txHash}");
Write contract
Interact with smart contracts:Copy
Ask AI
var abiJson = @"[{
""inputs"": [
{""name"": ""to"", ""type"": ""address""},
{""name"": ""amount"", ""type"": ""uint256""}
],
""name"": ""transfer"",
""outputs"": [{""name"": """", ""type"": ""bool""}],
""stateMutability"": ""nonpayable"",
""type"": ""function""
}]";
var input = new Dictionary<string, object>
{
{ "address", "0xContractAddress" },
{ "abi", JsonConvert.DeserializeObject<List<object>>(abiJson) },
{ "functionName", "transfer" },
{ "args", new List<object> { "0xRecipient", "1000000" } },
};
string txHash = await DynamicSDK.Instance.Networks.Evm.WriteContract(
wallet.Id, input);
Sign typed data (EIP-712)
Sign structured data according to EIP-712:Copy
Ask AI
var typedData = JsonConvert.DeserializeObject<Dictionary<string, object>>(@"{
""types"": {
""EIP712Domain"": [
{""name"": ""name"", ""type"": ""string""},
{""name"": ""version"", ""type"": ""string""},
{""name"": ""chainId"", ""type"": ""uint256""}
],
""Mail"": [
{""name"": ""from"", ""type"": ""string""},
{""name"": ""to"", ""type"": ""string""},
{""name"": ""contents"", ""type"": ""string""}
]
},
""primaryType"": ""Mail"",
""domain"": { ""name"": ""Example"", ""version"": ""1"", ""chainId"": 1 },
""message"": { ""from"": ""Alice"", ""to"": ""Bob"", ""contents"": ""Hello!"" }
}");
string signature = await DynamicSDK.Instance.Networks.Evm.SignTypedData(
wallet.Id, typedData);
Complete example
Copy
Ask AI
using DynamicSDK.Core;
using Newtonsoft.Json;
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
public class EvmTransactionManager : MonoBehaviour
{
private BaseWallet _evmWallet;
private void Start()
{
// Get EVM wallet
_evmWallet = DynamicSDK.Instance.Wallets.UserWallets
.FirstOrDefault(w => w.Chain.ToUpper() == "EVM");
}
public async void SendEth(string toAddress, double amountEth)
{
if (_evmWallet == null)
{
Debug.LogError("No EVM wallet available");
return;
}
try
{
long weiAmount = (long)(amountEth * 1e18);
var tx = new Dictionary<string, object>
{
{ "to", toAddress },
{ "from", _evmWallet.Address },
{ "value", "0x" + weiAmount.ToString("X") }
};
string txHash = await DynamicSDK.Instance.Networks.Evm.SendTransaction(
_evmWallet.Address, tx);
Debug.Log($"Transaction sent: {txHash}");
}
catch (System.Exception ex)
{
Debug.LogError($"Transaction failed: {ex.Message}");
}
}
public async void TransferErc20(
string contractAddress,
string toAddress,
string amount)
{
if (_evmWallet == null)
{
Debug.LogError("No EVM wallet available");
return;
}
var abiJson = @"[{
""inputs"": [
{""name"": ""to"", ""type"": ""address""},
{""name"": ""amount"", ""type"": ""uint256""}
],
""name"": ""transfer"",
""outputs"": [{""name"": """", ""type"": ""bool""}],
""stateMutability"": ""nonpayable"",
""type"": ""function""
}]";
var input = new Dictionary<string, object>
{
{ "address", contractAddress },
{ "abi", JsonConvert.DeserializeObject<List<object>>(abiJson) },
{ "functionName", "transfer" },
{ "args", new List<object> { toAddress, amount } },
};
string txHash = await DynamicSDK.Instance.Networks.Evm.WriteContract(
_evmWallet.Id, input);
Debug.Log($"ERC20 transfer sent: {txHash}");
}
}
Next steps
- Message Signing - Sign messages with EVM wallets
- Token Balances - Query token balances