{
    "contractName": "Vesting",
    "abi": [
        {
            "constant": true,
            "inputs": [],
            "name": "colonyMultiSig",
            "outputs": [
                {
                    "name": "",
                    "type": "address"
                }
            ],
            "payable": false,
            "stateMutability": "view",
            "type": "function"
        },
        {
            "constant": true,
            "inputs": [
                {
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "tokenGrants",
            "outputs": [
                {
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "name": "amount",
                    "type": "uint128"
                },
                {
                    "name": "vestingDuration",
                    "type": "uint16"
                },
                {
                    "name": "vestingCliff",
                    "type": "uint16"
                },
                {
                    "name": "monthsClaimed",
                    "type": "uint16"
                },
                {
                    "name": "totalClaimed",
                    "type": "uint128"
                }
            ],
            "payable": false,
            "stateMutability": "view",
            "type": "function"
        },
        {
            "constant": true,
            "inputs": [],
            "name": "token",
            "outputs": [
                {
                    "name": "",
                    "type": "address"
                }
            ],
            "payable": false,
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "name": "_token",
                    "type": "address"
                },
                {
                    "name": "_colonyMultiSig",
                    "type": "address"
                }
            ],
            "payable": false,
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "name": "amount",
                    "type": "uint128"
                },
                {
                    "indexed": false,
                    "name": "vestingDuration",
                    "type": "uint16"
                },
                {
                    "indexed": false,
                    "name": "vestingCliff",
                    "type": "uint16"
                }
            ],
            "name": "GrantAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "name": "amountVested",
                    "type": "uint128"
                },
                {
                    "indexed": false,
                    "name": "amountNotVested",
                    "type": "uint128"
                }
            ],
            "name": "GrantRemoved",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "name": "amountClaimed",
                    "type": "uint128"
                }
            ],
            "name": "GrantTokensClaimed",
            "type": "event"
        },
        {
            "constant": false,
            "inputs": [
                {
                    "name": "_recipient",
                    "type": "address"
                },
                {
                    "name": "_startTime",
                    "type": "uint256"
                },
                {
                    "name": "_amount",
                    "type": "uint128"
                },
                {
                    "name": "_vestingDuration",
                    "type": "uint16"
                },
                {
                    "name": "_vestingCliff",
                    "type": "uint16"
                }
            ],
            "name": "addTokenGrant",
            "outputs": [],
            "payable": false,
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "constant": false,
            "inputs": [
                {
                    "name": "_recipient",
                    "type": "address"
                }
            ],
            "name": "removeTokenGrant",
            "outputs": [],
            "payable": false,
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "constant": false,
            "inputs": [],
            "name": "claimVestedTokens",
            "outputs": [],
            "payable": false,
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "constant": true,
            "inputs": [
                {
                    "name": "_recipient",
                    "type": "address"
                }
            ],
            "name": "calculateGrantClaim",
            "outputs": [
                {
                    "name": "",
                    "type": "uint16"
                },
                {
                    "name": "",
                    "type": "uint128"
                }
            ],
            "payable": false,
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "devdoc": {
        "methods": {
            "addTokenGrant(address,uint256,uint128,uint16,uint16)": {
                "params": {
                    "_amount": "Total number of tokens in grant",
                    "_recipient": "Address of the token grant recipient entitled to claim the grant funds",
                    "_startTime": "Grant start time as seconds since unix epoch Allows backdating grants by passing time in the past. If `0` is passed here current blocktime is used. ",
                    "_vestingCliff": "Number of months of the grant's vesting cliff",
                    "_vestingDuration": "Number of months of the grant's duration"
                }
            },
            "removeTokenGrant(address)": {
                "params": {
                    "_recipient": "Address of the token grant recipient"
                }
            }
        }
    },
    "userdoc": {
        "methods": {
            "addTokenGrant(address,uint256,uint128,uint16,uint16)": {
                "notice": "Add a new token grant for user `_recipient`. Only one grant per user is allowed The amount of CLNY tokens here need to be preapproved for transfer by this `Vesting` contract before this call Secured to the Colony MultiSig only"
            },
            "calculateGrantClaim(address)": {
                "notice": "Calculate the vested and unclaimed months and tokens available for `_recepient` to claim Due to rounding errors once grant duration is reached, returns the entire left grant amount Returns (0, 0) if cliff has not been reached"
            },
            "claimVestedTokens()": {
                "notice": "Allows a grant recipient to claim their vested tokens. Errors if no tokens have vested It is advised recipients check they are entitled to claim via `calculateGrantClaim` before calling this"
            },
            "removeTokenGrant(address)": {
                "notice": "Terminate token grant transferring all vested tokens to the `_recipient` and returning all non-vested tokens to the Colony MultiSig Secured to the Colony MultiSig only"
            }
        }
    }
}