@pushchain/core
Version:
Push Chain is a true universal L1 that is 100% EVM compatible. It allows developers to deploy once and make their apps instantly compatible with users from all other L1s (Ethereum, Solana, etc) with zero on-chain code change.
258 lines • 7.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PAYABLE_TOKENS = exports.MOVEABLE_TOKENS = exports.PayableTokenAccessor = exports.MoveableTokenAccessor = void 0;
const enums_1 = require("./enums");
// Strongly-typed accessors that throw at runtime if a token is unavailable,
// while providing non-undefined types at compile time.
class MoveableTokenAccessor {
constructor(tokens) {
this.tokens = tokens;
}
require(name) {
const t = this.tokens[name];
if (!t)
throw new Error(`${String(name)} token not available on this chain`);
return t;
}
get ETH() {
return this.require('ETH');
}
get SOL() {
return this.require('SOL');
}
get USDT() {
return this.require('USDT');
}
get WETH() {
return this.require('WETH');
}
}
exports.MoveableTokenAccessor = MoveableTokenAccessor;
class PayableTokenAccessor {
constructor(tokens) {
this.tokens = tokens;
}
require(name) {
const t = this.tokens[name];
if (!t)
throw new Error(`${String(name)} token not available on this chain`);
return t;
}
get ETH() {
return this.require('ETH');
}
get USDT() {
return this.require('USDT');
}
get USDC() {
return this.require('USDC');
}
get WETH() {
return this.require('WETH');
}
}
exports.PayableTokenAccessor = PayableTokenAccessor;
// Native token sentinel addresses
const EVM_NATIVE = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
const TOKEN_META = {
// Ethereum Sepolia (testnet)
[enums_1.CHAIN.ETHEREUM_SEPOLIA]: {
ETH: {
symbol: 'ETH',
decimals: 18,
address: EVM_NATIVE,
mechanism: 'native',
},
USDT: {
symbol: 'USDT',
decimals: 6,
address: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',
mechanism: 'approve',
},
WETH: {
symbol: 'WETH',
decimals: 18,
address: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
mechanism: 'approve',
},
USDC: {
symbol: 'USDC',
decimals: 6,
address: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
mechanism: 'approve',
},
},
// Ethereum Mainnet
[enums_1.CHAIN.ETHEREUM_MAINNET]: {
ETH: {
symbol: 'ETH',
decimals: 18,
address: EVM_NATIVE,
mechanism: 'native',
},
USDT: {
symbol: 'USDT',
decimals: 6,
address: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
mechanism: 'approve',
},
WETH: {
symbol: 'WETH',
decimals: 18,
address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
mechanism: 'approve',
},
},
// Arbitrum Sepolia
[enums_1.CHAIN.ARBITRUM_SEPOLIA]: {
ETH: {
symbol: 'ETH',
decimals: 18,
address: EVM_NATIVE,
mechanism: 'native',
},
USDT: {
symbol: 'USDT',
decimals: 6,
address: '0x1419d7C74D234fA6B73E06A2ce7822C1d37922f0',
mechanism: 'approve',
},
WETH: {
symbol: 'WETH',
decimals: 18,
address: '0x980B62Da83eFf3D4576C647993b0c1D7faf17c73',
mechanism: 'approve',
},
},
// Base Sepolia
[enums_1.CHAIN.BASE_SEPOLIA]: {
ETH: {
symbol: 'ETH',
decimals: 18,
address: EVM_NATIVE,
mechanism: 'native',
},
USDT: {
symbol: 'USDT',
decimals: 6,
address: '0x9FF5a186f53F6E6964B00320Da1D2024DE11E0cB',
mechanism: 'approve',
},
WETH: {
symbol: 'WETH',
decimals: 18,
address: '0xfff9976782d46cc05630d1f6ebab18b2324d6b14',
mechanism: 'approve',
},
},
// BNB Testnet
[enums_1.CHAIN.BNB_TESTNET]: {
// NOTE: Both symbols are provided to mirror existing usage across maps
BNB: {
symbol: 'BNB',
decimals: 18,
address: EVM_NATIVE,
mechanism: 'native',
},
ETH: {
symbol: 'ETH',
decimals: 18,
address: EVM_NATIVE,
mechanism: 'native',
},
USDT: {
symbol: 'USDT',
decimals: 6,
address: '0xBC14F348BC9667be46b35Edc9B68653d86013DC5',
mechanism: 'approve',
},
},
// Solana Devnet
[enums_1.CHAIN.SOLANA_DEVNET]: {
SOL: {
symbol: 'SOL',
decimals: 9,
address: 'solana-native',
mechanism: 'native',
},
USDT: {
symbol: 'USDT',
decimals: 6,
address: 'EiXDnrAg9ea2Q6vEPV7E5TpTU1vh41jcuZqKjU5Dc4ZF',
mechanism: 'approve',
},
},
};
function makeToken(chain, symbol) {
var _a;
const meta = (_a = TOKEN_META[chain]) === null || _a === void 0 ? void 0 : _a[symbol];
if (!meta)
throw new Error(`Token ${symbol} not available on chain ${chain}`);
return {
symbol: meta.symbol,
decimals: meta.decimals,
address: meta.address,
mechanism: meta.mechanism,
};
}
// Minimal initial registries. These can be extended safely without breaking the API.
exports.MOVEABLE_TOKENS = {
[enums_1.CHAIN.ETHEREUM_SEPOLIA]: [
makeToken(enums_1.CHAIN.ETHEREUM_SEPOLIA, 'ETH'),
makeToken(enums_1.CHAIN.ETHEREUM_SEPOLIA, 'USDT'),
makeToken(enums_1.CHAIN.ETHEREUM_SEPOLIA, 'WETH'),
],
[enums_1.CHAIN.ETHEREUM_MAINNET]: [
makeToken(enums_1.CHAIN.ETHEREUM_MAINNET, 'ETH'),
makeToken(enums_1.CHAIN.ETHEREUM_MAINNET, 'USDT'),
makeToken(enums_1.CHAIN.ETHEREUM_MAINNET, 'WETH'),
],
[enums_1.CHAIN.ARBITRUM_SEPOLIA]: [
makeToken(enums_1.CHAIN.ARBITRUM_SEPOLIA, 'ETH'),
makeToken(enums_1.CHAIN.ARBITRUM_SEPOLIA, 'USDT'),
makeToken(enums_1.CHAIN.ARBITRUM_SEPOLIA, 'WETH'),
],
[enums_1.CHAIN.BASE_SEPOLIA]: [
makeToken(enums_1.CHAIN.BASE_SEPOLIA, 'ETH'),
makeToken(enums_1.CHAIN.BASE_SEPOLIA, 'USDT'),
makeToken(enums_1.CHAIN.BASE_SEPOLIA, 'WETH'),
],
[enums_1.CHAIN.BNB_TESTNET]: [
makeToken(enums_1.CHAIN.BNB_TESTNET, 'ETH'),
makeToken(enums_1.CHAIN.BNB_TESTNET, 'USDT'),
],
[enums_1.CHAIN.SOLANA_DEVNET]: [
makeToken(enums_1.CHAIN.SOLANA_DEVNET, 'SOL'),
makeToken(enums_1.CHAIN.SOLANA_DEVNET, 'USDT'),
],
};
exports.PAYABLE_TOKENS = {
[enums_1.CHAIN.ETHEREUM_SEPOLIA]: [
makeToken(enums_1.CHAIN.ETHEREUM_SEPOLIA, 'ETH'),
makeToken(enums_1.CHAIN.ETHEREUM_SEPOLIA, 'USDT'),
makeToken(enums_1.CHAIN.ETHEREUM_SEPOLIA, 'USDC'),
makeToken(enums_1.CHAIN.ETHEREUM_SEPOLIA, 'WETH'),
],
[enums_1.CHAIN.ETHEREUM_MAINNET]: [
makeToken(enums_1.CHAIN.ETHEREUM_MAINNET, 'ETH'),
makeToken(enums_1.CHAIN.ETHEREUM_MAINNET, 'USDT'),
makeToken(enums_1.CHAIN.ETHEREUM_MAINNET, 'WETH'),
],
[enums_1.CHAIN.ARBITRUM_SEPOLIA]: [
makeToken(enums_1.CHAIN.ARBITRUM_SEPOLIA, 'ETH'),
makeToken(enums_1.CHAIN.ARBITRUM_SEPOLIA, 'USDT'),
],
[enums_1.CHAIN.BASE_SEPOLIA]: [
makeToken(enums_1.CHAIN.BASE_SEPOLIA, 'ETH'),
makeToken(enums_1.CHAIN.BASE_SEPOLIA, 'USDT'),
],
[enums_1.CHAIN.BNB_TESTNET]: [
makeToken(enums_1.CHAIN.BNB_TESTNET, 'BNB'),
makeToken(enums_1.CHAIN.BNB_TESTNET, 'USDT'),
],
[enums_1.CHAIN.SOLANA_DEVNET]: [
makeToken(enums_1.CHAIN.SOLANA_DEVNET, 'SOL'),
makeToken(enums_1.CHAIN.SOLANA_DEVNET, 'USDT'),
],
};
//# sourceMappingURL=tokens.js.map