evm_recharge.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /// 与 Web `evmRecharge.ts` 对齐:根据 protocol / networkName 解析 EVM chainId。
  2. int? resolveEvmChainId(String protocol, String networkName) {
  3. final p = protocol.toLowerCase().trim();
  4. final n = networkName.toLowerCase().trim();
  5. if (p.contains('tron') || n == 'trc20') {
  6. return null;
  7. }
  8. if (n == 'bep20' || p.contains('bsc') || p.contains('bnb')) {
  9. return 56;
  10. }
  11. if ((n == 'erc20' || n == 'erc-20') && p.contains('arbitrum')) {
  12. return 42161;
  13. }
  14. if ((n == 'erc20' || n == 'erc-20') &&
  15. (p.contains('polygon') || p.contains('matic'))) {
  16. return 137;
  17. }
  18. if ((n == 'erc20' || n == 'erc-20') && p.contains('base')) {
  19. return 8453;
  20. }
  21. if ((n == 'erc20' || n == 'erc-20') && p.contains('optimism')) {
  22. return 10;
  23. }
  24. if (n == 'erc20' || n == 'erc-20' || p.contains('ethereum') || p == 'eth') {
  25. return 1;
  26. }
  27. if (p.contains('polygon') || p.contains('matic')) {
  28. return 137;
  29. }
  30. if (p.contains('arbitrum')) {
  31. return 42161;
  32. }
  33. if (p.contains('base')) {
  34. return 8453;
  35. }
  36. if (p.contains('optimism')) {
  37. return 10;
  38. }
  39. return null;
  40. }
  41. /// USDT 精度:主网 6,其它常见链 18(与 Web 一致)。
  42. int erc20DecimalsForChain(int chainId) {
  43. if (chainId == 1) {
  44. return 6;
  45. }
  46. return 18;
  47. }
  48. String chainIdToCaip2(int chainId) => 'eip155:$chainId';
  49. String chainIdHex(int chainId) => '0x${chainId.toRadixString(16)}';