@ixily/activ
Version:
Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.
68 lines (61 loc) • 1.83 kB
text/typescript
const BufferB = require('buffer/').Buffer
import { base58 } from 'ethers/lib/utils'
const compress = (str: string): string => {
return base58.encode(BufferB.from(str, 'utf8'))
}
const decompress = (str: string): string => {
return BufferB.from(base58.decode(str)).toString('utf8')
}
// Join Unique Keys With Fast Zip Hash and a solid simple separator
export const uniqueKeyJoin = (keys: string[]): string => {
const preProcessedKeys = keys.map((key) => {
return key.replace('|x', '|:x')
})
const joinedKeys = preProcessedKeys.join('|x')
return compress(joinedKeys)
}
// undo the above operation and return the keys after unzip and split
export const uniqueKeySplit = (uniqueKey: string): string[] => {
try {
const unzipped = decompress(uniqueKey)
const split = unzipped.split('|x')
const postProcessedKeys = split.map((key) => {
return key.replace('|:x', '|x')
})
return postProcessedKeys
} catch (e) {
throw new Error(
`uniqueKeySplit Error: Are u sure this is a valid uniqueKey? ${uniqueKey}`,
)
}
}
export const getUniqueStrategyReference = (
chain: string,
contractAddress: string,
creatorAddress: string,
strategyKey: string,
): string => {
return uniqueKeyJoin([chain, contractAddress, creatorAddress, strategyKey])
}
export const decomposeUniqueStrategyReference = (
uniqueStrategyReference: string,
): {
chain: string
contractAddress: string
creatorAddress: string
strategyKey: string
} => {
const decomposed = uniqueKeySplit(uniqueStrategyReference)
if (decomposed[1] === undefined) {
throw new Error(
'decomposeUniqueStrategyReference Error: Are u sure this is a valid uniqueStrategyReference? ' +
uniqueStrategyReference,
)
}
return {
chain: decomposed[0],
contractAddress: decomposed[1],
creatorAddress: decomposed[2],
strategyKey: decomposed[3],
}
}