build/contracts/VestingTrustee.json
{
"contractName": "VestingTrustee",
"abi": [
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
}
],
"name": "grants",
"outputs": [
{
"name": "value",
"type": "uint256"
},
{
"name": "start",
"type": "uint256"
},
{
"name": "cliff",
"type": "uint256"
},
{
"name": "end",
"type": "uint256"
},
{
"name": "transferred",
"type": "uint256"
},
{
"name": "revokable",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"name": "token",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"constant": false,
"inputs": [
{
"name": "to",
"type": "address"
},
{
"name": "value",
"type": "uint256"
},
{
"name": "start",
"type": "uint256"
},
{
"name": "cliff",
"type": "uint256"
},
{
"name": "end",
"type": "uint256"
},
{
"name": "revokable",
"type": "bool"
}
],
"name": "createGrant",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "holder",
"type": "address"
}
],
"name": "revokeGrant",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "claimTokens",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "holder",
"type": "address"
},
{
"name": "time",
"type": "uint256"
}
],
"name": "claimableTokens",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "token",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalVesting",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b506040516020806116748339810180604052602081101561003057600080fd5b8101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156101a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f746f6b656e2063616e6e6f74206265207a65726f20616464726573730000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611481806101f36000396000f3fe6080604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631817c5a7146100b457806348c54b9d14610105578063715018a61461011c5780637c17357d146101335780638da5cb5b1461015e5780638f32d59b146101b5578063b869cea3146101e4578063f2fde38b14610270578063f53215c3146102c1578063fbd05ce514610330578063fc0c546a146103b5575b600080fd5b3480156100c057600080fd5b50610103600480360360208110156100d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061040c565b005b34801561011157600080fd5b5061011a6106f4565b005b34801561012857600080fd5b50610131610a06565b005b34801561013f57600080fd5b50610148610ad8565b6040518082815260200191505060405180910390f35b34801561016a57600080fd5b50610173610ae2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101c157600080fd5b506101ca610b0b565b604051808215151515815260200191505060405180910390f35b3480156101f057600080fd5b506102336004803603602081101561020757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b62565b6040518087815260200186815260200185815260200184815260200183815260200182151515158152602001965050505050505060405180910390f35b34801561027c57600080fd5b506102bf6004803603602081101561029357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bab565b005b3480156102cd57600080fd5b5061031a600480360360408110156102e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bca565b6040518082815260200191505060405180910390f35b34801561033c57600080fd5b506103b3600480360360c081101561035357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190505050610c92565b005b3480156103c157600080fd5b506103ca6111f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610414610b0b565b151561041f57600080fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060050160009054906101000a900460ff1615156104e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6772616e74206d757374206265207265766f6b61626c6500000000000000000081525060200191505060405180910390fd5b60006105058260040154836000015461121e90919063ffffffff16565b905061051c8160035461121e90919063ffffffff16565b600381905550600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905560048201600090556005820160006101000a81549060ff02191690555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050506040513d602081101561068f57600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff167f740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f826040518082815260200191505060405180910390a2505050565b60006107003342610bca565b90506000811415151561077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e6f20746f6b656e7320636c61696d61626c652063757272656e746c7900000081525060200191505060405180910390fd5b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006107d782600401548461121e90919063ffffffff16565b905060008114151515610878576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f636c61696d61626c6520616d6f756e7420616c7265616479207472616e73666581526020017f727265640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61088f81836004015461124090919063ffffffff16565b82600401819055506108ac8160035461121e90919063ffffffff16565b600381905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b505050506040513d60208110156109a157600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167f2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0826040518082815260200191505060405180910390a2505050565b610a0e610b0b565b1515610a1957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600354905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16905086565b610bb3610b0b565b1515610bbe57600080fd5b610bc781611261565b50565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541415610c25576000915050610c8c565b610c888160c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1615151515815250508461135b565b9150505b92915050565b610c9a610b0b565b1515610ca557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515610d4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f2063616e6e6f74206265207a65726f20616464726573730000000000000081525060200191505060405180910390fd5b600085111515610dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f76616c7565206d7573742062652061626f76652030000000000000000000000081525060200191505060405180910390fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515610e7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c79206f6e65206772616e7420706572206164647265737300000000000081525060200191505060405180910390fd5b828411158015610e8c5750818311155b1515610f00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f76657374696e67206461746573206d75737420626520636f6e73697374656e7481525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fbb57600080fd5b505afa158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b810190808051906020019092919050505061100b8660035461124090919063ffffffff16565b111515156110a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f6772616e742063616e6e6f742065786365656420746f74616c20616d6f756e7481526020017f206f6620746f6b656e7320617661696c61626c6500000000000000000000000081525060400191505060405180910390fd5b60c06040519081016040528086815260200185815260200184815260200183815260200160008152602001821515815250600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff0219169083151502179055509050506111818560035461124090919063ffffffff16565b6003819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c876040518082815260200191505060405180910390a3505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082821115151561122f57600080fd5b600082840390508091505092915050565b600080828401905083811015151561125757600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561129d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000826040015182101561137257600090506113e7565b82606001518210151561138b57826000015190506113e7565b6113e46113a98460200151856060015161121e90919063ffffffff16565b6113d66113c386602001518661121e90919063ffffffff16565b86600001516113ed90919063ffffffff16565b61142b90919063ffffffff16565b90505b92915050565b6000808314156114005760009050611425565b6000828402905082848281151561141357fe5b0414151561142057600080fd5b809150505b92915050565b6000808211151561143b57600080fd5b6000828481151561144857fe5b049050809150509291505056fea165627a7a7230582007ce60fca41119bc8c532745d97090f04d9fa9b43b16a7beac7db3cc74a55ebc0029",
"deployedBytecode": "0x6080604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631817c5a7146100b457806348c54b9d14610105578063715018a61461011c5780637c17357d146101335780638da5cb5b1461015e5780638f32d59b146101b5578063b869cea3146101e4578063f2fde38b14610270578063f53215c3146102c1578063fbd05ce514610330578063fc0c546a146103b5575b600080fd5b3480156100c057600080fd5b50610103600480360360208110156100d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061040c565b005b34801561011157600080fd5b5061011a6106f4565b005b34801561012857600080fd5b50610131610a06565b005b34801561013f57600080fd5b50610148610ad8565b6040518082815260200191505060405180910390f35b34801561016a57600080fd5b50610173610ae2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101c157600080fd5b506101ca610b0b565b604051808215151515815260200191505060405180910390f35b3480156101f057600080fd5b506102336004803603602081101561020757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b62565b6040518087815260200186815260200185815260200184815260200183815260200182151515158152602001965050505050505060405180910390f35b34801561027c57600080fd5b506102bf6004803603602081101561029357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bab565b005b3480156102cd57600080fd5b5061031a600480360360408110156102e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bca565b6040518082815260200191505060405180910390f35b34801561033c57600080fd5b506103b3600480360360c081101561035357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190505050610c92565b005b3480156103c157600080fd5b506103ca6111f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610414610b0b565b151561041f57600080fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060050160009054906101000a900460ff1615156104e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6772616e74206d757374206265207265766f6b61626c6500000000000000000081525060200191505060405180910390fd5b60006105058260040154836000015461121e90919063ffffffff16565b905061051c8160035461121e90919063ffffffff16565b600381905550600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905560048201600090556005820160006101000a81549060ff02191690555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050506040513d602081101561068f57600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff167f740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f826040518082815260200191505060405180910390a2505050565b60006107003342610bca565b90506000811415151561077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e6f20746f6b656e7320636c61696d61626c652063757272656e746c7900000081525060200191505060405180910390fd5b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006107d782600401548461121e90919063ffffffff16565b905060008114151515610878576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f636c61696d61626c6520616d6f756e7420616c7265616479207472616e73666581526020017f727265640000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61088f81836004015461124090919063ffffffff16565b82600401819055506108ac8160035461121e90919063ffffffff16565b600381905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561097757600080fd5b505af115801561098b573d6000803e3d6000fd5b505050506040513d60208110156109a157600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167f2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0826040518082815260200191505060405180910390a2505050565b610a0e610b0b565b1515610a1957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600354905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16905086565b610bb3610b0b565b1515610bbe57600080fd5b610bc781611261565b50565b600080600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541415610c25576000915050610c8c565b610c888160c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900460ff1615151515815250508461135b565b9150505b92915050565b610c9a610b0b565b1515610ca557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614151515610d4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f746f2063616e6e6f74206265207a65726f20616464726573730000000000000081525060200191505060405180910390fd5b600085111515610dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f76616c7565206d7573742062652061626f76652030000000000000000000000081525060200191505060405180910390fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515610e7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6f6e6c79206f6e65206772616e7420706572206164647265737300000000000081525060200191505060405180910390fd5b828411158015610e8c5750818311155b1515610f00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f76657374696e67206461746573206d75737420626520636f6e73697374656e7481525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fbb57600080fd5b505afa158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b810190808051906020019092919050505061100b8660035461124090919063ffffffff16565b111515156110a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f6772616e742063616e6e6f742065786365656420746f74616c20616d6f756e7481526020017f206f6620746f6b656e7320617661696c61626c6500000000000000000000000081525060400191505060405180910390fd5b60c06040519081016040528086815260200185815260200184815260200183815260200160008152602001821515815250600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff0219169083151502179055509050506111818560035461124090919063ffffffff16565b6003819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c876040518082815260200191505060405180910390a3505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600082821115151561122f57600080fd5b600082840390508091505092915050565b600080828401905083811015151561125757600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561129d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000826040015182101561137257600090506113e7565b82606001518210151561138b57826000015190506113e7565b6113e46113a98460200151856060015161121e90919063ffffffff16565b6113d66113c386602001518661121e90919063ffffffff16565b86600001516113ed90919063ffffffff16565b61142b90919063ffffffff16565b90505b92915050565b6000808314156114005760009050611425565b6000828402905082848281151561141357fe5b0414151561142057600080fd5b809150505b92915050565b6000808211151561143b57600080fd5b6000828481151561144857fe5b049050809150509291505056fea165627a7a7230582007ce60fca41119bc8c532745d97090f04d9fa9b43b16a7beac7db3cc74a55ebc0029",
"sourceMap": "489:7871:4:-;;;1516:170;8:9:-1;5:2;;;30:1;27;20:12;5:2;1516:170:4;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1516:170:4;;;;;;;;;;;;;;;;524:10:20;515:6;;:19;;;;;;;;;;;;;;;;;;582:6;;;;;;;;;;;549:40;;578:1;549:40;;;;;;;;;;;;1619:1:4;1593:28;;1601:5;1593:28;;;;1585:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1674:5;1665:6;;:14;;;;;;;;;;;;;;;;;;1516:170;489:7871;;;;;;",
"deployedSourceMap": "489:7871:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:506;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3699:506:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3699:506:4;;;;;;;;;;;;;;;;;;;;;;4368:967;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4368:967:4;;;;;;1347:137:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1347:137:20;;;;;;6490:119:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6490:119:4;;;;;;;;;;;;;;;;;;;;;;;659:77:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;659:77:20;;;;;;;;;;;;;;;;;;;;;;;;;;;979:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;979:90:20;;;;;;;;;;;;;;;;;;;;;;;;;;;825:40:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;825:40:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;825:40:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1655:107:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1655:107:20;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1655:107:20;;;;;;;;;;;;;;;;;;;;;;5914:308:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5914:308:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5914:308:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2217:1273;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2217:1273:4;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2217:1273:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6293:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6293:114:4;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:506;863:9:20;:7;:9::i;:::-;855:18;;;;;;;;3797:19:4;3819:6;:14;3826:6;3819:14;;;;;;;;;;;;;;;3797:36;;3852:5;:15;;;;;;;;;;;;3844:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3906:14;3923:34;3939:5;:17;;;3923:5;:11;;;:15;;:34;;;;:::i;:::-;3906:51;;3983:25;4001:6;3983:13;;:17;;:25;;;;:::i;:::-;3967:13;:41;;;;4025:6;:14;4032:6;4025:14;;;;;;;;;;;;;;;;4018:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4119:6;;;;;;;;;;;:15;;;4135:10;4147:6;4119:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4119:35:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4119:35:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4119:35:4;;;;;;;;;;;;;;;;;4183:6;4170:28;;;4191:6;4170:28;;;;;;;;;;;;;;;;;;883:1:20;;3699:506:4;:::o;4368:967::-;4556:17;4576:44;4592:10;4604:15;4576;:44::i;:::-;4556:64;;4651:1;4638:9;:14;;4630:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4697:19;4719:6;:18;4726:10;4719:18;;;;;;;;;;;;;;;4697:40;;4969:20;4992:32;5006:5;:17;;;4992:9;:13;;:32;;;;:::i;:::-;4969:55;;5058:1;5042:12;:17;;5034:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5131:35;5153:12;5131:5;:17;;;:21;;:35;;;;:::i;:::-;5111:5;:17;;:55;;;;5192:31;5210:12;5192:13;;:17;;:31;;;;:::i;:::-;5176:13;:47;;;;5233:6;;;;;;;;;;;:15;;;5249:10;5261:12;5233:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5233:41:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5233:41:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5233:41:4;;;;;;;;;;;;;;;;;5303:10;5290:38;;;5315:12;5290:38;;;;;;;;;;;;;;;;;;4368:967;;;:::o;1347:137:20:-;863:9;:7;:9::i;:::-;855:18;;;;;;;;1445:1;1408:40;;1429:6;;;;;;;;;;;1408:40;;;;;;;;;;;;1475:1;1458:6;;:19;;;;;;;;;;;;;;;;;;1347:137::o;6490:119:4:-;6559:7;6589:13;;6582:20;;6490:119;:::o;659:77:20:-;697:7;723:6;;;;;;;;;;;716:13;;659:77;:::o;979:90::-;1019:4;1056:6;;;;;;;;;;;1042:20;;:10;:20;;;1035:27;;979:90;:::o;825:40:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1655:107:20:-;863:9;:7;:9::i;:::-;855:18;;;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;5914:308:4:-;6036:7;6059:19;6081:6;:14;6088:6;6081:14;;;;;;;;;;;;;;;6059:36;;6124:1;6109:5;:11;;;:16;6105:55;;;6148:1;6141:8;;;;;6105:55;6177:38;6203:5;6177:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6210:4;6177:25;:38::i;:::-;6170:45;;;5914:308;;;;;:::o;2217:1273::-;863:9:20;:7;:9::i;:::-;855:18;;;;;;;;2447:1:4;2433:16;;:2;:16;;;;2425:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2505:1;2497:5;:9;2489:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2647:1;2627:6;:10;2634:2;2627:10;;;;;;;;;;;;;;;:16;;;:21;2619:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2785:5;2776;:14;;:30;;;;;2803:3;2794:5;:12;;2776:30;2768:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2998:6;;;;;;;;;;;:16;;;3023:4;2998:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2998:31:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2998:31:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2998:31:4;;;;;;;;;;;;;;;;2970:24;2988:5;2970:13;;:17;;:24;;;;:::i;:::-;:59;;2962:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3141:179;;;;;;;;;3168:5;3141:179;;;;3194:5;3141:179;;;;3220:5;3141:179;;;;3244:3;3141:179;;;;3274:1;3141:179;;;;3300:9;3141:179;;;;;3128:6;:10;3135:2;3128:10;;;;;;;;;;;;;;;:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:24;3426:5;3408:13;;:17;;:24;;;;:::i;:::-;3392:13;:40;;;;3473:2;3448:35;;3461:10;3448:35;;;3477:5;3448:35;;;;;;;;;;;;;;;;;;2217:1273;;;;;;:::o;6293:114::-;6355:7;6393:6;;;;;;;;;;;6378:22;;6293:114;:::o;1205:145:19:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;;;1307:9;1323:1;1319;:5;1307:17;;1342:1;1335:8;;;1205:145;;;;:::o;1431:::-;1489:7;1508:9;1524:1;1520;:5;1508:17;;1548:1;1543;:6;;1535:15;;;;;;;;1568:1;1561:8;;;1431:145;;;;:::o;1906:183:20:-;1999:1;1979:22;;:8;:22;;;;1971:31;;;;;;;;2046:8;2017:38;;2038:6;;;;;;;;;;;2017:38;;;;;;;;;;;;2074:8;2065:6;;:17;;;;;;;;;;;;;;;;;;1906:183;:::o;7623:735:4:-;7760:7;7892:5;:11;;;7885:4;:18;7881:57;;;7926:1;7919:8;;;;7881:57;8046:5;:9;;;8038:4;:17;;8034:66;;;8078:5;:11;;;8071:18;;;;8034:66;8281:70;8324:26;8338:5;:11;;;8324:5;:9;;;:13;;:26;;;;:::i;:::-;8281:38;8297:21;8306:5;:11;;;8297:4;:8;;:21;;;;:::i;:::-;8281:5;:11;;;:15;;:38;;;;:::i;:::-;:42;;:70;;;;:::i;:::-;8274:77;;7623:735;;;;;:::o;229:421:19:-;287:7;532:1;527;:6;523:45;;;556:1;549:8;;;;523:45;578:9;594:1;590;:5;578:17;;622:1;617;613;:5;;;;;;;;:10;605:19;;;;;;;;642:1;635:8;;;229:421;;;;;:::o;778:296::-;836:7;933:1;929;:5;921:14;;;;;;;;945:9;961:1;957;:5;;;;;;;;945:17;;1066:1;1059:8;;;778:296;;;;:::o",
"source": "/** @title Hey Token Sale\n* @author Thomas Vanderstraeten - <thomas@hey.network>\n* Keep in mind that smart contracts still rely on experimental technology.\n*/\n\npragma solidity ^0.5.0;\n\nimport \"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\";\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n/** @title VestingTrustee\n * @dev Lends very heavily from SirinLab and Stox's own VestingTrustee contracts.\n */\ncontract VestingTrustee is Ownable {\n\n /* *** Libraries *** */\n using SafeMath for uint256;\n\n\n /* *** Data Structures *** */\n struct Grant {\n uint256 value;\n uint256 start;\n uint256 cliff;\n uint256 end;\n uint256 transferred;\n bool revokable;\n }\n\n\n /* *** Variables *** */\n mapping (address => Grant) public grants; // Grants by holder address\n IERC20 private _token; // The address of the ERC20 token to vest\n uint256 private _totalVesting; // Total tokens available for vesting\n\n\n /* *** Events *** */\n event GrantCreated(address indexed from, address indexed to, uint256 value);\n event GrantClaimed(address indexed holder, uint256 value);\n event GrantRevoked(address indexed holder, uint256 refund);\n\n\n /* *** Public Functions *** */\n\n /** @dev Constructor. Initializes the ERC20 token linked to the grants.\n * @param token IERC20 The address of the previously deployed ERC20 smart contract\n */\n constructor(\n IERC20 token\n )\n public\n {\n require(address(token) != address(0), \"token cannot be zero address\");\n\n _token = token;\n }\n\n /** @dev Grant tokens to a specified address.\n * @param to address The address to grant tokens to\n * @param value uint256 The amount of tokens to be granted\n * @param start uint256 The start of the vesting period in seconds since the Unix Epoch\n * @param cliff uint256 The date at which the cliff occurs in seconds since the Unix Epoch\n * @param end uint256 The end of the vesting period in seconds since the Unix Epoch\n * @param revokable bool Whether the grant is revokable or not\n */\n function createGrant(\n address to,\n uint256 value,\n uint256 start,\n uint256 cliff,\n uint256 end,\n bool revokable\n )\n public\n onlyOwner\n {\n require(to != address(0), \"to cannot be zero address\");\n require(value > 0, \"value must be above 0\");\n\n // Check that no grant has previously been assigned to this address\n require(grants[to].value == 0, \"only one grant per address\");\n\n // Check for date inconsistencies that may cause unexpected behavior.\n require(start <= cliff && cliff <= end, \"vesting dates must be consistent\");\n\n // Check that this grant doesn't exceed the total amount of tokens currently available for vesting.\n require(_totalVesting.add(value) <= _token.balanceOf(address(this)), \"grant cannot exceed total amount of tokens available\");\n\n // Assign a new grant.\n grants[to] = Grant({\n value: value,\n start: start,\n cliff: cliff,\n end: end,\n transferred: 0,\n revokable: revokable\n });\n\n // Tokens granted, increase the total amount vested.\n _totalVesting = _totalVesting.add(value);\n\n emit GrantCreated(msg.sender, to, value);\n }\n\n /** @dev Revoke the grant of tokens of a specifed address and returns tokens\n * to the grant contract owner.\n * @param holder address The address which will have its grant revoked.\n */\n function revokeGrant(\n address holder\n )\n public\n onlyOwner\n {\n Grant storage grant = grants[holder];\n\n require(grant.revokable, \"grant must be revokable\");\n\n uint256 refund = grant.value.sub(grant.transferred);\n _totalVesting = _totalVesting.sub(refund);\n delete grants[holder];\n\n // Send the revoked grant tokens back to the contract owner.\n _token.transfer(msg.sender, refund);\n\n emit GrantRevoked(holder, refund);\n }\n\n /** @dev Claim vested tokens and transfer them to their holder. Note that\n * this function has to be called by the grant holder themselves.\n */\n function claimTokens()\n public\n {\n // Get the total amount of claimable tokens, acccording to grant.\n // solium-disable-next-line security/no-block-members\n uint256 claimable = claimableTokens(msg.sender, block.timestamp);\n require(claimable != 0, \"no tokens claimable currently\");\n\n Grant storage grant = grants[msg.sender];\n\n // Make sure the holder doesn't transfer more than what he already has.\n // Note that claimable will always be greater than or equal to\n // transferred by definition, so this is just an extra check.\n uint256 transferable = claimable.sub(grant.transferred);\n require(transferable != 0, \"claimable amount already transferred\");\n\n grant.transferred = grant.transferred.add(transferable);\n _totalVesting = _totalVesting.sub(transferable);\n _token.transfer(msg.sender, transferable);\n\n emit GrantClaimed(msg.sender, transferable);\n }\n\n /** @dev Calculate the total amount of tokens that a holder can claim at a\n * given time, from the total amount vested for this holder. This function\n * does the precheck of making sure that there is actually a grant for this\n * owner, before delegating to the private _calculateClaimableTokens()\n * function to derive the claimable amount at the given time.\n * @param holder address The address of the holder\n * @param time uint256 The specific time\n * @return a uint256 representing a holder's total amount of vested tokens\n */\n function claimableTokens(\n address holder,\n uint256 time\n )\n public\n view\n returns (uint256)\n {\n Grant storage grant = grants[holder];\n if (grant.value == 0) {\n return 0;\n }\n\n return _calculateClaimableTokens(grant, time);\n }\n\n /**\n * @return The address of the vested token\n */\n function token()\n public\n view\n returns (address)\n {\n return address(_token);\n }\n\n /**\n * @return The total amount of tokens currently vested\n */\n function totalVesting()\n public\n view\n returns (uint256)\n {\n return _totalVesting;\n }\n\n\n /* *** Private Functions *** */\n\n /** @dev Calculate amount of vested tokens at a given time for a given grant.\n * Note that this function does not take into account any previously claimed\n * tokens - it is the responsibility of the caller function to ensure that\n * the grant holder does not claim the same value multiple times.\n * @param grant Grant The vesting grant\n * @param time uint256 The time to be checked\n * @return An uint256 representing the amount of claimable tokens\n *\n * | ____________ total value\n * | _/\n * | _/\n * | _/\n * | _/\n * | /\n * | .|\n * | . |\n * | . |\n * | . |\n * | . |\n * | . |\n * +===+===========+---------+----------> time\n * Start Cliff End\n */\n function _calculateClaimableTokens(\n Grant memory grant,\n uint256 time\n )\n private\n pure\n returns (uint256)\n {\n // If we're before the cliff, then everything is still vested and nothing can be claimed.\n if (time < grant.cliff) {\n return 0;\n }\n\n // If we're after the end of the vesting period, the full value is claimable;\n if (time >= grant.end) {\n return grant.value;\n }\n\n // If we're between the cliff and the end time, interpolate linearly using\n // the formula: claimableTokens = total * (time - start) / (end - start)\n return grant.value.mul(time.sub(grant.start)).div(grant.end.sub(grant.start));\n }\n}\n",
"sourcePath": "/Users/thomasvanderstraeten/code/hey/mainchain/contracts/VestingTrustee.sol",
"ast": {
"absolutePath": "/Users/thomasvanderstraeten/code/hey/mainchain/contracts/VestingTrustee.sol",
"exportedSymbols": {
"VestingTrustee": [
862
]
},
"id": 863,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 475,
"literals": [
"solidity",
"^",
"0.5",
".0"
],
"nodeType": "PragmaDirective",
"src": "162:23:4"
},
{
"absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
"file": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
"id": 476,
"nodeType": "ImportDirective",
"scope": 863,
"sourceUnit": 3215,
"src": "187:64:4",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
"file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
"id": 477,
"nodeType": "ImportDirective",
"scope": 863,
"sourceUnit": 2656,
"src": "252:63:4",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
"file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
"id": 478,
"nodeType": "ImportDirective",
"scope": 863,
"sourceUnit": 2547,
"src": "316:59:4",
"symbolAliases": [],
"unitAlias": ""
},
{
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 479,
"name": "Ownable",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 2655,
"src": "516:7:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Ownable_$2655",
"typeString": "contract Ownable"
}
},
"id": 480,
"nodeType": "InheritanceSpecifier",
"src": "516:7:4"
}
],
"contractDependencies": [
2655
],
"contractKind": "contract",
"documentation": "@title VestingTrustee\n@dev Lends very heavily from SirinLab and Stox's own VestingTrustee contracts.",
"fullyImplemented": true,
"id": 862,
"linearizedBaseContracts": [
862,
2655
],
"name": "VestingTrustee",
"nodeType": "ContractDefinition",
"nodes": [
{
"id": 483,
"libraryName": {
"contractScope": null,
"id": 481,
"name": "SafeMath",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 2546,
"src": "565:8:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_SafeMath_$2546",
"typeString": "library SafeMath"
}
},
"nodeType": "UsingForDirective",
"src": "559:27:4",
"typeName": {
"id": 482,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "578:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"canonicalName": "VestingTrustee.Grant",
"id": 496,
"members": [
{
"constant": false,
"id": 485,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "650:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 484,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "650:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 487,
"name": "start",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "673:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 486,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "673:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 489,
"name": "cliff",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "696:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 488,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "696:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 491,
"name": "end",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "719:11:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 490,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "719:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 493,
"name": "transferred",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "740:19:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 492,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "740:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 495,
"name": "revokable",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "769:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 494,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "769:4:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"name": "Grant",
"nodeType": "StructDefinition",
"scope": 862,
"src": "627:163:4",
"visibility": "public"
},
{
"constant": false,
"id": 500,
"name": "grants",
"nodeType": "VariableDeclaration",
"scope": 862,
"src": "825:40:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant)"
},
"typeName": {
"id": 499,
"keyType": {
"id": 497,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "834:7:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "825:26:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant)"
},
"valueType": {
"contractScope": null,
"id": 498,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "845:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"id": 502,
"name": "_token",
"nodeType": "VariableDeclaration",
"scope": 862,
"src": "899:21:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
},
"typeName": {
"contractScope": null,
"id": 501,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 3214,
"src": "899:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 504,
"name": "_totalVesting",
"nodeType": "VariableDeclaration",
"scope": 862,
"src": "987:29:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 503,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "987:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "private"
},
{
"anonymous": false,
"documentation": null,
"id": 512,
"name": "GrantCreated",
"nodeType": "EventDefinition",
"parameters": {
"id": 511,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 506,
"indexed": true,
"name": "from",
"nodeType": "VariableDeclaration",
"scope": 512,
"src": "1117:20:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 505,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1117:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 508,
"indexed": true,
"name": "to",
"nodeType": "VariableDeclaration",
"scope": 512,
"src": "1139:18:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 507,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1139:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 510,
"indexed": false,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 512,
"src": "1159:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 509,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1159:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1116:57:4"
},
"src": "1098:76:4"
},
{
"anonymous": false,
"documentation": null,
"id": 518,
"name": "GrantClaimed",
"nodeType": "EventDefinition",
"parameters": {
"id": 517,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 514,
"indexed": true,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 518,
"src": "1198:22:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 513,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1198:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 516,
"indexed": false,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 518,
"src": "1222:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 515,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1222:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1197:39:4"
},
"src": "1179:58:4"
},
{
"anonymous": false,
"documentation": null,
"id": 524,
"name": "GrantRevoked",
"nodeType": "EventDefinition",
"parameters": {
"id": 523,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 520,
"indexed": true,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 524,
"src": "1261:22:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 519,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1261:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 522,
"indexed": false,
"name": "refund",
"nodeType": "VariableDeclaration",
"scope": 524,
"src": "1285:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 521,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1285:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1260:40:4"
},
"src": "1242:59:4"
},
{
"body": {
"id": 544,
"nodeType": "Block",
"src": "1575:111:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 536,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 531,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 526,
"src": "1601:5:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
],
"id": 530,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1593:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 532,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1593:14:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 534,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1619:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 533,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1611:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 535,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1611:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "1593:28:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "746f6b656e2063616e6e6f74206265207a65726f2061646472657373",
"id": 537,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1623:30:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_78447af7d226b72aaaf03dd000a6faa0d044a521f2c2503edf33dd462ad561f3",
"typeString": "literal_string \"token cannot be zero address\""
},
"value": "token cannot be zero address"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_78447af7d226b72aaaf03dd000a6faa0d044a521f2c2503edf33dd462ad561f3",
"typeString": "literal_string \"token cannot be zero address\""
}
],
"id": 529,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "1585:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 538,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1585:69:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 539,
"nodeType": "ExpressionStatement",
"src": "1585:69:4"
},
{
"expression": {
"argumentTypes": null,
"id": 542,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 540,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "1665:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 541,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 526,
"src": "1674:5:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"src": "1665:14:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 543,
"nodeType": "ExpressionStatement",
"src": "1665:14:4"
}
]
},
"documentation": "@dev Constructor. Initializes the ERC20 token linked to the grants.\n @param token IERC20 The address of the previously deployed ERC20 smart contract",
"id": 545,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 527,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 526,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 545,
"src": "1537:12:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
},
"typeName": {
"contractScope": null,
"id": 525,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 3214,
"src": "1537:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1527:28:4"
},
"returnParameters": {
"id": 528,
"nodeType": "ParameterList",
"parameters": [],
"src": "1575:0:4"
},
"scope": 862,
"src": "1516:170:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 641,
"nodeType": "Block",
"src": "2415:1075:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 567,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 563,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "2433:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 565,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2447:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 564,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2439:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 566,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2439:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "2433:16:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "746f2063616e6e6f74206265207a65726f2061646472657373",
"id": 568,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2451:27:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_68fbdc27556ce8c765f4eaa1b339606086088a233ebf44019715866c27d14936",
"typeString": "literal_string \"to cannot be zero address\""
},
"value": "to cannot be zero address"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_68fbdc27556ce8c765f4eaa1b339606086088a233ebf44019715866c27d14936",
"typeString": "literal_string \"to cannot be zero address\""
}
],
"id": 562,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2425:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 569,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2425:54:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 570,
"nodeType": "ExpressionStatement",
"src": "2425:54:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 574,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 572,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "2497:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 573,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2505:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "2497:9:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "76616c7565206d7573742062652061626f76652030",
"id": 575,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2508:23:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_779416dd6e4b18f49d0eee4e3fee49cd12c5710dc127d93bb2864d748aa98efc",
"typeString": "literal_string \"value must be above 0\""
},
"value": "value must be above 0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_779416dd6e4b18f49d0eee4e3fee49cd12c5710dc127d93bb2864d748aa98efc",
"typeString": "literal_string \"value must be above 0\""
}
],
"id": 571,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2489:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 576,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2489:43:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 577,
"nodeType": "ExpressionStatement",
"src": "2489:43:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 584,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 579,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "2627:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 581,
"indexExpression": {
"argumentTypes": null,
"id": 580,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "2634:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "2627:10:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"id": 582,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "2627:16:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 583,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2647:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "2627:21:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6f6e6c79206f6e65206772616e74207065722061646472657373",
"id": 585,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2650:28:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_720ead85d27ff647821f9761e732c63013c0ab291035c0dec678383e14bf523d",
"typeString": "literal_string \"only one grant per address\""
},
"value": "only one grant per address"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_720ead85d27ff647821f9761e732c63013c0ab291035c0dec678383e14bf523d",
"typeString": "literal_string \"only one grant per address\""
}
],
"id": 578,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2619:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 586,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2619:60:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 587,
"nodeType": "ExpressionStatement",
"src": "2619:60:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 595,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 591,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 589,
"name": "start",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 551,
"src": "2776:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 590,
"name": "cliff",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 553,
"src": "2785:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2776:14:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 594,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 592,
"name": "cliff",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 553,
"src": "2794:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 593,
"name": "end",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 555,
"src": "2803:3:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2794:12:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "2776:30:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "76657374696e67206461746573206d75737420626520636f6e73697374656e74",
"id": 596,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2808:34:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_fddf95001eac8aeb7871a7941093f25ac0a544b639b29a8f456a75e1c88e44a2",
"typeString": "literal_string \"vesting dates must be consistent\""
},
"value": "vesting dates must be consistent"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_fddf95001eac8aeb7871a7941093f25ac0a544b639b29a8f456a75e1c88e44a2",
"typeString": "literal_string \"vesting dates must be consistent\""
}
],
"id": 588,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2768:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 597,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2768:75:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 598,
"nodeType": "ExpressionStatement",
"src": "2768:75:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 610,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 602,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "2988:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 600,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "2970:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 601,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 2525,
"src": "2970:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 603,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2970:24:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 607,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3465,
"src": "3023:4:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_VestingTrustee_$862",
"typeString": "contract VestingTrustee"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_VestingTrustee_$862",
"typeString": "contract VestingTrustee"
}
],
"id": 606,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3015:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 608,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3015:13:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 604,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "2998:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 605,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balanceOf",
"nodeType": "MemberAccess",
"referencedDeclaration": 3188,
"src": "2998:16:4",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view external returns (uint256)"
}
},
"id": 609,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2998:31:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2970:59:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6772616e742063616e6e6f742065786365656420746f74616c20616d6f756e74206f6620746f6b656e7320617661696c61626c65",
"id": 611,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3031:54:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_e1320aa96b98997101853e785b5d30dc81f76c894a615639b494619781c85730",
"typeString": "literal_string \"grant cannot exceed total amount of tokens available\""
},
"value": "grant cannot exceed total amount of tokens available"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_e1320aa96b98997101853e785b5d30dc81f76c894a615639b494619781c85730",
"typeString": "literal_string \"grant cannot exceed total amount of tokens available\""
}
],
"id": 599,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2962:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 612,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2962:124:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 613,
"nodeType": "ExpressionStatement",
"src": "2962:124:4"
},
{
"expression": {
"argumentTypes": null,
"id": 625,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 614,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "3128:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 616,
"indexExpression": {
"argumentTypes": null,
"id": 615,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "3135:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "3128:10:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 618,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "3168:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 619,
"name": "start",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 551,
"src": "3194:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 620,
"name": "cliff",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 553,
"src": "3220:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 621,
"name": "end",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 555,
"src": "3244:3:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 622,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3274:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
{
"argumentTypes": null,
"id": 623,
"name": "revokable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 557,
"src": "3300:9:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": null,
"id": 617,
"name": "Grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 496,
"src": "3141:5:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_struct$_Grant_$496_storage_ptr_$",
"typeString": "type(struct VestingTrustee.Grant storage pointer)"
}
},
"id": 624,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "structConstructorCall",
"lValueRequested": false,
"names": [
"value",
"start",
"cliff",
"end",
"transferred",
"revokable"
],
"nodeType": "FunctionCall",
"src": "3141:179:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"src": "3128:192:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"id": 626,
"nodeType": "ExpressionStatement",
"src": "3128:192:4"
},
{
"expression": {
"argumentTypes": null,
"id": 632,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 627,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3392:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 630,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "3426:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 628,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3408:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 629,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 2525,
"src": "3408:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 631,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3408:24:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3392:40:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 633,
"nodeType": "ExpressionStatement",
"src": "3392:40:4"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 635,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "3461:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 636,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3461:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 637,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "3473:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 638,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "3477:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 634,
"name": "GrantCreated",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 512,
"src": "3448:12:4",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 639,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3448:35:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 640,
"nodeType": "EmitStatement",
"src": "3443:40:4"
}
]
},
"documentation": "@dev Grant tokens to a specified address.\n @param to address The address to grant tokens to\n @param value uint256 The amount of tokens to be granted\n @param start uint256 The start of the vesting period in seconds since the Unix Epoch\n @param cliff uint256 The date at which the cliff occurs in seconds since the Unix Epoch\n @param end uint256 The end of the vesting period in seconds since the Unix Epoch\n @param revokable bool Whether the grant is revokable or not",
"id": 642,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 560,
"modifierName": {
"argumentTypes": null,
"id": 559,
"name": "onlyOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2589,
"src": "2401:9:4",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "2401:9:4"
}
],
"name": "createGrant",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 558,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 547,
"name": "to",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2247:10:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 546,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2247:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 549,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2267:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 548,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2267:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 551,
"name": "start",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2290:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 550,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2290:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 553,
"name": "cliff",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2313:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 552,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2313:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 555,
"name": "end",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2336:11:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 554,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2336:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 557,
"name": "revokable",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2357:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 556,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2357:4:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2237:140:4"
},
"returnParameters": {
"id": 561,
"nodeType": "ParameterList",
"parameters": [],
"src": "2415:0:4"
},
"scope": 862,
"src": "2217:1273:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 695,
"nodeType": "Block",
"src": "3787:418:4",
"statements": [
{
"assignments": [
650
],
"declarations": [
{
"constant": false,
"id": 650,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 695,
"src": "3797:19:4",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 649,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "3797:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 654,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 651,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "3819:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 653,
"indexExpression": {
"argumentTypes": null,
"id": 652,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 644,
"src": "3826:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3819:14:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3797:36:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 656,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 650,
"src": "3852:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 657,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "revokable",
"nodeType": "MemberAccess",
"referencedDeclaration": 495,
"src": "3852:15:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6772616e74206d757374206265207265766f6b61626c65",
"id": 658,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3869:25:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_bc1ca1313d04b2b1ab7fef4c641f0abd9d99c8fe5f1179a9cc8d02b6c8960e1a",
"typeString": "literal_string \"grant must be revokable\""
},
"value": "grant must be revokable"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_bc1ca1313d04b2b1ab7fef4c641f0abd9d99c8fe5f1179a9cc8d02b6c8960e1a",
"typeString": "literal_string \"grant must be revokable\""
}
],
"id": 655,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "3844:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 659,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3844:51:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 660,
"nodeType": "ExpressionStatement",
"src": "3844:51:4"
},
{
"assignments": [
662
],
"declarations": [
{
"constant": false,
"id": 662,
"name": "refund",
"nodeType": "VariableDeclaration",
"scope": 695,
"src": "3906:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 661,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3906:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 669,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 666,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 650,
"src": "3939:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 667,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "3939:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 663,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 650,
"src": "3923:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 664,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "3923:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 665,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "3923:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 668,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3923:34:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3906:51:4"
},
{
"expression": {
"argumentTypes": null,
"id": 675,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 670,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3967:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 673,
"name": "refund",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 662,
"src": "4001:6:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 671,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3983:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 672,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "3983:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 674,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3983:25:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3967:41:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 676,
"nodeType": "ExpressionStatement",
"src": "3967:41:4"
},
{
"expression": {
"argumentTypes": null,
"id": 680,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "delete",
"prefix": true,
"src": "4018:21:4",
"subExpression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 677,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "4025:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 679,
"indexExpression": {
"argumentTypes": null,
"id": 678,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 644,
"src": "4032:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "4025:14:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 681,
"nodeType": "ExpressionStatement",
"src": "4018:21:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 685,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "4135:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 686,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4135:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 687,
"name": "refund",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 662,
"src": "4147:6:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 682,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "4119:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 684,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transfer",
"nodeType": "MemberAccess",
"referencedDeclaration": 3156,
"src": "4119:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
"typeString": "function (address,uint256) external returns (bool)"
}
},
"id": 688,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4119:35:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 689,
"nodeType": "ExpressionStatement",
"src": "4119:35:4"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 691,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 644,
"src": "4183:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 692,
"name": "refund",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 662,
"src": "4191:6:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 690,
"name": "GrantRevoked",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 524,
"src": "4170:12:4",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 693,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4170:28:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 694,
"nodeType": "EmitStatement",
"src": "4165:33:4"
}
]
},
"documentation": "@dev Revoke the grant of tokens of a specifed address and returns tokens\n to the grant contract owner.\n @param holder address The address which will have its grant revoked.",
"id": 696,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 647,
"modifierName": {
"argumentTypes": null,
"id": 646,
"name": "onlyOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2589,
"src": "3773:9:4",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "3773:9:4"
}
],
"name": "revokeGrant",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 645,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 644,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 696,
"src": "3729:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 643,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3729:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3719:30:4"
},
"returnParameters": {
"id": 648,
"nodeType": "ParameterList",
"parameters": [],
"src": "3787:0:4"
},
"scope": 862,
"src": "3699:506:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 768,
"nodeType": "Block",
"src": "4410:925:4",
"statements": [
{
"assignments": [
700
],
"declarations": [
{
"constant": false,
"id": 700,
"name": "claimable",
"nodeType": "VariableDeclaration",
"scope": 768,
"src": "4556:17:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 699,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4556:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 707,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 702,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "4592:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 703,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4592:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 704,
"name": "block",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3394,
"src": "4604:5:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_block",
"typeString": "block"
}
},
"id": 705,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "timestamp",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4604:15:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 701,
"name": "claimableTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 798,
"src": "4576:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (address,uint256) view returns (uint256)"
}
},
"id": 706,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4576:44:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4556:64:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 711,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 709,
"name": "claimable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 700,
"src": "4638:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 710,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4651:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "4638:14:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6e6f20746f6b656e7320636c61696d61626c652063757272656e746c79",
"id": 712,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4654:31:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_9b493e56a6c6560f76f84639ce4f6b5db255fe8e4a81f1200ea18314ed918897",
"typeString": "literal_string \"no tokens claimable currently\""
},
"value": "no tokens claimable currently"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_9b493e56a6c6560f76f84639ce4f6b5db255fe8e4a81f1200ea18314ed918897",
"typeString": "literal_string \"no tokens claimable currently\""
}
],
"id": 708,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "4630:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 713,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4630:56:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 714,
"nodeType": "ExpressionStatement",
"src": "4630:56:4"
},
{
"assignments": [
716
],
"declarations": [
{
"constant": false,
"id": 716,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 768,
"src": "4697:19:4",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 715,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "4697:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 721,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 717,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "4719:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 720,
"indexExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 718,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "4726:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 719,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4726:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4719:18:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4697:40:4"
},
{
"assignments": [
723
],
"declarations": [
{
"constant": false,
"id": 723,
"name": "transferable",
"nodeType": "VariableDeclaration",
"scope": 768,
"src": "4969:20:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 722,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4969:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 729,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 726,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 716,
"src": "5006:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 727,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "5006:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 724,
"name": "claimable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 700,
"src": "4992:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 725,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "4992:13:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 728,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4992:32:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4969:55:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 733,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 731,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5042:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 732,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5058:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "5042:17:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "636c61696d61626c6520616d6f756e7420616c7265616479207472616e73666572726564",
"id": 734,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5061:38:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_cf98fc057f5734d3f8f5559dee4e9d3e4e847a59ec581e76b25c76f104fcc5c6",
"typeString": "literal_string \"claimable amount already transferred\""
},
"value": "claimable amount already transferred"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_cf98fc057f5734d3f8f5559dee4e9d3e4e847a59ec581e76b25c76f104fcc5c6",
"typeString": "literal_string \"claimable amount already transferred\""
}
],
"id": 730,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "5034:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 735,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5034:66:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 736,
"nodeType": "ExpressionStatement",
"src": "5034:66:4"
},
{
"expression": {
"argumentTypes": null,
"id": 745,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 737,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 716,
"src": "5111:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 739,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "5111:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 743,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5153:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 740,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 716,
"src": "5131:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 741,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "5131:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 742,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 2525,
"src": "5131:21:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 744,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5131:35:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5111:55:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 746,
"nodeType": "ExpressionStatement",
"src": "5111:55:4"
},
{
"expression": {
"argumentTypes": null,
"id": 752,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 747,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "5176:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 750,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5210:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 748,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "5192:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 749,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "5192:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 751,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5192:31:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5176:47:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 753,
"nodeType": "ExpressionStatement",
"src": "5176:47:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 757,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "5249:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 758,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5249:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 759,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5261:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 754,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "5233:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 756,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transfer",
"nodeType": "MemberAccess",
"referencedDeclaration": 3156,
"src": "5233:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
"typeString": "function (address,uint256) external returns (bool)"
}
},
"id": 760,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5233:41:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 761,
"nodeType": "ExpressionStatement",
"src": "5233:41:4"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 763,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "5303:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 764,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5303:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 765,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5315:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 762,
"name": "GrantClaimed",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 518,
"src": "5290:12:4",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 766,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5290:38:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 767,
"nodeType": "EmitStatement",
"src": "5285:43:4"
}
]
},
"documentation": "@dev Claim vested tokens and transfer them to their holder. Note that\n this function has to be called by the grant holder themselves.",
"id": 769,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "claimTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 697,
"nodeType": "ParameterList",
"parameters": [],
"src": "4388:2:4"
},
"returnParameters": {
"id": 698,
"nodeType": "ParameterList",
"parameters": [],
"src": "4410:0:4"
},
"scope": 862,
"src": "4368:967:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 797,
"nodeType": "Block",
"src": "6049:173:4",
"statements": [
{
"assignments": [
779
],
"declarations": [
{
"constant": false,
"id": 779,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 797,
"src": "6059:19:4",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 778,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "6059:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 783,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 780,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "6081:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 782,
"indexExpression": {
"argumentTypes": null,
"id": 781,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 771,
"src": "6088:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "6081:14:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "6059:36:4"
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 787,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 784,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 779,
"src": "6109:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 785,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "6109:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 786,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6124:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "6109:16:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 791,
"nodeType": "IfStatement",
"src": "6105:55:4",
"trueBody": {
"id": 790,
"nodeType": "Block",
"src": "6127:33:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "30",
"id": 788,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6148:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"functionReturnParameters": 777,
"id": 789,
"nodeType": "Return",
"src": "6141:8:4"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 793,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 779,
"src": "6203:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
{
"argumentTypes": null,
"id": 794,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 773,
"src": "6210:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 792,
"name": "_calculateClaimableTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 861,
"src": "6177:25:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_struct$_Grant_$496_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (struct VestingTrustee.Grant memory,uint256) pure returns (uint256)"
}
},
"id": 795,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6177:38:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 777,
"id": 796,
"nodeType": "Return",
"src": "6170:45:4"
}
]
},
"documentation": "@dev Calculate the total amount of tokens that a holder can claim at a\n given time, from the total amount vested for this holder. This function\n does the precheck of making sure that there is actually a grant for this\n owner, before delegating to the private _calculateClaimableTokens()\n function to derive the claimable amount at the given time.\n @param holder address The address of the holder\n @param time uint256 The specific time\n @return a uint256 representing a holder's total amount of vested tokens",
"id": 798,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "claimableTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 774,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 771,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 798,
"src": "5948:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 770,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5948:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 773,
"name": "time",
"nodeType": "VariableDeclaration",
"scope": 798,
"src": "5972:12:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 772,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5972:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5938:52:4"
},
"returnParameters": {
"id": 777,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 776,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 798,
"src": "6036:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 775,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6036:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6035:9:4"
},
"scope": 862,
"src": "5914:308:4",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 807,
"nodeType": "Block",
"src": "6368:39:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 804,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "6393:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
],
"id": 803,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "6385:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 805,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6385:15:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"functionReturnParameters": 802,
"id": 806,
"nodeType": "Return",
"src": "6378:22:4"
}
]
},
"documentation": "@return The address of the vested token",
"id": 808,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "token",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 799,
"nodeType": "ParameterList",
"parameters": [],
"src": "6307:2:4"
},
"returnParameters": {
"id": 802,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 801,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 808,
"src": "6355:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 800,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6355:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6354:9:4"
},
"scope": 862,
"src": "6293:114:4",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 815,
"nodeType": "Block",
"src": "6572:37:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 813,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "6589:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 812,
"id": 814,
"nodeType": "Return",
"src": "6582:20:4"
}
]
},
"documentation": "@return The total amount of tokens currently vested",
"id": 816,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "totalVesting",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 809,
"nodeType": "ParameterList",
"parameters": [],
"src": "6511:2:4"
},
"returnParameters": {
"id": 812,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 811,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 816,
"src": "6559:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 810,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6559:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6558:9:4"
},
"scope": 862,
"src": "6490:119:4",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 860,
"nodeType": "Block",
"src": "7773:585:4",
"statements": [
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 828,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 825,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 820,
"src": "7885:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 826,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "7892:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 827,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "cliff",
"nodeType": "MemberAccess",
"referencedDeclaration": 489,
"src": "7892:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7885:18:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 832,
"nodeType": "IfStatement",
"src": "7881:57:4",
"trueBody": {
"id": 831,
"nodeType": "Block",
"src": "7905:33:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "30",
"id": 829,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7926:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"functionReturnParameters": 824,
"id": 830,
"nodeType": "Return",
"src": "7919:8:4"
}
]
}
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 836,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 833,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 820,
"src": "8038:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 834,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8046:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 835,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "end",
"nodeType": "MemberAccess",
"referencedDeclaration": 491,
"src": "8046:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8038:17:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 841,
"nodeType": "IfStatement",
"src": "8034:66:4",
"trueBody": {
"id": 840,
"nodeType": "Block",
"src": "8057:43:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 837,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8078:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 838,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "8078:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 824,
"id": 839,
"nodeType": "Return",
"src": "8071:18:4"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 855,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8338:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 856,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "start",
"nodeType": "MemberAccess",
"referencedDeclaration": 487,
"src": "8338:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 852,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8324:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 853,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "end",
"nodeType": "MemberAccess",
"referencedDeclaration": 491,
"src": "8324:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 854,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "8324:13:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 857,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8324:26:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 847,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8306:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 848,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "start",
"nodeType": "MemberAccess",
"referencedDeclaration": 487,
"src": "8306:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 845,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 820,
"src": "8297:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 846,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "8297:8:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 849,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8297:21:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 842,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8281:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 843,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "8281:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 844,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 2453,
"src": "8281:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 850,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8281:38:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 851,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "div",
"nodeType": "MemberAccess",
"referencedDeclaration": 2477,
"src": "8281:42:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 858,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8281:70:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 824,
"id": 859,
"nodeType": "Return",
"src": "8274:77:4"
}
]
},
"documentation": "@dev Calculate amount of vested tokens at a given time for a given grant.\n Note that this function does not take into account any previously claimed\n tokens - it is the responsibility of the caller function to ensure that\n the grant holder does not claim the same value multiple times.\n @param grant Grant The vesting grant\n @param time uint256 The time to be checked\n @return An uint256 representing the amount of claimable tokens\n * | ____________ total value\n | _/\n | _/\n | _/\n | _/\n | /\n | .|\n | . |\n | . |\n | . |\n | . |\n | . |\n +===+===========+---------+----------> time\n Start Cliff End",
"id": 861,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_calculateClaimableTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 821,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 818,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 861,
"src": "7667:18:4",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 817,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "7667:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 820,
"name": "time",
"nodeType": "VariableDeclaration",
"scope": 861,
"src": "7695:12:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 819,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "7695:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7657:56:4"
},
"returnParameters": {
"id": 824,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 823,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 861,
"src": "7760:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 822,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "7760:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7759:9:4"
},
"scope": 862,
"src": "7623:735:4",
"stateMutability": "pure",
"superFunction": null,
"visibility": "private"
}
],
"scope": 863,
"src": "489:7871:4"
}
],
"src": "162:8199:4"
},
"legacyAST": {
"absolutePath": "/Users/thomasvanderstraeten/code/hey/mainchain/contracts/VestingTrustee.sol",
"exportedSymbols": {
"VestingTrustee": [
862
]
},
"id": 863,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 475,
"literals": [
"solidity",
"^",
"0.5",
".0"
],
"nodeType": "PragmaDirective",
"src": "162:23:4"
},
{
"absolutePath": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
"file": "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol",
"id": 476,
"nodeType": "ImportDirective",
"scope": 863,
"sourceUnit": 3215,
"src": "187:64:4",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
"file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
"id": 477,
"nodeType": "ImportDirective",
"scope": 863,
"sourceUnit": 2656,
"src": "252:63:4",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
"file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
"id": 478,
"nodeType": "ImportDirective",
"scope": 863,
"sourceUnit": 2547,
"src": "316:59:4",
"symbolAliases": [],
"unitAlias": ""
},
{
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 479,
"name": "Ownable",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 2655,
"src": "516:7:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Ownable_$2655",
"typeString": "contract Ownable"
}
},
"id": 480,
"nodeType": "InheritanceSpecifier",
"src": "516:7:4"
}
],
"contractDependencies": [
2655
],
"contractKind": "contract",
"documentation": "@title VestingTrustee\n@dev Lends very heavily from SirinLab and Stox's own VestingTrustee contracts.",
"fullyImplemented": true,
"id": 862,
"linearizedBaseContracts": [
862,
2655
],
"name": "VestingTrustee",
"nodeType": "ContractDefinition",
"nodes": [
{
"id": 483,
"libraryName": {
"contractScope": null,
"id": 481,
"name": "SafeMath",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 2546,
"src": "565:8:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_SafeMath_$2546",
"typeString": "library SafeMath"
}
},
"nodeType": "UsingForDirective",
"src": "559:27:4",
"typeName": {
"id": 482,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "578:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
},
{
"canonicalName": "VestingTrustee.Grant",
"id": 496,
"members": [
{
"constant": false,
"id": 485,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "650:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 484,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "650:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 487,
"name": "start",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "673:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 486,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "673:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 489,
"name": "cliff",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "696:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 488,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "696:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 491,
"name": "end",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "719:11:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 490,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "719:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 493,
"name": "transferred",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "740:19:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 492,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "740:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 495,
"name": "revokable",
"nodeType": "VariableDeclaration",
"scope": 496,
"src": "769:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 494,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "769:4:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"name": "Grant",
"nodeType": "StructDefinition",
"scope": 862,
"src": "627:163:4",
"visibility": "public"
},
{
"constant": false,
"id": 500,
"name": "grants",
"nodeType": "VariableDeclaration",
"scope": 862,
"src": "825:40:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant)"
},
"typeName": {
"id": 499,
"keyType": {
"id": 497,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "834:7:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "825:26:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant)"
},
"valueType": {
"contractScope": null,
"id": 498,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "845:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
}
},
"value": null,
"visibility": "public"
},
{
"constant": false,
"id": 502,
"name": "_token",
"nodeType": "VariableDeclaration",
"scope": 862,
"src": "899:21:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
},
"typeName": {
"contractScope": null,
"id": 501,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 3214,
"src": "899:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"value": null,
"visibility": "private"
},
{
"constant": false,
"id": 504,
"name": "_totalVesting",
"nodeType": "VariableDeclaration",
"scope": 862,
"src": "987:29:4",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 503,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "987:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "private"
},
{
"anonymous": false,
"documentation": null,
"id": 512,
"name": "GrantCreated",
"nodeType": "EventDefinition",
"parameters": {
"id": 511,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 506,
"indexed": true,
"name": "from",
"nodeType": "VariableDeclaration",
"scope": 512,
"src": "1117:20:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 505,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1117:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 508,
"indexed": true,
"name": "to",
"nodeType": "VariableDeclaration",
"scope": 512,
"src": "1139:18:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 507,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1139:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 510,
"indexed": false,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 512,
"src": "1159:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 509,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1159:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1116:57:4"
},
"src": "1098:76:4"
},
{
"anonymous": false,
"documentation": null,
"id": 518,
"name": "GrantClaimed",
"nodeType": "EventDefinition",
"parameters": {
"id": 517,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 514,
"indexed": true,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 518,
"src": "1198:22:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 513,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1198:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 516,
"indexed": false,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 518,
"src": "1222:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 515,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1222:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1197:39:4"
},
"src": "1179:58:4"
},
{
"anonymous": false,
"documentation": null,
"id": 524,
"name": "GrantRevoked",
"nodeType": "EventDefinition",
"parameters": {
"id": 523,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 520,
"indexed": true,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 524,
"src": "1261:22:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 519,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1261:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 522,
"indexed": false,
"name": "refund",
"nodeType": "VariableDeclaration",
"scope": 524,
"src": "1285:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 521,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1285:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1260:40:4"
},
"src": "1242:59:4"
},
{
"body": {
"id": 544,
"nodeType": "Block",
"src": "1575:111:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 536,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 531,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 526,
"src": "1601:5:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
],
"id": 530,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1593:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 532,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1593:14:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 534,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1619:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 533,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1611:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 535,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1611:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "1593:28:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "746f6b656e2063616e6e6f74206265207a65726f2061646472657373",
"id": 537,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1623:30:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_78447af7d226b72aaaf03dd000a6faa0d044a521f2c2503edf33dd462ad561f3",
"typeString": "literal_string \"token cannot be zero address\""
},
"value": "token cannot be zero address"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_78447af7d226b72aaaf03dd000a6faa0d044a521f2c2503edf33dd462ad561f3",
"typeString": "literal_string \"token cannot be zero address\""
}
],
"id": 529,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "1585:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 538,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "1585:69:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 539,
"nodeType": "ExpressionStatement",
"src": "1585:69:4"
},
{
"expression": {
"argumentTypes": null,
"id": 542,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 540,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "1665:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 541,
"name": "token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 526,
"src": "1674:5:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"src": "1665:14:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 543,
"nodeType": "ExpressionStatement",
"src": "1665:14:4"
}
]
},
"documentation": "@dev Constructor. Initializes the ERC20 token linked to the grants.\n @param token IERC20 The address of the previously deployed ERC20 smart contract",
"id": 545,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 527,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 526,
"name": "token",
"nodeType": "VariableDeclaration",
"scope": 545,
"src": "1537:12:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
},
"typeName": {
"contractScope": null,
"id": 525,
"name": "IERC20",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 3214,
"src": "1537:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "1527:28:4"
},
"returnParameters": {
"id": 528,
"nodeType": "ParameterList",
"parameters": [],
"src": "1575:0:4"
},
"scope": 862,
"src": "1516:170:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 641,
"nodeType": "Block",
"src": "2415:1075:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 567,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 563,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "2433:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"hexValue": "30",
"id": 565,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2447:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 564,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2439:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 566,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2439:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"src": "2433:16:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "746f2063616e6e6f74206265207a65726f2061646472657373",
"id": 568,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2451:27:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_68fbdc27556ce8c765f4eaa1b339606086088a233ebf44019715866c27d14936",
"typeString": "literal_string \"to cannot be zero address\""
},
"value": "to cannot be zero address"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_68fbdc27556ce8c765f4eaa1b339606086088a233ebf44019715866c27d14936",
"typeString": "literal_string \"to cannot be zero address\""
}
],
"id": 562,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2425:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 569,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2425:54:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 570,
"nodeType": "ExpressionStatement",
"src": "2425:54:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 574,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 572,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "2497:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 573,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2505:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "2497:9:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "76616c7565206d7573742062652061626f76652030",
"id": 575,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2508:23:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_779416dd6e4b18f49d0eee4e3fee49cd12c5710dc127d93bb2864d748aa98efc",
"typeString": "literal_string \"value must be above 0\""
},
"value": "value must be above 0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_779416dd6e4b18f49d0eee4e3fee49cd12c5710dc127d93bb2864d748aa98efc",
"typeString": "literal_string \"value must be above 0\""
}
],
"id": 571,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2489:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 576,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2489:43:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 577,
"nodeType": "ExpressionStatement",
"src": "2489:43:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 584,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 579,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "2627:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 581,
"indexExpression": {
"argumentTypes": null,
"id": 580,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "2634:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "2627:10:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"id": 582,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "2627:16:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 583,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2647:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "2627:21:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6f6e6c79206f6e65206772616e74207065722061646472657373",
"id": 585,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2650:28:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_720ead85d27ff647821f9761e732c63013c0ab291035c0dec678383e14bf523d",
"typeString": "literal_string \"only one grant per address\""
},
"value": "only one grant per address"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_720ead85d27ff647821f9761e732c63013c0ab291035c0dec678383e14bf523d",
"typeString": "literal_string \"only one grant per address\""
}
],
"id": 578,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2619:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 586,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2619:60:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 587,
"nodeType": "ExpressionStatement",
"src": "2619:60:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 595,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 591,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 589,
"name": "start",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 551,
"src": "2776:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 590,
"name": "cliff",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 553,
"src": "2785:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2776:14:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 594,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 592,
"name": "cliff",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 553,
"src": "2794:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"id": 593,
"name": "end",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 555,
"src": "2803:3:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2794:12:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "2776:30:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "76657374696e67206461746573206d75737420626520636f6e73697374656e74",
"id": 596,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2808:34:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_fddf95001eac8aeb7871a7941093f25ac0a544b639b29a8f456a75e1c88e44a2",
"typeString": "literal_string \"vesting dates must be consistent\""
},
"value": "vesting dates must be consistent"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_fddf95001eac8aeb7871a7941093f25ac0a544b639b29a8f456a75e1c88e44a2",
"typeString": "literal_string \"vesting dates must be consistent\""
}
],
"id": 588,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2768:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 597,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2768:75:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 598,
"nodeType": "ExpressionStatement",
"src": "2768:75:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 610,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 602,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "2988:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 600,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "2970:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 601,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 2525,
"src": "2970:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 603,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2970:24:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<=",
"rightExpression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 607,
"name": "this",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3465,
"src": "3023:4:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_VestingTrustee_$862",
"typeString": "contract VestingTrustee"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_VestingTrustee_$862",
"typeString": "contract VestingTrustee"
}
],
"id": 606,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "3015:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 608,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3015:13:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"argumentTypes": null,
"id": 604,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "2998:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 605,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "balanceOf",
"nodeType": "MemberAccess",
"referencedDeclaration": 3188,
"src": "2998:16:4",
"typeDescriptions": {
"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
"typeString": "function (address) view external returns (uint256)"
}
},
"id": 609,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2998:31:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2970:59:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6772616e742063616e6e6f742065786365656420746f74616c20616d6f756e74206f6620746f6b656e7320617661696c61626c65",
"id": 611,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3031:54:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_e1320aa96b98997101853e785b5d30dc81f76c894a615639b494619781c85730",
"typeString": "literal_string \"grant cannot exceed total amount of tokens available\""
},
"value": "grant cannot exceed total amount of tokens available"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_e1320aa96b98997101853e785b5d30dc81f76c894a615639b494619781c85730",
"typeString": "literal_string \"grant cannot exceed total amount of tokens available\""
}
],
"id": 599,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "2962:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 612,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "2962:124:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 613,
"nodeType": "ExpressionStatement",
"src": "2962:124:4"
},
{
"expression": {
"argumentTypes": null,
"id": 625,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 614,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "3128:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 616,
"indexExpression": {
"argumentTypes": null,
"id": 615,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "3135:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "3128:10:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 618,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "3168:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 619,
"name": "start",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 551,
"src": "3194:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 620,
"name": "cliff",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 553,
"src": "3220:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"id": 621,
"name": "end",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 555,
"src": "3244:3:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"argumentTypes": null,
"hexValue": "30",
"id": 622,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3274:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
{
"argumentTypes": null,
"id": 623,
"name": "revokable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 557,
"src": "3300:9:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
],
"expression": {
"argumentTypes": null,
"id": 617,
"name": "Grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 496,
"src": "3141:5:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_struct$_Grant_$496_storage_ptr_$",
"typeString": "type(struct VestingTrustee.Grant storage pointer)"
}
},
"id": 624,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "structConstructorCall",
"lValueRequested": false,
"names": [
"value",
"start",
"cliff",
"end",
"transferred",
"revokable"
],
"nodeType": "FunctionCall",
"src": "3141:179:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"src": "3128:192:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"id": 626,
"nodeType": "ExpressionStatement",
"src": "3128:192:4"
},
{
"expression": {
"argumentTypes": null,
"id": 632,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 627,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3392:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 630,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "3426:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 628,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3408:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 629,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 2525,
"src": "3408:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 631,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3408:24:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3392:40:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 633,
"nodeType": "ExpressionStatement",
"src": "3392:40:4"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 635,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "3461:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 636,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "3461:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 637,
"name": "to",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 547,
"src": "3473:2:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 638,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 549,
"src": "3477:5:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 634,
"name": "GrantCreated",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 512,
"src": "3448:12:4",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,address,uint256)"
}
},
"id": 639,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3448:35:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 640,
"nodeType": "EmitStatement",
"src": "3443:40:4"
}
]
},
"documentation": "@dev Grant tokens to a specified address.\n @param to address The address to grant tokens to\n @param value uint256 The amount of tokens to be granted\n @param start uint256 The start of the vesting period in seconds since the Unix Epoch\n @param cliff uint256 The date at which the cliff occurs in seconds since the Unix Epoch\n @param end uint256 The end of the vesting period in seconds since the Unix Epoch\n @param revokable bool Whether the grant is revokable or not",
"id": 642,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 560,
"modifierName": {
"argumentTypes": null,
"id": 559,
"name": "onlyOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2589,
"src": "2401:9:4",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "2401:9:4"
}
],
"name": "createGrant",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 558,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 547,
"name": "to",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2247:10:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 546,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2247:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 549,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2267:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 548,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2267:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 551,
"name": "start",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2290:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 550,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2290:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 553,
"name": "cliff",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2313:13:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 552,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2313:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 555,
"name": "end",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2336:11:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 554,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2336:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 557,
"name": "revokable",
"nodeType": "VariableDeclaration",
"scope": 642,
"src": "2357:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 556,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2357:4:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "2237:140:4"
},
"returnParameters": {
"id": 561,
"nodeType": "ParameterList",
"parameters": [],
"src": "2415:0:4"
},
"scope": 862,
"src": "2217:1273:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 695,
"nodeType": "Block",
"src": "3787:418:4",
"statements": [
{
"assignments": [
650
],
"declarations": [
{
"constant": false,
"id": 650,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 695,
"src": "3797:19:4",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 649,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "3797:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 654,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 651,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "3819:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 653,
"indexExpression": {
"argumentTypes": null,
"id": 652,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 644,
"src": "3826:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3819:14:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3797:36:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 656,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 650,
"src": "3852:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 657,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "revokable",
"nodeType": "MemberAccess",
"referencedDeclaration": 495,
"src": "3852:15:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6772616e74206d757374206265207265766f6b61626c65",
"id": 658,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3869:25:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_bc1ca1313d04b2b1ab7fef4c641f0abd9d99c8fe5f1179a9cc8d02b6c8960e1a",
"typeString": "literal_string \"grant must be revokable\""
},
"value": "grant must be revokable"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_bc1ca1313d04b2b1ab7fef4c641f0abd9d99c8fe5f1179a9cc8d02b6c8960e1a",
"typeString": "literal_string \"grant must be revokable\""
}
],
"id": 655,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "3844:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 659,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3844:51:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 660,
"nodeType": "ExpressionStatement",
"src": "3844:51:4"
},
{
"assignments": [
662
],
"declarations": [
{
"constant": false,
"id": 662,
"name": "refund",
"nodeType": "VariableDeclaration",
"scope": 695,
"src": "3906:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 661,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3906:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 669,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 666,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 650,
"src": "3939:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 667,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "3939:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 663,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 650,
"src": "3923:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 664,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "3923:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 665,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "3923:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 668,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3923:34:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3906:51:4"
},
{
"expression": {
"argumentTypes": null,
"id": 675,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 670,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3967:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 673,
"name": "refund",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 662,
"src": "4001:6:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 671,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "3983:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 672,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "3983:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 674,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "3983:25:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3967:41:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 676,
"nodeType": "ExpressionStatement",
"src": "3967:41:4"
},
{
"expression": {
"argumentTypes": null,
"id": 680,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "delete",
"prefix": true,
"src": "4018:21:4",
"subExpression": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 677,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "4025:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 679,
"indexExpression": {
"argumentTypes": null,
"id": 678,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 644,
"src": "4032:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "4025:14:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 681,
"nodeType": "ExpressionStatement",
"src": "4018:21:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 685,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "4135:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 686,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4135:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 687,
"name": "refund",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 662,
"src": "4147:6:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 682,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "4119:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 684,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transfer",
"nodeType": "MemberAccess",
"referencedDeclaration": 3156,
"src": "4119:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
"typeString": "function (address,uint256) external returns (bool)"
}
},
"id": 688,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4119:35:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 689,
"nodeType": "ExpressionStatement",
"src": "4119:35:4"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 691,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 644,
"src": "4183:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"argumentTypes": null,
"id": 692,
"name": "refund",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 662,
"src": "4191:6:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 690,
"name": "GrantRevoked",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 524,
"src": "4170:12:4",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 693,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4170:28:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 694,
"nodeType": "EmitStatement",
"src": "4165:33:4"
}
]
},
"documentation": "@dev Revoke the grant of tokens of a specifed address and returns tokens\n to the grant contract owner.\n @param holder address The address which will have its grant revoked.",
"id": 696,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": null,
"id": 647,
"modifierName": {
"argumentTypes": null,
"id": 646,
"name": "onlyOwner",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 2589,
"src": "3773:9:4",
"typeDescriptions": {
"typeIdentifier": "t_modifier$__$",
"typeString": "modifier ()"
}
},
"nodeType": "ModifierInvocation",
"src": "3773:9:4"
}
],
"name": "revokeGrant",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 645,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 644,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 696,
"src": "3729:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 643,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3729:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "3719:30:4"
},
"returnParameters": {
"id": 648,
"nodeType": "ParameterList",
"parameters": [],
"src": "3787:0:4"
},
"scope": 862,
"src": "3699:506:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 768,
"nodeType": "Block",
"src": "4410:925:4",
"statements": [
{
"assignments": [
700
],
"declarations": [
{
"constant": false,
"id": 700,
"name": "claimable",
"nodeType": "VariableDeclaration",
"scope": 768,
"src": "4556:17:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 699,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4556:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 707,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 702,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "4592:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 703,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4592:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 704,
"name": "block",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3394,
"src": "4604:5:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_block",
"typeString": "block"
}
},
"id": 705,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "timestamp",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4604:15:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 701,
"name": "claimableTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 798,
"src": "4576:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (address,uint256) view returns (uint256)"
}
},
"id": 706,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4576:44:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4556:64:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 711,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 709,
"name": "claimable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 700,
"src": "4638:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 710,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4651:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "4638:14:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "6e6f20746f6b656e7320636c61696d61626c652063757272656e746c79",
"id": 712,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4654:31:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_9b493e56a6c6560f76f84639ce4f6b5db255fe8e4a81f1200ea18314ed918897",
"typeString": "literal_string \"no tokens claimable currently\""
},
"value": "no tokens claimable currently"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_9b493e56a6c6560f76f84639ce4f6b5db255fe8e4a81f1200ea18314ed918897",
"typeString": "literal_string \"no tokens claimable currently\""
}
],
"id": 708,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "4630:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 713,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4630:56:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 714,
"nodeType": "ExpressionStatement",
"src": "4630:56:4"
},
{
"assignments": [
716
],
"declarations": [
{
"constant": false,
"id": 716,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 768,
"src": "4697:19:4",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 715,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "4697:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 721,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 717,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "4719:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 720,
"indexExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 718,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "4726:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 719,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "4726:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4719:18:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4697:40:4"
},
{
"assignments": [
723
],
"declarations": [
{
"constant": false,
"id": 723,
"name": "transferable",
"nodeType": "VariableDeclaration",
"scope": 768,
"src": "4969:20:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 722,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4969:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 729,
"initialValue": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 726,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 716,
"src": "5006:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 727,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "5006:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 724,
"name": "claimable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 700,
"src": "4992:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 725,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "4992:13:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 728,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "4992:32:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4969:55:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 733,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 731,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5042:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 732,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5058:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "5042:17:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"argumentTypes": null,
"hexValue": "636c61696d61626c6520616d6f756e7420616c7265616479207472616e73666572726564",
"id": 734,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5061:38:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_cf98fc057f5734d3f8f5559dee4e9d3e4e847a59ec581e76b25c76f104fcc5c6",
"typeString": "literal_string \"claimable amount already transferred\""
},
"value": "claimable amount already transferred"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_cf98fc057f5734d3f8f5559dee4e9d3e4e847a59ec581e76b25c76f104fcc5c6",
"typeString": "literal_string \"claimable amount already transferred\""
}
],
"id": 730,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
3407,
3408
],
"referencedDeclaration": 3408,
"src": "5034:7:4",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 735,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5034:66:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 736,
"nodeType": "ExpressionStatement",
"src": "5034:66:4"
},
{
"expression": {
"argumentTypes": null,
"id": 745,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 737,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 716,
"src": "5111:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 739,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "5111:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 743,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5153:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 740,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 716,
"src": "5131:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 741,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "transferred",
"nodeType": "MemberAccess",
"referencedDeclaration": 493,
"src": "5131:17:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 742,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "add",
"nodeType": "MemberAccess",
"referencedDeclaration": 2525,
"src": "5131:21:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 744,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5131:35:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5111:55:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 746,
"nodeType": "ExpressionStatement",
"src": "5111:55:4"
},
{
"expression": {
"argumentTypes": null,
"id": 752,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 747,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "5176:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 750,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5210:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 748,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "5192:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 749,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "5192:17:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 751,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5192:31:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5176:47:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 753,
"nodeType": "ExpressionStatement",
"src": "5176:47:4"
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 757,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "5249:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 758,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5249:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 759,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5261:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 754,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "5233:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
},
"id": 756,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "transfer",
"nodeType": "MemberAccess",
"referencedDeclaration": 3156,
"src": "5233:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
"typeString": "function (address,uint256) external returns (bool)"
}
},
"id": 760,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5233:41:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 761,
"nodeType": "ExpressionStatement",
"src": "5233:41:4"
},
{
"eventCall": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 763,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 3404,
"src": "5303:3:4",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 764,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sender",
"nodeType": "MemberAccess",
"referencedDeclaration": null,
"src": "5303:10:4",
"typeDescriptions": {
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
}
},
{
"argumentTypes": null,
"id": 765,
"name": "transferable",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 723,
"src": "5315:12:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address_payable",
"typeString": "address payable"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 762,
"name": "GrantClaimed",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 518,
"src": "5290:12:4",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
"typeString": "function (address,uint256)"
}
},
"id": 766,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "5290:38:4",
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 767,
"nodeType": "EmitStatement",
"src": "5285:43:4"
}
]
},
"documentation": "@dev Claim vested tokens and transfer them to their holder. Note that\n this function has to be called by the grant holder themselves.",
"id": 769,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "claimTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 697,
"nodeType": "ParameterList",
"parameters": [],
"src": "4388:2:4"
},
"returnParameters": {
"id": 698,
"nodeType": "ParameterList",
"parameters": [],
"src": "4410:0:4"
},
"scope": 862,
"src": "4368:967:4",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 797,
"nodeType": "Block",
"src": "6049:173:4",
"statements": [
{
"assignments": [
779
],
"declarations": [
{
"constant": false,
"id": 779,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 797,
"src": "6059:19:4",
"stateVariable": false,
"storageLocation": "storage",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 778,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "6059:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
}
],
"id": 783,
"initialValue": {
"argumentTypes": null,
"baseExpression": {
"argumentTypes": null,
"id": 780,
"name": "grants",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 500,
"src": "6081:6:4",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_struct$_Grant_$496_storage_$",
"typeString": "mapping(address => struct VestingTrustee.Grant storage ref)"
}
},
"id": 782,
"indexExpression": {
"argumentTypes": null,
"id": 781,
"name": "holder",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 771,
"src": "6088:6:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "6081:14:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage",
"typeString": "struct VestingTrustee.Grant storage ref"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "6059:36:4"
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 787,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 784,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 779,
"src": "6109:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
"id": 785,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "6109:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 786,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6124:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "6109:16:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 791,
"nodeType": "IfStatement",
"src": "6105:55:4",
"trueBody": {
"id": 790,
"nodeType": "Block",
"src": "6127:33:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "30",
"id": 788,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6148:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"functionReturnParameters": 777,
"id": 789,
"nodeType": "Return",
"src": "6141:8:4"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 793,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 779,
"src": "6203:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
}
},
{
"argumentTypes": null,
"id": 794,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 773,
"src": "6210:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant storage pointer"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 792,
"name": "_calculateClaimableTokens",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 861,
"src": "6177:25:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_struct$_Grant_$496_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (struct VestingTrustee.Grant memory,uint256) pure returns (uint256)"
}
},
"id": 795,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6177:38:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 777,
"id": 796,
"nodeType": "Return",
"src": "6170:45:4"
}
]
},
"documentation": "@dev Calculate the total amount of tokens that a holder can claim at a\n given time, from the total amount vested for this holder. This function\n does the precheck of making sure that there is actually a grant for this\n owner, before delegating to the private _calculateClaimableTokens()\n function to derive the claimable amount at the given time.\n @param holder address The address of the holder\n @param time uint256 The specific time\n @return a uint256 representing a holder's total amount of vested tokens",
"id": 798,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "claimableTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 774,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 771,
"name": "holder",
"nodeType": "VariableDeclaration",
"scope": 798,
"src": "5948:14:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 770,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5948:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 773,
"name": "time",
"nodeType": "VariableDeclaration",
"scope": 798,
"src": "5972:12:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 772,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5972:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "5938:52:4"
},
"returnParameters": {
"id": 777,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 776,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 798,
"src": "6036:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 775,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6036:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6035:9:4"
},
"scope": 862,
"src": "5914:308:4",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 807,
"nodeType": "Block",
"src": "6368:39:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"id": 804,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 502,
"src": "6393:6:4",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_contract$_IERC20_$3214",
"typeString": "contract IERC20"
}
],
"id": 803,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "6385:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": "address"
},
"id": 805,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "6385:15:4",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"functionReturnParameters": 802,
"id": 806,
"nodeType": "Return",
"src": "6378:22:4"
}
]
},
"documentation": "@return The address of the vested token",
"id": 808,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "token",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 799,
"nodeType": "ParameterList",
"parameters": [],
"src": "6307:2:4"
},
"returnParameters": {
"id": 802,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 801,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 808,
"src": "6355:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 800,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6355:7:4",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6354:9:4"
},
"scope": 862,
"src": "6293:114:4",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 815,
"nodeType": "Block",
"src": "6572:37:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 813,
"name": "_totalVesting",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 504,
"src": "6589:13:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 812,
"id": 814,
"nodeType": "Return",
"src": "6582:20:4"
}
]
},
"documentation": "@return The total amount of tokens currently vested",
"id": 816,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "totalVesting",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 809,
"nodeType": "ParameterList",
"parameters": [],
"src": "6511:2:4"
},
"returnParameters": {
"id": 812,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 811,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 816,
"src": "6559:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 810,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6559:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "6558:9:4"
},
"scope": 862,
"src": "6490:119:4",
"stateMutability": "view",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 860,
"nodeType": "Block",
"src": "7773:585:4",
"statements": [
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 828,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 825,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 820,
"src": "7885:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 826,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "7892:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 827,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "cliff",
"nodeType": "MemberAccess",
"referencedDeclaration": 489,
"src": "7892:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7885:18:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 832,
"nodeType": "IfStatement",
"src": "7881:57:4",
"trueBody": {
"id": 831,
"nodeType": "Block",
"src": "7905:33:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"hexValue": "30",
"id": 829,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7926:1:4",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"functionReturnParameters": 824,
"id": 830,
"nodeType": "Return",
"src": "7919:8:4"
}
]
}
},
{
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 836,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 833,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 820,
"src": "8038:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 834,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8046:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 835,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "end",
"nodeType": "MemberAccess",
"referencedDeclaration": 491,
"src": "8046:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8038:17:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseBody": null,
"id": 841,
"nodeType": "IfStatement",
"src": "8034:66:4",
"trueBody": {
"id": 840,
"nodeType": "Block",
"src": "8057:43:4",
"statements": [
{
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 837,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8078:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 838,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "8078:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 824,
"id": 839,
"nodeType": "Return",
"src": "8071:18:4"
}
]
}
},
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 855,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8338:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 856,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "start",
"nodeType": "MemberAccess",
"referencedDeclaration": 487,
"src": "8338:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 852,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8324:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 853,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "end",
"nodeType": "MemberAccess",
"referencedDeclaration": 491,
"src": "8324:9:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 854,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "8324:13:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 857,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8324:26:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 847,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8306:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 848,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "start",
"nodeType": "MemberAccess",
"referencedDeclaration": 487,
"src": "8306:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"id": 845,
"name": "time",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 820,
"src": "8297:4:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 846,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "sub",
"nodeType": "MemberAccess",
"referencedDeclaration": 2501,
"src": "8297:8:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 849,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8297:21:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 842,
"name": "grant",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 818,
"src": "8281:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant memory"
}
},
"id": 843,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberName": "value",
"nodeType": "MemberAccess",
"referencedDeclaration": 485,
"src": "8281:11:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 844,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "mul",
"nodeType": "MemberAccess",
"referencedDeclaration": 2453,
"src": "8281:15:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 850,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8281:38:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 851,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberName": "div",
"nodeType": "MemberAccess",
"referencedDeclaration": 2477,
"src": "8281:42:4",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 858,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"names": [],
"nodeType": "FunctionCall",
"src": "8281:70:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 824,
"id": 859,
"nodeType": "Return",
"src": "8274:77:4"
}
]
},
"documentation": "@dev Calculate amount of vested tokens at a given time for a given grant.\n Note that this function does not take into account any previously claimed\n tokens - it is the responsibility of the caller function to ensure that\n the grant holder does not claim the same value multiple times.\n @param grant Grant The vesting grant\n @param time uint256 The time to be checked\n @return An uint256 representing the amount of claimable tokens\n * | ____________ total value\n | _/\n | _/\n | _/\n | _/\n | /\n | .|\n | . |\n | . |\n | . |\n | . |\n | . |\n +===+===========+---------+----------> time\n Start Cliff End",
"id": 861,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_calculateClaimableTokens",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 821,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 818,
"name": "grant",
"nodeType": "VariableDeclaration",
"scope": 861,
"src": "7667:18:4",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_memory_ptr",
"typeString": "struct VestingTrustee.Grant"
},
"typeName": {
"contractScope": null,
"id": 817,
"name": "Grant",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 496,
"src": "7667:5:4",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Grant_$496_storage_ptr",
"typeString": "struct VestingTrustee.Grant"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 820,
"name": "time",
"nodeType": "VariableDeclaration",
"scope": 861,
"src": "7695:12:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 819,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "7695:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7657:56:4"
},
"returnParameters": {
"id": 824,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 823,
"name": "",
"nodeType": "VariableDeclaration",
"scope": 861,
"src": "7760:7:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 822,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "7760:7:4",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "7759:9:4"
},
"scope": 862,
"src": "7623:735:4",
"stateMutability": "pure",
"superFunction": null,
"visibility": "private"
}
],
"scope": 863,
"src": "489:7871:4"
}
],
"src": "162:8199:4"
},
"compiler": {
"name": "solc",
"version": "0.5.0+commit.1d4f565a.Emscripten.clang"
},
"networks": {
"1543575271380": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0x73274404b92684ee16b3c238ca77b14dcbf391ac",
"transactionHash": "0x8c18cd56f7204795e6ce8e78eb523de30b9a02c754287b68802013cac2792613"
},
"1543575362424": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0x20cd07d53a417643eaef92fe339cae4e14855b43",
"transactionHash": "0xd11e51e8208a6f6f80f125b4e730c911a4fcc504f654bcd4f2041f6eed69c88e"
},
"1543582128197": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0x8d77caaa3c6c0f1f8c12383a930fc35ca2a4d746",
"transactionHash": "0x8c175ebf390524ff4eff78b965bb3d99f19a1eff9c910bda806f52d4491503c5"
},
"1543582216163": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0xfe0ba76f4995dc2281fac5c8066db7e849d8a218",
"transactionHash": "0xfc17160a89d38587ccc6a1bd98ab8696b1ef947986a52e5f0a03a259c26e4b60"
},
"1543582360302": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0x7c976740e31a1a69b1d404d5c10afaa852fb48be",
"transactionHash": "0x4f3f6ad99919ef9ba81e13b1456e6c9f069fd8b6ec14ad2e2cea9a0c46af3860"
},
"1543583471841": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0xf52320dd5288405571766d251aeaf899a88cea5c",
"transactionHash": "0xce3a8a6844795b73bb0736b2e6f7337b3cb0005bb4a98c42f363d77aad7f2d61"
},
"1543584071380": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0xf4c86ea0d971c3a9229a4c4e895e7a1cf02eaa48",
"transactionHash": "0xa9386656ea5d155f8b74f7e139f4af7a9069cfcba74c7abed9a6328b77d782f2"
},
"1543585014304": {
"events": {
"0xe59554161f63f82606fec58f135843633f78733cf852ac15d6cb86ff84f5a05c": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantCreated",
"type": "event"
},
"0x2aa1d398fac8a867531b04feb1273747a6f1ec3d4700f40a2901dce75363edc0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "GrantClaimed",
"type": "event"
},
"0x740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "holder",
"type": "address"
},
{
"indexed": false,
"name": "refund",
"type": "uint256"
}
],
"name": "GrantRevoked",
"type": "event"
},
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
}
},
"links": {},
"address": "0xf9cc15f9092b3ad1d6f0b05281c7da6ed3b64d42",
"transactionHash": "0xa744f7d8cba721d6e8ee099716d2efed3025b3be7d023af1422bff4c6e245bf4"
}
},
"schemaVersion": "3.0.2",
"updatedAt": "2019-02-28T16:14:49.629Z",
"devdoc": {
"details": "Lends very heavily from SirinLab and Stox's own VestingTrustee contracts.",
"methods": {
"claimTokens()": {
"details": "Claim vested tokens and transfer them to their holder. Note that this function has to be called by the grant holder themselves."
},
"claimableTokens(address,uint256)": {
"details": "Calculate the total amount of tokens that a holder can claim at a given time, from the total amount vested for this holder. This function does the precheck of making sure that there is actually a grant for this owner, before delegating to the private _calculateClaimableTokens() function to derive the claimable amount at the given time.",
"params": {
"holder": "address The address of the holder",
"time": "uint256 The specific time"
},
"return": "a uint256 representing a holder's total amount of vested tokens"
},
"constructor": {
"details": "Constructor. Initializes the ERC20 token linked to the grants.",
"params": {
"token": "IERC20 The address of the previously deployed ERC20 smart contract"
}
},
"createGrant(address,uint256,uint256,uint256,uint256,bool)": {
"details": "Grant tokens to a specified address.",
"params": {
"cliff": "uint256 The date at which the cliff occurs in seconds since the Unix Epoch",
"end": "uint256 The end of the vesting period in seconds since the Unix Epoch",
"revokable": "bool Whether the grant is revokable or not",
"start": "uint256 The start of the vesting period in seconds since the Unix Epoch",
"to": "address The address to grant tokens to",
"value": "uint256 The amount of tokens to be granted"
}
},
"isOwner()": {
"return": "true if `msg.sender` is the owner of the contract."
},
"owner()": {
"return": "the address of the owner."
},
"renounceOwnership()": {
"details": "Allows the current owner to relinquish control of the contract."
},
"revokeGrant(address)": {
"details": "Revoke the grant of tokens of a specifed address and returns tokens to the grant contract owner.",
"params": {
"holder": "address The address which will have its grant revoked."
}
},
"token()": {
"return": "The address of the vested token"
},
"totalVesting()": {
"return": "The total amount of tokens currently vested"
},
"transferOwnership(address)": {
"details": "Allows the current owner to transfer control of the contract to a newOwner.",
"params": {
"newOwner": "The address to transfer ownership to."
}
}
},
"title": "VestingTrustee"
},
"userdoc": {
"methods": {
"renounceOwnership()": {
"notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
}
}
}
}