Skip to main content

EGLD Transfer

Send native EGLD tokens between accounts.

Complete Example

import 'dart:io';
import 'package:abidock_mvx/abidock_mvx.dart';

void main() async {
// 1. Setup logging
final logger = ConsoleLogger(
minLevel: LogLevel.debug,
includeTimestamp: true,
prettyPrintContext: true,
showBorders: true,
useColors: true,
);

// 2. Load sender wallet
final alicePem = File('assets/alice.pem').readAsStringSync();
final alice = await Account.fromPem(alicePem);

// 3. Connect to network
final provider = GatewayNetworkProvider.devnet(logger: logger);
final aliceOnNetwork = await provider.getAccount(alice.address);
final currentNonce = aliceOnNetwork.nonce;

// 4. Define receiver
final bobAddress = Address.fromBech32(
'erd12m6dwylyqvz3282j857mldsdrfln476ww7k3kmpq0f0h7pvhl8qs4ucen5',
);

// 5. Create transfer controller
final controller = TransfersController(chainId: const ChainId.devnet());

// 6. Build transfer transaction
final tx = await controller.createTransactionForNativeTransfer(
alice,
currentNonce,
NativeTransferInput(
receiver: bobAddress,
amount: Balance.fromEgld(0.1),
),
);

// 7. Send transaction
final txHash = await provider.sendTransaction(tx);
print('Transaction hash: $txHash');

// 8. Wait for completion
final awaiter = AccountAwaiter(networkProvider: provider);
final newAccount = await awaiter.awaitNonceIncrement(
alice.address,
currentNonce,
options: const AccountAwaitingOptions(
timeout: Duration(minutes: 2),
pollingInterval: Duration(seconds: 5),
),
);

print('Transaction completed!');
print('New balance: ${newAccount.balance.toDenominated} EGLD');
}

Key Concepts

TransfersController

Use TransfersController for simple transfers instead of SmartContractController:

final controller = TransfersController(chainId: const ChainId.devnet());

Balance Helpers

Create balance amounts using convenient methods:

Balance.fromEgld(0.1)           // 0.1 EGLD
Balance.fromEgld(1.5) // 1.5 EGLD
Balance(BigInt.from(10).pow(17)) // 0.1 EGLD (raw)

Awaiting Completion

Two ways to wait for transaction completion:

// Option 1: Watch transaction hash
final watcher = TransactionWatcher(networkProvider: provider);
await watcher.awaitCompleted(txHash);

// Option 2: Wait for nonce increment
final awaiter = AccountAwaiter(networkProvider: provider);
await awaiter.awaitNonceIncrement(address, currentNonce);

Chain ID

Always specify the correct chain ID:

ChainId.mainnet()  // Mainnet
ChainId.devnet() // Devnet
ChainId.testnet() // Testnet

Transfer Types

The SDK supports various transfer types:

MethodDescription
createTransactionForNativeTransferSend EGLD
createTransactionForESDTTransferSend fungible tokens
createTransactionForNFTTransferSend NFTs
createTransactionForMultiTransferSend multiple tokens

See Also