Climate Impact
- π΅ Maximizing Climate Impact
- π§ββοΈ Project Review Process
- π Climate Council
Green Tokens
Building on Green Tokens
π» Building Protocols
How to integrate Spirals gToken vaults into your protocolβs smart contracts
The following code snippets show an example of how you can integrate the Spirals
vault contracts into your smart contracts. Please create a new file
GreenTokenVaultInterface.sol
in your project to import the interface in your
contract files and get started on these code examples π
{
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_assetsDeposited",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_sharesMinted",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "_receiver",
"type": "address"
}
],
"name": "Deposit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "_receiver",
"type": "address"
}
],
"name": "WithdrawAsset",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "asset",
"outputs": [
{
"internalType": "contract IERC20Upgradeable",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amountYieldAsset",
"type": "uint256"
}
],
"name": "convertToAsset",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amountAsset",
"type": "uint256"
}
],
"name": "convertToYieldAsset",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_receiver",
"type": "address"
}
],
"name": "deposit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_receiver",
"type": "address"
}
],
"name": "depositETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "getAPY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_address",
"type": "address"
}
],
"name": "getYield",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalYield",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalYieldUSD",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"name": "withdrawYieldAsset",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
}
],
"name": "withdrawals",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "yieldAsset",
"outputs": [
{
"internalType": "contract IERC20Upgradeable",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": {
"object": "0x",
"sourceMap": "",
"linkReferences": {}
},
"deployedBytecode": {
"object": "0x",
"sourceMap": "",
"linkReferences": {}
},
"methodIdentifiers": {
"allowance(address,address)": "dd62ed3e",
"approve(address,uint256)": "095ea7b3",
"asset()": "38d52e0f",
"balanceOf(address)": "70a08231",
"convertToAsset(uint256)": "4b5a2465",
"convertToYieldAsset(uint256)": "f8d368ee",
"decimals()": "313ce567",
"deposit(uint256,address)": "6e553f65",
"depositETH(address)": "2d2da806",
"getAPY()": "d2cbf7ad",
"getYield(address)": "64c33977",
"name()": "06fdde03",
"owner()": "8da5cb5b",
"paused()": "5c975abb",
"symbol()": "95d89b41",
"totalSupply()": "18160ddd",
"totalYield()": "01418205",
"totalYieldUSD()": "8471c44d",
"transfer(address,uint256)": "a9059cbb",
"transferFrom(address,address,uint256)": "23b872dd",
"withdraw(uint256,address,address)": "b460af94",
"withdrawYieldAsset(uint256,address,address)": "284e7335",
"withdrawals(address)": "7a9262a2",
"yieldAsset()": "095b1837"
},
"rawMetadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_assetsDeposited\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_sharesMinted\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"WithdrawAsset\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountYieldAsset\",\"type\":\"uint256\"}],\"name\":\"convertToAsset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountAsset\",\"type\":\"uint256\"}],\"name\":\"convertToYieldAsset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"depositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAPY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getYield\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalYield\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalYieldUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"withdrawYieldAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"withdrawals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"yieldAsset\",\"outputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/GreenTokenVaultInterface.sol\":\"GreenTokenVaultInterface\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@celo-foundry/=lib/celo-foundry/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rocketpool/=lib/rocketpool/contracts/\",\":@solmate/=lib/solmate/src/\",\":@staked-celo/=lib/staked-celo/contracts/\",\":@yearn-vaults/=lib/yearn-vaults/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":lido-dao/=lib/lido-dao/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":rocketpool/=lib/rocketpool/\",\":solmate/=lib/solmate/src/\",\":staked-celo/=lib/staked-celo/contracts/\",\":yearn-vaults/=lib/yearn-vaults/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol\":{\"keccak256\":\"0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad\",\"dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0xf8313972e73a49ff9a8c2dee0b9a07a3585bc4d077bd8a9670ebdd76ff390177\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3fc2a0888fca21e976b4b77ca46891f547ff339a8175bc0a6461a62ce65aa89a\",\"dweb:/ipfs/QmYDpaGK98esv36MBanhjgzpS7QcisrsVMzttPknvxWhRG\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"src/interfaces/GreenTokenVaultInterface.sol\":{\"keccak256\":\"0x9e798153004dd71351d7051c4421c38ae330fd96a9e76d12da1964751bce3ea1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://995708fe49064f0f1abe5570339b79042603dffde2e9c9535b5aaad69193ea2b\",\"dweb:/ipfs/QmezY7gPPt64Ncz3CkkKXNKootCWdvzinMgwcUoo2THGr7\"]},\"src/interfaces/ImpactVaultInterface.sol\":{\"keccak256\":\"0xe9621bfde4adf31fe4d27cb601a46bbb142fa3741517eba4be6b21398c71510a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://079fe8ed3b869f938ad45a97da9d2ac9c4d914c96202623167eff00cdd5a0c1b\",\"dweb:/ipfs/QmRR3Q2C2iDLDbqFSHrAvfHpy356ySczTR5PViW7gW2sb7\"]}},\"version\":1}",
"metadata": {
"compiler": {
"version": "0.8.11+commit.d7f03943"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "spender",
"type": "address",
"indexed": true
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256",
"indexed": false
}
],
"type": "event",
"name": "Approval",
"anonymous": false
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_assetsDeposited",
"type": "uint256",
"indexed": false
},
{
"internalType": "uint256",
"name": "_sharesMinted",
"type": "uint256",
"indexed": false
},
{
"internalType": "address",
"name": "_receiver",
"type": "address",
"indexed": false
}
],
"type": "event",
"name": "Deposit",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address",
"indexed": true
},
{
"internalType": "address",
"name": "to",
"type": "address",
"indexed": true
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256",
"indexed": false
}
],
"type": "event",
"name": "Transfer",
"anonymous": false
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256",
"indexed": false
},
{
"internalType": "address",
"name": "_owner",
"type": "address",
"indexed": false
},
{
"internalType": "address",
"name": "_receiver",
"type": "address",
"indexed": false
}
],
"type": "event",
"name": "WithdrawAsset",
"anonymous": false
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"stateMutability": "view",
"type": "function",
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
]
},
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "function",
"name": "asset",
"outputs": [
{
"internalType": "contract IERC20Upgradeable",
"name": "",
"type": "address"
}
]
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"stateMutability": "view",
"type": "function",
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amountYieldAsset",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"name": "convertToAsset",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amountAsset",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function",
"name": "convertToYieldAsset",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_receiver",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "deposit"
},
{
"inputs": [
{
"internalType": "address",
"name": "_receiver",
"type": "address"
}
],
"stateMutability": "payable",
"type": "function",
"name": "depositETH"
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "getAPY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "address",
"name": "_address",
"type": "address"
}
],
"stateMutability": "view",
"type": "function",
"name": "getYield",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "totalYield",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "view",
"type": "function",
"name": "totalYieldUSD",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
]
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
]
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "withdraw"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "address",
"name": "_owner",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function",
"name": "withdrawYieldAsset"
},
{
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
}
],
"stateMutability": "view",
"type": "function",
"name": "withdrawals",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
]
},
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "function",
"name": "yieldAsset",
"outputs": [
{
"internalType": "contract IERC20Upgradeable",
"name": "",
"type": "address"
}
]
}
],
"devdoc": {
"kind": "dev",
"methods": {
"allowance(address,address)": {
"details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
},
"approve(address,uint256)": {
"details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."
},
"balanceOf(address)": {
"details": "Returns the amount of tokens owned by `account`."
},
"decimals()": {
"details": "Returns the decimals places of the token."
},
"name()": {
"details": "Returns the name of the token."
},
"symbol()": {
"details": "Returns the symbol of the token."
},
"totalSupply()": {
"details": "Returns the amount of tokens in existence."
},
"transfer(address,uint256)": {
"details": "Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
},
"transferFrom(address,address,uint256)": {
"details": "Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"remappings": [
":@celo-foundry/=lib/celo-foundry/src/",
":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
":@rocketpool/=lib/rocketpool/contracts/",
":@solmate/=lib/solmate/src/",
":@staked-celo/=lib/staked-celo/contracts/",
":@yearn-vaults/=lib/yearn-vaults/contracts/",
":ds-test/=lib/forge-std/lib/ds-test/src/",
":forge-std/=lib/forge-std/src/",
":lido-dao/=lib/lido-dao/",
":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
":openzeppelin-contracts/=lib/openzeppelin-contracts/",
":rocketpool/=lib/rocketpool/",
":solmate/=lib/solmate/src/",
":staked-celo/=lib/staked-celo/contracts/",
":yearn-vaults/=lib/yearn-vaults/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"compilationTarget": {
"src/interfaces/GreenTokenVaultInterface.sol": "GreenTokenVaultInterface"
},
"libraries": {}
},
"sources": {
"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": {
"keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888",
"urls": [
"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a",
"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb"
],
"license": "MIT"
},
"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
"keccak256": "0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e",
"urls": [
"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497",
"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8"
],
"license": "MIT"
},
"lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol": {
"keccak256": "0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250",
"urls": [
"bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad",
"dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR"
],
"license": "MIT"
},
"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
"keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
"urls": [
"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
],
"license": "MIT"
},
"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": {
"keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb",
"urls": [
"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d",
"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"
],
"license": "MIT"
},
"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
"keccak256": "0xf8313972e73a49ff9a8c2dee0b9a07a3585bc4d077bd8a9670ebdd76ff390177",
"urls": [
"bzz-raw://3fc2a0888fca21e976b4b77ca46891f547ff339a8175bc0a6461a62ce65aa89a",
"dweb:/ipfs/QmYDpaGK98esv36MBanhjgzpS7QcisrsVMzttPknvxWhRG"
],
"license": "MIT"
},
"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
"keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
"urls": [
"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
],
"license": "MIT"
},
"src/interfaces/GreenTokenVaultInterface.sol": {
"keccak256": "0x9e798153004dd71351d7051c4421c38ae330fd96a9e76d12da1964751bce3ea1",
"urls": [
"bzz-raw://995708fe49064f0f1abe5570339b79042603dffde2e9c9535b5aaad69193ea2b",
"dweb:/ipfs/QmezY7gPPt64Ncz3CkkKXNKootCWdvzinMgwcUoo2THGr7"
],
"license": "Apache-2.0"
},
"src/interfaces/ImpactVaultInterface.sol": {
"keccak256": "0xe9621bfde4adf31fe4d27cb601a46bbb142fa3741517eba4be6b21398c71510a",
"urls": [
"bzz-raw://079fe8ed3b869f938ad45a97da9d2ac9c4d914c96202623167eff00cdd5a0c1b",
"dweb:/ipfs/QmRR3Q2C2iDLDbqFSHrAvfHpy356ySczTR5PViW7gW2sb7"
],
"license": "Apache-2.0"
}
},
"version": 1
},
"ast": {
"absolutePath": "src/interfaces/GreenTokenVaultInterface.sol",
"id": 35830,
"exportedSymbols": {
"AddressUpgradeable": [
28875
],
"ContextUpgradeable": [
28917
],
"GreenTokenVaultInterface": [
35829
],
"IERC20MetadataUpgradeable": [
28094
],
"IERC20Upgradeable": [
27348
],
"ImpactVaultInterface": [
38834
],
"Initializable": [
26459
],
"OwnableUpgradeable": [
26140
],
"PausableUpgradeable": [
26586
]
},
"nodeType": "SourceUnit",
"src": "100:2845:76",
"nodes": [
{
"id": 35709,
"nodeType": "PragmaDirective",
"src": "100:23:76",
"nodes": [],
"literals": [
"solidity",
"0.8",
".11"
]
},
{
"id": 35710,
"nodeType": "ImportDirective",
"src": "125:49:76",
"nodes": [],
"absolutePath": "src/interfaces/ImpactVaultInterface.sol",
"file": "src/interfaces/ImpactVaultInterface.sol",
"nameLocation": "-1:-1:-1",
"scope": 35830,
"sourceUnit": 38835,
"symbolAliases": [],
"unitAlias": ""
},
{
"id": 35711,
"nodeType": "ImportDirective",
"src": "175:98:76",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol",
"file": "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol",
"nameLocation": "-1:-1:-1",
"scope": 35830,
"sourceUnit": 28095,
"symbolAliases": [],
"unitAlias": ""
},
{
"id": 35712,
"nodeType": "ImportDirective",
"src": "274:78:76",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol",
"file": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol",
"nameLocation": "-1:-1:-1",
"scope": 35830,
"sourceUnit": 26587,
"symbolAliases": [],
"unitAlias": ""
},
{
"id": 35713,
"nodeType": "ImportDirective",
"src": "353:75:76",
"nodes": [],
"absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
"file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
"nameLocation": "-1:-1:-1",
"scope": 35830,
"sourceUnit": 26141,
"symbolAliases": [],
"unitAlias": ""
},
{
"id": 35829,
"nodeType": "ContractDefinition",
"src": "430:2514:76",
"nodes": [
{
"id": 35723,
"nodeType": "EventDefinition",
"src": "500:112:76",
"nodes": [],
"anonymous": false,
"name": "Deposit",
"nameLocation": "506:7:76",
"parameters": {
"id": 35722,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35717,
"indexed": false,
"mutability": "mutable",
"name": "_assetsDeposited",
"nameLocation": "531:16:76",
"nodeType": "VariableDeclaration",
"scope": 35723,
"src": "523:24:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35716,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "523:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35719,
"indexed": false,
"mutability": "mutable",
"name": "_sharesMinted",
"nameLocation": "565:13:76",
"nodeType": "VariableDeclaration",
"scope": 35723,
"src": "557:21:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35718,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "557:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35721,
"indexed": false,
"mutability": "mutable",
"name": "_receiver",
"nameLocation": "596:9:76",
"nodeType": "VariableDeclaration",
"scope": 35723,
"src": "588:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35720,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "588:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "513:98:76"
}
},
{
"id": 35731,
"nodeType": "EventDefinition",
"src": "617:72:76",
"nodes": [],
"anonymous": false,
"name": "WithdrawAsset",
"nameLocation": "623:13:76",
"parameters": {
"id": 35730,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35725,
"indexed": false,
"mutability": "mutable",
"name": "_amount",
"nameLocation": "645:7:76",
"nodeType": "VariableDeclaration",
"scope": 35731,
"src": "637:15:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35724,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "637:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35727,
"indexed": false,
"mutability": "mutable",
"name": "_owner",
"nameLocation": "662:6:76",
"nodeType": "VariableDeclaration",
"scope": 35731,
"src": "654:14:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35726,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "654:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35729,
"indexed": false,
"mutability": "mutable",
"name": "_receiver",
"nameLocation": "678:9:76",
"nodeType": "VariableDeclaration",
"scope": 35731,
"src": "670:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35728,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "670:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "636:52:76"
}
},
{
"id": 35736,
"nodeType": "FunctionDefinition",
"src": "695:47:76",
"nodes": [],
"functionSelector": "5c975abb",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "paused",
"nameLocation": "704:6:76",
"parameters": {
"id": 35732,
"nodeType": "ParameterList",
"parameters": [],
"src": "710:2:76"
},
"returnParameters": {
"id": 35735,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35734,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35736,
"src": "736:4:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 35733,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "736:4:76",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "735:6:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35741,
"nodeType": "FunctionDefinition",
"src": "748:49:76",
"nodes": [],
"functionSelector": "8da5cb5b",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "owner",
"nameLocation": "757:5:76",
"parameters": {
"id": 35737,
"nodeType": "ParameterList",
"parameters": [],
"src": "762:2:76"
},
"returnParameters": {
"id": 35740,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35739,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35741,
"src": "788:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35738,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "788:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "787:9:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35747,
"nodeType": "FunctionDefinition",
"src": "840:54:76",
"nodes": [],
"functionSelector": "38d52e0f",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "asset",
"nameLocation": "849:5:76",
"parameters": {
"id": 35742,
"nodeType": "ParameterList",
"parameters": [],
"src": "854:2:76"
},
"returnParameters": {
"id": 35746,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35745,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35747,
"src": "875:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Upgradeable_$27348",
"typeString": "contract IERC20Upgradeable"
},
"typeName": {
"id": 35744,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 35743,
"name": "IERC20Upgradeable",
"nodeType": "IdentifierPath",
"referencedDeclaration": 27348,
"src": "875:17:76"
},
"referencedDeclaration": 27348,
"src": "875:17:76",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Upgradeable_$27348",
"typeString": "contract IERC20Upgradeable"
}
},
"visibility": "internal"
}
],
"src": "874:19:76"
},
"scope": 35829,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 35753,
"nodeType": "FunctionDefinition",
"src": "950:59:76",
"nodes": [],
"functionSelector": "095b1837",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "yieldAsset",
"nameLocation": "959:10:76",
"parameters": {
"id": 35748,
"nodeType": "ParameterList",
"parameters": [],
"src": "969:2:76"
},
"returnParameters": {
"id": 35752,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35751,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35753,
"src": "990:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Upgradeable_$27348",
"typeString": "contract IERC20Upgradeable"
},
"typeName": {
"id": 35750,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 35749,
"name": "IERC20Upgradeable",
"nodeType": "IdentifierPath",
"referencedDeclaration": 27348,
"src": "990:17:76"
},
"referencedDeclaration": 27348,
"src": "990:17:76",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IERC20Upgradeable_$27348",
"typeString": "contract IERC20Upgradeable"
}
},
"visibility": "internal"
}
],
"src": "989:19:76"
},
"scope": 35829,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 35760,
"nodeType": "FunctionDefinition",
"src": "1062:62:76",
"nodes": [],
"functionSelector": "6e553f65",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "deposit",
"nameLocation": "1071:7:76",
"parameters": {
"id": 35758,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35755,
"mutability": "mutable",
"name": "_amount",
"nameLocation": "1087:7:76",
"nodeType": "VariableDeclaration",
"scope": 35760,
"src": "1079:15:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35754,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1079:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35757,
"mutability": "mutable",
"name": "_receiver",
"nameLocation": "1104:9:76",
"nodeType": "VariableDeclaration",
"scope": 35760,
"src": "1096:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35756,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1096:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1078:36:76"
},
"returnParameters": {
"id": 35759,
"nodeType": "ParameterList",
"parameters": [],
"src": "1123:0:76"
},
"scope": 35829,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 35765,
"nodeType": "FunctionDefinition",
"src": "1185:56:76",
"nodes": [],
"functionSelector": "2d2da806",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "depositETH",
"nameLocation": "1194:10:76",
"parameters": {
"id": 35763,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35762,
"mutability": "mutable",
"name": "_receiver",
"nameLocation": "1213:9:76",
"nodeType": "VariableDeclaration",
"scope": 35765,
"src": "1205:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35761,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1205:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1204:19:76"
},
"returnParameters": {
"id": 35764,
"nodeType": "ParameterList",
"parameters": [],
"src": "1240:0:76"
},
"scope": 35829,
"stateMutability": "payable",
"virtual": false,
"visibility": "external"
},
{
"id": 35774,
"nodeType": "FunctionDefinition",
"src": "1307:109:76",
"nodes": [],
"functionSelector": "b460af94",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "withdraw",
"nameLocation": "1316:8:76",
"parameters": {
"id": 35772,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35767,
"mutability": "mutable",
"name": "_amount",
"nameLocation": "1342:7:76",
"nodeType": "VariableDeclaration",
"scope": 35774,
"src": "1334:15:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35766,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1334:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35769,
"mutability": "mutable",
"name": "_receiver",
"nameLocation": "1367:9:76",
"nodeType": "VariableDeclaration",
"scope": 35774,
"src": "1359:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35768,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1359:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35771,
"mutability": "mutable",
"name": "_owner",
"nameLocation": "1394:6:76",
"nodeType": "VariableDeclaration",
"scope": 35774,
"src": "1386:14:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35770,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1386:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1324:82:76"
},
"returnParameters": {
"id": 35773,
"nodeType": "ParameterList",
"parameters": [],
"src": "1415:0:76"
},
"scope": 35829,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 35783,
"nodeType": "FunctionDefinition",
"src": "1604:119:76",
"nodes": [],
"functionSelector": "284e7335",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "withdrawYieldAsset",
"nameLocation": "1613:18:76",
"parameters": {
"id": 35781,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35776,
"mutability": "mutable",
"name": "_amount",
"nameLocation": "1649:7:76",
"nodeType": "VariableDeclaration",
"scope": 35783,
"src": "1641:15:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35775,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1641:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35778,
"mutability": "mutable",
"name": "_receiver",
"nameLocation": "1674:9:76",
"nodeType": "VariableDeclaration",
"scope": 35783,
"src": "1666:17:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35777,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1666:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35780,
"mutability": "mutable",
"name": "_owner",
"nameLocation": "1701:6:76",
"nodeType": "VariableDeclaration",
"scope": 35783,
"src": "1693:14:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35779,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1693:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1631:82:76"
},
"returnParameters": {
"id": 35782,
"nodeType": "ParameterList",
"parameters": [],
"src": "1722:0:76"
},
"scope": 35829,
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"id": 35792,
"nodeType": "FunctionDefinition",
"src": "1946:101:76",
"nodes": [],
"functionSelector": "7a9262a2",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "withdrawals",
"nameLocation": "1955:11:76",
"parameters": {
"id": 35786,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35785,
"mutability": "mutable",
"name": "_user",
"nameLocation": "1975:5:76",
"nodeType": "VariableDeclaration",
"scope": 35792,
"src": "1967:13:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35784,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1967:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1966:15:76"
},
"returnParameters": {
"id": 35791,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35788,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35792,
"src": "2029:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35787,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2029:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 35790,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35792,
"src": "2038:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35789,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2038:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2028:18:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35797,
"nodeType": "FunctionDefinition",
"src": "2123:54:76",
"nodes": [],
"functionSelector": "01418205",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "totalYield",
"nameLocation": "2132:10:76",
"parameters": {
"id": 35793,
"nodeType": "ParameterList",
"parameters": [],
"src": "2142:2:76"
},
"returnParameters": {
"id": 35796,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35795,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35797,
"src": "2168:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35794,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2168:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2167:9:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35802,
"nodeType": "FunctionDefinition",
"src": "2258:57:76",
"nodes": [],
"functionSelector": "8471c44d",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "totalYieldUSD",
"nameLocation": "2267:13:76",
"parameters": {
"id": 35798,
"nodeType": "ParameterList",
"parameters": [],
"src": "2280:2:76"
},
"returnParameters": {
"id": 35801,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35800,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35802,
"src": "2306:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35799,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2306:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2305:9:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35809,
"nodeType": "FunctionDefinition",
"src": "2405:68:76",
"nodes": [],
"functionSelector": "64c33977",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "getYield",
"nameLocation": "2414:8:76",
"parameters": {
"id": 35805,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35804,
"mutability": "mutable",
"name": "_address",
"nameLocation": "2431:8:76",
"nodeType": "VariableDeclaration",
"scope": 35809,
"src": "2423:16:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 35803,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2423:7:76",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "2422:18:76"
},
"returnParameters": {
"id": 35808,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35807,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35809,
"src": "2464:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35806,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2464:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2463:9:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35814,
"nodeType": "FunctionDefinition",
"src": "2550:50:76",
"nodes": [],
"functionSelector": "d2cbf7ad",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "getAPY",
"nameLocation": "2559:6:76",
"parameters": {
"id": 35810,
"nodeType": "ParameterList",
"parameters": [],
"src": "2565:2:76"
},
"returnParameters": {
"id": 35813,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35812,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35814,
"src": "2591:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35811,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2591:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2590:9:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35821,
"nodeType": "FunctionDefinition",
"src": "2664:107:76",
"nodes": [],
"functionSelector": "4b5a2465",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "convertToAsset",
"nameLocation": "2673:14:76",
"parameters": {
"id": 35817,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35816,
"mutability": "mutable",
"name": "_amountYieldAsset",
"nameLocation": "2696:17:76",
"nodeType": "VariableDeclaration",
"scope": 35821,
"src": "2688:25:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35815,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2688:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2687:27:76"
},
"returnParameters": {
"id": 35820,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35819,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35821,
"src": "2762:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35818,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2762:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2761:9:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"id": 35828,
"nodeType": "FunctionDefinition",
"src": "2835:107:76",
"nodes": [],
"functionSelector": "f8d368ee",
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "convertToYieldAsset",
"nameLocation": "2844:19:76",
"parameters": {
"id": 35824,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35823,
"mutability": "mutable",
"name": "_amountAsset",
"nameLocation": "2872:12:76",
"nodeType": "VariableDeclaration",
"scope": 35828,
"src": "2864:20:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35822,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2864:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2863:22:76"
},
"returnParameters": {
"id": 35827,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 35826,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 35828,
"src": "2933:7:76",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 35825,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2933:7:76",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "2932:9:76"
},
"scope": 35829,
"stateMutability": "view",
"virtual": false,
"visibility": "external"
}
],
"abstract": false,
"baseContracts": [
{
"baseName": {
"id": 35714,
"name": "IERC20MetadataUpgradeable",
"nodeType": "IdentifierPath",
"referencedDeclaration": 28094,
"src": "468:25:76"
},
"id": 35715,
"nodeType": "InheritanceSpecifier",
"src": "468:25:76"
}
],
"canonicalName": "GreenTokenVaultInterface",
"contractDependencies": [],
"contractKind": "interface",
"fullyImplemented": false,
"linearizedBaseContracts": [
35829,
28094,
27348
],
"name": "GreenTokenVaultInterface",
"nameLocation": "440:24:76",
"scope": 35830,
"usedErrors": []
}
],
"license": "Apache-2.0"
},
"id": 76
}
Depositing into vault
Once again, we start with a simple example where the contract being integrated
deposit _amount
of token into the vault.
contract MyContract {
ImpactVaultInterface gTokenVault;
constructor(address _gTokenVaultAddress) {
gTokenVault = ImpactVaultInterface(_gTokenVaultAddress);
}
/**
* @dev Deposits tokens into gToken vault on behalf of receiver.
* Assumes that the contract has enough tokens already.
*/
function gTokenDeposit(uint256 _amount, address _receiver) {
require(gTokenVault.asset().balanceOf(address(this)) >= _amount, "AMOUNT_EXCEEDS_TOKEN_BALANCE");
gTokenVault.asset().approve(address(gTokenVault), _amount);
gTokenVault.deposit(_amount, address(this));
}
}
For native tokens like ETH and Celo, use depositETH(address _receiver) payable
Reading gToken balances
Similarly, we can also pretty easily read the gToken balances using the method thatβs available on the interface.
contract MyContract {
ImpactVaultInterface gTokenVault;
constructor(address _gTokenVaultAddress) {
gTokenVault = ImpactVaultInterface(_gTokenVaultAddress);
}
/**
* @dev Returns the gToken balance of the user.
*/
function getGTokenBalance(address _user) {
return gTokenVault.balanceOf(_user);
}
}
Now letβs put the 2 snippets together so that on deposit we return the amount of gTokens the receiver gets through a deposit function call.
Putting it together
contract MyContract {
ImpactVaultInterface gTokenVault;
constructor(address _gTokenVaultAddress) {
gTokenVault = ImpactVaultInterface(_gTokenVaultAddress);
}
/**
* @dev Deposits tokens into gToken vault on behalf of receiver.
* Assumes that the contract has enough tokens already to support this.
* Returns the number of gTokens recieved by the user.
*/
function gTokenDeposit(uint256 _amount, address _receiver) returns (uint256) {
require(gTokenVault.asset().balanceOf(address(this)) >= _amount, "AMOUNT_EXCEEDS_TOKEN_BALANCE");
gTokenVault.asset().approve(address(gTokenVault), _amount);
uint256 gTokenPreDepositBalance = getGTokenBalance(_receiver);
gTokenVault.deposit(_amount, address(this));
return getGTokenBalance(_receiver) - gTokenPreDepositBalance;
}
/**
* @dev Returns the gToken balance of the user.
*/
function getGTokenBalance(address _user) {
return gTokenVault.balanceOf(_user);
}
}
Sweet! Now we have a full end-to-end example of a smart contract that deposits an ERC-20 token into the gToken vault on behalf of a receiver and returns the amount of gTokens received π€