@swaptoshi/dex-module
Version:
Klayr decentralized exchange (dex) on-chain module
47 lines • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultPoolKey = void 0;
exports.getPoolKey = getPoolKey;
exports.decodePoolAddress = decodePoolAddress;
exports.computeAddress = computeAddress;
exports.computePoolId = computePoolId;
const cryptography = require("@klayr/cryptography");
exports.defaultPoolKey = Object.freeze({
token0: Buffer.alloc(0),
token1: Buffer.alloc(0),
fee: '0',
});
function getPoolKey(tokenA, tokenB, fee) {
if (tokenA.compare(tokenB) === 0)
throw new Error('same token address');
const token0 = tokenA.compare(tokenB) < 0 ? tokenA : tokenB;
const token1 = tokenA.compare(tokenB) < 0 ? tokenB : tokenA;
return { token0, token1, fee };
}
function decodePoolAddress(poolAddress) {
return {
token0: poolAddress.subarray(0, 8),
token1: poolAddress.subarray(8, 16),
fee: poolAddress.subarray(16).readUIntBE(0, 4).toString(),
};
}
function computeAddress(key) {
if (key.token0.compare(Buffer.alloc(8)) === 0 && key.token1.compare(Buffer.alloc(8)) === 0 && key.fee === '0') {
throw new Error('zero');
}
if (key.token0.compare(key.token1) > 0) {
throw new Error('invalid token0/token1');
}
if (key.token0.compare(Buffer.alloc(0)) === 0) {
throw new Error('invalid token0');
}
const feeBuf = Buffer.allocUnsafe(4);
feeBuf.writeUIntBE(parseInt(key.fee, 10), 0, 4);
return Buffer.concat([key.token0, key.token1, feeBuf]);
}
function computePoolId(poolAddress) {
if (poolAddress.length !== 20)
throw new Error('invalid poolAddress');
return cryptography.utils.hash(poolAddress).subarray(0, 4);
}
//# sourceMappingURL=pool_address.js.map