def test_exchangeFailsNotEnoughNomins(self):
        amount = 10 * UNIT
        nominsBalance = (int(amount / 2) * self.usdToEthPrice) // UNIT
        base = self.nomin.amountReceived(nominsBalance)
        feesToPayInNomins = nominsBalance - base
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some nomins for folks to convert Ether for
        self.nomin.giveNomins(MASTER, self.issuanceControllerContract.address,
                              nominsBalance)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)

        # Ensure the transfer fails due to there not being enough nomins in the contract
        self.assertReverts(self.issuanceController.exchangeEtherForNomins,
                           exchanger, amount)

        # Ensure the result of the transfer is correct.
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)
        self.assertEqual(self.nomin.balanceOf(exchanger), 0)
        self.assertEqual(self.nomin.feePool(), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
    def test_cannotExchangeEtherForNominsIfPaused(self):
        amount = 10 * UNIT
        nominsBalance = (amount * self.usdToEthPrice) // UNIT
        base = self.nomin.amountReceived(nominsBalance)
        self.issuanceController.setPaused(self.contractOwner, True)
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some nomins for folks to convert Ether for
        self.nomin.giveNomins(MASTER, self.issuanceControllerContract.address,
                              nominsBalance)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)

        # Attmpt transfer
        self.assertReverts(self.issuanceController.exchangeEtherForNomins,
                           exchanger, amount)
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)
        self.assertEqual(self.nomin.balanceOf(exchanger), 0)
        self.assertEqual(self.nomin.feePool(), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
    def test_exchangeForZeroEth(self):
        amount = 3 * UNIT
        ethToSend = 0 * UNIT
        nominsBalance = (amount * self.usdToEthPrice) // UNIT
        nominsToSend = (ethToSend * self.usdToEthPrice) // UNIT
        baseToSend = 0
        feesToPayInNomins = 0
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some nomins for folks to convert Ether for
        self.nomin.giveNomins(MASTER, self.issuanceControllerContract.address,
                              nominsBalance)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)

        # Transfer the amount to the receiver
        txr = self.issuanceController.exchangeEtherForNomins(
            exchanger, ethToSend)

        # Ensure the result of the transfer is correct.
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)
        self.assertEqual(self.nomin.balanceOf(exchanger), 0)
        self.assertEqual(self.nomin.feePool(), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
Beispiel #4
0
    def test_ensureRateOnEtherToHavvensExchangeSucceedsWithCorrectRate(self):
        ethToSend = 1 * UNIT
        havvensBalance = 10000 * UNIT
        havvensReceived = self.issuanceController.havvensReceivedForEther(
            ethToSend)
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some havvens for folks to convert Ether for
        self.havven.endow(MASTER, self.issuanceControllerContract.address,
                          havvensBalance)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvensBalance)

        # The transfer should succeed with a correct rate
        txr = self.issuanceController.exchangeEtherForHavvensAtRate(
            exchanger, ethToSend, self.usdToEthPrice, self.usdToHavPrice)

        # Ensure the result of the transfer is correct.
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvensBalance - havvensReceived)
        self.assertEqual(self.havven.balanceOf(exchanger), havvensReceived)
        self.assertEqual(startingFundsWalletEthBalance + ethToSend,
                         endingFundsWalletEthBalance)
    def test_cannotExchangeEtherForNominsIfPriceStale(self):
        amount = 10 * UNIT
        nominsBalance = (amount * self.usdToEthPrice) // UNIT
        base = self.nomin.amountReceived(nominsBalance)
        self.issuanceController.setPriceStalePeriod(self.contractOwner, 1)
        timeSent = block_time()
        self.issuanceController.updatePrices(self.oracleAddress,
                                             self.usdToEthPrice,
                                             self.usdToHavPrice, timeSent)
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        fast_forward(2)  # Wait so the lastPriceUpdateTime is different to now

        # Set up the contract so it contains some nomins for folks to convert Ether for
        self.nomin.giveNomins(MASTER, self.issuanceControllerContract.address,
                              nominsBalance)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)

        # Attmpt transfer
        self.assertReverts(self.issuanceController.exchangeEtherForNomins,
                           exchanger, amount)
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)
        self.assertEqual(self.nomin.balanceOf(exchanger), 0)
        self.assertEqual(self.nomin.feePool(), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
Beispiel #6
0
    def test_exchangeEtherFailsNotEnoughHavvens(self):
        havvensBalance = 1 * UNIT
        ethToSend = 1 * UNIT
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some havvens for folks to convert Ether for
        self.havven.endow(MASTER, self.issuanceControllerContract.address,
                          havvensBalance)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvensBalance)

        # Ensure the transfer fails due to there not being enough havvens in the contract
        self.assertReverts(self.issuanceController.exchangeEtherForHavvens,
                           exchanger, ethToSend)

        # Ensure the result of the transfer is correct.
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvensBalance)
        self.assertEqual(self.havven.balanceOf(exchanger), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
Beispiel #7
0
    def test_exchangeHavvensForZeroEth(self):
        ethToSend = 0
        exchanger = self.participantAddresses[0]
        havvensBalance = 100000 * UNIT
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some havvens for folks to convert Ether for
        self.havven.endow(MASTER, self.issuanceControllerContract.address,
                          havvensBalance)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvensBalance)

        # Transfer the amount to the receiver
        txr = self.issuanceController.exchangeEtherForHavvens(
            exchanger, ethToSend)

        # Ensure the result of the transfer is correct.
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvensBalance)
        self.assertEqual(self.havven.balanceOf(exchanger), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
Beispiel #8
0
    def test_cannotExchangeEtherForHavvensIfPaused(self):
        amount = 10 * UNIT
        havvenAmount = 10000 * UNIT
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some havvens for folks to convert Ether for
        self.havven.endow(MASTER, self.issuanceControllerContract.address,
                          havvenAmount)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvenAmount)

        # Pause the contract
        self.issuanceController.setPaused(self.contractOwner, True)

        # Attempt transfer
        self.assertReverts(self.issuanceController.exchangeEtherForHavvens,
                           exchanger, amount)

        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvenAmount)
        self.assertEqual(self.havven.balanceOf(exchanger), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
Beispiel #9
0
    def test_cannotExchangeEtherForHavvensIfPriceStale(self):
        amount = 10 * UNIT
        havvenAmount = 10000 * UNIT
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Push a price update
        self.issuanceController.setPriceStalePeriod(self.contractOwner, 1)
        timeSent = block_time()
        self.issuanceController.updatePrices(self.oracleAddress,
                                             self.usdToEthPrice,
                                             self.usdToHavPrice, timeSent)

        # Wait so the lastPriceUpdateTime is different to now
        fast_forward(2)

        # Set up the contract so it contains some havvens for folks to convert Ether for
        self.havven.endow(MASTER, self.issuanceControllerContract.address,
                          havvenAmount)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvenAmount)

        # Attempt transfer
        self.assertReverts(self.issuanceController.exchangeEtherForHavvens,
                           exchanger, amount)

        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.havven.balanceOf(self.issuanceControllerContract.address),
            havvenAmount)
        self.assertEqual(self.havven.balanceOf(exchanger), 0)
        self.assertEqual(startingFundsWalletEthBalance,
                         endingFundsWalletEthBalance)
Beispiel #10
0
    def test_ensureRateOnEtherToNominsExchangeSucceedsWithCorrectRate(self):
        amount = 3 * UNIT
        ethToSend = 1 * UNIT
        nominsBalance = (amount * self.usdToEthPrice) // UNIT
        nominsToSend = (ethToSend * self.usdToEthPrice) // UNIT
        baseToSend = self.nomin.amountReceived(nominsToSend)
        feesToPayInNomins = nominsToSend - baseToSend
        exchanger = self.participantAddresses[0]
        startingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)

        # Set up the contract so it contains some nomins for folks to convert Ether for
        self.nomin.giveNomins(MASTER, self.issuanceControllerContract.address,
                              nominsBalance)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance)

        # The transfer should succeed with a correct rate
        txr = self.issuanceController.exchangeEtherForNominsAtRate(
            exchanger, ethToSend, self.usdToEthPrice)

        # Ensure the result of the transfer is correct.
        endingFundsWalletEthBalance = get_eth_balance(self.fundsWallet)
        self.assertEqual(
            self.nomin.balanceOf(self.issuanceControllerContract.address),
            nominsBalance - nominsToSend)
        self.assertEqual(self.nomin.balanceOf(exchanger), baseToSend)
        self.assertEqual(self.nomin.feePool(), feesToPayInNomins)
        self.assertEqual(startingFundsWalletEthBalance + ethToSend,
                         endingFundsWalletEthBalance)