第二遍走查 snapshot3

This commit is contained in:
mingda
2020-11-30 00:04:57 +08:00
parent 544b4c7c29
commit 898c5c0fb4
4 changed files with 53 additions and 16 deletions

View File

@@ -25,6 +25,13 @@ contract DPPVault is DPPStorage {
event Reset();
// ============ View Functions ============
function getVaultReserve() external view returns (uint256 baseReserve, uint256 quoteReserve) {
baseReserve = _BASE_RESERVE_;
quoteReserve = _QUOTE_RESERVE_;
}
// ============ Get Input ============
function getBaseInput() public view returns (uint256 input) {

View File

@@ -15,9 +15,14 @@ import {IDODOCallee} from "../../intf/IDODOCallee.sol";
contract DVMFunding is DVMVault {
// ============ Events ============
event BuyShares(address indexed user, uint256 increaseShares, uint256 totalShares);
event BuyShares(address indexed to, uint256 increaseShares, uint256 totalShares);
event SellShares(address indexed user, uint256 decreaseShares, uint256 totalShares);
event SellShares(
address indexed payer,
address indexed to,
uint256 decreaseShares,
uint256 totalShares
);
// ============ Buy & Sell Shares ============
@@ -70,7 +75,7 @@ contract DVMFunding is DVMVault {
bytes calldata data,
uint256 deadline
) external preventReentrant returns (uint256 baseAmount, uint256 quoteAmount) {
require(deadline >= block.timestamp, 'DODOV2 DVMFUNDING: EXPIRED');
require(deadline >= block.timestamp, "DODOV2 DVMFUNDING: EXPIRED");
require(shareAmount <= _SHARES_[msg.sender], "DLP_NOT_ENOUGH");
uint256 baseBalance = _BASE_TOKEN_.balanceOf(address(this));
uint256 quoteBalance = _QUOTE_TOKEN_.balanceOf(address(this));
@@ -97,5 +102,6 @@ contract DVMFunding is DVMVault {
);
}
_sync();
emit SellShares(msg.sender, to, shareAmount, _SHARES_[msg.sender]);
}
}

View File

@@ -28,6 +28,13 @@ contract DVMVault is DVMStorage {
event Burn(address indexed user, uint256 value);
// ============ View Functions ============
function getVaultReserve() external view returns (uint256 baseReserve, uint256 quoteReserve) {
baseReserve = _BASE_RESERVE_;
quoteReserve = _QUOTE_RESERVE_;
}
// ============ Asset In ============
function getBaseInput() public view returns (uint256 input) {
@@ -121,7 +128,11 @@ contract DVMVault is DVMStorage {
return true;
}
function _approve(address owner, address spender, uint256 amount) private {
function _approve(
address owner,
address spender,
uint256 amount
) private {
_ALLOWED_[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
@@ -151,17 +162,30 @@ contract DVMVault is DVMStorage {
}
// ============================ Permit ======================================
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
require(deadline >= block.timestamp, 'DODO_DVM_LP: EXPIRED');
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external {
require(deadline >= block.timestamp, "DODO_DVM_LP: EXPIRED");
bytes32 digest = keccak256(
abi.encodePacked(
'\x19\x01',
"\x19\x01",
DOMAIN_SEPARATOR,
keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
keccak256(
abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)
)
)
);
address recoveredAddress = ecrecover(digest, v, r, s);
require(recoveredAddress != address(0) && recoveredAddress == owner, 'DODO_DVM_LP: INVALID_SIGNATURE');
require(
recoveredAddress != address(0) && recoveredAddress == owner,
"DODO_DVM_LP: INVALID_SIGNATURE"
);
_approve(owner, spender, value);
}
// ===========================================================================

View File

@@ -7,7 +7,7 @@
// import * as assert from 'assert';
import { decimalStr } from '../utils/Converter';
import { decimalStr, MAX_UINT256 } from '../utils/Converter';
import { logGas } from '../utils/Log';
import { DVMContext, getDVMContext } from '../utils/DVMContext';
import { assert } from 'chai';
@@ -155,11 +155,11 @@ describe("Funding", () => {
var vaultShares = new BigNumber(await ctx.DVM.methods.balanceOf(lp).call())
var bob = ctx.SpareAccounts[5]
await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x").send(ctx.sendParam(lp))
await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp))
assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("5"))
assert.equal(await ctx.QUOTE.methods.balanceOf(bob).call(), decimalStr("50"))
await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x").send(ctx.sendParam(lp))
await ctx.DVM.methods.sellShares(vaultShares.div(2).toFixed(0), bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp))
assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("10"))
assert.equal(await ctx.QUOTE.methods.balanceOf(bob).call(), decimalStr("100"))
})
@@ -171,7 +171,7 @@ describe("Funding", () => {
var vaultShares = await ctx.DVM.methods.balanceOf(lp).call()
var bob = ctx.SpareAccounts[5]
await ctx.DVM.methods.sellShares(vaultShares, bob, 0, 0, "0x").send(ctx.sendParam(lp))
await ctx.DVM.methods.sellShares(vaultShares, bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp))
assert.equal(await ctx.BASE.methods.balanceOf(bob).call(), decimalStr("10"))
assert.equal(await ctx.QUOTE.methods.balanceOf(bob).call(), decimalStr("100"))
})
@@ -184,15 +184,15 @@ describe("Funding", () => {
var vaultShares = await ctx.DVM.methods.balanceOf(lp).call()
var bob = ctx.SpareAccounts[5]
await truffleAssert.reverts(
ctx.DVM.methods.sellShares(new BigNumber(vaultShares).multipliedBy(2), bob, 0, 0, "0x").send(ctx.sendParam(lp)),
ctx.DVM.methods.sellShares(new BigNumber(vaultShares).multipliedBy(2), bob, 0, 0, "0x", MAX_UINT256).send(ctx.sendParam(lp)),
"DLP_NOT_ENOUGH"
)
await truffleAssert.reverts(
ctx.DVM.methods.sellShares(vaultShares, bob, decimalStr("100"), 0, "0x").send(ctx.sendParam(lp)),
ctx.DVM.methods.sellShares(vaultShares, bob, decimalStr("100"), 0, "0x", MAX_UINT256).send(ctx.sendParam(lp)),
"WITHDRAW_NOT_ENOUGH"
)
await truffleAssert.reverts(
ctx.DVM.methods.sellShares(vaultShares, bob, 0, decimalStr("10000"), "0x").send(ctx.sendParam(lp)),
ctx.DVM.methods.sellShares(vaultShares, bob, 0, decimalStr("10000"), "0x", MAX_UINT256).send(ctx.sendParam(lp)),
"WITHDRAW_NOT_ENOUGH"
)
})