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