Include threshold balance in constructor of BalanceThresholdFilter contract
This commit is contained in:
@@ -26,10 +26,19 @@ import "./MixinBalanceThresholdFilterCore.sol";
|
||||
|
||||
contract BalanceThresholdFilter is MixinBalanceThresholdFilterCore {
|
||||
|
||||
constructor(address exchange, address thresholdAsset)
|
||||
/// @dev Constructs BalanceThresholdFilter.
|
||||
/// @param exchange Address of 0x exchange.
|
||||
/// @param thresholdAsset The asset that must be held by makers/takers.
|
||||
/// @param thresholdBalance The minimum balance of `thresholdAsset` that must be held by makers/takers.
|
||||
constructor(
|
||||
address exchange,
|
||||
address thresholdAsset,
|
||||
uint256 thresholdBalance
|
||||
)
|
||||
public
|
||||
{
|
||||
EXCHANGE = IExchange(exchange);
|
||||
THRESHOLD_ASSET = IThresholdAsset(thresholdAsset);
|
||||
THRESHOLD_BALANCE = thresholdBalance;
|
||||
}
|
||||
}
|
||||
@@ -263,6 +263,7 @@ contract MixinBalanceThresholdFilterCore is MBalanceThresholdFilterCore {
|
||||
|
||||
// Validate addresses
|
||||
let thresholdAssetAddress := sload(THRESHOLD_ASSET_slot)
|
||||
let thresholdBalance := sload(THRESHOLD_BALANCE_slot)
|
||||
for {let addressToValidate := addressesToValidateElementPtr} lt(addressToValidate, addressesToValidateElementEndPtr) {addressToValidate := add(addressToValidate, 0x20)} {
|
||||
// Construct calldata for `THRESHOLD_ASSET.balanceOf`
|
||||
mstore(freeMemPtr, 0x70a0823100000000000000000000000000000000000000000000000000000000)
|
||||
@@ -294,7 +295,7 @@ contract MixinBalanceThresholdFilterCore is MBalanceThresholdFilterCore {
|
||||
|
||||
// Revert if balance not held
|
||||
let addressBalance := mload(freeMemPtr)
|
||||
if eq(addressBalance, 0) {
|
||||
if lt(addressBalance, thresholdBalance) {
|
||||
// Revert with `Error("AT_LEAST_ONE_ADDRESS_DOES_NOT_MEET_BALANCE_THRESHOLD")`
|
||||
mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(0x20, 0x0000002000000000000000000000000000000000000000000000000000000000)
|
||||
|
||||
@@ -25,9 +25,16 @@ import "../interfaces/IThresholdAsset.sol";
|
||||
|
||||
contract MBalanceThresholdFilterCore {
|
||||
|
||||
// Points to 0x exchange contract
|
||||
IExchange internal EXCHANGE;
|
||||
|
||||
// The asset that must be held by makers/takers
|
||||
IThresholdAsset internal THRESHOLD_ASSET;
|
||||
|
||||
// The minimum balance of `THRESHOLD_ASSET` that must be held by makers/takers
|
||||
uint256 internal THRESHOLD_BALANCE;
|
||||
|
||||
// Addresses that hold at least `THRESHOLD_BALANCE` of `THRESHOLD_ASSET`
|
||||
event ValidatedAddresses (
|
||||
address[] addresses
|
||||
);
|
||||
|
||||
@@ -126,12 +126,14 @@ describe.only(ContractName.BalanceThresholdFilter, () => {
|
||||
const privateKey = constants.TESTRPC_PRIVATE_KEYS[accounts.indexOf(compliantMakerAddress)];
|
||||
orderFactory = new OrderFactory(privateKey, defaultOrderParams);
|
||||
// Deploy Compliant Forwarder
|
||||
const erc721BalanceThreshold = new BigNumber(1);
|
||||
compliantForwarderInstance = await BalanceThresholdFilterContract.deployFrom0xArtifactAsync(
|
||||
artifacts.BalanceThresholdFilter,
|
||||
provider,
|
||||
txDefaults,
|
||||
exchangeInstance.address,
|
||||
yesTokenInstance.address,
|
||||
erc721BalanceThreshold
|
||||
);
|
||||
/*
|
||||
const compliantForwarderContract = new BalanceThresholdFilterContract(
|
||||
|
||||
Reference in New Issue
Block a user