Drain the entire compute budget (#12478)
This commit is contained in:
		@@ -286,8 +286,9 @@ pub struct MockComputeMeter {
 | 
			
		||||
}
 | 
			
		||||
impl ComputeMeter for MockComputeMeter {
 | 
			
		||||
    fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
 | 
			
		||||
        let exceeded = self.remaining < amount;
 | 
			
		||||
        self.remaining = self.remaining.saturating_sub(amount);
 | 
			
		||||
        if self.remaining == 0 {
 | 
			
		||||
        if exceeded {
 | 
			
		||||
            return Err(InstructionError::ComputationalBudgetExceeded);
 | 
			
		||||
        }
 | 
			
		||||
        Ok(())
 | 
			
		||||
 
 | 
			
		||||
@@ -287,8 +287,9 @@ mod tests {
 | 
			
		||||
    }
 | 
			
		||||
    impl ComputeMeter for MockComputeMeter {
 | 
			
		||||
        fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
 | 
			
		||||
            let exceeded = self.remaining < amount;
 | 
			
		||||
            self.remaining = self.remaining.saturating_sub(amount);
 | 
			
		||||
            if self.remaining == 0 {
 | 
			
		||||
            if exceeded {
 | 
			
		||||
                return Err(InstructionError::ComputationalBudgetExceeded);
 | 
			
		||||
            }
 | 
			
		||||
            Ok(())
 | 
			
		||||
 
 | 
			
		||||
@@ -1269,7 +1269,7 @@ mod tests {
 | 
			
		||||
        let addr = string.as_ptr() as *const _ as u64;
 | 
			
		||||
 | 
			
		||||
        let compute_meter: Rc<RefCell<dyn ComputeMeter>> =
 | 
			
		||||
            Rc::new(RefCell::new(MockComputeMeter { remaining: 4 }));
 | 
			
		||||
            Rc::new(RefCell::new(MockComputeMeter { remaining: 3 }));
 | 
			
		||||
        let log = Rc::new(RefCell::new(vec![]));
 | 
			
		||||
        let logger: Rc<RefCell<dyn Logger>> =
 | 
			
		||||
            Rc::new(RefCell::new(MockLogger { log: log.clone() }));
 | 
			
		||||
 
 | 
			
		||||
@@ -187,8 +187,9 @@ pub struct ThisComputeMeter {
 | 
			
		||||
}
 | 
			
		||||
impl ComputeMeter for ThisComputeMeter {
 | 
			
		||||
    fn consume(&mut self, amount: u64) -> Result<(), InstructionError> {
 | 
			
		||||
        let exceeded = self.remaining < amount;
 | 
			
		||||
        self.remaining = self.remaining.saturating_sub(amount);
 | 
			
		||||
        if self.remaining == 0 {
 | 
			
		||||
        if exceeded {
 | 
			
		||||
            return Err(InstructionError::ComputationalBudgetExceeded);
 | 
			
		||||
        }
 | 
			
		||||
        Ok(())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user