mirror of
https://github.com/hanzonet/explore.git
synced 2026-10-30 18:16:57 +00:00
69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
import type { Abi, AbiFallback, AbiReceive } from 'abitype';
|
|
import type { AbiFunction } from 'viem';
|
|
import { toFunctionSelector } from 'viem';
|
|
|
|
import type { MethodType, SmartContractMethod, SmartContractMethodRead, SmartContractMethodWrite } from './types';
|
|
|
|
export const getNativeCoinValue = (value: unknown) => {
|
|
if (typeof value !== 'string') {
|
|
return BigInt(0);
|
|
}
|
|
|
|
return BigInt(value);
|
|
};
|
|
|
|
export const isMethod = (method: Abi[number]): method is SmartContractMethod =>
|
|
(method.type === 'function' || method.type === 'fallback' || method.type === 'receive');
|
|
|
|
export const isReadMethod = (method: Abi[number]): method is SmartContractMethodRead =>
|
|
method.type === 'function' && (
|
|
method.constant || method.stateMutability === 'view' || method.stateMutability === 'pure'
|
|
);
|
|
|
|
export const isWriteMethod = (method: Abi[number]): method is SmartContractMethodWrite =>
|
|
(method.type === 'function' || method.type === 'fallback' || method.type === 'receive') &&
|
|
!isReadMethod(method);
|
|
|
|
export const enrichWithMethodId = (method: AbiFunction | AbiFallback | AbiReceive): SmartContractMethod => {
|
|
if (method.type !== 'function') {
|
|
return method;
|
|
}
|
|
|
|
try {
|
|
return {
|
|
...method,
|
|
method_id: toFunctionSelector(method),
|
|
};
|
|
} catch (error) {
|
|
return {
|
|
...method,
|
|
is_invalid: true,
|
|
};
|
|
}
|
|
};
|
|
|
|
const getNameForSorting = (method: SmartContractMethod | AbiFallback | AbiReceive) => {
|
|
if ('name' in method) {
|
|
return method.name;
|
|
}
|
|
|
|
return method.type === 'fallback' ? 'fallback' : 'receive';
|
|
};
|
|
|
|
export const formatAbi = (abi: Abi) => {
|
|
return abi
|
|
.filter(isMethod)
|
|
.map(enrichWithMethodId)
|
|
.sort((a, b) => {
|
|
const aName = getNameForSorting(a);
|
|
const bName = getNameForSorting(b);
|
|
return aName.localeCompare(bName);
|
|
});
|
|
};
|
|
|
|
export const TYPE_FILTER_OPTIONS: Array<{ value: MethodType; title: string }> = [
|
|
{ value: 'all', title: 'All' },
|
|
{ value: 'read', title: 'Read' },
|
|
{ value: 'write', title: 'Write' },
|
|
];
|