Files
smom-dbis-138/examples/metamask-react/src/AddTokenButton.tsx
T
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

58 lines
1.2 KiB
TypeScript

import React, { useState } from 'react';
interface AddTokenButtonProps {
address: string;
symbol: string;
decimals: number;
image?: string;
}
export function AddTokenButton({
address,
symbol,
decimals,
image,
}: AddTokenButtonProps) {
const [isAdding, setIsAdding] = useState(false);
const [error, setError] = useState<string | null>(null);
const addToken = async () => {
if (typeof window === 'undefined' || !window.ethereum) {
setError('MetaMask is not installed');
return;
}
setIsAdding(true);
setError(null);
try {
await window.ethereum.request({
method: 'wallet_watchAsset',
params: {
type: 'ERC20',
options: {
address,
symbol,
decimals,
...(image && { image }),
},
},
});
} catch (err: any) {
setError(err.message || 'Failed to add token');
} finally {
setIsAdding(false);
}
};
return (
<div>
<button onClick={addToken} disabled={isAdding}>
{isAdding ? 'Adding...' : `Add ${symbol}`}
</button>
{error && <div style={{ color: 'red' }}>{error}</div>}
</div>
);
}