# dfs:register-source-token — Ammora SDK 0.3.8 dfs:register-source-token -- . Normal permissionless exact-transfer probe in the authenticated pool factory's registry. Never changes an owner policy, registrar role, or aggregation admission. [Read in Docs](https://docs.ammora.org/examples?command=dfs%3Aregister-source-token) · [Detailed guide](https://docs.ammora.org/guides/src-dfs-readme) · [Local setup](https://docs.ammora.org/guides/example-setup) ## Context and execution GIWA Sepolia 91342. Public SDK 0.3.8, Math 0.3.0. Source revision: `a9b3fd798fa51495e8defec99a25de59e4d70672`. Install the SDK in your app, or prepare the example project using the local setup guide for its npm commands. Review the entry source and guide for required arguments, roles and deployment selection. `AMMORA_SEND=0` does not turn send-only commands into previews. Never put CLI keys in a browser or resend an uncertain transaction. Command: `npm run dfs:register-source-token -- ` (`tsx src/dfs/register-source-token.ts`). Omit `--` and arguments when the source accepts none. ## Entry file: `src/dfs/register-source-token.ts` ```typescript /** dfs:register-source-token -- . * Normal permissionless exact-transfer probe in the authenticated pool factory's registry. * Never changes an owner policy, registrar role, or aggregation admission. */ import { buildRegisterStandardToken } from "@ammora-protocol/sdk"; import { erc20Abi, parseAbi } from "viem"; import { arl, natural, execute } from "../shared/actions.js"; import { nonzero } from "../fees/policy.js"; import { main } from "../shared/run.js"; import { printJson } from "../shared/input.js"; const abi=parseAbi([ "function tokenPolicyRegistry() view returns(address)", "function ownerPolicyConfigured(address) view returns(bool)", "function policy(address) view returns(uint8 kind,bool poolAllowed,bool routerAllowed,bool rewardAllowed)", ]); main(async()=>{ const [pool,kind,tokenArg,probeArg,...extra]=process.argv.slice(2); if(extra.length || !["concentrated","compounding"].includes(kind??""))throw new Error("usage: "); const c=await arl(pool,kind as "concentrated"|"compounding"),token=nonzero(tokenArg,"token"),probe=natural(probeArg,"probeRaw",true); const provenance=await c.sdk.getPoolProvenance(); const registry=await c.client.readContract({address:provenance.factory,abi,functionName:"tokenPolicyRegistry"}); const policy=await c.client.readContract({address:registry,abi,functionName:"policy",args:[token]}); const ownerConfigured=await c.client.readContract({address:registry,abi,functionName:"ownerPolicyConfigured",args:[token]}); printJson({registry,token,policy,ownerConfigured,probe,warning:"Behavioral round trip only; does not prove immutable token behavior or grant aggregation admission"}); if(ownerConfigured)throw new Error("Owner policy is sticky; never override it with a permissionless probe"); if(policy[0]===1 && policy[1] && policy[2] && policy[3])return; if(policy[0]!==0)throw new Error("Only an unclassified token may use this example; preserve existing classifications"); const balance=await c.client.readContract({address:token,abi:erc20Abi,functionName:"balanceOf",args:[c.caller]}); if(balance