Skip to content

Commit 2892e4d

Browse files
authored
Merge pull request #492 from filecoin-project/fix/rand-gas
fix: charge randomness gas based on length of entropy
2 parents 9740386 + 1e72b30 commit 2892e4d

File tree

2 files changed

+22
-36
lines changed

2 files changed

+22
-36
lines changed

fvm/src/gas/price_list.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -564,19 +564,16 @@ impl PriceList {
564564
}
565565
}
566566

567-
/// Returns the base cost of the gas required for getting randomness from the client.
567+
/// Returns the cost of the gas required for getting randomness from the client, based on the
568+
/// numebr of bytes of entropy.
568569
#[inline]
569-
pub fn on_get_randomness_base(&self) -> GasCharge<'static> {
570-
GasCharge::new("OnGetRandomnessBase", self.get_randomness_base, 0)
571-
}
572-
573-
/// Returns the gas required for getting randomness from the client based on the number of bytes of randomness.
574-
#[inline]
575-
pub fn on_get_randomness_per_byte(&self, randomness_size: usize) -> GasCharge<'static> {
570+
pub fn on_get_randomness(&self, entropy_size: usize) -> GasCharge<'static> {
576571
GasCharge::new(
577-
"OnGetRandomnessPerByte",
578-
self.get_randomness_per_byte
579-
.saturating_mul(randomness_size as i64),
572+
"OnGetRandomness",
573+
self.get_randomness_base.saturating_add(
574+
self.get_randomness_per_byte
575+
.saturating_mul(entropy_size as i64),
576+
),
580577
0,
581578
)
582579
}

fvm/src/kernel/default.rs

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -793,21 +793,16 @@ where
793793
rand_epoch: ChainEpoch,
794794
entropy: &[u8],
795795
) -> Result<[u8; RANDOMNESS_LENGTH]> {
796-
self.call_manager
797-
.charge_gas(self.call_manager.price_list().on_get_randomness_base())?;
796+
self.call_manager.charge_gas(
797+
self.call_manager
798+
.price_list()
799+
.on_get_randomness(entropy.len()),
800+
)?;
798801
// TODO: Check error code
799-
let rand = self
800-
.call_manager
802+
self.call_manager
801803
.externs()
802804
.get_chain_randomness(personalization, rand_epoch, entropy)
803-
.or_illegal_argument()?;
804-
self.call_manager
805-
.charge_gas(
806-
self.call_manager
807-
.price_list()
808-
.on_get_randomness_per_byte(rand.len()),
809-
)
810-
.map(|_| rand)
805+
.or_illegal_argument()
811806
}
812807

813808
#[allow(unused)]
@@ -817,22 +812,16 @@ where
817812
rand_epoch: ChainEpoch,
818813
entropy: &[u8],
819814
) -> Result<[u8; RANDOMNESS_LENGTH]> {
820-
self.call_manager
821-
.charge_gas(self.call_manager.price_list().on_get_randomness_base())?;
815+
self.call_manager.charge_gas(
816+
self.call_manager
817+
.price_list()
818+
.on_get_randomness(entropy.len()),
819+
)?;
822820
// TODO: Check error code
823-
let rand = self
824-
.call_manager
821+
self.call_manager
825822
.externs()
826823
.get_beacon_randomness(personalization, rand_epoch, entropy)
827-
.or_illegal_argument()?;
828-
829-
self.call_manager
830-
.charge_gas(
831-
self.call_manager
832-
.price_list()
833-
.on_get_randomness_per_byte(rand.len()),
834-
)
835-
.map(|_| rand)
824+
.or_illegal_argument()
836825
}
837826
}
838827

0 commit comments

Comments
 (0)