x402-tokenverdict / tree / tools/gen-selectors.mjs ยท raw (this view has old GitHub links rewritten for the mirror; raw is byte-exact)
// Regenerate src/selectors.js (4-byte selectors of the owner-power functions TokenVerdict looks for in bytecode).
//   node tools/gen-selectors.mjs
import { toFunctionSelector } from 'viem';
import { writeFileSync } from 'node:fs';
const SIGS = {
  mint: ['mint(address,uint256)', 'mint(uint256)', 'mintTo(address,uint256)', 'mintTokens(address,uint256)', 'issue(uint256)', 'issue(address,uint256)', 'configureMinter(address,uint256)', 'increaseSupply(uint256)', 'createTokens(uint256)', 'mint(address[],uint256[])'],
  blacklist: ['blacklist(address)', 'unBlacklist(address)', 'addToBlacklist(address)', 'removeFromBlacklist(address)', 'setBlacklist(address,bool)', 'setBlacklisted(address,bool)', 'blacklistAddress(address,bool)', 'blacklistAddress(address)', 'isBlacklisted(address)', 'isBlackListed(address)', 'addBlackList(address)', 'setBlackList(address,bool)', 'setBots(address[],bool)', 'addBots(address[])', 'addBot(address)', 'setBot(address,bool)', 'blockBots(address[])', 'setIsBot(address,bool)', 'isBot(address)', 'bots(address)', 'freeze(address)', 'freezeAccount(address,bool)', 'blacklisted(address)', 'manageBlacklist(address[],bool)', 'updateBlacklist(address,bool)', 'setSniper(address,bool)', 'addSniper(address)', 'blockAddress(address)', 'setBlocked(address,bool)'],
  pause: ['pause()', 'unpause()', 'setPaused(bool)', 'togglePause()'],
  fees: ['setFee(uint256)', 'setFees(uint256,uint256)', 'setFees(uint256,uint256,uint256)', 'setFee(uint256,uint256)', 'setTaxes(uint256,uint256)', 'setTax(uint256)', 'setTax(uint256,uint256)', 'setBuyFee(uint256)', 'setSellFee(uint256)', 'setBuyTax(uint256)', 'setSellTax(uint256)', 'updateBuyFees(uint256,uint256,uint256)', 'updateSellFees(uint256,uint256,uint256)', 'updateBuyFees(uint256,uint256)', 'updateSellFees(uint256,uint256)', 'updateFees(uint256,uint256)', 'setTaxFeePercent(uint256)', 'setLiquidityFeePercent(uint256)', 'setFeePercent(uint256)', 'setBuyTaxes(uint256,uint256,uint256)', 'setSellTaxes(uint256,uint256,uint256)', 'setTaxRates(uint256,uint256)', 'setTransferFee(uint256)', 'updateTax(uint256,uint256)', 'setMarketingFee(uint256)', 'setFeeRates(uint256,uint256)', 'changeFees(uint256,uint256)', 'setSwapFees(uint256,uint256)'],
  trading: ['enableTrading()', 'openTrading()', 'setTradingEnabled(bool)', 'startTrading()', 'setTrading(bool)', 'tradingOpen()', 'tradingEnabled()', 'enableTrading(uint256)'],
  limits: ['setMaxTxAmount(uint256)', 'setMaxWalletSize(uint256)', 'setMaxWallet(uint256)', 'updateMaxTxnAmount(uint256)', 'updateMaxWalletAmount(uint256)', 'setMaxTx(uint256)', 'setMaxTxPercent(uint256)', 'removeLimits()', 'setCooldown(uint256)'],
  balance: ['setBalance(address,uint256)', 'setBalances(address[],uint256[])', 'adminBurn(address,uint256)', 'burnFrom(address)', 'destroyBlackFunds(address)'],
  upgrade: ['upgradeTo(address)', 'upgradeToAndCall(address,bytes)'],
  ownership: ['owner()', 'getOwner()', 'renounceOwnership()', 'transferOwnership(address)'],
};
const out = {};
for (const [k, list] of Object.entries(SIGS)) out[k] = list.map((s) => [toFunctionSelector(s).slice(2), s]);
writeFileSync(new URL('../src/selectors.js', import.meta.url), `// Generated by tools/gen-selectors.mjs: 4-byte selectors (hex, no 0x) of owner-power functions, by category.\n// Matched as PUSH4 operands in runtime bytecode when the contract is not verified (a heuristic: a selector can be present\n// without being reachable, and functions can be renamed).\nexport const SELECTORS = ${JSON.stringify(out, null, 1)};\n`);
console.log(Object.fromEntries(Object.entries(out).map(([k, v]) => [k, v.length])));

agentgate-source: code mirror on Cloudflare Pages. All repos