编译器
0.8.13+commit.abaa5c0e
文件 1 的 14:AGStakeFull.sol
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";
import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
import "./interfaces/IAGStakeFull.sol";
import "./interfaces/IAlphaGangGenerative.sol";
import "./interfaces/IAlphaGangOG.sol";
import "./interfaces/IGangToken.sol";
contract AGStakeX is IAGStake, Ownable, ERC721Holder, ERC1155Holder {
mapping(address => uint256) public lastUpdate;
IAlphaGangOG immutable AlphaGangOG;
IAlphaGangGenerative AlphaGangG2;
IGangToken immutable GANG;
mapping(uint256 => mapping(address => uint256)) public vaultOG;
mapping(address => mapping(uint256 => uint256)) public override vaultG2;
mapping(address => uint256) public stakedAtG2;
mapping(address => uint256) public ownerG2StakedCount;
mapping(address => uint256) stakedAtOG;
uint256 public ogStakeRate = 496031746031746;
uint256 public G2StakeRate = 49603174603175;
uint256 bonusBase = 500_000;
uint256 triBonus = 100_000;
uint256 constant BASE = 1_000_000;
mapping(address => uint256) public override ogAllocation;
constructor(
IAlphaGangOG _og,
IAlphaGangGenerative _G2,
IGangToken _token
) {
AlphaGangOG = _og;
AlphaGangG2 = _G2;
GANG = _token;
}
function stakeG2(uint256[] calldata tokenIds) public override {
uint256 timeNow = block.timestamp;
address _owner = msg.sender;
if (msg.sender == address(AlphaGangG2)) {
_owner = tx.origin;
}
_claim(_owner);
for (uint8 i = 0; i < tokenIds.length; i++) {
require(
AlphaGangG2.ownerOf(tokenIds[i]) == _owner,
"Not your token"
);
require(vaultG2[_owner][tokenIds[i]] == 0, "Token already staked");
AlphaGangG2.transferFrom(_owner, address(this), tokenIds[i]);
vaultG2[_owner][tokenIds[i]] = timeNow;
}
unchecked {
ownerG2StakedCount[_owner] += tokenIds.length;
}
emit StakedG2(_owner, tokenIds, timeNow);
}
function unstakeG2(uint256[] memory tokenIds) external {
address _owner = msg.sender;
_claim(_owner);
for (uint8 i = 0; i < tokenIds.length; ++i) {
require(vaultG2[_owner][tokenIds[i]] > 0, "Not your token");
require(
vaultG2[_owner][tokenIds[i]] < block.timestamp + 72 hours,
"Token locked for 3 days"
);
vaultG2[_owner][tokenIds[i]] = 0;
AlphaGangG2.transferFrom(address(this), _owner, tokenIds[i]);
}
ownerG2StakedCount[_owner] -= tokenIds.length;
emit UnstakedG2(_owner, tokenIds, block.timestamp);
}
function claim() external {
_claim(msg.sender);
}
function claimForAddress(address account) external {
_claim(account);
}
function _claim(address account) internal {
uint256 earned;
if (lastUpdate[account] > 0) {
earned = earningInfo(account);
}
lastUpdate[account] = block.timestamp;
if (earned > 0) {
GANG.mint(account, earned);
}
emit Claimed(account, earned, block.timestamp);
}
function earningInfo(address account) public view returns (uint256 earned) {
uint256 earnedWBonus;
uint256 earnedNBonus;
uint256 timestamp = block.timestamp;
uint256 _lastUpdate = lastUpdate[account];
if (_lastUpdate == 0) return 0;
uint256 tokenCountOG;
uint256[] memory stakedCountOG = stakedOGBalanceOf(account);
uint256 triBonusCount;
unchecked {
for (uint32 i; i < 3; ++i) {
if (stakedCountOG[i] > 0) {
tokenCountOG += stakedCountOG[i];
++triBonusCount;
}
}
}
uint256 bonus = BASE;
unchecked {
earnedWBonus += G2StakeRate * ownerG2StakedCount[account];
if (tokenCountOG > 0) {
uint256 _bonusBase = bonusBase;
earnedWBonus += ogStakeRate;
earnedNBonus += ogStakeRate * (tokenCountOG - 1);
for (uint32 i = 0; i < tokenCountOG; ++i) {
bonus += _bonusBase;
_bonusBase /= 2;
}
if (triBonusCount == 3) {
bonus += triBonus;
}
}
}
return
(((earnedWBonus * bonus) / BASE) + earnedNBonus) *
(timestamp - _lastUpdate);
}
function stakeSingleOG(uint256 tokenId, uint256 tokenCount) external {
address _owner = msg.sender;
_claim(_owner);
AlphaGangOG.safeTransferFrom(
_owner,
address(this),
tokenId,
tokenCount,
""
);
stakedAtOG[_owner] = block.timestamp;
unchecked {
vaultOG[tokenId][_owner] += tokenCount;
}
emit StakedOG(
_owner,
_asSingletonArray(tokenId),
_asSingletonArray(tokenCount),
block.timestamp
);
}
function unstakeSingleOG(uint256 tokenId, uint256 tokenCount) external {
address _owner = msg.sender;
uint256 _totalStaked = vaultOG[tokenId][_owner];
require(
_totalStaked >= 0,
"You do have any tokens available for unstaking"
);
require(
_totalStaked >= tokenCount,
"You do not have requested token amount available for unstaking"
);
require(
stakedAtOG[_owner] < block.timestamp + 72 hours,
"Tokens locked for 3 days"
);
_claim(_owner);
unchecked {
vaultOG[tokenId][_owner] -= tokenCount;
}
AlphaGangOG.safeTransferFrom(
address(this),
_owner,
tokenId,
tokenCount,
""
);
emit UnstakedOG(
msg.sender,
_asSingletonArray(tokenId),
_asSingletonArray(tokenCount),
block.timestamp
);
}
function updateOGAllocation(address _owner, uint256 _count)
external
override
{
require(msg.sender == address(AlphaGangG2), "Only Generative");
ogAllocation[_owner] -= _count;
}
function stakeOGForMint() external payable {
require(AlphaGangG2.mintActive(1), "Sale is not active");
address _owner = msg.sender;
uint256[] memory totalAvailable = unstakedOGBalanceOf(_owner);
uint256 _totalOGsToBeStaked = totalAvailable[0] +
totalAvailable[1] +
totalAvailable[2];
require(_totalOGsToBeStaked > 0, "No tokens to stake");
uint256 g2MintCount = _totalOGsToBeStaked + 2;
uint256 timeNow = block.timestamp;
uint256[] memory tokens = new uint256[](3);
tokens[0] = 1;
tokens[1] = 2;
tokens[2] = 3;
_claim(_owner);
AlphaGangOG.safeBatchTransferFrom(
_owner,
address(this),
tokens,
totalAvailable,
""
);
stakedAtOG[_owner] = timeNow;
ogAllocation[_owner] += g2MintCount;
unchecked {
for (uint32 i = 1; i < 4; i++) {
vaultOG[i][_owner] += totalAvailable[i - 1];
}
}
emit StakedForMint(msg.sender, tokens, totalAvailable, block.timestamp);
}
function stakeAllOG() external {
address _owner = msg.sender;
uint256[] memory totalAvailable = unstakedOGBalanceOf(_owner);
_claim(_owner);
uint256[] memory tokens = new uint256[](3);
tokens[0] = 1;
tokens[1] = 2;
tokens[2] = 3;
AlphaGangOG.safeBatchTransferFrom(
_owner,
address(this),
tokens,
totalAvailable,
""
);
stakedAtOG[_owner] = block.timestamp;
unchecked {
for (uint32 i = 1; i < 4; i++) {
vaultOG[i][_owner] += totalAvailable[i - 1];
}
}
emit StakedOG(msg.sender, tokens, totalAvailable, block.timestamp);
}
function unstakeAllOG() external {
address _owner = msg.sender;
require(
stakedAtOG[_owner] < block.timestamp + 72 hours,
"Tokens locked for 3 days"
);
_claim(_owner);
uint256[] memory _totalStaked = stakedOGBalanceOf(_owner);
uint256[] memory tokens = new uint256[](3);
tokens[0] = 1;
tokens[1] = 2;
tokens[2] = 3;
unchecked {
for (uint32 i = 1; i < 4; i++) {
vaultOG[i][_owner] -= _totalStaked[i - 1];
}
}
AlphaGangOG.safeBatchTransferFrom(
address(this),
_owner,
tokens,
_totalStaked,
""
);
emit UnstakedOG(_owner, tokens, _totalStaked, block.timestamp);
}
function stakedOGBalanceOf(address account)
public
view
returns (uint256[] memory _tokenBalance)
{
uint256[] memory tokenBalance = new uint256[](3);
unchecked {
for (uint32 i = 1; i < 4; i++) {
uint256 stakedCount = vaultOG[i][account];
if (stakedCount > 0) {
tokenBalance[i - 1] += stakedCount;
}
}
}
return tokenBalance;
}
function unstakedOGBalanceOf(address account)
public
view
returns (uint256[] memory _tokenBalance)
{
uint256[] memory totalTokenBalance = new uint256[](3);
totalTokenBalance[0] = AlphaGangOG.balanceOf(account, 1);
totalTokenBalance[1] = AlphaGangOG.balanceOf(account, 2);
totalTokenBalance[2] = AlphaGangOG.balanceOf(account, 3);
return totalTokenBalance;
}
function _asSingletonArray(uint256 element)
private
pure
returns (uint256[] memory)
{
uint256[] memory array = new uint256[](1);
array[0] = element;
return array;
}
function setApprovalForAll(address operator, bool approved)
external
onlyOwner
{
AlphaGangG2.setApprovalForAll(operator, approved);
AlphaGangOG.setApprovalForAll(operator, approved);
}
function withdraw() external onlyOwner {
payable(owner()).transfer(address(this).balance);
}
function stakedG2TokensOfOwner(address account)
external
view
returns (uint256[] memory)
{
uint256 supply = AlphaGangG2.totalSupply();
uint256 ownerStakedTokenCount = ownerG2StakedCount[account];
uint256[] memory tokens = new uint256[](ownerStakedTokenCount);
uint256 index = 0;
for (uint256 tokenId = 1; tokenId <= supply; tokenId++) {
if (vaultG2[account][tokenId] > 0) {
tokens[index] = tokenId;
}
}
return tokens;
}
}
文件 2 的 14:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 3 的 14:ERC1155Holder.sol
pragma solidity ^0.8.0;
import "./ERC1155Receiver.sol";
contract ERC1155Holder is ERC1155Receiver {
function onERC1155Received(
address,
address,
uint256,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155Received.selector;
}
function onERC1155BatchReceived(
address,
address,
uint256[] memory,
uint256[] memory,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155BatchReceived.selector;
}
}
文件 4 的 14:ERC1155Receiver.sol
pragma solidity ^0.8.0;
import "../IERC1155Receiver.sol";
import "../../../utils/introspection/ERC165.sol";
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
}
}
文件 5 的 14:ERC165.sol
pragma solidity ^0.8.0;
import "./IERC165.sol";
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
文件 6 的 14:ERC721Holder.sol
pragma solidity ^0.8.0;
import "../IERC721Receiver.sol";
contract ERC721Holder is IERC721Receiver {
function onERC721Received(
address,
address,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC721Received.selector;
}
}
文件 7 的 14:IAGStakeFull.sol
pragma solidity ^0.8.0;
interface IAGStake {
event StakedG2(address owner, uint256[] tokenIds, uint256 timestamp);
event UnstakedG2(address owner, uint256[] tokenIds, uint256 timestamp);
event StakedOG(
address owner,
uint256[] tokenIds,
uint256[] counts,
uint256 timestamp
);
event StakedForMint(
address owner,
uint256[] tokenIds,
uint256[] counts,
uint256 timestamp
);
event UnstakedOG(
address owner,
uint256[] tokenIds,
uint256[] counts,
uint256 timestamp
);
event Claimed(address owner, uint256 amount, uint256 timestamp);
function ogAllocation(address _owner)
external
view
returns (uint256 _allocation);
function vaultG2(address, uint256) external view returns (uint256);
function stakeG2(uint256[] calldata tokenIds) external;
function updateOGAllocation(address _owner, uint256 _count) external;
}
文件 8 的 14:IAlphaGangGenerative.sol
pragma solidity ^0.8.0;
interface IAlphaGangGenerative {
function balanceOf(address account) external view returns (uint256);
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function ownerOf(uint256 tokenId) external view returns (address);
function setApprovalForAll(address operator, bool approved) external;
function totalSupply() external view returns (uint256);
function SUPPLY_MAX() external view returns (uint256);
function mintActive(uint8 mintType) external view returns (bool);
function tokensOfOwner(address _owner)
external
view
returns (uint256[] memory ownerTokens);
}
文件 9 的 14:IAlphaGangOG.sol
pragma solidity ^0.8.0;
interface IAlphaGangOG {
function balanceOf(address account, uint256 id)
external
view
returns (uint256);
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes calldata data
) external;
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) external;
function setApprovalForAll(address operator, bool approved) external;
}
文件 10 的 14:IERC1155Receiver.sol
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
interface IERC1155Receiver is IERC165 {
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4);
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4);
}
文件 11 的 14:IERC165.sol
pragma solidity ^0.8.0;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
文件 12 的 14:IERC721Receiver.sol
pragma solidity ^0.8.0;
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
文件 13 的 14:IGangToken.sol
pragma solidity ^0.8.0;
interface IGangToken {
function mint(address to, uint256 amount) external;
}
文件 14 的 14:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
{
"compilationTarget": {
"contracts/AGStakeFull.sol": "AGStakeX"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 1000
},
"remappings": []
}
[{"inputs":[{"internalType":"contract IAlphaGangOG","name":"_og","type":"address"},{"internalType":"contract IAlphaGangGenerative","name":"_G2","type":"address"},{"internalType":"contract IGangToken","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Claimed","type":"event"},{"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":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"counts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"StakedForMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"StakedG2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"counts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"StakedOG","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UnstakedG2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"counts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UnstakedOG","type":"event"},{"inputs":[],"name":"G2StakeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claimForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earningInfo","outputs":[{"internalType":"uint256","name":"earned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ogAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogStakeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerG2StakedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeAllOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeG2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeOGForMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"tokenCount","type":"uint256"}],"name":"stakeSingleOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakedAtG2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakedG2TokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakedOGBalanceOf","outputs":[{"internalType":"uint256[]","name":"_tokenBalance","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAllOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeG2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"tokenCount","type":"uint256"}],"name":"unstakeSingleOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unstakedOGBalanceOf","outputs":[{"internalType":"uint256[]","name":"_tokenBalance","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"updateOGAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vaultG2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"vaultOG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]