diff --git a/abis/ERC20VestingFactory.json b/abis/ERC20VestingFactory.json new file mode 100644 index 0000000..3c2e06b --- /dev/null +++ b/abis/ERC20VestingFactory.json @@ -0,0 +1,106 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ERC20VestingFactory", + "sourceName": "dxdao-contracts/contracts/dxvote/utils/ERC20VestingFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_erc20Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_vestingOwner", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "vestingContractAddress", + "type": "address" + } + ], + "name": "VestingCreated", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cliffDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "create", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "erc20Token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "vestingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161159f38038061159f8339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b039384166001600160a01b031991821617909155600180549390921692169190911790556115258061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80638a13eea714610046578063bd7b59081461006a578063f9b6b0c414610072575b600080fd5b61004e6100b2565b604080516001600160a01b039092168252519081900360200190f35b61004e6100c1565b6100b0600480360360a081101561008857600080fd5b506001600160a01b0381351690602081013590604081013590606081013590608001356100d0565b005b6000546001600160a01b031681565b6001546001600160a01b031681565b60008585858560016040516100e49061031e565b6001600160a01b039095168552602085019390935260408085019290925260608401529015156080830152519081900360a001906000f08015801561012d573d6000803e3d6000fd5b5060008054604080516323b872dd60e01b81523360048201526001600160a01b0380861660248301526044820188905291519495509116926323b872dd92606480840193602093929083900390910190829087803b15801561018e57600080fd5b505af11580156101a2573d6000803e3d6000fd5b505050506040513d60208110156101b857600080fd5b5050600054604080516370a0823160e01b81526001600160a01b0384811660048301529151859392909216916370a0823191602480820192602092909190829003018186803b15801561020a57600080fd5b505afa15801561021e573d6000803e3d6000fd5b505050506040513d602081101561023457600080fd5b505110156102735760405162461bcd60e51b81526004018080602001828103825260308152602001806114c16030913960400191505060405180910390fd5b6001546040805163f2fde38b60e01b81526001600160a01b03928316600482015290519183169163f2fde38b9160248082019260009290919082900301818387803b1580156102c157600080fd5b505af11580156102d5573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517fe4fb76c0ff20ae19784efe78af7946d749e229fec6e13499ab078f997113d6d39350908190036020019150a1505050505050565b6111958061032c8339019056fe60806040523480156200001157600080fd5b506040516200119538038062001195833981810160405260a08110156200003757600080fd5b50805160208201516040830151606084015160809094015192939192909190620000696001600160e01b036200023e16565b600080546001600160a01b0319166001600160a01b03928316178082556040519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b038516620000f85760405162461bcd60e51b815260040180806020018281038252602d8152602001806200113d602d913960400191505060405180910390fd5b81831115620001395760405162461bcd60e51b815260040180806020018281038252602b8152602001806200116a602b913960400191505060405180910390fd5b600082116200018f576040805162461bcd60e51b815260206004820152601b60248201527f546f6b656e56657374696e673a206475726174696f6e20697320300000000000604482015290519081900360640190fd5b42620001aa83866200024260201b6200071d1790919060201c565b11620001e85760405162461bcd60e51b815260040180806020018281038252602f8152602001806200110e602f913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0387161790556005805460ff191682151517905560048290556200022e848462000242602090811b6200071d17901c565b60025550505060035550620002a4565b3390565b6000828201838110156200029d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610e5a80620002b46000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063872a78101161008c5780639852595c116100665780639852595c1461019c578063be9a6555146101c2578063f2fde38b146101ca578063fa01dc06146101f0576100cf565b8063872a7810146101705780638da5cb5b1461018c5780638f32d59b14610194576100cf565b80630fb5a6b4146100d457806313d033c0146100ee57806319165587146100f657806338af3eed1461011e578063715018a61461014257806374a8f1031461014a575b600080fd5b6100dc610216565b60408051918252519081900360200190f35b6100dc61021c565b61011c6004803603602081101561010c57600080fd5b50356001600160a01b0316610222565b005b610126610327565b604080516001600160a01b039092168252519081900360200190f35b61011c610336565b61011c6004803603602081101561016057600080fd5b50356001600160a01b03166103d9565b610178610601565b604080519115158252519081900360200190f35b61012661060a565b610178610619565b6100dc600480360360208110156101b257600080fd5b50356001600160a01b031661063d565b6100dc61065c565b61011c600480360360208110156101e057600080fd5b50356001600160a01b0316610662565b6101786004803603602081101561020657600080fd5b50356001600160a01b03166106c7565b60045490565b60025490565b600061022d826106e5565b905060008111610284576040805162461bcd60e51b815260206004820152601f60248201527f546f6b656e56657374696e673a206e6f20746f6b656e73206172652064756500604482015290519081900360640190fd5b6001600160a01b0382166000908152600660205260409020546102ad908263ffffffff61071d16565b6001600160a01b038084166000818152600660205260409020929092556001546102df9291168363ffffffff61077e16565b604080516001600160a01b03841681526020810183905281517fc7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df93179929181900390910190a15050565b6001546001600160a01b031690565b61033e610619565b61038f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103e1610619565b610432576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60055460ff16610489576040805162461bcd60e51b815260206004820152601b60248201527f546f6b656e56657374696e673a2063616e6e6f74207265766f6b650000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156104e15760405162461bcd60e51b8152600401808060200182810382526023815260200180610e036023913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561052b57600080fd5b505afa15801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b505190506000610564836106e5565b90506000610578838363ffffffff6107d516565b6001600160a01b0385166000908152600760205260409020805460ff1916600117905590506105bf6105a861060a565b6001600160a01b038616908363ffffffff61077e16565b604080516001600160a01b038616815290517f39983c6d4d174a7aee564f449d4a5c3c7ac9649d72b7793c56901183996f8af69181900360200190a150505050565b60055460ff1690565b6000546001600160a01b031690565b600080546001600160a01b031661062e610817565b6001600160a01b031614905090565b6001600160a01b0381166000908152600660205260409020545b919050565b60035490565b61066a610619565b6106bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106c48161081b565b50565b6001600160a01b031660009081526007602052604090205460ff1690565b6001600160a01b0381166000908152600660205260408120546107179061070b846108bb565b9063ffffffff6107d516565b92915050565b600082820183811015610777576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526107d0908490610a00565b505050565b600061077783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bbe565b3390565b6001600160a01b0381166108605760405162461bcd60e51b8152600401808060200182810382526026815260200180610d926026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516370a0823160e01b8152306004820152905160009182916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561090657600080fd5b505afa15801561091a573d6000803e3d6000fd5b505050506040513d602081101561093057600080fd5b50516001600160a01b0384166000908152600660205260408120549192509061096090839063ffffffff61071d16565b905060025442101561097757600092505050610657565b60045460035461098c9163ffffffff61071d16565b421015806109b257506001600160a01b03841660009081526007602052604090205460ff165b156109c05791506106579050565b6109f76004546109eb6109de600354426107d590919063ffffffff16565b849063ffffffff610c5516565b9063ffffffff610cae16565b92505050610657565b610a12826001600160a01b0316610cf0565b610a63576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310610aa15780518252601f199092019160209182019101610a82565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b03576040519150601f19603f3d011682016040523d82523d6000602084013e610b08565b606091505b509150915081610b5f576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610bb857808060200190516020811015610b7b57600080fd5b5051610bb85760405162461bcd60e51b815260040180806020018281038252602a815260200180610dd9602a913960400191505060405180910390fd5b50505050565b60008184841115610c4d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c12578181015183820152602001610bfa565b50505050905090810190601f168015610c3f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082610c6457506000610717565b82820282848281610c7157fe5b04146107775760405162461bcd60e51b8152600401808060200182810382526021815260200180610db86021913960400191505060405180910390fd5b600061077783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d2c565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610d245750808214155b949350505050565b60008183610d7b5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610c12578181015183820152602001610bfa565b506000838581610d8757fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564546f6b656e56657374696e673a20746f6b656e20616c7265616479207265766f6b6564a265627a7a72315820dc405dd5140cd0705a35031e8caab6682bdf800f47bd23f2098dc6bef12c870064736f6c63430005110032546f6b656e56657374696e673a2066696e616c2074696d65206973206265666f72652063757272656e742074696d65546f6b656e56657374696e673a2062656e656669636961727920697320746865207a65726f2061646472657373546f6b656e56657374696e673a20636c696666206973206c6f6e676572207468616e206475726174696f6e455243323056657374696e67466163746f72793a20746f6b656e207472616e7366657220756e7375636365737366756ca265627a7a723158202bca8d696ac851aca5484efba45e1244939996c9b1c29d2cab231e48624e4bf664736f6c63430005110032", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80638a13eea714610046578063bd7b59081461006a578063f9b6b0c414610072575b600080fd5b61004e6100b2565b604080516001600160a01b039092168252519081900360200190f35b61004e6100c1565b6100b0600480360360a081101561008857600080fd5b506001600160a01b0381351690602081013590604081013590606081013590608001356100d0565b005b6000546001600160a01b031681565b6001546001600160a01b031681565b60008585858560016040516100e49061031e565b6001600160a01b039095168552602085019390935260408085019290925260608401529015156080830152519081900360a001906000f08015801561012d573d6000803e3d6000fd5b5060008054604080516323b872dd60e01b81523360048201526001600160a01b0380861660248301526044820188905291519495509116926323b872dd92606480840193602093929083900390910190829087803b15801561018e57600080fd5b505af11580156101a2573d6000803e3d6000fd5b505050506040513d60208110156101b857600080fd5b5050600054604080516370a0823160e01b81526001600160a01b0384811660048301529151859392909216916370a0823191602480820192602092909190829003018186803b15801561020a57600080fd5b505afa15801561021e573d6000803e3d6000fd5b505050506040513d602081101561023457600080fd5b505110156102735760405162461bcd60e51b81526004018080602001828103825260308152602001806114c16030913960400191505060405180910390fd5b6001546040805163f2fde38b60e01b81526001600160a01b03928316600482015290519183169163f2fde38b9160248082019260009290919082900301818387803b1580156102c157600080fd5b505af11580156102d5573d6000803e3d6000fd5b5050604080516001600160a01b038516815290517fe4fb76c0ff20ae19784efe78af7946d749e229fec6e13499ab078f997113d6d39350908190036020019150a1505050505050565b6111958061032c8339019056fe60806040523480156200001157600080fd5b506040516200119538038062001195833981810160405260a08110156200003757600080fd5b50805160208201516040830151606084015160809094015192939192909190620000696001600160e01b036200023e16565b600080546001600160a01b0319166001600160a01b03928316178082556040519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b038516620000f85760405162461bcd60e51b815260040180806020018281038252602d8152602001806200113d602d913960400191505060405180910390fd5b81831115620001395760405162461bcd60e51b815260040180806020018281038252602b8152602001806200116a602b913960400191505060405180910390fd5b600082116200018f576040805162461bcd60e51b815260206004820152601b60248201527f546f6b656e56657374696e673a206475726174696f6e20697320300000000000604482015290519081900360640190fd5b42620001aa83866200024260201b6200071d1790919060201c565b11620001e85760405162461bcd60e51b815260040180806020018281038252602f8152602001806200110e602f913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0387161790556005805460ff191682151517905560048290556200022e848462000242602090811b6200071d17901c565b60025550505060035550620002a4565b3390565b6000828201838110156200029d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610e5a80620002b46000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063872a78101161008c5780639852595c116100665780639852595c1461019c578063be9a6555146101c2578063f2fde38b146101ca578063fa01dc06146101f0576100cf565b8063872a7810146101705780638da5cb5b1461018c5780638f32d59b14610194576100cf565b80630fb5a6b4146100d457806313d033c0146100ee57806319165587146100f657806338af3eed1461011e578063715018a61461014257806374a8f1031461014a575b600080fd5b6100dc610216565b60408051918252519081900360200190f35b6100dc61021c565b61011c6004803603602081101561010c57600080fd5b50356001600160a01b0316610222565b005b610126610327565b604080516001600160a01b039092168252519081900360200190f35b61011c610336565b61011c6004803603602081101561016057600080fd5b50356001600160a01b03166103d9565b610178610601565b604080519115158252519081900360200190f35b61012661060a565b610178610619565b6100dc600480360360208110156101b257600080fd5b50356001600160a01b031661063d565b6100dc61065c565b61011c600480360360208110156101e057600080fd5b50356001600160a01b0316610662565b6101786004803603602081101561020657600080fd5b50356001600160a01b03166106c7565b60045490565b60025490565b600061022d826106e5565b905060008111610284576040805162461bcd60e51b815260206004820152601f60248201527f546f6b656e56657374696e673a206e6f20746f6b656e73206172652064756500604482015290519081900360640190fd5b6001600160a01b0382166000908152600660205260409020546102ad908263ffffffff61071d16565b6001600160a01b038084166000818152600660205260409020929092556001546102df9291168363ffffffff61077e16565b604080516001600160a01b03841681526020810183905281517fc7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df93179929181900390910190a15050565b6001546001600160a01b031690565b61033e610619565b61038f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103e1610619565b610432576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60055460ff16610489576040805162461bcd60e51b815260206004820152601b60248201527f546f6b656e56657374696e673a2063616e6e6f74207265766f6b650000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156104e15760405162461bcd60e51b8152600401808060200182810382526023815260200180610e036023913960400191505060405180910390fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561052b57600080fd5b505afa15801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b505190506000610564836106e5565b90506000610578838363ffffffff6107d516565b6001600160a01b0385166000908152600760205260409020805460ff1916600117905590506105bf6105a861060a565b6001600160a01b038616908363ffffffff61077e16565b604080516001600160a01b038616815290517f39983c6d4d174a7aee564f449d4a5c3c7ac9649d72b7793c56901183996f8af69181900360200190a150505050565b60055460ff1690565b6000546001600160a01b031690565b600080546001600160a01b031661062e610817565b6001600160a01b031614905090565b6001600160a01b0381166000908152600660205260409020545b919050565b60035490565b61066a610619565b6106bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106c48161081b565b50565b6001600160a01b031660009081526007602052604090205460ff1690565b6001600160a01b0381166000908152600660205260408120546107179061070b846108bb565b9063ffffffff6107d516565b92915050565b600082820183811015610777576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526107d0908490610a00565b505050565b600061077783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610bbe565b3390565b6001600160a01b0381166108605760405162461bcd60e51b8152600401808060200182810382526026815260200180610d926026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516370a0823160e01b8152306004820152905160009182916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561090657600080fd5b505afa15801561091a573d6000803e3d6000fd5b505050506040513d602081101561093057600080fd5b50516001600160a01b0384166000908152600660205260408120549192509061096090839063ffffffff61071d16565b905060025442101561097757600092505050610657565b60045460035461098c9163ffffffff61071d16565b421015806109b257506001600160a01b03841660009081526007602052604090205460ff165b156109c05791506106579050565b6109f76004546109eb6109de600354426107d590919063ffffffff16565b849063ffffffff610c5516565b9063ffffffff610cae16565b92505050610657565b610a12826001600160a01b0316610cf0565b610a63576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310610aa15780518252601f199092019160209182019101610a82565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610b03576040519150601f19603f3d011682016040523d82523d6000602084013e610b08565b606091505b509150915081610b5f576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610bb857808060200190516020811015610b7b57600080fd5b5051610bb85760405162461bcd60e51b815260040180806020018281038252602a815260200180610dd9602a913960400191505060405180910390fd5b50505050565b60008184841115610c4d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c12578181015183820152602001610bfa565b50505050905090810190601f168015610c3f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082610c6457506000610717565b82820282848281610c7157fe5b04146107775760405162461bcd60e51b8152600401808060200182810382526021815260200180610db86021913960400191505060405180910390fd5b600061077783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d2c565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610d245750808214155b949350505050565b60008183610d7b5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610c12578181015183820152602001610bfa565b506000838581610d8757fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564546f6b656e56657374696e673a20746f6b656e20616c7265616479207265766f6b6564a265627a7a72315820dc405dd5140cd0705a35031e8caab6682bdf800f47bd23f2098dc6bef12c870064736f6c63430005110032546f6b656e56657374696e673a2066696e616c2074696d65206973206265666f72652063757272656e742074696d65546f6b656e56657374696e673a2062656e656669636961727920697320746865207a65726f2061646472657373546f6b656e56657374696e673a20636c696666206973206c6f6e676572207468616e206475726174696f6e455243323056657374696e67466163746f72793a20746f6b656e207472616e7366657220756e7375636365737366756ca265627a7a723158202bca8d696ac851aca5484efba45e1244939996c9b1c29d2cab231e48624e4bf664736f6c63430005110032", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/abis/TokenVesting.json b/abis/TokenVesting.json new file mode 100644 index 0000000..920d350 --- /dev/null +++ b/abis/TokenVesting.json @@ -0,0 +1,292 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TokenVesting", + "sourceName": "openzeppelin-solidity/contracts/drafts/TokenVesting.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cliffDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "revocable", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "TokenVestingRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokensReleased", + "type": "event" + }, + { + "constant": true, + "inputs": [], + "name": "beneficiary", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "cliff", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "duration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "isOwner", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "release", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "released", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "revocable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "revoke", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "revoked", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "start", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + \ No newline at end of file diff --git a/src/mappings/ERC20VestingFactory/mapping.ts b/src/mappings/ERC20VestingFactory/mapping.ts new file mode 100644 index 0000000..ff3bc51 --- /dev/null +++ b/src/mappings/ERC20VestingFactory/mapping.ts @@ -0,0 +1,40 @@ +import { TokenVesting, VestingFactory } from '../../types/schema'; +import { + ERC20VestingFactory, + VestingCreated, +} from '../../types/templates/ERC20VestingFactory/ERC20VestingFactory'; +import { TokenVesting as TokenVestingContract } from '../../types/templates/TokenVesting/TokenVesting'; + +export function handleVestingCreated(event: VestingCreated): void { + const tokenVestingAddress = event.params.vestingContractAddress; + + // create vestingFactory with ownerAddress + token + const vestingFactory = new VestingFactory(event.address.toHexString()); + let vestingFactoryContract = ERC20VestingFactory.bind(event.address); + + vestingFactory.token = vestingFactoryContract.erc20Token().toHexString(); + vestingFactory.owner = vestingFactoryContract.vestingOwner().toHexString(); + + let tokenVestingContract = TokenVestingContract.bind(tokenVestingAddress); + + let tokenVesting = new TokenVesting(tokenVestingAddress.toHex()); + + tokenVesting.beneficiary = tokenVestingContract.beneficiary().toString(); + tokenVesting.cliff = tokenVestingContract.cliff(); + tokenVesting.start = tokenVestingContract.start(); + tokenVesting.duration = tokenVestingContract.duration(); + tokenVesting.revocable = tokenVestingContract.revocable(); + tokenVesting.released = tokenVestingContract.released( + vestingFactoryContract.erc20Token() + ); + tokenVesting.revoked = tokenVestingContract.revoked( + vestingFactoryContract.erc20Token() + ); + tokenVesting.owner = vestingFactory.owner; + tokenVesting.token = vestingFactory.token; + + vestingFactory.save(); + + tokenVesting.save(); +} + diff --git a/src/mappings/ERC20VestingFactory/schema.graphql b/src/mappings/ERC20VestingFactory/schema.graphql new file mode 100644 index 0000000..c6cf9a5 --- /dev/null +++ b/src/mappings/ERC20VestingFactory/schema.graphql @@ -0,0 +1,6 @@ +type VestingFactory @entity { + id: ID! + token: String! + owner: String! +} + diff --git a/src/mappings/ERC20VestingFactory/template.yaml b/src/mappings/ERC20VestingFactory/template.yaml new file mode 100644 index 0000000..ba9718e --- /dev/null +++ b/src/mappings/ERC20VestingFactory/template.yaml @@ -0,0 +1,10 @@ +abis: + - ERC20VestingFactory +entities: + - VestingFactory +eventHandlers: + - event: VestingCreated(address) + handler: handleVestingCreated +callHandlers: + - + diff --git a/src/mappings/TokenVesting/mapping.ts b/src/mappings/TokenVesting/mapping.ts new file mode 100644 index 0000000..d458996 --- /dev/null +++ b/src/mappings/TokenVesting/mapping.ts @@ -0,0 +1,29 @@ +import { TokenVesting } from '../../types/schema'; +import { + TokensReleased, + TokenVestingRevoked, +} from '../../types/templates/TokenVesting/TokenVesting'; + +export function handleTokensReleased(event: TokensReleased): void { + let tokenVesting = TokenVesting.load(event.address.toHexString()); + + if (!tokenVesting) return; + + tokenVesting.released = event.params.amount; + + tokenVesting.save(); +} + +export function handleTokenVestingRevoked(event: TokenVestingRevoked): void { + let tokenVesting = TokenVesting.load(event.address.toHexString()); + + if (!tokenVesting) return; + + // why does the contract have this line? there can be more than one token inside the same vesting contract? + // _revoked[address(token)] = true; + + tokenVesting.revoked = true; + + tokenVesting.save(); +} + diff --git a/src/mappings/TokenVesting/schema.graphql b/src/mappings/TokenVesting/schema.graphql new file mode 100644 index 0000000..ca8a0b3 --- /dev/null +++ b/src/mappings/TokenVesting/schema.graphql @@ -0,0 +1,13 @@ +type TokenVesting @entity { + id: ID! + owner: String! + token: String! + beneficiary: String! + cliff: BigInt! + start: BigInt! + duration: BigInt! + revocable: Boolean! + released: BigInt! + revoked: Boolean! +} + diff --git a/src/mappings/TokenVesting/template.yaml b/src/mappings/TokenVesting/template.yaml new file mode 100644 index 0000000..5ec2a1d --- /dev/null +++ b/src/mappings/TokenVesting/template.yaml @@ -0,0 +1,12 @@ +abis: + - TokenVesting +entities: + - TokenVesting +eventHandlers: + - event: TokensReleased(address,uint256) + handler: handleTokensReleased + - event: TokenVestingRevoked(address) + handler: handleTokenVestingRevoked +callHandlers: + - +