From 3cc39fa49352c1330c0d5ef51e32a3c5961ec33e Mon Sep 17 00:00:00 2001 From: Dmitry Vagner Date: Fri, 14 Apr 2023 10:31:07 -0700 Subject: [PATCH] wip --- evm/src/extension_tower.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/evm/src/extension_tower.rs b/evm/src/extension_tower.rs index b9600fdc..6ffd528c 100644 --- a/evm/src/extension_tower.rs +++ b/evm/src/extension_tower.rs @@ -1201,13 +1201,13 @@ where } pub trait Stack { - fn to_stack(&self) -> Vec; + fn to_stack(&self) -> &[U256]; fn from_stack(stack: &[U256]) -> Self; } impl Stack for Fp6 { - fn to_stack(&self) -> Vec { + fn to_stack(&self) -> &[U256] { let f: [U256; 6] = unsafe { transmute(self) }; f.into_iter().collect() } @@ -1220,7 +1220,7 @@ impl Stack for Fp6 { } impl Stack for Fp12 { - fn to_stack(&self) -> Vec { + fn to_stack(&self) -> &[U256] { let f: [U256; 12] = unsafe { transmute(self) }; f.into_iter().collect() } @@ -1233,7 +1233,7 @@ impl Stack for Fp12 { } impl Stack for BLS381 { - fn to_stack(&self) -> Vec { + fn to_stack(&self) -> &[U256] { vec![self.lo(), self.hi()] } @@ -1246,10 +1246,15 @@ impl Stack for BLS381 { } impl Stack for Fp2 { - fn to_stack(&self) -> Vec { - let mut res = self.re.to_stack(); - res.extend(self.im.to_stack()); - res + fn to_stack(&self) -> &[U256] { + let re_stack = self.re.to_stack(); + let im_stack = self.im.to_stack(); + let mut res = [U256::default(); 2 * N]; + + for i in 0..N { + res[i] = re_stack[i]; + res[N + i] = im_stack[i]; + } } fn from_stack(stack: &[U256]) -> Fp2 { @@ -1260,7 +1265,7 @@ impl Stack for Fp2 { } impl Stack for Fp6 { - fn to_stack(&self) -> Vec { + fn to_stack(&self) -> &[U256] { let mut res = self.t0.to_stack(); res.extend(self.t1.to_stack()); res.extend(self.t2.to_stack()); @@ -1276,7 +1281,7 @@ impl Stack for Fp6 { } impl Stack for Fp12 { - fn to_stack(&self) -> Vec { + fn to_stack(&self) -> &[U256] { let mut res = self.z0.to_stack(); res.extend(self.z1.to_stack()); res