|
@@ -0,0 +1,48 @@
|
|
|
|
|
+//SPDX-License-Identifier: Unlicense
|
|
|
|
|
+pragma solidity ^0.7.6;
|
|
|
|
|
+pragma abicoder v2;
|
|
|
|
|
+
|
|
|
|
|
+import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
|
|
|
|
|
+import '@uniswap/v3-periphery/contracts/NonfungiblePositionManager.sol';
|
|
|
|
|
+import '@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol';
|
|
|
|
|
+
|
|
|
|
|
+contract V3Tool {
|
|
|
|
|
+ NonfungiblePositionManager private positionManager;
|
|
|
|
|
+ IUniswapV3Factory private factory;
|
|
|
|
|
+
|
|
|
|
|
+ constructor(address payable _positionManager, address payable _factory) {
|
|
|
|
|
+ positionManager = NonfungiblePositionManager(_positionManager);
|
|
|
|
|
+ factory = IUniswapV3Factory(_factory);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ struct PositionInfo {
|
|
|
|
|
+ address lp;
|
|
|
|
|
+ address token0;
|
|
|
|
|
+ string symbol0;
|
|
|
|
|
+ uint24 decimals0;
|
|
|
|
|
+ uint256 r0;
|
|
|
|
|
+ address token1;
|
|
|
|
|
+ string symbol1;
|
|
|
|
|
+ uint24 decimals1;
|
|
|
|
|
+ uint256 r1;
|
|
|
|
|
+ uint24 feei;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function getMoreInfo(address token0, address token1, uint24 fee) public view returns (
|
|
|
|
|
+ address lp,
|
|
|
|
|
+ string memory symbol0,
|
|
|
|
|
+ uint24 decimals0,
|
|
|
|
|
+ uint256 r0,
|
|
|
|
|
+ string memory symbol1,
|
|
|
|
|
+ uint24 decimals1,
|
|
|
|
|
+ uint256 r1
|
|
|
|
|
+ ) {
|
|
|
|
|
+ ERC20 token0Obj = ERC20(token0);
|
|
|
|
|
+ ERC20 token1Obj = ERC20(token1);
|
|
|
|
|
+
|
|
|
|
|
+ address lp = factory.getPool(token0, token1, fee);
|
|
|
|
|
+
|
|
|
|
|
+ return (lp, token0Obj.symbol(), token0Obj.decimals(), token0Obj.balanceOf(lp),
|
|
|
|
|
+ token1Obj.symbol(), token1Obj.decimals(), token1Obj.balanceOf(lp));
|
|
|
|
|
+ }
|
|
|
|
|
+}
|