async function uploadAvatar(file: File, userAddress: string) {
// Get cost estimate
const sizeKb = Math.ceil(file.size / 1024);
const quote = await client.getPricingQuote({
app_id: 'my_app',
operation_type: 'write',
size_kb: sizeKb,
collection: 'avatars'
});
console.log(`Upload will cost ${quote.total_cost} TIA`);
// Execute payment
const paymentTx = await wallet.sendTokens(
quote.brokerAddress,
quote.total_cost
);
// Upload blob
const uploadResult = await client.uploadBlob({
collection: 'avatars',
blob: file,
metadata: {
user_address: userAddress,
is_primary: true,
uploaded_at: new Date().toISOString()
},
payment_tx_hash: paymentTx.transactionHash,
user_address: userAddress,
broker_address: quote.brokerAddress,
amount_utia: quote.total_cost_utia
});
// Wait for confirmation
await client.waitForTaskCompletion(uploadResult.ticket_id);
return uploadResult.blob_id;
}