mojito-testnet-sdk
Version:
🛠An SDK for building applications on top of mojitoswap in testnet.
69 lines (62 loc) • 2.12 kB
text/typescript
import invariant from 'tiny-invariant'
import { ChainId } from '../constants'
import { validateAndParseAddress } from '../utils'
import { Currency } from './currency'
/**
* Represents an ERC20 token with a unique address and some metadata.
*/
export class Token extends Currency {
public readonly chainId: ChainId
public readonly address: string
public constructor(chainId: ChainId, address: string, decimals: number, symbol?: string, name?: string) {
super(decimals, symbol, name)
this.chainId = chainId
this.address = validateAndParseAddress(address)
}
/**
* Returns true if the two tokens are equivalent, i.e. have the same chainId and address.
* @param other other token to compare
*/
public equals(other: Token): boolean {
// short circuit on reference equality
if (this === other) {
return true
}
return this.chainId === other.chainId && this.address === other.address
}
/**
* Returns true if the address of this token sorts before the address of the other token
* @param other other token to compare
* @throws if the tokens have the same address
* @throws if the tokens are on different chains
*/
public sortsBefore(other: Token): boolean {
invariant(this.chainId === other.chainId, 'CHAIN_IDS')
invariant(this.address !== other.address, 'ADDRESSES')
return this.address.toLowerCase() < other.address.toLowerCase()
}
}
/**
* Compares two currencies for equality
*/
export function currencyEquals(currencyA: Currency, currencyB: Currency): boolean {
if (currencyA instanceof Token && currencyB instanceof Token) {
return currencyA.equals(currencyB)
} else if (currencyA instanceof Token) {
return false
} else if (currencyB instanceof Token) {
return false
} else {
return currencyA === currencyB
}
}
export const WETH = {
[ChainId.MAINNET]: new Token(
ChainId.MAINNET,
'0x4446fc4eb47f2f6586f9faab68b3498f86c07521',
18,
'WKCS',
'Wrapped KCS'
),
[ChainId.TESTNET]: new Token(ChainId.TESTNET, '0x6551358EDC7fee9ADAB1E2E49560E68a12E82d9e', 18, 'WKCS', 'Wrapped KCS')
}