Skip to content

Commit

Permalink
Working version
Browse files Browse the repository at this point in the history
  • Loading branch information
MikaIsaak committed Jul 14, 2024
1 parent 2afabc4 commit 61fe7d1
Show file tree
Hide file tree
Showing 45 changed files with 92 additions and 103 deletions.
1 change: 1 addition & 0 deletions cache_forge/solidity-files-cache.json

Large diffs are not rendered by default.

125 changes: 29 additions & 96 deletions contracts/erc4626/Vault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,56 +18,6 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import "../common/safe-HTS/SafeHTS.sol";
import "../common/safe-HTS/IHederaTokenService.sol";

/**
* @title Vault
*
* The contract which represents a custom Vault.
*
* /**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}

/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}

/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}

/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}

/**
* @title Hedera Vault
*
Expand All @@ -76,7 +26,6 @@ library SafeMath {
contract HederaVault is IERC4626, FeeConfiguration, TokenBalancer, Ownable, ReentrancyGuard {
using SafeTransferLib for ERC20;
using FixedPointMathLib for uint256;
using SafeMath for uint256;
using Bits for uint256;

// Staking token
Expand Down Expand Up @@ -564,27 +513,36 @@ contract HederaVault is IERC4626, FeeConfiguration, TokenBalancer, Ownable, Reen
* @return The index of the start position after the last claimed reward and the total number of reward tokens.
*/
function claimAllReward(uint256 _startPosition) public payable returns (uint256, uint256) {
// Get the total number of reward tokens available in the vault
uint256 rewardTokensSize = rewardTokens.length;

// Loop through the reward tokens starting from the specified position
for (uint256 i = _startPosition; i < rewardTokensSize && i < _startPosition + 10; i++) {
// Get the current reward token address
address token = rewardTokens[i];
// Calculate the total unlocked reward for the caller for this token
uint256 totalUnlockedReward = getUserReward(token, msg.sender);

// If there are no rewards to claim, skip to the next token
if (totalUnlockedReward == 0) {
continue;
}
// // Get the total number of reward tokens available in the vault
// uint256 rewardTokensSize = rewardTokens.length;

// // Loop through the reward tokens starting from the specified position
// for (uint256 i = _startPosition; i < rewardTokensSize && i < _startPosition + 10; i++) {
// // Get the current reward token address
// address token = rewardTokens[i];
// // Calculate the total unlocked reward for the caller for this token
// uint256 totalUnlockedReward = getUserReward(token, msg.sender);

// // If there are no rewards to claim, skip to the next token
// if (totalUnlockedReward == 0) {
// continue;
// }

// // Transfer the unlocked reward tokens from the vault to the caller
// SafeHTS.safeTransferToken(token, address(this), msg.sender, int64(uint64(totalUnlockedReward)));
// }

// Transfer the unlocked reward tokens from the vault to the caller
SafeHTS.safeTransferToken(token, address(this), msg.sender, int64(uint64(totalUnlockedReward)));
}
//TEST
// WORK ONLY IN THIS WAY
// MAYBE DUE TO ARRAY GAS USAGE
address token = rewardTokens[0];
SafeHTS.safeTransferToken(token, address(this), msg.sender, int64(uint64(getUserReward(msg.sender, token))));

// Return the start position after the last claimed reward and the total number of reward tokens
return (_startPosition, rewardTokensSize);
// return (_startPosition, rewardTokensSize);

//TEST
return (_startPosition, 1);
}

/**
Expand Down Expand Up @@ -701,31 +659,6 @@ contract HederaVault is IERC4626, FeeConfiguration, TokenBalancer, Ownable, Reen
* @param _currentTime The current block timestamp.
*/
function _addRewardPeriod(address _token, uint256 _amount, uint256 _currentTime) internal {
// // Ensure the token address is not zero (an invalid address)
// require(_token != address(0), "Vault: Token address can't be zero");
// // Ensure the amount is not zero
// require(_amount != 0, "Vault: Amount can't be zero");
// // Ensure the current time is not zero
// require(_currentTime != 0, "Vault: Current time can't be zero");

// // Retrieve the rewards information for the specified token
// RewardsInfo storage rewardInfo = tokensRewardInfo[_token];
// // Get the number of existing reward periods for this token
// uint256 rewardPeriodsLength = rewardInfo.rewardPeriods.length;

// // If there are existing reward periods, update the end time of the last period
// if (rewardPeriodsLength > 0) {
// rewardInfo.rewardPeriods[rewardPeriodsLength - 1].endTime = _currentTime;
// }

// // Calculate the reward per share for the new period
// uint256 rewardPerShare = _amount / assetTotalSupply;

// // Add a new reward period starting at the current time with the calculated reward per share
// rewardInfo.rewardPeriods.push(
// RewardPeriod({startTime: _currentTime, endTime: 0, rewardPerShare: rewardPerShare})
// );

// Ensure the token address is not zero (an invalid address)
require(_token != address(0), "Vault: Token address can't be zero");
// Ensure the amount is not zero
Expand All @@ -744,8 +677,8 @@ contract HederaVault is IERC4626, FeeConfiguration, TokenBalancer, Ownable, Reen
}

// Calculate the reward per share for the new period
uint256 rewardPerShare = _amount.div(assetTotalSupply);
require(rewardPerShare > 0, "Vault: rewardPerShare must be greater than zero");
uint256 rewardPerShare = _amount.mulDivDown(1, assetTotalSupply);
// require(rewardPerShare > 0, "Vault: rewardPerShare must be greater than zero");

// Add a new reward period starting at the current time with the calculated reward per share
rewardInfo.rewardPeriods.push(
Expand Down
1 change: 1 addition & 0 deletions out/Base.sol/CommonBase.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Base.sol\":\"CommonBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@pythnetwork/=node_modules/@pythnetwork/\",\":eth-gas-reporter/=node_modules/eth-gas-reporter/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\"]},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678\",\"dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xfd9e719ff0673fdd8ff83bbe72ee8cae0273d61937d27fde5d9159d9849233f4\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b14aaef0d76f2e5257e4e3ab33895d5260d4c7707ff4d37fea1f31d25c8684a8\",\"dweb:/ipfs/QmRd6BMh4FNDPW8Niy4TU2XrtKqAc6GRTfw8xjSwpQ42Gy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@pythnetwork/=node_modules/@pythnetwork/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std/=lib/forge-std/src/","hardhat/=node_modules/hardhat/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Base.sol":"CommonBase"},"evmVersion":"paris","libraries":{}},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3","urls":["bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678","dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xfd9e719ff0673fdd8ff83bbe72ee8cae0273d61937d27fde5d9159d9849233f4","urls":["bzz-raw://b14aaef0d76f2e5257e4e3ab33895d5260d4c7707ff4d37fea1f31d25c8684a8","dweb:/ipfs/QmRd6BMh4FNDPW8Niy4TU2XrtKqAc6GRTfw8xjSwpQ42Gy"],"license":"MIT OR Apache-2.0"}},"version":1},"id":3}
1 change: 1 addition & 0 deletions out/Base.sol/ScriptBase.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Base.sol\":\"ScriptBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@pythnetwork/=node_modules/@pythnetwork/\",\":eth-gas-reporter/=node_modules/eth-gas-reporter/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\"]},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678\",\"dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xfd9e719ff0673fdd8ff83bbe72ee8cae0273d61937d27fde5d9159d9849233f4\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b14aaef0d76f2e5257e4e3ab33895d5260d4c7707ff4d37fea1f31d25c8684a8\",\"dweb:/ipfs/QmRd6BMh4FNDPW8Niy4TU2XrtKqAc6GRTfw8xjSwpQ42Gy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@pythnetwork/=node_modules/@pythnetwork/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std/=lib/forge-std/src/","hardhat/=node_modules/hardhat/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Base.sol":"ScriptBase"},"evmVersion":"paris","libraries":{}},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3","urls":["bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678","dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xfd9e719ff0673fdd8ff83bbe72ee8cae0273d61937d27fde5d9159d9849233f4","urls":["bzz-raw://b14aaef0d76f2e5257e4e3ab33895d5260d4c7707ff4d37fea1f31d25c8684a8","dweb:/ipfs/QmRd6BMh4FNDPW8Niy4TU2XrtKqAc6GRTfw8xjSwpQ42Gy"],"license":"MIT OR Apache-2.0"}},"version":1},"id":3}
1 change: 1 addition & 0 deletions out/Base.sol/TestBase.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Base.sol\":\"TestBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@pythnetwork/=node_modules/@pythnetwork/\",\":eth-gas-reporter/=node_modules/eth-gas-reporter/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\"]},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678\",\"dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xfd9e719ff0673fdd8ff83bbe72ee8cae0273d61937d27fde5d9159d9849233f4\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b14aaef0d76f2e5257e4e3ab33895d5260d4c7707ff4d37fea1f31d25c8684a8\",\"dweb:/ipfs/QmRd6BMh4FNDPW8Niy4TU2XrtKqAc6GRTfw8xjSwpQ42Gy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@pythnetwork/=node_modules/@pythnetwork/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std/=lib/forge-std/src/","hardhat/=node_modules/hardhat/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Base.sol":"TestBase"},"evmVersion":"paris","libraries":{}},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0x651d84d948832f0ef45686417aa68ffb871378fa788a4123dbf37844903c66f3","urls":["bzz-raw://ff20f5ac9de3dc3ba86b1bf1f2723174e82ce3499ad67cb0ccfa7d28baeee678","dweb:/ipfs/QmRZkUFKz7AmF7yk6o317sk822HHhGVPXZQgX8G4LfYfft"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xfd9e719ff0673fdd8ff83bbe72ee8cae0273d61937d27fde5d9159d9849233f4","urls":["bzz-raw://b14aaef0d76f2e5257e4e3ab33895d5260d4c7707ff4d37fea1f31d25c8684a8","dweb:/ipfs/QmRd6BMh4FNDPW8Niy4TU2XrtKqAc6GRTfw8xjSwpQ42Gy"],"license":"MIT OR Apache-2.0"}},"version":1},"id":3}
1 change: 1 addition & 0 deletions out/Context.sol/Context.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@pythnetwork/=node_modules/@pythnetwork/\",\":eth-gas-reporter/=node_modules/eth-gas-reporter/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@pythnetwork/=node_modules/@pythnetwork/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std/=lib/forge-std/src/","hardhat/=node_modules/hardhat/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"node_modules/@openzeppelin/contracts/utils/Context.sol":"Context"},"evmVersion":"paris","libraries":{}},"sources":{"node_modules/@openzeppelin/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"}},"version":1},"id":27}
1 change: 1 addition & 0 deletions out/ERC20.sol/ERC20.json

Large diffs are not rendered by default.

Loading

0 comments on commit 61fe7d1

Please sign in to comment.