Explorar el Código

runtime/import: Subtract gas fee in get_slot()

parazyd hace 2 años
padre
commit
c03d48645c
Se han modificado 1 ficheros con 5 adiciones y 2 borrados
  1. 5 2
      src/runtime/import/util.rs

+ 5 - 2
src/runtime/import/util.rs

@@ -265,8 +265,8 @@ pub(crate) fn get_verifying_slot_epoch(ctx: FunctionEnvMut<Env>) -> u64 {
 ///
 ///
 /// On success, returns the index of the new object in the object store.
 /// On success, returns the index of the new object in the object store.
 /// Otherwise, returns an error code.
 /// Otherwise, returns an error code.
-pub(crate) fn get_slot(ctx: FunctionEnvMut<Env>, slot: u64) -> i64 {
-    let env = ctx.data();
+pub(crate) fn get_slot(mut ctx: FunctionEnvMut<Env>, slot: u64) -> i64 {
+    let (env, mut store) = ctx.data_and_store_mut();
     let cid = &env.contract_id;
     let cid = &env.contract_id;
 
 
     // Enforce function ACL
     // Enforce function ACL
@@ -292,6 +292,9 @@ pub(crate) fn get_slot(ctx: FunctionEnvMut<Env>, slot: u64) -> i64 {
         }
         }
     };
     };
 
 
+    // Subtract used gas. Here we count the size of the object.
+    env.subtract_gas(&mut store, ret.len() as u64);
+
     // Copy Vec<u8> to the VM
     // Copy Vec<u8> to the VM
     let mut objects = env.objects.borrow_mut();
     let mut objects = env.objects.borrow_mut();
     objects.push(ret.to_vec());
     objects.push(ret.to_vec());