@sfpro/sdk
Version:
TypeScript SDK for Superfluid Protocol - stream money every second
56 lines (55 loc) • 1.88 kB
JavaScript
import { encodeAbiParameters, parseAbiParameters } from "viem";
export const OPERATION_TYPE = {
UNSUPPORTED: 0,
ERC20_APPROVE: 1,
ERC20_TRANSFER_FROM: 2,
ERC777_SEND: 3,
ERC20_INCREASE_ALLOWANCE: 4,
ERC20_DECREASE_ALLOWANCE: 5,
SUPERTOKEN_UPGRADE: 101,
SUPERTOKEN_DOWNGRADE: 102,
SUPERFLUID_CALL_AGREEMENT: 201,
CALL_APP_ACTION: 202,
SIMPLE_FORWARD_CALL: 301,
ERC2771_FORWARD_CALL: 302,
};
export const stripFunctionSelector = (callData) => "0x".concat(callData.slice(10));
export function prepareOperationData({ operationType, data, ...rest }) {
switch (operationType) {
case OPERATION_TYPE.SUPERFLUID_CALL_AGREEMENT: {
const userData = rest.userData ?? "0x";
return encodeAbiParameters(parseAbiParameters("bytes, bytes"), [data, userData]);
}
case OPERATION_TYPE.CALL_APP_ACTION:
case OPERATION_TYPE.SIMPLE_FORWARD_CALL:
case OPERATION_TYPE.ERC2771_FORWARD_CALL:
return data;
case OPERATION_TYPE.ERC20_APPROVE:
case OPERATION_TYPE.ERC20_TRANSFER_FROM:
case OPERATION_TYPE.ERC777_SEND:
case OPERATION_TYPE.ERC20_INCREASE_ALLOWANCE:
case OPERATION_TYPE.ERC20_DECREASE_ALLOWANCE:
case OPERATION_TYPE.SUPERTOKEN_UPGRADE:
case OPERATION_TYPE.SUPERTOKEN_DOWNGRADE:
return stripFunctionSelector(data);
default:
throw new Error(`Unsupported operation type: ${operationType}`);
}
}
export function prepareOperation(args) {
const { operationType, target, data, ...rest } = args;
return {
operationType,
target,
data: prepareOperationData({ operationType, data, ...rest }),
};
}
export const TIME_UNIT = {
second: 1,
minute: 60,
hour: 3600,
day: 86400,
week: 604800,
month: 2628000,
year: 31536000,
};