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.
npm i custom-uniswap-v2-sdk
or
yarn add custom-uniswap-v2-sdk
-
The forked SDK won't export
FACTORY_ADDRESS
andINIT_CODE_HASH
anymore. -
Exported
computePairAddress
method 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
Pair
constructor will require factory address, and init code hash.
new Pair(currencyAmountA, tokenAmountB, factoryAddress, initCodeHash)
- Exported class
Pair
static methodgetAddress
will require factory address, and init code hash.
public static getAddress(tokenA: Token, tokenB: Token, factoryAddress: string, initCodeHash: string): string {
//
}
- Exported class
Pair
constructor 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.swapCallParameters
support custom contract method name that haveETH
name 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'
}
})