This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.
VestingToken
View technical details
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Unvest Docs","colors":{"primary":"#036FE3","light":"#FAFAFA","dark":"#036FE3"},"favicon":"/favicon.svg","logo":{"light":"https://mintcdn.com/unvest/ZPndW_DYd52BB9Sr/logo/light.svg?fit=max\u0026auto=format\u0026n=ZPndW_DYd52BB9Sr\u0026q=85\u0026s=17c0d67a7fc0fed10bbc4c532d7405a7","dark":"https://mintcdn.com/unvest/ZPndW_DYd52BB9Sr/logo/dark.svg?fit=max\u0026auto=format\u0026n=ZPndW_DYd52BB9Sr\u0026q=85\u0026s=c1bad4b9154c7cb083840546464735a3"},"appearance":{"default":"dark","strict":null},"navbar":{"links":[{"label":"Homepage","href":"https://unvest.io"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.unvest.io"}},"footer":{"socials":{"x":"https://x.com/unvest_io","github":"https://github.com/unvest"}},"navigation":{"global":{"anchors":[{"anchor":"Telegram","href":"https://t.me/unvest_io","icon":"telegram"},{"anchor":"Discord","href":"https://discord.gg/PQcnBkyW9w","icon":"discord"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"unvest","hasAudioNarration":false,"actualSubdomain":"unvest","customDomains":["docs.unvest.io"],"gitSource":{"type":"github","owner":"unvest","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e629f325d2bf1005fff2","collectionId":"f4c76a00-99be-474c-8bd1-1826fec73dae","schemaVersion":"v2"},"entitlements":{},"buildId":"6ae91f943d1d6aedd3ba945d:success","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Documentation","count":54},{"language":"default","tag":"Tutorials","count":52},{"language":"default","tag":"Features","count":34},{"language":"default","tag":"Protocol","count":16},{"language":"default","tag":"Miscellaneous","count":14},{"language":"default","tag":"Token Vesting","count":11},{"language":"default","tag":"Advanced Tutorials","count":11},{"language":"default","tag":"Technical","count":9},{"language":"default","tag":"Liquidity Locks","count":7},{"language":"default","tag":"Smart Contracts","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"smart-contracts/vesting-token","slug":"/smart-contracts/vesting-token","pageMetadata":{"title":"VestingToken","description":"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.","href":"/smart-contracts/vesting-token"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={p:`p`,..._provideComponents(),...props.components},{Card}=_components;if(!Card)_missingMdxReference(`Card`,true);return _jsx(Card,{title:`VestingToken`,href:`/smart-contracts/protocol/VestingToken.sol`,children:_jsx(_components.p,{children:`View technical details`})})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"VestingToken","description":"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.","href":"/smart-contracts/vesting-token"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"subdomain":"unvest","siteName":"Unvest Docs","title":"VestingToken - Unvest Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-07T01:45:52.797Z","originalFileLocation":"smart-contracts/vesting-token.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Unvest Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"VestingToken - Unvest Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Unvest Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.unvest.io/smart-contracts/vesting-token\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://unvest.mintlify.site/_mintlify/api/og/v2?division=Smart+Contracts\u0026amp;title=VestingToken\u0026amp;description=This+contract+stores+the+core+logic+for+locking+tokens+and+releasing+them%2C+while+also+allowing+transfers+and+maintaining+an+accurate+count+of+the+locked+and+unl\u0026amp;theme=85e4b3fff2f024ad0ef7f562\u0026amp;signature=adfcafb57b3c9058cd42cefe35d04bd5d2d231debc5a23a9f0d8a10dde1f4b65\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"VestingToken - Unvest Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://unvest.mintlify.site/_mintlify/api/og/v2?division=Smart+Contracts\u0026amp;title=VestingToken\u0026amp;description=This+contract+stores+the+core+logic+for+locking+tokens+and+releasing+them%2C+while+also+allowing+transfers+and+maintaining+an+accurate+count+of+the+locked+and+unl\u0026amp;theme=85e4b3fff2f024ad0ef7f562\u0026amp;signature=adfcafb57b3c9058cd42cefe35d04bd5d2d231debc5a23a9f0d8a10dde1f4b65\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/unvest/R6MfBkCyoOMf64PL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Unvest Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#036FE3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.unvest.io/smart-contracts/vesting-token\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/smart-contracts/vesting-token.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.unvest.io/#organization\",\"name\":\"Unvest Docs\",\"url\":\"https://docs.unvest.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/unvest/ZPndW_DYd52BB9Sr/logo/light.svg?fit=max\u0026auto=format\u0026n=ZPndW_DYd52BB9Sr\u0026q=85\u0026s=17c0d67a7fc0fed10bbc4c532d7405a7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.unvest.io#website\",\"name\":\"Unvest Docs\",\"url\":\"https://docs.unvest.io\",\"publisher\":{\"@id\":\"https://docs.unvest.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.unvest.io/smart-contracts/vesting-token#webpage\",\"url\":\"https://docs.unvest.io/smart-contracts/vesting-token\",\"name\":\"VestingToken\",\"description\":\"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.\",\"dateModified\":\"2026-01-07T01:45:52.797Z\",\"isPartOf\":{\"@id\":\"https://docs.unvest.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.unvest.io/smart-contracts/vesting-token#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.unvest.io/smart-contracts/vesting-token#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Smart Contracts\",\"item\":\"https://docs.unvest.io/smart-contracts/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"VestingToken\",\"item\":\"https://docs.unvest.io/smart-contracts/vesting-token\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.unvest.io/smart-contracts/vesting-token#article\",\"headline\":\"VestingToken\",\"name\":\"VestingToken\",\"description\":\"This contract stores the core logic for locking tokens and releasing them, while also allowing transfers and maintaining an accurate count of the locked and unlocked tokens being transferred.\",\"url\":\"https://docs.unvest.io/smart-contracts/vesting-token\",\"mainEntityOfPage\":{\"@id\":\"https://docs.unvest.io/smart-contracts/vesting-token#webpage\"},\"dateModified\":\"2026-01-07T01:45:52.797Z\",\"publisher\":{\"@id\":\"https://docs.unvest.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.unvest.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Unvest Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Unvest Docs","nav":{"global":{"anchors":[{"anchor":"Telegram","href":"https://t.me/unvest_io","icon":"telegram"},{"anchor":"Discord","href":"https://discord.gg/PQcnBkyW9w","icon":"discord"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/welcome"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials/vesting/create-and-deploy-a-vesting-schedule"}]},{"tab":"Protocol","groups":[{"group":"Smart Contracts","pages":[{"title":"Introduction","href":"/smart-contracts/introduction"},{"title":"VestingTokenFactory","description":null,"href":"/smart-contracts/vesting-token-factory"},{"title":"VestingToken","href":"/smart-contracts/vesting-token"},{"title":"Contract Addresses","description":"Addresses for each deployment. You can also view verified source code on the linked block explorer websites.","href":"/smart-contracts/contract-addresses"},{"title":"Subgraph","href":"/smart-contracts/subgraph"},{"title":"Integrating Vesting Tokens into your product or protocol","href":"/smart-contracts/integrating-vesting-tokens-into-your-product-or-protocol"},{"title":"Other contracts","href":"/smart-contracts/other-contracts"}]},{"group":"Technical","pages":[{"title":null,"href":"/smart-contracts/protocol/VestingTokenFactory.sol"},{"title":null,"href":"/smart-contracts/protocol/VestingToken.sol"},{"title":null,"href":"/smart-contracts/protocol/Disperse.sol"},{"group":"Abstracts","pages":[{"title":null,"href":"/smart-contracts/protocol/abstracts/FactoryFeeManager.sol"}]},{"group":"Interfaces","pages":[{"title":null,"href":"/smart-contracts/protocol/interfaces/IFactoryFeeManager.sol"},{"title":null,"href":"/smart-contracts/protocol/interfaces/IFeeManager.sol"},{"title":null,"href":"/smart-contracts/protocol/interfaces/IVestingToken.sol"}]},{"group":"Libraries","pages":[{"title":null,"href":"/smart-contracts/protocol/libraries/Arrays.sol"},{"title":null,"href":"/smart-contracts/protocol/libraries/Errors.sol"}]}]}]}]},"basePath":"","title":"VestingToken - Unvest Docs","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}