ing
This commit is contained in:
@@ -65,13 +65,14 @@ module.exports = {
|
||||
ConstFeeRateModel: "0xBDAcEcF886a4F0C509260d9678D5673C3E8fa4b7",
|
||||
FeeDistributor: "0x989F9eFaA19c6A06945Db4439b9a7935dD573A66",
|
||||
Fragment: "0x36ed21f19B0cf0c1E571A8C3A6953a5778E48B5a",
|
||||
NFTCollateralVault: "0x78B7AFf2E5fA95B1E7E16679645FB65a850ed6AB",
|
||||
NFTCollateralVault: "0x5a317a617FBF89d55bBfe40A76E526FCD74E4545",
|
||||
DODONFTRouteHelper: "0xAE683548702be6d651e179e5F9313272bb18596A",
|
||||
|
||||
InitializableERC721: "",
|
||||
InitializableERC1155: "",
|
||||
NFTTokenFactory: "",
|
||||
InitializableERC721: "0x7563414479593394460d1bbaFE2Fc3E29D804007",
|
||||
InitializableERC1155: "0xb971B0df71fB1778351F25a0e3bfe0C3eF06E1d1",
|
||||
NFTTokenFactory: "0x38c109aF4f3454172BA4eecf5676aA213b589e75",
|
||||
|
||||
DODONFTRegistry: "0xF405372b7808363DCfbb5Eb81204889B7a69Aa3e",
|
||||
DODONFTProxy: "0x41Eb1FFC3d6474Ee4f4Aaf335a09cD411ADDDf1f",
|
||||
DODONFTProxy: "0x41c5eDe987bd61c75925Ab2657256D75270a55D4",
|
||||
}
|
||||
}
|
||||
@@ -13,9 +13,10 @@ import {IERC721} from "../../intf/IERC721.sol";
|
||||
import {IERC721Receiver} from "../../intf/IERC721Receiver.sol";
|
||||
import {IERC1155} from "../../intf/IERC1155.sol";
|
||||
import {IERC1155Receiver} from "../../intf/IERC1155Receiver.sol";
|
||||
import {ReentrancyGuard} from "../../lib/ReentrancyGuard.sol";
|
||||
|
||||
|
||||
contract NFTCollateralVault is InitializableOwnable, IERC721Receiver, IERC1155Receiver {
|
||||
contract NFTCollateralVault is InitializableOwnable, IERC721Receiver, IERC1155Receiver,ReentrancyGuard {
|
||||
using SafeMath for uint256;
|
||||
|
||||
// ============ Storage ============
|
||||
@@ -51,11 +52,11 @@ contract NFTCollateralVault is InitializableOwnable, IERC721Receiver, IERC1155Re
|
||||
emit OwnershipTransferred(_OWNER_, newOwner);
|
||||
}
|
||||
|
||||
function createFragment(address nftProxy, bytes calldata data) external onlyOwner {
|
||||
function createFragment(address nftProxy, bytes calldata data) external preventReentrant onlyOwner {
|
||||
require(nftProxy != address(0), "DODONftVault: PROXY_INVALID");
|
||||
_OWNER_ = nftProxy;
|
||||
(bool success, ) = nftProxy.call(data);
|
||||
require(success, "DODONftVault: TRANSFER_OWNER_FAILED");
|
||||
nftProxy.call(data);
|
||||
// require(success, "DODONftVault: TRANSFER_OWNER_FAILED");
|
||||
emit OwnershipTransferred(_OWNER_, nftProxy);
|
||||
emit CreateFragment();
|
||||
}
|
||||
|
||||
68
contracts/SmartRoute/helper/DODONFTRouteHelper.sol
Normal file
68
contracts/SmartRoute/helper/DODONFTRouteHelper.sol
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
|
||||
Copyright 2020 DODO ZOO.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.6.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import {IDODOV2} from "../intf/IDODOV2.sol";
|
||||
|
||||
contract DODONFTRouteHelper {
|
||||
address public immutable _NFT_REGISTER_;
|
||||
|
||||
struct PairDetail {
|
||||
uint256 i;
|
||||
uint256 K;
|
||||
uint256 B;
|
||||
uint256 Q;
|
||||
uint256 B0;
|
||||
uint256 Q0;
|
||||
uint256 R;
|
||||
uint256 lpFeeRate;
|
||||
uint256 mtFeeRate;
|
||||
address baseToken;
|
||||
address quoteToken;
|
||||
address curPair;
|
||||
uint256 pairVersion;
|
||||
}
|
||||
|
||||
constructor(address nftRegistry) public {
|
||||
_NFT_REGISTER_ = nftRegistry;
|
||||
}
|
||||
|
||||
function getPairDetail(address token0,address token1,address userAddr) external view returns (PairDetail[] memory res) {
|
||||
(address[] memory baseToken0DVM, address[] memory baseToken1DVM) = IDODOV2(_NFT_REGISTER_).getDODOPoolBidirection(token0,token1);
|
||||
uint256 len = baseToken0DVM.length + baseToken1DVM.length;
|
||||
res = new PairDetail[](len);
|
||||
for(uint8 i = 0; i < len; i++) {
|
||||
PairDetail memory curRes = PairDetail(0,0,0,0,0,0,0,0,0,address(0),address(0),address(0),2);
|
||||
address cur;
|
||||
if(i < baseToken0DVM.length) {
|
||||
cur = baseToken0DVM[i];
|
||||
curRes.baseToken = token0;
|
||||
curRes.quoteToken = token1;
|
||||
} else {
|
||||
cur = baseToken1DVM[i - baseToken0DVM.length];
|
||||
curRes.baseToken = token1;
|
||||
curRes.quoteToken = token0;
|
||||
}
|
||||
|
||||
(
|
||||
curRes.i,
|
||||
curRes.K,
|
||||
curRes.B,
|
||||
curRes.Q,
|
||||
curRes.B0,
|
||||
curRes.Q0,
|
||||
curRes.R
|
||||
) = IDODOV2(cur).getPMMStateForCall();
|
||||
|
||||
(curRes.lpFeeRate, curRes.mtFeeRate) = IDODOV2(cur).getUserFeeRate(userAddr);
|
||||
curRes.curPair = cur;
|
||||
res[i] = curRes;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,7 +94,8 @@ contract DODONFTProxy is ReentrancyGuard, InitializableOwnable {
|
||||
ICollateralVault(newVault).init(msg.sender, name, baseURI);
|
||||
emit CreateNFTCollateralVault(msg.sender, newVault, name, baseURI);
|
||||
}
|
||||
|
||||
|
||||
//Stake 碎片
|
||||
function createFragment(
|
||||
address quoteToken,
|
||||
address vaultPreOwner,
|
||||
|
||||
@@ -26,3 +26,35 @@ Deploy type: NFT
|
||||
multiSigAddress: 0x7e83d9d94837eE82F0cc18a691da6f42F03F1d86
|
||||
DODOApproveProxy unlockAddProxy tx: 0xfda8786e258102a264db7642e6dcdd86780f30747eb3fc8f9bea2db7dfa8aefa
|
||||
DODOApproveProxy addDODOProxy tx: 0x899bfa16da6c91141e120bb00687c614fbbe8181bdbcb027315fcc0c9a9a76c5
|
||||
====================================================
|
||||
network type: kovan
|
||||
Deploy time: 2021/4/9 上午9:59:52
|
||||
Deploy type: NFT
|
||||
multiSigAddress: 0x7e83d9d94837eE82F0cc18a691da6f42F03F1d86
|
||||
====================================================
|
||||
network type: kovan
|
||||
Deploy time: 2021/4/9 上午10:06:22
|
||||
Deploy type: NFT
|
||||
multiSigAddress: 0x7e83d9d94837eE82F0cc18a691da6f42F03F1d86
|
||||
ERC721Address: 0x7563414479593394460d1bbaFE2Fc3E29D804007
|
||||
ERC1155Address: 0xb971B0df71fB1778351F25a0e3bfe0C3eF06E1d1
|
||||
NFTTokenFactoryAddress: 0x38c109aF4f3454172BA4eecf5676aA213b589e75
|
||||
DODONFTRouteHelperAddress: 0xAE683548702be6d651e179e5F9313272bb18596A
|
||||
DODOApproveProxy unlockAddProxy tx: 0xd95d184faf652a03e2e7261d352fbf6586d9720d687da356f71a601423f58442
|
||||
DODOApproveProxy addDODOProxy tx: 0x379ae35106f43b77488adce056f37903f035c1a372a1b6ec64adbe9eaeef8b2d
|
||||
====================================================
|
||||
network type: kovan
|
||||
Deploy time: 2021/4/9 下午2:35:06
|
||||
Deploy type: NFT
|
||||
multiSigAddress: 0x7e83d9d94837eE82F0cc18a691da6f42F03F1d86
|
||||
NFTTokenFactoryAddress: 0x0Fb11568CE1Ca7ED643C7ccb249331e19F3742b0
|
||||
====================================================
|
||||
network type: kovan
|
||||
Deploy time: 2021/4/9 下午2:37:51
|
||||
Deploy type: NFT
|
||||
multiSigAddress: 0x7e83d9d94837eE82F0cc18a691da6f42F03F1d86
|
||||
NFTCollateralVaultAddress: 0x5a317a617FBF89d55bBfe40A76E526FCD74E4545
|
||||
DODONFTProxyAddress: 0x41c5eDe987bd61c75925Ab2657256D75270a55D4
|
||||
Init DODONFTProxyAddress Tx: 0x8193cc72ebbc27e024d44f25cad6bb74def48130339f4ab589989dbb6a157ad6
|
||||
DODOApproveProxy unlockAddProxy tx: 0xef8154df211142848d99cbd5c80410ca32fa4503b9715642aa463c0d77aecdc8
|
||||
DODOApproveProxy addDODOProxy tx: 0x01ec3075e3bc5a27f2cd8eeb0a8d86b2aad7f80981fd48fc6fcb3bc527ebcb61
|
||||
|
||||
@@ -11,6 +11,7 @@ const Fragment = artifacts.require("Fragment");
|
||||
const FeeDistributor = artifacts.require("FeeDistributor");
|
||||
const DODONFTRegistry = artifacts.require("DODONFTRegistry");
|
||||
const DODONFTProxy = artifacts.require("DODONFTProxy");
|
||||
const DODONFTRouteHelper = artifacts.require("DODONFTRouteHelper");
|
||||
|
||||
const InitializableERC721 = artifacts.require("InitializableERC721");
|
||||
const InitializableERC1155 = artifacts.require("InitializableERC1155");
|
||||
@@ -31,6 +32,7 @@ module.exports = async (deployer, network, accounts) => {
|
||||
let FeeDistributorAddress = CONFIG.FeeDistributor;
|
||||
let FragmentAddress = CONFIG.Fragment;
|
||||
let NFTCollateralVaultAddress = CONFIG.NFTCollateralVault;
|
||||
let DODONFTRouteHelperAddress = CONFIG.DODONFTRouteHelper;
|
||||
|
||||
let DODONFTRegistryAddress = CONFIG.DODONFTRegistry;
|
||||
let DODONFTProxyAddress = CONFIG.DODONFTProxy;
|
||||
@@ -81,13 +83,31 @@ module.exports = async (deployer, network, accounts) => {
|
||||
const DODONFTRegistrynstance = await DODONFTRegistry.at(DODONFTRegistryAddress);
|
||||
var tx = await DODONFTRegistrynstance.initOwner(multiSigAddress);
|
||||
logger.log("Init DODONFTRegistryAddress Tx:", tx.tx);
|
||||
|
||||
await deployer.deploy(
|
||||
DODONFTRouteHelper,
|
||||
DODONFTRegistryAddress
|
||||
);
|
||||
DODONFTRouteHelperAddress = DODONFTRouteHelper.address;
|
||||
logger.log("DODONFTRouteHelperAddress: ", DODONFTRouteHelperAddress);
|
||||
}
|
||||
|
||||
|
||||
//DODONFTRouteHelper
|
||||
if (DODONFTRouteHelperAddress == "") {
|
||||
await deployer.deploy(
|
||||
DODONFTRouteHelper,
|
||||
DODONFTRegistryAddress
|
||||
);
|
||||
DODONFTRouteHelperAddress = DODONFTRouteHelper.address;
|
||||
logger.log("DODONFTRouteHelperAddress: ", DODONFTRouteHelperAddress);
|
||||
}
|
||||
|
||||
//Vault
|
||||
if (NFTCollateralVaultAddress == "") {
|
||||
await deployer.deploy(NFTCollateralVault);
|
||||
NFTTokenFactoryAddress = NFTCollateralVault.address;
|
||||
logger.log("NFTTokenFactoryAddress: ", NFTTokenFactoryAddress);
|
||||
NFTCollateralVaultAddress = NFTCollateralVault.address;
|
||||
logger.log("NFTCollateralVaultAddress: ", NFTCollateralVaultAddress);
|
||||
}
|
||||
|
||||
//Frag
|
||||
|
||||
@@ -85,8 +85,43 @@ describe("DODONFT", () => {
|
||||
assert(nftInfo.tokenId, '0')
|
||||
});
|
||||
|
||||
it("createFragment", async () => {
|
||||
|
||||
it.only("createFragment", async () => {
|
||||
var erc721Address = await createERC721(ctx);
|
||||
var vaultAddress = await createNFTVault(ctx);
|
||||
var nftVaultInstance = contracts.getContractWithAddress(contracts.NFT_VAULT, vaultAddress);
|
||||
var erc721Instance = contracts.getContractWithAddress(contracts.ERC721, erc721Address);
|
||||
await erc721Instance.methods.safeTransferFrom(author, vaultAddress, 0).send(ctx.sendParam(author));
|
||||
|
||||
var quoteToken = ctx.USDT.options.address;
|
||||
var vaultPreOwner = author;
|
||||
var stakeToken = "0x0000000000000000000000000000000000000000";
|
||||
var dvmParams = [
|
||||
"0",
|
||||
"10000000000000000",
|
||||
"1000000",
|
||||
"1000000000000000000"
|
||||
];
|
||||
var fragParams = [
|
||||
"100000000000000000000000000",
|
||||
"200000000000000000",
|
||||
"1617976800"
|
||||
]
|
||||
var isOpenTwap = false
|
||||
var callData = ctx.NFTProxy.methods.createFragment(
|
||||
quoteToken,
|
||||
vaultPreOwner,
|
||||
stakeToken,
|
||||
dvmParams,
|
||||
fragParams,
|
||||
isOpenTwap
|
||||
).encodeABI();
|
||||
console.log("data:",callData);
|
||||
|
||||
await logGas(await nftVaultInstance.methods.createFragment(
|
||||
ctx.NFTProxy.options.address,
|
||||
callData
|
||||
), ctx.sendParam(author), "createFragment");
|
||||
|
||||
});
|
||||
|
||||
it("stakeToFeeDistributor", async () => {
|
||||
|
||||
Reference in New Issue
Block a user