@rampdefi/uniswap-v2-sdk-multi-chain v0.0.1
Customized Uniswap V2 SDK
In-depth documentation on original SDK is available at uniswap.org.
Most blockchain with EVM compatibility will use Uniswap solutions to build a decentralized crypto exchange. However,
the original Uniswap SDK has a factory address contract and the init code hash (used for getCreate2Address etherjs method) is locked in the source code.
The result is that everyone is cloning and creates their own version. And as a result, their own SDK is outdated with Uniswap latest fixes, upgrade and hard to check what changes with the original Uniswap SDK.
I forked and changes some code, so we can reuse Uniswap SDK without cloning and create our own.
Demo online
Install
npm i custom-uniswap-v2-sdkor
yarn add custom-uniswap-v2-sdkChanges
The forked SDK won't export
FACTORY_ADDRESSandINIT_CODE_HASHanymore.Exported
computePairAddressmethod will require factory address, and init code hash.
// Example interface
interface ComputePairAddressArg {
factoryAddress: string
initCodeHash: string
tokenA: Token
tokenB: Token
}
export function computePairAddress(arg: ComputePairAddressArg) {
// Example
}- Exported class
Pairconstructor will require factory address, and init code hash.
new Pair(currencyAmountA, tokenAmountB, factoryAddress, initCodeHash)- Exported class
Pairstatic methodgetAddresswill require factory address, and init code hash.
public static getAddress(tokenA: Token, tokenB: Token, factoryAddress: string, initCodeHash: string): string {
//
}- Exported class
Pairconstructor now support custom fees numerator and fees denominator(v3.1.0)
In the Uniswap SDK , feesNumerator and feesDenominator are constant JSBI.BigInt(997) and JSBI.BigInt(1000)
export const _997 = JSBI.BigInt(997)
export const _1000 = JSBI.BigInt(1000)In PancakeSwap they change this to support different fee
export const FEES_NUMERATOR = JSBI.BigInt(9975)
export const FEES_DENOMINATOR = JSBI.BigInt(10000)So in the custom SDK, ThePair class now can change the fees. If you do not add to the constructor, default fees will be used.
new Pair(currencyAmountA, tokenAmountB, factoryAddress, initCodeHash, feesNumerator, feesDenominator)Router.swapCallParameterssupport custom contract method name that haveETHname in it.
For example, in the Avalance chain some contracts are using swapExactAVAXForTokens instead swapExactETHForTokens
Router.swapCallParameters(trade, {
feeOnTransfer: false,
allowedSlippage: new Percent(JSBI.BigInt(Math.floor(slippageTolerance)), JSBI.BigInt(10000)),
recipient: wallet.account,
ttl: deadline,
etherMethods: {
wapETHForExactTokens: 'swapAVAXForExactTokens',
swapExactETHForTokens: 'swapExactAVAXForTokens',
swapExactETHForTokensSupportingFeeOnTransferTokens: 'swapExactAVAXForTokensSupportingFeeOnTransferTokens',
swapExactTokensForETH: 'swapExactTokensForAVAX',
swapExactTokensForETHSupportingFeeOnTransferTokens: 'swapExactTokensForAVAXSupportingFeeOnTransferTokens',
swapTokensForExactETH: 'swapTokensForExactAVAX'
}
})