fn handle_redeem_transaction()

in fastpay_core/src/fastpay_smart_contract.rs [68:92]


    fn handle_redeem_transaction(
        &mut self,
        transaction: RedeemTransaction,
    ) -> Result<(), failure::Error> {
        transaction.transfer_certificate.check(&self.committee)?;
        let order = transaction.transfer_certificate.value;
        let transfer = &order.transfer;
        ensure!(
            self.total_balance >= transfer.amount,
            "The balance on the blockchain cannot be negative",
        );
        let account = self
            .accounts
            .entry(transfer.sender)
            .or_insert_with(AccountOnchainState::new);
        ensure!(
            account.last_redeemed < Some(transfer.sequence_number),
            "Transfer certificates to Primary must have increasing sequence numbers.",
        );
        account.last_redeemed = Some(transfer.sequence_number);
        self.total_balance = self.total_balance.try_sub(transfer.amount)?;
        // Transfer Primary coins to order.recipient

        Ok(())
    }